Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add an HTML output module
Usage:
my $html = Grammar::Highlighter.new(:formatter(Grammar::Highlighter::HTML.new));
say $parser.parse(q:heredoc/INPUT/, :actions($html)ast.Str;
  • Loading branch information
niner committed Feb 28, 2015
1 parent 85d1c89 commit 1cddcff
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
12 changes: 12 additions & 0 deletions lib/Grammar/Highlighter/HTML.pm
@@ -0,0 +1,12 @@
class Grammar::Highlighter::HTML;

use Term::ANSIColor;

my @colors = < aqua blue fuchsia gray green lime maroon navy olive purple red silver teal white yellow >;

method colored(Str $code, Int $color) {
return qq!<span style="color: {@colors[$color % @colors.elems]};">{$code}</span>!;
}

# vim: ft=perl6

18 changes: 16 additions & 2 deletions t/highlight.t
Expand Up @@ -2,6 +2,7 @@ use Test;

use Grammar::Highlighter;
use Grammar::Highlighter::Terminal;
use Grammar::Highlighter::HTML;

grammar Foo {
rule TOP {
Expand All @@ -26,9 +27,9 @@ grammar Foo {
}

my $parser = Foo.new;
my $highlighter = Grammar::Highlighter.new(:formatter(Grammar::Highlighter::Terminal.new));
my $terminal = Grammar::Highlighter.new(:formatter(Grammar::Highlighter::Terminal.new));

is($parser.parse(q:heredoc/INPUT/, :actions($highlighter)).ast.Str, qq:heredoc/OUTPUT/.chomp);
is($parser.parse(q:heredoc/INPUT/, :actions($terminal)).ast.Str, qq:heredoc/OUTPUT/.chomp);
Foo Baz;
Foo Baz;
Bar Baz;
Expand All @@ -39,6 +40,19 @@ is($parser.parse(q:heredoc/INPUT/, :actions($highlighter)).ast.Str, qq:heredoc/O
\x[1b][0m\x[1b][0m
OUTPUT
my $html = Grammar::Highlighter.new(:formatter(Grammar::Highlighter::HTML.new));
is($parser.parse(q:heredoc/INPUT/, :actions($html)).ast.Str, q:heredoc/OUTPUT/.chomp);
Foo Baz;
Foo Baz;
Bar Baz;
INPUT
<span style="color: green;"><span style="color: fuchsia;"><span style="color: blue;">Foo <span style="color: aqua;">Baz</span></span>;
</span><span style="color: fuchsia;"><span style="color: blue;">Foo <span style="color: aqua;">Baz</span></span>;
</span><span style="color: fuchsia;"><span style="color: gray;">Bar <span style="color: aqua;">Baz</span></span>;
</span></span>
OUTPUT

done;

# vim: ft=perl6

0 comments on commit 1cddcff

Please sign in to comment.