diffmatchpatch

package
v0.0.0-...-ffccea1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2015 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package diffmatchpatch offers robust algorithms to perform the operations required for synchronizing plain text.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Diff

type Diff struct {
	Type Operation
	Text string
}

Diff represents one diff operation

type DiffMatchPatch

type DiffMatchPatch struct {
	// Number of seconds to map a diff before giving up (0 for infinity).
	DiffTimeout time.Duration
	// Cost of an empty edit operation in terms of edit characters.
	DiffEditCost int
	// How far to search for a match (0 = exact location, 1000+ = broad match).
	// A match this many characters away from the expected location will add
	// 1.0 to the score (0.0 is a perfect match).
	MatchDistance int
	// When deleting a large block of text (over ~64 characters), how close do
	// the contents have to be to match the expected contents. (0.0 = perfection,
	// 1.0 = very loose).  Note that Match_Threshold controls how closely the
	// end points of a delete need to match.
	PatchDeleteThreshold float64
	// Chunk size for context length.
	PatchMargin int
	// The number of bits in an int.
	MatchMaxBits int
	// At what point is no match declared (0.0 = perfection, 1.0 = very loose).
	MatchThreshold float64
}

func New

func New() *DiffMatchPatch

New creates a new DiffMatchPatch object with default parameters.

func (*DiffMatchPatch) DiffBisect

func (dmp *DiffMatchPatch) DiffBisect(text1, text2 string, deadline time.Time) []Diff

DiffBisect finds the 'middle snake' of a diff, split the problem in two and return the recursively constructed diff. See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.

func (*DiffMatchPatch) DiffCharsToLines

func (dmp *DiffMatchPatch) DiffCharsToLines(diffs []Diff, lineArray []string) []Diff

DiffCharsToLines rehydrates the text in a diff from a string of line hashes to real lines of text.

func (*DiffMatchPatch) DiffCleanupEfficiency

func (dmp *DiffMatchPatch) DiffCleanupEfficiency(diffs []Diff) []Diff

Diff_cleanupEfficiency reduces the number of edits by eliminating operationally trivial equalities.

func (*DiffMatchPatch) DiffCleanupMerge

func (dmp *DiffMatchPatch) DiffCleanupMerge(diffs []Diff) []Diff

Diff_cleanupMerge reorders and merges like edit sections. Merge equalities. Any edit section can move as long as it doesn't cross an equality.

func (*DiffMatchPatch) DiffCleanupSemantic

func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff

Diff_cleanupSemantic reduces the number of edits by eliminating semantically trivial equalities.

func (*DiffMatchPatch) DiffCleanupSemanticLossless

func (dmp *DiffMatchPatch) DiffCleanupSemanticLossless(diffs []Diff) []Diff

Diff_cleanupSemanticLossless looks for single edits surrounded on both sides by equalities which can be shifted sideways to align the edit to a word boundary. e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.

func (*DiffMatchPatch) DiffCommonOverlap

func (dmp *DiffMatchPatch) DiffCommonOverlap(text1 string, text2 string) int

DiffCommonOverlap determines if the suffix of one string is the prefix of another.

func (*DiffMatchPatch) DiffCommonPrefix

func (dmp *DiffMatchPatch) DiffCommonPrefix(text1, text2 string) int

DiffCommonPrefix determines the common prefix length of two strings.

func (*DiffMatchPatch) DiffCommonSuffix

func (dmp *DiffMatchPatch) DiffCommonSuffix(text1, text2 string) int

DiffCommonSuffix determines the common suffix length of two strings.

func (*DiffMatchPatch) DiffFromDelta

func (dmp *DiffMatchPatch) DiffFromDelta(text1, delta string) (diffs []Diff, err error)

Diff_fromDelta. Given the original text1, and an encoded string which describes the operations required to transform text1 into text2, comAdde the full diff.

func (*DiffMatchPatch) DiffHalfMatch

func (dmp *DiffMatchPatch) DiffHalfMatch(text1, text2 string) []string

DiffHalfMatch checks whether the two texts share a substring which is at least half the length of the longer text. This speedup can produce non-minimal diffs.

func (*DiffMatchPatch) DiffLevenshtein

func (dmp *DiffMatchPatch) DiffLevenshtein(diffs []Diff) int

Diff_levenshtein computes the Levenshtein distance; the number of inserted, deleted or substituted characters.

func (*DiffMatchPatch) DiffLinesToChars

func (dmp *DiffMatchPatch) DiffLinesToChars(text1, text2 string) (string, string, []string)

DiffLinesToChars split two texts into a list of strings. Reduces the texts to a string of hashes where each Unicode character represents one line. It's slightly faster to call DiffLinesToRunes first, followed by DiffMainRunes.

func (*DiffMatchPatch) DiffLinesToRunes

func (dmp *DiffMatchPatch) DiffLinesToRunes(text1, text2 string) ([]rune, []rune, []string)

DiffLinesToRunes splits two texts into a list of runes. Each rune represents one line.

func (*DiffMatchPatch) DiffMain

func (dmp *DiffMatchPatch) DiffMain(text1, text2 string, checklines bool) []Diff

DiffMain finds the differences between two texts.

