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}) {
}
} 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 "";
} #}}}
if ($preprocessing{$page}++ > 3) {
# Avoid loops of preprocessed pages preprocessing
# other pages that preprocess them, etc.
+ #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}).
"]]";
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.
- # This overrides future calls of this function.
if (exists $ENV{LANG} || exists $ENV{LC_ALL} || exists $ENV{LC_MESSAGES}) {
- eval q{use Locale::gettext};
- textdomain('ikiwiki');
- return Locale::gettext::gettext(shift);
+ 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;