Documentation

Overview

    Package difflib is a partial port of Python difflib module.
    

    Original source: https://github.com/pmezard/go-difflib

    This file is trimmed to only the parts used by this repository.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    This section is empty.

    Types

    type Match

    type Match struct {
    	A    int
    	B    int
    	Size int
    }

    type OpCode

    type OpCode struct {
    	Tag byte
    	I1  int
    	I2  int
    	J1  int
    	J2  int
    }

    type SequenceMatcher

    type SequenceMatcher struct {
    	IsJunk func(string) bool
    	// contains filtered or unexported fields
    }

      SequenceMatcher compares sequence of strings. The basic algorithm predates, and is a little fancier than, an algorithm published in the late 1980's by Ratcliff and Obershelp under the hyperbolic name "gestalt pattern matching". The basic idea is to find the longest contiguous matching subsequence that contains no "junk" elements (R-O doesn't address junk). The same idea is then applied recursively to the pieces of the sequences to the left and to the right of the matching subsequence. This does not yield minimal edit sequences, but does tend to yield matches that "look right" to people.

      SequenceMatcher tries to compute a "human-friendly diff" between two sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the longest *contiguous* & junk-free matching subsequence. That's what catches peoples' eyes. The Windows(tm) windiff has another interesting notion, pairing up elements that appear uniquely in each sequence. That, and the method here, appear to yield more intuitive difference reports than does diff. This method appears to be the least vulnerable to synching up on blocks of "junk lines", though (like blank lines in ordinary text files, or maybe "<P>" lines in HTML files). That may be because this is the only method of the 3 that has a *concept* of "junk" <wink>.

      Timing: Basic R-O is cubic time worst case and quadratic time expected case. SequenceMatcher is quadratic time for the worst case and has expected-case behavior dependent in a complicated way on how many elements the sequences have in common; best case time is linear.

      func NewMatcher

      func NewMatcher(a, b []string) *SequenceMatcher

      func (*SequenceMatcher) GetGroupedOpCodes

      func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode

        Isolate change clusters by eliminating ranges with no changes.

        Return a generator of groups with up to n lines of context. Each group is in the same format as returned by GetOpCodes().

        func (*SequenceMatcher) GetMatchingBlocks

        func (m *SequenceMatcher) GetMatchingBlocks() []Match

          Return list of triples describing matching subsequences.

          Each triple is of the form (i, j, n), and means that a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are adjacent triples in the list, and the second is not the last triple in the list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe adjacent equal blocks.

          The last triple is a dummy, (len(a), len(b), 0), and is the only triple with n==0.

          func (*SequenceMatcher) GetOpCodes

          func (m *SequenceMatcher) GetOpCodes() []OpCode

            Return list of 5-tuples describing how to turn a into b.

            Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the tuple preceding it, and likewise for j1 == the previous j2.

            The tags are characters, with these meanings:

            'r' (replace): a[i1:i2] should be replaced by b[j1:j2]

            'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case.

            'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case.

            'e' (equal): a[i1:i2] == b[j1:j2]

            func (*SequenceMatcher) SetSeq1

            func (m *SequenceMatcher) SetSeq1(a []string)

              Set the first sequence to be compared. The second sequence to be compared is not changed.

              SequenceMatcher computes and caches detailed information about the second sequence, so if you want to compare one sequence S against many sequences, use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other sequences.

              See also SetSeqs() and SetSeq2().

              func (*SequenceMatcher) SetSeq2

              func (m *SequenceMatcher) SetSeq2(b []string)

                Set the second sequence to be compared. The first sequence to be compared is not changed.

                func (*SequenceMatcher) SetSeqs

                func (m *SequenceMatcher) SetSeqs(a, b []string)

                  Set two sequences to be compared.

                  Source Files