func (*DiffMatchPatch) DiffMainRunes

func (dmp *DiffMatchPatch) DiffMainRunes(text1, text2 []rune, checklines bool) []Diff

DiffMainRunes finds the differences between two rune sequences.

func (*DiffMatchPatch) DiffPrettyHtml

func (dmp *DiffMatchPatch) DiffPrettyHtml(diffs []Diff) string

DiffPrettyHtml converts a []Diff into a pretty HTML report. It is intended as an example from which to write one's own display functions.

func (*DiffMatchPatch) DiffText1

func (dmp *DiffMatchPatch) DiffText1(diffs []Diff) string

Diff_text1 computes and returns the source text (all equalities and deletions).

func (*DiffMatchPatch) DiffText2

func (dmp *DiffMatchPatch) DiffText2(diffs []Diff) string

Diff_text2 computes and returns the destination text (all equalities and insertions).

func (*DiffMatchPatch) DiffToDelta

func (dmp *DiffMatchPatch) DiffToDelta(diffs []Diff) string

Diff_toDelta crushes the diff into an encoded string which describes the operations required to transform text1 into text2. E.g. =3\t-2\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'. Operations are tab-separated. Inserted text is escaped using %xx notation.

func (*DiffMatchPatch) DiffXIndex

func (dmp *DiffMatchPatch) DiffXIndex(diffs []Diff, loc int) int

Diff_xIndex. loc is a location in text1, comAdde and return the equivalent location in text2. e.g. "The cat" vs "The big cat", 1->1, 5->8

func (*DiffMatchPatch) MatchAlphabet

func (dmp *DiffMatchPatch) MatchAlphabet(pattern string) map[byte]int

MatchAlphabet initialises the alphabet for the Bitap algorithm.

func (*DiffMatchPatch) MatchBitap

func (dmp *DiffMatchPatch) MatchBitap(text, pattern string, loc int) int

MatchBitap locates the best instance of 'pattern' in 'text' near 'loc' using the Bitap algorithm. Returns -1 if no match found.

func (*DiffMatchPatch) MatchMain

func (dmp *DiffMatchPatch) MatchMain(text, pattern string, loc int) int

MatchMain locates the best instance of 'pattern' in 'text' near 'loc'. Returns -1 if no match found.

func (*DiffMatchPatch) PatchAddContext

func (dmp *DiffMatchPatch) PatchAddContext(patch Patch, text string) Patch

PatchAddContext increases the context until it is unique, but doesn't let the pattern expand beyond MatchMaxBits.

func (*DiffMatchPatch) PatchAddPadding

func (dmp *DiffMatchPatch) PatchAddPadding(patches []Patch) string

PatchAddPadding adds some padding on text start and end so that edges can match something. Intended to be called only from within patch_apply.

func (*DiffMatchPatch) PatchApply

func (dmp *DiffMatchPatch) PatchApply(patches []Patch, text string) (string, []bool)

PatchApply merges a set of patches onto the text. Returns a patched text, as well as an array of true/false values indicating which patches were applied.

func (*DiffMatchPatch) PatchDeepCopy

func (dmp *DiffMatchPatch) PatchDeepCopy(patches []Patch) []Patch

PatchDeepCopy returns an array that is identical to a given an array of patches.

func (*DiffMatchPatch) PatchFromText

func (dmp *DiffMatchPatch) PatchFromText(textline string) ([]Patch, error)

PatchFromText parses a textual representation of patches and returns a List of Patch objects.

func (*DiffMatchPatch) PatchMake

func (dmp *DiffMatchPatch) PatchMake(opt ...interface{}) []Patch

func (*DiffMatchPatch) PatchSplitMax

func (dmp *DiffMatchPatch) PatchSplitMax(patches []Patch) []Patch

PatchSplitMax looks through the patches and breaks up any which are longer than the maximum limit of the match algorithm. Intended to be called only from within patch_apply.

func (*DiffMatchPatch) PatchToText

func (dmp *DiffMatchPatch) PatchToText(patches []Patch) string

PatchToText takes a list of patches and returns a textual representation.

type Element

type Element struct {
	// contains filtered or unexported fields
}

type Operation

type Operation int8
const (
	DiffDelete Operation = -1
	DiffInsert Operation = 1
	DiffEqual  Operation = 0
)

type Patch

type Patch struct {
	// contains filtered or unexported fields
}

Patch represents one patch operation.

func (*Patch) String

func (p *Patch) String() string

String emulates GNU diff's format. Header: @@ -382,8 +481,9 @@ Indicies are printed as 1-based, not 0-based.

type Stack

type Stack struct {
	// contains filtered or unexported fields
}

func (*Stack) Clear

func (s *Stack) Clear()

Clear empties the stack

func (*Stack) Len

func (s *Stack) Len() int

Len returns the stack's length

func (*Stack) Peek

func (s *Stack) Peek() (value interface{})

Peek returns the value of the element on the top of the stack but don't remove it. If the stack is empty, return nil

func (*Stack) Pop

func (s *Stack) Pop() (value interface{})

Pop removes the top element from the stack and return its value If the stack is empty, return nil

func (*Stack) Push

func (s *Stack) Push(value interface{})

Push appends a new element onto the stack

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL