From d9c118dbf1753abcbf081f532aecfe8cb6ce7de7 Mon Sep 17 00:00:00 2001 From: joey Date: Wed, 26 Jul 2006 21:54:44 +0000 Subject: [PATCH] * Run page through any relevant filters when generating a page preview. * Noticed a bug in the wikitext markup plugin -- it made CamelCase links the default throughout the wiki, not only on wikitext pages. Decided to call this a feature, and split the camelcase support out into a separate plugin that is independant of wikitext. --- IkiWiki/CGI.pm | 2 +- IkiWiki/Plugin/camelcase.pm | 22 ++++++++++++++++++++++ IkiWiki/Plugin/wikitext.pm | 11 ----------- IkiWiki/Render.pm | 25 +++++++++++++++++-------- debian/changelog | 10 ++++++++++ doc/plugins/camelcase.mdwn | 7 +++++++ doc/plugins/wikitext.mdwn | 13 +++++++------ 7 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 IkiWiki/Plugin/camelcase.pm create mode 100644 doc/plugins/camelcase.mdwn diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index 759a49b7d..7360ca998 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -417,7 +417,7 @@ sub cgi_editpage ($$) { #{{{ $form->field(name => "comments", value => $comments, force => 1); $form->tmpl_param("page_preview", - htmlize($type, linkify($page, $page, $content))); + htmlize($type, linkify($page, $page, filter($page, $content)))); } else { $form->tmpl_param("page_preview", ""); diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm new file mode 100644 index 000000000..0934b27c2 --- /dev/null +++ b/IkiWiki/Plugin/camelcase.pm @@ -0,0 +1,22 @@ +#!/usr/bin/perl +# CamelCase links +package IkiWiki::Plugin::camelcase; + +use warnings; +use strict; + +sub import { #{{{ + IkiWiki::hook(type => "filter", id => "camelcase", call => \&filter); +} # }}} + +sub filter (@) { #{{{ + my %params=@_; + + # Make CamelCase links work by promoting them to fullfledged + # WikiLinks. This regexp is based on the one in Text::WikiFormat. + $params{content}=~s#(?=])\b((?:[A-Z][a-z0-9]\w*){2,})#[[$1]]#g; + + return $params{content}; +} #}}} + +1 diff --git a/IkiWiki/Plugin/wikitext.pm b/IkiWiki/Plugin/wikitext.pm index 310b86724..8b8cbe75e 100644 --- a/IkiWiki/Plugin/wikitext.pm +++ b/IkiWiki/Plugin/wikitext.pm @@ -7,20 +7,9 @@ use strict; use Text::WikiFormat; sub import { #{{{ - IkiWiki::hook(type => "filter", id => "wiki", call => \&filter); IkiWiki::hook(type => "htmlize", id => "wiki", call => \&htmlize); } # }}} -sub filter (@) { #{{{ - my %params=@_; - - # Make CamelCase links work by promoting them to fullfledged - # WikiLinks. This regexp is based on the one in Text::WikiFormat. - $params{content}=~s#(?=])\b((?:[A-Z][a-z0-9]\w*){2,})#[[$1]]#g; - - return $params{content}; -} #}}} - sub htmlize ($) { #{{{ my $content = shift; diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 6d5ea9ee5..e5a1679f8 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -250,6 +250,22 @@ sub findlinks ($$) { #{{{ } } #}}} +sub filter ($$) { + my $page=shift; + my $content=shift; + + if (exists $hooks{filter}) { + foreach my $id (keys %{$hooks{filter}}) { + $content=$hooks{filter}{$id}{call}->( + page => $page, + content => $content + ); + } + } + + return $content; +} + sub render ($) { #{{{ my $file=shift; @@ -260,14 +276,7 @@ sub render ($) { #{{{ my $page=pagename($file); delete $depends{$page}; - if (exists $hooks{filter}) { - foreach my $id (keys %{$hooks{filter}}) { - $content=$hooks{filter}{$id}{call}->( - page => $page, - content => $content - ); - } - } + $content=filter($page, $content); $links{$page}=[findlinks($page, $content)]; diff --git a/debian/changelog b/debian/changelog index 69436fb41..aa139be64 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +ikiwiki (1.10) UNRELEASED; urgency=low + + * Run page through any relevant filters when generating a page preview. + * Noticed a bug in the wikitext markup plugin -- it made CamelCase links the + default throughout the wiki, not only on wikitext pages. Decided to call + this a feature, and split the camelcase support out into a separate plugin + that is independant of wikitext. + + -- Joey Hess Wed, 26 Jul 2006 17:44:25 -0400 + ikiwiki (1.9) unstable; urgency=low * Improve display of parentlinks and page title of toplevel index page. diff --git a/doc/plugins/camelcase.mdwn b/doc/plugins/camelcase.mdwn new file mode 100644 index 000000000..134460932 --- /dev/null +++ b/doc/plugins/camelcase.mdwn @@ -0,0 +1,7 @@ +This plugin makes words in CamelCase be treated as [[WikiLinks]]. That is +to say, any two or more words capitalised and mashed together are assumed +to be the name of some other page on the wiki, and so become a link. + +This plugin is included in ikiwiki, but is not enabled by default. + +If this plugin is enabled, here is a link: SandBox diff --git a/doc/plugins/wikitext.mdwn b/doc/plugins/wikitext.mdwn index 5c5383fc5..1c2d72bb2 100644 --- a/doc/plugins/wikitext.mdwn +++ b/doc/plugins/wikitext.mdwn @@ -4,12 +4,13 @@ installed, enable the plugin, then files with the extention `.wiki` will be processed as wiki text. Wiki formatting is very simple. An item wrapped in three single quotes is -strong. An item wrapped in two single quotes is emphasized. Any word with -multiple CapitalLetters (e. g., StudlyCaps) will become a link (standard -[[WikiLinks|WikiLink]] work too). Four or more -hyphen characters at the start of a line create a horizontal line. -Newlines turn into the appropriate tags. Headers are matching equals signs -around the header text -- the more signs, the lesser the header. +strong. An item wrapped in two single quotes is emphasized. Four or more +hyphen characters at the start of a line create a horizontal line. Newlines +turn into the appropriate tags. Headers are matching equals signs around +the header text -- the more signs, the lesser the header. + +Links are standard [[WikiLinks|WikiLink]], although you can also enable +[[CamelCase]] links. Lists are indented text, by one tab or four spaces. In unordered lists, where each item has its own bullet point, each item needs a leading -- 2.44.0