123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/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<http://www.oddmuse.org/cgi-bin/oddmuse/Creole_Markup_Extension>.
- =item Move this file into the B<wiki/modules/> 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<wiki/config.pl> 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 <http://www.raiazome.com>.
- Copyright 2008 by Weakish Jiang <weakish@gmail.com>.
- Copyright 2009 Alex Schroeder <alex@gnu.com>
- 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<http://www.gnu.org/licenses/>.
- =cut
|