2008-08-26 19:22:34 +02:00
|
|
|
|
#!/usr/bin/perl
|
|
|
|
|
# Ikiwiki text colouring plugin
|
|
|
|
|
# Paweł‚ Tęcza <ptecza@net.icm.edu.pl>
|
|
|
|
|
package IkiWiki::Plugin::color;
|
|
|
|
|
|
|
|
|
|
use warnings;
|
|
|
|
|
use strict;
|
2008-12-23 22:34:19 +01:00
|
|
|
|
use IkiWiki 3.00;
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
sub import {
|
2008-08-26 19:22:34 +02:00
|
|
|
|
hook(type => "preprocess", id => "color", call => \&preprocess);
|
|
|
|
|
hook(type => "format", id => "color", call => \&format);
|
2010-02-06 22:25:39 +01:00
|
|
|
|
hook(type => "getsetup", id => "color", call => \&getsetup);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub getsetup () {
|
|
|
|
|
return
|
|
|
|
|
plugin => {
|
|
|
|
|
safe => 1,
|
|
|
|
|
rebuild => undef,
|
2010-02-12 12:35:52 +01:00
|
|
|
|
section => "widget",
|
2010-02-06 22:25:39 +01:00
|
|
|
|
},
|
2008-12-17 21:22:16 +01:00
|
|
|
|
}
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
sub preserve_style ($$$) {
|
2008-08-26 19:22:34 +02:00
|
|
|
|
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;
|
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
}
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
sub replace_preserved_style ($) {
|
2008-08-26 19:22:34 +02:00
|
|
|
|
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;
|
2008-12-17 21:22:16 +01:00
|
|
|
|
}
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
sub preprocess (@) {
|
2008-08-26 19:22:34 +02:00
|
|
|
|
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});
|
2008-12-17 21:22:16 +01:00
|
|
|
|
}
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
2008-12-17 21:22:16 +01:00
|
|
|
|
sub format (@) {
|
2008-08-26 19:22:34 +02:00
|
|
|
|
my %params = @_;
|
|
|
|
|
|
|
|
|
|
$params{content} = replace_preserved_style($params{content});
|
|
|
|
|
return $params{content};
|
2008-12-17 21:22:16 +01:00
|
|
|
|
}
|
2008-08-26 19:22:34 +02:00
|
|
|
|
|
|
|
|
|
1
|