Refactor code style and functionality
diff --git a/diffmatchpatch/diff.go b/diffmatchpatch/diff.go index 596ad0f..3b39e08 100644 --- a/diffmatchpatch/diff.go +++ b/diffmatchpatch/diff.go
@@ -1280,19 +1280,10 @@ } // DiffFromDelta given the original text1, and an encoded string which describes the operations required to transform text1 into text2, comAdde the full diff. -func (dmp *DiffMatchPatch) DiffFromDelta(text1, delta string) (diffs []Diff, err error) { - diffs = []Diff{} +func (dmp *DiffMatchPatch) DiffFromDelta(text1 string, delta string) (diffs []Diff, err error) { + i := 0 - defer func() { - if r := recover(); r != nil { - err = r.(error) - } - }() - - pointer := 0 // Cursor in text1 - tokens := strings.Split(delta, "\t") - - for _, token := range tokens { + for _, token := range strings.Split(delta, "\t") { if len(token) == 0 { // Blank tokens are ok (from a trailing \t). continue @@ -1312,18 +1303,19 @@ if !utf8.ValidString(param) { return nil, fmt.Errorf("invalid UTF-8 token: %q", param) } + diffs = append(diffs, Diff{DiffInsert, param}) case '=', '-': n, err := strconv.ParseInt(param, 10, 0) if err != nil { - return diffs, err + return nil, err } else if n < 0 { - return diffs, errors.New("Negative number in DiffFromDelta: " + param) + return nil, errors.New("Negative number in DiffFromDelta: " + param) } // Remember that string slicing is by byte - we want by rune here. - text := string([]rune(text1)[pointer : pointer+int(n)]) - pointer += int(n) + text := string([]rune(text1)[i : i+int(n)]) + i += int(n) if op == '=' { diffs = append(diffs, Diff{DiffEqual, text}) @@ -1332,12 +1324,13 @@ } default: // Anything else is an error. - return diffs, errors.New("Invalid diff operation in DiffFromDelta: " + string(token[0])) + return nil, errors.New("Invalid diff operation in DiffFromDelta: " + string(token[0])) } } - if pointer != len([]rune(text1)) { - return diffs, fmt.Errorf("Delta length (%v) smaller than source text length (%v)", pointer, len(text1)) + if i != len([]rune(text1)) { + return nil, fmt.Errorf("Delta length (%v) smaller than source text length (%v)", i, len(text1)) } - return diffs, err + + return diffs, nil }