lib/PublicInbox/HlMod.pm | 38 +++++++++++++++-----------------------
t/hl_mod.t | 3 +--
diff --git a/lib/PublicInbox/HlMod.pm b/lib/PublicInbox/HlMod.pm
index 9016db3a03fc949eb0756d20f02037e6a8d58230..f42ece80ededc4a04f06f453170c7320aaf94391 100644
--- a/lib/PublicInbox/HlMod.pm
+++ b/lib/PublicInbox/HlMod.pm
@@ -14,7 +14,7 @@ # Some code stolen from ikiwiki (GPL-2.0+)
# 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 @@ }
(\%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_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
+ $langpath = $self->{-dir}->getLangPath("$lang.lang") or return;
+ undef $lang unless -f $langpath;
}
- unless (defined $lang) {
- $lang = _shebang2lang($self, $str) or return;
- $langpath = $dir->getLangPath("$lang.lang") or return;
- return 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;
diff --git a/t/hl_mod.t b/t/hl_mod.t
index 96878d5191dfa29197ebb8dc616c3a6a2c17b196..a88f6c0372bd2d1fcbbc0cd5bba482b3c22b37c5 100644
--- a/t/hl_mod.t
+++ b/t/hl_mod.t
@@ -3,8 +3,7 @@ # Copyright (C) 2019-2021 all contributors
# License: AGPL-3.0+
use strict; use v5.10.1; use PublicInbox::TestCommon; use IO::Handle; # ->autoflush
use Fcntl qw(:seek);
-eval { require highlight } or
- plan skip_all => "failed to load highlight.pm for $0";
+require_mods 'highlight';
use_ok 'PublicInbox::HlMod';
my $hls = PublicInbox::HlMod->new;
ok($hls, 'initialized OK');