NAME
Syntax::Highlight::Perl6 - Perl 6 Syntax Highlighter
SYNOPSIS
### NOTE: This is needed and will be removed in future releases
use STD;
use Syntax::Highlight::Perl6;
# Creates the Perl6 syntax highlighter object
my $p = Syntax::Highlight::Perl6->new(
text => 'my $foo;'
);
# Prints html that can be embedded in your pages
print $p->snippet_html;
# Prints html with css (useful for full pages)
print $p->simple_html;
# Prints html that has a JavaScript node viewer
print $p->full_html;
# Prints ANSI escaped color sequences (useful for console and IRC output)
print $p->ansi_text;
# Prints an array of token records (useful for other libraries)
print $p->tokens;
# Prints VIM-generated syntax highlighted html
use Text::VimColor; # This is only needed if you need
print $p->vim_html; # to call this method
DESCRIPTION
Syntax::Highlight::Perl6
parses Perl 6 source code using an embedded STD.pm. It matches parse tree nodes to colors then returns them in different output formats. It can be used to create web pages with colorful source code samples in its simple and snippet html modes, or it can be used as a learning tool in examining STD.pm's output using the JavaScript node viewer in its full html mode. Or you can use its parse tree Perl 5 records to build your next great idea.
The available output formats are:
HTML (snippet,simple and full)
ANSI escaped color sequences
Perl 5 array of parse trees
SUBROUTINES/METHODS
This is an object-oriented module. The following methods are available:
new(options)
Returns the syntax highlighting object. It needs a hash of options. The following options are available:
text
This is a required option. This is where you should provide the Perl 6 code.
rule
parse rule name for STD.pm to parse against (default: comp_unit)
inline_resources
Flag to enable/disable CSS/JavaScript HTML inlining. (default: 0 (Disabled))
resource_url
HTML resource url that will be appended when resource inlining is disabled.
page_title
HTML page title for
simple_html
andfull_html
(default: q{})utf8_decode
Flag to enable/disable utf8 decoding. (default: 1 (Enabled))
snippet_html
Returns the Perl 6 highlighted HTML string that can be embedded. No CSS or JavaScript is inside.
simple_html
Returns the Perl 6 highlighted HTML string. The HTML code is the same as full_html
but lacks a JavaScript Parse Tree Viewer.
full_html
Returns the Perl 6 highlighted HTML string. The HTML consists of a JavaScript Parse Tree Viewer along with CSS-styling. It can inlined if inline_resources
option is 1.
ansi_text
Returns a Perl highlighted ANSI escape color string.
tokens
Returns an array of hashes containing parsed token records. The hash record is structured as:
+-----------+---------+-----------+------------+---------+
| Matched | Matched | Matched | Parse tree | Matched |
| Last | string | rule | separated | Line |
| Position | buffer | name | by spaces | Number |
| | | | | |
| $last_pos | $buffer | $rule | $tree | $lineno |
+-----------+---------+-----------+------------+---------+
An example of the tokens
method in action:
use Data::Dumper;
print Dumper($p->tokens);
The shortened output looks like:
$VAR1 = {
'tree' => '',
'rule' => 0,
'buffer' => '',
'last_pos' => 0
};
$VAR2 = {
'tree' => 'statementlist statement statement_modexpr statement_expr EXPR termish noun value number integer ',
'rule' => 'number',
'buffer' => '1',
'last_pos' => 1
};
$VAR3 = {
'tree' => 'statementlist eat_terminator ',
'rule' => 0,
'buffer' => ';',
'last_pos' => 2
};
vim_html
Returns the Perl 6 highlighted HTML string that was generated using VIM's excellent syntax coloring engine. Please remember to copy perl6.vim to your ~/.vim/syntax.
NOTE: This method needs VIM to work properly along with Text::VimColor.
INCOMPATIBILITIES
This module is dependent on Perl 5.10 features namely the regex engine and state variables (for STD.pm). So Perl 5.8.x support will NOT be available for now.
SEE ALSO
Discussion about this module and STD.pm is usually in #perl6 (irc://irc.freenode.net/perl6). This module lives in http://svn.pugscode.org/pugs/misc/Syntax-Highlight-Perl6 . Larry Wall's STD.pm
lives in http://svn.pugscode.org/pugs/src/perl6 . perl6.vim
lives in http://svn.pugscode.org/pugs/util/perl6.vim .
BUGS AND LIMITATIONS
If you find any bugs, please submit them to http://rt.cpan.org/NoAuth/Bugs.html?Dist=Syntax::Highlight::Perl6. Thanks.
These are the bugs that i am currently aware of:
Can't call method "bless" on an undefined value at STD.pm line 5269.
You have to put "use STD;" before using this module.
use STD; # this must be first for now use Syntax::Highlight::Perl6;
Directory 'lex' is created when using this module.
STD.pm caches digraphs and the matched rules in there. So this is Pretty Voodoo Stuff. Otherwise it will be pretty slow.
Slow startup when using the module for the first time
That is related to the creation of the cached 'lex'ing directory by STD.pm. This happens only once.
AUTHOR
Written by Ahmad M. Zawawi <ahmad.zawawi at gmail.com>
(azawawi
in #perl6
).
The project idea was inspired by Moritz Lenz (moritz) - http://www.nntp.perl.org/group/perl.perl6.users/2008/07/msg788.html . Larry Wall's gimme5
-generated Perl5 STD.pmc
is included to parse Perl 6 code. The initial STD tree traversal code was written by Paweł Murias (pmurias). It was replaced afterwards for performance reasons with Larry Wall's redspans
traversal code. redspans
stands for red
for reductions, and spans
from the "from/to span calculations". The included perl6.vim is written by Luke Palmer, Moritz Lenz, and Hinrik Ãn Sigurðsson.
Thanks guys. I could not have done it without you ;-)
LICENSE AND COPYRIGHT
Copyright (C) 2008-2009 by Ahmad Zawawi
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
This library also includes the following libraries:
STD.pm by Larry Wall (Artistic License 2.0)
JQuery by John Resig (dual licensed under the MIT and GPL licenses).
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 765:
Non-ASCII character seen before =encoding in 'Paweł'. Assuming UTF-8