| 1860 | |
| 1861 | |
| 1862 | QString diff_match_patch::patch_addPadding(QList<Patch> &patches) { |
| 1863 | short paddingLength = Patch_Margin; |
| 1864 | QString nullPadding = ""; |
| 1865 | for (short x = 1; x <= paddingLength; x++) { |
| 1866 | nullPadding += QChar((ushort)x); |
| 1867 | } |
| 1868 | |
| 1869 | // Bump all the patches forward. |
| 1870 | QMutableListIterator<Patch> pointer(patches); |
| 1871 | while (pointer.hasNext()) { |
| 1872 | Patch &aPatch = pointer.next(); |
| 1873 | aPatch.start1 += paddingLength; |
| 1874 | aPatch.start2 += paddingLength; |
| 1875 | } |
| 1876 | |
| 1877 | // Add some padding on start of first diff. |
| 1878 | Patch &firstPatch = patches.first(); |
| 1879 | QList<Diff> &firstPatchDiffs = firstPatch.diffs; |
| 1880 | if (firstPatchDiffs.empty() || firstPatchDiffs.first().operation != EQUAL) { |
| 1881 | // Add nullPadding equality. |
| 1882 | firstPatchDiffs.prepend(Diff(EQUAL, nullPadding)); |
| 1883 | firstPatch.start1 -= paddingLength; // Should be 0. |
| 1884 | firstPatch.start2 -= paddingLength; // Should be 0. |
| 1885 | firstPatch.length1 += paddingLength; |
| 1886 | firstPatch.length2 += paddingLength; |
| 1887 | } else if (paddingLength > firstPatchDiffs.first().text.length()) { |
| 1888 | // Grow first equality. |
| 1889 | Diff &firstDiff = firstPatchDiffs.first(); |
| 1890 | int extraLength = paddingLength - firstDiff.text.length(); |
| 1891 | firstDiff.text = safeMid(nullPadding, firstDiff.text.length(), |
| 1892 | paddingLength - firstDiff.text.length()) + firstDiff.text; |
| 1893 | firstPatch.start1 -= extraLength; |
| 1894 | firstPatch.start2 -= extraLength; |
| 1895 | firstPatch.length1 += extraLength; |
| 1896 | firstPatch.length2 += extraLength; |
| 1897 | } |
| 1898 | |
| 1899 | // Add some padding on end of last diff. |
| 1900 | Patch &lastPatch = patches.first(); |
| 1901 | QList<Diff> &lastPatchDiffs = lastPatch.diffs; |
| 1902 | if (lastPatchDiffs.empty() || lastPatchDiffs.last().operation != EQUAL) { |
| 1903 | // Add nullPadding equality. |
| 1904 | lastPatchDiffs.append(Diff(EQUAL, nullPadding)); |
| 1905 | lastPatch.length1 += paddingLength; |
| 1906 | lastPatch.length2 += paddingLength; |
| 1907 | } else if (paddingLength > lastPatchDiffs.last().text.length()) { |
| 1908 | // Grow last equality. |
| 1909 | Diff &lastDiff = lastPatchDiffs.last(); |
| 1910 | int extraLength = paddingLength - lastDiff.text.length(); |
| 1911 | lastDiff.text += nullPadding.left(extraLength); |
| 1912 | lastPatch.length1 += extraLength; |
| 1913 | lastPatch.length2 += extraLength; |
| 1914 | } |
| 1915 | |
| 1916 | return nullPadding; |
| 1917 | } |
| 1918 | |
| 1919 | |