X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/b973ed82699903c23b3feeb5e73e1ebd6f587f43..ba682e0f9a55ffd74584aa3b8abb0087c7762317:/IkiWiki/Plugin/shortcut.pm diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm index d09d5879d..1840a5722 100644 --- a/IkiWiki/Plugin/shortcut.pm +++ b/IkiWiki/Plugin/shortcut.pm @@ -3,36 +3,60 @@ package IkiWiki::Plugin::shortcut; use warnings; use strict; -use IkiWiki; +use IkiWiki 3.00; -sub import { #{{{ +sub import { + hook(type => "getsetup", id => "shortcut", call => \&getsetup); hook(type => "checkconfig", id => "shortcut", call => \&checkconfig); hook(type => "preprocess", id => "shortcut", call => \&preprocess_shortcut); -} #}}} +} -sub checkconfig () { #{{{ - # Preprocess the shortcuts page to get all the available shortcuts - # defined before other pages are rendered. - IkiWiki::preprocess("shortcuts", "shortcuts", - readfile(srcfile("shortcuts.mdwn"))); -} # }}} +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => undef, + }, +} -sub preprocess_shortcut (@) { #{{{ +sub checkconfig () { + if (defined $config{srcdir} && length $config{srcdir}) { + # Preprocess the shortcuts page to get all the available shortcuts + # defined before other pages are rendered. + my $srcfile=srcfile("shortcuts.".$config{default_pageext}, 1); + if (! defined $srcfile) { + $srcfile=srcfile("shortcuts.mdwn", 1); + } + if (! defined $srcfile) { + print STDERR sprintf(gettext("shortcut plugin will not work without %s"), + "shortcuts.".$config{default_pageext})."\n"; + } + else { + IkiWiki::preprocess("shortcuts", "shortcuts", readfile($srcfile)); + } + } +} + +sub preprocess_shortcut (@) { my %params=@_; if (! defined $params{name} || ! defined $params{url}) { - return "[[shortcut missing name or url parameter]]"; + error gettext("missing name or url parameter"); } hook(type => "preprocess", no_override => 1, id => $params{name}, - call => sub { shortcut_expand($params{name}, $params{url}, @_) }); + shortcut => 1, + call => sub { shortcut_expand($params{url}, $params{desc}, @_) }); - return "shortcut $params{name} points to $params{url}"; -} # }}} + #translators: This is used to display what shortcuts are defined. + #translators: First parameter is the name of the shortcut, the second + #translators: is an URL. + return sprintf(gettext("shortcut %s points to %s"), $params{name}, $params{url}); +} -sub shortcut_expand ($$@) { #{{{ - my $name=shift; +sub shortcut_expand ($$@) { my $url=shift; + my $desc=shift; my %params=@_; # Get params in original order. @@ -51,8 +75,22 @@ sub shortcut_expand ($$@) { #{{{ my $encoded_text=$text; $encoded_text=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; - $url=~s/\%s/$encoded_text/g; - return "$text"; -} #}}} + $url=~s{\%([sS])}{ + $1 eq 's' ? $encoded_text : $text + }eg; + + $text=~s/_/ /g; + if (defined $params{desc}) { + $desc=$params{desc}; + } + if (defined $desc) { + $desc=~s/\%s/$text/g; + } + else { + $desc=$text; + } + + return "$desc"; +} 1