diff --git a/src/Highlighter.php b/src/Highlighter.php index 1e24796..9b6bee9 100644 --- a/src/Highlighter.php +++ b/src/Highlighter.php @@ -11,6 +11,7 @@ use Tempest\Highlight\Languages\Css\CssLanguage; use Tempest\Highlight\Languages\Diff\DiffLanguage; use Tempest\Highlight\Languages\DocComment\DocCommentLanguage; +use Tempest\Highlight\Languages\Dockerfile\DockerfileLanguage; use Tempest\Highlight\Languages\Ellison\EllisonLanguage; use Tempest\Highlight\Languages\Gdscript\GdscriptLanguage; use Tempest\Highlight\Languages\Html\HtmlLanguage; @@ -43,6 +44,7 @@ public function __construct( ->addLanguage(new CssLanguage()) ->addLanguage(new DiffLanguage()) ->addLanguage(new DocCommentLanguage()) + ->addLanguage(new DockerfileLanguage()) ->addLanguage(new EllisonLanguage()) ->addLanguage(new GdscriptLanguage()) ->addLanguage(new HtmlLanguage()) diff --git a/src/Languages/Dockerfile/DockerfileLanguage.php b/src/Languages/Dockerfile/DockerfileLanguage.php new file mode 100644 index 0000000..e01f300 --- /dev/null +++ b/src/Languages/Dockerfile/DockerfileLanguage.php @@ -0,0 +1,56 @@ +AS)[\s][\S]+/m"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::KEYWORD; + } +} diff --git a/src/Languages/Dockerfile/Patterns/ImageAliasNamePattern.php b/src/Languages/Dockerfile/Patterns/ImageAliasNamePattern.php new file mode 100644 index 0000000..748afa0 --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/ImageAliasNamePattern.php @@ -0,0 +1,29 @@ +[\S]+)/m"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::VALUE; + } +} diff --git a/src/Languages/Dockerfile/Patterns/ImageNamePattern.php b/src/Languages/Dockerfile/Patterns/ImageNamePattern.php new file mode 100644 index 0000000..3c1601c --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/ImageNamePattern.php @@ -0,0 +1,31 @@ +[\w\/]+)/m"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::VALUE; + } +} diff --git a/src/Languages/Dockerfile/Patterns/ImageTagPattern.php b/src/Languages/Dockerfile/Patterns/ImageTagPattern.php new file mode 100644 index 0000000..730d637 --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/ImageTagPattern.php @@ -0,0 +1,31 @@ +\S+)[\s]?/m"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::VALUE; + } +} diff --git a/src/Languages/Dockerfile/Patterns/KeywordPattern.php b/src/Languages/Dockerfile/Patterns/KeywordPattern.php new file mode 100644 index 0000000..cb1b694 --- /dev/null +++ b/src/Languages/Dockerfile/Patterns/KeywordPattern.php @@ -0,0 +1,28 @@ +{$this->keyword})[\s].*/m"; + } + + public function getTokenType(): TokenTypeEnum + { + return TokenTypeEnum::KEYWORD; + } +} diff --git a/tests/Languages/Dockerfile/Patterns/KeywordPatternTest.php b/tests/Languages/Dockerfile/Patterns/KeywordPatternTest.php new file mode 100644 index 0000000..c930f73 --- /dev/null +++ b/tests/Languages/Dockerfile/Patterns/KeywordPatternTest.php @@ -0,0 +1,44 @@ +assertMatches( + pattern: new KeywordPattern('FROM'), + content: 'FROM image:tag', + expected: 'FROM', + ); + + $this->assertMatches( + pattern: new KeywordPattern('FROM'), + content: 'FROM image:tag AS alias', + expected: 'FROM', + ); + + $this->assertMatches( + pattern: new KeywordPattern('FROM'), + content: ' FROM image:tag AS alias', + expected: 'FROM', + ); + + $this->assertMatches( + pattern: new KeywordPattern('COPY'), + content: <<<'DOCKERFILE' + FROM image:tag + COPY . /usr/share/nginx/html + DOCKERFILE, + expected: 'COPY', + ); + } +}