From 042a0577780ca1783ce8cb4d9a050fa115f6cd6b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 26 Aug 2008 13:22:34 -0400 Subject: color: New plugin from ptecza. --- IkiWiki/Plugin/color.pm | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 IkiWiki/Plugin/color.pm (limited to 'IkiWiki/Plugin/color.pm') 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 +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 .= ''; + $preserved .= 'color: '.$foreground if ($foreground); + $preserved .= '; ' if ($foreground && $background); + $preserved .= 'background-color: '.$background if ($background); + $preserved .= ''; + $preserved .= ''.$text.''; + + return $preserved; + +} #}}} + +sub replace_preserved_style ($) { #{{{ + my $content = shift; + + $content =~ s!((color: ([a-z]+|\#[0-9a-f]{3,6})?)?((; )?(background-color: ([a-z]+|\#[0-9a-f]{3,6})?)?)?)!!g; + $content =~ s!!!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 -- cgit v1.2.3