Skip to content

Commit

Permalink
Add yaml
Browse files Browse the repository at this point in the history
  • Loading branch information
brendt committed Mar 19, 2024
1 parent d4bb26e commit 471fa7d
Show file tree
Hide file tree
Showing 16 changed files with 405 additions and 17 deletions.
3 changes: 3 additions & 0 deletions src/Highlighter.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Tempest\Highlight\Languages\Html\HtmlLanguage;
use Tempest\Highlight\Languages\Php\PhpLanguage;
use Tempest\Highlight\Languages\Sql\SqlLanguage;
use Tempest\Highlight\Languages\Yaml\YamlLanguage;
use Tempest\Highlight\Themes\CssTheme;
use Tempest\Highlight\Tokens\GroupTokens;
use Tempest\Highlight\Tokens\ParseTokens;
Expand All @@ -28,6 +29,8 @@ public function __construct(
->setLanguage('html', new HtmlLanguage())
->setLanguage('sql', new SqlLanguage())
->setLanguage('blade', new BladeLanguage())
->setLanguage('yaml', new YamlLanguage())
->setLanguage('yml', new YamlLanguage())
->setLanguage('css', new CssLanguage());
}

Expand Down
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlArrayBracketsPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'branches: [main]', output: ['[', ']'])]
final readonly class YamlArrayBracketsPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '(?<match>(\[|\]))';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
27 changes: 27 additions & 0 deletions src/Languages/Yaml/Patterns/YamlColonPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: '- name: Setup problem matchers |', output: ':')]
#[PatternTest(input: '- { link: "/blog/new-in-php-83" }', output: ':')]
final readonly class YamlColonPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '/^[\-\{\s\w]*(?<match>:)/m';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlCommentPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: '# comment', output: '# comment')]
final readonly class YamlCommentPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '(?<match>\#(.)*)';
}

public function getTokenType(): TokenType
{
return TokenType::COMMENT;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlDashPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: '- name: Setup problem matchers |', output: '-')]
final readonly class YamlDashPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '/^[\s]*(?<match>-)/m';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlDoubleAccoladesValuePattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'runs-on: ${{ matrix.os }}', output: ['{{', '}}'])]
final readonly class YamlDoubleAccoladesValuePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '(?<match>(\{\{|\}\}))';
}

public function getTokenType(): TokenType
{
return TokenType::VALUE;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlDoubleQuoteValuePattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'bar: "baz"', output: 'baz')]
final readonly class YamlDoubleQuoteValuePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '\"(?<match>(.|\n)*?)\"';
}

public function getTokenType(): TokenType
{
return TokenType::VALUE;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlObjectBracketsPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'branches: { link: "/blog/new-in-php-83", title: "Whats new in PHP 8.3" }', output: ['{', '}'])]
final readonly class YamlObjectBracketsPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '(?<match>(\{|\}))';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlPipePattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: '- name: Setup problem matchers |', output: '|')]
final readonly class YamlPipePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '/^[-\s\w\:]+(?<match>\|)/m';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
27 changes: 27 additions & 0 deletions src/Languages/Yaml/Patterns/YamlPropertyPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'name: Fix Styling', output: 'name')]
#[PatternTest(input: 'property-name: value', output: 'property-name')]
final readonly class YamlPropertyPattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '(?<match>[\w-]+)\:';
}

public function getTokenType(): TokenType
{
return TokenType::KEYWORD;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlSingleQuoteValuePattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: "bar: 'baz'", output: 'baz')]
final readonly class YamlSingleQuoteValuePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '\'(?<match>(.|\n)*?)\'';
}

public function getTokenType(): TokenType
{
return TokenType::VALUE;
}
}
26 changes: 26 additions & 0 deletions src/Languages/Yaml/Patterns/YamlVariablePattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml\Patterns;

use Tempest\Highlight\IsPattern;
use Tempest\Highlight\Pattern;
use Tempest\Highlight\PatternTest;
use Tempest\Highlight\Tokens\TokenType;

#[PatternTest(input: 'runs-on: ${{ matrix.os }}', output: ' matrix.os ')]
final readonly class YamlVariablePattern implements Pattern
{
use IsPattern;

public function getPattern(): string
{
return '\$\{\{(?<match>[\w\s\.]+)\}\}';
}

public function getTokenType(): TokenType
{
return TokenType::PROPERTY;
}
}
46 changes: 46 additions & 0 deletions src/Languages/Yaml/YamlLanguage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Languages\Yaml;

use Tempest\Highlight\Languages\Base\BaseLanguage;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlArrayBracketsPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlColonPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlCommentPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlDashPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlDoubleAccoladesValuePattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlDoubleQuoteValuePattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlObjectBracketsPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlPipePattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlPropertyPattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlSingleQuoteValuePattern;
use Tempest\Highlight\Languages\Yaml\Patterns\YamlVariablePattern;

class YamlLanguage extends BaseLanguage
{
public function getInjections(): array
{
return [
...parent::getInjections(),
];
}

public function getPatterns(): array
{
return [
...parent::getPatterns(),
new YamlPropertyPattern(),
new YamlDashPattern(),
new YamlColonPattern(),
new YamlPipePattern(),
new YamlVariablePattern(),
new YamlArrayBracketsPattern(),
new YamlObjectBracketsPattern(),
new YamlDoubleQuoteValuePattern(),
new YamlSingleQuoteValuePattern(),
new YamlCommentPattern(),
new YamlDoubleAccoladesValuePattern(),
];
}
}
2 changes: 1 addition & 1 deletion src/Themes/highlight-light-lite.css
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
--property-color: #34A853;
--type-color: #EA4334;
--generic-color: #9d3af6;
--value-color: #515248;
--value-color: #000;
--comment-color: #888888;
}

Expand Down
Loading

0 comments on commit 471fa7d

Please sign in to comment.