summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2009-01-16 01:33:07 +0100
committerintrigeri <intrigeri@boum.org>2009-01-16 01:33:07 +0100
commit523718b181e9767d322bba3fe0b68cfcf85056a6 (patch)
tree127613ffa1519cc4e003a633f2c8fa2c6e6f281c
parent92b2efd39330b7e01884f6cd2face39ab21158e2 (diff)
po(change): re-render all rendered files in one corner case
All meta titles are first extracted at scan time, i.e. before we turn PO files back into translated markdown; escaping of double-quotes in PO files breaks the meta plugin's parsing enough to save ugly titles to %pagestate at this time. Then, at render time, every page's passes on row through the Great Rendering Chain (filter->preprocess->linkify->htmlize), and the meta plugin's preprocess hook is this time in a position to correctly extract the titles from slave pages. This is, unfortunately, too late: if the page A, linking to the page B, is rendered before B, it will display the wrongly-extracted meta title as the link text to B. On the one hand, such a corner case only happens on rebuild: on refresh, every rendered page is fixed to contain correct meta titles. On the other hand, it can take some time to get every page fixed. We therefore re-render every rendered page after a rebuild to fix them at once. As this more or less doubles the time needed to rebuild the wiki, we do so only when really needed. Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm36
1 files changed, 36 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index babf483a7..f826f9503 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -357,6 +357,42 @@ sub mydelete(@) {
sub change(@) {
my @rendered=@_;
+ # All meta titles are first extracted at scan time, i.e. before we turn
+ # PO files back into translated markdown; escaping of double-quotes in
+ # PO files breaks the meta plugin's parsing enough to save ugly titles
+ # to %pagestate at this time.
+ #
+ # Then, at render time, every page's passes on row through the Great
+ # Rendering Chain (filter->preprocess->linkify->htmlize), and the meta
+ # plugin's preprocess hook is this time in a position to correctly
+ # extract the titles from slave pages.
+ #
+ # This is, unfortunately, too late: if the page A, linking to the page B,
+ # is rendered before B, it will display the wrongly-extracted meta title
+ # as the link text to B.
+ #
+ # On the one hand, such a corner case only happens on rebuild: on
+ # refresh, every rendered page is fixed to contain correct meta titles.
+ # On the other hand, it can take some time to get every page fixed.
+ # We therefore re-render every rendered page after a rebuild to fix them
+ # at once. As this more or less doubles the time needed to rebuild the
+ # wiki, we do so only when really needed.
+
+ if (scalar @rendered
+ && exists $config{rebuild} && defined $config{rebuild} && $config{rebuild}
+ && UNIVERSAL::can("IkiWiki::Plugin::meta", "getsetup")
+ && exists $config{meta_overrides_page_title}
+ && defined $config{meta_overrides_page_title}
+ && $config{meta_overrides_page_title}) {
+ debug(sprintf(gettext("re-rendering all pages to fix meta titles")));
+ resetalreadyfiltered();
+ require IkiWiki::Render;
+ foreach my $file (@rendered) {
+ debug(sprintf(gettext("rendering %s"), $file));
+ IkiWiki::render($file);
+ }
+ }
+
my $updated_po_files=0;
# Refresh/create POT and PO files as needed.