Skip to content

Commit 872fad8

Browse files
committed
Add configurable fallback language
1 parent cf089a5 commit 872fad8

2 files changed

Lines changed: 28 additions & 6 deletions

File tree

src/Highlighter.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ final class Highlighter
4747
private readonly ParseTokens $parseTokens;
4848
private readonly GroupTokens $groupTokens;
4949
private readonly RenderTokens $renderTokens;
50-
private readonly TextLanguage $fallbackLanguage;
5150
private array $patterns = [];
5251
private array $afterInjections = [];
5352
/** @var array<int, Injection[]> */
@@ -56,8 +55,10 @@ final class Highlighter
5655
private array $afterInjectionsCache = [];
5756
private ?self $nestedHighlighter = null;
5857

59-
public function __construct(private readonly Theme $theme = new CssTheme())
60-
{
58+
public function __construct(
59+
private readonly Theme $theme = new CssTheme(),
60+
private readonly Language|null $fallbackLanguage = new TextLanguage(),
61+
) {
6162
$this->addLanguage(new ApacheLanguage())
6263
->addLanguage(new BashLanguage())
6364
->addLanguage(new BBCodeLanguage())
@@ -85,7 +86,6 @@ public function __construct(private readonly Theme $theme = new CssTheme())
8586
->addLanguage(new IniLanguage())
8687
->addLanguage(new TwigLanguage());
8788

88-
$this->fallbackLanguage = new TextLanguage();
8989
$this->parseTokens = new ParseTokens();
9090
$this->groupTokens = new GroupTokens();
9191
$this->renderTokens = new RenderTokens($this->theme);
@@ -119,12 +119,14 @@ public function addLanguage(Language $language): self
119119
return $this;
120120
}
121121

122-
public function parse(string $content, string|Language $language): string
122+
public function parse(string $content, null|string|Language $language): string
123123
{
124124
if (is_string($language)) {
125-
$language = $this->languages[$language] ?? $this->fallbackLanguage;
125+
$language = $this->languages[$language] ?? null;
126126
}
127127

128+
$language ??= $this->fallbackLanguage;
129+
128130
$this->currentLanguage = $language;
129131

130132
$content = $this->normalizeNewline($content);

tests/HighlighterTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Tempest\Highlight\Injection;
1212
use Tempest\Highlight\IsInjection;
1313
use Tempest\Highlight\Language;
14+
use Tempest\Highlight\Languages\Php\PhpLanguage;
1415
use Tempest\Highlight\Themes\InlineTheme;
1516
use Tempest\Highlight\Tokens\TokenTypeEnum;
1617

@@ -131,4 +132,23 @@ public static function provide_highlight_cases(): iterable
131132
['03', 'php'], // windows line endings
132133
];
133134
}
135+
136+
public function test_fallback_language(): void
137+
{
138+
$highlighter = new Highlighter(fallbackLanguage: new PhpLanguage());
139+
140+
$highlighted = $highlighter->parse('echo "hi";', null);
141+
142+
$this->assertSame(
143+
'<span class="hl-keyword">echo</span> <span class="hl-value">&quot;hi&quot;</span>;',
144+
$highlighted,
145+
);
146+
147+
$highlighted = $highlighter->parse('echo "hi";', 'unknown');
148+
149+
$this->assertSame(
150+
'<span class="hl-keyword">echo</span> <span class="hl-value">&quot;hi&quot;</span>;',
151+
$highlighted,
152+
);
153+
}
134154
}

0 commit comments

Comments
 (0)