forked from tempestphp/tempest-framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTextElement.php
More file actions
40 lines (33 loc) · 1004 Bytes
/
Copy pathTextElement.php
File metadata and controls
40 lines (33 loc) · 1004 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
declare(strict_types=1);
namespace Tempest\View\Elements;
use Tempest\View\Element;
use Tempest\View\Parser\Token;
use function Tempest\Support\str;
final class TextElement implements Element
{
use IsElement;
public function __construct(
private readonly string $text,
public readonly ?Token $token = null,
) {}
public function compile(): string
{
return str($this->text)
// Render {{
->replaceRegex(
regex: '/{{(?<match>.*?)}}/',
replace: function (array $matches): string {
return sprintf('<?= $this->escape(%s); ?>', $matches['match']);
},
)
// Render {!!
->replaceRegex(
regex: '/{!!(?<match>.*?)!!}/',
replace: function (array $matches): string {
return sprintf('<?= %s ?>', $matches['match']);
},
)
->toString();
}
}