Skip to content

Commit

Permalink
Fix After injection edge cases
Browse files Browse the repository at this point in the history
  • Loading branch information
brendt committed Apr 15, 2024
1 parent 69e0755 commit d3810e4
Show file tree
Hide file tree
Showing 12 changed files with 152 additions and 7 deletions.
12 changes: 11 additions & 1 deletion UPGRADING.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ interface Language
```

- Moved all CSS themes from `src/Themes` to `src/Themes/Css`
- Injections can now only return `ParsedInjection` anymore. If you happen to have custom injections that return strings, then those strings can simply be wrapped within a `ParsedInjection`: `return new ParsedInjection($content)`.
- Injections can now only return `ParsedInjection`. If you happen to have custom injections that return strings, then those strings can simply be wrapped within a `ParsedInjection`: `return new ParsedInjection($content)`.

```diff
interface Injection
Expand All @@ -49,6 +49,16 @@ interface Injection
}
```

- Return type of `Pattern::getTokenType()` changed from `TokenTypeEnum` to `TokenType`

```diff
interface Pattern
{
- public function getTokenType(): TokenTypeEnum;
+ public function getTokenType(): TokenType;
}
```

- `Highlighter::withGutter()` is now an immutable function

## 1.3.4
Expand Down
8 changes: 8 additions & 0 deletions src/Languages/Base/BaseLanguage.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@
use Tempest\Highlight\Languages\Base\Injections\DeletionInjection;
use Tempest\Highlight\Languages\Base\Injections\EmphasizeInjection;
use Tempest\Highlight\Languages\Base\Injections\StrongInjection;
use Tempest\Highlight\Languages\Base\Patterns\AdditionEndTokenPattern;
use Tempest\Highlight\Languages\Base\Patterns\AdditionStartTokenPattern;
use Tempest\Highlight\Languages\Base\Patterns\DeletionEndTokenPattern;
use Tempest\Highlight\Languages\Base\Patterns\DeletionStartTokenPattern;
use Tempest\Highlight\Languages\Base\Patterns\InjectionTokenPattern;

abstract class BaseLanguage implements Language
Expand All @@ -35,6 +39,10 @@ public function getInjections(): array
public function getPatterns(): array
{
return [
new AdditionStartTokenPattern(),
new AdditionEndTokenPattern(),
new DeletionStartTokenPattern(),
new DeletionEndTokenPattern(),
new InjectionTokenPattern(),
];
}
Expand Down
3 changes: 3 additions & 0 deletions src/Languages/Base/Injections/AdditionInjection.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
{
public function parse(string $content, Highlighter $highlighter): ParsedInjection
{
$content = str_replace('❷span class=❹ignore❹❸{+❷/span❸', '{+', $content);
$content = str_replace('❷span class=❹ignore❹❸+}❷/span❸', '+}', $content);

preg_match_all('/(\{\+)((.|\n)*?)(\+})/', $content, $matches, PREG_OFFSET_CAPTURE);

foreach ($matches[0] as $match) {
Expand Down
3 changes: 3 additions & 0 deletions src/Languages/Base/Injections/DeletionInjection.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
{
public function parse(string $content, Highlighter $highlighter): ParsedInjection
{
$content = str_replace('❷span class=❹ignore❹❸{-❷/span❸', '{-', $content);
$content = str_replace('❷span class=❹ignore❹❸-}❷/span❸', '-}', $content);

preg_match_all('/(\{-)((.|\n)*?)(-})/', $content, $matches, PREG_OFFSET_CAPTURE);

foreach ($matches[0] as $match) {
Expand Down
26 changes: 26 additions & 0 deletions src/Languages/Base/Patterns/AdditionEndTokenPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Tempest\Highlight\Languages\Base\Patterns;

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

#[PatternTest('{+ pull_request_target: +}', '+}')]
final readonly class AdditionEndTokenPattern implements Pattern
{
use IsPattern;

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

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

namespace Tempest\Highlight\Languages\Base\Patterns;

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

#[PatternTest('{+ pull_request_target: +}', '{+')]
final readonly class AdditionStartTokenPattern implements Pattern
{
use IsPattern;

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

public function getTokenType(): TokenType
{
return new IgnoreTokenType();
}
}
25 changes: 25 additions & 0 deletions src/Languages/Base/Patterns/DeletionEndTokenPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Tempest\Highlight\Languages\Base\Patterns;

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

#[PatternTest('{- pull_request_target: -}', '-}')]
final readonly class DeletionEndTokenPattern implements Pattern
{
use IsPattern;

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

public function getTokenType(): TokenType
{
return new IgnoreTokenType();
}
}
25 changes: 25 additions & 0 deletions src/Languages/Base/Patterns/DeletionStartTokenPattern.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Tempest\Highlight\Languages\Base\Patterns;

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

#[PatternTest('{- pull_request_target: -}', '{-')]
final readonly class DeletionStartTokenPattern implements Pattern
{
use IsPattern;

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

public function getTokenType(): TokenType
{
return new IgnoreTokenType();
}
}
4 changes: 2 additions & 2 deletions src/Pattern.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@

namespace Tempest\Highlight;

use Tempest\Highlight\Tokens\TokenTypeEnum;
use Tempest\Highlight\Tokens\TokenType;

interface Pattern
{
public function match(string $content): array;

public function getTokenType(): TokenTypeEnum;
public function getTokenType(): TokenType;
}
18 changes: 18 additions & 0 deletions src/Tokens/IgnoreTokenType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace Tempest\Highlight\Tokens;

final readonly class IgnoreTokenType implements TokenType
{
public function getValue(): string
{
return 'ignore';
}

public function canContain(TokenType $other): bool
{
return false;
}
}
5 changes: 3 additions & 2 deletions tests/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@
use Tempest\Highlight\CommonMark\CodeBlockRenderer;
use Tempest\Highlight\CommonMark\InlineCodeBlockRenderer;
use Tempest\Highlight\Highlighter;
use Tempest\Highlight\Themes\CssTheme;
use Tempest\Highlight\Themes\InlineTheme;

$environment = new Environment();

$highlighter = (new Highlighter(new InlineTheme(__DIR__ . '/../src/Themes/Css/highlight-light-lite.css')));
$highlighter = (new Highlighter(new CssTheme()))->withGutter();

$environment
->addExtension(new CommonMarkCoreExtension())
Expand All @@ -38,7 +39,7 @@
<head>
<title>Test</title>
<style>
<?= file_get_contents(__DIR__ . '/../src/Themes/highlight-light-lite.css') ?>
<?= file_get_contents(__DIR__ . '/../src/Themes/Css/highlight-light-lite.css') ?>

body {
font-size: 15px;
Expand Down
4 changes: 2 additions & 2 deletions tests/targets/test.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
{+ pull_request_target: +}
{+ types: [opened, synchronize, reopened, ready_for_review] +}
{- pull_request_target: -}
{- types: [opened, synchronize, reopened, ready_for_review] -}
```

0 comments on commit d3810e4

Please sign in to comment.