diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-08-26 13:22:34 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-08-26 13:22:34 -0400 |
commit | 042a0577780ca1783ce8cb4d9a050fa115f6cd6b (patch) | |
tree | 48d4cb370193221daa347d206fda83f527d8d5f3 /IkiWiki | |
parent | 6364949dfced5cdbba5014d34dbf0e7f0980cd27 (diff) | |
download | ikiwiki-042a0577780ca1783ce8cb4d9a050fa115f6cd6b.tar ikiwiki-042a0577780ca1783ce8cb4d9a050fa115f6cd6b.tar.gz |
color: New plugin from ptecza.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/color.pm | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/color.pm b/IkiWiki/Plugin/color.pm new file mode 100644 index 000000000..ac702ff02 --- /dev/null +++ b/IkiWiki/Plugin/color.pm @@ -0,0 +1,69 @@ +#!/usr/bin/perl +# Ikiwiki text colouring plugin +# Paweł‚ Tęcza <ptecza@net.icm.edu.pl> +package IkiWiki::Plugin::color; + +use warnings; +use strict; +use IkiWiki 2.00; + +sub import { #{{{ + hook(type => "preprocess", id => "color", call => \&preprocess); + hook(type => "format", id => "color", call => \&format); +} #}}} + +sub preserve_style ($$$) { #{{{ + my $foreground = shift; + my $background = shift; + my $text = shift; + + $foreground = defined $foreground ? lc($foreground) : ''; + $background = defined $background ? lc($background) : ''; + $text = '' unless (defined $text); + + # Validate colors. Only color name or color code are valid. + $foreground = '' unless ($foreground && + ($foreground =~ /^[a-z]+$/ || $foreground =~ /^#[0-9a-f]{3,6}$/)); + $background = '' unless ($background && + ($background =~ /^[a-z]+$/ || $background =~ /^#[0-9a-f]{3,6}$/)); + + my $preserved = ''; + $preserved .= '<span class="color">'; + $preserved .= 'color: '.$foreground if ($foreground); + $preserved .= '; ' if ($foreground && $background); + $preserved .= 'background-color: '.$background if ($background); + $preserved .= '</span>'; + $preserved .= '<span class="colorend">'.$text.'</span>'; + + return $preserved; + +} #}}} + +sub replace_preserved_style ($) { #{{{ + my $content = shift; + + $content =~ s!<span class="color">((color: ([a-z]+|\#[0-9a-f]{3,6})?)?((; )?(background-color: ([a-z]+|\#[0-9a-f]{3,6})?)?)?)</span>!<span class="color" style="$1">!g; + $content =~ s!<span class="colorend">!!g; + + return $content; +} #}}} + +sub preprocess (@) { #{{{ + my %params = @_; + + # Preprocess the text to expand any preprocessor directives + # embedded inside it. + $params{text} = IkiWiki::preprocess($params{page}, $params{destpage}, + IkiWiki::filter($params{page}, $params{destpage}, $params{text})); + + return preserve_style($params{foreground}, $params{background}, $params{text}); +} #}}} + +sub format (@) { #{{{ + my %params = @_; + + $params{content} = replace_preserved_style($params{content}); + return $params{content}; +} #}}} + +1 |