Skip to content

Commit 6d68583

Browse files
committed
Merge ReservedConstantInterface into RendererConstant
Signed-off-by: Jack Cherng <[email protected]>
1 parent e2fa97b commit 6d68583

8 files changed

+55
-52
lines changed

src/Renderer/AbstractRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/**
1111
* Abstract class for diff renderers.
1212
*/
13-
abstract class AbstractRenderer implements RendererInterface, ReservedConstantInterface
13+
abstract class AbstractRenderer implements RendererInterface
1414
{
1515
/**
1616
* @var array information about this template

src/Renderer/Html/AbstractHtml.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Jfcherng\Diff\Renderer\AbstractRenderer;
88
use Jfcherng\Diff\Renderer\Html\LineRenderer\AbstractLineRenderer;
9+
use Jfcherng\Diff\Renderer\RendererConstant;
910
use Jfcherng\Diff\SequenceMatcher;
1011
use Jfcherng\Diff\Utility\LineRendererFactory;
1112
use Jfcherng\Utility\MbString;
@@ -92,7 +93,11 @@ public function getChanges(): array
9293
) {
9394
$lines = \array_slice($a, $i1, ($i2 - $i1));
9495
$lines = $this->formatLines($lines);
95-
$lines = \str_replace(static::HTML_CLOSURES, static::HTML_CLOSURES_DEL, $lines);
96+
$lines = \str_replace(
97+
RendererConstant::HTML_CLOSURES,
98+
RendererConstant::HTML_CLOSURES_DEL,
99+
$lines
100+
);
96101
$blocks[$lastBlock]['base']['lines'] += $lines;
97102
}
98103

@@ -102,7 +107,11 @@ public function getChanges(): array
102107
) {
103108
$lines = \array_slice($b, $j1, ($j2 - $j1));
104109
$lines = $this->formatLines($lines);
105-
$lines = \str_replace(static::HTML_CLOSURES, static::HTML_CLOSURES_INS, $lines);
110+
$lines = \str_replace(
111+
RendererConstant::HTML_CLOSURES,
112+
RendererConstant::HTML_CLOSURES_INS,
113+
$lines
114+
);
106115
$blocks[$lastBlock]['changed']['lines'] += $lines;
107116
}
108117
}
@@ -184,7 +193,7 @@ protected function formatLines(array $lines): array
184193

185194
// glue all lines into a single string to get rid of multiple function calls later
186195
// unnecessary, but should improve performance if there are many lines
187-
$string = \implode(static::IMPLODE_DELIMITER, $lines);
196+
$string = \implode(RendererConstant::IMPLODE_DELIMITER, $lines);
188197

189198
$string = $this->expandTabs($string);
190199
$string = $this->htmlSafe($string);
@@ -194,7 +203,7 @@ protected function formatLines(array $lines): array
194203
}
195204

196205
// split the string back to lines
197-
return \explode(static::IMPLODE_DELIMITER, $string);
206+
return \explode(RendererConstant::IMPLODE_DELIMITER, $string);
198207
}
199208

200209
/**

src/Renderer/Html/LineRenderer/AbstractLineRenderer.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44

55
namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
66

7-
use Jfcherng\Diff\Renderer\ReservedConstantInterface;
87
use Jfcherng\Diff\SequenceMatcher;
98

10-
abstract class AbstractLineRenderer implements LineRendererInterface, ReservedConstantInterface
9+
abstract class AbstractLineRenderer implements LineRendererInterface
1110
{
1211
/**
1312
* @var SequenceMatcher the sequence matcher

src/Renderer/Html/LineRenderer/Char.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
66

7+
use Jfcherng\Diff\Renderer\RendererConstant;
78
use Jfcherng\Diff\SequenceMatcher;
89
use Jfcherng\Diff\Utility\ReverseIterator;
910
use Jfcherng\Utility\MbString;
@@ -21,14 +22,14 @@ public function render(MbString $mbFrom, MbString $mbTo): LineRendererInterface
2122
foreach (ReverseIterator::fromArray($opcodes) as [$tag, $i1, $i2, $j1, $j2]) {
2223
switch ($tag) {
2324
case SequenceMatcher::OPCODE_DELETE:
24-
$mbFrom->str_enclose_i(self::HTML_CLOSURES, $i1, $i2 - $i1);
25+
$mbFrom->str_enclose_i(RendererConstant::HTML_CLOSURES, $i1, $i2 - $i1);
2526
break;
2627
case SequenceMatcher::OPCODE_INSERT:
27-
$mbTo->str_enclose_i(self::HTML_CLOSURES, $j1, $j2 - $j1);
28+
$mbTo->str_enclose_i(RendererConstant::HTML_CLOSURES, $j1, $j2 - $j1);
2829
break;
2930
case SequenceMatcher::OPCODE_REPLACE:
30-
$mbFrom->str_enclose_i(self::HTML_CLOSURES, $i1, $i2 - $i1);
31-
$mbTo->str_enclose_i(self::HTML_CLOSURES, $j1, $j2 - $j1);
31+
$mbFrom->str_enclose_i(RendererConstant::HTML_CLOSURES, $i1, $i2 - $i1);
32+
$mbTo->str_enclose_i(RendererConstant::HTML_CLOSURES, $j1, $j2 - $j1);
3233
break;
3334
default:
3435
continue 2;

src/Renderer/Html/LineRenderer/Line.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
66

7+
use Jfcherng\Diff\Renderer\RendererConstant;
78
use Jfcherng\Utility\MbString;
89

910
final class Line extends AbstractLineRenderer
@@ -22,12 +23,12 @@ public function render(MbString $mbFrom, MbString $mbTo): LineRendererInterface
2223

2324
// two strings are different, we do rendering
2425
$mbFrom->str_enclose_i(
25-
self::HTML_CLOSURES,
26+
RendererConstant::HTML_CLOSURES,
2627
$start,
2728
$end + $mbFrom->strlen() - $start + 1
2829
);
2930
$mbTo->str_enclose_i(
30-
self::HTML_CLOSURES,
31+
RendererConstant::HTML_CLOSURES,
3132
$start,
3233
$end + $mbTo->strlen() - $start + 1
3334
);

src/Renderer/Html/LineRenderer/Word.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jfcherng\Diff\Renderer\Html\LineRenderer;
66

7+
use Jfcherng\Diff\Renderer\RendererConstant;
78
use Jfcherng\Diff\SequenceMatcher;
89
use Jfcherng\Diff\Utility\ReverseIterator;
910
use Jfcherng\Utility\MbString;
@@ -31,18 +32,18 @@ public function render(MbString $mbFrom, MbString $mbTo): LineRendererInterface
3132
foreach (ReverseIterator::fromArray($opcodes) as [$tag, $i1, $i2, $j1, $j2]) {
3233
switch ($tag) {
3334
case SequenceMatcher::OPCODE_DELETE:
34-
$fromWords[$i1] = self::HTML_CLOSURES[0] . $fromWords[$i1];
35-
$fromWords[$i2 - 1] .= self::HTML_CLOSURES[1];
35+
$fromWords[$i1] = RendererConstant::HTML_CLOSURES[0] . $fromWords[$i1];
36+
$fromWords[$i2 - 1] .= RendererConstant::HTML_CLOSURES[1];
3637
break;
3738
case SequenceMatcher::OPCODE_INSERT:
38-
$toWords[$j1] = self::HTML_CLOSURES[0] . $toWords[$j1];
39-
$toWords[$j2 - 1] .= self::HTML_CLOSURES[1];
39+
$toWords[$j1] = RendererConstant::HTML_CLOSURES[0] . $toWords[$j1];
40+
$toWords[$j2 - 1] .= RendererConstant::HTML_CLOSURES[1];
4041
break;
4142
case SequenceMatcher::OPCODE_REPLACE:
42-
$fromWords[$i1] = self::HTML_CLOSURES[0] . $fromWords[$i1];
43-
$fromWords[$i2 - 1] .= self::HTML_CLOSURES[1];
44-
$toWords[$j1] = self::HTML_CLOSURES[0] . $toWords[$j1];
45-
$toWords[$j2 - 1] .= self::HTML_CLOSURES[1];
43+
$fromWords[$i1] = RendererConstant::HTML_CLOSURES[0] . $fromWords[$i1];
44+
$fromWords[$i2 - 1] .= RendererConstant::HTML_CLOSURES[1];
45+
$toWords[$j1] = RendererConstant::HTML_CLOSURES[0] . $toWords[$j1];
46+
$toWords[$j2 - 1] .= RendererConstant::HTML_CLOSURES[1];
4647
break;
4748
default:
4849
continue 2;

src/Renderer/RendererConstant.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,27 @@ final class RendererConstant
88
{
99
const RENDERER_NAMESPACE = __NAMESPACE__;
1010
const TEMPLATE_TYPES = ['Html', 'Text'];
11+
12+
/**
13+
* Closures that are used to enclose partial strings.
14+
*
15+
* - a different part in string (class internal)
16+
* - a inserted char in output HTML
17+
* - a deleted char in output HTML
18+
*
19+
* @var string[]
20+
*/
21+
const HTML_CLOSURES = ["\u{fcffc}\u{ff2fb}", "\u{fff41}\u{fcffc}"];
22+
const HTML_CLOSURES_INS = ['<ins>', '</ins>'];
23+
const HTML_CLOSURES_DEL = ['<del>', '</del>'];
24+
25+
/**
26+
* The delimiter to be used as the glue in string/array functions.
27+
*
28+
* this delimiter contains chars from the Unicode reserved areas
29+
* hopefully, it won't appear in our lines
30+
*
31+
* @var string
32+
*/
33+
const IMPLODE_DELIMITER = "\u{ff2fa}\u{fcffc}\u{fff42}";
1134
}

src/Renderer/ReservedConstantInterface.php

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)