X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FHlMod.pm;h=f42ece80ededc4a04f06f453170c7320aaf94391;hb=6248a7ab1046d0ccdc0b244099fb241fd52d653e;hp=9016db3a03fc949eb0756d20f02037e6a8d58230;hpb=b28e74c9dc0acad164187f6f584f815df1bc6ec7;p=public-inbox.git diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm index 9016db3a..f42ece80 100644 --- a/lib/PublicInbox/HlMod.pm +++ b/lib/PublicInbox/HlMod.pm @@ -14,7 +14,7 @@ # wrapper for SWIG-generated highlight.pm bindings package PublicInbox::HlMod; use strict; -use warnings; +use v5.10.1; use highlight; # SWIG-generated stuff use PublicInbox::Hval qw(src_escape ascii_html); my $hl; @@ -54,8 +54,7 @@ sub _parse_filetypes ($) { (\%ext2lang, \@shebang); } -# We only need one instance, so we don't need to do -# highlight::CodeGenerator::deleteInstance +# We only need one instance sub new { my ($class) = @_; $hl ||= do { @@ -95,33 +94,26 @@ sub do_hl { sub do_hl_lang { my ($self, $str, $lang) = @_; - my $dir = $self->{-dir}; my $langpath; - if (defined $lang) { - $langpath = $dir->getLangPath("$lang.lang") or return; - $lang = undef unless -f $langpath - } - unless (defined $lang) { - $lang = _shebang2lang($self, $str) or return; - $langpath = $dir->getLangPath("$lang.lang") or return; - return unless -f $langpath + $langpath = $self->{-dir}->getLangPath("$lang.lang") or return; + undef $lang unless -f $langpath; } - my $gen = $self->{$langpath} ||= do { - my $g = highlight::CodeGenerator::getInstance($highlight::HTML); - $g->setFragmentCode(1); # generate html fragment + $lang //= _shebang2lang($self, $str) // return; + $langpath = $self->{-dir}->getLangPath("$lang.lang") or return; + return unless -f $langpath; - # whatever theme works - my $themepath = $dir->getThemePath('print.theme'); - $g->initTheme($themepath); - $g->loadLanguage($langpath); - $g->setEncoding('utf-8'); - $g; - }; + my $g = highlight::CodeGenerator::getInstance($highlight::HTML); + $g->setFragmentCode(1); # generate html fragment + # whatever theme works + $g->initTheme($self->{-dir}->getThemePath('print.theme')); + $g->loadLanguage($langpath); + $g->setEncoding('utf-8'); # we assume $$str is valid UTF-8, but the SWIG binding doesn't # know that, so ensure it's marked as UTF-8 even if it isnt... - my $out = $gen->generateString($$str); + my $out = $g->generateString($$str); + highlight::CodeGenerator::deleteInstance($g); utf8::decode($out); src_escape($out); \$out;