|
- // Package diff implements line oriented diffs, similar to the ancient
- // Unix diff command.
- //
- // The current implementation is just a wrapper around Sergi's
- // go-diff/diffmatchpatch library, which is a go port of Neil
- // Fraser's google-diff-match-patch code
- package diff
-
- import (
- "bytes"
-
- "github.com/sergi/go-diff/diffmatchpatch"
- )
-
- // Do computes the (line oriented) modifications needed to turn the src
- // string into the dst string.
- func Do(src, dst string) (diffs []diffmatchpatch.Diff) {
- dmp := diffmatchpatch.New()
- wSrc, wDst, warray := dmp.DiffLinesToRunes(src, dst)
- diffs = dmp.DiffMainRunes(wSrc, wDst, false)
- diffs = dmp.DiffCharsToLines(diffs, warray)
- return diffs
- }
-
- // Dst computes and returns the destination text.
- func Dst(diffs []diffmatchpatch.Diff) string {
- var text bytes.Buffer
- for _, d := range diffs {
- if d.Type != diffmatchpatch.DiffDelete {
- text.WriteString(d.Text)
- }
- }
- return text.String()
- }
-
- // Src computes and returns the source text
- func Src(diffs []diffmatchpatch.Diff) string {
- var text bytes.Buffer
- for _, d := range diffs {
- if d.Type != diffmatchpatch.DiffInsert {
- text.WriteString(d.Text)
- }
- }
- return text.String()
- }
|