2 # Ikiwiki text colouring plugin
3 # Paweł‚ Tęcza <ptecza@net.icm.edu.pl>
4 package IkiWiki
::Plugin
::color
;
11 hook
(type
=> "preprocess", id
=> "color", call
=> \
&preprocess
);
12 hook
(type
=> "format", id
=> "color", call
=> \
&format
);
13 hook
(type
=> "getsetup", id
=> "color", call
=> \
&getsetup
);
25 sub preserve_style
($$$) {
26 my $foreground = shift;
27 my $background = shift;
30 $foreground = defined $foreground ?
lc($foreground) : '';
31 $background = defined $background ?
lc($background) : '';
32 $text = '' unless (defined $text);
34 # Validate colors. Only color name or color code are valid.
35 $foreground = '' unless ($foreground &&
36 ($foreground =~ /^[a-z]+$/ || $foreground =~ /^#[0-9a-f]{3,6}$/));
37 $background = '' unless ($background &&
38 ($background =~ /^[a-z]+$/ || $background =~ /^#[0-9a-f]{3,6}$/));
41 $preserved .= '<span class="color">';
42 $preserved .= 'color: '.$foreground if ($foreground);
43 $preserved .= '; ' if ($foreground && $background);
44 $preserved .= 'background-color: '.$background if ($background);
45 $preserved .= '</span>';
46 $preserved .= '<span class="colorend">'.$text.'</span>';
52 sub replace_preserved_style
($) {
55 $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;
56 $content =~ s!<span class="colorend">!!g;
64 return preserve_style
($params{foreground
}, $params{background
},
65 # Preprocess the text to expand any preprocessor directives
67 IkiWiki
::preprocess
($params{page
}, $params{destpage
},
74 $params{content
} = replace_preserved_style
($params{content
});
75 return $params{content
};