eval q{use highlight};
if (highlight::DataDir->can('new')) {
$data_dir=new highlight::DataDir();
- $data_dir->searchDataDir("");
+ if ( $data_dir->can('initSearchDirectories') ) {
+ # 4.0+
+ $data_dir -> initSearchDirectories("");
+ } else {
+ # pre-4.0
+ $data_dir -> searchDataDir("");
+ }
} else {
$data_dir=undef;
}
if (! exists $config{filetypes_conf}) {
- $config{filetypes_conf}=
- ($data_dir ? $data_dir->getConfDir() : "/etc/highlight/")
- . "filetypes.conf";
+ if (! $data_dir ) {
+ $config{filetypes_conf}= "/etc/highlight/filetypes.conf";
+ } elsif ( $data_dir -> can('getFiletypesConfPath') ) {
+ # 3.14 +
+ $config{filetypes_conf}=
+ $data_dir -> getFiletypesConfPath("filetypes");
+ } else {
+ # 3.9 +
+ $config{filetypes_conf}=
+ $data_dir -> getConfDir() . "/filetypes.conf";
+ }
}
+ # note that this is only used for old versions of highlight
+ # where $data_dir will not be defined.
if (! exists $config{langdefdir}) {
- $config{langdefdir}=
- ($data_dir ? $data_dir->getLangPath("")
- : "/usr/share/highlight/langDefs");
+ $config{langdefdir}= "/usr/share/highlight/langDefs";
}
if (exists $config{tohighlight} && read_filetypes()) {
id => $file,
call => sub {
my %params=@_;
- highlight($langfile, $params{content});
+ highlight($langfile, $file, $params{content});
},
longname => sprintf(gettext("Source code: %s"), $file),
@opts,
return;
}
- return Encode::decode_utf8(highlight($langfile, shift));
+ return Encode::decode_utf8(highlight($langfile, $format, shift));
}
my %ext2lang;
}
+sub searchlangdef {
+ my $lang=shift;
+
+ if ($data_dir) {
+ return $data_dir->getLangPath($lang . ".lang");
+ } else {
+ return "$config{langdefdir}/$lang.lang";
+ }
+
+}
# Given a filename extension, determines the language definition to
# use to highlight it.
sub ext2langfile ($) {
my $ext=shift;
- my $langfile="$config{langdefdir}/$ext.lang";
+ my $langfile=searchlangdef($ext);
return $langfile if exists $highlighters{$langfile};
read_filetypes() unless $filetypes_read;
if (exists $ext2lang{$ext}) {
- return "$config{langdefdir}/$ext2lang{$ext}.lang";
+ return searchlangdef($ext2lang{$ext});
}
# If a language only has one common extension, it will not
# be listed in filetypes, so check the langfile.
# Interface to the highlight C library.
sub highlight ($$) {
my $langfile=shift;
+ my $extorfile=shift;
my $input=shift;
eval q{use highlight};
my $gen;
if (! exists $highlighters{$langfile}) {
+ no warnings 'once';
$gen = highlight::CodeGenerator::getInstance($highlight::XHTML);
+ use warnings;
$gen->setFragmentCode(1); # generate html fragment
$gen->setHTMLEnclosePreTag(1); # include stylish <pre>
if ($data_dir){
$gen=$highlighters{$langfile};
}
- return $gen->generateString($input);
+ return "<div class=\"highlight-$extorfile\">".$gen->generateString($input)."</div>";
}
1