File tree Expand file tree Collapse file tree 7 files changed +165
-6
lines changed
Expand file tree Collapse file tree 7 files changed +165
-6
lines changed Original file line number Diff line number Diff line change 1616use Tempest \Highlight \Languages \Ellison \EllisonLanguage ;
1717use Tempest \Highlight \Languages \Gdscript \GdscriptLanguage ;
1818use Tempest \Highlight \Languages \Html \HtmlLanguage ;
19+ use Tempest \Highlight \Languages \Ini \IniLanguage ;
1920use Tempest \Highlight \Languages \JavaScript \JavaScriptLanguage ;
2021use Tempest \Highlight \Languages \Json \JsonLanguage ;
2122use Tempest \Highlight \Languages \Php \PhpLanguage ;
@@ -57,6 +58,7 @@ public function __construct(
5758 ->addLanguage (new XmlLanguage ())
5859 ->addLanguage (new YamlLanguage ())
5960 ->addLanguage (new DotEnvLanguage ())
61+ ->addLanguage (new IniLanguage ())
6062 ->addLanguage (new TwigLanguage ());
6163 }
6264
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Highlight \Languages \Ini ;
4+
5+ use Tempest \Highlight \Languages \Base \BaseLanguage ;
6+ use Tempest \Highlight \Languages \Ini \Patterns \IniCommentPattern ;
7+ use Tempest \Highlight \Languages \Ini \Patterns \IniKeyPattern ;
8+ use Tempest \Highlight \Languages \Ini \Patterns \IniTagPattern ;
9+
10+ final class IniLanguage extends BaseLanguage
11+ {
12+ public function getName (): string
13+ {
14+ return 'ini ' ;
15+ }
16+
17+ public function getPatterns (): array
18+ {
19+ return [
20+ ...parent ::getPatterns (),
21+ new IniKeyPattern (),
22+ new IniTagPattern (),
23+ new IniCommentPattern (),
24+ ];
25+ }
26+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Highlight \Languages \Ini \Patterns ;
4+
5+ use Tempest \Highlight \IsPattern ;
6+ use Tempest \Highlight \Pattern ;
7+ use Tempest \Highlight \PatternTest ;
8+ use Tempest \Highlight \Tokens \TokenType ;
9+ use Tempest \Highlight \Tokens \TokenTypeEnum ;
10+
11+ #[PatternTest(input: '; FOO=bar ' , output: '; FOO=bar ' )]
12+ final class IniCommentPattern 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 TokenTypeEnum::COMMENT ;
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Highlight \Languages \Ini \Patterns ;
4+
5+ use Tempest \Highlight \IsPattern ;
6+ use Tempest \Highlight \Pattern ;
7+ use Tempest \Highlight \PatternTest ;
8+ use Tempest \Highlight \Tokens \TokenType ;
9+ use Tempest \Highlight \Tokens \TokenTypeEnum ;
10+
11+ #[PatternTest(input: 'foo=bar ' , output: 'foo ' )]
12+ final class IniKeyPattern implements Pattern
13+ {
14+ use IsPattern;
15+
16+ public function getPattern (): string
17+ {
18+ return '/(?<match>[\w].*)=/ ' ;
19+ }
20+
21+ public function getTokenType (): TokenType
22+ {
23+ return TokenTypeEnum::PROPERTY ;
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Tempest \Highlight \Languages \Ini \Patterns ;
4+
5+ use Tempest \Highlight \IsPattern ;
6+ use Tempest \Highlight \Pattern ;
7+ use Tempest \Highlight \PatternTest ;
8+ use Tempest \Highlight \Tokens \TokenType ;
9+ use Tempest \Highlight \Tokens \TokenTypeEnum ;
10+
11+ #[PatternTest(input: '[FOO] ' , output: '[FOO] ' )]
12+ final class IniTagPattern 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 TokenTypeEnum::KEYWORD ;
24+ }
25+ }
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Languages \Ini ;
4+
5+ use PHPUnit \Framework \Attributes \DataProvider ;
6+ use PHPUnit \Framework \TestCase ;
7+ use Tempest \Highlight \Highlighter ;
8+
9+ final class IniLanguageTest extends TestCase
10+ {
11+
12+ #[DataProvider('data ' )]
13+ public function test_highlight (string $ content , string $ expected ): void
14+ {
15+ $ highlighter = new Highlighter ();
16+
17+ $ this ->assertSame (
18+ $ expected ,
19+ $ highlighter ->parse ($ content , 'ini ' ),
20+ );
21+ }
22+
23+ public static function data (): array
24+ {
25+ return [
26+ [
27+ <<<INI
28+ [PHP]
29+
30+ ;zend_extension = xdebug
31+ xdebug.mode = profile
32+ xdebug.output_dir = /Users/brentroose/Desktop
33+ xdebug.profiler_output_name = cachegrind.out.%p
34+
35+ ;;;;;;;;;;;;;;;;;;;
36+ ; About php.ini ;
37+ ;;;;;;;;;;;;;;;;;;;
38+ INI ,
39+ '<span class="hl-keyword">[PHP]</span>
40+
41+ <span class="hl-comment">;zend_extension = xdebug</span>
42+ <span class="hl-property">xdebug.mode </span>= profile
43+ <span class="hl-property">xdebug.output_dir </span>= /Users/brentroose/Desktop
44+ <span class="hl-property">xdebug.profiler_output_name </span>= cachegrind.out.%p
45+
46+ <span class="hl-comment">;;;;;;;;;;;;;;;;;;;</span>
47+ <span class="hl-comment">; About php.ini ;</span>
48+ <span class="hl-comment">;;;;;;;;;;;;;;;;;;;</span> ' ,
49+ ]
50+ ];
51+ }
52+ }
Original file line number Diff line number Diff line change 1- ``` dotenv
2- # Enable or disable discovery cache. Can be `true`, `partial` or `false`.
3- DISCOVERY_CACHE=false
1+ ``` ini
2+ [PHP]
43
5- # Overwrite default log paths (null = default)
6- DEBUG_LOG_PATH=null
7- SERVER_LOG_PATH=null
4+ ; zend_extension = xdebug
5+ xdebug.mode = profile
6+ xdebug.output_dir = /Users/brentroose/Desktop
7+ xdebug.profiler_output_name = cachegrind.out.%p
8+
9+ ; ;;;;;;;;;;;;;;;;;;
10+ ; About php.ini ;
11+ ; ;;;;;;;;;;;;;;;;;;
812```
You can’t perform that action at this time.
0 commit comments