Skip to content

Commit 2d119af

Browse files
authored
Merge pull request #156 from tonysm/main
PHP Tags and Blade Namespaced Components
2 parents 6ea5573 + 3af0a70 commit 2d119af

File tree

6 files changed

+119
-0
lines changed

6 files changed

+119
-0
lines changed

src/Languages/Blade/BladeLanguage.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use Tempest\Highlight\Languages\Blade\Injections\BladePhpInjection;
1010
use Tempest\Highlight\Languages\Blade\Injections\BladeRawEchoInjection;
1111
use Tempest\Highlight\Languages\Blade\Patterns\BladeCommentPattern;
12+
use Tempest\Highlight\Languages\Blade\Patterns\BladeComponentCloseTagPattern;
13+
use Tempest\Highlight\Languages\Blade\Patterns\BladeComponentOpenTagPattern;
1214
use Tempest\Highlight\Languages\Blade\Patterns\BladeKeywordPattern;
1315
use Tempest\Highlight\Languages\Html\HtmlLanguage;
1416

@@ -34,6 +36,8 @@ public function getPatterns(): array
3436
{
3537
return [
3638
...parent::getPatterns(),
39+
new BladeComponentOpenTagPattern(),
40+
new BladeComponentCloseTagPattern(),
3741
new BladeKeywordPattern(),
3842
new BladeCommentPattern(),
3943
];
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 Tempest\Highlight\Languages\Blade\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\PatternTest;
10+
use Tempest\Highlight\Tokens\TokenTypeEnum;
11+
12+
#[PatternTest(input: '</a>', output: 'a')]
13+
#[PatternTest(input: '</x-hello>', output: 'x-hello')]
14+
#[PatternTest(input: '</x-hello::world>', output: 'x-hello::world')]
15+
#[PatternTest(input: '</x-hello::world.lorem>', output: 'x-hello::world.lorem')]
16+
final readonly class BladeComponentCloseTagPattern implements Pattern
17+
{
18+
use IsPattern;
19+
20+
public function getPattern(): string
21+
{
22+
return '<\/(?<match>[\w\-\:\.]+)';
23+
}
24+
25+
public function getTokenType(): TokenTypeEnum
26+
{
27+
return TokenTypeEnum::KEYWORD;
28+
}
29+
}
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 Tempest\Highlight\Languages\Blade\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\PatternTest;
10+
use Tempest\Highlight\Tokens\TokenTypeEnum;
11+
12+
#[PatternTest(input: '<a attr="">', output: 'a')]
13+
#[PatternTest(input: '<x-hello attr="">', output: 'x-hello')]
14+
#[PatternTest(input: '<x-hello::world attr="">', output: 'x-hello::world')]
15+
#[PatternTest(input: '<x-hello::world.lorem attr="">', output: 'x-hello::world.lorem')]
16+
final readonly class BladeComponentOpenTagPattern implements Pattern
17+
{
18+
use IsPattern;
19+
20+
public function getPattern(): string
21+
{
22+
return '<(?<match>[\w\-\:\.]+)';
23+
}
24+
25+
public function getTokenType(): TokenTypeEnum
26+
{
27+
return TokenTypeEnum::KEYWORD;
28+
}
29+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Highlight\Languages\Php\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\PatternTest;
10+
use Tempest\Highlight\Tokens\TokenTypeEnum;
11+
12+
#[PatternTest(input: '?>', output: '?>')]
13+
final readonly class PhpCloseTagPattern implements Pattern
14+
{
15+
use IsPattern;
16+
17+
public function getPattern(): string
18+
{
19+
return '(?<match>\?\>+)';
20+
}
21+
22+
public function getTokenType(): TokenTypeEnum
23+
{
24+
return TokenTypeEnum::KEYWORD;
25+
}
26+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tempest\Highlight\Languages\Php\Patterns;
6+
7+
use Tempest\Highlight\IsPattern;
8+
use Tempest\Highlight\Pattern;
9+
use Tempest\Highlight\PatternTest;
10+
use Tempest\Highlight\Tokens\TokenTypeEnum;
11+
12+
#[PatternTest(input: '<?php', output: '<?php')]
13+
#[PatternTest(input: '<?=', output: '<?=')]
14+
final readonly class PhpOpenTagPattern implements Pattern
15+
{
16+
use IsPattern;
17+
18+
public function getPattern(): string
19+
{
20+
return '(?<match>\<\?[=|php]+)';
21+
}
22+
23+
public function getTokenType(): TokenTypeEnum
24+
{
25+
return TokenTypeEnum::KEYWORD;
26+
}
27+
}

src/Languages/Php/PhpLanguage.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
use Tempest\Highlight\Languages\Php\Patterns\NestedFunctionCallPattern;
3535
use Tempest\Highlight\Languages\Php\Patterns\NewObjectPattern;
3636
use Tempest\Highlight\Languages\Php\Patterns\OperatorPattern;
37+
use Tempest\Highlight\Languages\Php\Patterns\PhpCloseTagPattern;
38+
use Tempest\Highlight\Languages\Php\Patterns\PhpOpenTagPattern;
3739
use Tempest\Highlight\Languages\Php\Patterns\PropertyAccessPattern;
3840
use Tempest\Highlight\Languages\Php\Patterns\PropertyHookGetPattern;
3941
use Tempest\Highlight\Languages\Php\Patterns\PropertyHookSetParameterTypePattern;
@@ -76,6 +78,8 @@ public function getPatterns(): array
7678
return [
7779
...parent::getPatterns(),
7880

81+
new PhpOpenTagPattern(),
82+
new PhpCloseTagPattern(),
7983
new UseFunctionNamePattern(),
8084
new UseFunctionPattern(),
8185
new ClassNamePattern(),

0 commit comments

Comments
 (0)