#!/usr/bin/env perl use strict; use v5.10; # ====================[ creoleaddition.pl ]==================== =head1 NAME creoleaddition - An Oddmuse module for augmenting the Creole Markup module with so-called, unofficial "Creole Additions" markup. =head1 INSTALLATION creoleaddition is simply installable; simply: =over =item First install the Creole Markup module; see L. =item Move this file into the B directory for your Oddmuse Wiki. =back =cut AddModuleDescription('creoleaddition.pl', 'Creole Addition Markup Extension'); our ($bol, @MyRules, %RuleOrder); # ....................{ CONFIGURATION }.................... =head1 CONFIGURATION creoleaddition is easily configurable; set these variables in the B file for your Oddmuse Wiki. =cut # Since these rules are not official now, users can turn off some of # them. our ($CreoleAdditionSupSub, $CreoleAdditionDefList, $CreoleAdditionIndentedParagraphs, $CreoleAdditionQuote, $CreoleAdditionMonospace, $CreoleAdditionSmallCaps, $CreoleAdditionIsInSmallCaps); =head2 $CreoleAdditionSupSub A boolean that, if true, enables this extension's handling of ^^supscript^^ and ,,subscript,,-style markup. (By default, this boolean is true.) =cut $CreoleAdditionSupSub = 1; =head2 $CreoleAdditionDefList A boolean that, if true, enables this extension's handling of "; definition : lists"-style markup. (By default, this boolean is true.) =cut $CreoleAdditionDefList = 1; =head2 $CreoleAdditionIndentedParagraphs A boolean that, if true, enables this extension's handling of ": indented pagraphs"-style markup. (By default, this boolean is true.) =cut $CreoleAdditionIndentedParagraphs = 1; =head2 $CreoleAdditionQuote A boolean that, if true, enables this extension's handling of """block quote""" and ''inline quote''-style markup. (By default, this boolean is true.) =cut $CreoleAdditionQuote = 1; =head2 $CreoleAdditionMonospace A boolean that, if true, enables this extension's handling of ##monospaced text##-style markup. (By default, this boolean is true.) =cut $CreoleAdditionMonospace = 1; =head2 $CreoleAdditionSmallCaps A boolean that, if true, enables this extension's handling of %%small caps%%-style markup. (By default, this boolean is true.) =cut $CreoleAdditionSmallCaps = 1; # ....................{ MARKUP }.................... push(@MyRules, \&CreoleAdditionRule); SetHtmlEnvironmentContainer('blockquote'); # Blockquote line-breaks conflict with Creole-style line-breaks. $RuleOrder{\&CreoleAdditionRule} = -11; sub CreoleAdditionRule { # indented paragraphs if ($CreoleAdditionIndentedParagraphs && $bol && m/\G((\s*\n)*(\:+)[ \t]*)/cg) { return CloseHtmlEnvironment() . AddHtmlEnvironment('p', 'class="indent level' . length($3) . '" style="margin-left: ' . 2*length($3) . 'em"'); } # definition list # ; dt # : dd elsif ($CreoleAdditionDefList && $bol && m/\G\s*\;[ \t]*(?=(.+(\n)(\s)*\:))/cg or InElement('dd') && m/\G\s*\n(\s)*\;[ \t]*(?=(.+\n(\s)*\:))/cg) { return CloseHtmlEnvironmentUntil('dd') . OpenHtmlEnvironment('dl', 1) . AddHtmlEnvironment('dt'); }# `:' needs special treatment, later elsif (InElement('dt') and m/\G\s*\n(\s)*\:[ \t]*(?=(.+(\n)(\s)*\:)*)/cg) { return CloseHtmlEnvironment() . AddHtmlEnvironment('dd');} elsif (InElement('dd') and m/\G\s*\n(\s)*\:[ \t]*(?=(.+(\n)(\s)*\:)*)/cg) { return CloseHtmlEnvironment() . AddHtmlEnvironment('dd');} # """block quotes""" elsif ($CreoleAdditionQuote and $bol and m/\G\"\"\"(\n|$)/cg) { return InElement('blockquote') ? CloseHtmlEnvironment('blockquote').AddHtmlEnvironment('p') : CloseHtmlEnvironments() .AddHtmlEnvironment('blockquote').AddHtmlEnvironment('p'); } # ''inline quotes'' elsif ($CreoleAdditionQuote and m/\G\'\'/cgs) { return AddOrCloseHtmlEnvironment('q'); } # ^^sup^^ elsif ($CreoleAdditionSupSub and m/\G\^\^/cg) { return AddOrCloseHtmlEnvironment('sup'); } # ,,sub,, elsif ($CreoleAdditionSupSub and m/\G\,\,/cg) { return AddOrCloseHtmlEnvironment('sub'); } # ##monospace code## elsif ($CreoleAdditionMonospace and m/\G\#\#/cg) { return AddOrCloseHtmlEnvironment('code'); } # %%small caps%% elsif ($CreoleAdditionSmallCaps and m/\G\%\%/cg) { return AddOrCloseHtmlEnvironment('span', 'style="font-variant: small-caps"'); } return; } =head1 COPYRIGHT AND LICENSE The information below applies to everything in this distribution, except where noted. Copyleft 2008 by B.w.Curry . Copyright 2008 by Weakish Jiang . Copyright 2009 Alex Schroeder This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see L. =cut