3 namespace Caxy\HtmlDiff;
7 public static function diffCommonPrefix($old, $new)
9 // Quick check for common null cases.
10 if (mb_strlen($old) == 0 || mb_strlen($new) == 0 || mb_substr($old, 0, 1) != mb_substr($new, 0, 1)) {
16 $pointerMax = min(mb_strlen($old), mb_strlen($new));
17 $pointerMid = $pointerMax;
19 while ($pointerMin < $pointerMid) {
20 $cmp = substr_compare(
22 mb_substr($new, $pointerStart, $pointerMid - $pointerStart),
24 $pointerMid - $pointerStart
27 $pointerMin = $pointerMid;
28 $pointerStart = $pointerMin;
30 $pointerMax = $pointerMid;
32 $pointerMid = floor(($pointerMax - $pointerMin) / 2 + $pointerMin);
37 public static function diffCommonSuffix($old, $new)
39 // Quick check for common null cases.
40 if (mb_strlen($old) == 0 || mb_strlen($new) == 0 || mb_substr($old, mb_strlen($old) - 1, 1) != mb_substr($new, mb_strlen($new) - 1, 1)) {
46 $pointerMax = min(mb_strlen($old), mb_strlen($new));
47 $pointerMid = $pointerMax;
49 $oldLen = mb_strlen($old);
50 $newLen = mb_strlen($new);
51 while ($pointerMin < $pointerMid) {
52 if (mb_substr($old, $oldLen - $pointerMid, $pointerMid - $pointerEnd) == mb_substr($new, $newLen - $pointerMid, $pointerMid - $pointerEnd)) {
53 $pointerMin = $pointerMid;
54 $pointerEnd = $pointerMin;
56 $pointerMax = $pointerMid;
58 $pointerMid = floor(($pointerMax - $pointerMin) / 2 + $pointerMin);