diff options
author | Joey Hess <joey@kitenet.net> | 2010-11-20 12:55:26 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2010-11-20 12:55:26 -0400 |
commit | af5f162ca7c8cd14d64f6282e05a3032dbd7c2fb (patch) | |
tree | 926150984baac3fdb505e2102c4011a18b8912b6 /IkiWiki/Plugin | |
parent | f8f8770a652520b2f09eb2262510a04a8e353e9d (diff) | |
download | ikiwiki-af5f162ca7c8cd14d64f6282e05a3032dbd7c2fb.tar ikiwiki-af5f162ca7c8cd14d64f6282e05a3032dbd7c2fb.tar.gz |
highlight: Support new format of filetypes.conf used by version 3.2 of the highlight package.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/highlight.pm | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/IkiWiki/Plugin/highlight.pm b/IkiWiki/Plugin/highlight.pm index 934e64bed..9d05e9fcf 100644 --- a/IkiWiki/Plugin/highlight.pm +++ b/IkiWiki/Plugin/highlight.pm @@ -96,14 +96,29 @@ my %highlighters; # Parse highlight's config file to get extension => language mappings. sub read_filetypes () { - open (IN, $config{filetypes_conf}) || error("$config{filetypes_conf}: $!"); - while (<IN>) { - chomp; - if (/^\$ext\((.*)\)=(.*)$/) { - $ext2lang{$_}=$1 foreach $1, split ' ', $2; + open (my $f, $config{filetypes_conf}) || error("$config{filetypes_conf}: $!"); + local $/=undef; + my $config=<$f>; + close $f; + + # highlight >= 3.2 format (bind-style) + while ($config=~m/Lang\s*=\s*\"([^"]+)\"[,\s]+Extensions\s*=\s*{([^}]+)}/sg) { + my $lang=$1; + foreach my $bit (split ',', $2) { + $bit=~s/.*"(.*)".*/$1/s; + $ext2lang{$bit}=$lang; } } - close IN; + + # highlight < 3.2 format + if (! keys %ext2lang) { + foreach (split("\n", $config)) { + if (/^\$ext\((.*)\)=(.*)$/) { + $ext2lang{$_}=$1 foreach $1, split ' ', $2; + } + } + } + $filetypes_read=1; } |