Skip to content

Commit 145052d

Browse files
committed
highlighter tmp commit 20241122
1 parent dda1da7 commit 145052d

36 files changed

+511
-45
lines changed

app/MarkDown/CustomHL/CommonMark/CustomHighlightExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use App\MarkDown\CustomHL\Languages\JavaScript\JavaScriptLanguage;
2424
//use App\MarkDown\CustomHL\Languages\Html\HtmlLanguage;
2525
use App\MarkDown\CustomHL\Languages\Xml\XmlLanguage;
26+
use App\MarkDown\CustomHL\Languages\Json\JsonLanguage;
2627

2728
final class CustomHighlightExtension implements ExtensionInterface
2829
{
@@ -39,6 +40,7 @@ public function __construct(
3940
$this->highlighter->addLanguage(new JavaScriptLanguage());
4041
// $this->highlighter->addLanguage(new HtmlLanguage());
4142
$this->highlighter->addLanguage(new XmlLanguage());
43+
$this->highlighter->addLanguage(new JsonLanguage());
4244
}
4345

4446
public function register(EnvironmentBuilderInterface $environment): void

app/MarkDown/CustomHL/Languages/Blade/Injections/BladeEchoInjection.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,14 @@
77
use Tempest\Highlight\Highlighter;
88
use Tempest\Highlight\Injection;
99
use Tempest\Highlight\IsInjection;
10-
use Tempest\Highlight\Escape;
11-
use Tempest\Highlight\Tokens\DynamicTokenType;
1210

1311
final readonly class BladeEchoInjection implements Injection
1412
{
1513
use IsInjection;
1614

1715
public function getPattern(): string
1816
{
19-
return '({{(?!--))(?<match>.*)(}})';
17+
return '({{(?!--))(?<match>(.|\n)*?)(}})';
2018
}
2119

2220
public function parseContent(string $content, Highlighter $highlighter): string

app/MarkDown/CustomHL/Languages/Ini/IniLanguage.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ public function getName(): string
1515
return 'ini';
1616
}
1717

18+
public function getAliases(): array
19+
{
20+
return [
21+
'env',
22+
];
23+
}
24+
1825
public function getInjections(): array
1926
{
2027
return [

app/MarkDown/CustomHL/Languages/JavaScript/JavaScriptLanguage.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@
1414
//use App\Tempest\Highlight\Languages\JavaScript\Patterns\JsNewObjectPattern;
1515
//use App\Tempest\Highlight\Languages\JavaScript\Patterns\JsObjectPropertyPattern;
1616
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\JsPropertyPattern;
17-
//use App\Tempest\Highlight\Languages\JavaScript\Patterns\JsSinglelineCommentPattern;
17+
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\JsSinglelineCommentPattern;
1818
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\JsSingleQuoteValuePattern;
1919
//use App\Tempest\Highlight\Languages\JavaScript\Patterns\JsStaticClassPattern;
2020
//use App\Tempest\Highlight\Languages\JavaScript\Patterns\JsStaticPropertyPattern;
2121
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\DigitsPattern;
22+
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\ConstantNamePattern;
23+
use App\MarkDown\CustomHL\Languages\JavaScript\Patterns\OperatorPattern;
2224

2325
class JavaScriptLanguage extends CustomBaseLanguage
2426
{
@@ -47,10 +49,14 @@ public function getPatterns(): array
4749
{
4850
return [
4951
...parent::getPatterns(),
52+
new JsKeywordPattern('const'),
5053
new JsKeywordPattern('default'),
5154
new JsKeywordPattern('export'),
55+
new JsKeywordPattern('false', 'hl-js-slug'),
5256
new JsKeywordPattern('from'),
5357
new JsKeywordPattern('import'),
58+
new JsKeywordPattern('null', 'hl-js-slug'),
59+
new JsKeywordPattern('true', 'hl-js-slug'),
5460
new JsKeywordPattern('var'),
5561
//new JsKeywordPattern('set'),
5662
//new JsKeywordPattern('of'),
@@ -62,7 +68,6 @@ public function getPatterns(): array
6268
//new JsKeywordPattern('case'),
6369
//new JsKeywordPattern('catch'),
6470
//new JsKeywordPattern('class'),
65-
//new JsKeywordPattern('const'),
6671
//new JsKeywordPattern('continue'),
6772
//new JsKeywordPattern('debugger'),
6873
//new JsKeywordPattern('delete'),
@@ -76,7 +81,7 @@ public function getPatterns(): array
7681
//new JsKeywordPattern('if'),
7782
//new JsKeywordPattern('in'),
7883
//new JsKeywordPattern('instanceof'),
79-
//new JsKeywordPattern('new'),
84+
new JsKeywordPattern('new'),
8085
//new JsKeywordPattern('null'),
8186
//new JsKeywordPattern('return'),
8287
//new JsKeywordPattern('super'),
@@ -103,17 +108,19 @@ public function getPatterns(): array
103108
//new JsKeywordPattern('constructor'),
104109
//new JsKeywordPattern('this'),
105110

111+
new OperatorPattern('(=|\?\?|===)'),
112+
106113
// COMMENTS
107114
//new JsMultilineCommentPattern(),
108-
//new JsSinglelineCommentPattern(),
115+
new JsSinglelineCommentPattern(),
109116

110117
// TYPES
111118
//new JsClassNamePattern(),
112119
//new JsNewObjectPattern(),
113120
//new JsStaticClassPattern(),
114121

115122
// PROPERTIES
116-
//new JsPropertyPattern(),
123+
new JsPropertyPattern(),
117124
//new JsObjectPropertyPattern(),
118125
new JsMethodPattern(),
119126
//new JsStaticPropertyPattern(),
@@ -122,6 +129,8 @@ public function getPatterns(): array
122129
new JsSingleQuoteValuePattern(),
123130
//new JsDoubleQuoteValuePattern(),
124131

132+
new ConstantNamePattern(),
133+
125134
new DigitsPattern(),
126135
];
127136
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MarkDown\CustomHL\Languages\JavaScript\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\Tokens\TokenType;
10+
use Tempest\Highlight\Tokens\DynamicTokenType;
11+
12+
final readonly class ConstantNamePattern implements Pattern
13+
{
14+
use IsPattern;
15+
16+
public function getPattern(): string
17+
{
18+
return '\b(?<match>[A-Z_]+)\b';
19+
}
20+
21+
public function getTokenType(): TokenType
22+
{
23+
return new DynamicTokenType('hl-js-constant');
24+
}
25+
}

app/MarkDown/CustomHL/Languages/JavaScript/Patterns/JsKeywordPattern.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ final class JsKeywordPattern implements Pattern
1515

1616
private bool $caseInsensitive = false;
1717

18-
public function __construct(private string $keyword)
19-
{
18+
public function __construct(
19+
private string $keyword,
20+
private string $tokenType = 'hl-js-keyword'
21+
) {
2022
}
2123

2224
public function caseInsensitive(): self
@@ -39,6 +41,6 @@ public function getPattern(): string
3941

4042
public function getTokenType(): TokenType
4143
{
42-
return new DynamicTokenType('hl-js-keyword');
44+
return new DynamicTokenType($this->tokenType);
4345
}
4446
}

app/MarkDown/CustomHL/Languages/JavaScript/Patterns/JsPropertyPattern.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
public function getPattern(): string
1717
{
18-
return '/(?<match>[\w\$]+)\(/';
18+
return '/\.(?<match>[\w]+)/';
1919
}
2020

2121
public function getTokenType(): TokenType
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MarkDown\CustomHL\Languages\JavaScript\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\Tokens\TokenType;
10+
use Tempest\Highlight\Tokens\DynamicTokenType;
11+
12+
final readonly class JsSinglelineCommentPattern implements Pattern
13+
{
14+
use IsPattern;
15+
16+
public function getPattern(): string
17+
{
18+
return '(?<match>\/\/(.)*)';
19+
}
20+
21+
public function getTokenType(): TokenType
22+
{
23+
return new DynamicTokenType('hl-js-comment');
24+
}
25+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MarkDown\CustomHL\Languages\JavaScript\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\Tokens\TokenType;
10+
use Tempest\Highlight\Tokens\DynamicTokenType;
11+
12+
final class OperatorPattern implements Pattern
13+
{
14+
use IsPattern;
15+
16+
public function __construct(private string $operator)
17+
{
18+
}
19+
20+
public function getPattern(): string
21+
{
22+
return "/\s(?<!\\$)(?<match>{$this->operator})(\s|\()/";
23+
}
24+
25+
public function getTokenType(): TokenType
26+
{
27+
return new DynamicTokenType('hl-js-operator');
28+
}
29+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\MarkDown\CustomHL\Languages\Json\Injections;
6+
7+
use Tempest\Highlight\Highlighter;
8+
use Tempest\Highlight\Injection;
9+
use Tempest\Highlight\IsInjection;
10+
use Tempest\Highlight\Escape;
11+
use Tempest\Highlight\Tokens\DynamicTokenType;
12+
13+
final readonly class JsonArrayInjection implements Injection
14+
{
15+
use IsInjection;
16+
17+
public function getPattern(): string
18+
{
19+
return '\[(?<match>(.|\n)*?)\]';
20+
}
21+
22+
public function parseContent(string $content, Highlighter $highlighter): string
23+
{
24+
preg_match_all('/\"(?<match>.*?)\"/', $content, $match, PREG_OFFSET_CAPTURE);
25+
26+
if (! $match) {
27+
return $content;
28+
}
29+
30+
$theme = $highlighter->getTheme();
31+
32+
foreach($match['match'] as $val) {
33+
$content = preg_replace(
34+
'/\b' . $val[0] . '[\b]*/',
35+
Escape::tokens($theme->before(new DynamicTokenType('hl-json-value')))
36+
. $val[0]
37+
. Escape::tokens($theme->after(new DynamicTokenType('hl-json-value'))),
38+
$content,
39+
);
40+
}
41+
42+
return $content;
43+
}
44+
}

0 commit comments

Comments
 (0)