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"},