Merge pull request #83 from sergi/support-go-1.9
Support Go 1.9 and remove 1.7
diff --git a/diffmatchpatch/patch.go b/diffmatchpatch/patch.go
index 116c043..223c43c 100644
--- a/diffmatchpatch/patch.go
+++ b/diffmatchpatch/patch.go
@@ -21,32 +21,32 @@
// Patch represents one patch operation.
type Patch struct {
diffs []Diff
- start1 int
- start2 int
- length1 int
- length2 int
+ Start1 int
+ Start2 int
+ Length1 int
+ Length2 int
}
// String emulates GNU diff's format.
// Header: @@ -382,8 +481,9 @@
-// Indicies are printed as 1-based, not 0-based.
+// Indices are printed as 1-based, not 0-based.
func (p *Patch) String() string {
var coords1, coords2 string
- if p.length1 == 0 {
- coords1 = strconv.Itoa(p.start1) + ",0"
- } else if p.length1 == 1 {
- coords1 = strconv.Itoa(p.start1 + 1)
+ if p.Length1 == 0 {
+ coords1 = strconv.Itoa(p.Start1) + ",0"
+ } else if p.Length1 == 1 {
+ coords1 = strconv.Itoa(p.Start1 + 1)
} else {
- coords1 = strconv.Itoa(p.start1+1) + "," + strconv.Itoa(p.length1)
+ coords1 = strconv.Itoa(p.Start1+1) + "," + strconv.Itoa(p.Length1)
}
- if p.length2 == 0 {
- coords2 = strconv.Itoa(p.start2) + ",0"
- } else if p.length2 == 1 {
- coords2 = strconv.Itoa(p.start2 + 1)
+ if p.Length2 == 0 {
+ coords2 = strconv.Itoa(p.Start2) + ",0"
+ } else if p.Length2 == 1 {
+ coords2 = strconv.Itoa(p.Start2 + 1)
} else {
- coords2 = strconv.Itoa(p.start2+1) + "," + strconv.Itoa(p.length2)
+ coords2 = strconv.Itoa(p.Start2+1) + "," + strconv.Itoa(p.Length2)
}
var text bytes.Buffer
@@ -76,37 +76,37 @@
return patch
}
- pattern := text[patch.start2 : patch.start2+patch.length1]
+ pattern := text[patch.Start2 : patch.Start2+patch.Length1]
padding := 0
// Look for the first and last matches of pattern in text. If two different matches are found, increase the pattern length.
for strings.Index(text, pattern) != strings.LastIndex(text, pattern) &&
len(pattern) < dmp.MatchMaxBits-2*dmp.PatchMargin {
padding += dmp.PatchMargin
- maxStart := max(0, patch.start2-padding)
- minEnd := min(len(text), patch.start2+patch.length1+padding)
+ maxStart := max(0, patch.Start2-padding)
+ minEnd := min(len(text), patch.Start2+patch.Length1+padding)
pattern = text[maxStart:minEnd]
}
// Add one chunk for good luck.
padding += dmp.PatchMargin
// Add the prefix.
- prefix := text[max(0, patch.start2-padding):patch.start2]
+ prefix := text[max(0, patch.Start2-padding):patch.Start2]
if len(prefix) != 0 {
patch.diffs = append([]Diff{Diff{DiffEqual, prefix}}, patch.diffs...)
}
// Add the suffix.
- suffix := text[patch.start2+patch.length1 : min(len(text), patch.start2+patch.length1+padding)]
+ suffix := text[patch.Start2+patch.Length1 : min(len(text), patch.Start2+patch.Length1+padding)]
if len(suffix) != 0 {
patch.diffs = append(patch.diffs, Diff{DiffEqual, suffix})
}
// Roll back the start points.
- patch.start1 -= len(prefix)
- patch.start2 -= len(prefix)
+ patch.Start1 -= len(prefix)
+ patch.Start2 -= len(prefix)
// Extend the lengths.
- patch.length1 += len(prefix) + len(suffix)
- patch.length2 += len(prefix) + len(suffix)
+ patch.Length1 += len(prefix) + len(suffix)
+ patch.Length2 += len(prefix) + len(suffix)
return patch
}
@@ -155,18 +155,18 @@
for i, aDiff := range diffs {
if len(patch.diffs) == 0 && aDiff.Type != DiffEqual {
// A new patch starts here.
- patch.start1 = charCount1
- patch.start2 = charCount2
+ patch.Start1 = charCount1
+ patch.Start2 = charCount2
}
switch aDiff.Type {
case DiffInsert:
patch.diffs = append(patch.diffs, aDiff)
- patch.length2 += len(aDiff.Text)
+ patch.Length2 += len(aDiff.Text)
postpatchText = postpatchText[:charCount2] +
aDiff.Text + postpatchText[charCount2:]
case DiffDelete:
- patch.length1 += len(aDiff.Text)
+ patch.Length1 += len(aDiff.Text)
patch.diffs = append(patch.diffs, aDiff)
postpatchText = postpatchText[:charCount2] + postpatchText[charCount2+len(aDiff.Text):]
case DiffEqual:
@@ -174,8 +174,8 @@
len(patch.diffs) != 0 && i != len(diffs)-1 {
// Small equality inside a patch.
patch.diffs = append(patch.diffs, aDiff)
- patch.length1 += len(aDiff.Text)
- patch.length2 += len(aDiff.Text)
+ patch.Length1 += len(aDiff.Text)
+ patch.Length2 += len(aDiff.Text)
}
if len(aDiff.Text) >= 2*dmp.PatchMargin {
// Time for a new patch.
@@ -219,10 +219,10 @@
aDiff.Text,
})
}
- patchCopy.start1 = aPatch.start1
- patchCopy.start2 = aPatch.start2
- patchCopy.length1 = aPatch.length1
- patchCopy.length2 = aPatch.length2
+ patchCopy.Start1 = aPatch.Start1
+ patchCopy.Start2 = aPatch.Start2
+ patchCopy.Length1 = aPatch.Length1
+ patchCopy.Length2 = aPatch.Length2
patchesCopy = append(patchesCopy, patchCopy)
}
return patchesCopy
@@ -246,7 +246,7 @@
delta := 0
results := make([]bool, len(patches))
for _, aPatch := range patches {
- expectedLoc := aPatch.start2 + delta
+ expectedLoc := aPatch.Start2 + delta
text1 := dmp.DiffText1(aPatch.diffs)
var startLoc int
endLoc := -1
@@ -268,7 +268,7 @@
// No match found. :(
results[x] = false
// Subtract the delta for this failed patch from subsequent patches.
- delta -= aPatch.length2 - aPatch.length1
+ delta -= aPatch.Length2 - aPatch.Length1
} else {
// Found a match. :)
results[x] = true
@@ -329,26 +329,26 @@
// Bump all the patches forward.
for i := range patches {
- patches[i].start1 += paddingLength
- patches[i].start2 += paddingLength
+ patches[i].Start1 += paddingLength
+ patches[i].Start2 += paddingLength
}
// Add some padding on start of first diff.
if len(patches[0].diffs) == 0 || patches[0].diffs[0].Type != DiffEqual {
// Add nullPadding equality.
patches[0].diffs = append([]Diff{Diff{DiffEqual, nullPadding}}, patches[0].diffs...)
- patches[0].start1 -= paddingLength // Should be 0.
- patches[0].start2 -= paddingLength // Should be 0.
- patches[0].length1 += paddingLength
- patches[0].length2 += paddingLength
+ patches[0].Start1 -= paddingLength // Should be 0.
+ patches[0].Start2 -= paddingLength // Should be 0.
+ patches[0].Length1 += paddingLength
+ patches[0].Length2 += paddingLength
} else if paddingLength > len(patches[0].diffs[0].Text) {
// Grow first equality.
extraLength := paddingLength - len(patches[0].diffs[0].Text)
patches[0].diffs[0].Text = nullPadding[len(patches[0].diffs[0].Text):] + patches[0].diffs[0].Text
- patches[0].start1 -= extraLength
- patches[0].start2 -= extraLength
- patches[0].length1 += extraLength
- patches[0].length2 += extraLength
+ patches[0].Start1 -= extraLength
+ patches[0].Start2 -= extraLength
+ patches[0].Length1 += extraLength
+ patches[0].Length2 += extraLength
}
// Add some padding on end of last diff.
@@ -356,15 +356,15 @@
if len(patches[last].diffs) == 0 || patches[last].diffs[len(patches[last].diffs)-1].Type != DiffEqual {
// Add nullPadding equality.
patches[last].diffs = append(patches[last].diffs, Diff{DiffEqual, nullPadding})
- patches[last].length1 += paddingLength
- patches[last].length2 += paddingLength
+ patches[last].Length1 += paddingLength
+ patches[last].Length2 += paddingLength
} else if paddingLength > len(patches[last].diffs[len(patches[last].diffs)-1].Text) {
// Grow last equality.
lastDiff := patches[last].diffs[len(patches[last].diffs)-1]
extraLength := paddingLength - len(lastDiff.Text)
patches[last].diffs[len(patches[last].diffs)-1].Text += nullPadding[:extraLength]
- patches[last].length1 += extraLength
- patches[last].length2 += extraLength
+ patches[last].Length1 += extraLength
+ patches[last].Length2 += extraLength
}
return nullPadding
@@ -375,7 +375,7 @@
func (dmp *DiffMatchPatch) PatchSplitMax(patches []Patch) []Patch {
patchSize := dmp.MatchMaxBits
for x := 0; x < len(patches); x++ {
- if patches[x].length1 <= patchSize {
+ if patches[x].Length1 <= patchSize {
continue
}
bigpatch := patches[x]
@@ -383,46 +383,46 @@
patches = append(patches[:x], patches[x+1:]...)
x--
- start1 := bigpatch.start1
- start2 := bigpatch.start2
+ Start1 := bigpatch.Start1
+ Start2 := bigpatch.Start2
precontext := ""
for len(bigpatch.diffs) != 0 {
// Create one of several smaller patches.
patch := Patch{}
empty := true
- patch.start1 = start1 - len(precontext)
- patch.start2 = start2 - len(precontext)
+ patch.Start1 = Start1 - len(precontext)
+ patch.Start2 = Start2 - len(precontext)
if len(precontext) != 0 {
- patch.length1 = len(precontext)
- patch.length2 = len(precontext)
+ patch.Length1 = len(precontext)
+ patch.Length2 = len(precontext)
patch.diffs = append(patch.diffs, Diff{DiffEqual, precontext})
}
- for len(bigpatch.diffs) != 0 && patch.length1 < patchSize-dmp.PatchMargin {
+ for len(bigpatch.diffs) != 0 && patch.Length1 < patchSize-dmp.PatchMargin {
diffType := bigpatch.diffs[0].Type
diffText := bigpatch.diffs[0].Text
if diffType == DiffInsert {
// Insertions are harmless.
- patch.length2 += len(diffText)
- start2 += len(diffText)
+ patch.Length2 += len(diffText)
+ Start2 += len(diffText)
patch.diffs = append(patch.diffs, bigpatch.diffs[0])
bigpatch.diffs = bigpatch.diffs[1:]
empty = false
} else if diffType == DiffDelete && len(patch.diffs) == 1 && patch.diffs[0].Type == DiffEqual && len(diffText) > 2*patchSize {
// This is a large deletion. Let it pass in one chunk.
- patch.length1 += len(diffText)
- start1 += len(diffText)
+ patch.Length1 += len(diffText)
+ Start1 += len(diffText)
empty = false
patch.diffs = append(patch.diffs, Diff{diffType, diffText})
bigpatch.diffs = bigpatch.diffs[1:]
} else {
// Deletion or equality. Only take as much as we can stomach.
- diffText = diffText[:min(len(diffText), patchSize-patch.length1-dmp.PatchMargin)]
+ diffText = diffText[:min(len(diffText), patchSize-patch.Length1-dmp.PatchMargin)]
- patch.length1 += len(diffText)
- start1 += len(diffText)
+ patch.Length1 += len(diffText)
+ Start1 += len(diffText)
if diffType == DiffEqual {
- patch.length2 += len(diffText)
- start2 += len(diffText)
+ patch.Length2 += len(diffText)
+ Start2 += len(diffText)
} else {
empty = false
}
@@ -448,8 +448,8 @@
}
if len(postcontext) != 0 {
- patch.length1 += len(postcontext)
- patch.length2 += len(postcontext)
+ patch.Length1 += len(postcontext)
+ patch.Length2 += len(postcontext)
if len(patch.diffs) != 0 && patch.diffs[len(patch.diffs)-1].Type == DiffEqual {
patch.diffs[len(patch.diffs)-1].Text += postcontext
} else {
@@ -496,27 +496,27 @@
patch = Patch{}
m := patchHeader.FindStringSubmatch(text[textPointer])
- patch.start1, _ = strconv.Atoi(m[1])
+ patch.Start1, _ = strconv.Atoi(m[1])
if len(m[2]) == 0 {
- patch.start1--
- patch.length1 = 1
+ patch.Start1--
+ patch.Length1 = 1
} else if m[2] == "0" {
- patch.length1 = 0
+ patch.Length1 = 0
} else {
- patch.start1--
- patch.length1, _ = strconv.Atoi(m[2])
+ patch.Start1--
+ patch.Length1, _ = strconv.Atoi(m[2])
}
- patch.start2, _ = strconv.Atoi(m[3])
+ patch.Start2, _ = strconv.Atoi(m[3])
if len(m[4]) == 0 {
- patch.start2--
- patch.length2 = 1
+ patch.Start2--
+ patch.Length2 = 1
} else if m[4] == "0" {
- patch.length2 = 0
+ patch.Length2 = 0
} else {
- patch.start2--
- patch.length2, _ = strconv.Atoi(m[4])
+ patch.Start2--
+ patch.Length2, _ = strconv.Atoi(m[4])
}
textPointer++
diff --git a/diffmatchpatch/patch_test.go b/diffmatchpatch/patch_test.go
index fa1763e..b019f88 100644
--- a/diffmatchpatch/patch_test.go
+++ b/diffmatchpatch/patch_test.go
@@ -26,10 +26,10 @@
for i, tc := range []TestCase{
{
Patch: Patch{
- start1: 20,
- start2: 21,
- length1: 18,
- length2: 17,
+ Start1: 20,
+ Start2: 21,
+ Length1: 18,
+ Length2: 17,
diffs: []Diff{
{DiffEqual, "jump"},