Add some padding on text start and end so that edges can match something. Intended to be called only from within patch_apply. @param patches Array of Patch objects. @return The padding string added to each side.
(LinkedList<Patch> patches)
| 2067 | * @return The padding string added to each side. |
| 2068 | */ |
| 2069 | public String patch_addPadding(LinkedList<Patch> patches) { |
| 2070 | short paddingLength = this.Patch_Margin; |
| 2071 | String nullPadding = ""; |
| 2072 | for (short x = 1; x <= paddingLength; x++) { |
| 2073 | nullPadding += String.valueOf((char) x); |
| 2074 | } |
| 2075 | |
| 2076 | // Bump all the patches forward. |
| 2077 | for (Patch aPatch : patches) { |
| 2078 | aPatch.start1 += paddingLength; |
| 2079 | aPatch.start2 += paddingLength; |
| 2080 | } |
| 2081 | |
| 2082 | // Add some padding on start of first diff. |
| 2083 | Patch patch = patches.getFirst(); |
| 2084 | LinkedList<Diff> diffs = patch.diffs; |
| 2085 | if (diffs.isEmpty() || diffs.getFirst().operation != Operation.EQUAL) { |
| 2086 | // Add nullPadding equality. |
| 2087 | diffs.addFirst(new Diff(Operation.EQUAL, nullPadding)); |
| 2088 | patch.start1 -= paddingLength; // Should be 0. |
| 2089 | patch.start2 -= paddingLength; // Should be 0. |
| 2090 | patch.length1 += paddingLength; |
| 2091 | patch.length2 += paddingLength; |
| 2092 | } else if (paddingLength > diffs.getFirst().text.length()) { |
| 2093 | // Grow first equality. |
| 2094 | Diff firstDiff = diffs.getFirst(); |
| 2095 | int extraLength = paddingLength - firstDiff.text.length(); |
| 2096 | firstDiff.text = nullPadding.substring(firstDiff.text.length()) |
| 2097 | + firstDiff.text; |
| 2098 | patch.start1 -= extraLength; |
| 2099 | patch.start2 -= extraLength; |
| 2100 | patch.length1 += extraLength; |
| 2101 | patch.length2 += extraLength; |
| 2102 | } |
| 2103 | |
| 2104 | // Add some padding on end of last diff. |
| 2105 | patch = patches.getLast(); |
| 2106 | diffs = patch.diffs; |
| 2107 | if (diffs.isEmpty() || diffs.getLast().operation != Operation.EQUAL) { |
| 2108 | // Add nullPadding equality. |
| 2109 | diffs.addLast(new Diff(Operation.EQUAL, nullPadding)); |
| 2110 | patch.length1 += paddingLength; |
| 2111 | patch.length2 += paddingLength; |
| 2112 | } else if (paddingLength > diffs.getLast().text.length()) { |
| 2113 | // Grow last equality. |
| 2114 | Diff lastDiff = diffs.getLast(); |
| 2115 | int extraLength = paddingLength - lastDiff.text.length(); |
| 2116 | lastDiff.text += nullPadding.substring(0, extraLength); |
| 2117 | patch.length1 += extraLength; |
| 2118 | patch.length2 += extraLength; |
| 2119 | } |
| 2120 | |
| 2121 | return nullPadding; |
| 2122 | } |
| 2123 | |
| 2124 | /** |
| 2125 | * Look through the patches and break up any which are longer than the |