X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/ab511bb39c4cde35137b7ce3a2fe34fe720259a5..1ef40ff68370aba85e9816221675a8edd7a308f5:/IkiWiki/Plugin/highlight.pm?ds=sidebyside

diff --git a/IkiWiki/Plugin/highlight.pm b/IkiWiki/Plugin/highlight.pm
index 65e372db1..ce919748a 100644
--- a/IkiWiki/Plugin/highlight.pm
+++ b/IkiWiki/Plugin/highlight.pm
@@ -51,13 +51,8 @@ sub getsetup () {
 }
 
 sub checkconfig () {
-
 	eval q{use highlight};
-	if ($@) {
-		print STDERR "Failed to load highlight. Configuring anyway.\n";
-	};
-
-	if (highlight::DataDir->can('new')){
+	if (highlight::DataDir->can('new')) {
 		$data_dir=new highlight::DataDir();
 		$data_dir->searchDataDir("");
 	} else {
@@ -65,14 +60,22 @@ sub checkconfig () {
 	}
 
 	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('searchFile') ) {
+		# 3.18 +
+		$config{filetypes_conf}=
+		  $data_dir -> searchFile("filetypes.conf");
+	      } 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()) {
@@ -94,7 +97,7 @@ sub checkconfig () {
 				id => $file,
 				call => sub {
 					my %params=@_;
-				       	highlight($langfile, $params{content});
+				       	highlight($langfile, $file, $params{content});
 				},
 				longname => sprintf(gettext("Source code: %s"), $file),
 				@opts,
@@ -111,7 +114,7 @@ sub htmlizeformat {
 		return;
 	}
 
-	return Encode::decode_utf8(highlight($langfile, shift));
+	return Encode::decode_utf8(highlight($langfile, $format, shift));
 }
 
 my %ext2lang;
@@ -152,17 +155,27 @@ sub read_filetypes () {
 }
 
 
+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.
@@ -177,6 +190,7 @@ sub ext2langfile ($) {
 # Interface to the highlight C library.
 sub highlight ($$) {
 	my $langfile=shift;
+	my $extorfile=shift;
 	my $input=shift;
 
 	eval q{use highlight};
@@ -205,7 +219,7 @@ sub highlight ($$) {
 		$gen=$highlighters{$langfile};
 	}
 
-	return $gen->generateString($input);
+	return "<div class=\"highlight-$extorfile\">".$gen->generateString($input)."</div>";
 }
 
 1