From 042a0577780ca1783ce8cb4d9a050fa115f6cd6b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 26 Aug 2008 13:22:34 -0400 Subject: [PATCH] color: New plugin from ptecza. --- IkiWiki/Plugin/color.pm | 69 ++++++++++++++++++++++++++++++++++++++ debian/changelog | 1 + debian/copyright | 4 +++ doc/plugins/color.mdwn | 23 +++++++++++++ doc/style.css | 4 +++ doc/todo/color_plugin.mdwn | 2 ++ 6 files changed, 103 insertions(+) create mode 100644 IkiWiki/Plugin/color.pm create mode 100644 doc/plugins/color.mdwn 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 diff --git a/debian/changelog b/debian/changelog index 0730c1f3f..485a34ddf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Thu, 21 Aug 2008 16:20:58 -0400 diff --git a/debian/copyright b/debian/copyright index b6c95ba99..a24970e29 100644 --- a/debian/copyright +++ b/debian/copyright @@ -100,6 +100,10 @@ Files: txt.pm Copyright: Copyright (C) 2008 Gabriel McManus License: GPL-2+ +Files: color.pm +Copyright: Copyright (C) 2008 Paweł Tęcza +License: GPL-2+ + Files: doc/logo/* Copyright: © 2006 Recai Oktaş License: GPL-2+ diff --git a/doc/plugins/color.mdwn b/doc/plugins/color.mdwn new file mode 100644 index 000000000..a5100d8de --- /dev/null +++ b/doc/plugins/color.mdwn @@ -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"]] diff --git a/doc/style.css b/doc/style.css index 781f2b389..2e6cdee07 100644 --- a/doc/style.css +++ b/doc/style.css @@ -348,3 +348,7 @@ legend { background: #eee; color: black !important; } + +span.color { + padding: 2px; +} diff --git a/doc/todo/color_plugin.mdwn b/doc/todo/color_plugin.mdwn index e1aa5daa2..69afe837d 100644 --- a/doc/todo/color_plugin.mdwn +++ b/doc/todo/color_plugin.mdwn @@ -227,3 +227,5 @@ Of course, I'm open for discussion or exchange of ideas :) --[[Paweł|ptecza]] +span.color { + padding: 2px; +} + +[[done]]