Added my site, even though it's in an early state
[ikiwiki.git] / IkiWiki / Plugin / color.pm
blob9bb2359ce6f45f9ba452ad400aa48fc2c204584e
1 #!/usr/bin/perl
2 # Ikiwiki text colouring plugin
3 # Paweł‚ Tęcza <ptecza@net.icm.edu.pl>
4 package IkiWiki::Plugin::color;
6 use warnings;
7 use strict;
8 use IkiWiki 3.00;
10 sub import {
11 hook(type => "preprocess", id => "color", call => \&preprocess);
12 hook(type => "format", id => "color", call => \&format);
13 hook(type => "getsetup", id => "color", call => \&getsetup);
16 sub getsetup () {
17 return
18 plugin => {
19 safe => 1,
20 rebuild => undef,
21 section => "widget",
25 sub preserve_style ($$$) {
26 my $foreground = shift;
27 my $background = shift;
28 my $text = 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}$/));
40 my $preserved = '';
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>';
48 return $preserved;
52 sub replace_preserved_style ($) {
53 my $content = shift;
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;
58 return $content;
61 sub preprocess (@) {
62 my %params = @_;
64 return preserve_style($params{foreground}, $params{background},
65 # Preprocess the text to expand any preprocessor directives
66 # embedded inside it.
67 IkiWiki::preprocess($params{page}, $params{destpage},
68 $params{text}));
71 sub format (@) {
72 my %params = @_;
74 $params{content} = replace_preserved_style($params{content});
75 return $params{content};