This doesn't actually work, but is a bit of an attempt at syntax highlighting for code blocks, using enscript to do the work. I may come back to it again, or maybe not. One thing's for sure: the feature will be added sooner if someone helps out with a patch. --- wiki.pm Mon Dec 23 21:56:08 2002 +++ wiki.pm Mon Dec 23 21:53:43 2002 @@ -829,7 +829,7 @@ my $text = removeSystemTags(@_); my ($result, $nextMode, $lastWasBlank, $tableMode) = ("",'wiki',1,0); - + my ($enscriptLang, $enscriptText) = ('',''); #$text =~ s/\\\n//go; # what _is_ that? seems dumb. @@ -871,6 +871,16 @@ } else { $result .= literalText($_) . "
\n" } + } elsif ($mode eq 'enscript') { + if (/^\s*\}\}\}\s*$/o) { + $nextMode = 'wiki'; + $result .= enscriptHighlight($enscriptText, $enscriptLang); + $result .= "$codeBlockClose\n"; + $lastWasBlank = 0; + } else { + $enscriptText .= "$_\n"; + } + } elsif (/^\s*\\s*$/io) { $result .= "
\n";
@@ -879,10 +889,19 @@
 
         } elsif (s/^\s*{{{\s*$/$codeBlockOpen/o) {
 
+            #$result .= '
' unless $lastWasBlank; + $result .= "$codeBlockOpen\n"; $nextMode = 'code'; $lastWasBlank = 0; + } elsif (s/^\s*{{{\s*\@(\w+)\s*$/$codeBlockOpen/o) { + $nextMode = "enscript"; + $enscriptLang = lc($1); + $enscriptText = ''; + + $result .= "$codeBlockOpen\n"; + $lastWasBlank = 0; } elsif (s/^~//o) { #temporary code mode @@ -1125,6 +1144,9 @@ $result .= "
\n"; } elsif ($nextMode eq 'code') { $result .= "$codeBlockClose\n\n"; + } elsif ($nextMode eq 'enscript') { + $result .= enscriptHighlight($enscriptText, $enscriptLang); + $result .= "$codeBlockClose\n\n"; } elsif ($tableMode) { $result .= "$endTable\n"; } @@ -1180,5 +1202,17 @@ return $_; } + + + + +sub enscriptHighlight { + my ($text, $mode) = @_; + + my $output = `/usr/bin/enscript --language=html --output=- --pretty-print=$mode <<}}}\n$text}}}`; + return $output; +} + + 1;