Merge branch 'master' of git://git.ikiwiki.info

master
Simon McVittie 2008-07-14 22:22:39 +01:00
commit a65d312467
34 changed files with 230 additions and 93 deletions

View File

@ -768,21 +768,30 @@ sub preprocess ($$$;$$) { #{{{
}
my $ret;
if (! $scan) {
$ret=$hooks{preprocess}{$command}{call}->(
@params,
page => $page,
destpage => $destpage,
preview => $preprocess_preview,
);
$ret=eval {
$hooks{preprocess}{$command}{call}->(
@params,
page => $page,
destpage => $destpage,
preview => $preprocess_preview,
);
};
if ($@) {
chomp $@;
$ret="[[!$command <span class=\"error\">".
gettext("Error").": $@"."</span>]]";
}
}
else {
# use void context during scan pass
$hooks{preprocess}{$command}{call}->(
@params,
page => $page,
destpage => $destpage,
preview => $preprocess_preview,
);
eval {
$hooks{preprocess}{$command}{call}->(
@params,
page => $page,
destpage => $destpage,
preview => $preprocess_preview,
);
};
$ret="";
}
$preprocessing{$page}--;

View File

@ -134,7 +134,7 @@ sub preprocess (@) { #{{{
foreach my $required (qw{name url}) {
if (! exists $params{$required}) {
return "[[aggregate ".sprintf(gettext("missing %s parameter"), $required)."]]";
error sprintf(gettext("missing %s parameter"), $required)
}
}

View File

@ -15,7 +15,7 @@ sub preprocess_if (@) { #{{{
foreach my $param (qw{test then}) {
if (! exists $params{$param}) {
return "[[if ".sprintf(gettext('%s parameter is required'), $param)."]]";
error sprintf(gettext('%s parameter is required'), $param);
}
}

View File

@ -38,10 +38,10 @@ sub preprocess (@) { #{{{
return "" if $params{page} ne $params{destpage};
if (! exists $params{template} || ! length($params{template})) {
return "[[meta ".gettext("template not specified")."]]";
error gettext("template not specified")
}
if (! exists $params{match} || ! length($params{match})) {
return "[[meta ".gettext("match not specified")."]]";
error gettext("match not specified")
}
$pagestate{$params{page}}{edittemplate}{$params{match}}=$params{template};
@ -108,7 +108,9 @@ sub filltemplate ($$) { #{{{
);
};
if ($@) {
return "[[pagetemplate ".gettext("failed to process")." $@]]";
# Indicate that the earlier preprocessor directive set
# up a template that doesn't work.
return "[[!pagetemplate ".gettext("failed to process")." $@]]";
}
$template->param(name => $page);

View File

@ -15,7 +15,7 @@ sub preprocess (@) { #{{{
my $f = `fortune 2>/dev/null`;
if ($?) {
return "[[".gettext("fortune failed")."]]";
error gettext("fortune failed");
}
else {
return "<pre>$f</pre>\n";

View File

@ -19,7 +19,7 @@ sub preprocess (@) { #{{{
# Avoid XSS attacks..
my ($url)=$params{html}=~m#iframe\s+src="http://www\.google\.com/calendar/embed\?([^"<>]+)"#;
if (! defined $url || ! length $url) {
return "[[googlecalendar ".gettext("failed to find url in html")."]]";
error gettext("failed to find url in html")
}
my ($height)=$params{html}=~m#height="(\d+)"#;
my ($width)=$params{html}=~m#width="(\d+)"#;

View File

@ -55,7 +55,7 @@ sub render_graph (\%) { #{{{
waitpid $pid, 0;
$SIG{PIPE}="DEFAULT";
return "[[graph ".gettext("failed to run graphviz")."]]" if ($sigpipe);
error gettext("failed to run graphviz") if $sigpipe;
if (! $params{preview}) {
writefile($dest, $config{destdir}, $png, 1);
@ -82,7 +82,7 @@ sub graph (@) { #{{{
$params{src} = "" unless defined $params{src};
$params{type} = "digraph" unless defined $params{type};
$params{prog} = "dot" unless defined $params{prog};
return "[[graph ".gettext("prog not a valid graphviz program")."]]" unless $graphviz_programs{$params{prog}};
error gettext("prog not a valid graphviz program") unless $graphviz_programs{$params{prog}};
return render_graph(%params);
} # }}}

View File

@ -46,14 +46,14 @@ sub preprocess (@) { #{{{
my $base = IkiWiki::basename($file);
eval q{use Image::Magick};
return "[[img ".gettext("Image::Magick not installed")."]]" if $@;
error gettext("Image::Magick is not installed") if $@;
my $im = Image::Magick->new;
my $imglink;
my $r;
if ($params{size} ne 'full') {
my ($w, $h) = ($params{size} =~ /^(\d+)x(\d+)$/);
return "[[img ".sprintf(gettext('bad size "%s"'), $params{size})."]]"
error sprintf(gettext('bad size "%s"'), $params{size})
unless (defined $w && defined $h);
my $outfile = "$config{destdir}/$dir/${w}x${h}-$base";
@ -63,14 +63,14 @@ sub preprocess (@) { #{{{
if (-e $outfile && (-M srcfile($file) >= -M $outfile)) {
$r = $im->Read($outfile);
return "[[img ".sprintf(gettext("failed to read %s: %s"), $outfile, $r)."]]" if $r;
error sprintf(gettext("failed to read %s: %s"), $outfile, $r) if $r;
}
else {
$r = $im->Read(srcfile($file));
return "[[img ".sprintf(gettext("failed to read %s: %s"), $file, $r)."]]" if $r;
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
$r = $im->Resize(geometry => "${w}x${h}");
return "[[img ".sprintf(gettext("failed to resize: %s"), $r)."]]" if $r;
error sprintf(gettext("failed to resize: %s"), $r) if $r;
# don't actually write file in preview mode
if (! $params{preview}) {
@ -84,7 +84,7 @@ sub preprocess (@) { #{{{
}
else {
$r = $im->Read(srcfile($file));
return "[[img ".sprintf(gettext("failed to read %s: %s"), $file, $r)."]]" if $r;
error sprintf(gettext("failed to read %s: %s"), $file, $r) if $r;
$imglink = $file;
}
@ -101,7 +101,7 @@ sub preprocess (@) { #{{{
}
if (! defined($im->Get("width")) || ! defined($im->Get("height"))) {
return "[[img ".sprintf(gettext("failed to determine size of image %s"), $file)."]]";
error sprintf(gettext("failed to determine size of image %s"), $file)
}
my $imgtag='<img src="'.$imgurl.

View File

@ -98,7 +98,7 @@ sub preprocess_inline (@) { #{{{
my %params=@_;
if (! exists $params{pages}) {
return "[[inline ".gettext("missing pages parameter")."]]";
error gettext("missing pages parameter");
}
my $raw=yesno($params{raw});
my $archive=yesno($params{archive});

View File

@ -94,9 +94,7 @@ sub genmap ($) { #{{{
waitpid $pid, 0;
$SIG{PIPE}="DEFAULT";
if ($sigpipe) {
return "[[linkmap ".gettext("failed to run dot")."]]";
}
error gettext("failed to run dot") if $sigpipe;
return $ret;
} #}}}

View File

@ -138,7 +138,7 @@ sub preprocess (@) { #{{{
# editable page as a stylesheet
my $stylesheet=bestlink($page, $value.".css");
if (! length $stylesheet) {
return "[[meta ".gettext("stylesheet not found")."]]";
error gettext("stylesheet not found")
}
push @{$metaheaders{$page}}, '<link href="'.urlto($stylesheet, $page).
'" rel="'.encode_entities($rel).
@ -172,7 +172,7 @@ sub preprocess (@) { #{{{
add_depends($page, $redir_page);
my $link=bestlink($page, $redir_page);
if (! length $link) {
return "[[meta ".gettext("redir page not found")."]]";
error gettext("redir page not found")
}
$value=urlto($link, $page);
@ -185,7 +185,7 @@ sub preprocess (@) { #{{{
my %seen;
while (exists $pagestate{$at}{meta}{redir}) {
if ($seen{$at}) {
return "[[meta ".gettext("redir cycle is not allowed")."]]";
error gettext("redir cycle is not allowed")
}
$seen{$at}=1;
$at=$pagestate{$at}{meta}{redir};

View File

@ -18,7 +18,7 @@ sub preprocess (@) { #{{{
if (! exists $params{template} ||
$params{template} !~ /^[-A-Za-z0-9._+]+$/ ||
! defined IkiWiki::template_file($params{template})) {
return "[[pagetemplate ".gettext("bad or missing template")."]]";
error gettext("bad or missing template")
}
if ($params{page} eq $params{destpage}) {

View File

@ -34,7 +34,7 @@ sub needsbuild (@) { #{{{
sub preprocess (@) { #{{{
my %params=@_;
if (! exists $params{from} || ! exists $params{to}) {
return "[[ping ".gettext("requires 'from' and 'to' parameters")."]]";
error gettext("requires 'from' and 'to' parameters");
}
if ($params{from} eq $config{url}) {
$pagestate{$params{destpage}}{pinger}{$params{to}}=1;

View File

@ -29,7 +29,7 @@ sub preprocess (@) { #{{{
my $grmfile = '/usr/share/polygen/ita/polygen.grm';
if (! -d '/usr/share/polygen') {
return "[[".gettext("polygen not installed")."]]";
error gettext("polygen not installed");
}
find({wanted => sub {
if (substr($File::Find::name, -length($grammar)) eq $grammar) {
@ -48,7 +48,7 @@ sub preprocess (@) { #{{{
}
if ($?) {
$res="[[".gettext("polygen failed")."]]";
error gettext("command failed");
}
# Strip trailing spaces and newlines so that we flow well with the

View File

@ -29,14 +29,14 @@ sub preprocess (@) { #{{{
}
if (! exists $params{formula}) {
return "[[postsparkline ".gettext("missing formula")."]]";
error gettext("missing formula")
}
my $formula=$params{formula};
$formula=~s/[^a-zA-Z0-9]*//g;
$formula=IkiWiki::possibly_foolish_untaint($formula);
if (! length $formula ||
! IkiWiki::Plugin::postsparkline::formula->can($formula)) {
return "[[postsparkline ".gettext("unknown formula")."]]";
error gettext("unknown formula");
}
add_depends($params{page}, $params{pages});
@ -53,7 +53,7 @@ sub preprocess (@) { #{{{
my @data=eval qq{IkiWiki::Plugin::postsparkline::formula::$formula(\\\%params, \@list)};
if ($@) {
return "[[postsparkline error $@]]";
error $@;
}
if (! @data) {

View File

@ -24,7 +24,7 @@ sub preprocess_shortcut (@) { #{{{
my %params=@_;
if (! defined $params{name} || ! defined $params{url}) {
return "[[shortcut ".gettext("missing name or url parameter")."]]";
error gettext("missing name or url parameter");
}
hook(type => "preprocess", no_override => 1, id => $params{name},

View File

@ -60,13 +60,13 @@ sub preprocess (@) { #{{{
}
}
elsif (! length $value) {
return "[[sparkline ".gettext("parse error")." \"$key\"]]";
error gettext("parse error")." \"$key\"";
}
elsif ($key eq 'featurepoint') {
my ($x, $y, $color, $diameter, $text, $location)=
split(/\s*,\s*/, $value);
if (! defined $diameter || $diameter < 0) {
return "[[sparkline ".gettext("bad featurepoint diameter")."]]";
error gettext("bad featurepoint diameter");
}
$x=int($x);
$y=int($y);
@ -76,7 +76,7 @@ sub preprocess (@) { #{{{
if (defined $location) {
$location=$locmap{$location};
if (! defined $location) {
return "[[sparkline ".gettext("bad featurepoint location")."]]";
error gettext("bad featurepoint location");
}
}
$php.=qq{\$sparkline->SetFeaturePoint($x, $y, '$color', $diameter};
@ -87,23 +87,23 @@ sub preprocess (@) { #{{{
}
if ($c eq 0) {
return "[[sparkline ".gettext("missing values")."]]";
error gettext("missing values");
}
my $height=int($params{height} || 20);
if ($height < 2 || $height > 100) {
return "[[sparkline ".gettext("bad height value")."]]";
error gettext("bad height value");
}
if ($style eq "Bar") {
$php.=qq{\$sparkline->Render($height);\n};
}
else {
if (! exists $params{width}) {
return "[[sparkline ".gettext("missing width parameter")."]]";
error gettext("missing width parameter");
}
my $width=int($params{width});
if ($width < 2 || $width > 1024) {
return "[[sparkline ".gettext("bad width value")."]]";
error gettext("bad width value");
}
$php.=qq{\$sparkline->RenderResampled($width, $height);\n};
}
@ -141,7 +141,7 @@ sub preprocess (@) { #{{{
waitpid $pid, 0;
$SIG{PIPE}="DEFAULT";
if ($sigpipe) {
return "[[sparkline ".gettext("failed to run php")."]]";
error gettext("failed to run php");
}
if (! $params{preview}) {

View File

@ -19,7 +19,7 @@ sub preprocess (@) { #{{{
if (exists $params{file}) {
if (! $pagesources{$params{file}}) {
return "[[table ".gettext("cannot find file")."]]";
error gettext("cannot find file");
}
$params{data} = readfile(srcfile($params{file}));
add_depends($params{page}, $params{file});
@ -61,7 +61,7 @@ sub preprocess (@) { #{{{
defined $params{delimiter} ? $params{delimiter} : "|",);
}
else {
return "[[table ".gettext("unknown data format")."]]";
error gettext("unknown data format");
}
my $header;
@ -69,7 +69,7 @@ sub preprocess (@) { #{{{
$header=shift @data;
}
if (! @data) {
return "[[table ".gettext("empty data")."]]";
error gettext("empty data");
}
my @lines;

View File

@ -16,7 +16,7 @@ sub preprocess (@) { #{{{
my %params=@_;
if (! exists $params{id}) {
return "[[template ".gettext("missing id parameter")."]]";
error gettext("missing id parameter")
}
my $template_page="templates/$params{id}";
@ -42,7 +42,7 @@ sub preprocess (@) { #{{{
);
};
if ($@) {
return "[[template ".gettext("failed to process:")." $@]]";
error gettext("failed to process:")." $@"
}
$params{basename}=IkiWiki::basename($params{page});

View File

@ -14,7 +14,7 @@ sub preprocess (@) { #{{{
foreach my $param (qw{match pagespec}) {
if (! exists $params{$param}) {
return "[[testpagespec $param parameter is required]]";
error sprintf(gettext("%s parameter is required"), $param);
}
}

View File

@ -27,14 +27,14 @@ sub preprocess (@) { #{{{
my $code = $params{code};
if (! defined $code && ! length $code) {
return "[[teximg ".gettext("missing tex code"). "]]";
error gettext("missing tex code");
}
if (check($code)) {
return create($code, check_height($height), \%params);
}
else {
return "[[teximg ".gettext("code includes disallowed latex commands"). "]]";
error gettext("code includes disallowed latex commands")
}
} #}}}
@ -85,7 +85,7 @@ sub create ($$$) { #{{{
.qq{" class="teximg" />};
}
else {
return qq{[[teximg <a href="$logurl">}.gettext("failed to generate image from code")."</a>]]";
error qq{<a href="$logurl">}.gettext("failed to generate image from code")."</a>";
}
} #}}}

6
debian/changelog vendored
View File

@ -19,6 +19,12 @@ ikiwiki (2.54) UNRELEASED; urgency=low
uuid in feeds. (smcv)
* Move yesno function out of inline and into IkiWiki core, not exported.
* meta: fix title() PageSpec (smcv)
* Some footer style changes. (smcv)
* Error handling improvement for preprocess hooks. It's now safe to call
error() from such hooks; it will cause a nicely formatted error message
to be inserted into the page.
* Cut the size of the binary package in half by excluding pages for bugs
and todo items from the html shipped in it.
-- Josh Triplett <josh@freedesktop.org> Wed, 09 Jul 2008 21:30:33 -0700

View File

@ -0,0 +1,10 @@
Joey, I would like to see your blog script I've found
at [[Tips|tips/blog_script]] page, but it seems that the URL
(http://git.kitenet.net/?p=joey/home;a=blob_plain;f=bin/blog)
to its Git repo is broken:
403 Forbidden - No such project
--[[Paweł|ptecza]]
> [[fixed|done]] --[[Joey]]

View File

@ -30,7 +30,6 @@ adding this `clear: both`?
>> Then sites could choose whether to set clear:both on the inlinefooter
>> or not, and this would be separate from the same styling on whole pages.
>>
>> Implemented in [my repository](http://git.debian.org/?p=users/smcv/ikiwiki.git);
>> see the "css" branch. --[[smcv]]
>> [[done]] --[[smcv]]
[[patch]]

View File

@ -412,12 +412,13 @@ Aborts with an error message. If the second parameter is passed, it is a
function that is called after the error message is printed, to do any final
cleanup.
Note that while any plugin can use this for a fatal error, plugins should
try to avoid dying on bad input when building a page, as that will halt
the entire wiki build and make the wiki unusable. So for example, if a
[[ikiwiki/PreProcessorDirective]] is passed bad parameters, it's better to
return an error message, which can appear on the wiki page, rather than
calling error().
If called inside a preprocess hook, error() does not abort the entire
wiki build, but instead replaces the [[ikiwiki/PreProcessorDirective]] with
a version containing the error message.
In other hooks, error() is a fatal error, so use with care. Try to avoid
dying on bad input when building a page, as that will halt
the entire wiki build and make the wiki unusable.
#### `template($;@)`

View File

@ -169,7 +169,7 @@ be a guard on how high it will go.
}
my $num=$last{$page}++;
if ($num > 25) {
return "[[fib will only calculate the first 25 numbers in the sequence]]";
error "can only calculate the first 25 numbers in the sequence";
}
return fib($num);
}
@ -182,7 +182,7 @@ does for numbers less than 1. Or for any number that's not an integer. In
either case, it will run forever. Here's one way to fix that:
if (int($num) != $num || $num < 1) {
return "[[fib positive integers only, please]]";
error "positive integers only, please";
}
As these security problems have demonstrated, even a simple input from the

View File

@ -2,7 +2,17 @@
system developed by Matt Mackall. Ikiwiki supports storing a wiki in a
mercurial repository.
Ikiwiki can run as a post-update hook to update a wiki whenever commits
Ikiwiki can run as a `post-commit` and/or `incoming` hook to update a wiki whenever commits or remote pushes
come in. When running as a [[cgi]] with Mercurial, ikiwiki automatically
commits edited pages, and uses the Mercurial history to generate the
[[RecentChanges]] page.
Example for a `.hg/hgrc` file in `$SRCDIR`:
[hooks]
post-commit = /home/abe/bin/rebuildwiki
incoming = /home/abe/bin/rebuildwiki
Do not use `commit` or `precommit` hooks or ikiwiki will run into a dead lock when committing in `$SRCDIR`
See also [[todo/mercurial|todo/mercurial]]

View File

@ -1,4 +1,4 @@
I have a [blog](http://git.kitenet.net/?p=joey/home;a=blob_plain;f=bin/blog)
I have a [blog](http://git.kitenet.net/?p=joey/home.git;a=blob_plain;f=bin/blog)
program that I use to write blog posts in a text editor. The first line I
enter is used as the title, and it automatically comes up with a unique page
name based on the title and handles all the details of posting to my blog.

View File

@ -75,5 +75,5 @@ a dedicated plugin, called `genealogictitle` or whatever, and :
>> Well, it seems I once more designed a solution before clearly
>> defining my problem... What I really need is more generic, can be
>> done as a plugin, and deserves its own todo item (yet to come), so
>> done as a plugin, and deserves its own [[todo|pedigree_plugin]], so
>> I'm tagging this one wontfix^W [[done]]. I'm sorry. -- intrigeri

View File

@ -0,0 +1,28 @@
Recently I've wanted to colour some piece of text on my Ikiwiki page.
It seems that Markdown can do it only using HTML tags, so I used
&lt;span class="color"&gt;foo bar baz&lt;/span&gt;.
However, in my opinion mixing Markdown syntax and HTML tags is rather ugly,
so maybe we should create a new color plugin to add more color to Ikiwiki ;)
I know that another Wikis have similar plugin, for example
[WikiDot](http://www.wikidot.com/).
I've noticed that htmlscrubber plugin strips `style` attribute, because of
security, so probably we need to use `class` attribute of HTML. But then
we have to customize our `local.css` file to add all color we want to use.
It's not as easy in usage like color name or definition as plugin argument,
but I don't have a better idea right now.
What do you think about it? --[[Paweł|ptecza]]
> Making a plugin preserve style attributes can be done, it just has to add
> them after the sanitize step, which strips them. The general method is
> adding placeholders first, and replacing them with the real html later.
>
> The hard thing to me seems to be finding a syntax that is better than a
> `<span>`. A preprocessor directive is not really any less ugly than html
> tags, though at least it could play nicely with nested markdown: --[[Joey]]
>
> \[[color red,green """
> Xmas-colored markdown here
> """]]

View File

@ -1,5 +1,3 @@
* Need to get post commit hook working (or an example of how to use it.)
* See below. --[[bma]]
* rcs_notify is not implemented (not needed in this branch --[[Joey]])
* Is the code sufficiently robust? It just warns when mercurial fails.
* When rcs_commit is called with a $user that is an openid, it will be

View File

@ -0,0 +1,76 @@
After realizing (thanks to
[[Allow_TITLE_to_include_part_of_the_path_in_addition_to_the_basename]])
that I needed some kind of "parentlinks on steroids", I wrote a new
plugin, called pedigree.
This plugin provides a bunch of loops that one can use in his/her
`HTML::Template`'s to iterate over all or a subset of a page's
parents. Inside these loops, half a dozen variables are made
available, in addition to `PAGE` and `URL` that are already provided
by parentlinks.
Amongst many possibilities, one can e.g. simply use this plugin to
give every parent link a different `class=` attribute, depending
either on its depth in the path leading to the current page, or on its
distance to it.
The code and documentation (including simple and complex usage
examples) are in the 'pedigree' Git branch in this repo:
git://repo.or.cz/ikiwiki/intrigeri.git
Seems there is also a [gitweb](http://repo.or.cz/w/ikiwiki/intrigeri.git).
> Ok, I'll take a look. BTW, could you allow user joey on repo.or.cz
> push access to the main ikiwiki repo you set up there? --[[Joey]]
>> I did not. The main ikiwiki repo on repo.or.cz seems to have been
>> been setup by johannes.schindelin@gmx.de ; mine is what they call
>> a "fork" (but it's not, obviously).
Any opinions on the idea/design/implementation?
> Seems that there should be a more generic way to do `PEDIGREE_BUT_ROOT`
> and `PEDIGREE_BUT_TWO_OLDEST` (also `is_second_ancestor`,
> `is_grand_mother` etc). One way would be to include in `PEDIGREE`
> a set of values like `depth_1`, `depth_2`, etc. The one corresponding
> to the `absdepth` would be true. This would allow a template like this:
<TMPL_LOOP NAME="PEDIGREE">
<TMPL_IF NAME="depth_1">
</TMPL_ELSE>
<TMPL_IF NAME="depth_2">
</TMPL_ELSE>
<TMPL_VAR PAGE> /* only showing pages 2 levels deep */
</TMPL_IF>
</TMPL_IF>
</TMPL_LOOP>
> The only missing information would be `reldepth`, but in the above
> example the author of that template knows that it's `absdepth - 1`
> (Things would be a lot nicer if `HTML::Template` had equality tests!)
>
> Since this would make it more generic and also fix your one documented
> bug, I can see no reason not to do it. ;-) --[[Joey]]
>> Thanks for your comments. I'll answer soon. (Grrr, I really
>> need to find a way to edit this wiki offline, every minute
>> online costs bucks to me, my old modem gently weeps,
>> and I hate webbrowsers.) -- intrigeri
(I'll try never to rebase this branch, but writing this plugin has
been a pretext for me to start learning Git, so...)
To finish with, it seems no plugin bundled with ikiwiki uses the current
parentlinks implementation, so one could event think of moving it from the
core to this plugin (which should then be enabled by default, since the
default templates do use parentlinks ;).
> I think that moving parentlinks out to a plugin is a good idea.
> However, if it's done, I think the plugin should be named parentlinks,
> and should continue to use the same template variables as are used now,
> to avoid needing to change custom templates. Pedigree is a quite nice
> name, but renaming it to parentlinks seems to be the way to go to me.
> --[[Joey]]
>> Agreed. -- intrigeri

View File

@ -9,7 +9,7 @@ use IkiWiki::Setup::Standard {
underlaydir => "underlays/basewiki",
wrappers => [],
discussion => 0,
exclude => qr/\/discussion/,
exclude => qr/\/discussion|bugs\/*|todo\/*/,
locale => '',
verbose => 1,
syslog => 0,

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-07-12 23:07-0400\n"
"POT-Creation-Date: 2008-07-13 15:04-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -71,7 +71,7 @@ msgstr ""
msgid "You are banned."
msgstr ""
#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759
#: ../IkiWiki/CGI.pm:758 ../IkiWiki/CGI.pm:759 ../IkiWiki.pm:782
msgid "Error"
msgstr ""
@ -194,7 +194,7 @@ msgstr ""
msgid "There are no broken links!"
msgstr ""
#: ../IkiWiki/Plugin/conditional.pm:18
#: ../IkiWiki/Plugin/conditional.pm:18 ../IkiWiki/Plugin/testpagespec.pm:17
#, perl-format
msgid "%s parameter is required"
msgstr ""
@ -212,7 +212,7 @@ msgstr ""
msgid "edittemplate %s registered for %s"
msgstr ""
#: ../IkiWiki/Plugin/edittemplate.pm:111
#: ../IkiWiki/Plugin/edittemplate.pm:113
msgid "failed to process"
msgstr ""
@ -233,7 +233,7 @@ msgid "prog not a valid graphviz program"
msgstr ""
#: ../IkiWiki/Plugin/img.pm:49
msgid "Image::Magick not installed"
msgid "Image::Magick is not installed"
msgstr ""
#: ../IkiWiki/Plugin/img.pm:56
@ -287,7 +287,7 @@ msgstr ""
msgid "RPC::XML::Client not found, not pinging"
msgstr ""
#: ../IkiWiki/Plugin/linkmap.pm:98
#: ../IkiWiki/Plugin/linkmap.pm:97
msgid "failed to run dot"
msgstr ""
@ -408,7 +408,7 @@ msgid "polygen not installed"
msgstr ""
#: ../IkiWiki/Plugin/polygen.pm:51
msgid "polygen failed"
msgid "command failed"
msgstr ""
#: ../IkiWiki/Plugin/postsparkline.pm:32
@ -612,47 +612,47 @@ msgstr ""
msgid "getctime not implemented"
msgstr ""
#: ../IkiWiki/Render.pm:286 ../IkiWiki/Render.pm:307
#: ../IkiWiki/Render.pm:290 ../IkiWiki/Render.pm:311
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
#: ../IkiWiki/Render.pm:361
#: ../IkiWiki/Render.pm:365
#, perl-format
msgid "removing old page %s"
msgstr ""
#: ../IkiWiki/Render.pm:401
#: ../IkiWiki/Render.pm:405
#, perl-format
msgid "scanning %s"
msgstr ""
#: ../IkiWiki/Render.pm:406
#: ../IkiWiki/Render.pm:410
#, perl-format
msgid "rendering %s"
msgstr ""
#: ../IkiWiki/Render.pm:427
#: ../IkiWiki/Render.pm:431
#, perl-format
msgid "rendering %s, which links to %s"
msgstr ""
#: ../IkiWiki/Render.pm:448
#: ../IkiWiki/Render.pm:452
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr ""
#: ../IkiWiki/Render.pm:487
#: ../IkiWiki/Render.pm:491
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr ""
#: ../IkiWiki/Render.pm:499
#: ../IkiWiki/Render.pm:503
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr ""
#: ../IkiWiki/Render.pm:523
#: ../IkiWiki/Render.pm:527
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr ""
@ -729,6 +729,6 @@ msgstr ""
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
#: ../IkiWiki.pm:1203
#: ../IkiWiki.pm:1212
msgid "yes"
msgstr ""