From 523718b181e9767d322bba3fe0b68cfcf85056a6 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Fri, 16 Jan 2009 01:33:07 +0100 Subject: [PATCH] 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 --- IkiWiki/Plugin/po.pm | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) 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. -- 2.44.0