color: New plugin from ptecza.
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 26 Aug 2008 17:22:34 +0000 (13:22 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 26 Aug 2008 17:22:34 +0000 (13:22 -0400)
IkiWiki/Plugin/color.pm [new file with mode: 0644]
debian/changelog
debian/copyright
doc/plugins/color.mdwn [new file with mode: 0644]
doc/style.css
doc/todo/color_plugin.mdwn

diff --git a/IkiWiki/Plugin/color.pm b/IkiWiki/Plugin/color.pm
new file mode 100644 (file)
index 0000000..ac702ff
--- /dev/null
@@ -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
index 0730c1f3fbe67d5e3159eb40a9b65efcd3cda074..485a34ddf7a20113e41c18d60c152c637de195b3 100644 (file)
@@ -17,6 +17,7 @@ ikiwiki (2.62) UNRELEASED; urgency=low
   * filecheck: New plugin factoring out the PageSpec additions that were
     originally part of the attachment plugin.
   * edittemplate: Don't wipe out edits on preview.
+  * color: New plugin from ptecza.
 
  -- Joey Hess <joeyh@debian.org>  Thu, 21 Aug 2008 16:20:58 -0400
 
index b6c95ba990d66777cc6aad74c60e105341a429d4..a24970e2953396911ad38b221b46e21bf6784646 100644 (file)
@@ -100,6 +100,10 @@ Files: txt.pm
 Copyright: Copyright (C) 2008 Gabriel McManus <gmcmanus@gmail.com>
 License: GPL-2+
 
+Files: color.pm
+Copyright: Copyright (C) 2008 Paweł Tęcza <ptecza@net.icm.edu.pl>
+License: GPL-2+
+
 Files: doc/logo/*
 Copyright: © 2006 Recai Oktaş <roktas@debian.org>
 License: GPL-2+
diff --git a/doc/plugins/color.mdwn b/doc/plugins/color.mdwn
new file mode 100644 (file)
index 0000000..a5100d8
--- /dev/null
@@ -0,0 +1,23 @@
+\[[!template id=plugin name=color core=0 author="[[ptecza]]"]]
+
+This plugin can be used to color a piece of text on a page.
+It can be used to set the foreground and/or background color of the text.
+
+You can use a color name (e.g. `white`) or HTML code (e.g. `#ffffff`)
+to define colors. 
+
+## examples
+
+Here the foreground color is defined as a word, while the background color
+is defined as a HTML color code:
+
+       \[[!color foreground=white background=#ff0000 text="White text on red background"]]
+
+The background color is missing, so the text is displayed on default
+background:
+
+       \[[!color foreground=white text="White text on default color background"]]
+
+The foreground is missing, so the text has the default foreground color:
+
+       \[[!color background=#ff0000 text="Default color text on red background"]]
index 781f2b389f7790812316adb250c7d1748efc96e9..2e6cdee07339e3ba6361eb7f0b2058e076d8403d 100644 (file)
@@ -348,3 +348,7 @@ legend {
        background: #eee; 
        color: black !important;
 }
+
+span.color {
+       padding: 2px;
+}
index e1aa5daa21142a7f7e39a63a23824270a9112f98..69afe837d1f66ef8b5721c9357fc44487dd316b3 100644 (file)
@@ -227,3 +227,5 @@ Of course, I'm open for discussion or exchange of ideas :) --[[Paweł|ptecza]]
        +span.color {
        +       padding: 2px;
        +}
+
+[[done]]