dmp

package
v0.0.0-...-e5acf11 Latest Latest
Warning

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

Go to latest
Published: May 6, 2016 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

*

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DiffCommonOverlap

func DiffCommonOverlap(s1, s2 string) int

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

func DiffCommonPrefix

func DiffCommonPrefix(s1, s2 string) int

DiffCommonPrefix determines the common prefix length of two strings.

func DiffCommonSuffix

func DiffCommonSuffix(s1, s2 string) int

DiffCommonSuffix determines the common suffix length of two strings.

func DiffLevenshtein

func DiffLevenshtein(diffs []Diff) int

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

func DiffLinesToChars

func DiffLinesToChars(s1, s2 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 DiffLinesToRunes

func DiffLinesToRunes(s1, s2 string) ([]rune, []rune, []string)

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

func DiffPrettyHtml

func 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 DiffText1

func DiffText1(diffs []Diff) string

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

func DiffText2

func DiffText2(diffs []Diff) string

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

func DiffToDelta

func DiffToDelta(diffs []Diff) string

DiffToDelta 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 DiffXIndex

func DiffXIndex(diffs []Diff, loc int) int

DiffXIndex. 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 MatchAlphabet

func MatchAlphabet(pattern string) map[byte]int

MatchAlphabet initialises the alphabet for the Bitap algorithm.

func PatchToText

func PatchToText(patches []Patch) string

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

Types

type DMP

type DMP 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() *DMP

New creates a new DMP object with default parameters.

func (*DMP) Apply

func (dmp *DMP) Apply(ps []Patch, s string) (string, []bool)

Apply 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 (*DMP) DiffBisect

func (dmp *DMP) DiffBisect(s1, s2 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 (*DMP) DiffCleanupEfficiency

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

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

func (*DMP) DiffHalfMatch

func (dmp *DMP) 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 (*DMP) DiffMain

func (dmp *DMP) DiffMain(s1, s2 string, checkLines bool) []Diff

DiffMain finds the differences between two texts.

func (*DMP) DiffMainRunes

func (dmp *DMP) DiffMainRunes(s1, s2 []rune, checkLines bool) []Diff

DiffMainRunes finds the differences between two rune sequences.

func (*DMP) MatchBitap

func (dmp *DMP) 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 (*DMP) MatchMain

func (dmp *DMP) MatchMain(s, pattern string, loc int) int

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

func (*DMP) PatchAddContext

func (dmp *DMP) PatchAddContext(p Patch, s string) Patch

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

func (*DMP) PatchAddPadding

func (dmp *DMP) PatchAddPadding(ps []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 (*DMP) PatchMake

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

func (*DMP) PatchSplitMax

func (dmp *DMP) PatchSplitMax(ps []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.

type Diff

type Diff struct {
	Type Operation
	Text string
}

Diff represents one diff operation

func DiffCharsToLines

func 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 DiffCleanupMerge

func DiffCleanupMerge(ds []Diff) []Diff

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

func DiffCleanupSemantic

func DiffCleanupSemantic(diffs []Diff) []Diff

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

func DiffCleanupSemanticLossless

func DiffCleanupSemanticLossless(diffs []Diff) []Diff

DiffCleanupSemanticLossless 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 DiffFromDelta

func DiffFromDelta(s, delta string) ([]Diff, error)

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

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 PatchDeepCopy

func PatchDeepCopy(patches []Patch) []Patch

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

func PatchFromText

func PatchFromText(textline string) ([]Patch, error)

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

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