<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">#!/usr/bin/perl
# Ikiwiki text colouring plugin
# PaweÅ‚â€š TÄ™cza &lt;ptecza@net.icm.edu.pl&gt;
package IkiWiki::Plugin::color;

use warnings;
use strict;
use IkiWiki 3.00;

sub import {
	hook(type =&gt; "preprocess", id =&gt; "color", call =&gt; \&amp;preprocess);
	hook(type =&gt; "format",     id =&gt; "color", call =&gt; \&amp;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 &amp;&amp;
				($foreground =~ /^[a-z]+$/ || $foreground =~ /^#[0-9a-f]{3,6}$/));
	$background = '' unless ($background &amp;&amp;
				($background =~ /^[a-z]+$/ || $background =~ /^#[0-9a-f]{3,6}$/));

	my $preserved = '';
	$preserved .= '&lt;span class="color"&gt;';
	$preserved .= 'color: '.$foreground if ($foreground);
	$preserved .= '; ' if ($foreground &amp;&amp; $background);
	$preserved .= 'background-color: '.$background if ($background);
	$preserved .= '&lt;/span&gt;';
	$preserved .= '&lt;span class="colorend"&gt;'.$text.'&lt;/span&gt;';
	
	return $preserved;

}

sub replace_preserved_style ($) {
	my $content = shift;

	$content =~ s!&lt;span class="color"&gt;((color: ([a-z]+|\#[0-9a-f]{3,6})?)?((; )?(background-color: ([a-z]+|\#[0-9a-f]{3,6})?)?)?)&lt;/span&gt;!&lt;span class="color" style="$1"&gt;!g;
	$content =~ s!&lt;span class="colorend"&gt;!!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
</pre></body></html>