protected void patch_addContext(Patch patch, String text) {
		if (text.length() == 0) {
			return;
		}
		String pattern = text.substring(patch.start2, patch.start2 + patch.length1);
		int padding = 0;

		// Look for the first and last matches of pattern in text.  If two different
		// matches are found, increase the pattern length.
		while (text.indexOf(pattern) != text.lastIndexOf(pattern)
				&& pattern.length() < Match_MaxBits - Patch_Margin - Patch_Margin) {
			padding += Patch_Margin;
			pattern = text.substring(Math.max(0, patch.start2 - padding),
					Math.min(text.length(), patch.start2 + patch.length1 + padding));
		}
		// Add one chunk for good luck.
		padding += Patch_Margin;

		// Add the prefix.
		String prefix = text.substring(Math.max(0, patch.start2 - padding),
				patch.start2);
		if (prefix.length() != 0) {
			patch.diffs.addFirst(new Diff(Operation.EQUAL, prefix));
		}
		// Add the suffix.
		String suffix = text.substring(patch.start2 + patch.length1,
				Math.min(text.length(), patch.start2 + patch.length1 + padding));
		if (suffix.length() != 0) {
			patch.diffs.addLast(new Diff(Operation.EQUAL, suffix));
		}

		// Roll back the start points.
		patch.start1 -= prefix.length();
		patch.start2 -= prefix.length();
		// Extend the lengths.
		patch.length1 += prefix.length() + suffix.length();
		patch.length2 += prefix.length() + suffix.length();
	}