use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
bestlink htmllink readfile writefile pagetype srcfile pagename
- displaytime will_render
+ displaytime will_render gettext
%config %links %renderedfiles %pagesources);
our $VERSION = 1.01; # plugin interface version
wikiname => "wiki",
default_pageext => "mdwn",
cgi => 0,
- rcs => 'svn',
+ rcs => '',
notify => 0,
url => '',
cgiurl => '',
eval q{use POSIX};
error($@) if $@;
$ENV{LANG} = $config{locale}
- if POSIX::setlocale(&POSIX::LC_TIME, $config{locale});
+ if POSIX::setlocale(&POSIX::LC_ALL, $config{locale});
}
if ($config{w3mmode}) {
}
if ($config{cgi} && ! length $config{url}) {
- error("Must specify url to wiki with --url when using --cgi\n");
+ error(gettext("Must specify url to wiki with --url when using --cgi"));
}
$config{wikistatedir}="$config{srcdir}/.ikiwiki"
sub loadplugin ($) { #{{{
my $plugin=shift;
+ return if grep { $_ eq $plugin} @{$config{disable_plugins}};
+
my $mod="IkiWiki::Plugin::".possibly_foolish_untaint($plugin);
eval qq{use $mod};
if ($@) {
sub error ($) { #{{{
if ($config{cgi}) {
print "Content-type: text/html\n\n";
- print misctemplate("Error", "<p>Error: @_</p>");
+ print misctemplate(gettext("Error"),
+ "<p>".gettext("Error").": @_</p>");
}
log_message(error => @_);
exit(1);
my $link=shift;
my $cwd=$page;
-
- # relative links
- while ($link=~s!(^|/)\.\./!!g) {
- $cwd=~s!/?[^/]+$!!;
+ if ($link=~s/^\/+//) {
+ # absolute links
+ $cwd="";
}
do {
}
} while $cwd=~s!/?[^/]+$!!;
+ if (length $config{userdir} && exists $links{"$config{userdir}/".lc($link)}) {
+ return "$config{userdir}/".lc($link);
+ }
+
#print STDERR "warning: page $page, broken link: $link\n";
return "";
} #}}}
$file=~/\.(png|gif|jpg|jpeg)$/i;
} #}}}
-sub pagetitle ($) { #{{{
+sub pagetitle ($;$) { #{{{
my $page=shift;
- $page=~s/__(\d+)__/&#$1;/g;
+ my $unescaped=shift;
+
+ if ($unescaped) {
+ $page=~s/__(\d+)__/chr($1)/eg;
+ }
+ else {
+ $page=~s/__(\d+)__/&#$1;/g;
+ }
$page=~y/_/ /;
+
return $page;
} #}}}
$bestlink=htmlpage($bestlink);
}
if (! grep { $_ eq $bestlink } map { @{$_} } values %renderedfiles) {
+ return $linktext unless length $config{cgiurl};
return "<span><a href=\"".
cgiurl(do => "create", page => lc($link), from => $page).
"\">?</a>$linktext</span>"
if ($preprocessing{$page}++ > 3) {
# Avoid loops of preprocessed pages preprocessing
# other pages that preprocess them, etc.
- return "[[$command preprocessing loop detected on $page at depth $preprocessing{$page}]]";
+ #translators: The first parameter is a
+ #translators: preprocessor directive name,
+ #translators: the second a page name, the
+ #translators: third a number.
+ return "[[".sprintf(gettext("%s preprocessing loop detected on %s at depth %i"),
+ $command, $page, $preprocessing{$page}).
+ "]]";
}
my $ret=$hooks{preprocess}{$command}{call}->(
@params,
close OUT;
} #}}}
+sub template_file ($) { #{{{
+ my $template=shift;
+
+ foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") {
+ return "$dir/$template" if -e "$dir/$template";
+ }
+ return undef;
+} #}}}
+
sub template_params (@) { #{{{
- my $filename=shift;
-
+ my $filename=template_file(shift);
+
+ if (! defined $filename) {
+ return if wantarray;
+ return "";
+ }
+
require HTML::Template;
- return filter => sub {
+ my @ret=(
+ filter => sub {
my $text_ref = shift;
$$text_ref=&Encode::decode_utf8($$text_ref);
},
- filename => "$config{templatedir}/$filename",
+ filename => $filename,
loop_context_vars => 1,
die_on_bad_params => 0,
- @_;
+ @_
+ );
+ return wantarray ? @ret : {@ret};
} #}}}
sub template ($;@) { #{{{
$file =~ m/$regexp/;
} #}}}
+my $gettext_obj;
+sub gettext { #{{{
+ # Only use gettext in the rare cases it's needed.
+ if (exists $ENV{LANG} || exists $ENV{LC_ALL} || exists $ENV{LC_MESSAGES}) {
+ if (! $gettext_obj) {
+ $gettext_obj=eval q{
+ use Locale::gettext q{textdomain};
+ Locale::gettext->domain('ikiwiki')
+ };
+ if ($@) {
+ print STDERR "$@";
+ $gettext_obj=undef;
+ return shift;
+ }
+ }
+ return $gettext_obj->get(shift);
+ }
+ else {
+ return shift;
+ }
+} #}}}
+
sub pagespec_match ($$) { #{{{
my $page=shift;
my $spec=shift;