]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge commit '4dbb8120f760d9009f0c2639f2ccb9808150aed5' into sipb
authorAnders Kaseorg <andersk@mit.edu>
Fri, 31 Jan 2014 05:53:28 +0000 (00:53 -0500)
committerAnders Kaseorg <andersk@mit.edu>
Fri, 31 Jan 2014 05:53:28 +0000 (00:53 -0500)
Conflicts:
IkiWiki/Wrapper.pm

359 files changed:
.gitignore
Bundle/IkiWiki/Extras.pm
IkiWiki.pm
IkiWiki/CGI.pm
IkiWiki/Plugin/aggregate.pm
IkiWiki/Plugin/attachment.pm
IkiWiki/Plugin/blogspam.pm
IkiWiki/Plugin/bzr.pm
IkiWiki/Plugin/calendar.pm
IkiWiki/Plugin/comments.pm
IkiWiki/Plugin/cutpaste.pm
IkiWiki/Plugin/cvs.pm
IkiWiki/Plugin/darcs.pm
IkiWiki/Plugin/editpage.pm
IkiWiki/Plugin/edittemplate.pm
IkiWiki/Plugin/external.pm
IkiWiki/Plugin/filecheck.pm
IkiWiki/Plugin/flattr.pm [new file with mode: 0644]
IkiWiki/Plugin/format.pm
IkiWiki/Plugin/git.pm
IkiWiki/Plugin/goto.pm
IkiWiki/Plugin/graphviz.pm
IkiWiki/Plugin/highlight.pm
IkiWiki/Plugin/htmlbalance.pm
IkiWiki/Plugin/htmlscrubber.pm
IkiWiki/Plugin/htmltidy.pm
IkiWiki/Plugin/httpauth.pm
IkiWiki/Plugin/img.pm
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/listdirectives.pm
IkiWiki/Plugin/mercurial.pm
IkiWiki/Plugin/meta.pm
IkiWiki/Plugin/monotone.pm
IkiWiki/Plugin/more.pm
IkiWiki/Plugin/norcs.pm
IkiWiki/Plugin/openid.pm
IkiWiki/Plugin/parentlinks.pm
IkiWiki/Plugin/pinger.pm
IkiWiki/Plugin/po.pm
IkiWiki/Plugin/poll.pm
IkiWiki/Plugin/recentchanges.pm
IkiWiki/Plugin/recentchangesdiff.pm
IkiWiki/Plugin/relativedate.pm
IkiWiki/Plugin/remove.pm
IkiWiki/Plugin/rename.pm
IkiWiki/Plugin/search.pm
IkiWiki/Plugin/skeleton.pm.example
IkiWiki/Plugin/smiley.pm
IkiWiki/Plugin/sortnaturally.pm
IkiWiki/Plugin/sparkline.pm
IkiWiki/Plugin/svn.pm
IkiWiki/Plugin/table.pm
IkiWiki/Plugin/tag.pm
IkiWiki/Plugin/template.pm
IkiWiki/Plugin/teximg.pm
IkiWiki/Plugin/theme.pm
IkiWiki/Plugin/toggle.pm
IkiWiki/Plugin/txt.pm
IkiWiki/Plugin/version.pm
IkiWiki/Plugin/websetup.pm
IkiWiki/Plugin/wmd.pm
IkiWiki/Receive.pm
IkiWiki/Render.pm
IkiWiki/Setup.pm
IkiWiki/Wrapper.pm
Makefile.PL
README
auto-blog.setup
debian/changelog
debian/control
debian/copyright
doc/bugs/404_plugin_and_lighttpd.mdwn
doc/bugs/Error:_no_text_was_copied_in_this_page_--_missing_page_dependencies.mdwn [new file with mode: 0644]
doc/bugs/Highlight_extension_uses_hard_coded_paths.mdwn [new file with mode: 0644]
doc/bugs/More_permission_checking.mdwn [new file with mode: 0644]
doc/bugs/UTF-16_and_UTF-32_are_unhandled.mdwn [new file with mode: 0644]
doc/bugs/__34__Currently_enabled_SSH_keys:__34___shows_only_first_139_characters_of_each_key.mdwn [new file with mode: 0644]
doc/bugs/__34__First_post__34___deletion_does_not_refresh_front_page.mdwn [new file with mode: 0644]
doc/bugs/absolute_sizes_in_default_CSS.mdwn [new file with mode: 0644]
doc/bugs/aggregate_generates_long_filenames.mdwn [new file with mode: 0644]
doc/bugs/argument_isn__39__t_numeric:_mixing_templates_and_creation__95__date.mdwn [new file with mode: 0644]
doc/bugs/blog_spam_plugin_not_allowing_non-ASCII_chars__63__.mdwn [new file with mode: 0644]
doc/bugs/can__39__t_mix_template_vars_inside_directives.mdwn [new file with mode: 0644]
doc/bugs/class_parameter_of_img_directive_behave_not_as_documented.mdwn [new file with mode: 0644]
doc/bugs/cutpaste.pm:_missing_filter_call.mdwn [new file with mode: 0644]
doc/bugs/default__95__pageext_not_working.mdwn [new file with mode: 0644]
doc/bugs/git.pm_should_prune_remote_branches_when_fetching.mdwn [new file with mode: 0644]
doc/bugs/git_commit_adds_files_that_were_not_tracked.mdwn [new file with mode: 0644]
doc/bugs/htmlbalance_fails_with_HTML-Tree_v4.mdwn [new file with mode: 0644]
doc/bugs/htmlscrubber_breaks_multimarkdown_footnotes.mdwn [new file with mode: 0644]
doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn [new file with mode: 0644]
doc/bugs/ikiwiki_ignores_PATH_environment.mdwn [new file with mode: 0644]
doc/bugs/img_plugin_and_class_attr.mdwn [new file with mode: 0644]
doc/bugs/inline_action_buttons_circumvent_exclude_criteria_from_edittemplate__39__s_match__61____34____34___pagespec.mdwn [new file with mode: 0644]
doc/bugs/logout_in_ikiwiki.mdwn [new file with mode: 0644]
doc/bugs/monotone_backend_does_not_support_srcdir_in_subdir.mdwn [new file with mode: 0644]
doc/bugs/more_and_RSS_generation.mdwn [new file with mode: 0644]
doc/bugs/po:_apache_config_serves_index.rss_for_index.mdwn [new file with mode: 0644]
doc/bugs/po:_double_commits_of_po_files.mdwn [new file with mode: 0644]
doc/bugs/po:_markdown_link_parse_bug.mdwn [new file with mode: 0644]
doc/bugs/po:_new_pages_not_translatable.mdwn [new file with mode: 0644]
doc/bugs/po:_plugin_should_not_override_the_title_on_the_homepage.mdwn [new file with mode: 0644]
doc/bugs/po:_po_files_instead_of_html_files.mdwn [new file with mode: 0644]
doc/bugs/po:_ugly_messages_with_empty_files.mdwn [new file with mode: 0644]
doc/bugs/po:broken_links_to_translatable_basewiki_pages_that_lack_po_fies.mdwn [new file with mode: 0644]
doc/bugs/preview_base_url_should_be_absolute.mdwn [new file with mode: 0644]
doc/bugs/rename_fixup_not_attributed_to_author.mdwn [new file with mode: 0644]
doc/bugs/rss_feeds_do_not_use_recommended_encoding_of_entities_for_some_fields.mdwn
doc/bugs/rst_fails_on_file_containing_only_a_number.mdwn
doc/bugs/tag_behavior_changes_introduced_by_typed_link_feature.mdwn [new file with mode: 0644]
doc/bugs/urlto_API_change_breaks_wikis_with_po_plugin.mdwn [new file with mode: 0644]
doc/bugs/urlto__40____34____34____44___...__44___1__41___not_absolute.mdwn [new file with mode: 0644]
doc/bugs/web_reversion_on_ikiwiki.info.mdwn [new file with mode: 0644]
doc/css.mdwn
doc/css_market.mdwn
doc/css_market/actiontabs.css [deleted file]
doc/examples/blog.mdwn
doc/examples/blog/posts/ugachaka/discussion.mdwn [new file with mode: 0644]
doc/features.mdwn
doc/forum/404_-_not_found.mdwn [new file with mode: 0644]
doc/forum/404_-_not_found/comment_1_3dea2600474f77fb986767da4d507d62._comment [new file with mode: 0644]
doc/forum/404_-_not_found/comment_2_948e4678be6f82d9b541132405351a2c._comment [new file with mode: 0644]
doc/forum/404_-_not_found/comment_3_4c7b1fa88776815bbc6aa286606214c2._comment [new file with mode: 0644]
doc/forum/Asciidoc_plugin.mdwn [new file with mode: 0644]
doc/forum/Blog_posting_times_and_ikiwiki_state.mdwn [new file with mode: 0644]
doc/forum/Blog_posting_times_and_ikiwiki_state/comment_1_87304dfa2caea7e526cdb04917524e8c._comment [new file with mode: 0644]
doc/forum/Can__39__t_get_comments_plugin_working.mdwn [new file with mode: 0644]
doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__.mdwn [new file with mode: 0644]
doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__/comment_1_15651796492a6f04a19f4a481947c97c._comment [new file with mode: 0644]
doc/forum/Discussion_PageSpec__63__.mdwn [new file with mode: 0644]
doc/forum/Dump_plugin.mdwn [new file with mode: 0644]
doc/forum/Dump_plugin/comment_1_bfce80b3f5be78ec28692330843d4ae1._comment [new file with mode: 0644]
doc/forum/Flowplayer.mdwn [new file with mode: 0644]
doc/forum/Forward_slashes_being_escaped_as_252F.mdwn [new file with mode: 0644]
doc/forum/How_to_list_new_pages__44___inline__63__.mdwn [new file with mode: 0644]
doc/forum/How_to_list_new_pages__44___inline__63__/comment_1_e989b18bade34a92a9c8fe7099036e15._comment [new file with mode: 0644]
doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links.mdwn [new file with mode: 0644]
doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links/comment_1_3fe4c5967e704355f9b594aed46baf67._comment [new file with mode: 0644]
doc/forum/Moving_wiki.git_folder__63__.mdwn [new file with mode: 0644]
doc/forum/Moving_wiki.git_folder__63__/comment_1_05238461520613f4ed1b0d02ece663bd._comment [new file with mode: 0644]
doc/forum/Moving_wiki.git_folder__63__/comment_2_72b2b842dfa0cfaf899fe7af12977519._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude.mdwn [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_2_0019cd6b34c8d8678b2532de57a92d15._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_2_f577ab6beb9912471949d8d18c790267._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_3_1ed260b0083a290688425a006a83f603._comment [new file with mode: 0644]
doc/forum/Need_something_more_powerful_than_Exclude/comment_4_c39bdaf38e1e20db74eb26f0560bd673._comment [new file with mode: 0644]
doc/forum/PageSpec_results_from_independent_checkout.mdwn [new file with mode: 0644]
doc/forum/cutpaste.pm_not_only_file-local.mdwn [new file with mode: 0644]
doc/forum/cutpaste.pm_not_only_file-local/comment_1_497c62f21fd1b87625b806407c72dbad._comment [new file with mode: 0644]
doc/forum/editing_a_comment.mdwn [new file with mode: 0644]
doc/forum/field_and_forms.mdwn [new file with mode: 0644]
doc/forum/field_and_forms/comment_1_a0e976cb79f03dcff5e9a4511b90d160._comment [new file with mode: 0644]
doc/forum/how_can_I_use___39____47____39___as_tagbase__63__.mdwn [new file with mode: 0644]
doc/forum/how_can_I_use___39____47____39___as_tagbase__63__/comment_1_e7897651ba8d9156526d36d6b7744eae._comment [new file with mode: 0644]
doc/forum/how_do_I_revert_edits_in_the_web_mode__63__.mdwn
doc/forum/how_do_I_revert_edits_in_the_web_mode__63__/comment_1_e4720e8e4fe74bd6cba746e8259832e6._comment [new file with mode: 0644]
doc/forum/ikiwiki_+_mathjax.mdwn [new file with mode: 0644]
doc/forum/ikiwiki_+_mathjax/comment_1_8426a985ecfbb02d364116503ef3a0d4._comment [new file with mode: 0644]
doc/forum/ikiwiki_vim_integration.mdwn [new file with mode: 0644]
doc/forum/link_autocompletion_in_vim.mdwn
doc/forum/multi_domain_setup_possible__63__.mdwn [new file with mode: 0644]
doc/forum/multi_domain_setup_possible__63__/comment_1_43f5df30d09046ccc4f7c44703979a11._comment [new file with mode: 0644]
doc/forum/multi_domain_setup_possible__63__/comment_2_75d6581f81b71fb8acbe3561047ea759._comment [new file with mode: 0644]
doc/forum/recovering_original_title_with_meta_directive.mdwn [new file with mode: 0644]
doc/forum/report_pagination.mdwn [new file with mode: 0644]
doc/forum/using_l10n__39__d_basewiki.mdwn [new file with mode: 0644]
doc/forum/using_l10n__39__d_basewiki/comment_1_eaab671848ee6129f6fe9399474eeac0._comment [new file with mode: 0644]
doc/forum/using_l10n__39__d_basewiki/comment_2_d907676a1db1210ca59506673c564359._comment [new file with mode: 0644]
doc/forum/using_l10n__39__d_basewiki/comment_3_5e9d5bc5ecaf63f9bfe3315b09a279aa._comment [new file with mode: 0644]
doc/forum/using_svn+ssh_with_ikiwiki.mdwn [new file with mode: 0644]
doc/git.mdwn
doc/ikiwiki/directive/aggregate/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/flattr.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/if.mdwn
doc/ikiwiki/directive/meta.mdwn
doc/ikiwiki/directive/more.mdwn
doc/ikiwiki/directive/table/discussion.mdwn [new file with mode: 0644]
doc/ikiwiki/directive/template.mdwn
doc/ikiwiki/pagespec.mdwn
doc/ikiwikiusers.mdwn
doc/install.mdwn
doc/install/discussion.mdwn
doc/news/ikiwiki-hosting.mdwn [new file with mode: 0644]
doc/news/openid.mdwn
doc/news/openid/discussion.mdwn
doc/news/version_3.20100518.2.mdwn [deleted file]
doc/news/version_3.20100518.mdwn [deleted file]
doc/news/version_3.20100610.mdwn [deleted file]
doc/news/version_3.20100623.mdwn [deleted file]
doc/news/version_3.20100704.mdwn [deleted file]
doc/news/version_3.20101023.mdwn [new file with mode: 0644]
doc/news/version_3.20101112.mdwn [new file with mode: 0644]
doc/news/version_3.20101129.mdwn [new file with mode: 0644]
doc/news/version_3.20101201.mdwn [new file with mode: 0644]
doc/news/version_3.20101231.mdwn [new file with mode: 0644]
doc/plugins/aggregate/discussion.mdwn
doc/plugins/autoindex/discussion.mdwn
doc/plugins/calendar/discussion.mdwn
doc/plugins/contrib/album.mdwn
doc/plugins/contrib/default_content_for___42__copyright__42___and___42__license__42__.mdwn
doc/plugins/contrib/field/discussion.mdwn
doc/plugins/contrib/flattr.mdwn
doc/plugins/contrib/headinganchors/discussion.mdwn
doc/plugins/contrib/ikiwiki/directive/ymlfront.mdwn [new file with mode: 0644]
doc/plugins/contrib/imailhide.mdwn [new file with mode: 0644]
doc/plugins/contrib/report/ikiwiki/directive/report.mdwn
doc/plugins/contrib/texinfo.mdwn
doc/plugins/contrib/transient.mdwn [new file with mode: 0644]
doc/plugins/contrib/ymlfront.mdwn
doc/plugins/contrib/ymlfront/discussion.mdwn
doc/plugins/filecheck.mdwn
doc/plugins/filecheck/discussion.mdwn
doc/plugins/flattr.mdwn [new file with mode: 0644]
doc/plugins/graphviz.mdwn
doc/plugins/htmlscrubber.mdwn
doc/plugins/po.mdwn
doc/plugins/po/discussion.mdwn
doc/plugins/recentchanges.mdwn
doc/plugins/rst/discussion.mdwn
doc/plugins/search.mdwn
doc/plugins/sparkline.mdwn
doc/plugins/theme.mdwn
doc/plugins/write.mdwn
doc/plugins/write/external.mdwn
doc/rcs.mdwn
doc/sandbox.mdwn
doc/sandbox/Fantasia.mdwn [new file with mode: 0644]
doc/sandbox/Mooooo.mdwn [new file with mode: 0644]
doc/sandbox/Nur_so..mdwn [new file with mode: 0644]
doc/sandbox/Post.mdwn [deleted file]
doc/sandbox/Testing_blog_entry.mdwn [new file with mode: 0644]
doc/sandbox/bullet_list_and_code_test.mdwn [new file with mode: 0644]
doc/sandbox/hey.mdwn [new file with mode: 0644]
doc/sandbox/prova_blog.html [deleted file]
doc/sandbox/revert_me.mdwn [new file with mode: 0644]
doc/security.mdwn
doc/setup.mdwn
doc/setup/byhand.mdwn
doc/setup/discussion.mdwn
doc/shortcuts.mdwn
doc/shortcuts/discussion.mdwn [new file with mode: 0644]
doc/smileys/icon-error.png
doc/style.css
doc/templates.mdwn
doc/templates/discussion.mdwn
doc/templates/links.mdwn
doc/themes.mdwn [new file with mode: 0644]
doc/themes/actiontabs_small.png [new file with mode: 0644]
doc/themes/blueview_small.png [new file with mode: 0644]
doc/themes/goldtype_small.png [new file with mode: 0644]
doc/themes/none_small.png [new file with mode: 0644]
doc/tipjar.mdwn
doc/tips/Importing_posts_from_Wordpress.mdwn
doc/tips/convert_mediawiki_to_ikiwiki/discussion.mdwn
doc/tips/dot_cgi.mdwn
doc/tips/html5.mdwn
doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard.mdwn [new file with mode: 0644]
doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard/discussion.mdwn [new file with mode: 0644]
doc/tips/nearlyfreespeech.mdwn
doc/tips/nearlyfreespeech/discussion.mdwn
doc/tips/psgi.mdwn [new file with mode: 0644]
doc/tips/spam_and_softwaresites/discussion.mdwn [new file with mode: 0644]
doc/tips/untrusted_git_push.mdwn
doc/tips/vim_and_ikiwiki.mdwn [new file with mode: 0644]
doc/tips/vim_syntax_highlighting.mdwn
doc/todo/Add_nicer_math_formatting.mdwn [new file with mode: 0644]
doc/todo/Improving_the_efficiency_of_match__95__glob.mdwn [new file with mode: 0644]
doc/todo/Option_to_make_title_an_h1__63__.mdwn
doc/todo/__42__forward__42__ing_functionality_for_the_meta_plugin.mdwn
doc/todo/alias_directive.mdwn [new file with mode: 0644]
doc/todo/auto-create_tag_pages_according_to_a_template.mdwn
doc/todo/autoindex_should_use_add__95__autofile.mdwn [new file with mode: 0644]
doc/todo/avatar.mdwn
doc/todo/capitalize_title.mdwn [new file with mode: 0644]
doc/todo/configurable_tidy_command_for_htmltidy.mdwn [new file with mode: 0644]
doc/todo/countdown_directive.mdwn [new file with mode: 0644]
doc/todo/edit_form:_no_fixed_size_for_textarea.mdwn
doc/todo/feed_enhancements_for_inline_pages.mdwn [new file with mode: 0644]
doc/todo/generic_insert_links.mdwn [new file with mode: 0644]
doc/todo/inline_raw_files.mdwn [new file with mode: 0644]
doc/todo/latex.mdwn
doc/todo/mirrorlist_with_per-mirror_usedirs_settings.mdwn
doc/todo/passwordauth:_sendmail_interface.mdwn
doc/todo/po:_avoid_rebuilding_to_fix_meta_titles.mdwn [new file with mode: 0644]
doc/todo/po:_better_documentation.mdwn [new file with mode: 0644]
doc/todo/po:_better_links.mdwn [new file with mode: 0644]
doc/todo/po:_better_translation_interface.mdwn [new file with mode: 0644]
doc/todo/po:_remove_po_files_when_disabling_plugin.mdwn [new file with mode: 0644]
doc/todo/po:_rethink_pagespecs.mdwn [new file with mode: 0644]
doc/todo/po:_translation_of_directives.mdwn [new file with mode: 0644]
doc/todo/replace_HTML::Template_with_Template_Toolkit.mdwn
doc/todo/selective_more_directive.mdwn [new file with mode: 0644]
doc/todo/support_includes_in_setup_files.mdwn [new file with mode: 0644]
doc/todo/support_link__40__.__41___in_pagespec.mdwn
doc/todo/transient_pages.mdwn [new file with mode: 0644]
doc/todo/untrusted_git_push_hooks.mdwn [new file with mode: 0644]
doc/todo/use_secure_cookies_for_ssl_logins.mdwn [new file with mode: 0644]
doc/todo/use_templates_for_the_img_plugin.mdwn [new file with mode: 0644]
doc/todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both.mdwn
doc/todo/web_reversion.mdwn [new file with mode: 0644]
doc/usage.mdwn
doc/users/Perry.mdwn [new file with mode: 0644]
doc/users/Remy.mdwn [new file with mode: 0644]
doc/users/anarcat.wiki [new file with mode: 0644]
doc/users/chrysn.mdwn [new file with mode: 0644]
doc/users/dark.mdwn [new file with mode: 0644]
doc/users/harishcm.mdwn
doc/users/jasonriedy.mdwn [new file with mode: 0644]
doc/users/tschwinge.mdwn
doc/wikiicons/revert.png [new file with mode: 0644]
ikiwiki.in
ikiwiki.spec
mdwn2man
po/bg.po
po/cs.po
po/da.po
po/de.po
po/es.po
po/fr.po
po/gu.po
po/ikiwiki.pot
po/it.po
po/pl.po
po/po2wiki
po/sv.po
po/tr.po
po/underlay.setup
po/underlays/basewiki/ikiwiki.fr.po
po/underlays/basewiki/ikiwiki/openid.fr.po
po/underlays/basewiki/ikiwiki/pagespec.fr.po
po/underlays/basewiki/ikiwiki/subpage.fr.po
po/underlays/basewiki/ikiwiki/wikilink.fr.po
po/underlays/basewiki/templates.fr.po
po/underlays/directives/ikiwiki/directive/calendar.da.po
po/underlays/directives/ikiwiki/directive/calendar.de.po
po/underlays/directives/ikiwiki/directive/calendar.fr.po
po/underlays/directives/ikiwiki/directive/linkmap.fr.po
po/underlays/directives/ikiwiki/directive/pagestats.fr.po
po/underlays/directives/ikiwiki/directive/template.fr.po
po/vi.po
t/autoindex.t [new file with mode: 0755]
t/bazaar.t
t/htmlize.t
t/pagespec_match.t
t/permalink.t
t/po.t
t/rssurls.t [new file with mode: 0755]
t/tag.t
t/urlto.t [new file with mode: 0755]
templates/change.tmpl
templates/revert.tmpl [new file with mode: 0644]
templates/rssitem.tmpl
themes/actiontabs/style.css
themes/blueview/style.css
themes/goldtype/background_darkness.png [new file with mode: 0644]
themes/goldtype/base.css [new symlink]
themes/goldtype/header_background.png [new file with mode: 0644]
themes/goldtype/style.css [new file with mode: 0644]
underlays/openid-selector/ikiwiki/openid/openid-jquery.js

index e9ab152b6413d20385e317c7020406b01268f607..6b7efe5c150a177fcd9c4bc5e5c297e48771078e 100644 (file)
@@ -16,3 +16,4 @@ po/underlays/basewiki/*/*/*.mdwn
 po/underlays/directives/ikiwiki/directive/*.mdwn
 po/underlays_copy_stamp
 underlays/locale
+/t/tmp/
index 5bbd7b8c62f5e05f9e9d5434df95a94c7d1933b8..64e907306544b150a48cc0668ded1f3cccae745e 100644 (file)
@@ -16,7 +16,6 @@ perl -MCPAN -e 'install Bundle::IkiWiki::Extras'
 
 =head1 CONTENTS
 
-Digest::SHA1
 Authen::Passphrase
 Search::Xapian
 RPC::XML
index 0c0b7bd4c0d418fffda7b2d86623c7c967e82e37..e963471e41c766d1ddfb92c9f54c282acf57b7b5 100644 (file)
@@ -501,6 +501,12 @@ sub defaultconfig () {
        return @ret;
 }
 
+# URL to top of wiki as a path starting with /, valid from any wiki page or
+# the CGI; if that's not possible, an absolute URL. Either way, it ends with /
+my $local_url;
+# URL to CGI script, similar to $local_url
+my $local_cgiurl;
+
 sub checkconfig () {
        # locale stuff; avoid LC_ALL since it overrides everything
        if (defined $ENV{LC_ALL}) {
@@ -537,7 +543,33 @@ sub checkconfig () {
        if ($config{cgi} && ! length $config{url}) {
                error(gettext("Must specify url to wiki with --url when using --cgi"));
        }
-       
+
+       if (defined $config{url} && length $config{url}) {
+               eval q{use URI};
+               my $baseurl = URI->new($config{url});
+
+               $local_url = $baseurl->path . "/";
+               $local_cgiurl = undef;
+
+               if (length $config{cgiurl}) {
+                       my $cgiurl = URI->new($config{cgiurl});
+
+                       $local_cgiurl = $cgiurl->path;
+
+                       if ($cgiurl->scheme ne $baseurl->scheme or
+                               $cgiurl->authority ne $baseurl->authority) {
+                               # too far apart, fall back to absolute URLs
+                               $local_url = "$config{url}/";
+                               $local_cgiurl = $config{cgiurl};
+                       }
+               }
+
+               $local_url =~ s{//$}{/};
+       }
+       else {
+               $local_cgiurl = $config{cgiurl};
+       }
+
        $config{wikistatedir}="$config{srcdir}/.ikiwiki"
                unless exists $config{wikistatedir} && defined $config{wikistatedir};
 
@@ -717,7 +749,7 @@ sub pagename ($) {
 
        my $type=pagetype($file);
        my $page=$file;
-       $page=~s/\Q.$type\E*$//
+       $page=~s/\Q.$type\E*$//
                if defined $type && !$hooks{htmlize}{$type}{keepextension}
                        && !$hooks{htmlize}{$type}{noextension};
        if ($config{indexpages} && $page=~/(.*)\/index$/) {
@@ -1010,11 +1042,17 @@ sub linkpage ($) {
 sub cgiurl (@) {
        my %params=@_;
 
-       my $cgiurl=$config{cgiurl};
+       my $cgiurl=$local_cgiurl;
+
        if (exists $params{cgiurl}) {
                $cgiurl=$params{cgiurl};
                delete $params{cgiurl};
        }
+
+       unless (%params) {
+               return $cgiurl;
+       }
+
        return $cgiurl."?".
                join("&amp;", map $_."=".uri_escape_utf8($params{$_}), keys %params);
 }
@@ -1022,7 +1060,7 @@ sub cgiurl (@) {
 sub baseurl (;$) {
        my $page=shift;
 
-       return "$config{url}/" if ! defined $page;
+       return $local_url if ! defined $page;
        
        $page=htmlpage($page);
        $page=~s/[^\/]+$//;
@@ -1096,13 +1134,13 @@ sub beautify_urlpath ($) {
        return $url;
 }
 
-sub urlto ($$;$) {
+sub urlto ($;$$) {
        my $to=shift;
        my $from=shift;
        my $absolute=shift;
        
        if (! length $to) {
-               return beautify_urlpath(baseurl($from)."index.$config{htmlext}");
+               $to = 'index';
        }
 
        if (! $destsources{$to}) {
@@ -1113,6 +1151,12 @@ sub urlto ($$;$) {
                return $config{url}.beautify_urlpath("/".$to);
        }
 
+       if (! defined $from) {
+               my $u = $local_url;
+               $u =~ s{/$}{};
+               return $u.beautify_urlpath("/".$to);
+       }
+
        my $link = abs2rel($to, dirname(htmlpage($from)));
 
        return beautify_urlpath($link);
@@ -1124,7 +1168,7 @@ sub isselflink ($$) {
        my $page=shift;
        my $link=shift;
 
-        return $page eq $link;
+       return $page eq $link;
 }
 
 sub htmllink ($$$;@) {
@@ -1201,7 +1245,7 @@ sub userpage ($) {
 sub openiduser ($) {
        my $user=shift;
 
-       if ($user =~ m!^https?://! &&
+       if (defined $user && $user =~ m!^https?://! &&
            eval q{use Net::OpenID::VerifiedIdentity; 1} && !$@) {
                my $display;
 
@@ -1519,6 +1563,69 @@ sub check_content (@) {
        return defined $ok ? $ok : 1;
 }
 
+sub check_canchange (@) {
+       my %params = @_;
+       my $cgi = $params{cgi};
+       my $session = $params{session};
+       my @changes = @{$params{changes}};
+
+       my %newfiles;
+       foreach my $change (@changes) {
+               # This untaint is safe because we check file_pruned and
+               # wiki_file_regexp.
+               my ($file)=$change->{file}=~/$config{wiki_file_regexp}/;
+               $file=possibly_foolish_untaint($file);
+               if (! defined $file || ! length $file ||
+                   file_pruned($file)) {
+                       error(gettext("bad file name %s"), $file);
+               }
+
+               my $type=pagetype($file);
+               my $page=pagename($file) if defined $type;
+
+               if ($change->{action} eq 'add') {
+                       $newfiles{$file}=1;
+               }
+
+               if ($change->{action} eq 'change' ||
+                   $change->{action} eq 'add') {
+                       if (defined $page) {
+                               check_canedit($page, $cgi, $session);
+                               next;
+                       }
+                       else {
+                               if (IkiWiki::Plugin::attachment->can("check_canattach")) {
+                                       IkiWiki::Plugin::attachment::check_canattach($session, $file, $change->{path});
+                                       check_canedit($file, $cgi, $session);
+                                       next;
+                               }
+                       }
+               }
+               elsif ($change->{action} eq 'remove') {
+                       # check_canremove tests to see if the file is present
+                       # on disk. This will fail when a single commit adds a
+                       # file and then removes it again. Avoid the problem
+                       # by not testing the removal in such pairs of changes.
+                       # (The add is still tested, just to make sure that
+                       # no data is added to the repo that a web edit
+                       # could not add.)
+                       next if $newfiles{$file};
+
+                       if (IkiWiki::Plugin::remove->can("check_canremove")) {
+                               IkiWiki::Plugin::remove::check_canremove(defined $page ? $page : $file, $cgi, $session);
+                               check_canedit(defined $page ? $page : $file, $cgi, $session);
+                               next;
+                       }
+               }
+               else {
+                       error "unknown action ".$change->{action};
+               }
+
+               error sprintf(gettext("you are not allowed to change %s"), $file);
+       }
+}
+
+
 my $wikilock;
 
 sub lockwiki () {
@@ -1596,6 +1703,12 @@ sub loadindex () {
        if (exists $index->{version} && ! ref $index->{version}) {
                $pages=$index->{page};
                %wikistate=%{$index->{state}};
+               # Handle plugins that got disabled by loading a new setup.
+               if (exists $config{setupfile}) {
+                       require IkiWiki::Setup;
+                       IkiWiki::Setup::disabled_plugins(
+                               grep { ! $loaded_plugins{$_} } keys %wikistate);
+               }
        }
        else {
                $pages=$index;
@@ -1663,11 +1776,7 @@ sub loadindex () {
 sub saveindex () {
        run_hooks(savestate => sub { shift->() });
 
-       my %hookids;
-       foreach my $type (keys %hooks) {
-               $hookids{$_}=1 foreach keys %{$hooks{$type}};
-       }
-       my @hookids=keys %hookids;
+       my @plugins=keys %loaded_plugins;
 
        if (! -d $config{wikistatedir}) {
                mkdir($config{wikistatedir});
@@ -1701,7 +1810,7 @@ sub saveindex () {
                }
 
                if (exists $pagestate{$page}) {
-                       foreach my $id (@hookids) {
+                       foreach my $id (@plugins) {
                                foreach my $key (keys %{$pagestate{$page}{$id}}) {
                                        $index{page}{$src}{state}{$id}{$key}=$pagestate{$page}{$id}{$key};
                                }
@@ -1710,7 +1819,8 @@ sub saveindex () {
        }
 
        $index{state}={};
-       foreach my $id (@hookids) {
+       foreach my $id (@plugins) {
+               $index{state}{$id}={}; # used to detect disabled plugins
                foreach my $key (keys %{$wikistate{$id}}) {
                        $index{state}{$id}{$key}=$wikistate{$id}{$key};
                }
@@ -1730,12 +1840,15 @@ sub template_file ($) {
        my $name=shift;
        
        my $tpage=($name =~ s/^\///) ? $name : "templates/$name";
+       my $template;
        if ($name !~ /\.tmpl$/ && exists $pagesources{$tpage}) {
-               $tpage=$pagesources{$tpage};
+               $template=srcfile($pagesources{$tpage}, 1);
                $name.=".tmpl";
        }
+       else {
+               $template=srcfile($tpage, 1);
+       }
 
-       my $template=srcfile($tpage, 1);
        if (defined $template) {
                return $template, $tpage, 1 if wantarray;
                return $template;
@@ -1763,12 +1876,14 @@ sub template_depends ($$;@) {
        my $page=shift;
        
        my ($filename, $tpage, $untrusted)=template_file($name);
+       if (! defined $filename) {
+               error(sprintf(gettext("template %s not found"), $name))
+       }
+
        if (defined $page && defined $tpage) {
                add_depends($page, $tpage);
        }
-
-       return unless defined $filename;
-
+       
        my @opts=(
                filter => sub {
                        my $text_ref = shift;
@@ -1776,6 +1891,7 @@ sub template_depends ($$;@) {
                },
                loop_context_vars => 1,
                die_on_bad_params => 0,
+               parent_global_vars => 1,
                filename => $filename,
                @_,
                ($untrusted ? (no_includes => 1) : ()),
@@ -1815,7 +1931,7 @@ sub misctemplate ($$;@) {
                title => $title,
                wikiname => $config{wikiname},
                content => $content,
-               baseurl => baseurl(),
+               baseurl => $config{url}.'/',
                html5 => $config{html5},
                %params,
        );
@@ -1917,7 +2033,7 @@ sub rcs_recentchanges ($) {
        $hooks{rcs}{rcs_recentchanges}{call}->(@_);
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        $hooks{rcs}{rcs_diff}{call}->(@_);
 }
 
@@ -2317,7 +2433,7 @@ sub glob2re ($) {
        my $re=quotemeta(shift);
        $re=~s/\\\*/.*/g;
        $re=~s/\\\?/./g;
-       return $re;
+       return qr/^$re$/i;
 }
 
 package IkiWiki::FailReason;
@@ -2396,15 +2512,23 @@ sub derel ($$) {
        my $path=shift;
        my $from=shift;
 
-       if ($path =~ m!^\./!) {
-               $from=~s#/?[^/]+$## if defined $from;
-               $path=~s#^\./##;
-               $path="$from/$path" if defined $from && length $from;
+       if ($path =~ m!^\.(/|$)!) {
+               if ($1) {
+                       $from=~s#/?[^/]+$## if defined $from;
+                       $path=~s#^\./##;
+                       $path="$from/$path" if defined $from && length $from;
+               }
+               else {
+                       $path = $from;
+                       $path = "" unless defined $path;
+               }
        }
 
        return $path;
 }
 
+my %glob_cache;
+
 sub match_glob ($$;@) {
        my $page=shift;
        my $glob=shift;
@@ -2412,8 +2536,13 @@ sub match_glob ($$;@) {
        
        $glob=derel($glob, $params{location});
 
-       my $regexp=IkiWiki::glob2re($glob);
-       if ($page=~/^$regexp$/i) {
+       # Instead of converting the glob to a regex every time,
+       # cache the compiled regex to save time.
+       my $re=$glob_cache{$glob};
+       unless (defined $re) {
+               $glob_cache{$glob} = $re = IkiWiki::glob2re($glob);
+       }
+       if ($page =~ $re) {
                if (! IkiWiki::isinternal($page) || $params{internal}) {
                        return IkiWiki::SuccessReason->new("$glob matches $page");
                }
@@ -2433,13 +2562,16 @@ sub match_internal ($$;@) {
 sub match_page ($$;@) {
        my $page=shift;
        my $match=match_glob($page, shift, @_);
-       if ($match && ! (exists $IkiWiki::pagesources{$page}
-           && defined IkiWiki::pagetype($IkiWiki::pagesources{$page}))) {
-               return IkiWiki::FailReason->new("$page is not a page");
-       }
-       else {
-               return $match;
+       if ($match) {
+               my $source=exists $IkiWiki::pagesources{$page} ?
+                       $IkiWiki::pagesources{$page} :
+                       $IkiWiki::delpagesources{$page};
+               my $type=defined $source ? IkiWiki::pagetype($source) : undef;
+               if (! defined $type) {  
+                       return IkiWiki::FailReason->new("$page is not a page");
+               }
        }
+       return $match;
 }
 
 sub match_link ($$;@) {
@@ -2528,7 +2660,12 @@ sub match_created_after ($$;@) {
 }
 
 sub match_creation_day ($$;@) {
-       if ((localtime($IkiWiki::pagectime{shift()}))[3] == shift) {
+       my $page=shift;
+       my $d=shift;
+       if ($d !~ /^\d+$/) {
+               return IkiWiki::ErrorReason->new("invalid day $d");
+       }
+       if ((localtime($IkiWiki::pagectime{$page}))[3] == $d) {
                return IkiWiki::SuccessReason->new('creation_day matched');
        }
        else {
@@ -2537,7 +2674,12 @@ sub match_creation_day ($$;@) {
 }
 
 sub match_creation_month ($$;@) {
-       if ((localtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift) {
+       my $page=shift;
+       my $m=shift;
+       if ($m !~ /^\d+$/) {
+               return IkiWiki::ErrorReason->new("invalid month $m");
+       }
+       if ((localtime($IkiWiki::pagectime{$page}))[4] + 1 == $m) {
                return IkiWiki::SuccessReason->new('creation_month matched');
        }
        else {
@@ -2546,7 +2688,12 @@ sub match_creation_month ($$;@) {
 }
 
 sub match_creation_year ($$;@) {
-       if ((localtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift) {
+       my $page=shift;
+       my $y=shift;
+       if ($y !~ /^\d+$/) {
+               return IkiWiki::ErrorReason->new("invalid year $y");
+       }
+       if ((localtime($IkiWiki::pagectime{$page}))[5] + 1900 == $y) {
                return IkiWiki::SuccessReason->new('creation_year matched');
        }
        else {
@@ -2565,7 +2712,7 @@ sub match_user ($$;@) {
                return IkiWiki::ErrorReason->new("no user specified");
        }
 
-       if (defined $params{user} && $params{user}=~/^$regexp$/i) {
+       if (defined $params{user} && $params{user}=~$regexp) {
                return IkiWiki::SuccessReason->new("user is $user");
        }
        elsif (! defined $params{user}) {
index ad253c803901c1aea194224043488fa4a8d89322..2e8ea406d6df76a4e59deaebb2be895f88cbc314 100644 (file)
@@ -12,7 +12,7 @@ use Encode;
 sub printheader ($) {
        my $session=shift;
        
-       if ($config{sslcookie}) {
+       if ($ENV{HTTPS} || $config{sslcookie}) {
                print $session->header(-charset => 'utf-8',
                        -cookie => $session->cookie(-httponly => 1, -secure => 1));
        }
@@ -49,10 +49,36 @@ sub showform ($$$$;@) {
        print misctemplate($form->title, $form->render(submit => $buttons), @_);
 }
 
+# Like showform, but the base url will be set to allow edit previews
+# that use links relative to the specified page.
+sub showform_preview ($$$$;@) {
+       my $form=shift;
+       my $buttons=shift;
+       my $session=shift;
+       my $cgi=shift;
+       my %params=@_;
+
+       # The base url needs to be a full URL, and urlto may return a path.
+       my $baseurl = absurl(urlto($params{page}), $cgi->url);
+
+       showform($form, $buttons, $session, $cgi, @_,
+               forcebaseurl => $baseurl);
+}
+
+# Forces a partial url (path only) to absolute, using the same
+# URL scheme as the CGI. Full URLs are left unchanged.
+sub absurl ($$) {
+       my $partialurl=shift;
+       my $q=shift;
+
+       eval q{use URI};
+       return URI->new_abs($partialurl, $q->url);
+}
+
 sub redirect ($$) {
        my $q=shift;
        eval q{use URI};
-       my $url=URI->new(shift);
+       my $url=URI->new(absurl(shift, $q));
        if (! $config{w3mmode}) {
                print $q->redirect($url);
        }
@@ -116,7 +142,7 @@ sub cgi_signin ($$;$) {
                required => 'NONE',
                javascript => 0,
                params => $q,
-               action => $config{cgiurl},
+               action => cgiurl(),
                header => 0,
                template => {type => 'div'},
                stylesheet => 1,
@@ -200,7 +226,7 @@ sub cgi_prefs ($$) {
                required => 'NONE',
                javascript => 0,
                params => $q,
-               action => $config{cgiurl},
+               action => cgiurl(),
                template => {type => 'div'},
                stylesheet => 1,
                fieldsets => [
@@ -236,11 +262,11 @@ sub cgi_prefs ($$) {
        
        if ($form->submitted eq 'Logout') {
                $session->delete();
-               redirect($q, $config{url});
+               redirect($q, baseurl(undef));
                return;
        }
        elsif ($form->submitted eq 'Cancel') {
-               redirect($q, $config{url});
+               redirect($q, baseurl(undef));
                return;
        }
        elsif ($form->submitted eq 'Save Preferences' && $form->validate) {
index 7789c4c2a9d38b7e616d9d3b4df8e4d96fe74ec6..9b70e5df053731866c5ad7a494432e6e0b72b4bc 100644 (file)
@@ -210,6 +210,8 @@ sub needsbuild (@) {
                        markunseen($feed->{sourcepage});
                }
        }
+
+       return $needsbuild;
 }
 
 sub preprocess (@) {
@@ -642,7 +644,14 @@ sub add_page (@) {
        $guid->{md5}=$digest;
 
        # Create the page.
-       my $template=template($feed->{template}, blind_cache => 1);
+       my $template;
+       eval {
+               $template=template($feed->{template}, blind_cache => 1);
+       };
+       if ($@) {
+               print STDERR gettext("failed to process template:")." $@";
+               return;
+       }
        $template->param(title => $params{title})
                if defined $params{title} && length($params{title});
        $template->param(content => wikiescape(htmlabs($params{content},
index ee105a1709f3fe71e0e44a47782e9596791dbbf9..647a671a518b9b9c4cdafbffc7675da661c8a0b6 100644 (file)
@@ -92,7 +92,7 @@ sub formbuilder_setup (@) {
                # Add the toggle javascript; the attachments interface uses
                # it to toggle visibility.
                require IkiWiki::Plugin::toggle;
-               $form->tmpl_param("javascript" => IkiWiki::Plugin::toggle::include_javascript($params{page}, 1));
+               $form->tmpl_param("javascript" => IkiWiki::Plugin::toggle::include_javascript($params{page}));
                # Start with the attachments interface toggled invisible,
                # but if it was used, keep it open.
                if ($form->submitted ne "Upload Attachment" &&
@@ -146,7 +146,7 @@ sub formbuilder (@) {
                
                # Check that the user is allowed to edit a page with the
                # name of the attachment.
-               IkiWiki::check_canedit($filename, $q, $session, 1);
+               IkiWiki::check_canedit($filename, $q, $session);
                # And that the attachment itself is acceptable.
                check_canattach($session, $filename, $tempfile);
 
@@ -242,7 +242,7 @@ sub attachment_list ($) {
                        push @ret, {
                                "field-select" => '<input type="checkbox" name="attachment_select" value="'.$f.'" />',
                                link => htmllink($page, $page, $f, noimageinline => 1),
-                               size => IkiWiki::Plugin::filecheck::humansize((stat(_))[7]),
+                               size => IkiWiki::Plugin::filecheck::humansize((stat($f))[7]),
                                mtime => displaytime($IkiWiki::pagemtime{$f}),
                                mtime_raw => $IkiWiki::pagemtime{$f},
                        };
index 8db3780e8888ee9c9188881e80ae26b6715436ff..f0b6cb2a2742519a2796bce8a863500f34d0d5f0 100644 (file)
@@ -4,6 +4,7 @@ package IkiWiki::Plugin::blogspam;
 use warnings;
 use strict;
 use IkiWiki 3.00;
+use Encode;
 
 my $defaulturl='http://test.blogspam.net:8888/';
 
@@ -68,6 +69,7 @@ sub checkcontent (@) {
 
        my $url=$defaulturl;
        $url = $config{blogspam_server} if exists $config{blogspam_server};
+
        my $client = RPC::XML::Client->new($url);
 
        my @options = split(",", $config{blogspam_options})
@@ -90,12 +92,12 @@ sub checkcontent (@) {
 
        my %req=(
                ip => $session->remote_addr(),
-               comment => defined $params{diff} ? $params{diff} : $params{content},
-               subject => defined $params{subject} ? $params{subject} : "",
-               name => defined $params{author} ? $params{author} : "",
-               link => exists $params{url} ? $params{url} : "",
+               comment => encode_utf8(defined $params{diff} ? $params{diff} : $params{content}),
+               subject => encode_utf8(defined $params{subject} ? $params{subject} : ""),
+               name => encode_utf8(defined $params{author} ? $params{author} : ""),
+               link => encode_utf8(exists $params{url} ? $params{url} : ""),
                options => join(",", @options),
-               site => $config{url},
+               site => encode_utf8($config{url}),
                version => "ikiwiki ".$IkiWiki::version,
        );
        my $res = $client->send_request('testComment', \%req);
index 562d5d3893fcf5c2c0c6ba0b82e574c362f36891..3bc4ea8dd69b1d67329ec1db81bdd2e4ac9d19cf 100644 (file)
@@ -271,8 +271,9 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $taintedrev=shift;
+       my $maxlines=shift;
        my ($rev) = $taintedrev =~ /^(\d+(\.\d+)*)$/; # untaint
 
        my $prevspec = "before:" . $rev;
@@ -281,8 +282,11 @@ sub rcs_diff ($) {
                "--new", $config{srcdir},
                "-r", $prevspec . ".." . $revspec);
        open (my $out, "@cmdline |");
-
-       my @lines = <$out>;
+       my @lines;
+       while (my $line=<$out>) {
+               last if defined $maxlines && @lines == $maxlines;
+               push @lines, $line;
+       }
        if (wantarray) {
                return @lines;
        }
index bb995d49956e27234e5bb9b621c2caa641b93d40..c7d2b7c01d8943f26e34e43231cc4ee26e0b6847 100644 (file)
@@ -491,6 +491,7 @@ sub needsbuild (@) {
                        }
                }
        }
+       return $needsbuild;
 }
 
 1
index 851f4862eb3a5a39bb0afb387b35dfc60262024d..cdb9262710bd4f86ef4ded3e36833331dcce9d82 100644 (file)
@@ -301,7 +301,7 @@ sub editcomment ($$) {
                required => [qw{editcontent}],
                javascript => 0,
                params => $cgi,
-               action => $config{cgiurl},
+               action => IkiWiki::cgiurl(),
                header => 0,
                table => 0,
                template => { template('editcomment.tmpl') },
@@ -372,10 +372,8 @@ sub editcomment ($$) {
                error(gettext("bad page name"));
        }
 
-       my $baseurl = urlto($page, undef, 1);
-
        $form->title(sprintf(gettext("commenting on %s"),
-                       IkiWiki::pagetitle($page)));
+                       IkiWiki::pagetitle(IkiWiki::basename($page))));
 
        $form->tmpl_param('helponformattinglink',
                htmllink($page, $page, 'ikiwiki/formatting',
@@ -385,8 +383,7 @@ sub editcomment ($$) {
 
        if ($form->submitted eq CANCEL) {
                # bounce back to the page they wanted to comment on, and exit.
-               # CANCEL need not be considered in future
-               IkiWiki::redirect($cgi, urlto($page, undef, 1));
+               IkiWiki::redirect($cgi, urlto($page));
                exit;
        }
 
@@ -552,13 +549,13 @@ sub editcomment ($$) {
                # Jump to the new comment on the page.
                # The trailing question mark tries to avoid broken
                # caches and get the most recent version of the page.
-               IkiWiki::redirect($cgi, urlto($page, undef, 1).
+               IkiWiki::redirect($cgi, urlto($page).
                        "?updated#".page_to_id($location));
 
        }
        else {
-               IkiWiki::showform ($form, \@buttons, $session, $cgi,
-                       forcebaseurl => $baseurl, page => $page);
+               IkiWiki::showform_preview($form, \@buttons, $session, $cgi,
+                       page => $page);
        }
 
        exit;
@@ -656,6 +653,7 @@ sub commentmoderation ($$) {
        $template->param(
                sid => $session->id,
                comments => \@comments,
+               cgiurl => IkiWiki::cgiurl(),
        );
        IkiWiki::printheader($session);
        my $out=$template->output;
@@ -727,6 +725,10 @@ sub previewcomment ($$$) {
        my $page=shift;
        my $time=shift;
 
+       # Previewing a comment should implicitly enable comment posting mode.
+       my $oldpostcomment=$postcomment;
+       $postcomment=1;
+
        my $preview = IkiWiki::htmlize($location, $page, '_comment',
                        IkiWiki::linkify($location, $page,
                        IkiWiki::preprocess($location, $page,
@@ -745,6 +747,8 @@ sub previewcomment ($$$) {
 
        $template->param(have_actions => 0);
 
+       $postcomment=$oldpostcomment;
+
        return $template->output;
 }
 
@@ -804,14 +808,14 @@ sub pagetemplate (@) {
        if ($shown) {
                if ($template->query(name => 'commentsurl')) {
                        $template->param(commentsurl =>
-                               urlto($page, undef, 1).'#comments');
+                               urlto($page).'#comments');
                }
 
                if ($template->query(name => 'atomcommentsurl') && $config{usedirs}) {
                        # This will 404 until there are some comments, but I
                        # think that's probably OK...
                        $template->param(atomcommentsurl =>
-                               urlto($page, undef, 1).'comments.atom');
+                               urlto($page).'comments.atom');
                }
 
                if ($template->query(name => 'commentslink')) {
@@ -941,14 +945,16 @@ sub match_comment ($$;@) {
        my $page = shift;
        my $glob = shift;
 
-       # To see if it's a comment, check the source file type.
-       # Deal with comments that were just deleted.
-       my $source=exists $IkiWiki::pagesources{$page} ?
-               $IkiWiki::pagesources{$page} :
-               $IkiWiki::delpagesources{$page};
-       my $type=defined $source ? IkiWiki::pagetype($source) : undef;
-       if (! defined $type || $type ne "_comment") {
-               return IkiWiki::FailReason->new("$page is not a comment");
+       if (! $postcomment) {
+               # To see if it's a comment, check the source file type.
+               # Deal with comments that were just deleted.
+               my $source=exists $IkiWiki::pagesources{$page} ?
+                       $IkiWiki::pagesources{$page} :
+                       $IkiWiki::delpagesources{$page};
+               my $type=defined $source ? IkiWiki::pagetype($source) : undef;
+               if (! defined $type || $type ne "_comment") {
+                       return IkiWiki::FailReason->new("$page is not a comment");
+               }
        }
 
        return match_glob($page, "$glob/*", internal => 1, @_);
index 4a88171685b8d94cfaced062a9547ea8c3e6d401..0f6ea0b1f3798650219f7a08a66fa77f85151401 100644 (file)
@@ -5,10 +5,9 @@ use warnings;
 use strict;
 use IkiWiki 3.00;
 
-my %savedtext;
-
 sub import {
        hook(type => "getsetup", id => "cutpaste", call => \&getsetup);
+       hook(type => "needsbuild", id => "cutpaste", call => \&needsbuild);
        hook(type => "preprocess", id => "cut", call => \&preprocess_cut, scan => 1);
        hook(type => "preprocess", id => "copy", call => \&preprocess_copy, scan => 1);
        hook(type => "preprocess", id => "paste", call => \&preprocess_paste);
@@ -23,6 +22,22 @@ sub getsetup () {
                },
 }
 
+sub needsbuild (@) {
+       my $needsbuild=shift;
+       foreach my $page (keys %pagestate) {
+               if (exists $pagestate{$page}{cutpaste}) {
+                       if (exists $pagesources{$page} &&
+                           grep { $_ eq $pagesources{$page} } @$needsbuild) {
+                               # remove state, will be re-added if
+                               # the cut/copy directive is still present
+                               # on rebuild.
+                               delete $pagestate{$page}{cutpaste};
+                       }
+               }
+       }
+       return $needsbuild;
+}
+
 sub preprocess_cut (@) {
        my %params=@_;
 
@@ -32,8 +47,7 @@ sub preprocess_cut (@) {
                }
        }
 
-       $savedtext{$params{page}} = {} if not exists $savedtext{$params{"page"}};
-       $savedtext{$params{page}}->{$params{id}} = $params{text};
+       $pagestate{$params{page}}{cutpaste}{$params{id}} = $params{text};
 
        return "" if defined wantarray;
 }
@@ -47,8 +61,7 @@ sub preprocess_copy (@) {
                }
        }
 
-       $savedtext{$params{page}} = {} if not exists $savedtext{$params{"page"}};
-       $savedtext{$params{page}}->{$params{id}} = $params{text};
+       $pagestate{$params{page}}{cutpaste}{$params{id}} = $params{text};
 
        return IkiWiki::preprocess($params{page}, $params{destpage}, $params{text})
                if defined wantarray;
@@ -63,15 +76,15 @@ sub preprocess_paste (@) {
                }
        }
 
-       if (! exists $savedtext{$params{page}}) {
+       if (! exists $pagestate{$params{page}}{cutpaste}) {
                error gettext('no text was copied in this page');
        }
-       if (! exists $savedtext{$params{page}}->{$params{id}}) {
+       if (! exists $pagestate{$params{page}}{cutpaste}{$params{id}}) {
                error sprintf(gettext('no text was copied in this page with id %s'), $params{id});
        }
 
        return IkiWiki::preprocess($params{page}, $params{destpage},
-               $savedtext{$params{page}}->{$params{id}});
+               $pagestate{$params{page}}{cutpaste}{$params{id}});
 }
 
 1;
index 4972efb5838724bf58bf722b96b591b34c9b6a28..71566d212ba71ea3b8c2296ffeb46c0101bea92d 100644 (file)
@@ -436,8 +436,9 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $rev=IkiWiki::possibly_foolish_untaint(int(shift));
+       my $maxlines=shift;
 
        local $CWD = $config{srcdir};
 
index 0f63b8807902fbd0d3f2478b1a2c66cbf6066e24..cd4fcd0fff438b250e7dd059d0e8eaa05be95bcf 100644 (file)
@@ -373,11 +373,13 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $rev=shift;
+       my $maxlines=shift;
        my @lines;
        foreach my $line (silentsystem("darcs", "diff", "--match", "hash ".$rev)) {
                if (@lines || $line=~/^diff/) {
+                       last if defined $maxlines && @lines == $maxlines;
                        push @lines, $line."\n";
                }
        }
index 1a04a72b5568f2980d8a7e00d0eaaa06a62e0e0d..f6cebd4cd466eba086aa232bf54381607bc7add7 100644 (file)
@@ -75,7 +75,7 @@ sub cgi_editpage ($$) {
                required => [qw{editcontent}],
                javascript => 0,
                params => $q,
-               action => $config{cgiurl},
+               action => IkiWiki::cgiurl(),
                header => 0,
                table => 0,
                template => { template("editpage.tmpl") },
@@ -98,7 +98,7 @@ sub cgi_editpage ($$) {
                error(gettext("bad page name"));
        }
 
-       my $baseurl = urlto($page, undef, 1);
+       my $baseurl = urlto($page);
 
        my $from;
        if (defined $form->field('from')) {
@@ -156,13 +156,13 @@ sub cgi_editpage ($$) {
        my $previewing=0;
        if ($form->submitted eq "Cancel") {
                if ($form->field("do") eq "create" && defined $from) {
-                       redirect($q, urlto($from, undef, 1));
+                       redirect($q, urlto($from));
                }
                elsif ($form->field("do") eq "create") {
-                       redirect($q, $config{url});
+                       redirect($q, baseurl(undef));
                }
                else {
-                       redirect($q, urlto($page, undef, 1));
+                       redirect($q, $baseurl);
                }
                exit;
        }
@@ -262,7 +262,7 @@ sub cgi_editpage ($$) {
                                        @page_locs=$page;
                                }
                                else {
-                                       redirect($q, urlto($page, undef, 1));
+                                       redirect($q, $baseurl);
                                        exit;
                                }
                        }
@@ -291,7 +291,7 @@ sub cgi_editpage ($$) {
                                value => $best_loc);
                        $form->field(name => "type", type => 'select',
                                options => \@page_types);
-                       $form->title(sprintf(gettext("creating %s"), pagetitle($page)));
+                       $form->title(sprintf(gettext("creating %s"), pagetitle(basename($page))));
                        
                }
                elsif ($form->field("do") eq "edit") {
@@ -309,11 +309,10 @@ sub cgi_editpage ($$) {
                        $form->tmpl_param("page_select", 0);
                        $form->field(name => "page", type => 'hidden');
                        $form->field(name => "type", type => 'hidden');
-                       $form->title(sprintf(gettext("editing %s"), pagetitle($page)));
+                       $form->title(sprintf(gettext("editing %s"), pagetitle(basename($page))));
                }
                
-               showform($form, \@buttons, $session, $q,
-                       forcebaseurl => $baseurl, page => $page);
+               showform_preview($form, \@buttons, $session, $q, page => $page);
        }
        else {
                # save page
@@ -330,8 +329,8 @@ sub cgi_editpage ($$) {
                        $form->field(name => "page", type => 'hidden');
                        $form->field(name => "type", type => 'hidden');
                        $form->title(sprintf(gettext("editing %s"), $page));
-                       showform($form, \@buttons, $session, $q,
-                               forcebaseurl => $baseurl, page => $page);
+                       showform_preview($form, \@buttons, $session, $q,
+                               page => $page);
                        exit;
                }
                elsif ($form->field("do") eq "create" && $exists) {
@@ -345,8 +344,8 @@ sub cgi_editpage ($$) {
                                value => readfile("$config{srcdir}/$file").
                                         "\n\n\n".$form->field("editcontent"),
                                force => 1);
-                       showform($form, \@buttons, $session, $q,
-                               forcebaseurl => $baseurl, page => $page);
+                       showform_preview($form, \@buttons, $session, $q,
+                               page => $page);
                        exit;
                }
                        
@@ -386,8 +385,8 @@ sub cgi_editpage ($$) {
                        $form->field(name => "page", type => 'hidden');
                        $form->field(name => "type", type => 'hidden');
                        $form->title(sprintf(gettext("editing %s"), $page));
-                       showform($form, \@buttons, $session, $q,
-                               forcebaseurl => $baseurl, page => $page);
+                       showform_preview($form, \@buttons, $session, $q,
+                               page => $page);
                        exit;
                }
                
@@ -428,13 +427,13 @@ sub cgi_editpage ($$) {
                        $form->field(name => "page", type => 'hidden');
                        $form->field(name => "type", type => 'hidden');
                        $form->title(sprintf(gettext("editing %s"), $page));
-                       showform($form, \@buttons, $session, $q,
-                               forcebaseurl => $baseurl, page => $page);
+                       showform_preview($form, \@buttons, $session, $q,
+                               page => $page);
                }
                else {
                        # The trailing question mark tries to avoid broken
                        # caches and get the most recent version of the page.
-                       redirect($q, urlto($page, undef, 1)."?updated");
+                       redirect($q, $baseurl."?updated");
                }
        }
 
index 226f83bb4bdfc6dfb11dd326fd6db9d02aae8eae..061242fd82c1f1a76251dac12f8017821688a2a1 100644 (file)
@@ -41,6 +41,8 @@ sub needsbuild (@) {
                        }
                }
        }
+
+       return $needsbuild;
 }
 
 sub preprocess (@) {
@@ -105,9 +107,11 @@ sub formbuilder (@) {
                                                my $template=$pagestate{$registering_page}{edittemplate}{$pagespec};
                                                $form->field(name => "editcontent",
                                                         value =>  filltemplate($template, $page));
-                                               $form->field(name => "type",
-                                                        value => pagetype($pagesources{$template}))
+                                               my $type=pagetype($pagesources{$template})
                                                                if $pagesources{$template};
+                                               $form->field(name => "type",
+                                                        value => $type)
+                                                               if defined $type;
                                                return;
                                        }
                                }
@@ -130,9 +134,6 @@ sub filltemplate ($$) {
                # up a template that doesn't work.
                return "[[!pagetemplate ".gettext("failed to process template:")." $@]]";
        }
-       if (! defined $template) {
-               return;
-       }
 
        $template->param(name => $page);
 
index ec91c79db2149a1b58a63f34aedc4b83b7a76a4a..a4cc1dd3ce32bade13d9477efcba68fdc4a50e1a 100644 (file)
@@ -28,7 +28,9 @@ sub import {
 
        $plugins{$plugin}={in => $plugin_read, out => $plugin_write, pid => $pid,
                accum => ""};
+
        $RPC::XML::ENCODING="utf-8";
+       $RPC::XML::FORCE_STRING_ENCODING="true";
 
        rpc_call($plugins{$plugin}, "import");
 }
index d00b6dfd3e0445fe243502929cfa92589e15a77c..4f4e67489a41c51ecae344119362f0ea611d481a 100644 (file)
@@ -132,22 +132,36 @@ sub match_mimetype ($$;@) {
                return IkiWiki::ErrorReason->new("file does not exist");
        }
 
-       # Use ::magic to get the mime type, the idea is to only trust
-       # data obtained by examining the actual file contents.
+       # Get the mime type.
+       #
+       # First, try File::Mimeinfo. This is fast, but doesn't recognise
+       # all files.
        eval q{use File::MimeInfo::Magic};
-       if ($@) {
-               return IkiWiki::ErrorReason->new("failed to load File::MimeInfo::Magic ($@); cannot check MIME type");
+       my $mimeinfo_ok=! $@;
+       my $mimetype;
+       if ($mimeinfo_ok) {
+               my $mimetype=File::MimeInfo::Magic::magic($file);
        }
-       my $mimetype=File::MimeInfo::Magic::magic($file);
+
+       # Fall back to using file, which has a more complete
+       # magic database.
        if (! defined $mimetype) {
-               $mimetype=File::MimeInfo::Magic::default($file);
+               open(my $file_h, "-|", "file", "-bi", $file);
+               $mimetype=<$file_h>;
+               chomp $mimetype;
+               close $file_h;
+       }
+       if (! defined $mimetype || $mimetype !~s /;.*//) {
+               # Fall back to default value.
+               $mimetype=File::MimeInfo::Magic::default($file)
+                       if $mimeinfo_ok;
                if (! defined $mimetype) {
                        $mimetype="unknown";
                }
        }
 
        my $regexp=IkiWiki::glob2re($wanted);
-       if ($mimetype!~/^$regexp$/i) {
+       if ($mimetype!~$regexp) {
                return IkiWiki::FailReason->new("file MIME type is $mimetype, not $wanted");
        }
        else {
diff --git a/IkiWiki/Plugin/flattr.pm b/IkiWiki/Plugin/flattr.pm
new file mode 100644 (file)
index 0000000..3aee1eb
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::flattr;
+
+use warnings;
+use strict;
+use IkiWiki 3.00;
+
+sub import {
+       hook(type => "getsetup", id => "flattr", call => \&getsetup);
+       hook(type => "preprocess", id => "flattr", call => \&preprocess);
+       hook(type => "format", id => "flattr", call => \&format);
+}
+
+sub getsetup () {
+       return
+               plugin => {
+                       safe => 1,
+                       rebuild => undef,
+               },
+               flattr_userid => {
+                       type => "string",
+                       example => 'joeyh',
+                       description => "userid or user name to use by default for Flattr buttons",
+                       advanced => 0,
+                       safe => 1,
+                       rebuild => undef,
+               },
+}
+
+my %flattr_pages;
+
+sub preprocess (@) {
+       my %params=@_;
+
+       $flattr_pages{$params{destpage}}=1;
+
+       my $url=$params{url};
+       if (! defined $url) {
+               $url=urlto($params{page}, "", 1);
+       }
+
+       my @fields;
+       foreach my $field (qw{language uid button hidden category tags}) {
+               if (exists $params{$field}) {
+                       push @fields, "$field:$params{$field}";
+               }
+       }
+       
+       return '<a class="FlattrButton" href="'.$url.'"'.
+                       (exists $params{title} ? ' title="'.$params{title}.'"' : '').
+               ' rev="flattr;'.join(';', @fields).';"'.
+               '>'.
+               (exists $params{description} ? $params{description} : '').
+               '</a>';
+}
+
+sub format (@) {
+       my %params=@_;
+
+       # Add flattr's javascript to pages with flattr buttons.
+       if ($flattr_pages{$params{page}}) {
+               if (! ($params{content}=~s!^(<body[^>]*>)!$1.flattrjs()!em)) {
+                       # no <body> tag, probably in preview mode
+                       $params{content}=flattrjs().$params{content};
+               }
+       }
+       return $params{content};
+}
+
+my $js_cached;
+sub flattrjs {
+       return $js_cached if defined $js_cached;
+
+       my $js_url='https://api.flattr.com/js/0.5.0/load.js?mode=auto';
+       if (defined $config{flattr_userid}) {
+               my $userid=$config{flattr_userid};
+               $userid=~s/[^-A-Za-z0-9_]//g; # sanitize for inclusion in javascript
+               $js_url.="&uid=$userid";
+       }
+
+       # This is Flattr's standard javascript snippet to include their
+       # external javascript file, asynchronously.
+       return $js_cached=<<"EOF";
+<script type="text/javascript">
+<!--//--><![CDATA[//><!--
+(function() {
+       var s = document.createElement('script'), t = document.getElementsByTagName('script')[0];
+       s.type = 'text/javascript';
+       s.async = true;
+       s.src = '$js_url';
+       t.parentNode.insertBefore(s, t);
+})();//--><!]]>
+</script>
+EOF
+}
+
+1
index d54e7113198093a2a939315077f7f99d34c529a8..b596bc0a10343b91cf7287f5b5fa06a81084b055 100644 (file)
@@ -29,22 +29,24 @@ sub preprocess (@) {
        if (! defined $format || ! defined $text) {
                error(gettext("must specify format and text"));
        }
+               
+       # Other plugins can register htmlizeformat hooks to add support
+       # for page types not suitable for htmlize, or that need special
+       # processing when included via format. Try them until one succeeds.
+       my $ret;
+       IkiWiki::run_hooks(htmlizeformat => sub {
+               $ret=shift->($format, $text)
+                       unless defined $ret;
+       });
+
+       if (defined $ret) {
+               return $ret;
+       }
        elsif (exists $IkiWiki::hooks{htmlize}{$format}) {
                return IkiWiki::htmlize($params{page}, $params{destpage},
                                        $format, $text);
        }
        else {
-               # Other plugins can register htmlizefallback
-               # hooks to add support for page types
-               # not suitable for htmlize. Try them until
-               # one succeeds.
-               my $ret;
-               IkiWiki::run_hooks(htmlizefallback => sub {
-                       $ret=shift->($format, $text)
-                               unless defined $ret;
-               });
-               return $ret if defined $ret;
-
                error(sprintf(gettext("unsupported page format %s"), $format));
        }
 }
index 1501460ad3445d3613bcfec7a7d1552c008da2f9..b5b25cf7ad68329cd597898e65d61d5fc6c0f4bf 100644 (file)
@@ -10,7 +10,7 @@ use open qw{:utf8 :std};
 
 my $sha1_pattern     = qr/[0-9a-fA-F]{40}/; # pattern to validate Git sha1sums
 my $dummy_commit_msg = 'dummy commit';      # message to skip in recent changes
-my $no_chdir=0;
+my $git_dir=undef;
 
 sub import {
        hook(type => "checkconfig", id => "git", call => \&checkconfig);
@@ -28,6 +28,8 @@ sub import {
        hook(type => "rcs", id => "rcs_getctime", call => \&rcs_getctime);
        hook(type => "rcs", id => "rcs_getmtime", call => \&rcs_getmtime);
        hook(type => "rcs", id => "rcs_receive", call => \&rcs_receive);
+       hook(type => "rcs", id => "rcs_preprevert", call => \&rcs_preprevert);
+       hook(type => "rcs", id => "rcs_revert", call => \&rcs_revert);
 }
 
 sub checkconfig () {
@@ -47,7 +49,9 @@ sub checkconfig () {
        }
 
        if (defined $config{git_test_receive_wrapper} &&
-           length $config{git_test_receive_wrapper}) {
+           length $config{git_test_receive_wrapper} &&
+           defined $config{untrusted_committers} &&
+           @{$config{untrusted_committers}}) {
                push @{$config{wrappers}}, {
                        test_receive => 1,
                        wrapper => $config{git_test_receive_wrapper},
@@ -110,7 +114,7 @@ sub getsetup () {
                },
                historyurl => {
                        type => "string",
-                       example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=history;f=[[file]]",
+                       example => "http://git.example.com/gitweb.cgi?p=wiki.git;a=history;f=[[file]];hb=HEAD",
                        description => "gitweb url to show file history ([[file]] substituted)",
                        safe => 1,
                        rebuild => 1,
@@ -149,10 +153,11 @@ sub genwrapper {
 }
 
 sub safe_git (&@) {
-       # Start a child process safely without resorting /bin/sh.
-       # Return command output or success state (in scalar context).
+       # Start a child process safely without resorting to /bin/sh.
+       # Returns command output (in list content) or success state
+       # (in scalar context), or runs the specified data handler.
 
-       my ($error_handler, @cmdline) = @_;
+       my ($error_handler, $data_handler, @cmdline) = @_;
 
        my $pid = open my $OUT, "-|";
 
@@ -161,9 +166,13 @@ sub safe_git (&@) {
        if (!$pid) {
                # In child.
                # Git commands want to be in wc.
-               if (! $no_chdir) {
+               if (! defined $git_dir) {
                        chdir $config{srcdir}
-                           or error("Cannot chdir to $config{srcdir}: $!");
+                           or error("cannot chdir to $config{srcdir}: $!");
+               }
+               else {
+                       chdir $git_dir
+                           or error("cannot chdir to $git_dir: $!");
                }
                exec @cmdline or error("Cannot exec '@cmdline': $!");
        }
@@ -180,7 +189,12 @@ sub safe_git (&@) {
 
                chomp;
 
-               push @lines, $_;
+               if (! defined $data_handler) {
+                       push @lines, $_;
+               }
+               else {
+                       last unless $data_handler->($_);
+               }
        }
 
        close $OUT;
@@ -190,9 +204,9 @@ sub safe_git (&@) {
        return wantarray ? @lines : ($? == 0);
 }
 # Convenient wrappers.
-sub run_or_die ($@) { safe_git(\&error, @_) }
-sub run_or_cry ($@) { safe_git(sub { warn @_ },  @_) }
-sub run_or_non ($@) { safe_git(undef,            @_) }
+sub run_or_die ($@) { safe_git(\&error, undef, @_) }
+sub run_or_cry ($@) { safe_git(sub { warn @_ }, undef, @_) }
+sub run_or_non ($@) { safe_git(undef, undef, @_) }
 
 
 sub merge_past ($$$) {
@@ -461,7 +475,7 @@ sub rcs_update () {
        # Update working directory.
 
        if (length $config{gitorigin_branch}) {
-               run_or_cry('git', 'pull', $config{gitorigin_branch});
+               run_or_cry('git', 'pull', '--prune', $config{gitorigin_branch});
        }
 }
 
@@ -489,16 +503,16 @@ sub rcs_commit (@) {
                return $conflict if defined $conflict;
        }
 
-       rcs_add($params{file});
-       return rcs_commit_staged(
-               message => $params{message},
-               session => $params{session},
-       );
+       return rcs_commit_helper(@_);
 }
 
 sub rcs_commit_staged (@) {
        # Commits all staged changes. Changes can be staged using rcs_add,
        # rcs_remove, and rcs_rename.
+       return rcs_commit_helper(@_);
+}
+
+sub rcs_commit_helper (@) {
        my %params=@_;
        
        my %env=%ENV;
@@ -540,10 +554,12 @@ sub rcs_commit_staged (@) {
                        $params{message}.=".";
                }
        }
-       push @opts, '-q';
-       # git commit returns non-zero if file has not been really changed.
-       # so we should ignore its exit status (hence run_or_non).
-       if (run_or_non('git', 'commit', @opts, '-m', $params{message})) {
+       if (exists $params{file}) {
+               push @opts, '--', $params{file};
+       }
+       # git commit returns non-zero if nothing really changed.
+       # So we should ignore its exit status (hence run_or_non).
+       if (run_or_non('git', 'commit', '-m', $params{message}, '-q', @opts)) {
                if (length $config{gitorigin_branch}) {
                        run_or_cry('git', 'push', $config{gitorigin_branch});
                }
@@ -655,15 +671,19 @@ sub rcs_recentchanges ($) {
        return @rets;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $rev=shift;
+       my $maxlines=shift;
        my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
        my @lines;
-       foreach my $line (run_or_non("git", "show", $sha1)) {
-               if (@lines || $line=~/^diff --git/) {
-                       push @lines, $line."\n";
-               }
-       }
+       my $addlines=sub {
+               my $line=shift;
+               return if defined $maxlines && @lines == $maxlines;
+               push @lines, $line."\n"
+                       if (@lines || $line=~/^diff --git/);
+               return 1;
+       };
+       safe_git(undef, $addlines, "git", "show", $sha1);
        if (wantarray) {
                return @lines;
        }
@@ -682,7 +702,7 @@ sub findtimes ($$) {
        if (! keys %time_cache) {
                my $date;
                foreach my $line (run_or_die('git', 'log',
-                               '--pretty=format:%ct',
+                               '--pretty=format:%at',
                                '--name-only', '--relative')) {
                        if (! defined $date && $line =~ /^(\d+)$/) {
                                $date=$line;
@@ -718,10 +738,15 @@ sub rcs_getmtime ($) {
        return findtimes($file, 0);
 }
 
-sub rcs_receive () {
+{
+my $ret;
+sub git_find_root {
        # The wiki may not be the only thing in the git repo.
        # Determine if it is in a subdirectory by examining the srcdir,
        # and its parents, looking for the .git directory.
+
+       return @$ret if defined $ret;
+       
        my $subdir="";
        my $dir=$config{srcdir};
        while (! -d "$dir/.git") {
@@ -732,83 +757,141 @@ sub rcs_receive () {
                }
        }
 
+       $ret=[$subdir, $dir];
+       return @$ret;
+}
+
+}
+
+sub git_parse_changes {
+       my @changes = @_;
+
+       my ($subdir, $rootdir) = git_find_root();
+       my @rets;
+       foreach my $ci (@changes) {
+               foreach my $detail (@{ $ci->{'details'} }) {
+                       my $file = $detail->{'file'};
+
+                       # check that all changed files are in the subdir
+                       if (length $subdir &&
+                           ! ($file =~ s/^\Q$subdir\E//)) {
+                               error sprintf(gettext("you are not allowed to change %s"), $file);
+                       }
+
+                       my ($action, $mode, $path);
+                       if ($detail->{'status'} =~ /^[M]+\d*$/) {
+                               $action="change";
+                               $mode=$detail->{'mode_to'};
+                       }
+                       elsif ($detail->{'status'} =~ /^[AM]+\d*$/) {
+                               $action="add";
+                               $mode=$detail->{'mode_to'};
+                       }
+                       elsif ($detail->{'status'} =~ /^[DAM]+\d*/) {
+                               $action="remove";
+                               $mode=$detail->{'mode_from'};
+                       }
+                       else {
+                               error "unknown status ".$detail->{'status'};
+                       }
+
+                       # test that the file mode is ok
+                       if ($mode !~ /^100[64][64][64]$/) {
+                               error sprintf(gettext("you cannot act on a file with mode %s"), $mode);
+                       }
+                       if ($action eq "change") {
+                               if ($detail->{'mode_from'} ne $detail->{'mode_to'}) {
+                                       error gettext("you are not allowed to change file modes");
+                               }
+                       }
+
+                       # extract attachment to temp file
+                       if (($action eq 'add' || $action eq 'change') &&
+                           ! pagetype($file)) {
+                               eval q{use File::Temp};
+                               die $@ if $@;
+                               my $fh;
+                               ($fh, $path)=File::Temp::tempfile(undef, UNLINK => 1);
+                               my $cmd = "cd $git_dir && ".
+                                         "git show $detail->{sha1_to} > '$path'";
+                               if (system($cmd) != 0) {
+                                       error("failed writing temp file '$path'.");
+                               }
+                       }
+
+                       push @rets, {
+                               file => $file,
+                               action => $action,
+                               path => $path,
+                       };
+               }
+       }
+
+       return @rets;
+}
+
+sub rcs_receive () {
        my @rets;
        while (<>) {
                chomp;
                my ($oldrev, $newrev, $refname) = split(' ', $_, 3);
-               
+
                # only allow changes to gitmaster_branch
                if ($refname !~ /^refs\/heads\/\Q$config{gitmaster_branch}\E$/) {
                        error sprintf(gettext("you are not allowed to change %s"), $refname);
                }
-               
+
                # Avoid chdir when running git here, because the changes
                # are in the master git repo, not the srcdir repo.
-               # The pre-recieve hook already puts us in the right place.
-               $no_chdir=1;
-               my @changes=git_commit_info($oldrev."..".$newrev);
-               $no_chdir=0;
-
-               foreach my $ci (@changes) {
-                       foreach my $detail (@{ $ci->{'details'} }) {
-                               my $file = $detail->{'file'};
-
-                               # check that all changed files are in the
-                               # subdir
-                               if (length $subdir &&
-                                   ! ($file =~ s/^\Q$subdir\E//)) {
-                                       error sprintf(gettext("you are not allowed to change %s"), $file);
-                               }
+               # (Also, if a subdir is involved, we don't want to chdir to
+               # it and only see changes in it.)
+               # The pre-receive hook already puts us in the right place.
+               $git_dir=".";
+               push @rets, git_parse_changes(git_commit_info($oldrev."..".$newrev));
+               $git_dir=undef;
+       }
 
-                               my ($action, $mode, $path);
-                               if ($detail->{'status'} =~ /^[M]+\d*$/) {
-                                       $action="change";
-                                       $mode=$detail->{'mode_to'};
-                               }
-                               elsif ($detail->{'status'} =~ /^[AM]+\d*$/) {
-                                       $action="add";
-                                       $mode=$detail->{'mode_to'};
-                               }
-                               elsif ($detail->{'status'} =~ /^[DAM]+\d*/) {
-                                       $action="remove";
-                                       $mode=$detail->{'mode_from'};
-                               }
-                               else {
-                                       error "unknown status ".$detail->{'status'};
-                               }
-                               
-                               # test that the file mode is ok
-                               if ($mode !~ /^100[64][64][64]$/) {
-                                       error sprintf(gettext("you cannot act on a file with mode %s"), $mode);
-                               }
-                               if ($action eq "change") {
-                                       if ($detail->{'mode_from'} ne $detail->{'mode_to'}) {
-                                               error gettext("you are not allowed to change file modes");
-                                       }
-                               }
-                               
-                               # extract attachment to temp file
-                               if (($action eq 'add' || $action eq 'change') &&
-                                    ! pagetype($file)) {
-                                       eval q{use File::Temp};
-                                       die $@ if $@;
-                                       my $fh;
-                                       ($fh, $path)=File::Temp::tempfile("XXXXXXXXXX", UNLINK => 1);
-                                       if (system("git show ".$detail->{sha1_to}." > '$path'") != 0) {
-                                               error("failed writing temp file");
-                                       }
-                               }
+       return reverse @rets;
+}
 
-                               push @rets, {
-                                       file => $file,
-                                       action => $action,
-                                       path => $path,
-                               };
-                       }
-               }
+sub rcs_preprevert ($) {
+       my $rev=shift;
+       my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
+
+       # Examine changes from root of git repo, not from any subdir,
+       # in order to see all changes.
+       my ($subdir, $rootdir) = git_find_root();
+       $git_dir=$rootdir;
+
+       my @commits=git_commit_info($sha1, 1);
+       if (! @commits) {
+               error "unknown commit"; # just in case
        }
 
-       return reverse @rets;
+       # git revert will fail on merge commits. Add a nice message.
+       if (exists $commits[0]->{parents} &&
+           @{$commits[0]->{parents}} > 1) {
+               error gettext("you are not allowed to revert a merge");
+       }
+
+       my @ret=git_parse_changes(@commits);
+
+       $git_dir=undef;
+       return @ret;
+}
+
+sub rcs_revert ($) {
+       # Try to revert the given rev; returns undef on _success_.
+       my $rev = shift;
+       my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
+
+       if (run_or_non('git', 'revert', '--no-commit', $sha1)) {
+               return undef;
+       }
+       else {
+               run_or_die('git', 'reset', '--hard');
+               return sprintf(gettext("Failed to revert commit %s"), $sha1);
+       }
 }
 
 1
index 42d2425ca2a0dbe85b172fee06eb63ec50b07d00..0eb83fc208de611d05a016ff8fc63c2c6913f1c8 100644 (file)
@@ -52,7 +52,7 @@ sub cgi_goto ($;$) {
                IkiWiki::redirect($q, $pagestate{$page}{meta}{permalink});
        }
 
-       if (! length $link) {
+       if (! defined $link || ! length $link) {
                IkiWiki::cgi_custom_failure(
                        $q,
                        "404 Not Found",
@@ -64,7 +64,7 @@ sub cgi_goto ($;$) {
                )
        }
        else {
-               IkiWiki::redirect($q, urlto($link, undef, 1));
+               IkiWiki::redirect($q, urlto($link));
        }
 
        exit;
index dfd66a03e2250723132caa75c2f9d5da2e2c4fc2..4ed8b89f165847832762408c05b0abedc21aaf6c 100644 (file)
@@ -37,10 +37,10 @@ sub render_graph (\%) {
        $src .= "}\n";
 
        # Use the sha1 of the graphviz code as part of its filename.
-       eval q{use Digest::SHA1};
+       eval q{use Digest::SHA};
        error($@) if $@;
        my $dest=$params{page}."/graph-".
-               IkiWiki::possibly_foolish_untaint(Digest::SHA1::sha1_hex($src)).
+               IkiWiki::possibly_foolish_untaint(Digest::SHA::sha1_hex($src)).
                ".png";
        will_render($params{page}, $dest);
 
index e517ac5c06aa425771dcac7256a8e3127da8d3bb..65e372db1336dbdedd6f1c5e256d4ef3b953aa2a 100644 (file)
@@ -1,21 +1,23 @@
 #!/usr/bin/perl
 package IkiWiki::Plugin::highlight;
 
+# This has been tested with highlight 2.16 and highlight 3.2+svn19.
+# In particular version 3.2 won't work. It detects the different
+# versions by the presence of the the highlight::DataDir class.
+
 use warnings;
 use strict;
 use IkiWiki 3.00;
 use Encode;
 
-# locations of highlight's files
-my $filetypes="/etc/highlight/filetypes.conf";
-my $langdefdir="/usr/share/highlight/langDefs";
+my $data_dir;
 
 sub import {
        hook(type => "getsetup", id => "highlight",  call => \&getsetup);
        hook(type => "checkconfig", id => "highlight", call => \&checkconfig);
        # this hook is used by the format plugin
-       hook(type => "htmlizefallback", id => "highlight", call =>
-               \&htmlizefallback);
+       hook(type => "htmlizeformat", id => "highlight", 
+               call => \&htmlizeformat, last => 1);
 }
 
 sub getsetup () {
@@ -32,10 +34,48 @@ sub getsetup () {
                        safe => 1,
                        rebuild => 1,
                },
+               filetypes_conf => {
+                       type => "string",
+                       example => "/etc/highlight/filetypes.conf",
+                       description => "location of highlight's filetypes.conf",
+                       safe => 0,
+                       rebuild => undef,
+               },
+               langdefdir => {
+                       type => "string",
+                       example => "/usr/share/highlight/langDefs",
+                       description => "location of highlight's langDefs directory",
+                       safe => 0,
+                       rebuild => undef,
+               },
 }
 
 sub checkconfig () {
-       if (exists $config{tohighlight}) {
+
+       eval q{use highlight};
+       if ($@) {
+               print STDERR "Failed to load highlight. Configuring anyway.\n";
+       };
+
+       if (highlight::DataDir->can('new')){
+               $data_dir=new highlight::DataDir();
+               $data_dir->searchDataDir("");
+       } else {
+               $data_dir=undef;
+       }
+
+       if (! exists $config{filetypes_conf}) {
+               $config{filetypes_conf}= 
+                    ($data_dir ? $data_dir->getConfDir() : "/etc/highlight/")
+                         . "filetypes.conf";
+       }
+       if (! exists $config{langdefdir}) {
+               $config{langdefdir}=
+                    ($data_dir ? $data_dir->getLangPath("")
+                     : "/usr/share/highlight/langDefs");
+
+       }
+       if (exists $config{tohighlight} && read_filetypes()) {
                foreach my $file (split ' ', $config{tohighlight}) {
                        my @opts = $file=~s/^\.// ?
                                (keepextension => 1) :
@@ -63,7 +103,7 @@ sub checkconfig () {
        }
 }
 
-sub htmlizefallback {
+sub htmlizeformat {
        my $format=lc shift;
        my $langfile=ext2langfile($format);
 
@@ -80,15 +120,35 @@ my %highlighters;
 
 # Parse highlight's config file to get extension => language mappings.
 sub read_filetypes () {
-       open (IN, $filetypes) || error("$filetypes: $!");
-       while (<IN>) {
-               chomp;
-               if (/^\$ext\((.*)\)=(.*)$/) {
-                       $ext2lang{$_}=$1 foreach $1, split ' ', $2;
+       my $f;
+       if (!open($f, $config{filetypes_conf})) {
+               warn($config{filetypes_conf}.": ".$!);
+               return 0;
+       };
+
+       local $/=undef;
+       my $config=<$f>;
+       close $f;
+
+       # highlight >= 3.2 format (bind-style)
+       while ($config=~m/Lang\s*=\s*\"([^"]+)\"[,\s]+Extensions\s*=\s*{([^}]+)}/sg) {
+               my $lang=$1;
+               foreach my $bit (split ',', $2) {
+                       $bit=~s/.*"(.*)".*/$1/s;
+                       $ext2lang{$bit}=$lang;
                }
        }
-       close IN;
-       $filetypes_read=1;
+
+       # highlight < 3.2 format
+       if (! keys %ext2lang) {
+               foreach (split("\n", $config)) {
+                       if (/^\$ext\((.*)\)=(.*)$/) {
+                               $ext2lang{$_}=$1 foreach $1, split ' ', $2;
+                       }
+               }
+       }
+
+       return $filetypes_read=1;
 }
 
 
@@ -97,12 +157,12 @@ sub read_filetypes () {
 sub ext2langfile ($) {
        my $ext=shift;
 
-       my $langfile="$langdefdir/$ext.lang";
+       my $langfile="$config{langdefdir}/$ext.lang";
        return $langfile if exists $highlighters{$langfile};
 
        read_filetypes() unless $filetypes_read;
        if (exists $ext2lang{$ext}) {
-               return "$langdefdir/$ext2lang{$ext}.lang";
+               return "$config{langdefdir}/$ext2lang{$ext}.lang";
        }
        # If a language only has one common extension, it will not
        # be listed in filetypes, so check the langfile.
@@ -127,11 +187,17 @@ sub highlight ($$) {
 
        my $gen;
        if (! exists $highlighters{$langfile}) {
-               $gen = highlightc::CodeGenerator_getInstance($highlightc::XHTML);
+               $gen = highlight::CodeGenerator::getInstance($highlight::XHTML);
                $gen->setFragmentCode(1); # generate html fragment
                $gen->setHTMLEnclosePreTag(1); # include stylish <pre>
-               $gen->initTheme("/dev/null"); # theme is not needed because CSS is not emitted
-               $gen->initLanguage($langfile); # must come after initTheme
+               if ($data_dir){
+                       # new style, requires a real theme, but has no effect
+                       $gen->initTheme($data_dir->getThemePath("seashell.theme"));
+               } else {
+                       # old style, anything works.
+                       $gen->initTheme("/dev/null");
+               }
+               $gen->loadLanguage($langfile); # must come after initTheme
                $gen->setEncoding("utf-8");
                $highlighters{$langfile}=$gen;
        }
index 26f8e494bf537dba9f2b0c967c71fb9f26067b84..da450eea7ef691c8f16ed4e5a20a2603b0491c22 100644 (file)
@@ -43,7 +43,7 @@ sub sanitize (@) {
        my @nodes = $tree->disembowel();
        foreach my $node (@nodes) {
                if (ref $node) {
-                       $ret .= $node->as_XML();
+                       $ret .= $node->as_HTML(undef, '', {});
                        chomp $ret;
                        $node->delete();
                }
index 8475181780db55cfd1b0e0846f277e44fa87e156..a58a27d5221acc50e932057b9fabaffcf38c7b97 100644 (file)
@@ -32,7 +32,7 @@ sub import {
        );
        # data is a special case. Allow a few data:image/ types,
        # but disallow data:text/javascript and everything else.
-       $safe_url_regexp=qr/^(?:(?:$uri_schemes):|data:image\/(?:png|jpeg|gif)|[^:]+(?:$|[\/\?]))/i;
+       $safe_url_regexp=qr/^(?:(?:$uri_schemes):|data:image\/(?:png|jpeg|gif)|[^:]+(?:$|[\/\?#]))|^#/i;
 }
 
 sub getsetup () {
@@ -57,8 +57,8 @@ sub sanitize (@) {
 
        if (exists $config{htmlscrubber_skip} &&
            length $config{htmlscrubber_skip} &&
-           exists $params{destpage} &&
-           pagespec_match($params{destpage}, $config{htmlscrubber_skip})) {
+           exists $params{page} &&
+           pagespec_match($params{page}, $config{htmlscrubber_skip})) {
                return $params{content};
        }
 
index e6d377f8ab96a853f0bfcbc51ab2d09126e6d14e..1108aeb894e658a35eff011975c1c0b50d14a439 100644 (file)
@@ -15,6 +15,7 @@ use IPC::Open2;
 sub import {
        hook(type => "getsetup", id => "tidy", call => \&getsetup);
        hook(type => "sanitize", id => "tidy", call => \&sanitize);
+       hook(type => "checkconfig", id => "tidy", call => \&checkconfig);
 }
 
 sub getsetup () {
@@ -23,6 +24,18 @@ sub getsetup () {
                        safe => 1,
                        rebuild => undef,
                },
+               htmltidy => {
+                       type => "string",
+                       description => "tidy command line",
+                       safe => 0, # path
+                       rebuild => undef,
+               },
+}
+
+sub checkconfig () {
+       if (! defined $config{htmltidy}) {
+               $config{htmltidy}="tidy -quiet -asxhtml -utf8 --show-body-only yes --show-warnings no --tidy-mark no --markup yes";
+       }
 }
 
 sub sanitize (@) {
@@ -31,7 +44,7 @@ sub sanitize (@) {
        my $pid;
        my $sigpipe=0;
        $SIG{PIPE}=sub { $sigpipe=1 };
-       $pid=open2(*IN, *OUT, 'tidy -quiet -asxhtml -utf8 --show-body-only yes --show-warnings no --tidy-mark no --markup yes 2>/dev/null');
+       $pid=open2(*IN, *OUT, "$config{htmltidy} 2>/dev/null");
 
        # open2 doesn't respect "use open ':utf8'"
        binmode (IN, ':utf8');
index 0bdc4a75423a4156f1312d2d20c3872c738d7514..817c2b48719fcaf5cbcdd37d074cf6e301081411 100644 (file)
@@ -86,19 +86,14 @@ sub formbuilder_setup (@) {
        }
 }
 
-sub test_httpauth_pagespec ($) {
-       my $page=shift;
-
-       return (
-       );
-}
-
 sub canedit ($$$) {
        my $page=shift;
        my $cgi=shift;
        my $session=shift;
 
        if (! defined $cgi->remote_user() &&
+           (! defined $session->param("name") ||
+             ! IkiWiki::userinfo_get($session->param("name"), "regdate")) &&
            defined $config{httpauth_pagespec} &&
            length $config{httpauth_pagespec} &&
            defined $config{cgiauthurl} &&
index 2375ead8968b6a9baf64ff8ac825dbde6a75b82d..103f6b2b3510067f10a5eddf86f8e657ba96fe29 100644 (file)
@@ -152,14 +152,11 @@ sub preprocess (@) {
                $imgurl=urlto($imglink, $params{destpage});
        }
        else {
-               $fileurl="$config{url}/$file";
-               $imgurl="$config{url}/$imglink";
+               $fileurl=urlto($file);
+               $imgurl=urlto($imglink);
        }
 
-       if (exists $params{class}) {
-               $params{class}.=" img";
-       }
-       else {
+       if (! exists $params{class}) {
                $params{class}="img";
        }
 
index 715a3d6523cfcee4e57c125425d19cfdab110298..7c5da7343907d9d0f41ed65e2573942e3b6cbb9b 100644 (file)
@@ -104,7 +104,7 @@ sub checkconfig () {
 }
 
 sub format (@) {
-        my %params=@_;
+       my %params=@_;
 
        # Fill in the inline content generated earlier. This is actually an
        # optimisation.
@@ -128,10 +128,10 @@ sub sessioncgi ($$) {
                        $add=1 unless length $add;
                        $add++;
                }
-               $q->param('page', $page.$add);
+               $q->param('page', "/$from/$page$add");
                # now go create the page
                $q->param('do', 'create');
-               # make sure the editpage plugin in loaded
+               # make sure the editpage plugin is loaded
                if (IkiWiki->can("cgi_editpage")) {
                        IkiWiki::cgi_editpage($q, $session);
                }
@@ -160,7 +160,7 @@ sub preprocess_inline (@) {
        my $rss=(($config{rss} || $config{allowrss}) && exists $params{rss}) ? yesno($params{rss}) : $config{rss};
        my $atom=(($config{atom} || $config{allowatom}) && exists $params{atom}) ? yesno($params{atom}) : $config{atom};
        my $quick=exists $params{quick} ? yesno($params{quick}) : 0;
-       my $feeds=! $nested && (exists $params{feeds} ? yesno($params{feeds}) : !$quick && ! $raw);
+       my $feeds=exists $params{feeds} ? yesno($params{feeds}) : !$quick && ! $raw;
        my $emptyfeeds=exists $params{emptyfeeds} ? yesno($params{emptyfeeds}) : 1;
        my $feedonly=yesno($params{feedonly});
        if (! exists $params{show} && ! $archive) {
@@ -269,7 +269,7 @@ sub preprocess_inline (@) {
                        }
                        $params{feedfile}=possibly_foolish_untaint($params{feedfile});
                }
-               $feedbase=targetpage($params{destpage}, "", $params{feedfile});
+               $feedbase=targetpage($params{page}, "", $params{feedfile});
 
                my $feedid=join("\0", $feedbase, map { $_."\0".$params{$_} } sort keys %params);
                if (exists $knownfeeds{$feedid}) {
@@ -300,7 +300,7 @@ sub preprocess_inline (@) {
            IkiWiki->can("cgi_editpage")) {
                # Add a blog post form, with feed buttons.
                my $formtemplate=template_depends("blogpost.tmpl", $params{page}, blind_cache => 1);
-               $formtemplate->param(cgiurl => $config{cgiurl});
+               $formtemplate->param(cgiurl => IkiWiki::cgiurl());
                $formtemplate->param(rootpage => rootpage(%params));
                $formtemplate->param(rssurl => $rssurl) if $feeds && $rss;
                $formtemplate->param(atomurl => $atomurl) if $feeds && $atom;
@@ -336,10 +336,7 @@ sub preprocess_inline (@) {
                                        blind_cache => 1);
                        };
                        if ($@) {
-                               error gettext("failed to process template:")." $@";
-                       }
-                       if (! $template) {
-                               error sprintf(gettext("template %s not found"), $params{template}.".tmpl");
+                               error sprintf(gettext("failed to process template %s"), $params{template}.".tmpl").": $@";
                        }
                }
                my $needcontent=$raw || (!($archive && $quick) && $template->query(name => 'content'));
@@ -509,26 +506,59 @@ sub date_822 ($) {
 }
 
 sub absolute_urls ($$) {
-       # sucky sub because rss sucks
-       my $content=shift;
+       # needed because rss sucks
+       my $html=shift;
        my $baseurl=shift;
 
        my $url=$baseurl;
        $url=~s/[^\/]+$//;
+       my $urltop; # calculated if needed
+
+       my $ret="";
+
+       eval q{use HTML::Parser; use HTML::Tagset};
+       die $@ if $@;
+       my $p = HTML::Parser->new(api_version => 3);
+       $p->handler(default => sub { $ret.=join("", @_) }, "text");
+       $p->handler(start => sub {
+               my ($tagname, $pos, $text) = @_;
+               if (ref $HTML::Tagset::linkElements{$tagname}) {
+                       while (4 <= @$pos) {
+                               # use attribute sets from right to left
+                               # to avoid invalidating the offsets
+                               # when replacing the values
+                               my ($k_offset, $k_len, $v_offset, $v_len) =
+                                       splice(@$pos, -4);
+                               my $attrname = lc(substr($text, $k_offset, $k_len));
+                               next unless grep { $_ eq $attrname } @{$HTML::Tagset::linkElements{$tagname}};
+                               next unless $v_offset; # 0 v_offset means no value
+                               my $v = substr($text, $v_offset, $v_len);
+                               $v =~ s/^([\'\"])(.*)\1$/$2/;
+                               if ($v=~/^#/) {
+                                       $v=$baseurl.$v; # anchor
+                               }
+                               elsif ($v=~/^(?!\w+:)[^\/]/) {
+                                       $v=$url.$v; # relative url
+                               }
+                               elsif ($v=~/^\//) {
+                                       if (! defined $urltop) {
+                                               # what is the non path part of the url?
+                                               my $top_uri = URI->new($url);
+                                               $top_uri->path_query(""); # reset the path
+                                               $urltop = $top_uri->as_string;
+                                       }
+                                       $v=$urltop.$v; # url relative to top of site
+                               }
+                               $v =~ s/\"/&quot;/g; # since we quote with ""
+                               substr($text, $v_offset, $v_len) = qq("$v");
+                       }
+               }
+               $ret.=$text;
+       }, "tagname, tokenpos, text");
+       $p->parse($html);
+       $p->eof;
 
-        # what is the non path part of the url?
-        my $top_uri = URI->new($url);
-        $top_uri->path_query(""); # reset the path
-        my $urltop = $top_uri->as_string;
-
-       $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(#[^"]+)"/$1 href="$baseurl$2"/mig;
-        # relative to another wiki page
-       $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(?!\w+:)([^\/][^"]*)"/$1 href="$url$2"/mig;
-       $content=~s/(<img(?:\s+(?:class|id|width|height)\s*="?\w+"?)*)\s+src=\s*"(?!\w+:)([^\/][^"]*)"/$1 src="$url$2"/mig;
-        # relative to the top of the site
-       $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(?!\w+:)(\/[^"]*)"/$1 href="$urltop$2"/mig;
-       $content=~s/(<img(?:\s+(?:class|id|width|height)\s*="?\w+"?)*)\s+src=\s*"(?!\w+:)(\/[^"]*)"/$1 src="$urltop$2"/mig;
-       return $content;
+       return $ret;
 }
 
 sub genfeed ($$$$$@) {
index 8a67f716026003e8b00135f4de5f1f7da60794a2..835e253886d67e2223bab034643c4823fa8d23bb 100644 (file)
@@ -64,6 +64,8 @@ sub needsbuild (@) {
                        }
                }
        }
+
+       return $needsbuild;
 }
 
 sub preprocess (@) {
index 59dc63b4e994511e2d0c67893fb91f7dc098b36d..d7399eaf0be208730651cf55e9ba01b29979aede 100644 (file)
@@ -229,7 +229,7 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        # TODO
 }
 
index 7d68a9b2dc4a9adc990042d07e12205850c5e3fd..abc8f1b1aa1089f60ba62e93dbcca0062696f4f6 100644 (file)
@@ -37,12 +37,13 @@ sub needsbuild (@) {
                        }
                }
        }
+       return $needsbuild;
 }
 
-sub scrub ($$) {
+sub scrub ($$$) {
        if (IkiWiki::Plugin::htmlscrubber->can("sanitize")) {
                return IkiWiki::Plugin::htmlscrubber::sanitize(
-                       content => shift, destpage => shift);
+                       content => shift, page => shift, destpage => shift);
        }
        else {
                return shift;
@@ -161,7 +162,7 @@ sub preprocess (@) {
        # Metadata handling that happens only during preprocessing pass.
        if ($key eq 'permalink') {
                if (safeurl($value)) {
-                       push @{$metaheaders{$page}}, scrub('<link rel="bookmark" href="'.encode_entities($value).'" />', $destpage);
+                       push @{$metaheaders{$page}}, scrub('<link rel="bookmark" href="'.encode_entities($value).'" />', $page, $destpage);
                }
        }
        elsif ($key eq 'stylesheet') {
@@ -197,8 +198,12 @@ sub preprocess (@) {
                                '" rel="openid2.local_id" />' if $delegate ne 1;
                }
                if (exists $params{"xrds-location"} && safeurl($params{"xrds-location"})) {
-                       push @{$metaheaders{$page}}, '<meta http-equiv="X-XRDS-Location"'.
-                               'content="'.encode_entities($params{"xrds-location"}).'" />';
+                       # force url absolute
+                       eval q{use URI};
+                       error($@) if $@;
+                       my $url=URI->new_abs($params{"xrds-location"}, $config{url});
+                       push @{$metaheaders{$page}}, '<meta http-equiv="X-XRDS-Location" '.
+                               'content="'.encode_entities($url).'" />';
                }
        }
        elsif ($key eq 'redir') {
@@ -235,7 +240,7 @@ sub preprocess (@) {
                my $delay=int(exists $params{delay} ? $params{delay} : 0);
                my $redir="<meta http-equiv=\"refresh\" content=\"$delay; URL=$value\" />";
                if (! $safe) {
-                       $redir=scrub($redir, $destpage);
+                       $redir=scrub($redir, $page, $destpage);
                }
                push @{$metaheaders{$page}}, $redir;
        }
@@ -245,7 +250,7 @@ sub preprocess (@) {
                                join(" ", map {
                                        encode_entities($_)."=\"".encode_entities(decode_entities($params{$_}))."\""
                                } keys %params).
-                               " />\n", $destpage);
+                               " />\n", $page, $destpage);
                }
        }
        elsif ($key eq 'robots') {
@@ -253,12 +258,20 @@ sub preprocess (@) {
                        ' content="'.encode_entities($value).'" />';
        }
        elsif ($key eq 'description') {
-               push @{$metaheaders{$page}}, '<meta name="'.encode_entities($key).
+               push @{$metaheaders{$page}}, '<meta name="'.
+                       encode_entities($key).
                        '" content="'.encode_entities($value).'" />';
        }
+       elsif ($key eq 'name') {
+               push @{$metaheaders{$page}}, scrub('<meta '.$key.'="'.
+                       encode_entities($value).
+                       join(' ', map { "$_=\"$params{$_}\"" } keys %params).
+                       ' />', $page, $destpage);
+       }
        else {
-               push @{$metaheaders{$page}}, scrub('<meta name="'.encode_entities($key).
-                       '" content="'.encode_entities($value).'" />', $destpage);
+               push @{$metaheaders{$page}}, scrub('<meta name="'.
+                       encode_entities($key).'" content="'.
+                       encode_entities($value).'" />', $page, $destpage);
        }
 
        return "";
@@ -342,7 +355,7 @@ sub match {
        }
 
        if (defined $val) {
-               if ($val=~/^$re$/i) {
+               if ($val=~$re) {
                        return IkiWiki::SuccessReason->new("$re matches $field of $page", $page => $IkiWiki::DEPEND_CONTENT, "" => 1);
                }
                else {
index 95fbcee7648c56c0825d714d15ad7bea37e93621..38313a542aff9bd231b036ae3d47367f55289578 100644 (file)
@@ -42,7 +42,7 @@ sub checkconfig () {
 
        my $version=undef;
        while (<MTN>) {
-               if (/^monotone (\d+\.\d+) /) {
+               if (/^monotone (\d+\.\d+)(?:(?:\.\d+){0,2}|dev)? /) {
                        $version=$1;
                }
        }
@@ -252,9 +252,20 @@ sub get_changed_files ($$) {
 
        my @ret;
        my %seen = ();
-       
+
+       # we need to strip off the relative path to the source dir
+       # because monotone outputs all file paths absolute according
+       # to the workspace root
+       my $rel_src_dir = $config{'srcdir'};
+       $rel_src_dir =~ s/^\Q$config{'mtnrootdir'}\E\/?//;
+       $rel_src_dir .= "/" if length $rel_src_dir;
+
        while ($changes =~ m/\s*(add_file|patch|delete|rename)\s"(.*?)(?<!\\)"\n/sg) {
                my $file = $2;
+               # ignore all file changes outside the source dir
+               next unless $file =~ m/^\Q$rel_src_dir\E/;
+               $file =~ s/^\Q$rel_src_dir\E//;
+        
                # don't add the same file multiple times
                if (! $seen{$file}) {
                        push @ret, $file;
@@ -610,8 +621,9 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $rev=shift;
+       my $maxlines=shift;
        my ($sha1) = $rev =~ /^($sha1_pattern)$/; # untaint
        
        chdir $config{srcdir}
@@ -622,7 +634,11 @@ sub rcs_diff ($) {
                exec("mtn", "diff", "--root=$config{mtnrootdir}", "-r", "p:".$sha1, "-r", $sha1) || error("mtn diff $sha1 failed to run");
        }
 
-       my (@lines) = <MTNDIFF>;
+       my @lines;
+       while (my $line=<MTNDIFF>) {
+               last if defined $maxlines && @lines == $maxlines;
+               push @lines, $line;
+       }
 
        close MTNDIFF || debug("mtn diff $sha1 exited $?");
 
index 80e339a1be7c876e05820ba2da3e444d97770345..6880e366df3ad40b9404d915b04c28e4d3e3bfa4 100644 (file)
@@ -26,7 +26,10 @@ sub preprocess (@) {
 
        $params{linktext} = $linktext unless defined $params{linktext};
 
-       if ($params{page} ne $params{destpage}) {
+       if ($params{page} ne $params{destpage} &&
+           (! exists $params{pages} ||
+            pagespec_match($params{destpage}, $params{pages},
+                    location => $params{page}))) {
                return "\n".
                        htmllink($params{page}, $params{destpage}, $params{page},
                                linktext => $params{linktext},
index a3bb6240ef3024e2f33b855137a79083936b4e42..6fa8bfa3adc8e49f61a4abf42941452f57eb0fb8 100644 (file)
@@ -58,7 +58,7 @@ sub rcs_rename ($$) {
 sub rcs_recentchanges ($) {
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
 }
 
 sub rcs_getctime ($) {
index fae9fb77f8388a9e750b1d8e7dfdcee700f76a92..ce0990e40442ea63d762ac20ddcd3e1ed0420c38 100644 (file)
@@ -77,7 +77,7 @@ sub openid_selector {
 
        my $template=IkiWiki::template("openid-selector.tmpl");
        $template->param(
-               cgiurl => $config{cgiurl},
+               cgiurl => IkiWiki::cgiurl(),
                (defined $openid_error ? (openid_error => $openid_error) : ()),
                (defined $openid_url ? (openid_url => $openid_url) : ()),
                ($real_cgi_signin ? (nonopenidform => $real_cgi_signin->($q, $session, 1)) : ()),
@@ -148,7 +148,7 @@ sub validate ($$$;$) {
        }
 
        my $cgiurl=$config{openid_cgiurl};
-       $cgiurl=$config{cgiurl} if ! defined $cgiurl;
+       $cgiurl=$q->url if ! defined $cgiurl;
 
        my $trust_root=$config{openid_realm};
        $trust_root=$cgiurl if ! defined $trust_root;
@@ -175,7 +175,7 @@ sub auth ($$) {
                        IkiWiki::redirect($q, $setup_url);
                }
                elsif ($csr->user_cancel) {
-                       IkiWiki::redirect($q, $config{url});
+                       IkiWiki::redirect($q, IkiWiki::baseurl(undef));
                }
                elsif (my $vident = $csr->verified_identity) {
                        $session->param(name => $vident->url);
@@ -249,7 +249,7 @@ sub getobj ($$) {
        }
        
        my $cgiurl=$config{openid_cgiurl};
-       $cgiurl=$config{cgiurl} if ! defined $cgiurl;
+       $cgiurl=$q->url if ! defined $cgiurl;
 
        return Net::OpenID::Consumer->new(
                ua => $ua,
index 50507db64832ae6bbf39f9dbfdba0bcb7f082aa0..ef08118b4557ecd8a7b819c6a0bd0dffcc938af1 100644 (file)
@@ -27,7 +27,7 @@ sub parentlinks ($) {
        if (! length $page) {
                # dynamic page
                return {
-                       url => $config{url},
+                       url => IkiWiki::baseurl(undef),
                        page => $config{wikiname},
                };
        }
@@ -70,7 +70,7 @@ sub pagetemplate (@) {
         my $template=$params{template};
 
        if ($template->query(name => "parentlinks") ||
-          $template->query(name => "has_parentlinks")) {
+           $template->query(name => "has_parentlinks")) {
                my @links=parentlinks($params{page});
                $template->param(parentlinks => \@links);
                $template->param(has_parentlinks => (@links > 0));
index c20ecb5d4ef3a663f5496135f56ddb5369c5dd87..932619496c3d3c7634cb1a550a920dae106140a2 100644 (file)
@@ -45,6 +45,7 @@ sub needsbuild (@) {
                        }
                }
        }
+       return $needsbuild;
 }
 
 sub preprocess (@) {
@@ -105,6 +106,8 @@ sub ping {
                        # only ping when a page was changed, so a ping loop
                        # will still be avoided.
                        next if $url=~/^\Q$config{cgiurl}\E/;
+                       my $local_cgiurl = IkiWiki::cgiurl();
+                       next if $url=~/^\Q$local_cgiurl\E/;
                        
                        $ua->get($url);
                }
index 2244126761a8323a7269786724558ffe56c350b4..9ed4a1adb8352f5bb91eb25a424d9cc5f1e1e212 100644 (file)
@@ -25,9 +25,12 @@ use File::Temp;
 use Memoize;
 use UNIVERSAL;
 
+my ($master_language_code, $master_language_name);
 my %translations;
 my @origneedsbuild;
 my %origsubs;
+my @slavelanguages; # language codes ordered as in config po_slave_languages
+my %slavelanguages; # language code to name lookup
 
 memoize("istranslatable");
 memoize("_istranslation");
@@ -88,28 +91,25 @@ sub import {
 sub getsetup () {
        return
                plugin => {
-                       safe => 0,
+                       safe => 1,
                        rebuild => 1, # format plugin
                        section => "format",
                },
                po_master_language => {
                        type => "string",
-                       example => {
-                               'code' => 'en',
-                               'name' => 'English'
-                       },
+                       example => "en|English",
                        description => "master language (non-PO files)",
                        safe => 1,
                        rebuild => 1,
                },
                po_slave_languages => {
                        type => "string",
-                       example => {
-                               'fr' => 'Français',
-                               'es' => 'Español',
-                               'de' => 'Deutsch'
-                       },
-                       description => "slave languages (PO files)",
+                       example => [
+                               'fr|Français',
+                               'es|Español',
+                               'de|Deutsch'
+                       ],
+                       description => "slave languages (translated via PO files) format: ll|Langname",
                        safe => 1,
                        rebuild => 1,
                },
@@ -131,18 +131,49 @@ sub getsetup () {
 }
 
 sub checkconfig () {
-       foreach my $field (qw{po_master_language}) {
-               if (! exists $config{$field} || ! defined $config{$field}) {
-                       error(sprintf(gettext("Must specify %s when using the %s plugin"),
-                                     $field, 'po'));
+       if (exists $config{po_master_language}) {
+               if (! ref $config{po_master_language}) {
+                       ($master_language_code, $master_language_name)=
+                               splitlangpair($config{po_master_language});
+               }
+               else {
+                       $master_language_code=$config{po_master_language}{code};
+                       $master_language_name=$config{po_master_language}{name};
+                       $config{po_master_language}=joinlangpair($master_language_code, $master_language_name);
+               }
+       }
+       if (! defined $master_language_code) {
+               $master_language_code='en';
+       }
+       if (! defined $master_language_name) {
+               $master_language_name='English';
+       }
+
+       if (ref $config{po_slave_languages} eq 'ARRAY') {
+               foreach my $pair (@{$config{po_slave_languages}}) {
+                       my ($code, $name)=splitlangpair($pair);
+                       if (defined $code && ! exists $slavelanguages{$code}) {
+                               push @slavelanguages, $code;
+                               $slavelanguages{$code} = $name;
+                       }
                }
        }
-       delete $config{po_slave_languages}{$config{po_master_language}{code}};;
+       elsif (ref $config{po_slave_languages} eq 'HASH') {
+               %slavelanguages=%{$config{po_slave_languages}};
+               @slavelanguages = sort {
+                       $config{po_slave_languages}->{$a} cmp $config{po_slave_languages}->{$b};
+               } keys %slavelanguages;
+               $config{po_slave_languages}=[
+                       map { joinlangpair($_, $slavelanguages{$_}) } @slavelanguages
+               ]
+       }
+
+       delete $slavelanguages{$master_language_code};
 
        map {
                islanguagecode($_)
                        or error(sprintf(gettext("%s is not a valid language code"), $_));
-       } ($config{po_master_language}{code}, keys %{$config{po_slave_languages}});
+       } ($master_language_code, @slavelanguages);
 
        if (! exists $config{po_translatable_pages} ||
            ! defined $config{po_translatable_pages}) {
@@ -171,16 +202,16 @@ sub checkconfig () {
                next if $underlay=~/^locale\//;
 
                # Underlays containing the po files for slave languages.
-               foreach my $ll (keys %{$config{po_slave_languages}}) {
+               foreach my $ll (@slavelanguages) {
                        add_underlay("po/$ll/$underlay")
                                if -d "$config{underlaydirbase}/po/$ll/$underlay";
                }
        
-               if ($config{po_master_language}{code} ne 'en') {
+               if ($master_language_code ne 'en') {
                        # Add underlay containing translated source files
                        # for the master language.
-                       add_underlay("locale/$config{po_master_language}{code}/$underlay")
-                               if -d "$config{underlaydirbase}/locale/$config{po_master_language}{code}/$underlay";
+                       add_underlay("locale/$master_language_code/$underlay")
+                               if -d "$config{underlaydirbase}/locale/$master_language_code/$underlay";
                }
        }
 }
@@ -197,42 +228,67 @@ sub needsbuild () {
 
        # make existing translations depend on the corresponding master page
        foreach my $master (keys %translations) {
-               map add_depends($_, $master), values %{otherlanguages($master)};
+               map add_depends($_, $master), values %{otherlanguages_pages($master)};
        }
+
+       return $needsbuild;
 }
 
-# Massage the recorded state of internal links so that:
-# - it matches the actually generated links, rather than the links as written
-#   in the pages' source
-# - backlinks are consistent in all cases
 sub scan (@) {
        my %params=@_;
        my $page=$params{page};
        my $content=$params{content};
-
-       if (istranslation($page)) {
-               foreach my $destpage (@{$links{$page}}) {
-                       if (istranslatable($destpage)) {
-                               # replace the occurence of $destpage in $links{$page}
-                               for (my $i=0; $i<@{$links{$page}}; $i++) {
-                                       if (@{$links{$page}}[$i] eq $destpage) {
-                                               @{$links{$page}}[$i] = $destpage . '.' . lang($page);
-                                               last;
-                                       }
-                               }
+       my $run_by_po=$params{run_by_po};
+
+       # Massage the recorded state of internal links so that:
+       # - it matches the actually generated links, rather than the links as
+       #   written in the pages' source
+       # - backlinks are consistent in all cases
+
+       # A second scan pass is made over translation pages, so as an
+       # optimization, we only do so on the second pass in this case,
+       # i.e. when this hook is called by itself.
+       if ($run_by_po && istranslation($page)) {
+               # replace the occurence of $destpage in $links{$page}
+               my @orig_links = @{$links{$page}};
+               $links{$page} = [];
+               foreach my $destpage (@orig_links) {
+                       if (istranslatedto($destpage, lang($page))) {
+                               add_link($page, $destpage . '.' . lang($page));
+                       }
+                       else {
+                               add_link($page, $destpage);
                        }
                }
        }
-       elsif (! istranslatable($page) && ! istranslation($page)) {
+       # No second scan pass is done for a non-translation page, so
+       # links massaging must happen on first pass in this case.
+       elsif (! $run_by_po && ! istranslatable($page) && ! istranslation($page)) {
                foreach my $destpage (@{$links{$page}}) {
                        if (istranslatable($destpage)) {
                                # make sure any destpage's translations has
                                # $page in its backlinks
-                               push @{$links{$page}},
-                                       values %{otherlanguages($destpage)};
+                               foreach my $link (values %{otherlanguages_pages($destpage)}) {
+                                       add_link($page, $link);
+                               }
                        }
                }
        }
+
+       # Re-run the preprocess hooks in scan mode, then the scan hooks,
+       # over the po-to-markup converted content
+       return if $run_by_po; # avoid looping endlessly
+       return unless istranslation($page);
+       $content = po_to_markup($page, $content);
+       require IkiWiki;
+       IkiWiki::preprocess($page, $page, $content, 1);
+       IkiWiki::run_hooks(scan => sub {
+               shift->(
+                       page => $page,
+                       content => $content,
+                       run_by_po => 1,
+               );
+       });
 }
 
 # We use filter to convert PO to the master page's format,
@@ -287,7 +343,7 @@ sub pagetemplate (@) {
        }
        if ($template->query(name => "otherlanguages")) {
                $template->param(otherlanguages => [otherlanguagesloop($page)]);
-               map add_depends($page, $_), (values %{otherlanguages($page)});
+               map add_depends($page, $_), (values %{otherlanguages_pages($page)});
        }
        if ($config{discussion} && istranslation($page)) {
                if ($page !~ /.*\/\Q$config{discussionpage}\E$/i &&
@@ -311,7 +367,8 @@ sub pagetemplate (@) {
            && $masterpage eq "index") {
                $template->param('parentlinks' => []);
        }
-       if (ishomepage($page) && $template->query(name => "title")) {
+       if (ishomepage($page) && $template->query(name => "title")
+           && !$template->param("title_overridden")) {
                $template->param(title => $config{wikiname});
        }
 }
@@ -340,12 +397,12 @@ sub renamepages (@) {
        return () unless istranslatable($torename{src});
 
        my @ret;
-       my %otherpages=%{otherlanguages($torename{src})};
+       my %otherpages=%{otherlanguages_pages($torename{src})};
        while (my ($lang, $otherpage) = each %otherpages) {
                push @ret, {
                        src => $otherpage,
                        srcfile => $pagesources{$otherpage},
-                       dest => otherlanguage($torename{dest}, $lang),
+                       dest => otherlanguage_page($torename{dest}, $lang),
                        destfile => $torename{dest}.".".$lang.".po",
                        required => 0,
                };
@@ -362,41 +419,6 @@ 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 passes in turn 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 (@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("rebuilding all pages to fix meta titles")));
-               resetalreadyfiltered();
-               require IkiWiki::Render;
-               foreach my $file (@rendered) {
-                       IkiWiki::render($file, sprintf(gettext("building %s"), $file));
-               }
-       }
-
        my $updated_po_files=0;
 
        # Refresh/create POT and PO files as needed.
@@ -500,7 +522,7 @@ sub formbuilder_setup (@) {
        if ($form->field("do") eq "create") {
                # Warn the user: new pages must be written in master language.
                my $template=template("pocreatepage.tmpl");
-               $template->param(LANG => $config{po_master_language}{name});
+               $template->param(LANG => $master_language_name);
                $form->tmpl_param(message => $template->output);
        }
        elsif ($form->field("do") eq "edit") {
@@ -536,7 +558,7 @@ sub formbuilder (@) {
        # This cannot be done in the formbuilder_setup hook as the list of types is
        # computed later.
        if ($form->field("do") eq "create") {
-               foreach my $field ($form->field) {
+               foreach my $field ($form->field) {
                        next unless "$field" eq "type";
                        next unless $field->type eq 'select';
                        my $orig_value = $field->value;
@@ -575,7 +597,7 @@ sub mybestlink ($$) {
        my $res=$origsubs{'bestlink'}->(masterpage($page), $link);
        my @caller = caller(1);
        if (length $res
-           && istranslatable($res)
+           && istranslatedto($res, lang($page))
            && istranslation($page)
            &&  !(exists $caller[3] && defined $caller[3]
                  && ($caller[3] eq "IkiWiki::PageSpec::match_link"))) {
@@ -589,11 +611,11 @@ sub mybeautify_urlpath ($) {
 
        my $res=$origsubs{'beautify_urlpath'}->($url);
        if (defined $config{po_link_to} && $config{po_link_to} eq "negotiated") {
-               $res =~ s!/\Qindex.$config{po_master_language}{code}.$config{htmlext}\E$!/!;
+               $res =~ s!/\Qindex.$master_language_code.$config{htmlext}\E$!/!;
                $res =~ s!/\Qindex.$config{htmlext}\E$!/!;
                map {
                        $res =~ s!/\Qindex.$_.$config{htmlext}\E$!/!;
-               } (keys %{$config{po_slave_languages}});
+               } @slavelanguages;
        }
        return $res;
 }
@@ -614,7 +636,7 @@ sub mytargetpage ($$) {
        return $origsubs{'targetpage'}->($page, $ext);
 }
 
-sub myurlto ($$;$) {
+sub myurlto ($;$$) {
        my $to=shift;
        my $from=shift;
        my $absolute=shift;
@@ -623,7 +645,12 @@ sub myurlto ($$;$) {
        if (! length $to
            && $config{po_link_to} eq "current"
            && istranslatable('index')) {
-               return IkiWiki::beautify_urlpath(IkiWiki::baseurl($from) . "index." . lang($from) . ".$config{htmlext}");
+               if (defined $from) {
+                       return IkiWiki::beautify_urlpath(IkiWiki::baseurl($from) . "index." . lang($from) . ".$config{htmlext}");
+               }
+               else {
+                       return $origsubs{'urlto'}->($to,$from,$absolute);
+               }
        }
        # avoid using our injected beautify_urlpath if run by cgi_editpage,
        # so that one is redirected to the just-edited page rather than to the
@@ -684,7 +711,7 @@ sub myisselflink ($$) {
        return 1 if $origsubs{'isselflink'}->($page, $link);
        if (istranslation($page)) {
                return $origsubs{'isselflink'}->(masterpage($page), $link);
-        }
+       }
        return;
 }
 
@@ -756,6 +783,15 @@ sub istranslatable ($) {
        return;
 }
 
+sub istranslatedto ($$) {
+       my $page=shift;
+       my $destlang = shift;
+
+       $page=~s#^/##;
+       return 0 unless istranslatable($page);
+       exists $pagesources{otherlanguage_page($page, $destlang)};
+}
+
 sub _istranslation ($) {
        my $page=shift;
 
@@ -771,7 +807,7 @@ sub _istranslation ($) {
        return 0 unless defined $masterpage && defined $lang
                         && length $masterpage && length $lang
                         && defined $pagesources{$masterpage}
-                        && defined $config{po_slave_languages}{$lang};
+                        && defined $slavelanguages{$lang};
 
        return (maybe_add_leading_slash($masterpage, $hasleadingslash), $lang)
                if istranslatable($masterpage);
@@ -803,7 +839,7 @@ sub lang ($) {
        if (1 < (my ($masterpage, $lang) = _istranslation($page))) {
                return $lang;
        }
-       return $config{po_master_language}{code};
+       return $master_language_code;
 }
 
 sub islanguagecode ($) {
@@ -812,25 +848,42 @@ sub islanguagecode ($) {
        return $code =~ /^[a-z]{2}$/;
 }
 
-sub otherlanguage ($$) {
+sub otherlanguage_page ($$) {
        my $page=shift;
        my $code=shift;
 
-       return masterpage($page) if $code eq $config{po_master_language}{code};
+       return masterpage($page) if $code eq $master_language_code;
        return masterpage($page) . '.' . $code;
 }
 
-sub otherlanguages ($) {
+# Returns the list of other languages codes: the master language comes first,
+# then the codes are ordered the same way as in po_slave_languages, if it is
+# an array, or in the language name lexical order, if it is a hash.
+sub otherlanguages_codes ($) {
        my $page=shift;
 
-       my %ret;
-       return \%ret unless istranslation($page) || istranslatable($page);
+       my @ret;
+       return \@ret unless istranslation($page) || istranslatable($page);
        my $curlang=lang($page);
        foreach my $lang
-               ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}) {
+               ($master_language_code, @slavelanguages) {
                next if $lang eq $curlang;
-               $ret{$lang}=otherlanguage($page, $lang);
+               if ($lang eq $master_language_code ||
+                   istranslatedto(masterpage($page), $lang)) {
+                       push @ret, $lang;
+               }
        }
+       return \@ret;
+}
+
+sub otherlanguages_pages ($) {
+       my $page=shift;
+
+       my %ret;
+       map {
+               $ret{$_} = otherlanguage_page($page, $_)
+       } @{otherlanguages_codes($page)};
+
        return \%ret;
 }
 
@@ -854,7 +907,7 @@ sub pofile ($$) {
 sub pofiles ($) {
        my $masterfile=shift;
 
-       return map pofile($masterfile, $_), (keys %{$config{po_slave_languages}});
+       return map pofile($masterfile, $_), @slavelanguages;
 }
 
 sub refreshpot ($) {
@@ -970,10 +1023,10 @@ sub percenttranslated ($) {
 sub languagename ($) {
        my $code=shift;
 
-       return $config{po_master_language}{name}
-               if $code eq $config{po_master_language}{code};
-       return $config{po_slave_languages}{$code}
-               if defined $config{po_slave_languages}{$code};
+       return $master_language_name
+               if $code eq $master_language_code;
+       return $slavelanguages{$code}
+               if defined $slavelanguages{$code};
        return;
 }
 
@@ -981,30 +1034,25 @@ sub otherlanguagesloop ($) {
        my $page=shift;
 
        my @ret;
-       my %otherpages=%{otherlanguages($page)};
-       while (my ($lang, $otherpage) = each %otherpages) {
-               if (istranslation($page) && masterpage($page) eq $otherpage) {
-                       push @ret, {
-                               url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
-                               code => $lang,
-                               language => languagename($lang),
-                               master => 1,
-                       };
-               }
-               elsif (istranslation($otherpage)) {
-                       push @ret, {
-                               url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
-                               code => $lang,
-                               language => languagename($lang),
-                               percent => percenttranslated($otherpage),
-                       }
+       if (istranslation($page)) {
+               push @ret, {
+                       url => urlto_with_orig_beautiful_urlpath(masterpage($page), $page),
+                       code => $master_language_code,
+                       language => $master_language_name,
+                       master => 1,
+               };
+       }
+       foreach my $lang (@{otherlanguages_codes($page)}) {
+               next if $lang eq $master_language_code;
+               my $otherpage = otherlanguage_page($page, $lang);
+               push @ret, {
+                       url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
+                       code => $lang,
+                       language => languagename($lang),
+                       percent => percenttranslated($otherpage),
                }
        }
-       return sort {
-               return -1 if $a->{code} eq $config{po_master_language}{code};
-               return 1 if $b->{code} eq $config{po_master_language}{code};
-               return $a->{language} cmp $b->{language};
-       } @ret;
+       return @ret;
 }
 
 sub homepageurl (;$) {
@@ -1017,7 +1065,7 @@ sub ishomepage ($) {
        my $page = shift;
 
        return 1 if $page eq 'index';
-       map { return 1 if $page eq 'index.'.$_ } keys %{$config{po_slave_languages}};
+       map { return 1 if $page eq 'index.'.$_ } @slavelanguages;
        return undef;
 }
 
@@ -1032,7 +1080,7 @@ sub deletetranslations ($) {
                if (-e $absfile && ! -l $absfile && ! -d $absfile) {
                        push @todelete, $file;
                }
-       } keys %{$config{po_slave_languages}};
+       } @slavelanguages;
 
        map {
                if ($config{rcs}) {
@@ -1163,7 +1211,7 @@ sub isvalidpo ($) {
        unlink $infile;
 
        if ($res) {
-           return IkiWiki::SuccessReason->new("valid gettext data");
+               return IkiWiki::SuccessReason->new("valid gettext data");
        }
        return IkiWiki::FailReason->new(gettext("invalid gettext data, go back ".
                                        "to previous page to continue edit"));
@@ -1175,7 +1223,7 @@ sub po4a_type ($) {
        my $pagetype = pagetype($file);
        if ($pagetype eq 'html') {
                return 'xhtml';
-        }
+       }
        return 'text';
 }
 
@@ -1189,17 +1237,38 @@ sub po4a_options($) {
                # how to disable options is not consistent across po4a modules
                $options{includessi} = '';
                $options{includeexternal} = 0;
-        }
+       }
        elsif ($pagetype eq 'mdwn') {
                $options{markdown} = 1;
-        }
-        else {
+       }
+       else {
                $options{markdown} = 0;
-        }
+       }
 
        return %options;
 }
 
+sub splitlangpair ($) {
+       my $pair=shift;
+
+       my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ );
+       if (! defined $code || ! defined $name ||
+           ! length $code || ! length $name) {
+               # not a fatal error to avoid breaking if used with web setup
+               warn sprintf(gettext("%s has invalid syntax: must use CODE|NAME"),
+                       $pair);
+       }
+
+       return $code, $name;
+}
+
+sub joinlangpair ($$) {
+       my $code=shift;
+       my $name=shift;
+
+       return "$code|$name";
+}
+
 # ,----
 # | PageSpecs
 # `----
@@ -1234,7 +1303,7 @@ sub match_lang ($$;@) {
 
        my $regexp=IkiWiki::glob2re($wanted);
        my $lang=IkiWiki::Plugin::po::lang($page);
-       if ($lang !~ /^$regexp$/i) {
+       if ($lang !~ $regexp) {
                return IkiWiki::FailReason->new("file language is $lang, not $wanted");
        }
        else {
@@ -1270,11 +1339,11 @@ sub match_needstranslation ($$;@) {
                }
                elsif ($wanted > 100) {
                        return IkiWiki::FailReason->new("parameter is greater than 100");
-                }
-        }
-        else {
+               }
+       }
+       else {
                $wanted=100;
-        }
+       }
 
        my $percenttranslated=IkiWiki::Plugin::po::percenttranslated($page);
        if ($percenttranslated eq 'N/A') {
@@ -1282,7 +1351,7 @@ sub match_needstranslation ($$;@) {
        }
        elsif ($percenttranslated < $wanted) {
                return IkiWiki::SuccessReason->new("file has $percenttranslated translated");
-        }
+       }
        else {
                return IkiWiki::FailReason->new("file is translated enough");
        }
index b333e2cdcff485edd81f4df426e1865c261a1199..2773486a6c69560fdd0a2236607b800dc88b15e6 100644 (file)
@@ -52,7 +52,7 @@ sub preprocess (@) {
        foreach my $choice (@choices) {
                if ($open && exists $config{cgiurl}) {
                        # use POST to avoid robots
-                       $ret.="<form method=\"POST\" action=\"$config{cgiurl}\">\n";
+                       $ret.="<form method=\"POST\" action=\"".IkiWiki::cgiurl()."\">\n";
                }
                my $percent=$total > 0 ? int($choices{$choice} / $total * 100) : 0;
                $ret.="<p>\n";
@@ -103,7 +103,7 @@ sub sessioncgi ($$) {
                my $oldchoice=$session->param($choice_param);
                if (defined $oldchoice && $oldchoice eq $choice) {
                        # Same vote; no-op.
-                       IkiWiki::redirect($cgi, urlto($page, undef, 1));
+                       IkiWiki::redirect($cgi, urlto($page));
                        exit;
                }
 
@@ -153,7 +153,7 @@ sub sessioncgi ($$) {
                error($@) if $@;
                my $cookie = CGI::Cookie->new(-name=> $session->name, -value=> $session->id);
                print $cgi->redirect(-cookie => $cookie,
-                       -url => urlto($page, undef, 1));
+                       -url => urlto($page));
                exit;
        }
 }
index 758b98348d126aa572a537f9f0b359e5baffbb5e..92083a7ad6ad5c9bf33743489b9ac2a143366f11 100644 (file)
@@ -13,6 +13,7 @@ sub import {
        hook(type => "refresh", id => "recentchanges", call => \&refresh);
        hook(type => "pagetemplate", id => "recentchanges", call => \&pagetemplate);
        hook(type => "htmlize", id => "_change", call => \&htmlize);
+       hook(type => "sessioncgi", id => "recentchanges", call => \&sessioncgi);
        # Load goto to fix up links from recentchanges
        IkiWiki::loadplugin("goto");
 }
@@ -60,6 +61,76 @@ sub refresh ($) {
        }
 }
 
+sub sessioncgi ($$) {
+       my ($q, $session) = @_;
+       my $do = $q->param('do');
+       my $rev = $q->param('rev');
+
+       return unless $do eq 'revert' && $rev;
+
+       my @changes=$IkiWiki::hooks{rcs}{rcs_preprevert}{call}->($rev);
+       IkiWiki::check_canchange(
+               cgi => $q,
+               session => $session,
+               changes => \@changes,
+       );
+
+       eval q{use CGI::FormBuilder};
+       error($@) if $@;
+       my $form = CGI::FormBuilder->new(
+               name => "revert",
+               header => 0,
+               charset => "utf-8",
+               method => 'POST',
+               javascript => 0,
+               params => $q,
+               action => IkiWiki::cgiurl(),
+               stylesheet => 1,
+               template => { template('revert.tmpl') },
+               fields => [qw{revertmessage do sid rev}],
+       );
+       my $buttons=["Revert", "Cancel"];
+
+       $form->field(name => "revertmessage", type => "text", size => 80);
+       $form->field(name => "sid", type => "hidden", value => $session->id,
+               force => 1);
+       $form->field(name => "do", type => "hidden", value => "revert",
+               force => 1);
+
+       IkiWiki::decode_form_utf8($form);
+
+       if ($form->submitted eq 'Revert' && $form->validate) {
+               IkiWiki::checksessionexpiry($q, $session, $q->param('sid'));
+               my $message=sprintf(gettext("This reverts commit %s"), $rev);
+               if (defined $form->field('revertmessage') &&
+                   length $form->field('revertmessage')) {
+                       $message=$form->field('revertmessage')."\n\n".$message;
+               }
+               my $r = $IkiWiki::hooks{rcs}{rcs_revert}{call}->($rev);
+               error $r if defined $r;
+               IkiWiki::disable_commit_hook();
+               IkiWiki::rcs_commit_staged(
+                       message => $message,
+                       session => $session,
+               );
+               IkiWiki::enable_commit_hook();
+       
+               require IkiWiki::Render;
+               IkiWiki::refresh();
+               IkiWiki::saveindex();
+       }
+       elsif ($form->submitted ne 'Cancel') {
+               $form->title(sprintf(gettext("confirm reversion of %s"), $rev));
+               $form->tmpl_param(diff => encode_entities(scalar IkiWiki::rcs_diff($rev, 200)));
+               $form->field(name => "rev", type => "hidden", value => $rev, force => 1);
+               IkiWiki::showform($form, $buttons, $session, $q);
+               exit 0;
+       }
+
+       IkiWiki::redirect($q, urlto($config{recentchangespage}));
+       exit 0;
+}
+
 # Enable the recentchanges link.
 sub pagetemplate (@) {
        my %params=@_;
@@ -107,12 +178,20 @@ sub store ($$$) {
                        else {
                                $_->{link} = pagetitle($_->{page});
                        }
-                       $_->{baseurl}="$config{url}/" if length $config{url};
 
                        $_;
                } @{$change->{pages}}
        ];
        push @{$change->{pages}}, { link => '...' } if $is_excess;
+       
+       if (length $config{cgiurl} &&
+           exists $IkiWiki::hooks{rcs}{rcs_preprevert} &&
+           exists $IkiWiki::hooks{rcs}{rcs_revert}) {
+               $change->{reverturl} = IkiWiki::cgiurl(
+                       do => "revert",
+                       rev => $change->{rev}
+               );
+       }
 
        $change->{author}=$change->{user};
        my $oiduser=eval { IkiWiki::openiduser($change->{user}) };
@@ -146,7 +225,7 @@ sub store ($$$) {
                wikiname => $config{wikiname},
        );
        
-       $template->param(permalink => "$config{url}/$config{recentchangespage}/#change-".titlepage($change->{rev}))
+       $template->param(permalink => urlto($config{recentchangespage}, undef, 1)."#change-".titlepage($change->{rev}))
                if exists $config{url};
        
        IkiWiki::run_hooks(pagetemplate => sub {
index e3ba9b8d8248858689619fee48a963912c593648..71297572d7b74a5042e18fd93128a4dca773e170 100644 (file)
@@ -28,11 +28,10 @@ sub pagetemplate (@) {
        my $template=$params{template};
        if ($config{rcs} && exists $params{rev} && length $params{rev} &&
            $template->query(name => "diff")) {
-               my @lines=IkiWiki::rcs_diff($params{rev});
+               my @lines=IkiWiki::rcs_diff($params{rev}, $maxlines+1);
                if (@lines) {
                        my $diff;
                        if (@lines > $maxlines) {
-                               # only include so many lines of diff
                                $diff=join("", @lines[0..($maxlines-1)])."\n".
                                        gettext("(Diff truncated)");
                        }
index c9280ef14799dbecdba10c0bcc259027a245d2fc..4ae0be8615852db38222ebd892fd5c216bd5b4bf 100644 (file)
@@ -27,19 +27,18 @@ sub format (@) {
         my %params=@_;
 
        if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
-               # no </body> tag, probably in preview mode
-               $params{content}=include_javascript($params{page}, 1).$params{content};
+               # no <body> tag, probably in preview mode
+               $params{content}=include_javascript(undef).$params{content};
        }
        return $params{content};
 }
 
-sub include_javascript ($;$) {
-       my $page=shift;
-       my $absolute=shift;
+sub include_javascript ($) {
+       my $from=shift;
        
-       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $page, $absolute).
+       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $from).
                '" type="text/javascript" charset="utf-8"></script>'."\n".
-               '<script src="'.urlto("ikiwiki/relativedate.js", $page, $absolute).
+               '<script src="'.urlto("ikiwiki/relativedate.js", $from).
                '" type="text/javascript" charset="utf-8"></script>';
 }
 
index 95f148183cba558be65a95a9687992293d122839..bc481502a7dc8ecaa179e781d4a2c4dc3348d7b2 100644 (file)
@@ -42,9 +42,6 @@ sub check_canremove ($$$) {
                error(sprintf(gettext("%s is not a file"), $file));
        }
        
-       # Must be editable.
-       IkiWiki::check_canedit($page, $q, $session);
-
        # If a user can't upload an attachment, don't let them delete it.
        # This is sorta overkill, but better safe than sorry.
        if (! defined pagetype($pagesources{$page})) {
@@ -74,6 +71,7 @@ sub check_canremove ($$$) {
                        }
                }
        });
+       return defined $canremove ? $canremove : 1;
 }
 
 sub formbuilder_setup (@) {
@@ -102,7 +100,7 @@ sub confirmation_form ($$) {
                method => 'POST',
                javascript => 0,
                params => $q,
-               action => $config{cgiurl},
+               action => IkiWiki::cgiurl(),
                stylesheet => 1,
                fields => [qw{do page}],
        );
@@ -121,6 +119,7 @@ sub removal_confirm ($$@) {
        my @pages=@_;
 
        foreach my $page (@pages) {
+               IkiWiki::check_canedit($page, $q, $session);
                check_canremove($page, $q, $session);
        }
 
@@ -198,6 +197,7 @@ sub sessioncgi ($$) {
                        # and that the user is allowed to edit(/remove) it.
                        my @files;
                        foreach my $page (@pages) {
+                               IkiWiki::check_canedit($page, $q, $session);
                                check_canremove($page, $q, $session);
                                
                                # This untaint is safe because of the
@@ -240,7 +240,7 @@ sub sessioncgi ($$) {
                                if (! exists $pagesources{$parent}) {
                                        $parent="index";
                                }
-                               IkiWiki::redirect($q, urlto($parent, '/', 1));
+                               IkiWiki::redirect($q, urlto($parent));
                        }
                }
                else {
index 61d39d4b568d74b3766984f585862ae698b9957b..57747d3c9df00141a1ade61e823c453a2ecbcc33 100644 (file)
@@ -108,6 +108,7 @@ sub check_canrename ($$$$$$) {
                        }
                }
        });
+       return defined $canrename ? $canrename : 1;
 }
 
 sub rename_form ($$$) {
@@ -125,7 +126,7 @@ sub rename_form ($$$) {
                method => 'POST',
                javascript => 0,
                params => $q,
-               action => $config{cgiurl},
+               action => IkiWiki::cgiurl(),
                stylesheet => 1,
                fields => [qw{do page new_name attachment}],
        );
@@ -573,11 +574,10 @@ sub fixlinks ($$$) {
                                eval { writefile($file, $config{srcdir}, $content) };
                                next if $@;
                                my $conflict=IkiWiki::rcs_commit(
-                                       $file,
-                                       sprintf(gettext("update for rename of %s to %s"), $rename->{srcfile}, $rename->{destfile}),
-                                       $token,
-                                       $session->param("name"),
-                                       $session->remote_addr(),
+                                       file => $file,
+                                       message => sprintf(gettext("update for rename of %s to %s"), $rename->{srcfile}, $rename->{destfile}),
+                                       token => $token,
+                                       session => $session,
                                );
                                push @fixedlinks, $page if ! defined $conflict;
                        }
index ff5d0ccbe616379b0a7efdadbd1858e4a8cf098e..78eb750b5f670caabe5840a51f589319eccf1204 100644 (file)
@@ -13,6 +13,7 @@ sub import {
        hook(type => "indexhtml", id => "search", call => \&indexhtml);
        hook(type => "delete", id => "search", call => \&delete);
        hook(type => "cgi", id => "search", call => \&cgi);
+       hook(type => "disable", id => "search", call => \&disable);
 }
 
 sub getsetup () {
@@ -57,7 +58,7 @@ sub pagetemplate (@) {
        if ($template->query(name => "searchform")) {
                if (! defined $form) {
                        my $searchform = template("searchform.tmpl", blind_cache => 1);
-                       $searchform->param(searchaction => $config{cgiurl});
+                       $searchform->param(searchaction => IkiWiki::cgiurl());
                        $searchform->param(html5 => $config{html5});
                        $form=$searchform->output;
                }
@@ -175,7 +176,7 @@ sub cgi ($) {
                # only works for GET requests
                chdir("$config{wikistatedir}/xapian") || error("chdir: $!");
                $ENV{OMEGA_CONFIG_FILE}="./omega.conf";
-               $ENV{CGIURL}=$config{cgiurl},
+               $ENV{CGIURL}=IkiWiki::cgiurl();
                IkiWiki::loadindex();
                $ENV{HELPLINK}=htmllink("", "", "ikiwiki/searching",
                        noimageinline => 1, linktext => "Help");
@@ -189,15 +190,15 @@ sub pageterm ($) {
        # 240 is the number used by omindex to decide when to hash an
        # overlong term. This does not use a compatible hash method though.
        if (length $page > 240) {
-               eval q{use Digest::SHA1};
+               eval q{use Digest::SHA};
                if ($@) {
-                       debug("search: ".sprintf(gettext("need Digest::SHA1 to index %s"), $page)) if $@;
+                       debug("search: ".sprintf(gettext("need Digest::SHA to index %s"), $page)) if $@;
                        return undef;
                }
 
                # Note no colon, therefore it's guaranteed to not overlap
                # with a page with the same name as the hash..
-               return "U".lc(Digest::SHA1::sha1_hex($page));
+               return "U".lc(Digest::SHA::sha1_hex($page));
        }
        else {
                return "U:".$page;
@@ -245,4 +246,10 @@ sub setupfiles () {
 }
 }
 
+sub disable () {
+       if (-d $config{wikistatedir}."/xapian") {
+               system("rm", "-rf", $config{wikistatedir}."/xapian");
+       }
+}
+
 1
index c3a3b0c01eabcb1001257a6f2b4e407fe184db3b..7974d5e5325f396a6bd90cc446e239bed9a0c44f 100644 (file)
@@ -41,6 +41,7 @@ sub import {
        hook(type => "rename", id => "skeleton", call => \&rename);
        hook(type => "savestate", id => "skeleton", call => \&savestate);
        hook(type => "genwrapper", id => "skeleton", call => \&genwrapper);
+       hook(type => "disable", id => "skeleton", call => \&disable);
 }
 
 sub getopt () {
@@ -72,7 +73,11 @@ sub refresh () {
 }
 
 sub needsbuild ($) {
+       my $needsbuild=shift;
+
        debug("skeleton plugin needsbuild");
+
+       return $needsbuild;
 }
 
 sub preprocess (@) {
@@ -254,4 +259,8 @@ sub genwrapper () {
        debug("skeleton plugin running in genwrapper");
 }
 
+sub disable () {
+       debug("skeleton plugin running in disable");
+}
+
 1
index 0d77916d0d3d633e7656d79527cce12647089d47..6f4f49d18f4b3fb08d0d73a8ba877987fb12a94d 100644 (file)
@@ -25,7 +25,14 @@ sub getsetup () {
 }
 
 sub build_regexp () {
-       my $list=readfile(srcfile("smileys.mdwn"));
+       my $srcfile = srcfile("smileys.mdwn", 1);
+       if (! defined $srcfile) {
+               print STDERR sprintf(gettext("smiley plugin will not work without %s"),
+                       "smileys.mdwn")."\n";
+               $smiley_regexp='';
+               return;
+       }
+       my $list=readfile($srcfile);
        while ($list =~ m/^\s*\*\s+\\\\([^\s]+)\s+\[\[([^]]+)\]\]/mg) {
                my $smiley=$1;
                my $file=$2;
index 62e42767c99a48170ddb58c1473b8b49131ad24b..b038b2f9a662358c015806bd22a7159c51b922c6 100644 (file)
@@ -7,6 +7,7 @@ no warnings;
 
 sub import {
        hook(type => "getsetup", id => "sortnaturally", call => \&getsetup);
+       hook(type => "checkconfig", id => "sortnaturally", call => \&checkconfig);
 }
 
 sub getsetup {
index 1b1d04cba6e7c2e2510a51758a9cfd5439eb4ce5..e28d2605a2c1802e6afe798cab14548529d55936 100644 (file)
@@ -122,10 +122,10 @@ sub preprocess (@) {
 
        # Use the sha1 of the php code that generates the sparkline as
        # the base for its filename.
-       eval q{use Digest::SHA1};
+       eval q{use Digest::SHA};
         error($@) if $@;
        my $fn=$params{page}."/sparkline-".
-               IkiWiki::possibly_foolish_untaint(Digest::SHA1::sha1_hex($php)).
+               IkiWiki::possibly_foolish_untaint(Digest::SHA::sha1_hex($php)).
                ".png";
        will_render($params{page}, $fn);
 
index 9cf82b5db3c4ce663a552cee9acd7cd22e665c3c..faaf567d578d920bebfda41927c0c7e9946488d0 100644 (file)
@@ -345,8 +345,9 @@ sub rcs_recentchanges ($) {
        return @ret;
 }
 
-sub rcs_diff ($) {
+sub rcs_diff ($;$) {
        my $rev=IkiWiki::possibly_foolish_untaint(int(shift));
+       my $maxlines=shift;
        return `svnlook diff $config{svnrepo} -r$rev --no-diff-deleted`;
 }
 
index 2edd1eacd11a329d71d81add93c431462685ef03..f3c425a37dacd9d1389f0c53a0d7fbc52469c70b 100644 (file)
@@ -40,6 +40,9 @@ sub preprocess (@) {
                # scan that file too.
                return unless exists $params{file};
 
+               # Preprocess in scan-only mode.
+               IkiWiki::preprocess($params{page}, $params{page}, $params{data}, 1);
+
                IkiWiki::run_hooks(scan => sub {
                        shift->(
                                page => $params{page},
@@ -47,9 +50,6 @@ sub preprocess (@) {
                        );
                });
 
-               # Preprocess in scan-only mode.
-               IkiWiki::preprocess($params{page}, $params{page}, $params{data}, 1);
-
                return;
        }
 
index 55064a9a3cef72c92f3ebc3cb43fa9ef7646d256..fd5ce1e8a91488ce5d5b20709001fd3d177def97 100644 (file)
@@ -55,6 +55,17 @@ sub taglink ($) {
        return $tag;
 }
 
+# Returns a tag name from a tag link
+sub tagname ($) {
+       my $tag=shift;
+       if (defined $config{tagbase}) {
+               $tag =~ s!^/\Q$config{tagbase}\E/!!;
+       } else {
+               $tag =~ s!^\.?/!!;
+       }
+       return pagetitle($tag, 1);
+}
+
 sub htmllink_tag ($$$;@) {
        my $page=shift;
        my $destpage=shift;
@@ -84,7 +95,7 @@ sub gentag ($) {
                        debug($message);
 
                        my $template=template("autotag.tmpl");
-                       $template->param(tagname => IkiWiki::basename($tag));
+                       $template->param(tagname => tagname($tag));
                        $template->param(tag => $tag);
                        writefile($tagfile, $config{srcdir}, $template->output);
                        if ($config{rcs}) {
@@ -154,14 +165,15 @@ sub pagetemplate (@) {
 
        $template->param(tags => [
                map { 
-                       link => htmllink_tag($page, $destpage, $_, rel => "tag")
+                       link => htmllink_tag($page, $destpage, $_,
+                                       rel => "tag", linktext => tagname($_))
                }, sort keys %$tags
        ]) if defined $tags && %$tags && $template->query(name => "tags");
 
        if ($template->query(name => "categories")) {
                # It's an rss/atom template. Add any categories.
                if (defined $tags && %$tags) {
-                       $template->param(categories => [map { category => $_ },
+                       $template->param(categories => [map { category => tagname($_) },
                                sort keys %$tags]);
                }
        }
index db26bfe315a254ddc8bdafef07abf83c4a819deb..3df06e652eeee285d51690b9d2178d6e0fb2b8ca 100644 (file)
@@ -41,12 +41,9 @@ sub preprocess (@) {
                        blind_cache => 1);
        };
        if ($@) {
-               error gettext("failed to process template:")." $@";
-       }
-       if (! $template) {
-               error sprintf(gettext("%s not found"),
+               error sprintf(gettext("failed to process template %s"),
                        htmllink($params{page}, $params{destpage},
-                               "/templates/$params{id}"))
+                               "/templates/$params{id}"))." $@";
        }
 
        $params{basename}=IkiWiki::basename($params{page});
index 521af499fc77323870951883b49736509081cd8f..3d6fa9942c11f3dd304026458655b22ab30e5e50 100644 (file)
@@ -13,6 +13,7 @@ use IkiWiki 3.00;
 
 my $default_prefix = <<EOPREFIX;
 \\documentclass{article}
+\\usepackage[utf8]{inputenc}
 \\usepackage{amsmath}
 \\usepackage{amsfonts}
 \\usepackage{amssymb}
@@ -143,7 +144,7 @@ sub gen_image ($$$$) {
        }
        
        my $tex = $config{teximg_prefix};
-       $tex .= '$$'.$code.'$$';
+       $tex .= '\['.$code.'\]';
        $tex .= $config{teximg_postfix};
        $tex =~ s!\\documentclass{article}!\\documentclass[${height}pt]{article}!g;
        $tex =~ s!\\documentclass{scrartcl}!\\documentclass[${height}pt]{scrartcl}!g;
index 03b0816ed6fc5a6c42f0da916d898c6633eb7d15..ee94547e90c51dad608b020e1be6bc0a434d38d7 100644 (file)
@@ -60,6 +60,7 @@ sub needsbuild ($) {
                
                $wikistate{theme}{currenttheme}=$config{theme};
        }
+       return $needsbuild;
 }
 
 1
index 20967d3fd79e85fb5f0e677b0a7d76eb6e7ac38f..af4d2ba3a858774ac6b77be58479fb2a4a18d69c 100644 (file)
@@ -69,20 +69,19 @@ sub format (@) {
        if ($params{content}=~s!(<div class="toggleable(?:-open)?" id="[^"]+">\s*)</div>!$1!g) {
                $params{content}=~s/<div class="toggleableend">//g;
                if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
-                       # no </body> tag, probably in preview mode
-                       $params{content}=include_javascript($params{page}, 1).$params{content};
+                       # no <body> tag, probably in preview mode
+                       $params{content}=include_javascript(undef).$params{content};
                }
        }
        return $params{content};
 }
 
-sub include_javascript ($;$) {
-       my $page=shift;
-       my $absolute=shift;
+sub include_javascript ($) {
+       my $from=shift;
        
-       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $page, $absolute).
+       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $from).
                '" type="text/javascript" charset="utf-8"></script>'."\n".
-               '<script src="'.urlto("ikiwiki/toggle.js", $page, $absolute).
+               '<script src="'.urlto("ikiwiki/toggle.js", $from).
                '" type="text/javascript" charset="utf-8"></script>';
 }
 
index 0d9a0b35bd8abf6be895c4d1ce85f64a6077ded1..fcfb68be90891fca4a46ef512b43548362ffb9e1 100644 (file)
@@ -17,6 +17,7 @@ sub import {
        hook(type => "getsetup", id => "txt", call => \&getsetup);
        hook(type => "filter", id => "txt", call => \&filter);
        hook(type => "htmlize", id => "txt", call => \&htmlize);
+       hook(type => "htmlizeformat", id => "txt", call => \&htmlizeformat);
 
        eval q{use URI::Find};
        if (! $@) {
@@ -46,25 +47,42 @@ sub filter (@) {
                        will_render($params{page}, 'robots.txt');
                        writefile('robots.txt', $config{destdir}, $content);
                }
-
-               encode_entities($content, "<>&");
-               if ($findurl) {
-                       my $finder = URI::Find->new(sub {
-                               my ($uri, $orig_uri) = @_;
-                               return qq|<a href="$uri">$orig_uri</a>|;
-                       });
-                       $finder->find(\$content);
-               }
-               $content = "<pre>" . $content . "</pre>";
+               return txt2html($content);
        }
 
        return $content;
 }
 
+sub txt2html ($) {
+       my $content=shift;
+       
+       encode_entities($content, "<>&");
+       if ($findurl) {
+               my $finder = URI::Find->new(sub {
+                       my ($uri, $orig_uri) = @_;
+                       return qq|<a href="$uri">$orig_uri</a>|;
+               });
+               $finder->find(\$content);
+       }
+       return "<pre>" . $content . "</pre>";
+}
+
 # We need this to register the .txt file extension
 sub htmlize (@) {
        my %params=@_;
        return $params{content};
 }
 
+sub htmlizeformat ($$) {
+       my $format=shift;
+       my $content=shift;
+
+       if ($format eq 'txt') {
+               return txt2html($content);
+       }
+       else {
+               return;
+       }
+}
+
 1
index c13643478ab25012c5aacab3f0c9ca43aa2b2689..fc265526c15e41682efec8c7702d3a54e5efcf17 100644 (file)
@@ -37,6 +37,7 @@ sub needsbuild (@) {
                        }
                }
        }
+       return $needsbuild;
 }
 
 sub preprocess (@) {
index 11b4428e3fc0a55f6637516c56b2dca8a7460163..6a51903016830c17339f2130a964f87708ae15b0 100644 (file)
@@ -219,7 +219,8 @@ sub showfields ($$$@) {
                                options => [ [ 1 => $description ] ],
                                fieldset => $section,
                        );
-                       if (! $form->submitted) {
+                       if (! $form->submitted ||
+                           ($info{advanced} && $form->submitted eq 'Advanced Mode')) {
                                $form->field(name => $name, value => $value);
                        }
                }
@@ -287,7 +288,7 @@ sub showform ($$) {
                fieldsets => [
                        [main => gettext("main")], 
                ],
-               action => $config{cgiurl},
+               action => IkiWiki::cgiurl(),
                template => {type => 'div'},
                stylesheet => 1,
        );
@@ -295,6 +296,7 @@ sub showform ($$) {
        $form->field(name => "do", type => "hidden", value => "setup",
                force => 1);
        $form->field(name => "rebuild_asked", type => "hidden");
+       $form->field(name => "showadvanced", type => "hidden");
 
        if ($form->submitted eq 'Basic Mode') {
                $form->field(name => "showadvanced", type => "hidden", 
@@ -342,7 +344,7 @@ sub showform ($$) {
        IkiWiki::decode_form_utf8($form);
        
        if ($form->submitted eq "Cancel") {
-               IkiWiki::redirect($cgi, $config{url});
+               IkiWiki::redirect($cgi, IkiWiki::baseurl(undef));
                return;
        }
        elsif (($form->submitted eq 'Save Setup' || $form->submitted eq 'Rebuild Wiki') && $form->validate) {
@@ -473,7 +475,7 @@ sub showform ($$) {
                                                join(" ", @command), $ret).
                                        '</p>';
                                open(OUT, ">", $config{setupfile}) || error("$config{setupfile}: $!");
-                               print OUT $oldsetup;
+                               print OUT Encode::encode_utf8($oldsetup);
                                close OUT;
                        }
 
index 71d7c9d17f51e49ec17aee087e984f3e8a7b9b79..134cfb9101b51d48bbabc6a47b7aaba1b73ff699 100644 (file)
@@ -31,14 +31,13 @@ sub formbuilder_setup (@) {
                        $form->field("do") eq "comment";
 
        $form->tmpl_param("wmd_preview", "<div class=\"wmd-preview\"></div>\n".
-               include_javascript(undef, 1));
+               include_javascript(undef));
 }
 
-sub include_javascript ($;$) {
-       my $page=shift;
-       my $absolute=shift;
+sub include_javascript ($) {
+       my $from=shift;
 
-       my $wmdjs=urlto("wmd/wmd.js", $page, $absolute);
+       my $wmdjs=urlto("wmd/wmd.js", $from);
        return <<"EOF"
 <script type="text/javascript">
 wmd_options = {
index fdd463025457f918458168a2671f7c97dd2a37ab..c73adfbbb84b34462eaa474ca315570aba85cc44 100644 (file)
@@ -48,10 +48,10 @@ EOF
 
 sub test () {
        exit 0 if trusted();
-       
+
        IkiWiki::lockwiki();
        IkiWiki::loadindex();
-       
+
        # Dummy up a cgi environment to use when calling check_canedit
        # and friends.
        eval q{use CGI};
@@ -72,63 +72,12 @@ sub test () {
                        regdate => time,
                }) || error("failed adding user");
        }
-       
-       my %newfiles;
-
-       foreach my $change (IkiWiki::rcs_receive()) {
-               # This untaint is safe because we check file_pruned and
-               # wiki_file_regexp.
-               my ($file)=$change->{file}=~/$config{wiki_file_regexp}/;
-               $file=IkiWiki::possibly_foolish_untaint($file);
-               if (! defined $file || ! length $file ||
-                   IkiWiki::file_pruned($file)) {
-                       error(gettext("bad file name %s"), $file);
-               }
-
-               my $type=pagetype($file);
-               my $page=pagename($file) if defined $type;
-               
-               if ($change->{action} eq 'add') {
-                       $newfiles{$file}=1;
-               }
-
-               if ($change->{action} eq 'change' ||
-                   $change->{action} eq 'add') {
-                       if (defined $page) {
-                               if (IkiWiki->can("check_canedit")) {
-                                       IkiWiki::check_canedit($page, $cgi, $session);
-                                       next;
-                               }
-                       }
-                       else {
-                               if (IkiWiki::Plugin::attachment->can("check_canattach")) {
-                                       IkiWiki::Plugin::attachment::check_canattach($session, $file, $change->{path});
-                                       next;
-                               }
-                       }
-               }
-               elsif ($change->{action} eq 'remove') {
-                       # check_canremove tests to see if the file is present
-                       # on disk. This will fail is a single commit adds a
-                       # file and then removes it again. Avoid the problem
-                       # by not testing the removal in such pairs of changes.
-                       # (The add is still tested, just to make sure that
-                       # no data is added to the repo that a web edit
-                       # could not add.)
-                       next if $newfiles{$file};
-
-                       if (IkiWiki::Plugin::remove->can("check_canremove")) {
-                               IkiWiki::Plugin::remove::check_canremove(defined $page ? $page : $file, $cgi, $session);
-                               next;
-                       }
-               }
-               else {
-                       error "unknown action ".$change->{action};
-               }
-               
-               error sprintf(gettext("you are not allowed to change %s"), $file);
-       }
 
+       IkiWiki::check_canchange(
+               cgi => $cgi,
+               session => $session,
+               changes => [IkiWiki::rcs_receive()]
+       );
        exit 0;
 }
 
index a653ab2da02e542828349c3d9f3ac200340608f4..8e8336b994070f442061e8bc2929525a77033549 100644 (file)
@@ -5,7 +5,6 @@ package IkiWiki;
 use warnings;
 use strict;
 use IkiWiki;
-use Encode;
 
 my (%backlinks, %rendered);
 our %brokenlinks;
@@ -94,7 +93,8 @@ sub genpage ($$) {
        }
        if (defined $config{historyurl} && length $config{historyurl}) {
                my $u=$config{historyurl};
-               $u=~s/\[\[file\]\]/$pagesources{$page}/g;
+               my $p=uri_escape_utf8($pagesources{$page});
+               $u=~s/\[\[file\]\]/$p/g;
                $template->param(historyurl => $u);
                $actions++;
        }
@@ -174,15 +174,15 @@ sub scan ($) {
                }
                delete $typedlinks{$page};
 
+               # Preprocess in scan-only mode.
+               preprocess($page, $page, $content, 1);
+
                run_hooks(scan => sub {
                        shift->(
                                page => $page,
                                content => $content,
                        );
                });
-
-               # Preprocess in scan-only mode.
-               preprocess($page, $page, $content, 1);
        }
        else {
                will_render($file, $file, 1);
@@ -759,7 +759,10 @@ sub refresh () {
        my ($new, $internal_new)=find_new_files($files);
        my ($del, $internal_del)=find_del_files($pages);
        my ($changed, $internal_changed)=find_changed($files);
-       run_hooks(needsbuild => sub { shift->($changed) });
+       run_hooks(needsbuild => sub {
+               my $ret=shift->($changed, [@$del, @$internal_del]);
+               $changed=$ret if ref $ret eq 'ARRAY';
+       });
        my $oldlink_targets=calculate_old_links($changed, $del);
 
        foreach my $file (@$changed) {
index 7af744f6ab18fe2bc0132891ce7c4fc3a461040f..48f3d4634da0371f988ba16ae1107849fcd24172 100644 (file)
@@ -124,6 +124,27 @@ sub merge ($) {
        }
 }
 
+sub disabled_plugins (@) {
+       # Handles running disable hooks of plugins that were enabled
+       # previously, but got disabled when a new setup file was loaded.
+       if (exists $config{setupfile} && @_) {
+               # Fork a child to load the disabled plugins.
+               my $pid=fork();
+               if ($pid == 0) {
+                       foreach my $plugin (@_) {
+                               eval { IkiWiki::loadplugin($plugin, 1) };
+                               if (exists $IkiWiki::hooks{disable}{$plugin}{call}) {
+                                       eval { $IkiWiki::hooks{disable}{$plugin}{call}->() };
+                               }
+                       }
+                       exit(0);
+               }
+               else {
+                       waitpid $pid, 0;
+               }
+       }
+}
+
 sub getsetup () {
        # Gets all available setup data from all plugins. Returns an
        # ordered list of [plugin, setup] pairs.
@@ -134,6 +155,7 @@ sub getsetup () {
         $config{syslog}=undef;
 
        # Load all plugins, so that all setup options are available.
+       my %original_loaded_plugins=%IkiWiki::loaded_plugins;
        my @plugins=IkiWiki::listplugins();
        foreach my $plugin (@plugins) {
                eval { IkiWiki::loadplugin($plugin, 1) };
@@ -141,6 +163,7 @@ sub getsetup () {
                        my @s=eval { $IkiWiki::hooks{checkconfig}{$plugin}{call}->() };
                }
        }
+       %IkiWiki::loaded_plugins=%original_loaded_plugins;
        
        my %sections;
        foreach my $plugin (@plugins) {
index 390f2ea39a3233ba4eaf649d45fa8adc5ecb473a..80091f5a6cc8240eb367eee653e07859354937a4 100644 (file)
@@ -8,6 +8,26 @@ use File::Spec;
 use Data::Dumper;
 use IkiWiki;
 
+sub gen_wrappers () {
+       debug(gettext("generating wrappers.."));
+       my %origconfig=(%config);
+       foreach my $wrapper (@{$config{wrappers}}) {
+               %config=(%origconfig, %{$wrapper});
+               $config{verbose}=$config{setupverbose}
+                       if exists $config{setupverbose};
+               $config{syslog}=$config{setupsyslog}
+                       if exists $config{setupsyslog};
+               delete @config{qw(setupsyslog setupverbose wrappers genwrappers rebuild)};
+               checkconfig();
+               if (! $config{cgi} && ! $config{post_commit} &&
+                   ! $config{test_receive}) {
+                       $config{post_commit}=1;
+               }
+               gen_wrapper();
+       }
+       %config=(%origconfig);
+}
+
 sub gen_wrapper () {
        $config{srcdir}=File::Spec->rel2abs($config{srcdir});
        $config{destdir}=File::Spec->rel2abs($config{destdir});
@@ -29,6 +49,7 @@ sub gen_wrapper () {
        push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI
                       CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE
                       HTTP_COOKIE REMOTE_USER HTTPS SSL_CLIENT_S_DN_CN REDIRECT_STATUS
+                      HTTP_HOST SERVER_PORT HTTPS
                       REDIRECT_URL} if $config{cgi};
        my $envsave="";
        foreach my $var (@envsave) {
@@ -108,7 +129,7 @@ EOF
 #include <sys/file.h>
 
 extern char **environ;
-char *newenviron[$#envsave+6];
+char *newenviron[$#envsave+7];
 int i=0;
 
 void addenv(char *var, char *val) {
@@ -127,6 +148,7 @@ $check_commit_hook
 @wrapper_hooks
 $envsave
        newenviron[i++]="HOME=$ENV{HOME}";
+       newenviron[i++]="PATH=$ENV{PATH}";
        newenviron[i++]="WRAPPED_OPTIONS=$configstring";
 
 #ifdef __TINYC__
index 4b2e2854485de200f9ccebabd6b80686795f5f97..7906f65934f5cf549b697c507b7321b7b97bafcb 100755 (executable)
@@ -13,6 +13,18 @@ pure_install:: extra_install
 
 VER=$(shell perl -e '$$_=<>;print m/\((.*?)\)/'<debian/changelog)
 
+# Parameterized programs used by Makefile.
+FIND?=find
+SED?=sed
+
+# Additional configurable path variables.
+W3M_CGI_BIN?=$(PREFIX)/lib/w3m/cgi-bin
+
+tflag=$(shell if [ -n "$$NOTAINT" ] && [ "$$NOTAINT" != 1 ]; then printf -- "-T"; fi)
+extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:NYTProf"; fi)
+outprogs=ikiwiki.out ikiwiki-transition.out ikiwiki-calendar.out
+scripts=ikiwiki-update-wikilist ikiwiki-makerepo
+
 PROBABLE_INST_LIB=$(shell \\
        if [ "$(INSTALLDIRS)" = "perl" ]; then \\
                echo $(INSTALLPRIVLIB); \\
@@ -23,14 +35,6 @@ PROBABLE_INST_LIB=$(shell \\
        fi \\
 )
 
-# Additional configurable path variables.
-W3M_CGI_BIN?=$(PREFIX)/lib/w3m/cgi-bin
-
-tflag=$(shell if [ -n "$$NOTAINT" ] && [ "$$NOTAINT" != 1 ]; then printf -- "-T"; fi)
-extramodules=$(shell if [ "$$PROFILE" = 1 ]; then printf -- "-d:NYTProf"; fi)
-outprogs=ikiwiki.out ikiwiki-transition.out ikiwiki-calendar.out
-scripts=ikiwiki-update-wikilist ikiwiki-makerepo
-
 %.out: %.in
        ./pm_filter $(PREFIX) $(VER) $(PROBABLE_INST_LIB) < $< > $@
        chmod +x $@
@@ -46,7 +50,7 @@ extra_build: $(outprogs) ikiwiki.setup docwiki
        ./mdwn2man ikiwiki-update-wikilist 1 doc/ikiwiki-update-wikilist.mdwn > ikiwiki-update-wikilist.man
        ./mdwn2man ikiwiki-calendar 1 doc/ikiwiki-calendar.mdwn > ikiwiki-calendar.man
        $(MAKE) -C po
-       sed -i.bkp "s/Version:.*/Version: $$(perl -e '$$_=<>;print m/\((.*?)\)/'<debian/changelog)/" ikiwiki.spec
+       $(SED) -i.bkp "s/Version:.*/Version: $$(perl -e '$$_=<>;print m/\((.*?)\)/'<debian/changelog)/" ikiwiki.spec
        rm -f ikiwiki.spec.bkp
        
 docwiki:
@@ -63,9 +67,9 @@ myclean: clean
 
 underlay_install:
        install -d $(DESTDIR)$(PREFIX)/share/ikiwiki
-       for dir in `cd underlays && find . -follow -type d ! -regex '.*\.svn.*'`; do \
+       for dir in `cd underlays && $(FIND) . -follow -type d ! -regex '.*\.svn.*'`; do \
                install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
-               for file in `find underlays/$$dir -follow -maxdepth 1 -type f`; do \
+               for file in `$(FIND) underlays/$$dir -follow -maxdepth 1 -type f`; do \
                        cp -aL $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir 2>/dev/null || \
                        install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
                done; \
@@ -80,12 +84,15 @@ underlay_install:
                fi \
        done
 
-       # Themes have their style.css appended to the normal one.
+       # Themes have their base.css (if present) and then
+       # style.css appended to the normal one.
        for theme in themes/*; do \
                install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme; \
                for file in $$theme/*; do \
                        if echo "$$file" | grep -q style.css; then \
-                               (cat doc/style.css; cat $$file) >> $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
+                               (cat doc/style.css; cat $$theme/base.css 2>/dev/null; cat $$file) >> $(DESTDIR)$(PREFIX)/share/ikiwiki/$$theme/style.css; \
+                       elif echo "$$file" | grep -q base.css; then \
+                               :; \
                        elif [ -f "$$file" ]; then \
                                cp -aL $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$file 2>/dev/null || \
                                install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$file; \
@@ -95,26 +102,26 @@ underlay_install:
 
 extra_install: underlay_install
        # Install example sites.
-       for dir in `cd doc/examples; find . -type d ! -regex '.*\.svn.*'`; do \
+       for dir in `cd doc/examples; $(FIND) . -type d ! -regex '.*\.svn.*'`; do \
                install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/examples/$$dir; \
        done
-       for file in `cd doc/examples; find . -type f ! -regex '.*\.svn.*'`; do \
+       for file in `cd doc/examples; $(FIND) . -type f ! -regex '.*\.svn.*'`; do \
                cp -aL doc/examples/$$file $(DESTDIR)$(PREFIX)/share/ikiwiki/examples/$$file 2>/dev/null || \
                install -m 644 doc/examples/$$file $(DESTDIR)$(PREFIX)/share/ikiwiki/examples/$$file; \
        done
 
-       for dir in `find templates -follow -type d ! -regex '.*\.svn.*'`; do \
+       for dir in `$(FIND) templates -follow -type d ! -regex '.*\.svn.*'`; do \
                install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
-               for file in `find $$dir -follow -maxdepth 1 -type f`; do \
+               for file in `$(FIND) $$dir -follow -maxdepth 1 -type f`; do \
                        install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
                done; \
        done
        
        install -d $(DESTDIR)$(PREFIX)/lib/ikiwiki/plugins
-       for file in `find plugins -maxdepth 1 -type f ! -path plugins/.\* ! -name \*demo\* -name \*.py`; do \
+       for file in `$(FIND) plugins -maxdepth 1 -type f ! -path plugins/.\* ! -name \*demo\* -name \*.py`; do \
                install -m 644 $$file $(DESTDIR)$(PREFIX)/lib/ikiwiki/plugins; \
        done
-       for file in `find plugins -maxdepth 1 -type f ! -path plugins/.\* ! -name \*demo\* ! -name \*.py ! -name \*.pyc`; do \
+       for file in `$(FIND) plugins -maxdepth 1 -type f ! -path plugins/.\* ! -name \*demo\* ! -name \*.py ! -name \*.pyc`; do \
                install -m 755 $$file $(DESTDIR)$(PREFIX)/lib/ikiwiki/plugins; \
        done
 
@@ -136,7 +143,7 @@ extra_install: underlay_install
 
        install -d $(DESTDIR)$(PREFIX)/bin
        for prog in $(outprogs) $(scripts); do \
-               install $$prog $(DESTDIR)$(PREFIX)/bin/$$(echo $$prog | sed 's/\.out//'); \
+               install $$prog $(DESTDIR)$(PREFIX)/bin/$$(echo $$prog | $(SED) 's/\.out//'); \
        done
 
        $(MAKE) -C po install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
diff --git a/README b/README
index 7efc59a519626c77439cb9afcb4894068e9e394e..611b9a45bf8188d6bf5e3bb48ac9745d67322a37 100644 (file)
--- a/README
+++ b/README
@@ -14,6 +14,10 @@ A few special variables you can set while using the Makefile.PL:
   unless your perl is less buggy than mine -- see
   http://bugs.debian.org/411786)
 
+  MAKE, FIND, and SED can be used to specify where you have the GNU
+  versions of those tools installed, if the normal make, find, and sed
+  are not GNU.
+
   There are also other variables supported by MakeMaker, including PREFIX,
   INSTALL_BASE, and DESTDIR. See ExtUtils::MakeMaker(3).
 
index 980074ec3affe8a7426586166903a1c9884361ed..0eb83ded614a2b4e2b2397bf8d2db897984317db 100644 (file)
@@ -36,7 +36,7 @@ IkiWiki::Setup::Automator->import(
        cgiurl => "http://$domain/~$ENV{USER}/$wikiname_short/ikiwiki.cgi",
        cgi_wrapper => "$ENV{HOME}/public_html/$wikiname_short/ikiwiki.cgi",
        adminemail => "$ENV{USER}\@$domain",
-       add_plugins => [qw{goodstuff websetup comments opendiscussion blogspam calendar sidebar}],
+       add_plugins => [qw{goodstuff websetup comments blogspam calendar sidebar}],
        disable_plugins => [qw{}],
        libdir => "$ENV{HOME}/.ikiwiki",
        rss => 1,
@@ -49,6 +49,6 @@ IkiWiki::Setup::Automator->import(
        archive_pagespec => "page(posts/*) and !*/Discussion",
        global_sidebars => 0,
        discussion => 0,
-       locked_pages => "*",
+       locked_pages => "* and !postcomment(*)",
        tagbase => "tags",
 )
index 8013e5cdd67571e99ea6bb2eb93f111113560c18..4ed9bb8b2bb17728f675914b7292ca6f91b6e97d 100644 (file)
@@ -1,4 +1,230 @@
-ikiwiki (3.20100705) UNRELEASED; urgency=low
+ikiwiki (3.20101232) UNRELEASED; urgency=low
+
+  * tag: Do not include tagbase in rss/atom category tags. (Giuseppe Bilotta)
+  * tag: Improve display of tags with a slash in their names.
+    (Giuseppe Bilotta)
+  * Fix base url when previewing. Was broken by base changes in last release.
+  * Fix redirect to use a full url. Was broken (in theory) by baseurl
+    changes in last release.
+  * Temporarily revert one part of the multiple url support in the last
+    release. Non-edit pages are now back to having `<base>` set to
+    the site's main url.
+  * Fix permalinks to recentchanges items and comments, broken by last
+    release.
+  * Export three cgi env vars needed for CGI->url to work.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 04 Jan 2011 16:00:55 -0400
+
+ikiwiki (3.20101231) unstable; urgency=low
+
+  * Better support for serving the same site on multiple urls. (Such as
+    a http and a https url, or a ipv4 and an ipv6 url.)
+    (Thanks, smcv)
+  * API: urlto without a defined second parameter now generates an url
+    that starts with "/" (when possible; eg when the site's url and cgiurl
+    are on the same domain).
+  * Now when users log in via https, ikiwiki sends a secure cookie, that can
+    only be used over https. If the user switches to using http, they will
+    need to re-login. (smcv)
+  * inline: Display feed buttons for nested inlines, linking to the inlined
+    page's feed. (Giuseppe Bilotta)
+  * goldtype: New theme, based on blueview, contributed by Lars Wirzenius.
+  * po: do not override homepage title when it was overridden. (intrigeri)
+  * Set HTML::Template's parent_global_vars option to allow using parameters
+    like title_overridden that do not appear on the template. (intrigeri)
+    (See https://rt.cpan.org/Public/Bug/Display.html?id=64158)
+  * inline: Force an absolute page location when the inline postform is used.
+  * editpage, comment: Clean up title when editing or creating a page or
+    comment.
+  * teximg: Use `\[` and `\]` instead of not recommended `$$`. (Paul Menzel)
+    Closes: #596084
+  * monotone: Improve version parsing to support patch and development
+    versions of the monotone binary. (tommyd3mdi)
+  * highlight: Support highlight 3.2+svn19 (note that released version 3.2
+    is not supported). Closes: #605779 (David Bremner)
+  * Add a second parameter to the rcs_diff hook, and avoid bloating memory
+    reading in enormous commits.
+  * git: Fix bug involving attempting to web revert a commit that included
+    changes to attachments.
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 31 Dec 2010 21:23:37 -0400
+
+ikiwiki (3.20101201) unstable; urgency=low
+
+  * meta: Fix calling of htmlscrubber to pass the page parameter.
+    The change of the htmlscrubber to look at page rather than destpage
+    caused htmlscrubber_skip to not work for meta directives.
+
+ -- Joey Hess <joeyh@debian.org>  Wed, 01 Dec 2010 20:28:01 -0400
+
+ikiwiki (3.20101129) unstable; urgency=low
+
+  * websetup: Fix encoding problem when restoring old setup file.
+  * more: Add pages parameter to limit where the more is displayed.
+    (thanks, dark)
+  * Fix escaping of filenames in historyurl. (Thanks, aj)
+  * inline: Improve RSS url munging to use a proper html parser,
+    and support all elements that HTML::Tagset knows about. 
+    (Which doesn't include html5 just yet, but then the old version
+    didn't either.) Bonus: 4 times faster than old regexp method.
+  * Optimise glob() pagespec. (Thanks, Kathryn and smcv)
+  * highlight: Support new format of filetypes.conf used by version 3.2
+    of the highlight package.
+  * edittemplate: Fix crash if using a .tmpl file or other non-page file
+    as a template for a new page.
+  * git: Fix temp file location.
+  * rename: Fix to pass named parameters to rcs_commit.
+  * git: Avoid adding files when committing, so as not to implicitly add
+    files like recentchanges files that are not normally checked in,
+    when fixing links after rename.
+
+ -- Joey Hess <joeyh@debian.org>  Mon, 29 Nov 2010 13:59:10 -0400
+
+ikiwiki (3.20101112) unstable; urgency=HIGH
+
+  * txt: Fix display when used inside a format directive.
+  * highlight: Ensure that other, more-specific format plugins,
+    like txt are used in preference to this one in case of ties.
+  * htmltidy, sortnaturally: Add missing checkconfig hook
+    registration. Closes: #601912
+    (Thanks, Craig Lennox and Tuomas Jormola)
+  * git: Use author date, not committer date. Closes: #602012
+    (Thanks, Tuomas Jormola)
+  * Fix htmlscrubber_skip to be matched on the source page, not the page it is
+    inlined into. Should allow setting to "* and !comment(*)" to scrub
+    comments, but leave your blog posts unscrubbed, etc. CVE-2010-1673
+  * comments: Make postcomment() pagespec work when previewing a comment,
+    including during moderation. CVE-2010-1673
+  * comments: Make comment() pagespec also match comments that are being
+    posted. CVE-2010-1673
+
+ -- Joey Hess <joeyh@debian.org>  Fri, 12 Nov 2010 00:36:06 -0400
+
+ikiwiki (3.20101023) unstable; urgency=low
+
+  * Fix typo that broke anonymous git push.
+  * Fix web reversion when the srcdir is in a subdir of the git repo.
+
+ -- Joey Hess <joeyh@debian.org>  Sat, 23 Oct 2010 16:36:50 -0400
+
+ikiwiki (3.20101019) unstable; urgency=low
+
+  * Fix test suite failure on other side of date line.
+  * htmltidy: Allow configuring tidy parameters in setup file.
+    (W. Trevor King)
+  * Updated French program translation. Closes: #598918
+  * git: Added new rcs_revert and rcs_preprevert hooks.
+  * recentchanges: Add revert buttons to RecentChanges page, and
+    implement web-based reversion interface.
+  * Thanks to Peter Gammie for his assistance with the web-based reversion
+    feature.
+  * actiontabs: More consistent styling of Hn tags.
+  * websetup: Fix saving of advanced mode changes.
+  * websetup: Fix defaults of checkboxes in advanced mode.
+  * monotone: Fix recentchanges page when the srcdir is not at the top
+    of the monotone workspace. Thanks, tommyd.
+  * img: If a class is specified, don't also put the img in the img
+    class.
+  * auto-blog.setup: Don't enable opendiscussion by default; require users be
+    logged in to post comments.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 19 Oct 2010 02:32:23 -0400
+
+ikiwiki (3.20100926) unstable; urgency=low
+
+  * meta: Ensure that the url specified by xrds-location is absolute.
+  * attachment: Fix attachment file size display.
+  * Propigate PATH into wrapper.
+  * htmlbalance: Fix compatibility with HTML::Tree 4.0. (smcv)
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 26 Sep 2010 23:02:54 -0400
+
+ikiwiki (3.20100915) unstable; urgency=low
+
+  * needsbuild hook interface changed; the hooks should now return
+    the modified array of things that need built. (Backwards compatibility
+    code keeps plugins using the old interface working.)
+  * Remove PATH overriding code in ikiwiki script that was present to make
+    perl taint checking happy, but taint checking is disabled.
+  * teximg: Use Unicode UTF-8 encoding by default. Closes: #596067
+    Thanks, Paul Menzel.
+  * po: Make the po_master_language use a langpair like "en|English",
+    so it can be configured via the web.
+  * po: Allow enabling via web setup.
+  * po: Auto-upgrade old format settings to new formats when writing
+    setup file.
+  * Pass array of names of files that have been deleted to needsbuild hook
+    as second parameter, to allow for plugins that needs access to this
+    information earlier than the delete hook.
+  * actiontabs: Improve tab padding.
+  * blueview: Fix display of links to translated pages in the page header.
+  * Set isPermaLink="no" for guids in rss feeds. 
+  * blogspam: Fix crash when content contained utf-8.
+  * external: Disable RPC::XML's "smart" encoding, which sent ints
+    for strings that contained only a number, fixing a longstanding crash
+    of the rst plugin.
+  * git: When updating from remote, use git pull --prune, to avoid possible
+    errors from conflicting obsolete remote branches.
+  * cutpaste: Fix bug that occured in some cases involving inlines when
+    text was pasted on a page before being cut.
+
+ -- Joey Hess <joeyh@debian.org>  Wed, 15 Sep 2010 16:29:01 -0400
+
+ikiwiki (3.20100831) unstable; urgency=low
+
+  * filecheck: Fall back to using the file command if the freedesktop
+    magic file cannot identify a file.
+  * flattr: New plugin. (Thanks to jaywalk for the initial implementation
+    at a flattr plugin! This one is less configurable, but simpler.)
+  * smiley: warn instead of error for missing smileys (Giuseppe Bilotta)
+  * openid: Syntax tweak to the javascript code to make it work with MSIE 7
+    (and MSIE 8 in compat mode). Thanks to Iain McLaren for reporting
+    the bug and providing access to debug it.
+  * style.css: Use relative, not absolute font sizes. Thanks, Giuseppe Bilotta.
+  * htmlscrubber: Do not scrub url anchors that contain colons.
+  * Danish translation update. Closes: #594673
+  * highlight: Make location of highlight's files configurable in setup
+    file to allow for nonstandard installations.
+  * Allow "link(.)" and similar PageSpecs. Thanks, Giuseppe Bilotta.
+  * Run the preprocess hooks in scan mode *before* the scan hooks.
+    This allows the po plugin to register a scan hook that runs
+    last and rescans pages after all data from the first scan pass is
+    completed. This avoids the po plugin needing to rebuild some pages.
+    (intrigeri)
+  * po: Fix some bugs that affected l10n.ikiwiki.info's unusual
+    setup. (intrigeri)
+  * t/bazaar.t: Work around bzr 2.2.0's new requirement to configure
+    bzr whoami before committing.
+  * httpauth: Avoid redirecting the user to the cgiauthurl if
+    they already have a login session.
+
+ -- Joey Hess <joeyh@debian.org>  Tue, 31 Aug 2010 14:22:47 -0400
+
+ikiwiki (3.20100815) unstable; urgency=medium
+
+  * Fix po test suite to not assume ikiwiki's underlay is already installed.
+    Closes: #593047
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 15 Aug 2010 11:42:55 -0400
+
+ikiwiki (3.20100804) unstable; urgency=low
+
+  * template: Fix dependency tracking. Broken in version 3.20100427.
+  * po: The po_slave_languages setting is now a list, so the order of
+    translated languages can be controlled. (intrigeri)
+  * git: Fix gitweb historyurl examples so "diff to current" links work.
+    (Thanks jrayhawk)
+  * meta: Allow syntax closer to html meta to be used.
+  * Add new disable hook, allowing plugins to perform cleanup after they
+    have been disabled.
+  * Use Digest::SHA built into perl rather than external Digest::SHA1
+    to simplify dependencies. Closes: #591040
+  * Fixes a bug that prevented matching deleted pages when using the page()
+    PageSpec.
+
+ -- Joey Hess <joeyh@debian.org>  Wed, 04 Aug 2010 09:20:52 -0400
+
+ikiwiki (3.20100722) unstable; urgency=low
 
   * img: Add a margin around images displayed by this directive.
   * comments: Added commentmoderation directive for easy linking to the
@@ -20,11 +246,11 @@ ikiwiki (3.20100705) UNRELEASED; urgency=low
     the caching problem that was added to work around). Closes: #588623
   * Made much more robust in cases where multiple source files produce
     conflicting files/directories in the destdir.
-  * Updated French program translation from Philippe Batailler. Closes: #589423
+  * Updated French translation from Philippe Batailler. Closes: #589423
   * po: Fix selflink display on tranlsated pages. (intrigeri)
   * Avoid showing 'Add a comment' link at the bottom of the comment post form.
 
- -- Joey Hess <joeyh@debian.org>  Mon, 05 Jul 2010 13:59:42 -0400
+ -- Joey Hess <joeyh@debian.org>  Thu, 22 Jul 2010 16:49:05 -0400
 
 ikiwiki (3.20100704) unstable; urgency=low
 
index 0562a4a99bbb3b3e35aba5c6ec858bb01646cc8f..71c9e18bbf9bf09c818d65f15010d54f470b9ae1 100644 (file)
@@ -10,7 +10,7 @@ Build-Depends-Indep: dpkg-dev (>= 1.9.0), libxml-simple-perl,
   libfile-chdir-perl,
 Maintainer: Joey Hess <joeyh@debian.org>
 Uploaders: Josh Triplett <josh@freedesktop.org>
-Standards-Version: 3.9.0
+Standards-Version: 3.9.1
 Homepage: http://ikiwiki.info/
 Vcs-Git: git://git.ikiwiki.info/
 Vcs-Browser: http://git.ikiwiki.info/?p=ikiwiki
@@ -32,9 +32,9 @@ Suggests: viewvc | gitweb | viewcvs, libsearch-xapian-perl,
   xapian-omega (>= 1.0.5), librpc-xml-perl, libtext-wikiformat-perl,
   python, python-docutils, polygen, tidy, libhtml-tree-perl,
   libxml-feed-perl, libmailtools-perl, perlmagick,
-  libfile-mimeinfo-perl, libcrypt-ssleay-perl,
+  libfile-mimeinfo-perl, file, libcrypt-ssleay-perl,
   liblocale-gettext-perl (>= 1.05-1), libtext-typography-perl,
-  libtext-csv-perl, libdigest-sha1-perl, graphviz, libnet-amazon-s3-perl,
+  libtext-csv-perl, graphviz, libnet-amazon-s3-perl,
   libsparkline-php, texlive, dvipng, libtext-wikicreole-perl,
   libsort-naturally-perl, libtext-textile-perl, libhighlight-perl,
   po4a (>= 0.35-1), gettext, libyaml-perl
index 74391e2cfe6dc870339dd35ff66e4ffc22bd520e..300dd110b1b5e1489ecc6d8a934ae4f595d2462f 100644 (file)
@@ -214,6 +214,10 @@ Files: underlays/themes/blueview/*
 Copyright: © 2009,2010 Bernd Zeimetz
 License: GPL-2+
 
+Files: underlays/themes/goldtype/*
+Copyright: © Lars Wirzenius
+License: GPL-2+
+
 License: BSD-C2
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
index e478d98c32e0d5c615621020213d7d9efde03bbd..8508d0dcd6df94e3cc07da36c5139e87274f2e0a 100644 (file)
@@ -1,5 +1,15 @@
 Lighttpd apparently sets REDIRECT_STATUS=200 for the server.error-handler-404 page. This breaks the [[plugins/404]] plugin which checks this variable for 404 before processing the URI. It also doesn't seem to set REDIRECT_URL.
 
+> For what it's worth, the first half is <http://redmine.lighttpd.net/issues/1828>.
+> One workaround would be to make this script your 404 handler:
+>
+>     #!/bin/sh
+>     REDIRECT_STATUS=404; export REDIRECT_STATUS
+>     REDIRECT_URL="$SERVER_NAME$REQUEST_URI"; export REDIRECT_URL
+>     exec /path/to/your/ikiwiki.cgi "$@"
+>
+> --[[smcv]]
+
 I was able to fix my server to check the REQUEST_URI for ikiwiki.cgi and to continue processing if it was not found, passing $ENV{SEVER_NAME} . $ENV{REQUEST_URI} as the first parameter to cgi_page_from_404. However, my perl is terrible and I just made it work rather than figuring out exactly what to do to get it to work on both lighttpd and apache.
 
 This is with lighttpd 1.4.19 on Debian.
diff --git a/doc/bugs/Error:_no_text_was_copied_in_this_page_--_missing_page_dependencies.mdwn b/doc/bugs/Error:_no_text_was_copied_in_this_page_--_missing_page_dependencies.mdwn
new file mode 100644 (file)
index 0000000..0082eed
--- /dev/null
@@ -0,0 +1,46 @@
+That one has bitten me for some time; here is the minimal testcase.  There is
+also an equivalent (I suppose) problem when using another plugin, but I hope
+it's enough to track it down for this one.
+
+    $ tar -xj < [bug-dep_order.tar.bz2](http://schwinge.homeip.net/~thomas/tmp/bug-dep_order.tar.bz2)
+    $ cd bug-dep_order/
+    $ ./render_locally
+    [...]
+    $ find "$PWD".rendered/ -print0 | xargs -0 grep 'no text was copied'
+    $ [no output]
+    $ touch news/2010-07-31.mdwn 
+    $ ./render_locally 
+    refreshing wiki..
+    scanning news/2010-07-31.mdwn
+    building news/2010-07-31.mdwn
+    building news.mdwn, which depends on news/2010-07-31
+    building index.mdwn, which depends on news/2010-07-31
+    done
+    $ find "$PWD".rendered/ -print0 | xargs -0 grep 'no text was copied'
+    /home/thomas/tmp/hurd-web/bug-dep_order.rendered/news.html:<p>[[!paste <span class="error">Error: no text was copied in this page</span>]]</p>
+    /home/thomas/tmp/hurd-web/bug-dep_order.rendered/news.html:<p>[[!paste <span class="error">Error: no text was copied in this page</span>]]</p>
+
+This error shows up only for *news.html*, but not in *news/2010-07-31* or for
+the aggregation in *index.html* or its RSS and atom files.
+
+--[[tschwinge]]
+
+> So the cutpaste plugin, in order to support pastes
+> that come before the corresponding cut in the page,
+> relies on the scan hook being called for the page
+> before it is preprocessed.
+> 
+> In the case of an inline, this doesn't happen, if
+> the page in question has not changed.
+> 
+> Really though it's not just inline, it's potentially anything
+> that preprocesses content. None of those things guarantee that
+> scan gets re-run on it first. 
+> 
+> I think cutpaste is going beyond the intended use of scan hooks,
+> which is to gather link information, not do arbitrary data collection.
+> Requiring scan be run repeatedly could be a lot more work.
+> 
+> Using `%pagestate` to store the cut content when scanning would be 
+> one way to fix this bug. It would mean storing potentially big chunks 
+> of page content in the indexdb. [[done]] --[[Joey]]  
diff --git a/doc/bugs/Highlight_extension_uses_hard_coded_paths.mdwn b/doc/bugs/Highlight_extension_uses_hard_coded_paths.mdwn
new file mode 100644 (file)
index 0000000..275661f
--- /dev/null
@@ -0,0 +1,3 @@
+The [[plugins/highlight]] plugin hard codes some paths up the top of the plugin.  This means that you need to edit the ikiwiki source if you have highlight installed in a non-standard location (e.g. if you have done a user-level install of the highlight package).
+
+> configurable now, [[done]] --[[Joey]] 
diff --git a/doc/bugs/More_permission_checking.mdwn b/doc/bugs/More_permission_checking.mdwn
new file mode 100644 (file)
index 0000000..6cd6cb0
--- /dev/null
@@ -0,0 +1,17 @@
+I'm often confused about permissions and I wish ikiwiki could stamp it's foot down and ensure all the permissions are correctly (canonically?) setup.
+
+I keep ending up having to `sudo chown -R :www-data` and `sudo chmod -R g+w` on srcdir, destdir. I'm never quite sure what is the best practice for the srcdirs' `/srv/git/` is. Currently everything looks like `hendry:www-data` with ug+rw.
+
+I think I've triggered these problems by (not thinking and) running `ikiwiki --rebuild --setup /home/hendry/.ikiwiki/mywiki.setup` as my user.
+
+I don't know if there can be some lookup with `/etc/ikiwiki/wikilist`.  Though shouldn't everything be under the `www-data` group in reality?
+
+Also when I use `sudo ikiwiki -setup /etc/ikiwiki/auto.setup`, I think I create a ton of problems for myself since everything is created as the root user, right? And `/etc/ikiwiki/wikilist` doesn't seem to have the latest created wiki added. I have to reluctantly manually do this.
+
+> You should never make files be owned by www-data user or group.
+> Ikiwiki is designed to run as a single user, which can just
+> be your login user; all files should be owned by that user, the
+> ikiwiki.cgi and other wrappers suid to that user. And then there are
+> never any permissions problems. --[[Joey]]
+
+[[done]]
diff --git a/doc/bugs/UTF-16_and_UTF-32_are_unhandled.mdwn b/doc/bugs/UTF-16_and_UTF-32_are_unhandled.mdwn
new file mode 100644 (file)
index 0000000..21df334
--- /dev/null
@@ -0,0 +1,20 @@
+Wide characters should probably be supported, or, at the very least, warned about.
+
+Test case:
+
+    mkdir -p ikiwiki-utf-test/raw ikiwiki-utf-test/rendered
+    for page in txt mdwn; do
+      echo hello > ikiwiki-utf-test/raw/$page.$page
+      for text in 8 16 16BE 16LE 32 32BE 32LE; do
+        iconv -t UTF$text ikiwiki-utf-test/raw/$page.$page > ikiwiki-utf-test/raw/$page-utf$text.$page;
+      done
+    done
+    ikiwiki --verbose --plugin txt --plugin mdwn ikiwiki-utf-test/raw/ ikiwiki-utf-test/rendered/
+    www-browser ikiwiki-utf-test/rendered/ || x-www-browser ikiwiki-utf-test/rendered/
+    # rm -r ikiwiki-utf-test/ # some browsers rather stupidly daemonize themselves, so this operation can't easily be safely automated
+
+BOMless LE and BE input is probably a lost cause.
+
+Optimally, UTF-16 (which is ubiquitous in the Windows world) and UTF-32 should be fully supported, probably by converting to mostly-UTF-8 and using `&#xXXXX;` or `&#DDDDD;` XML escapes where necessary.
+
+Suboptimally, UTF-16 and UTF-32 should be converted to UTF-8 where cleanly possible and a warning printed where impossible.
diff --git a/doc/bugs/__34__Currently_enabled_SSH_keys:__34___shows_only_first_139_characters_of_each_key.mdwn b/doc/bugs/__34__Currently_enabled_SSH_keys:__34___shows_only_first_139_characters_of_each_key.mdwn
new file mode 100644 (file)
index 0000000..3c3352f
--- /dev/null
@@ -0,0 +1,12 @@
+At least at http://free-thursday.pieni.net/ikiwiki.cgi the "SSH keys" page shows only the first 139 characters of each SSH key. I'm using iceweasel in 1024x768 resolution and there are not scrollbars visible.
+
+Please contact me at timo.lindfors@iki.fi
+
+> I have access to the same wiki, and do not see the problem Timo sees. I see 380 chars of the SSH keys, and do have a scrollbar.
+> Weird. --liw
+
+> Also, that's a Branchable.com site and the bug, if any is
+> in ikiwiki-hosting's plugin, not ikiwiki proper. Moved
+> [here](http://ikiwiki-hosting.branchable.com/bugs/__34__Currently_enabled_SSH_keys:__34___shows_only_first_139_characters_of_each_key/) --[[Joey]] 
+
+[[!tag done]]
diff --git a/doc/bugs/__34__First_post__34___deletion_does_not_refresh_front_page.mdwn b/doc/bugs/__34__First_post__34___deletion_does_not_refresh_front_page.mdwn
new file mode 100644 (file)
index 0000000..2367335
--- /dev/null
@@ -0,0 +1,6 @@
+When I created an ikiwiki site (on Branchable) using the blog template, it added a "First post", which was fine.
+Deleting that post removed it, but the front page did not get the re-generated, so it was still there.
+--[[liw]]
+
+> This is a bug involving the `page()` pagespec. Deleted
+> pages matching this pagespec are not noticed. --[[Joey]] [[done]]
diff --git a/doc/bugs/absolute_sizes_in_default_CSS.mdwn b/doc/bugs/absolute_sizes_in_default_CSS.mdwn
new file mode 100644 (file)
index 0000000..bb3c0c7
--- /dev/null
@@ -0,0 +1,39 @@
+While toying around with some font sizes on my persona ikiwiki I discovered that some font sizes in the default CSS are fixed rather than relative. Here's a git patch that replaces them with relative font sizes (assuming the default 12pt/16px base font size recommended by the W3C):
+
+[[done]] --[[Joey]] 
+
+<pre>
+From 01c14db255bbb727d8dd1e72c3f6f2f25f07e757 Mon Sep 17 00:00:00 2001
+From: Giuseppe Bilotta &lt;giuseppe.bilotta@gmail.com&gt;
+Date: Tue, 17 Aug 2010 00:48:24 +0200
+Subject: [PATCH] Use relative font-sizes
+
+---
+ doc/style.css |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/doc/style.css b/doc/style.css
+index 66d962b..fa4b2a3 100644
+--- a/doc/style.css
++++ b/doc/style.css
+@@ -14,7 +14,7 @@ nav {
+ .header {
+       margin: 0;
+-      font-size: 22px;
++      font-size: 140%;
+       font-weight: bold;
+       line-height: 1em;
+       display: block;
+@@ -22,7 +22,7 @@ nav {
+ .inlineheader .author {
+       margin: 0;
+-      font-size: 18px;
++      font-size: 112%;
+       font-weight: bold;
+       display: block;
+ }
+-- 
+1.7.2.rc0.231.gc73d
+</pre>
diff --git a/doc/bugs/aggregate_generates_long_filenames.mdwn b/doc/bugs/aggregate_generates_long_filenames.mdwn
new file mode 100644 (file)
index 0000000..fae8333
--- /dev/null
@@ -0,0 +1,37 @@
+the [[plugins/aggregate]] plugin mashes the `title` of an aggregated post into a filename.  This results in long filenames.  I have hit a filesystem length limitation on several occasions.  Some (ab)uses of RSS, e.g., twitter,
+generate long titles.  Especially once you throw escaping into the mix:
+
+    $ ikiwiki --setup testsetup --aggregate --refresh
+    failed to write ./test/lifestream/Hidden_Features_Of_Perl__44___PHP__44___Javascript__44___C__44___C++__44___C__35____44___Java__44___Ruby___46____46____46__._aggregated.ikiwiki-new: File name too long
+    aggregation failed with code 9216
+    $ echo $?
+    25
+
+It would also appear this abrubtly terminates aggregate processing (if not ikiwiki itself).  Only after moving my test repo to `/tmp` to shorten the filename did I see newer RSS feeds (from a totally different source) picked up.
+
+
+-- [[Jon]]
+
+> I have to wonder what filesystem you have there where 147 characters
+> is a long filename. Ikiwiki already uses `POSIX::pathconf` on the srcdir
+> to look up `_PC_NAME_MAX`
+> to see if the filename is too long, and shortens it, so it seems
+> that, in additional to having a rather antique long filename limit, your
+> system also doesn't properly expose it via pathconf. Not sure what
+> ikiwiki can do here. --[[Joey]]
+
+>> This is an ext4 filesystem with default settings (which appears to mean
+>> 256 bytes for pathnames).  Despite the error saying file name, it's
+>> definitely a path issue since moving my test repo to `/tmp`from
+>> `/home/jon/wd/mine/www` hides the problem. I note the following comment
+>> in `aggregate.pm`:
+
+               # Make sure that the file name isn't too long. 
+               # NB: This doesn't check for path length limits.
+
+>> I don't fully grok the aggregate source yet, but I wouldn't rule out
+>> a bug in the path length checking, personally.  I'm happy to try and
+>> find it myself though :) -- [[Jon]]
+
+>>> Path length seems unlikely, since the max is 4096 there.
+>>> --[[Joey]] 
diff --git a/doc/bugs/argument_isn__39__t_numeric:_mixing_templates_and_creation__95__date.mdwn b/doc/bugs/argument_isn__39__t_numeric:_mixing_templates_and_creation__95__date.mdwn
new file mode 100644 (file)
index 0000000..ff98ba5
--- /dev/null
@@ -0,0 +1,62 @@
+I get the following error when building my wiki
+
+    Argument "\x{3c}\x{54}..." isn't numeric in numeric eq (==) at /usr/share/perl5/IkiWiki.pm line 2547.
+    Argument "\x{3c}\x{54}..." isn't numeric in numeric eq (==) at /usr/share/perl5/IkiWiki.pm line 2547.
+
+that line corresponds to
+
+    sub match_creation_year ($$;@) {
+       if ((localtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift) { <-- this one
+               return IkiWiki::SuccessReason->new('creation_year matched');
+       }
+
+A git bisect shows that the offending commit introduced this hunk
+
+
+    --- /dev/null
+    +++ b/templates/all_entry.mdwn
+    @@ -0,0 +1,23 @@
+    +## <TMPL_VAR year>
+    +
+    +There
+    +<TMPL_IF current>
+    +have been
+    +<TMPL_ELSE>
+    +were
+    +</TMPL_IF>
+    +[[!pagecount pages="
+    +log/* and !tagged(aggregation) and !*/Discussion and !tagged(draft)
+    +and creation_year(<TMPL_VAR year>)
+    +and !*.png and !*.jpg
+    +"]] posts
+    +<TMPL_IF current>
+    +so far
+    +</TMPL_IF>
+    +in <TMPL_VAR year>.
+    +
+    +[[!inline pages="
+    +    log/* and !tagged(aggregation) and !*/Discussion and !tagged(draft)
+    +    and creation_year(<TMPL_VAR year>)
+    +    and !*.png and !*.jpg
+    +    " archive=yes feeds=no]]
+
+The lines which feature creation_year(<TMPL_VAR year>) are most likely the culprits.  That would explain why the error was repeated twice, and would tally with the file in `templates/` being rendered, rather than the inclusionists.
+
+A workaround is to move the template outside of the srcdir into the external templates directory and include the file suffix when using it, e.g.
+
+    \[[!template id=all_entry.tmpl year=2010 current=true]]
+
+I believed (until I tested) that the [[ikiwiki/directive/if]] directive, with the `included()` test, would be an option here, E.g.
+
+    \[[!if test="included()" then="""
+    ...template...
+    """ else="""
+    Nothing to see here.
+    """]]
+
+However this doesn't work.  I assume "included" in this context means e.g. via an `inline` or `map`, not template trans-clusion. -- [[Jon]]
+
+> As far as I know, this bug was fixed in
+> 4a75dee651390b79ce4ceb1d951b02e28b3ce83a on October 20th. [[done]] --[[Joey]]
+
+>> Sorry Joey, I'll make sure to reproduce stuff against master in future. [[Jon]]
diff --git a/doc/bugs/blog_spam_plugin_not_allowing_non-ASCII_chars__63__.mdwn b/doc/bugs/blog_spam_plugin_not_allowing_non-ASCII_chars__63__.mdwn
new file mode 100644 (file)
index 0000000..59bf93d
--- /dev/null
@@ -0,0 +1,15 @@
+Hi,
+
+I'm trying to add a comment, and ikiwiki fails with this error message:
+
+    Error: HTTP::Message content must be bytes at /usr/share/perl5/RPC/XML/Client.pm line 308
+
+This seems to happen because I had a non-ASCII character in the comment (an ellipse, …).
+The interesting part is that the comment preview works fine, just the save fails. Probably
+this means that the blogspam plugin is the culprit (hence the error in RPC::XML::Client library).
+I'm using version 3.20100815~bpo50+. Thanks!
+
+> I've filed an upstream bug about this on RPC::XML:
+> <https://rt.cpan.org/Ticket/Display.html?id=61333>
+> 
+> Worked around it in blogspam by decoding. [[done]] --[[Joey]]
diff --git a/doc/bugs/can__39__t_mix_template_vars_inside_directives.mdwn b/doc/bugs/can__39__t_mix_template_vars_inside_directives.mdwn
new file mode 100644 (file)
index 0000000..e91a892
--- /dev/null
@@ -0,0 +1,61 @@
+I often find myself wrapping the same boiler plate around [[ikiwiki/directives/img]] img directives, so I tried to encapsulate it using the following [[ikiwiki/directives/template]]:
+
+
+    <div class="image">
+    [\[!img <TMPL_VAR raw_href>
+    size="<TMPL_VAR raw_size>"
+    
+    <TMPL_IF alt>
+      alt="<TMPL_VAR raw_alt>"
+    <TMPL_ELSE>
+      <TMPL_IF caption>
+        alt="<TMPL_VAR raw_alt>"
+      <TMPL_ELSE>
+        alt="[pic]"
+      </TMPL_IF>
+    </TMPL_IF>
+    
+    ]]
+    <TMPL_IF caption>
+    <p><TMPL_VAR raw_caption></p>
+    </TMPL_IF>
+    </div>
+
+The result, even with htmlscrubber disabled, is mangled, something like
+
+    <div class="image">
+    <span class="createlink"><a href="http://jmtd.net/cgi?
+        page=size&amp;from=log0.000000old_new_test&amp;do=create"
+        rel="nofollow">?</a>size</span>
+    
+    </div>
+
+Any suggestions gladly received. -- [[Jon]]
+
+> Well, you *should* be able to do things like this, and in my testing, I
+> *can*. I used your exact example above (removing the backslash escape)
+> and invoked it as:
+>      \[[!template id=test href=himom.png size=100x]]
+> 
+> And got just what you would expect.
+> 
+> I don't know what went wrong for you, but I don't see a bug here. 
+> My guess, at the moment, is that you didn't specify the required href
+> and size parameters when using the template. If I leave those off,
+> I of course reproduce what you reported, since the img directive gets
+> called with no filename, and so assumes the size parameter is the image
+> to display.. [[done]]? --[[Joey]] 
+
+>> Hmm, eek. Just double-checked, and done a full rebuild. No dice! Version 3.20100831. Feel free to leave this marked done, It probably *is* PEBKAC. I shall look again in day time. -- [[Jon]]
+
+>>> As always, if you'd like to mail me a larger test case that reproduces a
+>>> problem for you, I can take a look at it. --[[Joey]]
+
+>>>> <s>Thank you for the offer.  I might still take you up on it.  I've just proven that this
+>>>> does work for a clean repo / bare bones test case. -- [[Jon]]</s> Figured it out. The
+>>>> problem was I'd copied a page (old_new) which had two images embedded in it to test.
+>>>> I'd stored the images under a subdir "old_new". The new page was called "old_new_test"
+>>>> and the images thus could not be found by a pagespec "some-image.jpg". Adjusting the
+>>>> href argument to the template (consequently the src argument to img) to
+>>>> "old_new/some-image.jpg" fixed it all. [[done]], PEBKAC. Thank you for your time :)
+>>>> -- [[Jon]]
diff --git a/doc/bugs/class_parameter_of_img_directive_behave_not_as_documented.mdwn b/doc/bugs/class_parameter_of_img_directive_behave_not_as_documented.mdwn
new file mode 100644 (file)
index 0000000..e779776
--- /dev/null
@@ -0,0 +1,31 @@
+On [[ikiwiki/directive/img/]] I read that
+
+> You can also pass alt, title, class, align, id, hspace, and vspace
+> parameters. These are passed through unchanged to the html img tag.
+
+but when I pass `class="myclass"` to an img directive, I obtain
+
+    <img class="myclass img" ...
+
+I found that this behaviour was added in commit f6db10d:
+
+> img: Add a margin around images displayed by this directive.
+>
+> Particularly important for floating images, which could before be placed
+> uncomfortably close to text.
+    
+which adds to img.pm:
+    
+    if (exists $params{class}) {
+            $params{class}.=" img";
+    }
+    else {
+            $params{class}="img";
+    }
+
+I would prefer if the `img` class were only added if no class attribute is
+passed.
+
+If you keep the current behaviour, please document it.
+
+> [[done]] --[[Joey]] 
diff --git a/doc/bugs/cutpaste.pm:_missing_filter_call.mdwn b/doc/bugs/cutpaste.pm:_missing_filter_call.mdwn
new file mode 100644 (file)
index 0000000..4b22fd0
--- /dev/null
@@ -0,0 +1,55 @@
+Consider this:
+
+    $ wget http://schwinge.homeip.net/~thomas/tmp/cutpaste_filter.tar.bz2
+    $ wget http://schwinge.homeip.net/~thomas/tmp/cutpaste_filter.patch
+    
+    $ tar -xj < cutpaste_filter.tar.bz2
+    $ cd cutpaste_filter/
+    $ ./render_locally
+    $ find "$PWD".rendered/ -type f -print0 | xargs -0 grep -H -E 'FOO|BAR'
+    [notice one FOO in there]
+    $ rm -rf .ikiwiki "$PWD".rendered
+    
+    $ cp /usr/share/perl5/IkiWiki/Plugin/cutpaste.pm .library/IkiWiki/Plugin/
+    $ patch -p0 < ../cutpaste_filter.patch
+    $ ./render_locally
+    $ find "$PWD".rendered/ -type f -print0 | xargs -0 grep -H -E 'FOO|BAR'
+    [correct; notice no more FOO]
+
+I guess this needs a general audit -- there are other places where `preprocess`
+is being doing without `filter`ing first, for example in the same file, `copy`
+function.
+
+--[[tschwinge]]
+
+> So, in English, page text inside a cut directive will not be filtered.
+> Because the cut directive takes the text during the scan pass, before
+> filtering happens.
+> 
+> Commit 192ce7a238af9021b0fd6dd571f22409af81ebaf and
+> [[bugs/po_vs_templates]] has to do with this.
+> There I decided that filter hooks should *only* act on the complete
+> text of a page. 
+> 
+> I also suggested that anything that wants to reliably
+> s/FOO/BAR/ should probably use a sanitize hook, not a filter hook.
+> I think that would make sense in this example.
+> 
+> I don't see any way to make cut text be filtered while satisfying these
+> constraints, without removing cutpaste's ability to have forward pastes
+> of text cut laster in the page. (That does seems like an increasingly
+> bad idea..) --[[Joey]]
+
+> > OK -- so the FOO/BAR thing was only a very stripped-down example, of
+> > course, and the real thing is being observed with the
+> > *[[plugins/contrib/getfield]]* plugin.  This one needs to run *before*
+> > `preprocess`ing, for its `{{$page#field}}` syntax is (a) meant to be usable
+> > inside ikiwiki directives, and (b) the field values are meant to still be
+> > `preprocess`ed before being embedded.  That's why it's using the `filter`
+> > hook instead of `sanitize`.
+
+> > Would adding another kind of hook be a way to fix this?  My idea is that
+> > *cut* (and others) would then take their data not during `scan`ning, but
+> > *after* `filter`ing.
+
+> > --[[tschwinge]]
diff --git a/doc/bugs/default__95__pageext_not_working.mdwn b/doc/bugs/default__95__pageext_not_working.mdwn
new file mode 100644 (file)
index 0000000..c34491c
--- /dev/null
@@ -0,0 +1,7 @@
+default_pageext in the setup file does not work for me. 
+
+I tried to set it as 'txt' and as a custom plugin I am developing but when I edit a page it only ever loads with Markdown selected.
+
+Yes I am only trying to set it to loaded and working plugins. 
+
+ikiwiki version 3.20101129
diff --git a/doc/bugs/git.pm_should_prune_remote_branches_when_fetching.mdwn b/doc/bugs/git.pm_should_prune_remote_branches_when_fetching.mdwn
new file mode 100644 (file)
index 0000000..5dc4250
--- /dev/null
@@ -0,0 +1,14 @@
+The _git_ module does not appear ever to prune obsolete remote branches in the _srcdir_ repository, leading to spurious errors when fetching.
+
+Pruning remote branches can be done automatically with the --prune option to "git fetch" or in a separate command "git remote prune".
+
+--[[blipvert]]
+
+> I'll need more information than that before I add extra processing
+> work to the current git commands it uses. I don't see any errors here
+> from obsolete remote branches. --[[Joey]] 
+
+Suppose a remote repository contains a branch named "foo", and you fetch from it.  Then, someone renames that branch to "foo/bar".  The next time you fetch from that repository, you will get an error because the obsolete branch "foo" is blocking the branch "foo/bar" from being created (due to the way git stores refs for branches).  Pruning gets around the problem.  It doesn't really add much overhead to the fetch, and in fact it can *save* overhead since obsolete branches do consume resources (any commits they point to cannot be garbage collected).  --[[blipvert]]
+
+> Ok, so git pull --prune can be used to do everything in one command.
+> [[done]] --[[Joey]] 
diff --git a/doc/bugs/git_commit_adds_files_that_were_not_tracked.mdwn b/doc/bugs/git_commit_adds_files_that_were_not_tracked.mdwn
new file mode 100644 (file)
index 0000000..587650c
--- /dev/null
@@ -0,0 +1,19 @@
+Commit 3650d0265bc501219bc6d5cd4fa91a6b6ecd793a seems to have been caused by
+a bug in ikiwiki. recentchanges/* was added to the git repo incorrectly.
+
+Part of the problem seems to be that git's `rcs_commit` does a git add followed
+by a `rcs_commit_staged`, and so calling `rcs_commit` on files that were
+not checked in before adds them, incorrectly.
+
+I'm unsure yet why the recentchanges files were being committed. Possibly
+because of the link fixup code run when renaming a page. --[[Joey]] 
+
+> See also [[bugs/rename fixup not attributed to author]]. --[[smcv]]
+
+> Ok, there was a call to `rcs_commit` that was still using non-named
+> parameters, which confused it thuroughly, and I think caused
+> 'git add .' to be called. I've fixed that.
+> 
+> I think there is still potential for the problem I described above to
+> occur during a rename or possibly otherwise. Ok.. fixed `rcs_commit`
+> to not add too. [[done]] --[[Joey]] 
diff --git a/doc/bugs/htmlbalance_fails_with_HTML-Tree_v4.mdwn b/doc/bugs/htmlbalance_fails_with_HTML-Tree_v4.mdwn
new file mode 100644 (file)
index 0000000..9242706
--- /dev/null
@@ -0,0 +1,18 @@
+[[!template id=gitbranch branch=smcv/ready/htmlbalance author="[[smcv]]"]]
+[[!tag patch]]
+
+My one-patch htmlbalance branch fixes incompatibility with HTML::Tree 4.0.
+From the git commit:
+
+    The HTML::Tree changelog says:
+    
+        [THINGS THAT MAY BREAK YOUR CODE OR TESTS]
+        ...
+        * Attribute names are now validated in as_XML and invalid names will
+          cause an error.
+    
+    and indeed the regression tests do get an error.
+
+--[[smcv]]
+
+[[done]] --[[Joey]]
diff --git a/doc/bugs/htmlscrubber_breaks_multimarkdown_footnotes.mdwn b/doc/bugs/htmlscrubber_breaks_multimarkdown_footnotes.mdwn
new file mode 100644 (file)
index 0000000..343037b
--- /dev/null
@@ -0,0 +1,18 @@
+I enabled multimarkdown to make use of footnotes in my file. I have the multimarkdown plugin,
+as well as the command-line program. If I write a document with footnotes:
+
+    This line has a footnote[^1]
+    
+    [^1]: this is the footnote
+
+and compile it from the cli, the reference becomes a link to the footnote and the footnote
+gets a backreferencing link appended. When compiled in ikiwiki with the goodstuff plugin
+enabled, the links are created but their hrefs are empty (so they do not actually act as links).
+Disabling the htmlscrubber plugin fixes this issue
+
+[[!tag multimarkdown htmlscrubber]]
+
+> href was of the form: #fnref:1 , scrubbed by overzealous protocol
+> scrubbing.
+
+[[done]] --[[Joey]] 
diff --git a/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn b/doc/bugs/httpauth_conflicts_with_git_anon_push.mdwn
new file mode 100644 (file)
index 0000000..91507f5
--- /dev/null
@@ -0,0 +1,25 @@
+Someone tried to report a bug using IRC while I was on vacation.
+--[[Joey]] 
+
+<pre>
+julm: [11:58:35] han, it's me the problem; I was generating a post-update hook instead of a pre-receive hook
+julm: [12:03:59] why does the pre-receive hook return: "Status: 302 Found" and a "Location: <url>"? Is it normal?
+julm: [00:08:44] it's Plugin/httpauth.pm which is outputing those Status and Location
+julm: [00:09:12] problem is that it's an anonymous push via git://
+julm: [03:28:53] hacked my way to fix it somehow: http://git.internet.alpes.fr.eu.org/?p=web/ikiwiki.git;a=commitdiff;h=7211df4f7457c3afab53822a97cbd21825c473f4
+</pre>
+
+Analysis: 
+
+* IkiWiki::Receive calls `check_canedit`.
+* httpauth's canedit hook returns an error handler function
+  which redirects the browser through the cgiauthurl.
+  (Similarly, signinedit's hook may call needsignin, which
+  can display a signin form.
+* That doesn't work well when doing a git anon push. :)
+* Also, IkiWiki::Receive calls `check_canattach` and
+  `check_canremove`, which both also call `check_canedit`.
+
+So, all these calls need to avoid running the error handler
+functions returned by canedit hooks, and just return error
+messages. [[done]] --[[Joey]] 
diff --git a/doc/bugs/ikiwiki_ignores_PATH_environment.mdwn b/doc/bugs/ikiwiki_ignores_PATH_environment.mdwn
new file mode 100644 (file)
index 0000000..6781d4b
--- /dev/null
@@ -0,0 +1,24 @@
+At the very top of the main ikiwiki executable script the `PATH` environment is set like this:
+
+    $ENV{PATH}="/usr/local/bin:/usr/bin:/bin:/opt/local/bin";
+
+This makes it a little hard to specify which specific binaries should be used, especially if there is more than one of them available (see c.f. <http://trac.macports.org/ticket/26333> where the MacPorts-supplied, up-to-date subversion should be used and not an arcane one from the base distro / OS). Is there a specific reason why ikiwiki wipes out `$PATH` like this or could that line be improved to
+
+    $ENV{PATH}="$ENV{PATH}:/usr/local/bin:/usr/bin:/bin:/opt/local/bin";
+
+? The alternative is of course to patch ikiwiki as suggested in the bug, but I wanted to ask here first :)
+
+> You can use the ENV setting in your setup file to set any environment
+> variables you like. Since ikiwiki.cgi is run by the web browser, that
+> is the best way to ensure ikiwiki always runs with a given variable set.
+> 
+> As a suid program, the ikiwiki wrappers have to sanitize the environment.
+> The ikiwiki script's own sanitization of PATH was done to make perl taint
+> checking happy, but as taint checking is disabled anyway, I have removed
+> that. [[done]] --[[Joey]] 
+
+Question: Do ikiwiki.cgi and the RCS post-commit script sanitize the $PATH separately from bin/ikiwiki?  If not, then bin/ikiwiki is probably right to sanitize the $PATH; otherwise you've created a security hole with access to the account that ikiwiki is SUID to. It'd be nice if /opt/local/bin were earlier in the $PATH, but that can be changed (as noted) in the setup file. [[Glenn|geychaner@mac.com]] (Also the person who started this by filing an issue with MacPorts; I'm experimenting with ikiwiki for collaborative documentation.)
+
+> The suid wrappers remove all environment variables except for a few used
+> for CGI. PATH is not propigated by them, so when they run ikiwiki it will
+> get the system's default path now. --[[Joey]]
diff --git a/doc/bugs/img_plugin_and_class_attr.mdwn b/doc/bugs/img_plugin_and_class_attr.mdwn
new file mode 100644 (file)
index 0000000..7e880b4
--- /dev/null
@@ -0,0 +1,27 @@
+The [[plugins/img]] plugin is not generating the proper `class`
+attribute in its HTML output.
+
+The plugin receives something like the following:
+
+    \[[!img 129199047595759991.jpg class="centered"]]
+
+And is supossed to generate an HTML code like the following:
+
+    <img src="129199047595759991.jpg" class="centered" />
+
+But is generating the following
+
+    <img src="129199047595759991.jpg" class="centered img" />
+
+This seems to be happening with all images inserted using the plugin (that use
+the `class=yaddayadda` argument to the `img` directive.) I remember it didn't
+happen before, and I suspect an ikiwiki upgrade is to blame. I tested with a
+blog created from scratch, and a single post, and the problem appeared there
+too.
+
+This is happening with version 3.20100815 of ikiwiki.
+
+[[jerojasro]]
+
+> How is this a bug? It's perfectly legal html for a class attribute to 
+> put an element into multiple classes. [[notabug|done]] --[[Joey]] 
diff --git a/doc/bugs/inline_action_buttons_circumvent_exclude_criteria_from_edittemplate__39__s_match__61____34____34___pagespec.mdwn b/doc/bugs/inline_action_buttons_circumvent_exclude_criteria_from_edittemplate__39__s_match__61____34____34___pagespec.mdwn
new file mode 100644 (file)
index 0000000..2e2d353
--- /dev/null
@@ -0,0 +1,15 @@
+ikiwiki verison: 3.20100815.2
+
+If I instruct editemplate to only match the top level pages in a directory using 
+
+    match="foo/* and !foo/*/* and !foo/*/*/*"
+
+everything works as expected for pages created via links on other wiki pages. So, if I open foo/bar (or any other page on the wiki) and create a link to foo/bar/bug, edittemplate appropriately does not insert any text into the new page. 
+
+However, if I use an inline directive like the following 
+
+    !inline pages="page(foo/bar/*)" rootpage="foo/bar" postform=yes actions=yes
+
+every page created via the action buttons incorrectly pulls in the text from the edittemplate registration. Changing the order of the conditions in the match="" pagespec has no impact. 
+
+> [[fixed|done]] --[[Joey]] 
diff --git a/doc/bugs/logout_in_ikiwiki.mdwn b/doc/bugs/logout_in_ikiwiki.mdwn
new file mode 100644 (file)
index 0000000..d9b6df6
--- /dev/null
@@ -0,0 +1,31 @@
+It looks like there is no way to logout of ikiwiki at present, meaning that if you edit the ikiwiki in, say, a cybercafe, the cookie remains... is there some other security mechanism in place that can check for authorization, or should I hack in a logout routine into ikiwiki.cgi?
+
+> Click on "Preferences". There is a logout button there. --liw
+
+> It would be nice if it were not buried there, but putting it on the
+> action bar statically would be confusing. The best approach might be to
+> use javascript. --[[Joey]] 
+
+
+>> I agree that javascript seems to be a solution, but my brain falls 
+>> off the end of the world while looking at ways to manipulate the DOM. 
+>> (I'd argue also in favor of the openid_provider cookie expiring 
+>>  in less time than it does now, and being session based)
+
+>>> (The `openid_provider` cookie is purely a convenience cookie to
+>>> auto-select the user's openid provider the next time they log
+>>> in. As such, it cannot be a session cookie. It does not provide any
+>>> personally-identifying information so it should not really matter 
+>>> when it expires.) --[[Joey]]
+
+>> It would be nice to move navigational elements to the upper right corner 
+>> of the page...
+
+>> I have two kinds of pages (wiki and blog), and three classes of users  
+
+>> anonymous users - display things like login, help, and recentchanges,
+
+>> non-admin users - on a per subdir basis (blog and !blog) display 
+>> logout, help, recentchanges, edit, comment 
+
+>> admin users - logout, help, recentchanges, edit, comment, etc
diff --git a/doc/bugs/monotone_backend_does_not_support_srcdir_in_subdir.mdwn b/doc/bugs/monotone_backend_does_not_support_srcdir_in_subdir.mdwn
new file mode 100644 (file)
index 0000000..35f624f
--- /dev/null
@@ -0,0 +1,5 @@
+The [[rcs/monotone]] backend does not currently support putting the ikiwiki srcdir
+in a subdirectory of the repository.  It must be at the top. Git has
+special code to handle this case. --[[Joey]] 
+
+[[done]]
diff --git a/doc/bugs/more_and_RSS_generation.mdwn b/doc/bugs/more_and_RSS_generation.mdwn
new file mode 100644 (file)
index 0000000..00ab43f
--- /dev/null
@@ -0,0 +1,20 @@
+I'd like the more plugin and RSS to play better together. In the case of the html generation of the main page of a blog, I'd like to get the first paragraph out, but keep RSS as a full feed.
+
+Maybe there is a different plugin (I also tried toggle)? 
+
+> I am not a fan of the more directive (thus the rant about it sucking
+> embedded in its [[example|ikiwiki/directive/more]]). But I don't think 
+> that weakening it to not work in rss feeds is a good idea, if someone
+> wants to force users to go somewhere to view their full content, 
+> they should be able to do it, even though it does suck.
+> 
+> The toggle directive will degrade fairly well in an rss feed to
+> display the full text. (There is an annoying toggle link that does
+> nothing when embedded in an rss feed). --[[Joey]]
+
+I also note, that at least currently, more seems to break on a few pages, not being parsed at all when aggregated into the front page. 
+
+> It's just a simple directive, it should work anywhere any directive will,
+> and does as far as I can see. Details? --[[Joey]]
+
+see also: [[/bugs/rss_feeds_do_not_use_recommended_encoding_of_entities_for_some_fields/]]
diff --git a/doc/bugs/po:_apache_config_serves_index.rss_for_index.mdwn b/doc/bugs/po:_apache_config_serves_index.rss_for_index.mdwn
new file mode 100644 (file)
index 0000000..a2b68c4
--- /dev/null
@@ -0,0 +1,36 @@
+The apache config documented in [[plugins/po]] has a subtle bug. It works
+until a site gets an index.atom or index.rss file. (Acutally, with po
+enabled, they're called index.en.atom or index.en.rss etc, but the result
+is the same).
+
+Then, when wget, curl, or w3m is pointed at http://site/, apache serves
+up the rss/atom file rather than the index page.
+
+Analysis:
+
+* /etc/mime.types gives mime types to .rss and .atom files
+* `mod_negotiation`'s MultiViews allows any file with a mime type to be
+  served up via content negotiation, if the client requests that type.
+* wget etc send `Accept: */*` to accept all content types. Compare
+  with firefox, which sends `Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*`
+* So apache has a tie between a html encoded Enlish file, and a rss encoded
+  English file and the client has no preference. In a tie, apache will serve up the
+  *smallest* file, which tends to be the rss file. (Apache's docs say it uses that
+  strange criteria to break ties; see <http://httpd.apache.org/docs/2.0/mod/mod_mime.html#multiviewsmatch>)
+
+The only way I have found to work around this problem is to remove
+atom and rss from /etc/mime.types. Of course, that has other undesirable
+results. 
+
+I wonder if it would be worth making the po plugin generate apache 
+[type map files](http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#typemaps).
+That should avoid this problem.
+--[[Joey]]
+
+Update: A non-intrusive fix is to add this to apache configuration. 
+This tunes the "quality" of the rss and atom files, in an apparently currently
+undocumented way (though someone on #httpd suggested it should get documented).
+Result is that apache will prefer serving index.html. --[[Joey]]  [[done]]
+
+       AddType application/rss+xml;qs=0.8 .rss
+       AddType application/atom+xml;qs=0.8 .atom
diff --git a/doc/bugs/po:_double_commits_of_po_files.mdwn b/doc/bugs/po:_double_commits_of_po_files.mdwn
new file mode 100644 (file)
index 0000000..a871785
--- /dev/null
@@ -0,0 +1,19 @@
+When adding a new english page, the po files are created, committed,
+and then committed again. The second commit makes this change:
+
+       -"Content-Type: text/plain; charset=utf-8\n"
+       -"Content-Transfer-Encoding: ENCODING"
+       +"Content-Type: text/plain; charset=UTF-8\n"
+       +"Content-Transfer-Encoding: ENCODING\n"
+
+Same thing happens when a change to an existing page triggers a po file
+update. --[[Joey]] 
+
+> * The s/utf-8/UTF-8 part has been fixed.
+> * The ENCODING\n part is due to an inconsistency in po4a, which
+>   I've just send a patch for. --[[intrigeri]]
+
+>> I resubmitted the patch to po4a upstream, sending it this time to
+>> their mailing-list:
+>> [post archive](http://lists.alioth.debian.org/pipermail/po4a-devel/2010-July/001897.html).
+>> --[[intrigeri]]
diff --git a/doc/bugs/po:_markdown_link_parse_bug.mdwn b/doc/bugs/po:_markdown_link_parse_bug.mdwn
new file mode 100644 (file)
index 0000000..1071500
--- /dev/null
@@ -0,0 +1,14 @@
+Apparently this is legal markdown, though unusual syntax for a link:
+
+       [Branchable](http://www.branchable.com/ "Ikiwiki hosting") 
+
+If that is put on a translatable page, the translations display it not as a
+link, but as plain text.
+
+Probably a po4a bug, but I don't see the bug clearly in the gernerated po
+file:
+
+       "This was posted automatically by [Branchable](http://www.branchable.com/ "
+       "\"Ikiwiki hosting\") when I signed up."
+
+--[[Joey]] 
diff --git a/doc/bugs/po:_new_pages_not_translatable.mdwn b/doc/bugs/po:_new_pages_not_translatable.mdwn
new file mode 100644 (file)
index 0000000..c19f665
--- /dev/null
@@ -0,0 +1,12 @@
+Today I added a new English page to l10n.ikiwiki.info. When I saved,
+the page did not have the translation links at the top. I waited until
+the po plugin had, in the background, created the po files, and refreshed;
+still did not see the translation links. Only when I touched the page
+source and refreshed did it finally add the translation links. 
+I can reproduce this bug in a test site. --[[Joey]]
+
+> I could reproduce this bug at some point during the merge of a buggy
+> version of my ordered slave languages patch, but I cannot anymore.
+> Could you please try again? --[[intrigeri]]
+
+>> Cannot reproduce with 3.20100722, [[done]] I guess. --[[Joey]] 
diff --git a/doc/bugs/po:_plugin_should_not_override_the_title_on_the_homepage.mdwn b/doc/bugs/po:_plugin_should_not_override_the_title_on_the_homepage.mdwn
new file mode 100644 (file)
index 0000000..8f93747
--- /dev/null
@@ -0,0 +1,58 @@
+The po plugin systematically overrides the title of the homepage with the wikiname. This prevents explicitly changing it with a meta directive. It should rather check whether it was overridden before setting it back.
+
+Here is a simple patch for that:
+
+    diff --git a/Plugin/po.pm b/Plugin/po.pm
+    index 6395ebd..a048c6a 100644
+    --- a/Plugin/po.pm
+    +++ b/Plugin/po.pm
+    @@ -333,7 +333,7 @@ sub pagetemplate (@) {
+                && $masterpage eq "index") {
+                    $template->param('parentlinks' => []);
+            }
+    -       if (ishomepage($page) && $template->query(name => "title")) {
+    +       if (ishomepage($page) && $template->query(name => "title") && !$template->query(name => "title_overridden")) {
+                    $template->param(title => $config{wikiname});
+            }
+     }
+
+Thanks.
+
+> I fixed this patch a bit and applied it to my po branch, thanks
+> (commit 406485917).
+>
+> But... a bug (probably in HTML::Template) prevents this
+> theoretically correct solution to actually work.
+> Setting a parameter that does not appear in the template, such as
+> `title_overridden`, is not working on my install: the value does not
+> seem to be stored anywhere, and when accessing it later using
+> `$template->param('title_overridden')` it is always undef.
+> Adding `<TMPL_IF TMPL_VAR TITLE_OVERRIDDEN></TMPL_IF>` in
+> `page.tmpl` is a working, but ugly workaround.
+>
+> I am nevertheless in favour of merging the fix into ikiwiki.
+> We'll then need to find how to find the remaining (smaller) bug so
+> that this code can actually work.
+>
+> I'd like others to test my po branch and see if they can reproduce
+> the bug I am talking of.
+>
+> --[[intrigeri]]
+
+>> Commit 406485917 looks fine to me, FWIW --[[smcv]]
+
+>>> I tracked the HTML::Template bug (or missing documentation?) a bit
+>>> more. This lead to commit b2a2246ba in my po branch, that enables
+>>> HTML::Template's parent_global_vars option which makes
+>>> title_overridden work.
+>>>
+>>> OTOH I feel this workaround is a bit ugly as this option is not
+>>> documented. IMHO being forced to use it reveals a bug in
+>>> HTML::Template. I reported this:
+>>> https://rt.cpan.org/Public/Bug/Display.html?id=64158.
+>>>
+>>> But still, I think we need to apply the workaround as
+>>> HTML::Template's author has not updated any dist on CPAN for more
+>>> than one year. --[[intrigeri]]
+
+>>>> All merged, [[done]]. --[[Joey]] 
diff --git a/doc/bugs/po:_po_files_instead_of_html_files.mdwn b/doc/bugs/po:_po_files_instead_of_html_files.mdwn
new file mode 100644 (file)
index 0000000..8238f50
--- /dev/null
@@ -0,0 +1,22 @@
+On the home page of my wiki, when i click on the link "ikiwiki", i get the english file instead of the french file.  
+At the bottom of this page, there is the "Links" line:  
+Links: index index.fr templates templates.fr  
+When i click on "templates.fr", i get the po.file instead of html.  
+   
+    Sorry for the noise! I set "po_master_language" to fr and all was ok.
+
+> Any chance you could be a bit more verbose about what the
+> misconfiguration was? I don't think the po plugin should behave like that
+> in any configuration. Unless, perhaps, it was just not configured to
+> support any languages at all, and so the po file was treated as a raw
+> file. --[[Joey]] 
+  
+>> I can reproduce the bug with:  
+       # po plugin  
+       # master language (non-PO files)  
+       po_master_language => {  
+         code => 'en',  
+         name => 'English'  
+       },  
+       # slave languages (PO files)  
+       po_slave_languages => [qw{fr|Français}],  
diff --git a/doc/bugs/po:_ugly_messages_with_empty_files.mdwn b/doc/bugs/po:_ugly_messages_with_empty_files.mdwn
new file mode 100644 (file)
index 0000000..d3992b6
--- /dev/null
@@ -0,0 +1,6 @@
+If there are empty .mdwn files, the po plugin displays some ugly messages.
+
+> This is due to a bug in po4a (not checking definedness of a
+> variable). One-liner patch sent. --[[intrigeri]]
+
+>> This seems to be fixed in po4a 0.40 => [[done]]. --[[intrigeri]]
diff --git a/doc/bugs/po:broken_links_to_translatable_basewiki_pages_that_lack_po_fies.mdwn b/doc/bugs/po:broken_links_to_translatable_basewiki_pages_that_lack_po_fies.mdwn
new file mode 100644 (file)
index 0000000..121d338
--- /dev/null
@@ -0,0 +1,73 @@
+broken links to translatable basewiki pages that lack po files
+--------------------------------------------------------------
+
+If a page is not translated yet, the "translated" version of it
+displays wikilinks to other, existing (but not yet translated?)
+pages as edit links, as if those pages do not exist. 
+
+That's really confusing, especially as clicking such a link
+brings up an edit form to create a new, english page.
+
+This is with po_link_to=current or negotiated. With default, it doesn't
+happen.. 
+
+Also, this may only happen if the page being linked to is coming from an
+underlay, and the underlays lack translation to a given language.
+--[[Joey]] 
+
+> Any simple testcase to reproduce it, please? I've never seen this
+> happen yet. --[[intrigeri]]
+
+>> Sure, go here <http://l10n.ikiwiki.info/smiley/smileys/index.sv.html>
+>> (Currently 0% translateed) and see the 'WikiLink' link at the bottom,
+>> which goes to <http://l10n.ikiwiki.info/ikiwiki.cgi?page=ikiwiki/wikilink&from=smiley/smileys&do=create>
+>> Compare with eg, the 100% translated Dansk version, where
+>> the WikiLink link links to the English WikiLink page. --[[Joey]] 
+
+>>> Seems not related to the page/string translation status: the 0%
+>>> translated Spanish version has the correct link, just like the
+>>> Dansk version => I'm changing the bug title accordingly.
+>>>
+>>> I tested forcing the sv html page to be rebuilt by translating a
+>>> string in it, it did not fix the bug. I did the same for the
+>>> Spanish page, it did not introduce the bug. So this is really
+>>> weird.
+>>>
+>>> The smiley underlay seems to be the only place where the wrong
+>>> thing happens: the basewiki underlay has similar examples
+>>> that do not exhibit this bug. An underlay linking to another might
+>>> be necessary to reproduce it. Going to dig deeper. --[[intrigeri]]
+
+>>>> After a few hours lost in the Perl debugger, I think I have found
+>>>> the root cause of the problem: in l10n wiki's configured
+>>>> `underlaydir`, the basewiki is present in every slave language
+>>>> that is enabled for this wiki *but* Swedish. With such a
+>>>> configuration, the `ikiwiki/wikilink` page indeed does not exist
+>>>> in Swedish language: no `ikiwiki/wikilink.sv.po` can be found
+>>>> where ikiwiki is looking. Have a look to
+>>>> <http://l10n.ikiwiki.info/ikiwiki/>, the basewiki is not
+>>>> available in Swedish language on this wiki. So this is not a po
+>>>> bug, but a configuration or directories layout issue. This is
+>>>> solved by adding the Swedish basewiki to the underlay dir, which
+>>>> is I guess not a possibility in the l10n wiki context. I guess
+>>>> this could be solved by adding `SRCDIR/basewiki` as an underlay
+>>>> to your l10n wiki configuration, possibly using the
+>>>> `add_underlays` configuration directive. --[[intrigeri]]
+
+>>>>> There is no complete Swedish underlay translation yet, so it is not
+>>>>> shipped in ikiwiki. I don't think it's a misconfiguration to use
+>>>>> a language that doesn't have translated underlays. --[[Joey]] 
+
+>>>>>> Ok. The problem is triggered when using a language that doesn't
+>>>>>> have translated underlays, *and* defining
+>>>>>> `po_translatable_pages` in a way that renders the base wiki
+>>>>>> pages translatable in po's view of things, which in turns makes
+>>>>>> the po plugin act as if the translation pages did exist,
+>>>>>> although they do not in this case. I still need to have a deep
+>>>>>> look at the underlays-related code you added to `po.pm` a while
+>>>>>> ago. Stay tuned. --[[intrigeri]]
+
+>>>>>>> Fixed in my po branch, along with other related small bugs that
+>>>>>>> happen in the very same situation only. --[[intrigeri]]
+
+>>>>>>>> Merged. Not tested yet, but I trust you; [[done]] --[[Joey]] 
diff --git a/doc/bugs/preview_base_url_should_be_absolute.mdwn b/doc/bugs/preview_base_url_should_be_absolute.mdwn
new file mode 100644 (file)
index 0000000..f865f03
--- /dev/null
@@ -0,0 +1,49 @@
+The edit page CGI defines a `base` tag with an URL which is not
+absolute, which can break the preview function in some circumstances
+(with e.g. images not showing). The trivial [[patch]] that fixes
+it can be found [[here|http://sprunge.us/EPHT]] as well as on [[my
+git|http://git.oblomov.eu/ikiwiki]].
+
+> That patch does mean that if you're accessing the CGI via HTTPS but your
+> $config{url} and $config{cgiurl} are HTTP, you'll get preview images loaded
+> via HTTP, causing the browser to complain. See
+> [[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]]
+> for background.
+>
+> Perhaps the CGI could form its `<base>` URL by using
+> `URI->new_abs(urlto(...), $cgi->url)` instead?
+>
+> You'd also need to change `IkiWiki/Wrapper.pm` to pass at least the
+> SERVER_NAME and SERVER_PORT through the environment, probably.
+>
+> Joey's last comment on
+> [[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]]
+> suggests that this might already work, but I'm not quite sure how - I'd
+> expect it to need more environment variables? --[[smcv]]
+>
+>> `CGI::url` uses `REQUEST_URI`. So it could be used, but I don't see
+>> how to get from the `CGI::url` to an url to the page that is being
+>> edited. --[[Joey]]
+>>> (The right rune seems to be: `URI->new_abs(urlto($params{page}), $cgi->url))` --[[Joey]] 
+
+---
+
+Update: This bug is worse than it first appeared, and does not only affect
+previewing. The cgi always has a `<base>` url, and it's always relative,
+and that can break various links etc. For example, when the 404 plugin
+displays a missing page, it has a Recentchanges link, which would be broken
+if the cgi was in an unusual place.
+
+`misctemplate` needs to *always* set an absolute baseurl. Which is a problem,
+since `misctemplate` is not currently passed a cgi object from which to
+construct one. --[[Joey]]
+
+Update: Worse and worse. `baseurl(undef)` can be a relative url, but
+nearly every use of it I can find actually needs to be absolute. 
+the numerous `redirect($q, baseurl(undef))` all need to be absolute
+according to `CGI` documentation.
+
+So, I'm seriously thinking about reverting the part of
+[[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]]
+that made `baseurl(undef)` relative. 
+And I suppose, re-opening that todo. :( --[[Joey]]
diff --git a/doc/bugs/rename_fixup_not_attributed_to_author.mdwn b/doc/bugs/rename_fixup_not_attributed_to_author.mdwn
new file mode 100644 (file)
index 0000000..bcfafac
--- /dev/null
@@ -0,0 +1,12 @@
+When I renamed `todo/transient_in-memory_pages` to [[todo/transient pages]],
+`rename::fixlinks` was meant to blame me for the link-fixing commit, and title it
+`update for rename of %s to %s`. Instead, it blamed Joey for the commit,
+and didn't set a commit message.
+
+(It also committed a pile of recentchanges pages which shouldn't have
+been committed, for which see [[bugs/git_commit_adds_files_that_were_not_tracked]].)
+
+--[[smcv]]
+
+> It was calling `rcs_commit` old-style, and so not passing the session
+> object that is used to get the user's name. [[fixed|done]] --[[Joey]] 
index 48c1689971cc6f1e8c6c7b3a58ad5679dedef8b3..0a435cea33a4220b3ada48df349662374c407ee4 100644 (file)
@@ -34,3 +34,19 @@ For Atom, at least, I believe adding `type="xhtml"` to the title element will wo
 > Update: Ok, I've fixed this for titles, as a special case, but the
 > underlying problem remains for other fields in rss feeds (such as
 > author), so I'm leaving this bug report open. --[[Joey]]
+
+>> I'm curious if there has been any progress on better RSS output?
+>> I've been prototyping a new blog and getting good RSS out of it 
+>> seems important as the bulk of my current readers use RSS.
+>> I note, in passing that the "more" plugin doesn't quite do what 
+>> I want either - I'd like to pass a full RSS feed of a post and only
+>> have "more" apply to the front page of the blog. Is there a way to do that?
+>> -- [[dtaht]]
+>> 
+>>> To be clear, the RSS spec sucks to such an extent that, as far as
+>>> I know, there is no sort of title escaping that will work in all 
+>>> RSS consumers. Titles are currently escaped in the way 
+>>> that tends to break the fewest according to what I've read.
+>>> If you're unlucky enough to 
+>>> have a "&" or "<" in your **name**, then you may still run into 
+>>> problems with how that is escaped in rss feeds. --[[Joey]]
index dab3b7e5bf58059947e433fcb5e5594ed5a3e3e1..99e46aac9c4018f67366152ec1c135ca51f84776 100644 (file)
@@ -24,3 +24,6 @@ throwing code..):
 > No, still the same failure. I think it's failing parsing the input data,
 > (which perl probably transmitted as an int due to perl internals)
 > not writing out its response. --[[Joey]]
+
+> On second thought, this was a bug in ikiwiki, it should be transmitting
+> that as a string. Fixed in external.pm --[[Joey]] 
diff --git a/doc/bugs/tag_behavior_changes_introduced_by_typed_link_feature.mdwn b/doc/bugs/tag_behavior_changes_introduced_by_typed_link_feature.mdwn
new file mode 100644 (file)
index 0000000..ed93a2e
--- /dev/null
@@ -0,0 +1,16 @@
+The use of typed links for tags and some of the consequent changes
+introduced some unwanted functionality variations in the tag system. Two
+problems in particular could be observed, when compared to the use of
+tags in older versions of IkiWiki:
+
+* tags in feeds (both rss and atom) would use the file path as their
+  name (e.g. you would have `<category term="tags/sometag" />` in an atom
+  item for a page tagged sometag with a tagbase of tags), whereas they
+  appeared pure before
+* tags containing a slash character would appear without the slash
+  character but be used with the slash character in other circumstances
+  (effect visible by tagging a page with a name such as "with/slash")
+
+I've written a [[patch]] to fix this issues by introducing a `tagname()` function that reverts `taglink()`, and it's available [[here|http://sprunge.us/SHRj]] as well as on my [[git|http://git.oblomov.eu/ikiwiki]]
+
+> [[Applied|done]], with some regexp improvements. --[[Joey]] 
diff --git a/doc/bugs/urlto_API_change_breaks_wikis_with_po_plugin.mdwn b/doc/bugs/urlto_API_change_breaks_wikis_with_po_plugin.mdwn
new file mode 100644 (file)
index 0000000..4268a13
--- /dev/null
@@ -0,0 +1,98 @@
+The po plugin needs to be updated to match the urlto sub API and
+signature changes. Else a wiki with the po plugin enabled cannot be
+refreshed / rebuilt because of (correct) Perl errors.
+
+My po branch contains a fix.
+--[[intrigeri]]
+
+> The commit looks sane to me, for what it's worth. Joey, please
+> consider merging? --[[smcv]]
+
+>> Merged. --[[Joey]] 
+
+Also, I fear the lack of any useful `$from` parameter might break some
+l10n'd link niceness when using `po_link_to = current` but I have not
+investigated this yet.
+--[[intrigeri]]
+
+> If `urlto` is called without a second parameter, it means we need
+> a URL valid from either the CGI URL or any page in the wiki,
+> (so we'd previously have set the third parameter true), but we
+> don't *necessarily* need an absolute URL - so return what you'd
+> have returned if asked for an absolute URL, but looking like
+> `/bugs/` rather than `http://ikiwiki.info/bugs/` if possible.
+>
+> It looks as though `beautify_urlpath` under `po_link_to = current`,
+> and 3-argument `urlto`, aren't tested by `t/po.t` - perhaps you
+> could add some test cases there? To test 3-argument `urlto` you'd
+> need to add `$config{baseurl} = "http://example.com"` or
+> something. --[[smcv]]
+
+>> I'm leaving this bug report open until this can be checked. --[[Joey]] 
+
+>>> My `ready/urlto` branch improves the test coverage. The bugfix from
+>>> that branch fixes most of `po` too, but leaves behind some perhaps
+>>> less-than-ideal behaviour: links where the current language is unknown,
+>>> with `po_link_to = current`, always go to the master language,
+>>> whereas perhaps it'd be better to go to the negotiated language in
+>>> this case? --[[smcv]]
+
+>>>> Thanks for taking care, thanks for these improvements!
+>>>>
+>>>> OTOH I consider any of these behaviours (either the brand new one
+>>>> = link to master language, or the alternative one = link to
+>>>> negotiated) as a regression. Any of these is contrary to what
+>>>> `po_link_to = current` is supposed to do according to the
+>>>> documentation.
+>>>>
+>>>> Let's be less technical, let me display my practical usecase
+>>>> (making this possible was one of the main reasons I initially
+>>>> implemented `po_link_to = current`).
+>>>>
+>>>> Summary: the current state of things is an annoying regression
+>>>> and it needs to be fixed.
+>>>>
+>>>> Context: I participate in building a Live system based on Debian
+>>>> Live; the project's multilingual website
+>>>> ([T(A)ILS](https://amnesia.boum.org/) is built using ikiwiki. A
+>>>> static / offline copy is shipped on ISO images; this is the way
+>>>> end-user documentation lands on the CDs. Note that no webserver
+>>>> runs on the Live system to serve this wiki, so `po_link_to =
+>>>> current` is compulsory. A user can choose her preferred language
+>>>> at boot time. Depending on her decision, The desktop shortcut
+>>>> that points to the embedded documentation (i.e. static wiki)
+>>>> links to a different entry point depending on the chosen
+>>>> language.
+>>>>
+>>>> The previous (documented) behaviour was deadly simple:  if I am
+>>>> presented a page in English (master language) it means it does
+>>>> not exist in my preferred language; the computer always displays
+>>>> me the best available version according to my needs. The new
+>>>> behaviour brings a troubling seemingly random factor into the
+>>>> user navigation experience and IMHO is a mess from a web
+>>>> ergonomics point of view (no content negotiation available,
+>>>> remember): I sometimes am shown an English page although it is
+>>>> fully translated in my language one click away, and on the
+>>>> contrary I sometimes I am shown the optimal page. This, is, well,
+>>>> interesting. This practically forces the non-English speaking
+>>>> website visitor to check the otherlanguages list on every single
+>>>> page to make sure *herself* there is nothing better available,
+>>>> and sometimes click on her preferred language link to get a page
+>>>> she actually can read.
+>>>>
+>>>> I unfortunately might not be able to dedicate the needed time to
+>>>> help fix this in a timely manner, so I don't want to urge anyone.
+>>>> Take care!  --[[intrigeri]]
+
+>>>>> I can see why this is bad, but to the best of my knowledge it's
+>>>>> not a regression: each of the calls to 1-argument `urlto` was
+>>>>> previously a call to 3-argument `urlto`, which always produces
+>>>>> a fully absolute URL, so in either case there isn't enough
+>>>>> context to know the current language. Links that were previously
+>>>>> 2-argument `urlto` still have a defined second argument;
+>>>>> I've just edited `plugins/write` to clarify why the second
+>>>>> argument should be provided whenever possible. --[[smcv]]
+
+>>>>>> Ok. I am sorry for the burden that arose from my
+>>>>>> misunderstanding. No need to keep this bug open then =>
+>>>>>> [[done]] --[[intrigeri]]
diff --git a/doc/bugs/urlto__40____34____34____44___...__44___1__41___not_absolute.mdwn b/doc/bugs/urlto__40____34____34____44___...__44___1__41___not_absolute.mdwn
new file mode 100644 (file)
index 0000000..8a93848
--- /dev/null
@@ -0,0 +1,9 @@
+[[!template id=gitbranch branch=smcv/ready/urlto author="[[Simon_McVittie|smcv]]"]]
+[[!tag patch]]
+
+urlto() has a special-case for a zero-length first argument, but it
+produces a relative path even if the third argument is given and true.
+
+My `ready/urlto` branch simplifies this special case so it works. --[[smcv]]
+
+[[merged|done]] --[[Joey]] 
diff --git a/doc/bugs/web_reversion_on_ikiwiki.info.mdwn b/doc/bugs/web_reversion_on_ikiwiki.info.mdwn
new file mode 100644 (file)
index 0000000..6f18cfc
--- /dev/null
@@ -0,0 +1,14 @@
+I created [[sandbox/revert me]] and then tried the revert button on
+[[recentchanges]], but I was not allowed to revert it. The specific error
+was
+
+    Error: you are not allowed to change sandbox/revert_me.mdwn
+
+I've just tried reading through the revert code, and I haven't figured out
+what permission I am lacking.  Perhaps the error message could be a little
+clearer on that. The error might have been thrown by git_parse_changes in
+git.pm or check_canchange in IkiWiki.pm, via IkiWiki::Receive. -- Jon
+
+[[fixed|done]] --[[Joey]]
+
+: Brilliant, many thanks. -- [[Jon]]
index 35db57b0c05a6e12bc439308a4016ad1e54af910..bc070cb99872d3fda19978338a8f43fe0dac7882 100644 (file)
@@ -9,7 +9,7 @@ defining brand new rendering rules.
 While ikiwiki's default use of stylesheets is intentionally quite plain and
 minimalistic, CSS allows creating any kind of look you can dream up.
 
-The [[theme_plugin|plugins/theme]] provides some prepackaged themes in an
+The [[theme_plugin|plugins/theme]] provides some prepackaged [[themes]] in an
 easy to use way.
 
 The [[css_market]] page is an attempt to collect user contributed local.css
index 0e5a687406eb15ba4f855e3577d260da59e9393d..1838b2f600a25dc40ebbd4ddc4a7059e31d86308 100644 (file)
@@ -4,9 +4,11 @@ User contributed stylesheet files for ikiwiki. Unless otherwise noted,
 these style sheets can be installed by copying them into your wiki's source
 dir with a filename of `local.css`.
 
+Some of stylesheets have developed into fullfledged [[themes]] that are
+included in ikiwiki for easy use.
+
 Feel free to add your own stylesheets here. (Upload as wiki pages; wiki
-gnomes will convert them to css files..) Selected ones from here are
-included in the [[theme_plugin|plugins/theme]].
+gnomes will convert them to css files..)
 
 * **[[css_market/zack.css]]**, contributed by [[StefanoZacchiroli]],
   customized mostly for *blogging purposes*, can be seen in action on 
@@ -46,15 +48,11 @@ included in the [[theme_plugin|plugins/theme]].
 
 * **[contraste.css][4]**, contributed by [[Blanko]]. Can be seen on [Contraste Demo][5]. Local.css and templates available [here][6].
 
-* **[[css_market/actiontabs.css]]**, contributed by [[svend]]. This style sheet displays
-  the action list (Edit, RecentChanges, etc.) as tabs.
-  [[!meta stylesheet="actiontabs"]]
-
 * **[wiki.css](http://cyborginstitute.net/includes/wiki.css)** by [[tychoish]]. 
   I typically throw this in as `local.css` in new wikis as a slightly more clear and readable
   layout for wikis that need to be functional and elegant, but not necessarily uniquely designed. 
   Currently in use by the [the outeralliance wiki](http://oa.criticalfutures.com/). 
-  
 
 If your web browser allows selecting between multiple stylesheets, this
 page can be viewed using many of the stylesheets above. For example, if
diff --git a/doc/css_market/actiontabs.css b/doc/css_market/actiontabs.css
deleted file mode 100644 (file)
index a1dc47e..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/* ikiwiki local style sheet */
-
-/* Add local styling here, instead of modifying style.css. */
-
-a {
-       text-decoration: none;
-       color: #005a9c;
-}
-
-a:hover {
-       text-decoration: underline;
-}
-
-
-hr {
-       border-style: none;
-       background-color: #999;
-       height: 1px;
-}
-
-code, pre {
-    background: #eee;
-}
-
-pre {
-    padding: .5em;
-}
-
-body {
-       margin: 0;
-       padding: 0;
-       font-family: sans-serif;
-       color: black;
-       background: white;
-}
-
-.pageheader {
-       margin: 0;
-       padding: 1em 2em 0 2em;
-       background: #eee;
-       border-color: #999;
-       border-style: none none solid none;
-       border-width: 1px;
-}
-
-.header {
-       font-size: 100%;
-       font-weight: normal;
-}
-
-.title {
-       display: block;
-       margin-top: .2em;
-       font: 140% sans-serif;
-       text-transform: capitalize;
-}
-
-.actions {
-       text-align: right;
-       padding: 0;
-}
-
-#content, #comments, #footer {
-       margin: 1em 2em;
-}
-
-#pageinfo {
-       border-color: #999;
-}
-
-.inlinepage {
-       margin: .4em 0;
-       padding: .4em 0;
-       border-style: none;
-       border-top: 1px solid #aaa;
-}
-
-.inlineheader {
-       font-size: 120%;
-       font-weight: normal;
-}
-
-h1 { font: 120% sans-serif }
-h2 { font: bold 100% sans-serif }
-h3 { font: italic 100% sans-serif }
-h4, h5, h6 { font: small-caps 100% sans-serif }
-
-/* Smaller headings for inline pages */
-.inlinepage h1 { font-size: 110% }
-.inlinepage h2 { font-size: 100% }
-.inlinepage h3 { font-size: 100% }
-
-.pageheader .actions ul {
-       border-style: none
-}
-
-.actions ul {
-       font-size: 75%;
-       padding: 0;
-       border-style: none;
-}
-
-.actions ul li a {
-       text-decoration: none;
-}
-
-.actions ul li {
-       margin: 0;
-       padding: .1em .5em 0 .5em;
-       background: white;
-       border-color: #999;
-       border-style: solid solid none solid;
-       border-width: 1px;
-}
-
-div.recentchanges {
-       border-style: none;
-}
-
-.pagecloud {
-       width: auto;
-}
index b25601227b41ae39e51728d8e7747ee03e27db98..5f8f6c3ce192bc2e02d7d566e8032fdb3810316d 100644 (file)
@@ -10,8 +10,8 @@ Some additional configuration you might want to do, if not using
 
 * Make sure to configure ikiwiki to generate RSS or Atom feeds.
 
-* Make sure you have the tag plugin enabled, and the `tagbase` set to
-  "tags". Tag pages will then automatically be created.
+* Make sure you have the [[tag|plugins/tag]] plugin enabled, and the
`tagbase` set to "tags". Tag pages will then automatically be created.
   An example of how to tag a post is:
        \[[!tag life]]
 
diff --git a/doc/examples/blog/posts/ugachaka/discussion.mdwn b/doc/examples/blog/posts/ugachaka/discussion.mdwn
new file mode 100644 (file)
index 0000000..387db1f
--- /dev/null
@@ -0,0 +1 @@
+jackie chan vs chuck norris.
index 1f81687036187bba170aea03a7b8c1b921ad589a..0dbdba5df1fe37e79c7311ab74dc9194d7dc2810 100644 (file)
@@ -77,6 +77,8 @@ Ikiwiki aims to produce
 Ikiwiki generates html using [[templates]], and uses [[css]], so you
 can change the look and layout of all pages in any way you would like.
 
+Ikiwiki ships with several ready to use [[themes]].
+
 ## [[Plugins]]
 
 Plugins can be used to add additional features to ikiwiki. The interface is
diff --git a/doc/forum/404_-_not_found.mdwn b/doc/forum/404_-_not_found.mdwn
new file mode 100644 (file)
index 0000000..dc33189
--- /dev/null
@@ -0,0 +1,22 @@
+Hi,
+
+I've followed the tutorial to install ikiwiki.  Once installed (on a Ubuntu
+10.04 distro running under VirtualBox on a Windows XP, SP3 host), I can
+access the **http://ubuntu1004/index.lighttpd.html** page without any
+issues.
+
+But when I try to access the page **http://ubuntu1004/~geertvc/gwiki** (as
+is mentioned at the end of the ikiwiki setup), I get the error message
+"**404 - not found**".
+
+I've also followed the "dot-cgi" trick, but with the same negative result.
+The web server I've installed, is lighttpd.
+
+What did I miss?
+
+Best rgds,
+
+--Geert
+
+> Perhaps your webserver is not exporting your `public_html` directory
+> in `~geertvc`? Check its configuration. --[[Joey]] 
diff --git a/doc/forum/404_-_not_found/comment_1_3dea2600474f77fb986767da4d507d62._comment b/doc/forum/404_-_not_found/comment_1_3dea2600474f77fb986767da4d507d62._comment
new file mode 100644 (file)
index 0000000..453419c
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://jmtd.livejournal.com/"
+ ip="188.222.50.68"
+ subject="comment 1"
+ date="2010-09-09T21:41:07Z"
+ content="""
+You probably need to run \"lighttpd-enable-mod userdir\"
+"""]]
diff --git a/doc/forum/404_-_not_found/comment_2_948e4678be6f82d9b541132405351a2c._comment b/doc/forum/404_-_not_found/comment_2_948e4678be6f82d9b541132405351a2c._comment
new file mode 100644 (file)
index 0000000..c3fb72d
--- /dev/null
@@ -0,0 +1,31 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawllEHb4oGNaUrl7vyziQGrxAlQFri_BfaE"
+ nickname="Geert"
+ subject="comment 2"
+ date="2010-09-12T06:45:27Z"
+ content="""
+After a re-installation of ikiwiki (first removed all old files), I get the following feedback:
+
+    Successfully set up gwiki:
+           url:         http://ubuntu1004/~geertvc/gwiki
+           srcdir:      ~/gwiki
+           destdir:     ~/public_html/gwiki
+           repository:  ~/gwiki.git
+    To modify settings, edit ~/gwiki.setup and then run:
+           ikiwiki -setup ~/gwiki.setup
+
+
+In the lighttpd config file (/etc/lighttpd/lighttpd.conf), I've now changed the item \"server.document-root\" from the default \"/var/www\" to (in my case) \"/home/geertvc/public_html/gwiki\".  I've taken the destdir location (see above) as document root for lighttpd.
+
+When doing this, I can see the \"index.html\" page of ikiwiki (by typing the following URL in the address box of the browser: \"ubuntu1004/index.html\").  So, that seems to be the right modification, right?  Or isn't it?
+
+Note: when I take the directory \"/home/geertvc/gwiki\" (= the URL given above), then things do not work.  I can't see the content of \"index.html\", I get the error message I mentioned in my initial post (404 - not found).
+
+But when clicking, for instance, the \"Edit\" button, the link brings me to the following location:
+
+    http://ubuntu1004/~geertvc/gwiki/ikiwiki.cgi?page=index&do=edit
+
+However, there's not at all a file called \"ikiwiki.cgi\" at that location.  The location of the file \"ikiwiki.cgi\" is \"/home/geertvc/public_html/gwiki\", so why is the link \"Edit\" leading me to that (wrong?) location?
+
+Apparently, something is still wrong with my settings.  Hope, with the above information, someone can put me on the right track...
+"""]]
diff --git a/doc/forum/404_-_not_found/comment_3_4c7b1fa88776815bbc6aa286606214c2._comment b/doc/forum/404_-_not_found/comment_3_4c7b1fa88776815bbc6aa286606214c2._comment
new file mode 100644 (file)
index 0000000..9f606f0
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://jmtd.livejournal.com/"
+ ip="78.105.191.131"
+ subject="Follow instructions"
+ date="2010-09-12T12:26:49Z"
+ content="""
+Please re-read my comment. If you enable usersdirs then /~user corresponds to ~/public_html. The change you have made has / corresponding instead, which is why the links don't work.
+"""]]
diff --git a/doc/forum/Asciidoc_plugin.mdwn b/doc/forum/Asciidoc_plugin.mdwn
new file mode 100644 (file)
index 0000000..57d6fd9
--- /dev/null
@@ -0,0 +1,14 @@
+I have completely overhauled the Asciidoc plugin for ikiwiki that was created by [[Karl Mowson|http://www.mowson.org/karl/colophon/]].  The source can be downloaded from my [[Dropbox|http://dl.dropbox.com/u/11256359/asciidoc.pm]].
+
+### Features
+
+* Uses a filter hook to escape WikiLinks and Directives using Asciidoc `+++` passthrough macros, to avoid them being processed by Asciidoc. This behavior is configurable in the wiki setup file.
+* Adds a preprocessor directive 'asciidoc' which allows extra Asciidoc command-line options to be passed on a per-page basis. Each parameter name is the option name (the leading `--` will be inserted automatically), and the parameter value is the option value. Currently, only 'conf-file' and 'doctype' are allowed (or even useful).
+* Sets the page title from the first line in the Asciidoc file using a meta directive. This behavior is configurable in the wiki setup file.
+* Searches for an Asciidoc configuration file named the same as the wiki if none is specified in the setup file.
+* Asciidoc configuration files are stored in the wiki. They should be named `._conf` to avoid publishing them.
+
+### Problems
+
+* Escaping Directives is not optimal. It prevents markup from being used in Directives, and the passthrough macros have to include extra spaces to avoid having directives that return an empty string collapse to `++++++`. In addition, I had to borrow the regexps from the Ikiwiki source code; it would be nice if this were available as part of the API.
+* Handling of Asciidoc errors is suboptimal; they are simply inserted into the returned page.  This could be fixed in Perl 5.12 by using the run_forked() in IPC::Cmd.
diff --git a/doc/forum/Blog_posting_times_and_ikiwiki_state.mdwn b/doc/forum/Blog_posting_times_and_ikiwiki_state.mdwn
new file mode 100644 (file)
index 0000000..0c1da5b
--- /dev/null
@@ -0,0 +1,28 @@
+What I wanted
+-------------
+
+I thought to myself it would be nice to see from the console the dates that my ikiwiki blog posts were published.  Especially as I would like to know the order of my todo list without having to view the webpage.
+
+What I discovered
+-----------------
+
+Looked at the code and saw the functions for grabbing the ctime from git but couldn't reconcile them to the "Posted" date in the RSS feed.  Some more reading and I figured out that the Posted time is taken from the UNIX ctime when first uploaded into the repository and this information is stored in the page state via a Perl storable database - indexdb. (I'm sure most know this but to be clear in UNIX ctime is *not* the actual creation time of a file. UNIX has no facility for recording the actual creation time - however on first upload to the wiki it's good enough).
+
+Wrote a Perl script to query and sort indexdb.  Now I can list my todos or blog posts in the order they appear on the web.  Handy.
+
+However the ikiwiki state is specifically excluded via '.gitignore'.  I work a lot on trains and not having this file in my cloned wiki means I can't list published posts or my todos in the proper order.  I can get an approximation from git logs but, dam it, I want it the same!
+
+What can I do?
+--------------
+
+Is it a spectacularly bad idea to include the ikiwiki state file in my cloned repo (I suspect it is).  What else could be done?  Can I disable pagestate somehow or force ikiwiki to always use git commit times for Posted times?
+
+> Have you tried running ikiwiki with the `--gettime` option on your laptop,
+> to force it to retrieve initial commit times from git? You should only
+> need to do that once, and it'll be cached in the pagestate thereafter.
+>
+> Because that functionality is slow on every supported VCS except git,
+> ikiwiki tries to avoid using it unless it's really needed. [[rcs]]
+> lists it as "fast" for git, though, so depending how fast it really is
+> and how large your wiki is, you might be able to get away with running
+> ikiwiki with `--gettime` all the time? --[[smcv]]
diff --git a/doc/forum/Blog_posting_times_and_ikiwiki_state/comment_1_87304dfa2caea7e526cdb04917524e8c._comment b/doc/forum/Blog_posting_times_and_ikiwiki_state/comment_1_87304dfa2caea7e526cdb04917524e8c._comment
new file mode 100644 (file)
index 0000000..62bae02
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmwYptyV5ptNt8LCbMYsmpcNkk9_DRt-EY"
+ nickname="Matt"
+ subject="comment 1"
+ date="2010-11-04T11:52:53Z"
+ content="""
+Perhaps I have a different setup from you but on my laptop I don't have ikiwiki installed - only a clone of the git repo.  You mean to run --gettime on the post-update git hook?
+"""]]
diff --git a/doc/forum/Can__39__t_get_comments_plugin_working.mdwn b/doc/forum/Can__39__t_get_comments_plugin_working.mdwn
new file mode 100644 (file)
index 0000000..f189d9b
--- /dev/null
@@ -0,0 +1,16 @@
+I feel like I must be missing something.
+
+My blog is based on Ikiwiki, and uses /yyyy/mm/dd/title/ for blog posts.
+Because I use the plugin that generates index pages for subdirectories, I
+have to use /????/??/??/* to identify posts and avoid missing the index
+pages for years, months and days.
+
+I've enabled the comments plugin, but no matter what I do, I can't seem to make the comment form appear on my posts. I've removed the entire site and have rebuilt. I've set the pagespec to /????/??/??/* and ./????/??/??/*, but neither seems to work. I don't see any output, or anything else to indicate that pages aren't working.
+
+Are there any other plugins that need to be enabled for this to work? I think I've locked things down such that anonymous users can't edit by enabling signinedit and setting a lock, but this may be blocking the ability to comment (though I don't recall seeing anything in the docs about needing additional plugins.)
+
+> Just use '????/??/??/*' , and it will work.
+> [[Pagespecs|ikiwiki/pagespec]] are automatically matched absolute to the
+> top of the site, and adding a leading "/" is not necessary and will 
+> make the PageSpec not match. (And the relative PageSpec with "./" is
+> not right in this case either). --[[Joey]] 
diff --git a/doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__.mdwn b/doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__.mdwn
new file mode 100644 (file)
index 0000000..8d67006
--- /dev/null
@@ -0,0 +1,7 @@
+I have been mucking about with ikiwiki for two whole days now. 
+
+I like many things about it. Even though I've been spending most of my time wrestling with css I did manage to write a whole lot of blog posts and love what ikiwiki is doing for the "revise" part of my writing cycle. And I like the idea of integrating the wiki and the blog into one unifying architecture....
+
+But... I would like very much to have different page templates for blogging and wiki-ing, some way of specifying that for stuff in the "/posts" directory I'd rather use blogpost.tmpl rather than page.tmpl. I just spent a few minutes looking at the perl for this (I assume Render.pm) and my mind dumped core...
+
+(generically, some way to specify output formatting on a subdirectory basis would be good) 
diff --git a/doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__/comment_1_15651796492a6f04a19f4a481947c97c._comment b/doc/forum/Different_templates_for_subdirectories__63_____40__Blogging_and_Wiki_pages__41__/comment_1_15651796492a6f04a19f4a481947c97c._comment
new file mode 100644 (file)
index 0000000..e92f410
--- /dev/null
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawlY5yDefnXSHvWGbJ9kvhnAyQZiAAttENk"
+ nickname="Javier"
+ subject="comment 1"
+ date="2010-10-21T15:00:50Z"
+ content="""
+You can do what you want with the [[ikiwiki/directive/pagetemplate]] directive, but in a slightly cumbersome way, because you have to say what template you want in every page that differs from the default.
+
+See also: [[templates]]
+
+And, a perhaps more proper solution to your problem, although I don't fully understand the way of tackling it, in [[todo/multiple_template_directories]].
+
+If you could create a proper page in this wiki, centralizing all the knowledge dispersed in those pages, it would be nice ;)
+
+--[[jerojasro]]
+"""]]
diff --git a/doc/forum/Discussion_PageSpec__63__.mdwn b/doc/forum/Discussion_PageSpec__63__.mdwn
new file mode 100644 (file)
index 0000000..2860d0d
--- /dev/null
@@ -0,0 +1,3 @@
+I've looked around but haven't found it. Can you set a Discussion PageSpec so only certain pages allow discussion?
+
+> Not currently, sorry. --[[Joey]] 
diff --git a/doc/forum/Dump_plugin.mdwn b/doc/forum/Dump_plugin.mdwn
new file mode 100644 (file)
index 0000000..ff3bfea
--- /dev/null
@@ -0,0 +1,4 @@
+I have a second plugin that adds a directive 'dump', and dumps all sorts of information (env variables and template variables) about a page into the end of the page. It's cheesy, but it's available in my [[Dropbox|http://dl.dropbox.com/u/11256359/dump.pm]] as well as the Asciidoc plugin.
+
+### Issues
+* It really ought to use some kind of template instead of HTML. In fact, it ought to embed its information in template variables of some kind rather than stuffing it into the end of the page.
diff --git a/doc/forum/Dump_plugin/comment_1_bfce80b3f5be78ec28692330843d4ae1._comment b/doc/forum/Dump_plugin/comment_1_bfce80b3f5be78ec28692330843d4ae1._comment
new file mode 100644 (file)
index 0000000..855b72b
--- /dev/null
@@ -0,0 +1,14 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawngqGADV9fidHK5qabIzKN0bx1ZIfvaTqs"
+ nickname="Glenn"
+ subject="New dump plugin"
+ date="2010-10-03T00:45:47Z"
+ content="""
+I took my own advice and rewrote the dump plugin so that it uses a template.  A sample template has been added to my [[Dropbox|http://dl.dropbox.com/u/11256359/dump.tmpl]].
+
+### Issues:
+
+* Dumps appear at the end of the page rather than where the directive occurs.
+* For some reason I haven't yet figured out, dumps don't appear in page previews.
+* I haven't tested inlined content and the dump plugin.
+"""]]
diff --git a/doc/forum/Flowplayer.mdwn b/doc/forum/Flowplayer.mdwn
new file mode 100644 (file)
index 0000000..9bf3ab3
--- /dev/null
@@ -0,0 +1 @@
+[Flowplayer](http://flowplayer.org) is the open source flash video player plugin. [My site](http://mcfrisk.kapsi.fi) has raw html enabled to work with old content so I was able to use the raw html and javascript [examples](http://flowplayer.org/documentation/installation/index.html) in blog posts, but some of them fail when combined on the [aggregate page](http://mcfrisk.kapsi.fi/skiing/). Any hints on how to properly use Flowplayer with ikiwiki?
diff --git a/doc/forum/Forward_slashes_being_escaped_as_252F.mdwn b/doc/forum/Forward_slashes_being_escaped_as_252F.mdwn
new file mode 100644 (file)
index 0000000..5df81e5
--- /dev/null
@@ -0,0 +1,33 @@
+When I try to edit a page that has a forward slash in the URL, I get "Error:
+bad page name". I think the problem is because the forward slash is escaped as
+`%252F` instead of `%2F`.
+
+For example, if I go to `http://ciffer.net/~svend/tech/hosts/` and click Edit,
+I am sent to a page with the URL
+`http://ciffer.net/~svend/ikiwiki.cgi?page=tech%252Fhosts&do=edit`.
+
+I am running ikiwiki 3.20100504~bpo50+1 on Debian Lenny.
+
+
+> But on your page, the Edit link is escaped normally and correctly (using %2F).
+> Look at the page source!
+> 
+> The problem is that your web server is forcing a hard (302) redirect
+> to the doubly-escaped url. In wireshark I see your web server send back:
+
+       HTTP/1.1 302 Found\r\n
+       Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny9 with Suhosin-Patch
+       Location: http://ciffer.net/~svend/ikiwiki.cgi?page=tech%252Fhosts&do=edit
+
+> You'll need to investigate why your web server is doing that... --[[Joey]]
+
+>> Thanks for pointing me in the right direction. I have the following redirect
+>> in my Apache config.
+
+       RewriteEngine on
+       RewriteCond %{HTTP_HOST} ^www\.ciffer\.net$
+       RewriteRule /(.*) http://ciffer.net/$1 [L,R]
+
+>> and my ikiwiki url setting contained `www.ciffer.net`, which was causing the
+>> redirect. Correcting the url fixed the problem. I'm still not sure why
+>> Apache was mangling the URL. --[[Svend]]
diff --git a/doc/forum/How_to_list_new_pages__44___inline__63__.mdwn b/doc/forum/How_to_list_new_pages__44___inline__63__.mdwn
new file mode 100644 (file)
index 0000000..f28e8b9
--- /dev/null
@@ -0,0 +1,5 @@
+Hi, I'd love to include a "New posts" list into my front page, like at <http://danhixon.github.com/> for example.
+
+It should be different from recent changes in that it shouldn't show modifications of existing pages, and in that it would be inside a page with other content.
+
+Thanks, Thomas
diff --git a/doc/forum/How_to_list_new_pages__44___inline__63__/comment_1_e989b18bade34a92a9c8fe7099036e15._comment b/doc/forum/How_to_list_new_pages__44___inline__63__/comment_1_e989b18bade34a92a9c8fe7099036e15._comment
new file mode 100644 (file)
index 0000000..cf6f642
--- /dev/null
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="use an inline directive"
+ date="2010-11-29T20:39:37Z"
+ content="""
+This is what the [[ikiwiki/directive/inline]] directive is for. It's often used, to for example, show new posts to a blog. If you want to show new posts to anywhere in your site, or whatever, you can configure the [[ikiwiki/PageSpec]] in it to do that, too. 
+
+For example, you could use this:
+
+    The most recent 3 pages added to this site:
+    \[[!inline pages=\"*\" archive=yes show=4]]
+"""]]
diff --git a/doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links.mdwn b/doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links.mdwn
new file mode 100644 (file)
index 0000000..fcffe69
--- /dev/null
@@ -0,0 +1,3 @@
+Map Plugin, would like to add ?updated to all links created.
+
+When I edit a page and then click that page in a map in a sidebar Safari always shows me a cached page. 
diff --git a/doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links/comment_1_3fe4c5967e704355f9b594aed46baf67._comment b/doc/forum/Map_Plugin__44___would_like_to_add___63__updated_to_all_links/comment_1_3fe4c5967e704355f9b594aed46baf67._comment
new file mode 100644 (file)
index 0000000..ce1a785
--- /dev/null
@@ -0,0 +1,13 @@
+[[!comment format=mdwn
+ username="justint"
+ ip="24.182.207.250"
+ subject="skip it"
+ date="2010-10-13T05:30:50Z"
+ content="""
+skip it, I added 
+
+    <meta http-equiv=\"expires\" value=\"Thu, 16 Mar 2000 11:00:00 GMT\" />
+    <meta http-equiv=\"pragma\" content=\"no-cache\" />
+
+to my page.tmpl and the problem went away.
+"""]]
diff --git a/doc/forum/Moving_wiki.git_folder__63__.mdwn b/doc/forum/Moving_wiki.git_folder__63__.mdwn
new file mode 100644 (file)
index 0000000..77d1da1
--- /dev/null
@@ -0,0 +1,17 @@
+Hi folks, I created a simple wiki to keep notes and references for projects, it's worked quite nice so far.  I decided to use git as it's what I use daily to manage code, and it's available on all my machines.
+
+Anyway, I wanted to move all the wiki source stuff into a subfolder so that it stops cluttering up my ~ directory.  However, there seems to be a problem with moving wiki.git (I moved wiki, wiki.git and wiki.setup) and I'm not sure where to tell ikiwiki that the git directory has been moved.  I changed 
+
+    srcdir => '/home/pixel/.notebook/wiki',
+    git_wrapper => '/home/pixel/.notebook/wiki.git/hooks/post-update',
+
+and that seems to be fine.  However when I go to run ikiwiki --setup things go wrong:
+
+    pixel@tosh: [~ (ruby-1.9.2-p0)] ➔ ikiwiki -setup .notebook/wiki.setup 
+    successfully generated /home/pixel/public_html/wiki/ikiwiki.cgi
+    successfully generated /home/pixel/.notebook/wiki.git/hooks/post-update
+    fatal: '/home/pixel/wiki.git' does not appear to be a git repository
+    fatal: The remote end hung up unexpectedly
+    'git pull origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 193.
+
+I've gone through wiki.setup and nothing has jumped out as the place to set this, have I missed something?
diff --git a/doc/forum/Moving_wiki.git_folder__63__/comment_1_05238461520613f4ed1b0d02ece663bd._comment b/doc/forum/Moving_wiki.git_folder__63__/comment_1_05238461520613f4ed1b0d02ece663bd._comment
new file mode 100644 (file)
index 0000000..d654591
--- /dev/null
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://users.itk.ppke.hu/~cstamas/openid/"
+ ip="212.183.140.47"
+ subject="comment 1"
+ date="2010-10-27T22:45:28Z"
+ content="""
+I think you want to edit
+
+    .git/config
+
+"""]]
diff --git a/doc/forum/Moving_wiki.git_folder__63__/comment_2_72b2b842dfa0cfaf899fe7af12977519._comment b/doc/forum/Moving_wiki.git_folder__63__/comment_2_72b2b842dfa0cfaf899fe7af12977519._comment
new file mode 100644 (file)
index 0000000..f2e7ece
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://pixel.dreamwidth.org/"
+ ip="65.29.14.21"
+ subject="comment 2"
+ date="2010-10-28T02:54:15Z"
+ content="""
+That did it thanks!
+
+Should I make some sort of edit in the setup page?  I've used git for a while and for whatever reason it never occurred to me that this was from git, not from ikiwiki itself.
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude.mdwn b/doc/forum/Need_something_more_powerful_than_Exclude.mdwn
new file mode 100644 (file)
index 0000000..5e80432
--- /dev/null
@@ -0,0 +1,5 @@
+When I originally looked at the "exclude" option, I thought it meant that it excluded pages completely, but it apparently doesn't.  What I've found in practice is that a file which matches the "exclude" regex is excluded from *processing*, but it is still copied over to the destination directory.  Thus, for example, if I have "^Makefile$" as the exclude pattern, and I have a file `src/foo/Makefile`, then that file is copied unaltered into `dest/foo/Makefile`.  However, what I want is for `src/foo/Makefile` to be completely ignored: that it is not only not processed, but not even *copied* into the destination directory.
+
+I'm not sure if the current behaviour is a bug or a feature, but I would like a "totally ignore this file" feature if it's possible to have one.
+
+-- [[KathrynAndersen]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_2_0019cd6b34c8d8678b2532de57a92d15._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_2_0019cd6b34c8d8678b2532de57a92d15._comment
new file mode 100644 (file)
index 0000000..7842cae
--- /dev/null
@@ -0,0 +1,12 @@
+[[!comment format=mdwn
+ username="http://smcv.pseudorandom.co.uk/"
+ nickname="smcv"
+ subject="expression anchored too closely?"
+ date="2010-11-23T10:43:21Z"
+ content="""
+It looks as though you might only be excluding a top-level Makefile, and not a Makefile in subdirectories. Try excluding `(^|/)Makefile$` instead, for instance? (See `wiki_file_prune_regexps` in `IkiWiki.pm` for hints.)
+
+The match operation in `&file_pruned` ends up a bit like this:
+
+    \"foo/Makefile\" =~ m{…|…|…|(^|/)Makefile$}
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_2_f577ab6beb9912471949d8d18c790267._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_2_f577ab6beb9912471949d8d18c790267._comment
new file mode 100644 (file)
index 0000000..bd964d5
--- /dev/null
@@ -0,0 +1,11 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="Missed It By That Much"
+ date="2010-11-25T02:55:20Z"
+ content="""
+I discovered that I not only needed to change the regexp, but I also needed to delete .ikiwiki/indexdb because `file_pruned` only gets called for files that aren't in the `%pagesources` hash, and since the file in question was already there because it had been put there before the exclude regex was changed, it wasn't even being checked!
+
+[[KathrynAndersen]]
+
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_3_1ed260b0083a290688425a006a83f603._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_3_1ed260b0083a290688425a006a83f603._comment
new file mode 100644 (file)
index 0000000..8b93acd
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 3"
+ date="2010-11-29T20:41:49Z"
+ content="""
+`%pagesources` gets nuked when you rebuild the whole wiki with eg, ikiwiki -setup or ikiwiki -rebuild. So you shouldn't normally need to remove the indexdb, just rebuild when making this sort of change that affects the whole site.
+"""]]
diff --git a/doc/forum/Need_something_more_powerful_than_Exclude/comment_4_c39bdaf38e1e20db74eb26f0560bd673._comment b/doc/forum/Need_something_more_powerful_than_Exclude/comment_4_c39bdaf38e1e20db74eb26f0560bd673._comment
new file mode 100644 (file)
index 0000000..15f1fec
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="comment 4"
+ date="2010-11-30T02:35:43Z"
+ content="""
+One would think that would be the case, yes, but for some reason it didn't work for me. 8-(
+
+[[KathrynAndersen]]
+"""]]
diff --git a/doc/forum/PageSpec_results_from_independent_checkout.mdwn b/doc/forum/PageSpec_results_from_independent_checkout.mdwn
new file mode 100644 (file)
index 0000000..693287d
--- /dev/null
@@ -0,0 +1,8 @@
+I'd like to be able to do PageSpec matches independent of the Ikiwiki checkout, but at best I'm currently restricted to copying over and using whatever is in the indexdb with this approach:
+
+    perl -MIkiWiki -le '$config{wikistatedir}=".ikiwiki"; IkiWiki::loadindex(); print foreach pagespec_match_list("", shift)' "bugs/*"
+
+I get the impression there's a way to build up enough state to run pagespec matches without doing any rendering, but I don't know how. Any ideas? -- JoeRayhawk
+
+> It's not possible to build up enough state without at a minimum
+> performing the scan pass of rendering on every page. --[[Joey]] 
diff --git a/doc/forum/cutpaste.pm_not_only_file-local.mdwn b/doc/forum/cutpaste.pm_not_only_file-local.mdwn
new file mode 100644 (file)
index 0000000..0c5221c
--- /dev/null
@@ -0,0 +1,14 @@
+I'd like to use the cutpaste plugin, but not only on a file-local basis: fileA
+has \[[!cut id=foo text="foo"]], and fileB does \[[!absorb pagenames=fileA]],
+and can then use \[[!paste id=foo]].
+
+Therefore, I've written an [*absorb* directive /
+plugin](http://schwinge.homeip.net/~thomas/tmp/absorb.pm), which is meant to
+absorb pages in order to get hold of their *cut* and *copy* directives'
+contents.  This does work as expected.  But it also absorbs page fileA's *meta*
+values, like a *meta title*, etc.  How to avoid / solve this?
+
+Alternatively, do you have a better suggestion about how to achieve what I
+described in the first paragraph?
+
+--[[tschwinge]]
diff --git a/doc/forum/cutpaste.pm_not_only_file-local/comment_1_497c62f21fd1b87625b806407c72dbad._comment b/doc/forum/cutpaste.pm_not_only_file-local/comment_1_497c62f21fd1b87625b806407c72dbad._comment
new file mode 100644 (file)
index 0000000..8cc724a
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="field and getfield and ymlfront"
+ date="2010-08-12T02:33:54Z"
+ content="""
+Have you considered trying the [[plugins/contrib/field]] plugin, and its associated plugins?  [[plugins/contrib/ymlfront]] can give you the source (\"cut\") and [[plugins/contrib/getfield]] and/or [[plugins/contrib/report]] can get you the value (\"paste\") including the values from other pages.
+"""]]
diff --git a/doc/forum/editing_a_comment.mdwn b/doc/forum/editing_a_comment.mdwn
new file mode 100644 (file)
index 0000000..eb53436
--- /dev/null
@@ -0,0 +1,11 @@
+Is it possible to edit a comment? I did not find any button for it.
+
+> It was a design decision to not allow editing comments via the web
+> interface. The thinking being that comments on blogs tend to not allow
+> editing, and allowing wiki-style editing by anyone would sort of defeat
+> the purpose of comments.
+> 
+> I do think there is room to support more forum-style comments in ikiwiki.
+> As long as the comment is not posted by an anonymous user, it would be
+> possible to open up editing to the original commenter. One day, perhaps..
+> --[[Joey]] 
diff --git a/doc/forum/field_and_forms.mdwn b/doc/forum/field_and_forms.mdwn
new file mode 100644 (file)
index 0000000..97fda18
--- /dev/null
@@ -0,0 +1,13 @@
+Dear ikiwiki users, and specially [[users/KathrynAndersen]] ([[users/rubykat]]):
+have you considered some way of extending ikiwiki to allow some kind of
+on-the-fly generation of web forms to create new pages? these web forms should
+offer as many fields as one has defined in some [[page
+template|plugins/contrib/ftemplate]], and, once POSTed, should create a page
+using that template, with those fields already filled with the values the user
+provided.
+
+I see this a a generalization of the `postform` option of the
+[[ikiwiki/directive/inline]] directive. That option tells ikiwiki to create a
+form with one field already filled (title).
+
+What are your ideas about this?
diff --git a/doc/forum/field_and_forms/comment_1_a0e976cb79f03dcff5e9a4511b90d160._comment b/doc/forum/field_and_forms/comment_1_a0e976cb79f03dcff5e9a4511b90d160._comment
new file mode 100644 (file)
index 0000000..3e10dbb
--- /dev/null
@@ -0,0 +1,19 @@
+[[!comment format=mdwn
+ username="http://kerravonsen.dreamwidth.org/"
+ ip="60.241.8.244"
+ subject="Limitations"
+ date="2010-11-23T02:18:52Z"
+ content="""
+I'd already had a look at this idea before you posted this suggestion, and I ran into difficulties.
+So far as I can see, it makes most sense to use the mechanisms already in place for editing pages, and enhance them.
+Unfortunately, the whole edit-page setup expects a template file (by default, when editing pages, editpage.tmpl)
+and anything apart from \"submit\" buttons must have a placeholder in the template file, or it doesn't get displayed at all in the form.
+At least, that's what I've found - I could be mistaken.
+
+But if it's true, that rather puts the kybosh on dynamically generated forms, so far as I can see.
+I mean, if you knew beforehand what all your fields were going to be, you could make a copy of editpage.tmpl, add in your fields where you want, and then make a plugin that uses that template instead of editpage.tmpl, but that's very limited.
+
+If someone could come up with a way of making dynamic forms, that would solve the problem, but I've come up against a brick wall myself.  Joey?  Anyone?
+
+-- [[KathrynAndersen]]
+"""]]
diff --git a/doc/forum/how_can_I_use___39____47____39___as_tagbase__63__.mdwn b/doc/forum/how_can_I_use___39____47____39___as_tagbase__63__.mdwn
new file mode 100644 (file)
index 0000000..8a24152
--- /dev/null
@@ -0,0 +1,13 @@
+I'd like tags to be top-level pages, like /some-tag.
+
+I achieve this most of the time by *not* defining `tagbase`.
+
+However, this goes wrong if the name of a tag matches the name of a page further down a tree.
+
+Example:
+
+ * tag scm, corresponding page /scm
+ * a page /log/scm tagged 'scm' does not link to /scm
+ * a page /log/puppet tagged 'scm' links to /log/scm in the Tags: section
+
+Is this possible, or am I pushing tags too far (again)? -- [[Jon]]
diff --git a/doc/forum/how_can_I_use___39____47____39___as_tagbase__63__/comment_1_e7897651ba8d9156526d36d6b7744eae._comment b/doc/forum/how_can_I_use___39____47____39___as_tagbase__63__/comment_1_e7897651ba8d9156526d36d6b7744eae._comment
new file mode 100644 (file)
index 0000000..361c51b
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2010-12-05T20:15:28Z"
+ content="""
+From the code, it seems to me like setting tagbase to \"/\" would actually do what you want. Does it not work?
+"""]]
index 7686a7a083ed6e2b858a58a6cf9b6687092419ee..d69b3801b5b08e7220e4033498848ba3fb691b6b 100644 (file)
@@ -33,3 +33,14 @@ Puzzled a bit :-/
 >>>> had its own history browser (somewhere down my todo list). --[[schmonz]]
 
 >>>> Yup, having a possibility to revert a single file would suffice.
+
+---
+
+Perer Gammie and I are working on reversion over at [[todo/web_reversion]].
+--[[Joey]] 
+
+Update: Web reversion is now supported by ikiwiki. Only changes committed
+to your wiki after you upgrade to the version of ikiwiki that supports it
+will get revert buttons on the RecentChanges page. If you want to force
+adding buttons for older changes, you can delete `recentchanges/*._change`
+from your srcdir, and rebuild the wiki. --[[Joey]] 
diff --git a/doc/forum/how_do_I_revert_edits_in_the_web_mode__63__/comment_1_e4720e8e4fe74bd6cba746e8259832e6._comment b/doc/forum/how_do_I_revert_edits_in_the_web_mode__63__/comment_1_e4720e8e4fe74bd6cba746e8259832e6._comment
new file mode 100644 (file)
index 0000000..597cab2
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawmlZJCPogIE74m6GSCmkbJoMZiWNOlXcjI"
+ nickname="Ian"
+ subject="comment 1"
+ date="2010-09-24T19:01:08Z"
+ content="""
++1 for a \"revert\" web plugin which at least handles the simple cases. -- Ian Osgood, The TOVA Company
+"""]]
diff --git a/doc/forum/ikiwiki_+_mathjax.mdwn b/doc/forum/ikiwiki_+_mathjax.mdwn
new file mode 100644 (file)
index 0000000..1279a2c
--- /dev/null
@@ -0,0 +1 @@
+Is it possible to use [mathjax](http://www.mathjax.org/) in ikiwiki to typeset math formulas? If so, is this compatible with the [wmd](http://ikiwiki.info/plugins/wmd/) plugin?
diff --git a/doc/forum/ikiwiki_+_mathjax/comment_1_8426a985ecfbb02d364116503ef3a0d4._comment b/doc/forum/ikiwiki_+_mathjax/comment_1_8426a985ecfbb02d364116503ef3a0d4._comment
new file mode 100644 (file)
index 0000000..f5849e7
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="https://www.google.com/accounts/o8/id?id=AItOawkIfDOOUJ0h_niLRZZL5HsHHOuQfUrVcQo"
+ nickname="Carl"
+ subject="Works with mathjax, with a little help"
+ date="2011-01-02T22:59:27Z"
+ content="""
+Yes, mathjax works with ikiwiki. The main trouble I ran into was markdown trying to parse the math. For example markdown and tex both use underscores. I wrote a quick plugin to replace all the TeX with strip markers in the 'filter' phase and put it back in the 'sanitize' phase (just replacing all the TeX content with its Base64 representation temporarily) and that seems to have fixed the problem well enough. 
+"""]]
diff --git a/doc/forum/ikiwiki_vim_integration.mdwn b/doc/forum/ikiwiki_vim_integration.mdwn
new file mode 100644 (file)
index 0000000..4724807
--- /dev/null
@@ -0,0 +1,17 @@
+Hi all. I upgraded the [ikiwiki-nav plugin](http://www.vim.org/scripts/script.php?script_id=2968)
+so that now it supports:
+
+  * Jumping to the file corresponding to the wikilink under the cursor.
+  * Creating the file corresponding to the wikilink under the cursor (including
+  directories if necessary.)
+  * Jumping to the previous/next wikilink in the current file.
+  * Autocomplete link names.
+
+Download it from [here](http://www.vim.org/scripts/script.php?script_id=2968)
+
+I've also created a new page unifying all the hints available here to use vim
+with ikiwiki files, in [[tips/vim_and_ikiwiki]]
+
+
+--[[jerojasro]]
+
index 7d3ed8b02294ca165f4f4c0ead128ce1aed7b34e..a46c7e4c1d7249e871f9788c9b5a752b2c0553fe 100644 (file)
@@ -1,5 +1,10 @@
+This page is deprecated. See [[tips/vim_and_ikiwiki]] for the most up to date
+content.
+
+------
+
 I extended the functionality of the [ikiwiki-nav plugin](http://www.vim.org/scripts/script.php?script_id=2968)
-(see [[here|tips/follow_wikilinks_from_inside_vim]]) to allow completion of
+(see [[here|tips/vim_ikiwiki_ftplugin]]) to allow completion of
 wikilinks from inside vim, through the omnicompletion mechanism.
 
 It still has some bugs, but is usable, and will not destroy your data. It can
diff --git a/doc/forum/multi_domain_setup_possible__63__.mdwn b/doc/forum/multi_domain_setup_possible__63__.mdwn
new file mode 100644 (file)
index 0000000..01b31aa
--- /dev/null
@@ -0,0 +1,15 @@
+Hi! I am searching for a replacement of my blog and webpages made off static HTML with just some custom PHP around it for years already. ikiwiki seems to be one of the hot candidates, since it uses a RCS.
+
+I would like to have a multi domain setup like this:
+
+- myname.private.de => more of a personal page
+- professional.de => more of my professional work related page
+- and possibly others
+
+Now when I write a blog entry about some Linux, Debian or KDE stuff, I possibly would like to have it shown on my private and my professional domain.
+
+And I might like to use some kind of inter wiki links now and then.
+
+Is such a setup possible? I thought about have a big wiki with Apache serving sub directories from it under different domains, but then wiki links like would not work.
+
+Maybe having the same blog entry, same content on several domains is not such a hot idea, but as long as I do not see a problem with it, I'd like to do it.
diff --git a/doc/forum/multi_domain_setup_possible__63__/comment_1_43f5df30d09046ccc4f7c44703979a11._comment b/doc/forum/multi_domain_setup_possible__63__/comment_1_43f5df30d09046ccc4f7c44703979a11._comment
new file mode 100644 (file)
index 0000000..5b00272
--- /dev/null
@@ -0,0 +1,17 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="branches"
+ date="2010-08-15T16:06:43Z"
+ content="""
+This is where the git backend (or bzr if you prefer) shines. Make a site, and then branch it to a second site, and put your personal type stuff on the branch. cherry-pick or merge changes from one branch to another.
+
+The possibility to do this kind of thing is why our recently launched Ikiwiki hosting service is called
+[Branchable.com](http://branchable.com). It makes it easy to create branches of a Ikiwiki site hosted
+there: <http://www.branchable.com/tips/branching_an_existing_site/> 
+(Merging between branches need manual git, for now.)
+
+BTW, for links between the branched wikis you can just use the [[plugins/shortcut]] plugin.
+
+--[[Joey]]
+"""]]
diff --git a/doc/forum/multi_domain_setup_possible__63__/comment_2_75d6581f81b71fb8acbe3561047ea759._comment b/doc/forum/multi_domain_setup_possible__63__/comment_2_75d6581f81b71fb8acbe3561047ea759._comment
new file mode 100644 (file)
index 0000000..473f52f
--- /dev/null
@@ -0,0 +1,16 @@
+[[!comment format=mdwn
+ username="http://claimid.com/helios"
+ nickname="helios"
+ subject="branches"
+ date="2010-08-15T16:18:35Z"
+ content="""
+So I I just put a blog entry, which is just a file on both branches. Seems I have to learn cherry-picking and merging only some changes.
+
+Still I am duplicating files then and when I edit one file I have to think to also edit the other one or merge the change to it. I thought of a way to tag a blog entry on which site it should appear. And then I just have to edit one file and contents changes on all sites that share it.
+
+But then I possibly can do some master blog / shared content branch, so that shared content is only stored once. Then I need to find a way to automatically replicate the changes there to all sites it belongs too. But how do I store it.
+
+I also thought about just using symlinks for files. Can I have two sites in one repository and symlink shared files stuff around? I know bzr can version control symlinks.
+
+Hmmm, I think I better read more about branching, cherry-picking and merging before I proceed. I used bzr and git, but from the user interface side of things prefer bzr, which should be fast enough for this use case.
+"""]]
diff --git a/doc/forum/recovering_original_title_with_meta_directive.mdwn b/doc/forum/recovering_original_title_with_meta_directive.mdwn
new file mode 100644 (file)
index 0000000..ad0b02a
--- /dev/null
@@ -0,0 +1 @@
+When using the \[[!meta title=""]] directive, the documentation states that a template variable is set when the title is overridden.  However, how does one recover the original page title? --[[Glenn|geychaner@mac.com]]
diff --git a/doc/forum/report_pagination.mdwn b/doc/forum/report_pagination.mdwn
new file mode 100644 (file)
index 0000000..03a77b1
--- /dev/null
@@ -0,0 +1,18 @@
+I am thinking of adding pagination to the [[plugins/contrib/report]] plugin, but I'm not sure which is the best approach to take. (By "pagination" I mean breaking up a report into multiple pages with N entries per page.)
+
+Approaches:
+
+1. generate additional HTML files on the fly which are placed in the sub-directory for the page the report is on.  These are not "pages", they are not under revision control, they aren't in the %pagesources hash etc. But using the `will_render` mechanism assures that they will be removed when they are no longer needed.
+
+2. create new pages which each have a report directive which shows a subset of the full result; add them to revision control, treat them as full pages.  Problems with this are: (a) trying to figure out when to create these new pages and when not to, (b) whether or not these pages can be deleted automatically.
+
+3. some other approach I haven't thought of.
+
+I'm afraid that whatever approach I take, it will end up being a kludge.
+
+> Well, it should be perfectly fine, and non-kludgy for a single page to
+> generate multiple html files. Just make sure that html files have names
+> that won't conflict with the html files generated by some other page.
+> 
+> Of course the caveat is that since such files are not pages, you won't 
+> be able to use wikilinks to link directly to them, etc. --[[Joey]]
diff --git a/doc/forum/using_l10n__39__d_basewiki.mdwn b/doc/forum/using_l10n__39__d_basewiki.mdwn
new file mode 100644 (file)
index 0000000..a361d18
--- /dev/null
@@ -0,0 +1,7 @@
+Hey there!
+
+I'm trying to get the translated version of basewiki activated in my wiki. Setting "locale => 'de_DE.UTF-8'" gave me some german messages on the CLI and a few changes in the wiki itself but the basewiki is still english. The files in /usr/share/ikiwiki/po/de/ are there.
+
+As I understand, [[plugins/po]] is just for translating.
+
+So, what am I doing wrong? 
diff --git a/doc/forum/using_l10n__39__d_basewiki/comment_1_eaab671848ee6129f6fe9399474eeac0._comment b/doc/forum/using_l10n__39__d_basewiki/comment_1_eaab671848ee6129f6fe9399474eeac0._comment
new file mode 100644 (file)
index 0000000..1f21b48
--- /dev/null
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 1"
+ date="2010-12-05T20:12:17Z"
+ content="""
+The translated basewiki depends on the po plugin being enabled and configured with the language(s) to use.
+"""]]
diff --git a/doc/forum/using_l10n__39__d_basewiki/comment_2_d907676a1db1210ca59506673c564359._comment b/doc/forum/using_l10n__39__d_basewiki/comment_2_d907676a1db1210ca59506673c564359._comment
new file mode 100644 (file)
index 0000000..c8d1e4e
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://xlogon.net/bacuh"
+ ip="93.182.190.4"
+ subject="comment 2"
+ date="2010-12-05T22:48:53Z"
+ content="""
+This works, thanks.
+
+But is there also a way to get \"Edit\" etc. and the buttons behind it translated?
+"""]]
diff --git a/doc/forum/using_l10n__39__d_basewiki/comment_3_5e9d5bc5ecaf63f9bfe3315b09a279aa._comment b/doc/forum/using_l10n__39__d_basewiki/comment_3_5e9d5bc5ecaf63f9bfe3315b09a279aa._comment
new file mode 100644 (file)
index 0000000..f72bb37
--- /dev/null
@@ -0,0 +1,10 @@
+[[!comment format=mdwn
+ username="http://joey.kitenet.net/"
+ nickname="joey"
+ subject="comment 3"
+ date="2010-12-05T22:53:12Z"
+ content="""
+That requires translating the templates, which has never quite been finished. [[todo/l10n]] discusses that.
+
+(You can edit the templates yourself of course and manually translate.)
+"""]]
diff --git a/doc/forum/using_svn+ssh_with_ikiwiki.mdwn b/doc/forum/using_svn+ssh_with_ikiwiki.mdwn
new file mode 100644 (file)
index 0000000..8d9c27e
--- /dev/null
@@ -0,0 +1,11 @@
+Just as an experiment, I tried running ikiwiki using a remote repository, i.e. via "svn+ssh". After setting up the repo and relocating the working copy, unfortunately, it doesn't work; editing a page gives the error:
+
+> Error: no element found at line 3, column 0, byte 28 at /opt/local/lib/perl5/vendor_perl/5.10.1/darwin-multi-2level/XML/Parser.pm line 187
+
+I think this is because, despite a SetEnv directive in the apache configuration, the CGI wrapper is expunging SVN_SSH from the environment (based on perusing the source of Wrapper.pm and looking at "envsave" there at the top). Is this the case? --[[Glenn|geychaner@mac.com]]
+
+> That seems likely. You can edit Wrapper.pm and add SVN_SSH to the @envsave list and rebuild your wrappers to test it. --Joey
+
+A better way(?) would be to add a plugin to set the SVN_SSH variable at the appropriate moment (or even to add this to the SVN plugin).  What kind of hook should this be; it needs to run just *after* the CGI script cleans its environment? --[[Glenn|geychaner@mac.com]]
+
+Actually, this probably doesn't need to be a plugin; setting SVN_SSH in ENV can probably be done through the setup file.  (Right?)  --[[Glenn|geychaner@mac.com]]
index 88608d4b550dc0e3e8969ef053a0c67c06fb2836..5943097e64b4ffd0b4a3b2557c70489ce55f2449 100644 (file)
@@ -65,6 +65,7 @@ think about merging them. This is recommended. :-)
 * [[privat]] `git://github.com/privat/ikiwiki.git`
 * [[blipvert]] `git://github.com/blipvert/ikiwiki.git`
 * [[bzed|BerndZeimetz]] `git://git.recluse.de/users/bzed/ikiwiki.git`
+* [[wtk]]: `git://github.com/wking/ikiwiki.git`
 
 ## branches
 
diff --git a/doc/ikiwiki/directive/aggregate/discussion.mdwn b/doc/ikiwiki/directive/aggregate/discussion.mdwn
new file mode 100644 (file)
index 0000000..ddece97
--- /dev/null
@@ -0,0 +1,10 @@
+It would be awesome if table could aggregrate remote CSVs too. I want something like:
+
+     !table file="http://cyclehireapp.com/cyclehirelive/cyclehire.csv"
+
+> Ok, but that has nothing to do with the aggregate plugin. File a
+> [[todo]]?
+> 
+> Anyway, it seems difficult, how would it know when the remote content
+> had changed? Aggregate has its cron job support and has time stamps
+> in rss feeds to rely on. --[[Joey]] 
diff --git a/doc/ikiwiki/directive/flattr.mdwn b/doc/ikiwiki/directive/flattr.mdwn
new file mode 100644 (file)
index 0000000..5083005
--- /dev/null
@@ -0,0 +1,45 @@
+The `flattr` directive is supplied by the [[!iki plugins/flattr desc=flattr]] plugin.
+
+This directive allows easily inserting Flattr buttons onto wiki pages.
+
+Flattr supports both static buttons and javascript buttons. This directive
+only creates dynamic javascript buttons. If you want to insert a static
+Flattr button, you can simply copy the html code for it from Flattr, instead.
+Note that this directive inserts javascript code into the page, that
+loads more javascript code from Flattr.com. So only use it if you feel
+comfortable with that.
+
+The directive can be used to display a button for a thing you have already
+manually submitted to Flattr. In this mode, the only parameter you need to
+include is the exact url to the thing that was submitted to Flattr.
+(If the button is for the current page, you can leave that out.) For
+example, this is the Flattr button for ikiwiki. Feel free to add it to all
+your pages. ;)
+
+       \[[!flattr url="http://ikiwiki.info/" button=compact]]
+
+The directive can also be used to create a button that automatically
+submits a page to Flattr when a user clicks on it. In this mode you
+need to include parameters to specify your uid, and a title, category, tags,
+and description for the page. For example, this is a Flattr button for
+a blog post:
+       
+       \[[!flattr uid=25634 title="my new blog post" category=text
+       tags="blog,example" description="This is a post on my blog."]]
+
+Here are all possible parameters you can pass to the Flattr directive.
+
+* `button` - Set to "compact" for a small button.
+* `url` - The url to the thing to be Flattr'd. If omitted, defaults
+  to the url of the current page.
+* `uid` - Your numeric Flattr userid. Not needed if the flattr plugin
+  has been configured with a global `flattr_userid`.
+* `title` - A short title for the thing, to show on its Flattr page.
+* `description` - A description of the thing, to show on its Flattr
+  page.
+* `category` - One of: text, images, video, audio, software, rest.
+* `tags` - A list of tags separated by a comma.
+* `language` - A language code.
+* `hidden` - Set to 1 to hide the button from listings on Flattr.com.
+
+[[!meta robots="noindex, follow"]]
index 2cbf70cdf4af699f2ec30ad72bd1fc6aac14cf56..492adf4993239ea775ba2756eaa0a08c3a8fe12a 100644 (file)
@@ -43,6 +43,8 @@ with the following additional tests:
 
 * included()
 
-  Tests whether the page is being included onto another page.
+  Tests whether the page is being included onto another page, for example
+  via [[inline]] or [[map]].  Note that pages inserted into other pages
+  via [[template]] are not matched here.
 
 [[!meta robots="noindex, follow"]]
index 5a3919dea63aeee57271fca7af4f84deff84952e..1f5bde964d088a31c430377ab44dd94ff60f752c 100644 (file)
@@ -91,7 +91,7 @@ Supported fields:
 
   Example:
 
-       \\[[!meta openid="http://joeyh.myopenid.com/"
+       \[[!meta openid="http://joeyh.myopenid.com/"
        server="http://www.myopenid.com/server"
        xrds-location="http://www.myopenid.com/xrds?username=joeyh.myopenid.com""]]
 
index 50655191001371b9c34d4c305c118676b7e4f80e..bda1427f39b6d3e688dc589b4ffd82aa3b09dc19 100644 (file)
@@ -11,6 +11,11 @@ leads to the full version of the page. Use it like this:
 
 If the `linktext` parameter is omitted it defaults to just "more".
 
+An optional `pages` parameter can be used to specify a
+[[ikiwiki/PageSpec]], and then the "more" link will only be displayed
+when the page is inlined into a page matching that PageSpec, and otherwise
+the full content shown.
+
 Note that you can accomplish something similar using a [[toggle]] instead.
 
 [[!meta robots="noindex, follow"]]
diff --git a/doc/ikiwiki/directive/table/discussion.mdwn b/doc/ikiwiki/directive/table/discussion.mdwn
new file mode 100644 (file)
index 0000000..87d2e0c
--- /dev/null
@@ -0,0 +1 @@
+The problem I have in my tables, is that some fields contain example HTML that needs to be escaped.
index 6c50fa32e45e370af28c94c0a027633aa9accc21..9e3ae54dfd6209c92528ace49ad5ae2b3279d486 100644 (file)
@@ -34,11 +34,15 @@ large chunks of marked up text to be embedded into a template:
 The template is a regular wiki page, located in the `templates/`
 subdirectory inside the source directory of the wiki.
 
-(Alternatively, templates can be stored in a directory outside the wiki,
+Alternatively, templates can be stored in a directory outside the wiki,
 as files with the extension ".tmpl".
-By default, these are searched for in `/usr/share/ikiwiki/templates`;
+By default, these are searched for in `/usr/share/ikiwiki/templates`,
 the `templatedir` setting can be used to make another directory be searched
-first.)
+first.  When referring to templates outside the wiki source directory, the "id"
+parameter is not interpreted as a pagespec, and you must include the full filename
+of the template page, including the ".tmpl" extension. E.g.:
+
+    \[[!template id=blogpost.tmpl]]
 
 The template uses the syntax used by the [[!cpan HTML::Template]] perl
 module, which allows for some fairly complex things to be done. Consult its
index c66395f8441397764124e4fe693a17f18dc5767a..fe1af4c153404c35aa21232c7d0f68ddfad55f6b 100644 (file)
@@ -32,6 +32,7 @@ Some more elaborate limits can be added to what matches using these functions:
   tags matched by a glob)
 * "`backlink(page)`" - matches only pages that a given page links to
 * "`creation_month(month)`" - matches only files created on the given month
+  number
 * "`creation_day(mday)`" - or day of the month
 * "`creation_year(year)`" - or year
 * "`created_after(page)`" - matches only files created after the given page
@@ -78,3 +79,7 @@ filenames of the pages in the wiki, so a pagespec "foo" used on page
 "a/b" will not match a page named "a/foo" or "a/b/foo". To match
 relative to the directory of the page containing the pagespec, you can
 use "./". For example, "./foo" on page "a/b" matches page "a/foo".
+
+To indicate the name of the page the PageSpec is used in, you can
+use a single dot. For example, `link(.)` matches all the pages
+linking to the page containing the PageSpec.
index efa111bae7f651d0790bcb9c39ce144fe1b4999b..29c0ba9e2fff370264a369b9a1ae829c7023b91d 100644 (file)
@@ -1,3 +1,8 @@
+Ikiwiki Hosting
+===============
+
+* [Branchable](http://branchable.com/)
+
 Projects & Organizations
 ========================
 
@@ -55,7 +60,8 @@ Projects & Organizations
 * [Serialist](http://serialist.net/)'s static pages (documentation, blog).  We actually have ikiwiki generate its static content as HTML fragments using a modified page.tmpl template, and then the FastCGI powering our site grabs those fragments and embeds them in the standard dynamic site template.
 * [Apua IT](http://apua.se/)
 * [PDFpirate Community](http://community.pdfpirate.org/)
-* [Banu](https://www.banu.com/)
+* [Banu](https://banu.com/) uses Ikiwiki for its website, to convert static Markdown pages into PHP scripts which are served along with non-Ikiwiki PHP generated contents. The static contents benefit from use of Ikiwiki's plugins. Ikiwiki is purely used as a CMS and no wiki or web-based editing is allowed. Ikiwiki is run offline, and the resulting scripts are uploaded using rsync to the website.
+* [Software in the Public Interest](http://spi-inc.org/)
 
 Personal sites and blogs
 ========================
@@ -149,10 +155,15 @@ Personal sites and blogs
 * [Ertug Karamatli](http://pages.karamatli.com)
 * [Jonatan Walck](http://jonatan.walck.i2p/) a weblog + wiki over [I2P](http://i2p2.de/). Also [mirrored](http://jonatan.walck.se/) to the Internet a few times per day.
 * [Daniel Wayne Armstrong](http://circuidipity.com/)
-* [Mukund](https://www.mukund.org/)
+* [Mukund](https://mukund.org/)
 * [Nicolas Schodet](http://ni.fr.eu.org/)
 * [weakish](http://weakish.github.com)
 * [Thomas Kane](http://planetkane.org/)
+* [Marco Silva](http://marcot.eti.br/) a weblog + wiki using the [darcs](http://darcs.net) backend
+* [NeX-6](http://nex-6.taht.net/) ikiwiki blog and wiki running over ipv6
+* [Jason Riedy](http://lovesgoodfood.com/jason/), which may occasionally look funny if I'm playing with my branch...
+* [pmate](http://pmate.nfshost.com)'s homepage and [blog](http://pmate.nfshost.com/blog/)
+* [tychoish.com](http://tychoish.com/) - a blog/wiki mashup. blog posts are "rhizomes."
 
 Please feel free to add your own ikiwiki site!
 
index cc3a4c29f186ca1d0c952c28b14733dda70d0659..f38ae2aabacacc72cef9a2f93aac21c305cedade 100644 (file)
@@ -41,5 +41,6 @@ If you're using a shared hosting provider, of the sort where you don't have
 root, you can still install ikiwiki. There are tutorials covering this for
 a few providers:
 
+
 * [[tips/NearlyFreeSpeech]]
 * [[tips/DreamHost]]
index 02cdb29c915092bdeb3ac55b0eb32464d73f5f8d..c06893ec1c0880f1646c88ed3f160d252681577f 100644 (file)
@@ -269,3 +269,65 @@ Any suggestions? Whew!
        perl Makefile.PL INSTALL_BASE=$HOME PREFIX=
        make
        make install
+
+---
+
+03 September 2010, Report on successful manual install in Debian 5 (Lenny) AMD64:
+
+note: Maybe much more easy using backports, but using this tools you get a plain user cpan  :)
+
+This where my steps:
+
+As root (#):
+
+        aptitude install build-essential curl perl
+
+
+As plain user ($), I use to install user perl modules using local::lib
+
+        mkdir -p "$HOME/downloads"
+        cd "$HOME/downloads/"
+        wget http://search.cpan.org/CPAN/authors/id/G/GE/GETTY/local-lib-1.006007.tar.gz
+        wget http://ftp.de.debian.org/debian/pool/main/i/ikiwiki/ikiwiki_3.20100831.tar.gz
+        tar -zxf local-lib-1.006007.tar.gz 
+        cd local-lib-1.006007/
+        perl Makefile.PL --bootstrap=~/.perl5
+        make test && make install
+        echo 'eval $(perl -I$HOME/.perl5/lib/perl5 -Mlocal::lib=$HOME/.perl5)' >>~/.bashrc
+        . ~/.bashrc
+        curl -L http://cpanmin.us | perl - App::cpanminus
+        cpanm CGI::FormBuilder
+        cpanm CGI::Session
+        cpanm HTML::Parser
+        cpanm HTML::Template
+        cpanm HTML::Scrubber
+        cpanm Text::Markdown
+        cpanm URI
+        cd ..
+        tar -zxf ikiwiki_3.20100831.tar.gz
+        cd ikiwiki/
+        perl Makefile.PL INSTALL_BASE= PREFIX=/home/$USER/.perl5
+        make test    # All tests successful.
+        make install INSTALL_BASE=/home/$USER/.perl5
+        . ~/.bashrc
+
+Using cpan or cpanm with local::lib, you can install any other dependency, as plain user (in your home). XS modules may need -dev packages.
+
+After all, here it's:
+
+        ikiwiki -version
+        ikiwiki version 3.20100831
+
+It seems like this installation looses the /etc files (we're as plain user), but this can be used as a workaround:
+
+        ikiwiki -setup ~/downloads/ikiwiki/auto.setup
+
+I've not investigated more the /etc files ussage, but does not seems like a good idea to be as plain user...
+
+        /etc/ikiwiki/wikilist does not exist
+        ** Failed to add you to the system wikilist file.
+        ** (Probably ikiwiki-update-wikilist is not SUID root.)
+        ** Your wiki will not be automatically updated when ikiwiki is upgraded.
+
+
+Iñigo
diff --git a/doc/news/ikiwiki-hosting.mdwn b/doc/news/ikiwiki-hosting.mdwn
new file mode 100644 (file)
index 0000000..092530a
--- /dev/null
@@ -0,0 +1,16 @@
+ikiwiki-hosting is an interface on top of Ikiwiki to allow easy management
+of lots of ikiwiki sites. I developed it for
+[Branchable](http://www.branchable.com/), an Ikiwiki hosting provider.
+It has a powerful, scriptable command-line interface, and also
+includes special-purpose ikiwiki plugins for things like a user control
+panel.
+
+To get a feel for it, here are some examples:
+
+       ikisite create foo.ikiwiki.net --admin http://joey.kitenet.net/
+       ikisite branch foo.ikiwiki.net bar.ikiwiki.net
+       ikisite backup bar.ikiwiki.net --stdout | ssh otherhost 'ikisite restore bar.ikiwiki.net --stdin'
+
+ikiwiki-hosting is free software, released under the AGPL. Its website:
+<http://ikiwiki-hosting.branchable.com/>
+--[[Joey]]
index 4f1ee7bf75c88dfbcae70e735f9f3186629515d4..87f640321b15a4399c04a9bebd62e569b247376e 100644 (file)
@@ -10,4 +10,4 @@ log back in, try out the OpenID signup process if you don't already have an
 OpenID, and see how OpenID works for you. And let me know your feelings about
 making such a switch. --[[Joey]]
 
-[[!poll 64 "Accept only OpenID for logins" 21 "Accept only password logins" 36 "Accept both"]]
+[[!poll 67 "Accept only OpenID for logins" 21 "Accept only password logins" 41 "Accept both"]]
index e611fa77b819c36b3fc6da04e0c33bc0aa5baa1f..bc9856ad90dd9b21fed91592663c03a2b05c6345 100644 (file)
@@ -80,3 +80,17 @@ which fails here? Or is something broken in Ikiwiki's implementation?
 > [[bugs/OpenID_delegation_fails_on_my_server]] --[[Joey]]
 
 Yes. I'd only recently set up my server as a delegate under wordpress, so still thought that perhaps the issue was on my end. But I'd since used my delegate successfully elsewhere, so I filed it as a bug against ikiwiki.
+
+----
+###Pretty Painless
+I just tried logging it with OpenID and it Just Worked.  Pretty painless.  If you want to turn off password authentication on ikiwiki.info, I say go for it. --[[blipvert]]
+
+> I doubt I will. The new login interface basically makes password login
+> and openid cooexist nicely. --[[Joey]] 
+
+###LiveJournal openid
+One caveat to the above is that, of course, OpenID is a distributed trust system which means you do have to think about the trust aspect.  A case in point is livejournal.com whose OpenID implementation is badly broken in one important respect:  If a LiveJournal user deletes his or her journal, and a different user registers a journal with the same name (this is actually quite a common occurrence on LiveJournal), they in effect inherit the previous journal owner's identity.  LiveJournal does not even have a mechanism in place for a remote site even to detect that a journal has changed hands.  It is an extremely dodgy situation which they seem to have *no* intention of fixing, and the bottom line is that the "identity" represented by a *username*.livejournal.com token should not be trusted as to its long-term uniqueness.  Just FYI.  --[[blipvert]]
+
+----
+
+Submitting bugs in the OpenID components will be difficult if OpenID must be working first...
diff --git a/doc/news/version_3.20100518.2.mdwn b/doc/news/version_3.20100518.2.mdwn
deleted file mode 100644 (file)
index 64ce3f8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-ikiwiki 3.20100518.2 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Fix a typo in the last release."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20100518.mdwn b/doc/news/version_3.20100518.mdwn
deleted file mode 100644 (file)
index f622a4b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-ikiwiki 3.20100518 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * page.tmpl: Accidentially broke po plugin's otherlanguages list styling
-     when modifying for html5; now fixed.
-   * Fix a bug that prevented matching deleted comments, and so did not update
-     pages that had contained them."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20100610.mdwn b/doc/news/version_3.20100610.mdwn
deleted file mode 100644 (file)
index ee7c86d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-ikiwiki 3.20100610 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * creation\_day() etc use local time, not gmtime. To match calendars, which
-     use local time.
-   * img: Fill in missing height or width when scaling image.
-   * Remove example blog tag pages; allow autotag creation to create them
-     when used.
-   * Fix support for globbing in tagged() pagespecs.
-   * Fix display of sidebar when previewing page edit. (Thanks, privat)
-   * relativedate: Fix problem with localised dates not working.
-   * editpage: Avoid storing accidental state changes when previewing pages.
-   * page.tmpl: Add a div around the page content, and comments, to aide in
-     sidebar styling.
-   * style.css: Improvements to make floating sidebar fit much better on
-     pages with inlines.
-   * calendar: Shorten day names, and improve styling of month calendar.
-   * style.css: Reduced sidebar width back to 20ex from 30; the month calendar
-     will now fit in the smaller width, and 30 was feeling too large."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20100623.mdwn b/doc/news/version_3.20100623.mdwn
deleted file mode 100644 (file)
index 684217e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-ikiwiki 3.20100623 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * openid: Add openid\_realm and openid\_cgiurl configuration options,
-     useful in a few edge case setups.
-   * attachment: Show files from underlay in attachments list.
-   * img: Support hspace and vspace attributes.
-   * editpage: Rename "comments" field to avoid CSS conflict with the
-     comments div.
-   * edittemplate: Make silent mode not disable display when the template
-     page does not exist, so it can be easily created.
-   * edittemplate: Look for template pages under templates/ like everything
-     else (still looks in old location for backwards compatibility).
-   * attachment: When inserting links, insert img directives for images,
-     if that plugin is enabled.
-   * websetup: Allow enabling plugins listed in disable\_plugins.
-   * editpage, comments: Fix broken links in sidebar (due to forcebaseurl).
-     (Thanks, privat)
-   * calendar: Tune archive\_pagespec to only match pages, not other files.
-   * Fix issues with combining unicode srcdirs and source files.
-     (Workaround bug #586045)
-   * Make --gettime be honored after initial setup.
-   * git: Fix --gettime to properly support utf8 filenames.
-   * attachment: Support Windows paths when taking basename of client-supplied
-     file name.
-   * theme: New plugin, allows easily themeing a site via the underlay.
-   * Added actiontabs theme by Svend Sorensen.
-   * Added blueview theme by Bernd Zeimetz.
-   * mercurial: Fix buggy getctime code. Closes: #[586279](http://bugs.debian.org/586279)
-   * link: Enhanced to handle URLs and email addresses. (Bernd Zeimetz)"""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20100704.mdwn b/doc/news/version_3.20100704.mdwn
deleted file mode 100644 (file)
index 9d2792c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-ikiwiki 3.20100704 released with [[!toggle text="these changes"]]
-[[!toggleable text="""
-   * Changes to avoid display of ugly google openids, by displaying
-     a username taken from openid.
-   * API: Add new optional field nickname to rcs\_recentchanges.
-   * API: rcs\_commit and rcs\_commit\_staged are now passed named
-     parameters.
-   * openid: Store nickname based on username or email provided from
-     openid provider.
-   * git: Record the nickname from openid in the git author email.
-   * comment: Record the username from openid in the comment page.
-   * Fixed some confusion and bugginess about whether
-     rcs\_getctime/rcs\_getmtime were passed absolute or relative filenames.
-     (Make it relative like everything else.)
-   * hnb: Fixed broken use of mkstemp that had caused dangling temp files,
-     and prevented actually rendering hnb files.
-   * Use comment template on comments page of example blog.
-   * comment.tmpl: Fix up display when inline uses it to display a non-comment
-     page. (Such as a discussion page.)
-   * git: Added git\_wrapper\_background\_command option. Can be used to eg,
-     make the git wrapper push to github in the background after ikiwiki
-     runs.
-   * po: Added needstranslation() pagespec. (intrigeri)
-   * po: Added support for .html source pages. (intrigeri)
-   * comment: Fix problem moderating comments of certian pages with utf-8
-     in their name."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20101023.mdwn b/doc/news/version_3.20101023.mdwn
new file mode 100644 (file)
index 0000000..44bed6b
--- /dev/null
@@ -0,0 +1,4 @@
+ikiwiki 3.20101023 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Fix typo that broke anonymous git push.
+   * Fix web reversion when the srcdir is in a subdir of the git repo."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20101112.mdwn b/doc/news/version_3.20101112.mdwn
new file mode 100644 (file)
index 0000000..ad59144
--- /dev/null
@@ -0,0 +1,17 @@
+ikiwiki 3.20101112 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * txt: Fix display when used inside a format directive.
+   * highlight: Ensure that other, more-specific format plugins,
+     like txt are used in preference to this one in case of ties.
+   * htmltidy, sortnaturally: Add missing checkconfig hook
+     registration. Closes: #[601912](http://bugs.debian.org/601912)
+     (Thanks, Craig Lennox and Tuomas Jormola)
+   * git: Use author date, not committer date. Closes: #[602012](http://bugs.debian.org/602012)
+     (Thanks, Tuomas Jormola)
+   * Fix htmlscrubber\_skip to be matched on the source page, not the page it is
+     inlined into. Should allow setting to "* and !comment(*)" to scrub
+     comments, but leave your blog posts unscrubbed, etc.
+   * comments: Make postcomment() pagespec work when previewing a comment,
+     including during moderation.
+   * comments: Make comment() pagespec also match comments that are being
+     posted."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20101129.mdwn b/doc/news/version_3.20101129.mdwn
new file mode 100644 (file)
index 0000000..366ad6e
--- /dev/null
@@ -0,0 +1,20 @@
+ikiwiki 3.20101129 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * websetup: Fix encoding problem when restoring old setup file.
+   * more: Add pages parameter to limit where the more is displayed.
+     (thanks, dark)
+   * Fix escaping of filenames in historyurl. (Thanks, aj)
+   * inline: Improve RSS url munging to use a proper html parser,
+     and support all elements that HTML::Tagset knows about.
+     (Which doesn't include html5 just yet, but then the old version
+     didn't either.) Bonus: 4 times faster than old regexp method.
+   * Optimise glob() pagespec. (Thanks, Kathryn and smcv)
+   * highlight: Support new format of filetypes.conf used by version 3.2
+     of the highlight package.
+   * edittemplate: Fix crash if using a .tmpl file or other non-page file
+     as a template for a new page.
+   * git: Fix temp file location.
+   * rename: Fix to pass named parameters to rcs\_commit.
+   * git: Avoid adding files when committing, so as not to implicitly add
+     files like recentchanges files that are not normally checked in,
+     when fixing links after rename."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20101201.mdwn b/doc/news/version_3.20101201.mdwn
new file mode 100644 (file)
index 0000000..410640c
--- /dev/null
@@ -0,0 +1,5 @@
+ikiwiki 3.20101201 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * meta: Fix calling of htmlscrubber to pass the page parameter.
+     The change of the htmlscrubber to look at page rather than destpage
+     caused htmlscrubber\_skip to not work for meta directives."""]]
\ No newline at end of file
diff --git a/doc/news/version_3.20101231.mdwn b/doc/news/version_3.20101231.mdwn
new file mode 100644 (file)
index 0000000..0146840
--- /dev/null
@@ -0,0 +1,31 @@
+ikiwiki 3.20101231 released with [[!toggle text="these changes"]]
+[[!toggleable text="""
+   * Better support for serving the same site on multiple urls. (Such as
+     a http and a https url, or a ipv4 and an ipv6 url.)
+     (Thanks, smcv)
+   * API: urlto without a defined second parameter now generates an url
+     that starts with "/" (when possible; eg when the site's url and cgiurl
+     are on the same domain).
+   * Now when users log in via https, ikiwiki sends a secure cookie, that can
+     only be used over https. If the user switches to using http, they will
+     need to re-login. (smcv)
+   * inline: Display feed buttons for nested inlines, linking to the inlined
+     page's feed. (Giuseppe Bilotta)
+   * goldtype: New theme, based on blueview, contributed by Lars Wirzenius.
+   * po: do not override homepage title when it was overridden. (intrigeri)
+   * Set HTML::Template's parent\_global\_vars option to allow using parameters
+     like title\_overridden that do not appear on the template. (intrigeri)
+     (See https://rt.cpan.org/Public/Bug/Display.html?id=64158)
+   * inline: Force an absolute page location when the inline postform is used.
+   * editpage, comment: Clean up title when editing or creating a page or
+     comment.
+   * teximg: Use `\[` and `\]` instead of not recommended `$$`. (Paul Menzel)
+     Closes: #[596084](http://bugs.debian.org/596084)
+   * monotone: Improve version parsing to support patch and development
+     versions of the monotone binary. (tommyd3mdi)
+   * highlight: Support highlight 3.2+svn19 (note that released version 3.2
+     is not supported). Closes: #[605779](http://bugs.debian.org/605779) (David Bremner)
+   * Add a second parameter to the rcs\_diff hook, and avoid bloating memory
+     reading in enormous commits.
+   * git: Fix bug involving attempting to web revert a commit that included
+     changes to attachments."""]]
\ No newline at end of file
index 1a9844577cae7c5bb54f2066205a5cdc80c8c20a..a3336ee0854fc21eea49a1c65b1e4ca72642d615 100644 (file)
@@ -89,3 +89,35 @@ New bug: new posts aren't getting displayed (or cached for aggregation). After f
 >>> mind having a copy to investigate. --[[Joey]]
 
 >>>> Didn't think of that, will keep a copy if there's a next time. -- [[schmonz]]
+
+-----
+
+In a corporate environment where feeds are generally behind
+authentication, I need to prime the aggregator's `LWP::UserAgent`
+with some cookies. What I've done is write a custom plugin to populate
+`$config{cookies}` with an `HTTP::Cookies` object, plus this diff:
+
+    --- /var/tmp/pkg/lib/perl5/vendor_perl/5.10.0/IkiWiki/Plugin/aggregate.pm  2010-06-24 13:03:33.000000000 -0400
+    +++ aggregate.pm    2010-06-24 13:04:09.000000000 -0400
+    @@ -488,7 +488,11 @@
+                        }
+                        $feed->{feedurl}=pop @urls;
+                }
+    -           my $res=URI::Fetch->fetch($feed->{feedurl});
+    +           my $res=URI::Fetch->fetch($feed->{feedurl},
+    +                                     UserAgent => LWP::UserAgent->new(
+    +                                           cookie_jar => $config{cookies},
+    +                                     ),
+    +           );
+                if (! $res) {
+                        $feed->{message}=URI::Fetch->errstr;
+                        $feed->{error}=1;
+
+It works, but I have to remember to apply the diff whenever I update
+ikiwiki.  Can you provide a more elegant means of allowing cookies and/or
+the user agent to be programmatically manipulated? --[[schmonz]]
+
+> Ping -- is the above patch perhaps acceptable (or near-acceptable)? -- [[schmonz]]
+
+>> Pong.. I'd be happier with a more 100% solution that let cookies be used
+>> w/o needing to write a custom plugin to do it. --[[Joey]] 
index 2d6b6f1f0ad3b4e0944e4f81884442011765055f..76d09cd3c32bf8d5804d8454f99d256cc516980b 100644 (file)
@@ -1,6 +1,13 @@
 Would it be possible to add an option to only generate the index files
 for the html output and not place the markdown files in the wiki source?
 
+> Or better still, add a mechanism for ikiwiki to hold transient source
+> pages in memory and render them as if they existed, without actually
+> writing them out, as [[JoeRayhawk]] suggests below? I think
+> add_autofile would be the way to do this.
+> I've added this to [[todo]] as [[todo/autoindex should use add__95__autofile]]
+> and [[todo/transient_pages]]. --[[smcv]]
+
 The reason being that I have a lot of directories which need to be autoindexed,
 but I would prefer if the index files didn't clutter up my git repository.
 
@@ -15,6 +22,8 @@ If you just don't want to clutter your git repo, below it's a patch does the fol
 
 * If you set autoindex_commit to 1 (this is the default), auto-generated index files will be put in the repo provided you enabled rcs backend.
 
+[[!toggle id="patch-for-autoindex_commit" text="patch for autoindex_commit"]]
+[[!toggleable id="patch-for-autoindex_commit" text="""
 <pre>
 --- autoindex.pm.orig  2009-10-01 17:13:51.000000000 +0800
 +++ autoindex.pm       2009-10-01 17:21:09.000000000 +0800
@@ -58,6 +67,18 @@ If you just don't want to clutter your git repo, below it's a patch does the fol
                                gettext("automatic index generation"),
                                undef, undef);
 </pre>
-
+"""]]
  
 Warning:  I guess this patch may work, but I *haven't tested it yet*.  -- [[weakish]]
+
+------
+
+`autoindex_commit => 0` would be nice, but uncommited files are definitely not.
+<pre>
+remote: From /srv/git/test3
+remote:    3047077..1df636c  master     -> origin/master
+remote: error: Untracked working tree file 'test.mdwn' would be overwritten by merge.  Aborting
+remote: 'git pull --prune origin' failed:  at /usr/share/perl5/IkiWiki/Plugin/git.pm line 201.
+</pre>
+
+It'd be nice if we were able to notice directories with no associated compilable markup files and compile a simple map directive straight to HTML without any intermediate markup file being involved at all. -- JoeRayhawk
index bb76a9d8be426418815074aa0c0ae5db3ac68658..6fc21e8ee479986a3821c0d9708d551a012c67b2 100644 (file)
@@ -13,3 +13,11 @@ otherwise be invalid, so this shouldn't produce any conflicts with expected
 behavior. (Right?) -- [[StevenBlack]]
 
 > Great idea! Just implemented that and also relative years. --[[Joey]] 
+
+Anyone know of a way to generate a link to the previous and next calendar pages for archive browsing?  In the worst case, that requires regenerating pages on either side of the current one when something is inserted in the history, and I can't quite figure that much out. --[[JasonRiedy]]
+
+> Well, the calendar directive puts such links on the calendars. They're
+> the arrows to either side of the month or year at the top. --[[Joey]]
+
+>> Thanks. I either missed them or they appeared on an upgrade. I might make them a bit more obvious with 
+>> "Previous Month" / "Next Month" links above and below the text. Someday.--[[JasonRiedy]]
index 3cfcb68d4095e1817e4d335f85256ffb27083683..daf16fd3c34176f71b6ca846af9434632418f8a7 100644 (file)
@@ -34,10 +34,10 @@ Each page containing an `album` directive is treated as a photo album.
 
 Every image attached to an album or its subpages is considered to be part of
 the album. A "viewer" page, with the wiki's default page extension, will be
-generated to display the image, if there isn't already a page of the same
-name as the image: for instance, if `debconf` is an album and
-`debconf/tuesday/p100.jpg` exists, then `debconf/tuesday/p100.mdwn` might
-be created.
+generated in the [[transient underlay|todo/transient_pages]] to display the
+image, if there isn't already a page of the same name as the image: for
+instance, if `debconf` is an album and `debconf/tuesday/p100.jpg` exists,
+then `debconf/tuesday/p100.mdwn` might be created.
 
 There's currently a hard-coded list of extensions that are treated as images:
 `png`, `gif`, `jpg`, `jpeg` or `mov` files. More image and video types could
@@ -138,7 +138,7 @@ image viewer.
   as a reference implementation of that hook.
 
 * There should be an option to reduce the size of photos and write them into
-  an underlay, for this workflow:
+  an underlay (perhaps just the transient underlay), for this workflow:
 
   * your laptop's local ikiwiki has two underlays, `photos` and `webphotos`
   * `photos` contains full resolution photos with EXIF tags
index b9ad3cc8eb3375a5e3f94b7a69e0045afa6e8b6b..16c147b68fa6a637ae9a45b6f3a94c393d3efa6d 100644 (file)
@@ -6,9 +6,9 @@
 Someone was just asking for it and I had written these two plugins already some months ago,
 so I'm now publishing them here.
 
-[`copyright.pm`](http://www.schwinge.homeip.net/~thomas/tmp/copyright.pm)
+[`copyright.pm`](http://schwinge.homeip.net/~thomas/tmp/copyright.pm)
 and
-[`license.pm`](http://www.schwinge.homeip.net/~thomas/tmp/license.pm)
+[`license.pm`](http://schwinge.homeip.net/~thomas/tmp/license.pm)
 
 Usage instructions are found inside the two plugin files.
 
@@ -45,3 +45,10 @@ by ikiwiki are likewise fine.  --[[tschwinge]]
 > and can extend beyond just copyright and license, but has the disadvantage
 > that it doesn't support setting defaults for a given "subdirectory"
 > only. --[[smcv]]
+
+[[!template id=gitbranch branch=smcv/contrib/defcopyright author="[[tschwinge]]"]]
+
+> For `./gitremotes` convenience (taking the Linus approach to backups :-) )
+> I've added this to my git repository as a branch. No review, approval or
+> ownership is implied, feel free to replace this with a branch in any other
+> repository --[[smcv]]
index 191f8b27d81d32fcfa43f81511d017b7da3f2ce5..6161f80dfc1a19c2d1c5c88fe48945d64624fbcc 100644 (file)
@@ -327,6 +327,81 @@ smcv's discuission of field author vs meta author above. --[[Joey]]
 
 -----
 
+I think the main point is: what is (or should be) the main point of the
+field plugin? If it's essentially a way to present a consistent
+interface to access page-related structured information, then it makes
+sense to have it very general. Plugins registering with fields would
+then present ways for recovering the structure information from the page
+(`ymlfront`, `meta`, etc),  ways to manipulate it (like `meta` does),
+etc.
+
+In this sense, security should be entirely up to the plugins, although
+the fields plugin could provide some auxiliary infrastructure (like
+determining where the data comes from and raise or lower the security
+level accoringly).
+
+Namespacing is important, and it should be considered at the field
+plugin interface level. A plugin should be able to register as
+responsible for the processing of all data belonging to a given
+namespace, but plugins should be able to set data in any namespace. So
+for example, `meta` register are `meta` fields processing, and whatever
+method is used to set the data (`meta` directive, `ymlfront`, etc) it
+gets a say on what to do with data in its namespace.
+
+What I'm thinking of is something you could call fieldsets. The nice
+thing about them is that, aside from the ones defined by plugins (like
+`meta`), it would be possible to define custom ones (with a generic,
+default processor) in an appropriate file (like smileys and shortcuts)
+with a syntax like:
+
+    [[!fieldset book namespace=book
+       fields="author title isbn"
+       fieldtype="text text text"]]
+
+after which, you coude use
+
+    [[!book author="A. U. Thor"
+            title="Fields of Iki"]]
+
+and the data would be available under the book namespace, and thus
+as BOOK_AUTHOR, BOOK_TITLE etc in templates.
+
+Security, in this sense, would be up to the plugin responsible for the
+namespace processing (the default handler would HTML-escape text fields
+scrub, html fields, safeurl()ify url fields, etc.)
+
+> So, are you saying that getting a field value is sort of a two-stage process?  Get the value from anywhere, and then call the "security processor" for that namespace to "secure" the value?  I think "namespaces" are really orthogonal to this issue.  What the issue seems to be is:
+
+   * what form do we expect the raw field to be in? (text, URL, HTML)
+   * what form do we expect the "secured" output to be in? (raw HTML, scrubbed HTML, escaped HTML, URL)
+
+> Only if we know both these things will we know what sort of security processing needs to be done.
+
+>> Fieldsets are orthogonal to the security issue in the sense that you can use
+>> them without worrying about the field security issue, but they happen to be
+>> a rather clean way of answering those two questions, by allowing you to
+>> attach preprocessing attributes to a field in a way that the user
+>> (supposedly) cannot mingle with.
+
+> There is also a difference between field values that are used inside pagetemplate, and field values which are used as part of a page's content (e.g. with ftemplate).  If you have a TITLE, you want it to be HTML-escaped if you're using it inside pagetemplate, but you don't want it to be HTML-escaped if you're using it inside a page's content.  On the other hand, if you have, say, FEEDLINKS used inside pagetemplate, you don't wish it to be HTML-escaped at all, or your page content will be completely stuffed.
+
+>> Not to talk about the many different ways date-like fields might be need
+>> processing. It has already been proposed to solve this problem by exposing
+>> the field values under different names depending on the kind or amout of
+>> postprocessing they had (e.g. RAW_SOMEFIELD, SOMEFIELD, to which we could add
+>> HTML_SOMEFIELD, URL_SOMEFIELD or whatever). Again, fieldsets offer a simple way
+>> of letting Ikiwiki know what kind of postprocessing should be offered for
+>> that particular field.
+
+> So, somehow, we have to know the meaning of a field before we can use it properly, which kind of goes against the idea of having something generic.
+
+>> We could have a default field type (text, for example), and a way to set a
+>> different field type (which is what my fieldset proposal was about).
+
+> --[[KathrynAndersen]]
+
+-----
+
 I was just looking at HTML5 and wondered if the field plugin should generate the new Microdata tags (as well as the internal structures)? <http://slides.html5rocks.com/#slide19> -- [[Will]]
 
 > This could just as easily be done as a separate plugin.  Feel free to do so. --[[KathrynAndersen]]
index f8f005c319dadbb8bda326143a10632413bc6c6a..e9b4bf85728e2d7d771f4ac37094e45d667b5b82 100644 (file)
@@ -10,6 +10,9 @@ I wrote some notes on [jonatan.walck.se](http://jonatan.walck.se/software/ikiwik
 
 This plugin is licensed under [CC0](http://creativecommons.org/publicdomain/zero/1.0/) (public domain).
 
+Note that there is now a [[plugins/flattr]] plugin bundled with ikiwiki. It
+is less configurable, not supporting static buttons, but simpler to use.
+
 # Usage #
 
     # [[!flattr args]] where args are in the form of arg=value.
index 91fe04a6d879728f3344890ccf51ccaa21a6e387..151af8d92b31b827836b4d12a7063ca440654162 100644 (file)
@@ -1 +1,33 @@
 Isn't this functionality a part of what [[plugins/toc]] needs and does? Then probably the [[plugins/toc]] plugin's code could be split into the part that implements the [[plugins/contrib/headinganchors]]'s functionality and the TOC generation itself. That will bring more order into the code and the set of available plugins. --Ivan Z.
+
+---
+
+A patch to make it more like MediaWiki:
+
+<pre>--- headinganchors.pm
++++ headinganchors.pm
+@@ -5,6 +5,7 @@
+ use warnings;
+ use strict;
+ use IkiWiki 2.00;
++use URI::Escape;
+ sub import {
+         hook(type => "sanitize", id => "headinganchors", call => \&headinganchors);
+@@ -14,9 +15,11 @@
+         my $str = shift;
+         $str =~ s/^\s+//;
+         $str =~ s/\s+$//;
+-        $str = lc($str);
+-        $str =~ s/[&\?"\'\.,\(\)!]//mig;
+-        $str =~ s/[^a-z]/_/mig;
++        $str =~ s/\s/_/g;
++        $str =~ s/"//g;
++        $str =~ s/^[^a-zA-Z]/z-/; # must start with an alphabetical character
++        $str = uri_escape_utf8($str);
++        $str =~ s/%/./g;
+         return $str;
+ }
+ </pre>
+
+--Changaco
diff --git a/doc/plugins/contrib/ikiwiki/directive/ymlfront.mdwn b/doc/plugins/contrib/ikiwiki/directive/ymlfront.mdwn
new file mode 100644 (file)
index 0000000..1a01834
--- /dev/null
@@ -0,0 +1,17 @@
+The `ymlfront` directive is supplied by the [[!iki plugins/contrib/ymlfront desc=ymlfront]] plugin.
+
+This directive allows the user to define arbitrary meta-data in YAML format.
+
+    \[[!ymlfront data="""
+     foo: fooness
+     bar: The Royal Pigeon
+     baz: 2
+     """]]
+
+There is one argument to this directive.
+
+* **data:**
+  The YAML-format data.  This should be enclosed inside triple-quotes to preserve the data correctly.
+
+If more than one ymlfront directive is given per page, the result is undefined.
+Likewise, it is inadvisable to try to mix the non-directive ymlfront format with the directive form of the data.
diff --git a/doc/plugins/contrib/imailhide.mdwn b/doc/plugins/contrib/imailhide.mdwn
new file mode 100644 (file)
index 0000000..6009aa0
--- /dev/null
@@ -0,0 +1,65 @@
+[[!template id=plugin name=imailhide author="Peter_Vizi"]]
+[[!tag type/widget type/html]]
+
+# Mailhide Plugin for Ikiwiki
+
+This plugin provides the directive mailhide, that uses the [Mailhide
+API][1] to protect email addresses from spammers.
+
+## Dependencies
+
+The [Captcha::reCAPTCHA::Mailhide][2] perl module is required for this
+plugin.
+
+## Download
+
+You can get the source code from [github][3].
+
+## Installation
+
+Copy `imailhide.pm` to `/usr/share/perl/5.10.0/IkiWiki/Plugin` or
+`~/.ikiwiki/IkiWiki/Plugin`, and enable it in your `.setup` file
+
+    add_plugins => [qw{goodstuff imailhide ....}],
+    mailhide_public_key => "8s99vSA99fF11mao193LWdpa==",
+    mailhide_private_key => "6b5e4545326b5e4545326b5e45453223",
+    mailhide_default_style => "short",
+
+## Configuration
+
+### `mailhide_public_key`
+
+This is your personal public key that you can get at [Google][4].
+
+### `mailhide_private_key`
+
+This is your personal private key that you can get at [Google][4].
+
+### `mailhide_default_style`
+
+As per the recommendation of the [Mailhide API documentation][5], you
+can define this as `short` or `long`. The `short` parameter will
+result in `<a href="...">john</a>` links, while the `long` parameter
+will result in `joh<a href="...">...</a>@example.com`.
+
+## Parameters
+
+### `email`
+
+*Required.* This is the email addres that you want to hide.
+
+### `style`
+
+*Optional.* You can set the style parameter individually for each
+ `mailhide` call. See `mailhide_default_style` for details.
+
+## Known Issues
+
+1. [opening new window when displaying email address][6]
+
+[1]: http://www.google.com/recaptcha/mailhide/
+[2]: http://search.cpan.org/perldoc?Captcha::reCAPTCHA::Mailhide
+[3]: http://github.com/petervizi/imailhide
+[4]: http://www.google.com/recaptcha/mailhide/apikey
+[5]: http://code.google.com/apis/recaptcha/docs/mailhideapi.html
+[6]: http://github.com/petervizi/imailhide/issues#issue/1
index 8f8e6b4e8fed0e0b5ec5ee44c94214675963ef48..df88b33adbba06bbde3425884e9af45067a68090 100644 (file)
@@ -30,6 +30,11 @@ them work as wiki pages.
 
 **pages**: A PageSpec to determine the pages to report on.
 
+**pagenames**: If given instead of pages, this is interpreted as a
+space-separated list of links to pages, and they are shown in exactly the order
+given: the sort and pages parameters cannot be used in conjunction with this
+one.  If they are used, they will be ignored.
+
 **trail**: A page or pages to use as a "trail" page.
 
 When a trail page is used, the matching pages are limited to (a subset
@@ -45,6 +50,11 @@ For example:
 This will take the links from both the "animals/cats" page and the
 "animals/dogs" page as the set of pages to apply the PageSpec to.
 
+**start**: Start the report at the given page-index; the index starts
+from zero.
+
+**count**: Report only on N pages where count=N.
+
 **sort**: A SortSpec to determine how the matching pages should be sorted.
 
 **here_only**: Report on the current page only.
@@ -86,7 +96,19 @@ The "mood_summary" template might be like this:
     ### <TMPL_VAR NAME="TITLE">
     (<TMPL_VAR NAME="DATE">) \[[<TMPL_VAR NAME="PAGE">]]
     <TMPL_VAR NAME="DESCRIPTION">
-    
+### Multi-page Reports
+
+Reports can now be split over multiple pages, so that there aren't
+too many items per report-page.
+
+**per_page**: how many items to show per report-page.
+
+**first_page_is_index**: If true, the first page of the report is just
+an index which contains links to the other report pages.
+If false, the first page will contain report-content as well as links
+to the other pages.
+
 ### Advanced Options
 
 The following options are used to improve efficiency when dealing
index 595bd27aa7a270732a38142ede24c7e72dfeb566..a2769166de943bdcfe9072bd027e3c4868571a78 100644 (file)
@@ -8,7 +8,7 @@ This plugin is not neccessarily meant to enable people to write arbitrary
 wiki pages in the Texinfo format (even though that is possible, of course),
 but rather to ease collaboration on existing Texinfo documents.
 
-The plugin is available at <http://www.schwinge.homeip.net/~thomas/tmp/texinfo.pm>.
+The plugin is available at <http://schwinge.homeip.net/~thomas/tmp/texinfo.pm>.
 
 It's very basic at the moment, but will be improved over time.
 
diff --git a/doc/plugins/contrib/transient.mdwn b/doc/plugins/contrib/transient.mdwn
new file mode 100644 (file)
index 0000000..6003196
--- /dev/null
@@ -0,0 +1,35 @@
+*For discussion and the branch please see [[todo/transient pages]]. If this
+plugin is merged, this page can be renamed to act as its documentation. --[[smcv]]*
+
+[[!template id=plugin name=transient author="[[Simon_McVittie|smcv]]"]]
+[[!tag type/special-purpose]]
+
+The `transient` plugin adds an underlay in `.ikiwiki/transient`, which is
+intended for pages that are automatically created and should not be committed
+to the [[RCS]]. It works in the same way as the [[basewiki]] and the underlays
+set up by the [[plugins/underlay]] plugin, so if a page in the transient
+underlay is edited via the web, the edited version is committed to the RCS
+as usual. Unlike other underlays, if a page in the transient underlay is
+superseded by an edited version in the RCS, the old transient version
+is deleted automatically.
+
+This plugin is mostly useful as something that other plugins can depend on:
+
+* [[plugins/contrib/album]] always writes photo-album "viewer" pages to the
+  transient underlay
+
+Likely future users of this plugin (the appropriate branches need to be
+merged first):
+
+* with a patch (which exists but hasn't yet been tested), [[plugins/aggregate]]
+    always writes aggregated posts into the transient underlay
+* with a patch, [[plugins/autoindex]] can be configured to auto-create missing
+    pages that have a [[ikiwiki/subpage]] or an [[plugins/attachment]], but not
+    commit them, in which case they go in the transient underlay
+* [[plugins/comments]] can be configured to not commit comments: if so, it
+    should probably put them in the transient underlay
+* with a patch, [[plugins/recentchanges]] always writes new changes into the
+    transient underlay
+* with a patch, [[plugins/tag]] can be configured to auto-create missing
+    tag pages but not commit them, in which case they go in the transient
+    underlay
index 6dd8ed532ad07d9873ae45be37ad9a70d7b53cef..2805be04fd838429e71be664f12558e1f1003635 100644 (file)
@@ -10,39 +10,79 @@ IkiWiki::Plugin::ymlfront - add YAML-format data to a page
     # activate the plugin
     add_plugins => [qw{goodstuff ymlfront ....}],
 
+    # configure the plugin
+    ymlfront_delim => [qw(--YAML-- --YAML--)],
+
 ## DESCRIPTION
 
 This plugin provides a way of adding arbitrary meta-data (data fields) to any
-page by prefixing the page with a YAML-format document.  This provides a way to
-create per-page structured data, where each page is treated like a record, and
-the structured data are fields in that record.  This can include the meta-data
-for that page, such as the page title.
+page by prefixing the page with a YAML-format document.  This also provides
+the [[ikiwiki/directive/ymlfront]] directive, which enables one to put
+YAML-formatted data inside a standard IkiWiki [[ikiwiki/directive]].
+
+This is a way to create per-page structured data, where each page is
+treated like a record, and the structured data are fields in that record.  This
+can include the meta-data for that page, such as the page title.
 
 This plugin is meant to be used in conjunction with the [[field]] plugin.
 
 ## DETAILS
 
-The YAML-format data in a page must be placed at the start of the page
-and delimited by lines containing precisely three dashes.  The "normal"
-content of the page then follows.
+There are three formats for adding YAML data to a page.  These formats
+should not be mixed - the result is undefined.
 
-For example:
+1. ymlfront directive
+   
+   See [[ikiwiki/directive/ymlfront]] for more information.
 
-    ---
-    title: Foo does not work
-    Urgency: High
-    Status: Assigned
-    AssignedTo: Fred Nurk
-    Version: 1.2.3
-    ---
-    When running on the Sprongle system, the Foo function returns incorrect data.
+2. default YAML-compatible delimiter
+
+   By default, the YAML-format data in a page is placed at the start of
+   the page and delimited by lines containing precisely three dashes.
+   This is what YAML itself uses to delimit multiple documents.
+   The "normal" content of the page then follows.
+
+   For example:
+
+       ---
+       title: Foo does not work
+       Urgency: High
+       Status: Assigned
+       AssignedTo: Fred Nurk
+       Version: 1.2.3
+       ---
+       When running on the Sprongle system, the Foo function returns incorrect data.
+
+   What will normally be displayed is everything following the second line of dashes.  That will be htmlized using the page-type of the page-file.
+
+3. user-defined delimiter
+
+   Instead of using the default "---" delimiter, the user can define,
+   in the configuration file, the **ymlfront_delim** value, which is an
+   array containing two strings. The first string defines the markup for
+   the start of the YAML data, and the second string defines the markip
+   for the end of the YAML data. These two strings can be the same, or
+   they can be different. In this case, the YAML data section is not
+   required to be at the start of the page, but as with the default, it
+   is expected that only one data section will be on the page.
+
+   For example:
+
+       --YAML--
+       title: Foo does not work
+       Urgency: High
+       Status: Assigned
+       AssignedTo: Fred Nurk
+       Version: 1.2.3
+       --YAML--
+       When running on the Sprongle system, the Foo function returns incorrect data.
 
-What will normally be displayed is everything following the second line of dashes.
-That will be htmlized using the page-type of the page-file.
+   What will normally be displayed is everything outside the delimiters,
+   both before and after.  That will be htmlized using the page-type of the page-file.
 
 ### Accessing the Data
 
-There are a few ways to access the data given in the YAML section.
+There are a few ways to access the given YAML data.
 
 * [[getfield]] plugin
 
index b5c08fedd23b0fa0a1cbd21dc97bf14ba198f7bb..b122294bb4e8194ac6dfe10984a6d2b6cca5bcda 100644 (file)
@@ -1,13 +1,31 @@
-My field-etc branch in git://git.pseudorandom.co.uk/git/smcv/ikiwiki.git (gitweb:
-<http://git.pseudorandom.co.uk/smcv/ikiwiki.git?a=shortlog;h=refs/heads/field-etc>)
-has some fixes for compatibility with old YAML modules, mostly done by imitating
-Joey's code in IkiWiki::Setup::Yaml. Please consider merging :-) --[[smcv]]
+Now that I have implemented a \[[!ymlfront ...]] directive, I would like to remove support for the old "---" delimited format, because
 
-> I would if I could *find* it.  I checked out the "field-etc" branch, but I can't find the plugins in question under IkiWiki/Plugin; am I looking in the wrong place, or what?
-> --[[KathrynAndersen]]
+* it is fragile (easily breakable)
+* it is non-standard
 
->> Sorry, I accidentally removed `field-etc` by pushing with `--mirror` from a
->> different checkout. I've put it back; it's a branch from your `ikiplugins.git`,
->> so yes, the code should be in `IkiWiki/Plugin`. --[[smcv]]
+Any objections?
 
->>> Done a while back, but now I've actually pushed to my repo. --[[KathrynAndersen]]
+> Well, I don't have much standing since I have been too lame to integrate
+> ymlfront into ikiwiki yet. Buy, my opinion is, I liked the old
+> format of putting the YAML literally at the front of the file. It
+> seemed to allow parsing the file as YAML, using any arbitrary YAML
+> processer. And it was nice how it avoided boilerplate. --[[Joey]] 
+
+>> The old delimited format also has the advantage of being remarkably similar to the
+>> [MultiMarkDown](http://fletcherpenney.net/multimarkdown/users_guide/multimarkdown_syntax_guide/)
+>> way of including metadata in documents. The only difference is that MMD doesn't expect the
+>> triple-dash separators, but I'm thinking about submitting a patch to MMD to actually support
+>> that syntax. --GB
+
+>>> Yes, the idea was to allow the file to be parsed as YAML, you're right.  I just found that I tended to have problems when people used "---" for horizontal rules.  However, I have also found that trying to keep it solely as an IkiWiki directive doesn't work either, since sometimes the meta-data I need also contained "]]" which broke the parsing of the directive.
+>>> So I have decided to go for a compromise, and make the delimiter configurable, rather than hardcoded as "---"; the triple-dash is the default, but it can be configured to be something else instead.  I haven't pushed the change yet, but I have written it, and it seems to work. -- [[KathrynAndersen]]
+
+>>>> I'm not sure about what kind of problems you're meeting with "---" being used
+>>>> for horizontal rules: isn't it sufficient to just check that (1) the triple-dash
+>>>> is the first thing in the page and (2) there are only YAML-style assignments
+>>>> (and no blank lines) between the two markers? Check #2 would also be enough to
+>>>> support MMD-style metadata, which means (a) no start marker and (b) empty line
+>>>> to mark the end of the metadata block. Would this be supported by the plugin?
+>>>> --GB
+
+>>>>> Since I allow all legal YAML, the only way to check if it is legal YAML is to use the YAML parser, by which time one is already parsing the YAML, so it seems a bit pointless to check before one does so. -- KA
index e5f68b29c317d1ae854bc0a28661be3b953446db..b038bc433c7c3dbdbb0da64334c41b954f843099 100644 (file)
@@ -7,7 +7,8 @@ status. These tests are mostly useful for the [[attachment]] plugin, and
 are documented [[here|ikiwiki/pagespec/attachment]].
 
 This plugin will use the [[!cpan File::MimeInfo::Magic]] perl module, if
-available, for mimetype checking.
+available, for mimetype checking. It falls back to using the `file` command
+if necessary for hard to detect files.
 
 The `virusfree` [[PageSpec|ikiwiki/pagespec/attachment]] requires that
 ikiwiki be configured with a virus scanner program via the `virus_checker`
index f91950b7df39a894c63f54991c885f019cde73c1..f3f3c4ffddd5dc0381eb1352e4018ccc6e650598 100644 (file)
@@ -15,3 +15,71 @@ if ::magic() returns undef?  --[[DavidBremner]]
 >> for ::default
 
 >>> Applied
+
+---
+
+At first I need to thank you for ikiwiki - it is what I was always looking
+for - coming from a whole bunch of wiki engines, this is the most
+intelligent and least bloated one.
+
+My question is about the [[plugins/attachment]] plugin in conjunction with
+[[plugins/filecheck]]: I am using soundmanger2 js-library for having
+attached media files of all sorts played inline a page. 
+
+To achieve this soundmanager2 asks for an id inside a ul-tag surrounding
+the a-tag. I was wondering if the Insert Link button could be provided with
+a more elegant solution than to have this code snippet to be filled in by
+hand every time you use it to insert links for attached media files. And in
+fact there apparently is a way in attachment.pm. 
+
+While I can see that it is not needed for everyone inserting links to
+attached media files to have ul- and li-tags surrounding the link itself as
+well as being supplied with an id fill in, for me it would be the most
+straight forward solution. Pitty is I don't have the time to wrap my head
+around perl to write a patch myself.  Is there any way to have this made an
+option which can be called via templates?
+
+For sure I would like to donate for such a patch as well as I will do it
+for ikiwiki anyway, because it is such a fine application.
+
+If you are not familiar with soundmanager2: It is a very straight forward
+solution to inline mediafiles, using the usual flash as well as html5
+solutions (used by soundcloud.com, freesound.org and the like). Worth a
+look anyway [schillmania.com](http://www.schillmania.com/)
+
+Boris
+
+> The behavior of "Insert Links" is currently hardcoded to support images
+> and has a fallback for other files. What you want is a 
+> [[todo/generic_insert_links]] that can insert a template directive.
+> Then you could make a template that generates the html needed for
+> soundmanager2. I've written down a design at
+> [[todo/generic_insert_links]]; I am currently very busy and not sure
+> when I will get around to writing it, but with it on the todo list
+> I shouldn't forget. --[[Joey]] 
+> 
+> You could make a [[ikiwiki/directive/template]] for soundmanager2
+> now, and manually insert the template directive for now
+> when you want to embed a sound file. Something like this:
+
+       \[[!template id=embed_mp3 file=your.mp3]]
+
+> Then in templates/embed_mp3.mdwn, something vaguely like this:
+
+       <ul id="foo">
+       <a href="<TMPL_VAR FILE>">mp3</a>
+       </ul>
+
+>> Thanks a lot - looking forward to [[todo/generic_insert_links]] - I am using the [[ikiwiki/directive/template]] variant also adding a name vaiable, it looks like this and is working fine:
+
+        <ul class="playlist">
+        <li>
+        <a href="<TMPL_VAR FILE>"><TMPL_VAR NAME></a>
+        </li>
+        </ul>
+
+>> Calling it: 
+
+        \[[!template id=embedmedia.tmpl file=../Tinas_Gonna_Have_A_Baby.mp3 name="Tina's Gonna Have A Baby" ]]
+
+>> BTW your Flattr button doesn't seem to work properly - or it is Flattr itself that doesn't- clicking it won't let ikiwiki show up on my Dashboard.
diff --git a/doc/plugins/flattr.mdwn b/doc/plugins/flattr.mdwn
new file mode 100644 (file)
index 0000000..5da2795
--- /dev/null
@@ -0,0 +1,9 @@
+[[!template id=plugin name=flattr author="[[Joey]]"]]
+[[!tag type/web]]
+
+[Flattr](http://flattr.com/) is a social micropayment platform.
+This plugin allows easily adding Flattr buttons to pages,
+using the [[ikiwiki/directive/flattr]] directive.
+
+This plugin has a configuration setting. `flattr_userid` can be set
+to either your numeric flatter userid, or your flattr username.
index 65130ae8c65fcf0fab149ab87551f7ba82d4c211..d57d7dc947c4c12486d235b35463e8e71ddef7c2 100644 (file)
@@ -22,4 +22,4 @@ Some example graphs:
 [[!graph src="a -- b -- c -- a;" prog="circo" type="graph"]]
 """]]
 
-This plugin uses the [[!cpan Digest::SHA1]] perl module.
+This plugin uses the [[!cpan Digest::SHA]] perl module.
index c59b46e14e12624463881101fff3190de36061c1..080575c463e0e531ba2717989a966b93221e7fb5 100644 (file)
@@ -32,10 +32,11 @@ other HTML-related functionality, such as whether [[meta]] allows
 potentially unsafe HTML tags.
 
 The `htmlscrubber_skip` configuration setting can be used to skip scrubbing
-of some pages. Set it to a [[ikiwiki/PageSpec]], such as "!*/Discussion",
-and pages matching that can have all the evil CSS, JavsScript, and unsafe
-html elements you like. One safe way to use this is to use [[lockedit]] to
-lock those pages, so only admins can edit them.
+of some pages. Set it to a [[ikiwiki/PageSpec]], such as 
+"posts/* and !comment(*) and !*/Discussion", and pages matching that can have
+all the evil CSS, JavsScript, and unsafe html elements you like. One safe
+way to use this is to use [[lockedit]] to lock those pages, so only admins
+can edit them.
 
 ----
 
index 53327c1dae94ef5896119cc874133a9a3c1a9b4e..f91e44ea317d1b0bd9655f545541d1d55ad0aa66 100644 (file)
@@ -49,15 +49,15 @@ Supported languages
 `po_master_language` is used to set the "master" language in
 `ikiwiki.setup`, such as:
 
-        po_master_language => { 'code' => 'en', 'name' => 'English' }
+        po_master_language => 'en|English'
 
 `po_slave_languages` is used to set the list of supported "slave"
 languages, such as:
 
-        po_slave_languages => { 'fr' => 'Français',
-                                'es' => 'Español',
-                                'de' => 'Deutsch',
-        }
+        po_slave_languages => [ 'fr|Français',
+                                'es|Español',
+                                'de|Deutsch',
+        ]
 
 Decide which pages are translatable
 -----------------------------------
@@ -117,12 +117,13 @@ serve any page in the client's preferred language, if available.
 
 Add 'Options MultiViews' to the wiki directory's configuration in Apache.
 
-When `usedirs` is enabled, one has to set `DirectoryIndex index` for
-the wiki context.
+When `usedirs` is enabled, you should also set `DirectoryIndex index`.
 
-Setting `DefaultLanguage LL` (replace `LL` with your default MIME
-language code) for the wiki context can help to ensure
-`bla/page/index.en.html` is served as `Content-Language: LL`.
+These settings are also recommended, in order to avoid serving up rss files
+as index pages:
+
+       AddType application/rss+xml;qs=0.8 .rss
+       AddType application/atom+xml;qs=0.8 .atom
 
 For details, see [Apache's documentation](http://httpd.apache.org/docs/2.2/content-negotiation.html).
 
@@ -198,7 +199,7 @@ enabled, "slave" pages therefore link to the "master" page's
 discussion page.
 
 Likewise, "slave" pages are not supposed to have sub-pages;
-[[WikiLinks|wikilink]] that appear on a "slave" page therefore link to
+[[WikiLinks|ikiwiki/wikilink]] that appear on a "slave" page therefore link to
 the master page's sub-pages.
 
 Translating
@@ -235,159 +236,14 @@ When using po4a older than 0.35, it is recommended to uninstall
 `Text::WrapI18N` (Debian package `libtext-wrapi18n-perl`), in order to
 avoid a potential denial of service.
 
-TODO
+BUGS
 ====
 
-Better links
-------------
-
-Once the fix to
-[[bugs/pagetitle_function_does_not_respect_meta_titles]] from
-[[intrigeri]]'s `meta` branch is merged into ikiwiki upstream, the
-generated links' text will be optionally based on the page titles set
-with the [[meta|plugins/meta]] plugin, and will thus be translatable.
-It will also allow displaying the translation status in links to slave
-pages. Both were implemented, and reverted in commit
-ea753782b222bf4ba2fb4683b6363afdd9055b64, which should be reverted
-once [[intrigeri]]'s `meta` branch is merged.
-
-An integration branch, called `meta-po`, merges [[intrigeri]]'s `po`
-and `meta` branches, and thus has this additional features.
-
-Language display order
-----------------------
-
-Jonas pointed out that one might want to control the order that links to
-other languages are listed, for various reasons. Currently, there is no
-order, as `po_slave_languages` is a hash. It would need to be converted
-to an array to support this. (If twere done, twere best done quickly.)
---[[Joey]] 
-
-> Done in my po branch, preserving backward compatibility. Please
-> review :) --[[intrigeri]]
-
->> Right, well my immediate concern is that using an array to hold
->> hash-like pairs is not very clear to the user. It will be displayed
->> in a confusing way by websetup; dumping a setup file will probably
->> also cause it to be formatted in a confusing way. And the code
->> seems to assume that the array length is even, and probably blows
->> up if it is not.. and the value is marked safe so websetup can be
->> used to modify it and break that way too. --[[Joey]] 
-
->>> I have added a sanity check for the even array problem. This was
->>> the easy part.
->>>
->>> About the hash-like vs. dump and websetup issue,
->>> I can think of a few solutions:
->>>
->>> - keep the current hash-like pairs and unmark this setting as safe
->>>   for websetup: this does not solve the dump setup issue, though;
->>> - replace the array of pairs with an array of
->>>   "LANGUAGECODE|LANGUAGENAME" elements, using a pipe or whatever
->>>   separator seems adequate;
->>> - add support for ordered hashes to `$config`, websetup and
->>>   dumpsetup, using Tie-IxHash or any similar module;
->>> - replace the array of hash-like pairs with an array of real
->>>   pairs, such as `[ ['de', 'Deutsch'], ['fr', 'Français'] ]`; this
->>>   brings once again the need for `$config` to support arrays of
->>>   arrays, which I have already implemented in my mirrorlist branch
->>>   (see [[todo/mirrorlist_with_per-mirror_usedirs_settings]] for
->>>   details).
->>>
->>> Joey, which of these solutions do you prefer? Or another one?
->>> I tend to prefer the last one. --[[intrigeri]]
-
->>>> I prefer the pipe separator, I think. I'm concerned that there is 
->>>> no way to really sanely represent complex data structures in web
->>>> setup. --[[Joey]]
-
-Pagespecs
----------
-
-I was suprised that, when using the map directive, a pagespec of "*"
-listed all the translated pages as well as regular pages. That can 
-make a big difference to an existing wiki when po is turned on,
-and seems generally not wanted.
-(OTOH, you do want to match translated pages by
-default when locking pages.) --[[Joey]]
-
-Edit links on untranslated pages
---------------------------------
-
-If a page is not translated yet, the "translated" version of it
-displays wikilinks to other, existing (but not yet translated?)
-pages as edit links, as if those pages do not exist. 
-
-That's really confusing, especially as clicking such a link
-brings up an edit form to create a new, english page.
-
-This is with po_link_to=current or negotiated. With default, it doesn't
-happen.. 
-
-Also, this may only happen if the page being linked to is coming from an
-underlay, and the underlays lack translation to a given language.
---[[Joey]] 
-
-> Any simple testcase to reproduce it, please? I've never seen this
-> happen yet. --[[intrigeri]]
-
->> Sure, go here <http://l10n.ikiwiki.info/smiley/smileys/index.sv.html>
->> (Currently 0% translateed) and see the 'WikiLink' link at the bottom,
->> which goes to <http://l10n.ikiwiki.info/ikiwiki.cgi?page=ikiwiki/wikilink&from=smiley/smileys&do=create>
->> Compare with eg, the 100% translated Dansk version, where
->> the WikiLink link links to the English WikiLink page. --[[Joey]] 
-
-Double commits of po files
---------------------------
-
-When adding a new english page, the po files are created, committed,
-and then committed again. The second commit makes this change:
-
-       -"Content-Type: text/plain; charset=utf-8\n"
-       -"Content-Transfer-Encoding: ENCODING"
-       +"Content-Type: text/plain; charset=UTF-8\n"
-       +"Content-Transfer-Encoding: ENCODING\n"
+[[!inline pages="bugs/po:* and !bugs/done and !link(bugs/done) and !bugs/*/*"
+feeds=no actions=no archive=yes show=0]]
 
-Same thing happens when a change to an existing page triggers a po file
-update. --[[Joey]] 
-
-> * The s/utf-8/UTF-8 part is fixed in my po branch.
-> * The ENCODING\n part is due to an inconsistency in po4a, which
->   I've just send a patch for. --[[intrigeri]]
-
-New pages not translatable
---------------------------
-
-Today I added a new English page to l10n.ikiwiki.info. When I saved,
-the page did not have the translation links at the top. I waited until
-the po plugin had, in the background, created the po files, and refreshed;
-still did not see the translation links. Only when I touched the page
-source and refreshed did it finally add the translation links. 
-I can reproduce this bug in a test site. --[[Joey]]
-
-Ugly messages with empty files
-------------------------------
-
-If there are empty .mdwn files, the po plugin displays some ugly messages.
-
-> This is due to a bug in po4a (not checking definedness of a
-> variable). One-liner patch sent. --[[intrigeri]]
-
-Translation of directives
--------------------------
-
-If a translated page contains a directive, it may expand to some english
-text, or text in whatever single language ikiwiki is configured to "speak".
-
-Maybe there could be a way to switch ikiwiki to speaking another language
-when building a non-english page? Then the directives would get translated.
-
-(We also will need this in order to use translated templates, when they are
-available.)
-
-Documentation
--------------
+TODO
+====
 
-Maybe write separate documentation depending on the people it targets:
-translators, wiki administrators, hackers. This plugin may be complex
-enough to deserve this.
+[[!inline pages="todo/po:* and !todo/done and !link(todo/done) and !todo/*/*"
+feeds=no actions=no archive=yes show=0]]
index 73858c8189972ce700b9088e09bd0a19799d715c..50998e822daed616bf5a206d1800ff4d8f338fa2 100644 (file)
@@ -644,28 +644,6 @@ daring a timid "please pull"... or rather, please review again :)
 >>> need improvements to the deletion UI to de-confuse that. It's fine to
 >>> put that off until needed --[[Joey]] 
 >> 
-> * Re the meta title escaping issue worked around by `change`. 
->   I suppose this does not only affect meta, but other things
->   at scan time too. Also, handling it only on rebuild feels
->   suspicious -- a refresh could involve changes to multiple
->   pages and trigger the same problem, I think. Also, exposing
->   this rebuild to the user seems really ugly, not confidence inducing.
->   
->   So I wonder if there's a better way. Such as making po, at scan time,
->   re-run the scan hooks, passing them modified content (either converted
->   from po to mdwn or with the escaped stuff cheaply de-escaped). (Of
->   course the scan hook would need to avoid calling itself!)
-> 
->   (This doesn't need to block the merge, but I hope it can be addressed
->   eventually..)
->  
-> --[[Joey]] 
->> 
->> I'll think about it soon.
->> 
->> --[[intrigeri]]
->>
->>> Did you get a chance to? --[[Joey]] 
 
  * As discussed at [[todo/l10n]] the templates needs to be translatable too.  They
    should be treated properly by po4a using the markdown option - at least with my
index 823f685024102c070dd1285b6509376fbdb64159..6fff18e8a40e5594fbb05bf9c7b2eee72cdf413d 100644 (file)
@@ -6,6 +6,8 @@ generates a page describing each recent change made to the wiki. These
 pages can be joined together with [[inline]] to generate the
 [[RecentChanges]] page.
 
+This plugin also currently handles web-based reversion of changes.
+
 Typically only the RecentChanges page will use the pages generated by this
 plugin, but you can use it elsewhere too if you like. It's used like this:
 
index 3c3b03275a471dc572ba68e6e129b077170ee5c2..c84a6218e37334c540174a47f1f0e2ab0996fc51 100644 (file)
@@ -71,3 +71,11 @@ I need help on a couple of points
 * Can we include this in ikiwiki's rst if it is not too hairy?
 
 --ulrik
+
+
+----
+
+> The main problem with more sophisticated RST support is that ikiwiki turns 
+preprocessor directives into raw HTML and reST hates inline HTML.
+
+Is it possible for ikiwiki to store preprocessor directives in memory, and replace them with place holders, then do the rst process.  After the rst processing, process the preprocessor directives and replace place holders.  --[[weakish]]
index 92cc5945a27489c9118e272582bd15651456c3dd..e95739cf36569171e863e7587c3613bea53f4b50 100644 (file)
@@ -4,7 +4,7 @@
 This plugin adds full text search to ikiwiki, using the
 [xapian](http://xapian.org/) engine, its
 [omega](http://xapian.org/docs/omega/overview.html) frontend, and the
-[[!cpan Search::Xapian]], [[!cpan Digest::SHA1]], and [[!cpan HTML::Scrubber]]
+[[!cpan Search::Xapian]], [[!cpan Digest::SHA]], and [[!cpan HTML::Scrubber]]
 perl modules.
 
 The [[ikiwiki/searching]] page describes how to write search queries.
index ee3928d7ed4835df89a9731381e381ac737bb684..83e24a27d54a8912c70e089c17b37b00f745e050 100644 (file)
@@ -16,7 +16,7 @@ to use the plugin, you will need:
   php can find it when `sparkline/Sparkline.php` is required.
 * The GD PHP module used by the Sparkline library.
 * A "php" program in the path, that can run standalone php programs.
-* [[!cpan Digest::SHA1]]
+* [[!cpan Digest::SHA]]
 
 On a Debian system, this can be accomplished by installing these packages:
 `libsparkline-php` `php5-gd` `php5-cli` `libdigest-sha1-perl`
index 7149cc163019a68e449a2ed0544ce9cfad68b419..ebbb0be8e6473bfea363013972e4149aa8a90cdb 100644 (file)
@@ -4,8 +4,8 @@
 The theme plugin allows easily applying a theme to your wiki, by
 configuring the `theme` setting in the setup file with the name of a theme
 to use. The themes you can choose from are all subdirectories, typically
-inside `/usr/share/ikiwiki/themes/`.
+inside `/usr/share/ikiwiki/themes/`. See [[themes]] for an overview
+of the themes included in ikiwiki.
 
-A theme provides, via the underlay, an enhanced version of the regular
-[[style.css]]. This leaves [[local.css]] free for you to further
-customise. Themes can also provide header and background images.
+You can set the theme via the **theme** option in your config file (after
+enabling the plugin). Refresh the wiki after changing it to see the changes.
index 2e3902388f5c7bba8cc7d57fc39d288d8b2e4faf..f0f79ebc7faf58013847674e5855e7a64ab0888d 100644 (file)
@@ -1,4 +1,4 @@
-Ikiwiki's plugin interface allows all kinds of useful [[plugins]] to be
+lkiwiki's plugin interface allows all kinds of useful [[plugins]] to be
 written to extend ikiwiki in many ways. Despite the length of this page,
 it's not really hard. This page is a complete reference to everything a
 plugin might want to do. There is also a quick [[tutorial]].
@@ -177,10 +177,15 @@ function is passed no values.
 
        hook(type => "needsbuild", id => "foo", call => \&needsbuild);
 
-This allows a plugin to manipulate the list of files that need to be
-built when the wiki is refreshed. The function is passed a reference to an
-array of files that will be rebuilt, and can modify the array, either
-adding or removing files from it.
+This allows a plugin to observe or even manipulate the list of files that
+need to be built when the wiki is refreshed. 
+
+As its first parameter, the function is passed a reference to an array of
+files that will be built. It should return an array reference that is a
+modified version of its input. It can add or remove files from it.
+
+The second parameter passed to the function is a reference to an array of
+files that have been deleted.
 
 ### scan
 
@@ -600,6 +605,13 @@ function of the ikiwiki wrapper when it is being generated.
 The code runs before anything else -- in particular it runs before
 the suid wrapper has sanitized its environment.
 
+### disable
+
+       hook(type => "disable", id => "foo", call => \&disable);
+
+This hook is only run when a previously enabled plugin gets disabled
+during ikiwiki setup. Plugins can use this to perform cleanups.
+
 ## Exported variables
 
 Several variables are exported to your plugin when you `use IkiWiki;`
@@ -728,6 +740,8 @@ with no ".tmpl" extension. Template pages are normally looked for in
 the templates/ directory. If the page name starts with "/", a page
 elsewhere in the wiki can be used.
 
+If the template is not found, or contains a syntax error, an error is thrown.
+
 ### `template_depends($$;@)`
 
 Use this instead of `template()` if the content of a template is being
@@ -968,14 +982,22 @@ This is the standard gettext function, although slightly optimised.
 
 This is the standard ngettext function, although slightly optimised.
 
-### `urlto($$;$)`
+### `urlto($;$$)`
 
 Construct a relative url to the first parameter from the page named by the
 second. The first parameter can be either a page name, or some other
 destination file, as registered by `will_render`.
 
-If the third parameter is passed and is true, an absolute url will be
-constructed instead of the default relative url.
+Provide a second parameter whenever possible, since this leads to better
+behaviour for the [[plugins/po]] plugin and `file:///` URLs.
+
+If the second parameter is not specified (or `undef`), the URL will be
+valid from any page on the wiki, or from the CGI; if possible it'll
+be a path starting with `/`, but an absolute URL will be used if
+the wiki and the CGI are on different domains.
+
+If the third parameter is passed and is true, the url will be a fully
+absolute url. This is useful when generating an url to publish elsewhere.
 
 ### `newpagefile($$)`
 
@@ -1129,19 +1151,19 @@ The data structure returned for each change is:
                ],
        }
 
-#### `rcs_diff($)`
+#### `rcs_diff($;$)`
+
+The first parameter is the rev from `rcs_recentchanges`.
+The optional second parameter is how many lines to return (default: all).
 
-The parameter is the rev from `rcs_recentchanges`.
 Should return a list of lines of the diff (including \n) in list
-context, and the whole diff in scalar context.
+context, and a string containing the whole diff in scalar context.
 
 #### `rcs_getctime($)`
 
 This is used to get the page creation time for a file from the RCS, by looking
 it up in the history.
 
-It's ok if this is not implemented, and throws an error.
-
 If the RCS cannot determine a ctime for the file, return 0.
 
 #### `rcs_getmtime($)`
@@ -1162,9 +1184,9 @@ sense to implement for all RCSs.
 
 It should examine the incoming changes, and do any sanity 
 checks that are appropriate for the RCS to limit changes to safe file adds,
-removes, and changes. If something bad is found, it should exit
-nonzero, to abort the push. Otherwise, it should return a list of
-files that were changed, in the form:
+removes, and changes. If something bad is found, it should die, to abort
+the push. Otherwise, it should return a list of files that were changed,
+in the form:
 
        {
                file => # name of file that was changed
@@ -1177,6 +1199,28 @@ files that were changed, in the form:
 The list will then be checked to make sure that each change is one that
 is allowed to be made via the web interface.
 
+#### `rcs_preprevert($)`
+
+This is called by the revert web interface. It is passed a RCS-specific
+change ID, and should determine what the effects would be of reverting
+that change, and return the same data structure as `rcs_receive`.
+
+Like `rcs_receive`, it should do whatever sanity checks are appropriate
+for the RCS to limit changes to safe changes, and die if a change would
+be unsafe to revert.
+
+#### `rcs_revert($)`
+
+This is called by the revert web interface. It is passed a named
+parameter rev that is the RCS-specific change ID to revert.
+
+It should try to revert the specified rev, and leave the reversion staged
+so `rcs_commit_staged` will complete it. It should return undef on _success_
+and an error message on failure.
+
+This hook and `rcs_preprevert` are optional, if not implemented, no revert
+web interface will be available.
+
 ### PageSpec plugins
 
 It's also possible to write plugins that add new functions to
index e30bf2ff3d8d4f3e0cf1054fba7a136dbf9910a3..a3fbe8a2cd0ade030ad38c01d042c596329bb089 100644 (file)
@@ -1,7 +1,7 @@
 External plugins are standalone, executable programs, that can be written
 in any language. When ikiwiki starts up, it runs the program, and
-communicates with it using [XML RPC][xmlrpc]. If you want to [[write]] an external
-plugin, read on..
+communicates with it using [XML RPC][xmlrpc]. If you want to [[write]] an
+external plugin, read on..
 
 [xmlrpc]: http://www.xmlrpc.com/
 
@@ -85,8 +85,8 @@ language as part of their XML RPC interface.
 
 XML RPC has a limitation that it does not have a way to pass
 undef/NULL/None. There is an extension to the protocol that supports this,
-but it is not yet available in the [[!cpan XML::RPC]] library used by
-ikiwiki.
+but it is not yet available in all versions of the [[!cpan XML::RPC]] library
+used by ikiwiki.
 
 Until the extension is available, ikiwiki allows undef to be communicated
 over XML RPC by passing a sentinal value, a hash with a single key "null"
index 83c6910d07252f59c98cf6d15bbd74f0139cfb61..06af9807c1ee5dcaa6cb69b906a0583c5356deb0 100644 (file)
@@ -23,6 +23,8 @@ auto.setup          |yes    |yes    |incomplete|yes         |incomplete   |yes
 `rcs_diff`          |yes    |yes    |yes       |yes         |no           |yes      |yes       |yes
 `rcs_getctime`      |fast   |slow   |slow      |slow        |slow         |slow     |slow      |slow
 `rcs_getmtime`      |fast   |slow   |slow      |no          |no           |no       |no        |no
+`rcs_preprevert`    |yes    |no     |no        |no          |no           |no       |no        |no
+`rcs_revert`        |yes    |no     |no        |no          |no           |no       |no        |no
 anonymous push      |yes    |no     |no        |no          |no           |no       |no        |no
 conflict handling   |yes    |yes    |yes       |buggy       |yes          |yes      |yes       |yes
 openid username     |yes    |no     |no        |no          |no           |no       |no        |no
index 691f20ffe782f010823455a2eba0ce0b739e679e..049abee0f582f23000541aa1b082b4145deb2218 100644 (file)
@@ -1,21 +1,32 @@
-This is the [[SandBox]], a page anyone can edit to try out ikiwiki (version [[!version  ]]).
+Hello, world!
 
-> This is a blockerquote.
+test...id
+
+This is the [[SandBox]], a page anyone can edit to try out ikiwiki
+(version [[!version  ]]).
+
+> This is a blockquote.
 >
 > This is the first level of quoting.
 >
-> > This is nested blockquote.
+> > This is nested blockquote.
 >
 >> Without a space works too.
 >>> to three levels
 >
 > Back to the first level.
 
+1. Hot Items that are hot
+ 1. Daves Insanity Sauce
+ 2. Marie Sharps 
+ 1. Blazing Inferno
+1. Not so Hot Items
+ 1. Tabasco 
+
 Numbered list 
 
 1. First item.
  1. Sub item.
- 2. bar
 1. Another.
 1. And another..
  1. foo
@@ -46,6 +57,39 @@ Bulleted list
 * [[different_name_for_a_WikiLink|ikiwiki/WikiLink]]
 * <http://www.gnu.org/>
 * [GNU](http://www.gnu.org/)
+* <a href="http://kitenet.net/~joey/">Joey's blog</a>
+
+testing 123
+
+I wonder how org-mode would look once formatted with ikiwiki..
+
+----
+
+# header1
+
+## header2
+
+### header3
+
+#### header4
+
+##### header 5
+
+**bold**
+
+ * bullet
+
+ 1 list
+
+ 2 list
+
+ 3 list
+
+[[link]]
+
+_italic_
+
+
 
 ----
 
diff --git a/doc/sandbox/Fantasia.mdwn b/doc/sandbox/Fantasia.mdwn
new file mode 100644 (file)
index 0000000..8845ec9
--- /dev/null
@@ -0,0 +1,10 @@
+>> Block
+>>> Two Block
+
+[[blog]] blog
+
+* one
+* two
+
+# one
+# two
diff --git a/doc/sandbox/Mooooo.mdwn b/doc/sandbox/Mooooo.mdwn
new file mode 100644 (file)
index 0000000..6f11d35
--- /dev/null
@@ -0,0 +1 @@
+Hrm.
diff --git a/doc/sandbox/Nur_so..mdwn b/doc/sandbox/Nur_so..mdwn
new file mode 100644 (file)
index 0000000..32c9f23
--- /dev/null
@@ -0,0 +1 @@
+Das ist ein Test.
diff --git a/doc/sandbox/Post.mdwn b/doc/sandbox/Post.mdwn
deleted file mode 100644 (file)
index 7ae6166..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-Ikiwiki is a **wiki compiler**. It converts wiki pages into HTML pages
-suitable for publishing on a website. Ikiwiki stores pages and history in a
-[[revision_control_system|rcs]] such as [[Subversion|rcs/svn]] or [[rcs/Git]].
-There are many other [[features]], including support for
-[[blogging|blog]], as well as a large array of [[plugins]].
diff --git a/doc/sandbox/Testing_blog_entry.mdwn b/doc/sandbox/Testing_blog_entry.mdwn
new file mode 100644 (file)
index 0000000..aa5fa5b
--- /dev/null
@@ -0,0 +1,7 @@
+# Be cool, this is a test!
+
+Hello guys, this is *just a test* entry.
+
+* Did I say
+* that I love
+* bulleted lists?
diff --git a/doc/sandbox/bullet_list_and_code_test.mdwn b/doc/sandbox/bullet_list_and_code_test.mdwn
new file mode 100644 (file)
index 0000000..a17729c
--- /dev/null
@@ -0,0 +1,12 @@
+paragraph.
+
+    code
+
+ * bullet list
+ * bullet list
+
+    more code
+
+ * bullet list continued
+
+    tailing code
diff --git a/doc/sandbox/hey.mdwn b/doc/sandbox/hey.mdwn
new file mode 100644 (file)
index 0000000..a955185
--- /dev/null
@@ -0,0 +1 @@
+* Hello
diff --git a/doc/sandbox/prova_blog.html b/doc/sandbox/prova_blog.html
deleted file mode 100644 (file)
index d69937e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-Questa è una prova.
-Vediamo se funziona
-
-<pre>
-#!/bin/bash
-
-echo "ciao"
-</pre>
diff --git a/doc/sandbox/revert_me.mdwn b/doc/sandbox/revert_me.mdwn
new file mode 100644 (file)
index 0000000..2b1cd2f
--- /dev/null
@@ -0,0 +1 @@
+this looks good
index 34a0052397fa857552051fc7e06cef84a1ccab01..4fa531eb14a4c842f401fee72d845c19e481c1da 100644 (file)
@@ -440,3 +440,16 @@ with the release of ikiwiki 3.20100312.
 A fix was also backported to Debian etch, as version 2.53.5. I recommend
 upgrading to one of these versions if your wiki can be edited by third
 parties.
+
+## javascript insertation via insufficient htmlscrubbing of comments
+
+Kevin Riggle noticed that it was not possible to configure
+`htmlscrubber_skip` to scrub comments while leaving unscubbed the text
+of eg, blog posts. Confusingly, setting it to "* and !comment(*)" did not
+scrub comments.
+
+Additionally, it was discovered that comments' html was never scrubbed during
+preview or moderation of comments with such a configuration.
+
+These problems were discovered on 12 November 2010 and fixed the same
+hour with the release of ikiwiki 3.20101112. ([[!cve CVE-2010-1673]])
index 266222cc3aad37950cacee3b88f7f66b5af259a9..40581eb725bff0e41a58482fd6606bd929693502 100644 (file)
@@ -22,6 +22,8 @@ Or, set up a blog with ikiwiki, run this command instead.
 
        % ikiwiki -setup /etc/ikiwiki/auto-blog.setup
 
+`librpc-xml-perl` and `python-docutils` dependencies are needed.
+
 Either way, it will ask you a couple of questions.
 
        What will the wiki be named? foo
@@ -68,6 +70,7 @@ source. (Remember to replace "foo" with the real directory name.)
        cvs -d `pwd`/foo get -P ikiwiki
        bzr clone foo foo.src
        hg clone foo foo.src
+       darcs get foo.darcs foo.src
        # TODO monotone, tla
 
 Now to edit pages by hand, go into the directory you checked out (ie,
@@ -129,7 +132,7 @@ old location won't work, and the easiest way to deal with this is to delete
 them and re-checkout from the new repository location.
    
        % rm -rf foo
-       % git clone /src/git/foo.git
+       % git clone /srv/git/foo.git
 
 Finally, edit the setup file. Modify the settings for `srcdir`, `destdir`,
 `url`, `cgiurl`, `cgi_wrapper`, `git_wrapper`, etc to reflect where
index 86cff5af4e58696eb8ada93e5b35771406ed421e..75a5648d5212ba8d090764ea4064229d2a7d1923 100644 (file)
@@ -104,7 +104,7 @@ is ok, run `ikiwiki --setup ikiwiki.setup`, and you're done!
 There are lots of other configuration options in ikiwiki.setup that you
 can uncomment, configure, and enable by re-running
 `ikiwiki --setup ikiwiki.setup`. Be sure to browse through all the
-[[plugins]]..
+[[plugins]].
 
 ## Put your wiki in revision control.
 
index 74f7740dbae53b71814aaa24970f27f00343073c..388d5a49c18fa9d94c549559e1c6d52f237dc3b3 100644 (file)
@@ -258,3 +258,12 @@ precicely breaks without it? -- [[Jon]]
 > I don't remember what was the specific problem with perl 5.8.8. All I can
 > find is some taint checking bugs, which are currently worked around by
 > taint checking being disabled. --[[Joey]]
+
+---
+
+Did anyone tried to install ikiwiki under a vhost setup ? 
+ikiwiki is installed under a debian lenny system. but without write acces to /etc/ikiwiki (obvious) i am coming not far.
+Or do i miss something which is probably hidden deeper in the documentation ?
+
+----
+Perhaps it's worth noting that when installing ikiwiki with apt on Debian stable, you need to use the backports version in order to follow the setup instructions.
index 54dd0fdb1eadfac386b31b2dd2f014349a54184a..cafe3f573ef5cfd4811bee9688afa1675302aca9 100644 (file)
@@ -11,13 +11,13 @@ Some examples of using shortcuts include:
 
 This page controls what shortcut links the wiki supports.
 
-* [[!shortcut name=google url="http://www.google.com/search?q=%s"]]
+* [[!shortcut name=google url="https://encrypted.google.com/search?q=%s"]]
 * [[!shortcut name=archive url="http://web.archive.org/*/%S"]]
 * [[!shortcut name=gmap url="http://maps.google.com/maps?q=%s"]]
 * [[!shortcut name=gmsg url="http://groups.google.com/groups?selm=%s"]]
-* [[!shortcut name=wikipedia url="http://en.wikipedia.org/wiki/%s"]]
-* [[!shortcut name=wikitravel url="http://wikitravel.org/en/%s"]]
-* [[!shortcut name=wiktionary url="http://en.wiktionary.org/wiki/%s"]]
+* [[!shortcut name=wikipedia url="https://secure.wikimedia.org/wikipedia/en/wiki/%s"]]
+* [[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]]
+* [[!shortcut name=wiktionary url="https://secure.wikimedia.org/wiktionary/en/wiki/%s"]]
 * [[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]]
 * [[!shortcut name=deblist url="http://lists.debian.org/debian-%s" desc="debian-%s@lists.debian.org"]]
 * [[!shortcut name=debpkg url="http://packages.debian.org/%s"]]
diff --git a/doc/shortcuts/discussion.mdwn b/doc/shortcuts/discussion.mdwn
new file mode 100644 (file)
index 0000000..aac9845
--- /dev/null
@@ -0,0 +1,13 @@
+# Suggestions for multi-language links
+
+Sites like Wikipedia have different URLs for each language. The shortcut for Wikipedia `!wikipedia` points to `https://secure.wikimedia.org/wikipedia/en/wiki/%s` which is the English version.
+
+Do you have a suggestion on how to make that shortcut also be used to point to a different language.
+
+1. The option to just adapt the shortcut (`s/en/de/`) is quite cumbersome for non English speakers and also has the disadvantage of always updating the shortcut links manually after each modification in the upstream ikiwiki shortcut list to stay in sync.
+1. Adding an extra shortcut for every language, e. g. `!wikipediade`, with for example the country TLD in it is an option but would make the shortcut list quite big.
+1. Adding a `lang` parameter comes also to my mind, but I do not know how feasible that is.
+
+Thanks. --[[PaulePanter]]
+
+> Does anyone have an opinion on the shortcuts for google/wikipedia pointing at the HTTPS services? Introduced by [this edit by Paul Panter](http://git.ikiwiki.info/?p=ikiwiki;a=blobdiff;f=doc/shortcuts.mdwn;h=cafe3f573ef5cfd4811bee9688afa1675302aca9;hp=54dd0fdb1eadfac386b31b2dd2f014349a54184a;hb=704038db298c0f3a8039dcfe8d3a801c26fadf15;hpb=2a1077f8869ca65b49e09d99a76b595d90b28499). Personally, I think they should be separate shortcut keys.  Most of my google/WP usage is such that I would prefer it over HTTP (faster, less resource usage at client side). However, I never use the shortcuts feature in ikiwiki anyway... -- [[Jon]] 
index 53b1055f6165198d5a4e52a1242abb3817cc2d53..c39e65c33d0d14ff0b3d6813d8ffb357c3d164f1 100644 (file)
Binary files a/doc/smileys/icon-error.png and b/doc/smileys/icon-error.png differ
index 8dd3b1c151905d0c2f8fdae03c0b8bda8c38bf55..aa27d88664a8ff924a486bd5d0c9f22f615d727f 100644 (file)
@@ -14,7 +14,7 @@ nav {
 
 .header {
        margin: 0;
-       font-size: 22px;
+       font-size: 140%;
        font-weight: bold;
        line-height: 1em;
        display: block;
@@ -22,7 +22,7 @@ nav {
 
 .inlineheader .author {
        margin: 0;
-       font-size: 18px;
+       font-size: 112%;
        font-weight: bold;
        display: block;
 }
@@ -172,7 +172,8 @@ div.recentchanges {
        width: 35%;
        font-size: small;
 }
-.recentchanges .pagelinks {
+.recentchanges .pagelinks,
+.recentchanges .revert {
        float: right;
        margin: 0;
        width: 60%;
@@ -449,6 +450,10 @@ li.L8 { list-style: upper-alpha; }
        background: #ff9900;
 }
 
+.FlattrButton {
+       display: none;
+}
+
 /* openid selector */
 #openid_choice {
        display: none;
index bfb6a439adc7b71096b4641f077a116648cba10f..4fd2bf5012872c96caed7ea782b398e4713feec4 100644 (file)
@@ -74,7 +74,7 @@ html out of ikiwiki and in the templates.
 * `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,
   `editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,
   `editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`,
-  `passwordmail.tmpl`, `openid-selector.tmpl` - Parts of ikiwiki's user
+  `passwordmail.tmpl`, `openid-selector.tmpl`, `revert.tmpl` - Parts of ikiwiki's user
   interface; do not normally need to be customised.
 
 [[!meta robots="noindex, follow"]]
index 4ddc48ac36092949c4edc2f30fca7f9892d41bef..efeedf448a03735492411cfb4f16b88e9ba5276e 100644 (file)
@@ -7,6 +7,9 @@ note and popups are templates? But they're not in the templates directory, and i
 > installed there, typically in `/usr/share/ikiwiki/basewiki/templates/`
 > --[[Joey]]
 
+> > And how am I able to use e.g. links? It's not listed in `/usr/share/ikiwiki/basewiki/templates`.
+> > I intend do (mis)use links for a horizontal navigation. Or may I be better off altering page.tmpl?
+> > --z3ttacht
 
 Is there a list of the TMPL_VAR-Variables that are defined by ikiwiki?
 
index 2b18bceb2791b9f9c6f392245ce349169a60ed0e..b7c3028cdb596bb423efb998ff29934b0b318dd2 100644 (file)
@@ -8,5 +8,9 @@
 <li>[[Users|IkiWikiUsers]]</li>
 <li>[[SiteMap]]</li>
 <li>[[Contact]]</li>
+<li>[[TipJar]]</li>
 </ul>
+<a href="http://flattr.com/thing/39811/ikiwiki">
+<img src="http://api.flattr.com/button/button-compact-static-100x17.png"
+alt="Flattr this" title="Flattr this" /></a>
 </div>
diff --git a/doc/themes.mdwn b/doc/themes.mdwn
new file mode 100644 (file)
index 0000000..57f8996
--- /dev/null
@@ -0,0 +1,27 @@
+A theme provides a style.css file, and any associated images to give
+ikiwiki a nice look and feel. The local.css [[CSS]] file is left
+free for you to further customize.
+
+Ikiwiki now comes with several themes contributed by users.
+You can enable the [[theme_plugin|plugins/theme]] to use any of these:
+
+[[!img actiontabs_small.png align=left]] The **actiontabs** theme, contributed by
+[[svend]]. This style sheet displays the action list
+(Edit, RecentChanges, etc.) as tabs.
+
+<br clear="both" />
+
+[[!img blueview_small.png align=left]] The **blueview** theme, contributed by
+[[BerndZeimetz]], featuring a tiling panoramic photo he took.
+
+<br clear="both" />
+
+[[!img goldtype_small.png align=left]] The **goldtype** theme, based on
+blueview and featuring the photography of Lars Wirzenius.
+
+<br clear="both" />
+
+[[!img none_small.png align=left]] For completeness, ikiwiki's default
+anti-theme.
+
+<br clear="both" />
diff --git a/doc/themes/actiontabs_small.png b/doc/themes/actiontabs_small.png
new file mode 100644 (file)
index 0000000..4b05ad3
Binary files /dev/null and b/doc/themes/actiontabs_small.png differ
diff --git a/doc/themes/blueview_small.png b/doc/themes/blueview_small.png
new file mode 100644 (file)
index 0000000..74972c4
Binary files /dev/null and b/doc/themes/blueview_small.png differ
diff --git a/doc/themes/goldtype_small.png b/doc/themes/goldtype_small.png
new file mode 100644 (file)
index 0000000..a011bb2
Binary files /dev/null and b/doc/themes/goldtype_small.png differ
diff --git a/doc/themes/none_small.png b/doc/themes/none_small.png
new file mode 100644 (file)
index 0000000..8272ae6
Binary files /dev/null and b/doc/themes/none_small.png differ
index b725a2eff18128e83e104153c365e994b7c9eb52..ae612e129d8812bd2c9b8e1d12570b11bb27f623 100644 (file)
@@ -5,6 +5,9 @@ choose. If you'd like to fund development of a specific feature, see the
 
 <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=joey%40kitenet%2enet&item_name=ikiwiki&no_shipping=1&cn=Comments%3f&tax=0&currency_code=USD&lc=US&bn=PP%2dDonationsBF&charset=UTF%2d8"><img src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" alt="donate with PayPal" /></a>
 
+<script type="text/javascript">var flattr_url = 'http://ikiwiki.info';</script>
+<script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>
+
 Thanks to the following people for their kind contributions:
 
 * James Westby
index af8e4005da57f0749161f17d51fb45db2e4a3ba2..1ea82b8626a3eb5991e36b4a5d825dafd9886c4b 100644 (file)
@@ -15,3 +15,88 @@ I include a modified version of this script. This version includes the ability t
 -- [[users/simonraven]]
 
 [[ikiwiki-wordpress-import]]
+
+-----
+
+Perhaps slightly insane, but here's an XSLT style sheet that handles my pages.  It's basic, but sufficient to get started.
+Note that I had to break up the ikiwiki meta strings to post this.
+
+-- JasonRiedy
+
+       <?xml version="1.0" encoding="UTF-8"?>
+       <xsl:stylesheet version="2.0"
+         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+         xmlns:content="http://purl.org/rss/1.0/modules/content/"
+         xmlns:wp="http://wordpress.org/export/1.0/">
+         
+       <xsl:output method="text"/>
+       <xsl:output method="text" name="txt"/>
+       
+       <xsl:variable name='newline'><xsl:text>
+       </xsl:text></xsl:variable>
+       
+       <xsl:template match="channel">
+         <xsl:apply-templates select="item[wp:post_type = 'post']"/>
+       </xsl:template>
+       
+       <xsl:template match="item">
+         <xsl:variable name="idnum" select="format-number(wp:post_id,'0000')" />
+         <xsl:variable name="basename"
+                       select="concat('wp-posts/post-',$idnum)" />
+         <xsl:variable name="filename"
+                       select="concat($basename, '.html')" />
+         <xsl:text>Creating </xsl:text>
+         <xsl:value-of select="concat($filename, $newline)" />
+         <xsl:result-document href="{$filename}" format="txt">
+           <xsl:text>[[</xsl:text><xsl:text>meta title="</xsl:text>
+           <xsl:value-of select="replace(title, '&quot;', '&amp;ldquo;')"/>
+           <xsl:text>"]]</xsl:text><xsl:value-of select="$newline"/>
+           <xsl:text>[[</xsl:text><xsl:text>meta date="</xsl:text>
+           <xsl:value-of select="pubDate"/>
+           <xsl:text>"]]</xsl:text><xsl:value-of select="$newline"/>
+           <xsl:text>[[</xsl:text><xsl:text>meta updated="</xsl:text>
+           <xsl:value-of select="pubDate"/>
+           <xsl:text>"]]</xsl:text> <xsl:value-of select="$newline"/>
+           <xsl:value-of select="$newline"/>
+           <xsl:value-of select="content:encoded"/>
+           <xsl:text>
+       
+       </xsl:text>
+           <xsl:apply-templates select="category[@domain='tag' and not(@nicename)]">
+             <xsl:sort select="name()"/>
+           </xsl:apply-templates>
+         </xsl:result-document>
+         <xsl:apply-templates select="wp:comment">
+           <xsl:sort select="date"/>
+           <xsl:with-param name="basename">$basename</xsl:with-param>
+         </xsl:apply-templates>
+       </xsl:template>
+       
+       <xsl:template match="wp:comment">
+         <xsl:param name="basename"/>
+         <xsl:variable name="cnum" select="format-number(wp:comment_id, '000')" />
+         <xsl:variable name="filename" select="concat($basename, '/comment_', $cnum, '._comment')"/>
+         <xsl:variable name="nickname" select="concat(' nickname=&quot;', wp:comment_author, '&quot;')" />
+         <xsl:variable name="username" select="concat(' username=&quot;', wp:comment_author_url, '&quot;')" />
+         <xsl:variable name="ip" select="concat(' ip=&quot;', wp:comment_author_IP, '&quot;')" />
+         <xsl:variable name="date" select="concat(' date=&quot;', wp:comment_date_gmt, '&quot;')" />
+         <xsl:result-document href="{$filename}" format="txt">
+           <xsl:text>[[</xsl:text><xsl:text>comment format=html</xsl:text><xsl:value-of select="$newline"/>
+           <xsl:value-of select="$nickname"/>
+           <xsl:value-of select="$username"/>
+           <xsl:value-of select="$ip"/>
+           <xsl:value-of select="$date"/>
+           <xsl:text>subject=""</xsl:text><xsl:value-of select="$newline"/>
+           <xsl:text>content="""</xsl:text><xsl:value-of select="$newline"/>
+           <xsl:value-of select="wp:comment_content"/>
+           <xsl:value-of select="$newline"/>
+           <xsl:text>"""]]</xsl:text><xsl:value-of select="$newline"/>
+         </xsl:result-document>
+       </xsl:template>
+       
+       <xsl:template match="category">
+         <xsl:text>[</xsl:text><xsl:text>[</xsl:text><xsl:text>!tag "</xsl:text><xsl:value-of select="."/><xsl:text>"]]</xsl:text>
+         <xsl:value-of select="$newline"/>
+       </xsl:template>
+       
+       </xsl:stylesheet>
index d67a9131b8110bb51c6104f475113bbe3d741adf..4a7163eae8374dd328d8193bdea42d7d747900b6 100644 (file)
@@ -6,6 +6,10 @@
 
 ----
 
+I wrote a script that will download all the latest revisions of a mediawiki site. In short, it does a good part of the stuff required for the migration: it downloads the goods (ie. the latest version of every page, automatically) and commits the resulting structure. There's still a good few pieces missing for an actual complete conversion to ikiwiki, but it's a pretty good start. It only talks with mediawiki through HTTP, so no special access is necessary. The downside of that is that it will not attempt to download every revision for performance reasons. The code is here: http://anarcat.ath.cx/software/mediawikigitdump.git/ See header of the file for more details and todos. -- [[users/Anarcat]] 2010-10-15
+
+----
+
 The u32 page is excellent, but I wonder if documenting the procedure here
 would be worthwhile. Who knows, the remote site might disappear. But also
 there are some variations on the approach that might be useful:
index da55c1f1c9828ec9ec79ee5cfb78f948a8ff2a91..42a0aa7bf16350d8dde600bf125c05a55f5de3a7 100644 (file)
@@ -26,6 +26,8 @@ configuration changes should work anywhere.
   Or, if you've put it in a `~/public_html`, edit
   `/etc/apache2/mods-available/userdir.conf`.
 
+  You may also want to install some dependencies to enable CGI in apache2 setup as: `libcgi-formbuilder-perl` and `libcgi-session-perl`.
+
 * You may also want to enable the [[plugins/404]] plugin.
   To make apache use it, the apache config file will need a further
   modification to make it use ikiwiki's CGI as the apache 404 handler.
index 945efc4bce7be8da75aff04d1deee8161df0aa54..8fbbb2ebba0c41a2c51ae396ff5a11262523998b 100644 (file)
@@ -15,7 +15,8 @@ No care is taken to add backwards compatability hacks for browsers that
 are not html5 aware (like MSIE). If you want to include the javascript with
 those hacks, you can edit `page.tmpl` to do so. 
 [Dive Into HTML5](http://diveintohtml5.org/) is a good reference for
-current compatability issues and workarounds with html5.
+current compatability issues and workarounds with html5.  And a remotely-loadable
+JS shiv for enabling HTML5 elements in IE is available through [html5shiv at Google Code](http://code.google.com/p/html5shiv/).
 
 ---
 
diff --git a/doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard.mdwn b/doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard.mdwn
new file mode 100644 (file)
index 0000000..8b64915
--- /dev/null
@@ -0,0 +1,184 @@
+These are some notes on installing ikiwiki on Mac OS X Snow Leopard. I have a three year old machine with a lot of stuff on it so it took quite a while, YMMV. 
+
+The best part of installing ikiwiki was learning how to use git. I never used source control before but its pretty slick.
+
+
+## installing git:
+
+cd /opt/ikiwiki/install
+
+curl http://kernel.org/pub/software/scm/git/git-(latest version).tar.gz -O
+
+tar xzvf git-(latest version).tar.gz
+
+cd git-(latest version)
+
+./configure --prefix=/usr/local 
+
+make prefix=/usr/local all
+
+sudo make install
+
+
+git config --global user.name "firstname lastname" 
+
+git config --global user.email "email here"
+
+git config --global color.ui "auto" 
+
+
+curl http://www.kernel.org/pub/software/scm/git/git-manpages-1.7.3.1.tar.gz | sudo tar -xzC /usr/local/share/man/
+
+
+## installing ikiwiki:
+I had terrible trouble installing ikiwiki. It turned out I had accidentally installed Perl through ports. Uninstalling that made everything install nicely.
+I got an error on msgfmt. Turns out this is a program in gettext. I installed that and it fixed the error.
+
+cd ..
+
+git clone git://git.ikiwiki.info/
+
+cd git.ikiwiki.info/
+
+perl Makefile.PL  LIB=/Library/Perl/5.10.0
+
+make
+
+sudo make install
+
+when you make ikiwiki it gives you a .git folder with the ikiwiki files. Stay out of this folder. You want to learn how to create a clone and make all your changes in the clone. When you push the changes ikiwiki will update. I moved a file in this folder by accident because I named my working file the same and I couldn't get into the setup page. I had apparently messed up my ikiwiki git repository. I did a pull into my clone, deleted the repository and webserver/ cgi folders and ran a new setup. Then I did a git clone and dragged all my old files into the new clone. Did the git dance and did git push. Then the angels sang.
+
+
+## using git from inside a git folder:
+
+start with git clone, then learn to do the git dance like this.
+
+git pull
+
+make your changes to your clone
+
+git commit -a -m "message here"
+
+git push
+
+
+When you can't get into the setup page or you get strange behavior after a setup update the Utilities > Console app is your friend.
+
+## installing gitweb
+
+cd ../git-1.7.3.1/gitweb
+
+make GITWEB_PROJECTROOT="/opt/ikiwiki/" GITWEB_CSS="/gitweb.css" GITWEB_LOGO="/git-logo.png" GITWEB_FAVICON="/git-favicon.png" 
+
+cp gitweb.cgi /Library/WebServer/CGI-Executables/
+
+cp /usr/local/share/gitweb/static/git-favicon.png /Library/WebServer/Documents/
+
+cp /usr/local/share/gitweb/static/git-logo.png /Library/WebServer/Documents/
+
+cp /usr/local/share/gitweb/static/gitweb.css /Library/WebServer/Documents/
+
+cp /usr/local/share/gitweb/static/gitweb.js /Library/WebServer/Documents/
+
+
+sudo chmod 2755 /Library/WebServer/CGI-Executables/gitweb.cgi
+
+sudo chmod 2755 /Library/WebServer/Documents/git-favicon.png
+
+sudo chmod 2755 /Library/WebServer/Documents/git-logo.png
+
+sudo chmod 2755 /Library/WebServer/Documents/gitweb.css
+
+sudo chmod 2755 /Library/WebServer/Documents/gitweb.js
+
+
+## installing xapian:
+
+download xapian and omega
+
+I needed pcre: sudo ports install pcre
+
+./configure
+
+make
+
+sudo make install
+
+
+## installing omega:
+
+I had a build error do to libiconv undefined symbols. sudo port deactivate libiconv took care of it. After install I had trouble with ikiwiki so I did a sudo port install libiconv and ikiwiki came back.
+
+./configure
+
+make
+
+sudo make install
+
+
+## installing Search::Xapian from CPAN
+
+for some reason this wouldn't install using CPAN console so I went to CPAN online and downloaded the source.
+
+perl Makefile.PL
+
+make
+
+make test
+
+sudo make install
+
+it installed without issue so I'm baffled why it didn't install from command line.
+
+ ## setup file
+    _!/usr/bin/perl
+    _ Ikiwiki setup automator.
+    
+    _ This setup file causes ikiwiki to create a wiki, check it into revision
+    _ control, generate a setup file for the new wiki, and set everything up.
+    
+    _ Just run: ikiwiki -setup /etc/ikiwiki/auto.setup
+    
+    _By default, it asks a few questions, and confines itself to the user's home
+    _directory. You can edit it to change what it asks questions about, or to
+    _modify the values to use site-specific settings.
+    require IkiWiki::Setup::Automator;
+    
+    our $wikiname="your wiki";
+    our $wikiname_short="yourwiki";
+    our $rcs="git";
+    our $admin="your name";
+    use Net::Domain q{hostfqdn};
+    our $domain="your.domain";                    
+    
+    IkiWiki::Setup::Automator->import(
+    wikiname => $wikiname,
+    adminuser => [$admin],
+    rcs => $rcs,
+    srcdir => "/opt/ikiwiki/$wikiname_short",
+    destdir => "/Library/WebServer/Documents/$wikiname_short",
+    repository => "/opt/ikiwiki/$wikiname_short.".($rcs eq "monotone" ? "mtn" : $rcs),
+    dumpsetup => "/opt/ikiwiki/$wikiname_short.setup",
+    url => "http://$domain/$wikiname_short",
+    cgiurl => "http://$domain/cgi-bin/$wikiname_short/ikiwiki.cgi",
+    cgi_wrapper => "/Library/WebServer/CGI-Executables/$wikiname_short/ikiwiki.cgi",
+    adminemail => "your\@email.com",
+    add_plugins => [qw{goodstuff websetup}],
+    disable_plugins => [qw{}],
+    libdir => "/opt/ikiwiki/.ikiwiki",
+    rss => 1,
+    atom => 1,
+    syslog => 1,
+    )
+
+## turning on search plugin:
+
+I turned on the plugin from the setup page in ikiwiki but it gave an error when I went to search. Error "Error: /usr/lib/cgi-bin/omega/omega failed: No such file or directory".
+I did a  "find / -name "omega" -print" and found the omega program in "/usr/local/lib/xapian-omega/bin/omega".
+
+Then I went into the 2wiki.setup file and replaced the bad path, updated and badda-boom badda-bing.
+
+
+
diff --git a/doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard/discussion.mdwn b/doc/tips/ikiwiki_on_Mac_OS_X_Snow_Leopard/discussion.mdwn
new file mode 100644 (file)
index 0000000..ae39698
--- /dev/null
@@ -0,0 +1 @@
+If you want do a bunch of manual labor, this is good, but most people probably want to get ikiwiki via a package system. My Mac laptop's ikiwiki is installed from pkgsrc.  --[[schmonz]]
index 4b3b02eac8acbb2e35cfa4c930c9b5c7808f0bac..a3d1ec678141dc57b81263ec3fa695af9d7d8ba6 100644 (file)
@@ -14,7 +14,8 @@ After you [get an account](https://www.nearlyfreespeech.net/about/start.php),
 create a site using their web interface. 
 
 Mine is named `ikiwiki-test` and I used their DNS instead of getting my
-own, resulting in <http://ikiwiki-test.nfshost.com/>
+own, resulting in <http://ikiwiki-test.nfshost.com/>. (Not being kept up
+anymore.)
 
 They gave me 2 cents free funding for signing up, which is enough to pay
 for 10 megabytes of bandwidth, or about a thousand typical page views, at
index a003760b98403010742f37f3ef6e6f9400dcea2b..b764325662d6de7ec5854333a583e969018275be 100644 (file)
@@ -9,3 +9,14 @@ BEGIN failed--compilation aborted at (eval 19) line 2.
 perl is 5.8.9
 
 > This is fixed in 3.1415926. --[[Joey]] 
+
+
+Hi!<br />
+How can i upgrade my nearlyfreespeech installation of ikiwiki? To install it i have followed your instructions here.<br>
+But now if I want to upgrade it to a newer version?<br />
+Thanks for your incredible work!
+
+> You can move `~/ikiwiki` out of the way and then re-download and install
+> it ikiwiki. --[[Joey]]
+
+Thanks a lot Joey. :-)
diff --git a/doc/tips/psgi.mdwn b/doc/tips/psgi.mdwn
new file mode 100644 (file)
index 0000000..0d2eeef
--- /dev/null
@@ -0,0 +1,21 @@
+Here's the app.psgi file if you want to run ikiwiki with [PSGI](http://plackperl.org) instead of apache or other web servers:
+
+    use Plack::App::CGIBin;
+    use Plack::Builder;
+    use Plack::App::File;
+    
+    builder {
+        mount '/ikiwiki.cgi' => Plack::App::CGIBin->new(file => './ikiwiki.cgi')->to_app;
+        enable "Plack::Middleware::Static",
+            path => sub { s!(^(?:/[^.]*)?/?$)!${1}/index.html! },
+                root => '.';
+        mount '/' => Plack::App::File->new(root => ".")->to_app;
+    };
+
+Put it in your destdir and now your can run `plackup -p <port>`.
+
+Note that you should configure your `url` and `cgiurl` to point to the listening address of plackup.
+
+Also, the app.psgi residing in the destdir means that /app.psgi is accessible from the web server.
+
+Hopefully some day ikiwiki web ui will speak psgi natively.
diff --git a/doc/tips/spam_and_softwaresites/discussion.mdwn b/doc/tips/spam_and_softwaresites/discussion.mdwn
new file mode 100644 (file)
index 0000000..21f0a5d
--- /dev/null
@@ -0,0 +1,8 @@
+In the cleanup spam section:
+
+> Caveat: if there are no commits you want to keep (i.e. all the commits since the last merge into master are either spam or spam reverts) then git rebase will abort.
+
+Wouldn't it be enough then to use `git reset --hard` to the desired last good commit?
+
+regards,
+iustin
index 3573a0ddf9be1f23455a112a482132f57db9256c..b74e0e9d9fecbfaec663602851efd80847da30bd 100644 (file)
@@ -112,11 +112,3 @@ abort the push before refs are updated. However, the changeset will still
 be present in your repository, wasting space. Since nothing refers to it,
 it will be expired eventually. You can speed up the expiry by running `git
 prune`.
-
-When aborting a push, ikiwiki displays an error message about why it didn't
-accept it. If using git over ssh, the user will see this error message,
-which is probably useful to them. But `git-daemon` is buggy, and hides this
-message from the user. This can make it hard for users to figure out why
-their push was rejected. (If this happens to you, look at "'git log --stat
-origin/master..`" and think about whether your changes would be accepted
-over the web interface.)
diff --git a/doc/tips/vim_and_ikiwiki.mdwn b/doc/tips/vim_and_ikiwiki.mdwn
new file mode 100644 (file)
index 0000000..e4136aa
--- /dev/null
@@ -0,0 +1,28 @@
+# Vim and ikiwiki
+
+## Syntax highlighting
+
+[ikiwiki-syntax](http://www.vim.org/scripts/script.php?script_id=3156) is a vim
+syntax highlighting file for ikiwiki [[ikiwiki/markdown]] files. It highlights
+directives and wikilinks. It only supports prefixed directives, i.e.,
+\[[!directive foo=bar baz]], not the old format with spaces.
+
+------
+
+The previous syntax definition for ikiwiki links is at [[vim_syntax_highlighting/ikiwiki.vim]]; however,
+it seems to not be [[maintained
+anymore|forum/navigation_of_wiki_pages_on_local_filesystem_with_vim#syn-maintenance]],
+and it has some [[issues|forum/ikiwiki_vim_syntaxfile]].
+
+## Page creation and navigation
+
+The [ikiwiki-nav](http://www.vim.org/scripts/script.php?script_id=2968) package
+is a vim plugin that enables you to do the following from inside vim:
+
+  * Jumping to the file corresponding to the wikilink under the cursor.
+  * Creating the file corresponding to the wikilink under the cursor (including
+  directories if necessary.)
+  * Jumping to the previous/next wikilink in the current file.
+  * Autocomplete link names.
+
+Download it from [here](http://www.vim.org/scripts/script.php?script_id=2968)
index bf7104aec10e1c69f31cc13f8910f5ca246bd553..8f2fdc1f0505872743180acbf9d1f0f037e1c1cb 100644 (file)
@@ -1,3 +1,8 @@
+This page is deprecated. See [[tips/vim_and_ikiwiki]] for the most up to date
+content
+
+--------
+
 [ikiwiki-syntax](http://www.vim.org/scripts/script.php?script_id=3156) is a vim
 syntax highlighting file for ikiwiki [[ikiwiki/markdown]] files. It highlights
 directives and wikilinks. It only supports prefixed directives, i.e.,
diff --git a/doc/todo/Add_nicer_math_formatting.mdwn b/doc/todo/Add_nicer_math_formatting.mdwn
new file mode 100644 (file)
index 0000000..3a5e94a
--- /dev/null
@@ -0,0 +1,26 @@
+It would be nice to add nicer math formatting.  I currently use the
+[[plugins/teximg]] plugin, but I wonder if
+[jsMath](http://www.math.union.edu/~dpvc/jsMath/) wouldn't be a better option.
+
+[[Will]]
+
+> I've looked at jsmath (which is nicely packaged in Debian), and 
+> I agree that this is nicer than TeX images. That text-mode browsers
+> get to see LaTeX as a fallback is actually a nice feature (better
+> than nothing, right? :) That browsers w/o javascript will not be able to
+> see the math either is probably ok.
+> 
+> A plugin would probably be a pretty trivial thing to write.
+> It just needs to include the javascript files,
+> and slap a `<div class="math"> avound the user's code`, then 
+> call `jsMath.Process(document);` at the end of the page.
+> 
+> My only concern is security: Has jsMath's parser been written 
+> to be safe when processing untrusted input? Could a user abuse the 
+> parser to cause it to emit/run arbitrary javascript code?
+> I've posted a question about this to its forum:  --[[Joey]] 
+> <https://sourceforge.net/projects/jsmath/forums/forum/592273/topic/3831574> 
+
+I think [mathjax](http://www.mathjax.org/) would be the best option. This is the math rendering engine used in mathoverflow.
+
+[[!tag wishlist]]
diff --git a/doc/todo/Improving_the_efficiency_of_match__95__glob.mdwn b/doc/todo/Improving_the_efficiency_of_match__95__glob.mdwn
new file mode 100644 (file)
index 0000000..4e1df33
--- /dev/null
@@ -0,0 +1,228 @@
+[[!template id=gitbranch branch=smcv/ready/glob-cache
+  author="[[KathrynAndersen]], [[smcv]]"]]
+[[!tag patch]]
+
+I've been profiling my IkiWiki to try to improve speed (with many pages makes speed even more important) and I've written a patch to improve the speed of match_glob.  This matcher is a good one to improve the speed of, because it gets called so many times.
+
+Here's my patch - please consider it! -- [[KathrynAndersen]]
+
+> It seems to me as though changing `glob2re` to return qr/$re/, and calling
+> `memoize(glob2re)` next to the other memoize calls, would be a less
+> verbose way to do this? --[[smcv]]
+
+>> I think so, yeah. Anyway, do you have any benchmark results handy,
+>> Kathryn?  --[[Joey]] 
+
+>>> See below.
+>>> Also, would it make more sense for glob2re to return qr/^$re$/i rather than qr/$re/?  Everything that uses glob2re seems to use
+       $foo =~ /^$re$/i
+>>> rather than /$re/ so I think that would make sense.
+>>> -- [[KathrynAndersen]]
+
+>>>> Git branch `smcv/ka-glob-cache` has Kathryn's patch. Git
+>>>> branch `smcv/memoize-glob2re` does as I suggested, which
+>>>> is less verbose than Kathryn's patch but also not as
+>>>> fast; I'm not sure why, tbh. --[[smcv]]
+
+>>>>> I think it's because my patch focuses on match_glob while the memoize patch focuses on `glob2re`, and `glob2re` is called in `filecheck`, `meta` and `po` as well as in `match_glob` and `match_user`; thus the memoized `glob2re` is dealing with a bigger set of globs to look up, and thus could be just that little bit slower. -- [[KathrynAndersen]]
+
+>>>>>> What may be going on is that glob2re is already a fairly fast
+>>>>>> function, so the overhead of memoizing it with the very generic
+>>>>>> `_memoizer` (see its source) swamps the memoization gain. Note
+>>>>>> that the few functions memoized with the Memoizer before were much
+>>>>>> more expensive, so that little overhead was acceptable then.
+>>>>>>
+>>>>>> It also may be that Kathryn's patch is slightly faster due to using
+>>>>>> the construct `$foo =~ $regexp` rather than `$foo =~ /$regexp/`
+>>>>>> (probably avoids a copy or something like that internally) --
+>>>>>> this despite checking both `exists` and `defined` on the hash, which
+>>>>>> should be reundant AFAICS.
+>>>>>>
+>>>>>> My guess is that the best of both worlds would be to move
+>>>>>> the byhand memoization to glob2re and have it return a compiled
+>>>>>> `/^/i` regexp that can be used without further modifiction in most
+>>>>>> cases. --[[Joey]] 
+
+>>>>>>> Done, see `smcv/ready/glob-cache` and `smcv/glob-cache-too-far`.
+>>>>>>>
+>>>>>>> Kathryn's patch is a significant improvement; my first patch on top of
+>>>>>>> that is a trivial cleanup that speeds it up a little, and the next two
+>>>>>>> patches (using precompiled regexes) have surprisingly little effect
+>>>>>>> (they don't slow it down either though, so either omit them or merge
+>>>>>>> them, whichever). Detailed benchmark results below.
+>>>>>>>
+>>>>>>> Moving the memoization to `glob2re` actually seems to slow things down
+>>>>>>> again - I suspect the docwiki has few enough mentions of `user()` etc.
+>>>>>>> that caching them is a waste of time, but perhaps it's not the most
+>>>>>>> representative.
+>>>>>>> --[[smcv]]
+
+[[done]] --[[Joey]] 
+
+--------------------------------------------------------------
+
+[[!toggle id="smcv-benchmark" text="current benchmarks"]]
+
+[[!toggleable id="smcv-benchmark" text="""
+master at time of branch:
+
+    time elapsed (wall):   29.6348
+    time running program:  24.9212  (84.09%)
+    time profiling (est.): 4.7136  (15.91%)
+    number of calls:       1360181
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    13.24    3.2986     3408   0.000968     Text::Balanced::_match_tagged
+    10.94    2.7253    79514   0.000034     IkiWiki::PageSpec::match_glob
+     3.19    0.7952    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+`Improve the speed of match_glob`:
+
+    time elapsed (wall):   27.9755
+    time running program:  23.5293  (84.11%)
+    time profiling (est.): 4.4461  (15.89%)
+    number of calls:       1280875
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    14.56    3.4257     3408   0.001005     Text::Balanced::_match_tagged
+     7.82    1.8403    79514   0.000023     IkiWiki::PageSpec::match_glob
+     3.27    0.7698    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+`match_glob: streamline glob cache slightly`:
+
+    time elapsed (wall):   27.5753
+    time running program:  23.1714  (84.03%)
+    time profiling (est.): 4.4039  (15.97%)
+    number of calls:       1280875
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    14.09    3.2637     3408   0.000958     Text::Balanced::_match_tagged
+     7.74    1.7926    79514   0.000023     IkiWiki::PageSpec::match_glob
+     3.30    0.7646    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+`glob2re: return a precompiled, anchored case-insensitiv...`:
+
+    time elapsed (wall):   27.5656
+    time running program:  23.1464  (83.97%)
+    time profiling (est.): 4.4192  (16.03%)
+    number of calls:       1282189
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    14.21    3.2891     3408   0.000965     Text::Balanced::_match_tagged
+     7.72    1.7872    79514   0.000022     IkiWiki::PageSpec::match_glob
+     3.32    0.7678    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+`make use of precompiled regex objects`:
+
+    time elapsed (wall):   27.5357
+    time running program:  23.1289  (84.00%)
+    time profiling (est.): 4.4068  (16.00%)
+    number of calls:       1281981
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    14.17    3.2776     3408   0.000962     Text::Balanced::_match_tagged
+     7.70    1.7814    79514   0.000022     IkiWiki::PageSpec::match_glob
+     3.35    0.7756    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+`move memoization from match_glob to glob2re`:
+
+    time elapsed (wall):   28.7677
+    time running program:  23.9473  (83.24%)
+    time profiling (est.): 4.8205  (16.76%)
+    number of calls:       1360181
+    number of exceptions:  13
+    
+    %Time    Sec.     #calls   sec/call  F  name
+    13.98    3.3469     3408   0.000982     Text::Balanced::_match_tagged
+     8.85    2.1194    79514   0.000027     IkiWiki::PageSpec::match_glob
+     3.24    0.7750    59454   0.000013     <anon>:IkiWiki/Plugin/inline.pm:223
+
+--[[smcv]]
+"""]]
+
+--------------------------------------------------------------
+
+[[!toggle id="ka-benchmarks" text="Kathryn's benchmarks"]]
+
+[[!toggleable id="ka-benchmarks" text="""
+Benchmarks done with Devel::Profile on the same testbed IkiWiki setup.  I'm just showing the start of the profile output, since that's what's relevant.
+
+Before:
+<pre>
+time elapsed (wall):   27.4173
+time running program:  22.5909  (82.40%)
+time profiling (est.): 4.8264  (17.60%)
+number of calls:       1314729
+number of exceptions:  65
+
+%Time    Sec.     #calls   sec/call  F  name
+11.05    2.4969    62333   0.000040     IkiWiki::PageSpec::match_glob
+ 4.10    0.9261      679   0.001364     Text::Balanced::_match_tagged
+ 2.72    0.6139    59812   0.000010     IkiWiki::SuccessReason::merge_influences
+</pre>
+
+After:
+<pre>
+time elapsed (wall):   26.1843
+time running program:  21.5673  (82.37%)
+time profiling (est.): 4.6170  (17.63%)
+number of calls:       1252433
+number of exceptions:  65
+
+%Time    Sec.     #calls   sec/call  F  name
+ 7.66    1.6521    62333   0.000027     IkiWiki::PageSpec::match_glob
+ 4.33    0.9336      679   0.001375     Text::Balanced::_match_tagged
+ 2.81    0.6057    59812   0.000010     IkiWiki::SuccessReason::merge_influences
+</pre>
+
+Note that the seconds per call for match_glob in the "after" case has gone down by about a third.
+
+K.A.
+"""]]
+
+--------------------------------------------------------------
+
+[[!toggle id="ka-patch" text="Kathryn's original patch"]]
+
+[[!toggleable id="ka-patch" text="""
+
+<pre>
+diff --git a/IkiWiki.pm b/IkiWiki.pm
+index 08a3d78..c187b98 100644
+--- a/IkiWiki.pm
++++ b/IkiWiki.pm
+@@ -2482,6 +2482,8 @@ sub derel ($$) {
+       return $path;
+ }
++my %glob_cache;
++
+ sub match_glob ($$;@) {
+       my $page=shift;
+       my $glob=shift;
+@@ -2489,8 +2491,15 @@ sub match_glob ($$;@) {
+       
+       $glob=derel($glob, $params{location});
+-      my $regexp=IkiWiki::glob2re($glob);
+-      if ($page=~/^$regexp$/i) {
++      # Instead of converting the glob to a regex every time,
++      # cache the compiled regex to save time.
++      if (!exists $glob_cache{$glob}
++          or !defined $glob_cache{$glob})
++      {
++          my $re=IkiWiki::glob2re($glob);
++          $glob_cache{$glob} = qr/^$re$/i;
++      }
++      if ($page =~ $glob_cache{$glob}) {
+               if (! IkiWiki::isinternal($page) || $params{internal}) {
+                       return IkiWiki::SuccessReason->new("$glob matches $page");
+               }
+</pre>
+"""]]
+--------------------------------------------------------------
index f4023d6dd6cd439bbc1c744b6a86a54854d72652..8345cd010f856f52115376b96953ab17cc78687b 100644 (file)
@@ -11,4 +11,4 @@ Currently, the page title (either the name of the page or the title specified wi
 > latter, making `#` (only when on the first line) set the page title, removing it from
 > the page body. --[[JasonBlevins]], October 22, 2008
 
- [h1title]: http://code.jblevins.org/ikiwiki/plugins.git/plain/h1title.pm
+ [h1title]: http://jblevins.org/git/ikiwiki/plugins.git/plain/h1title.pm
index 61b19d302f827007446d375b67912a5480252ad3..b3804d652d3ca87e84f155a402fc9c3919f47182 100644 (file)
@@ -4,7 +4,7 @@ to the [[`meta`_plugin|plugins/meta]].
 > [[done]], with some changes --[[Joey]]
 
 Find the most recent version at
-<http://www.schwinge.homeip.net/~thomas/tmp/meta_forward.patch>.
+<http://schwinge.homeip.net/~thomas/tmp/meta_forward.patch>.
 
 I can't use `scrub(...)`, as that will strip out the forwarding HTML command.
 How to deal with that?
diff --git a/doc/todo/alias_directive.mdwn b/doc/todo/alias_directive.mdwn
new file mode 100644 (file)
index 0000000..71a2efc
--- /dev/null
@@ -0,0 +1,72 @@
+An alias directive could work like an inverse redirect, but in a more
+maintainable way. Currently, a page might have several redirects leading to it,
+without an easy way of enumerating them. Therefore, the following directive is
+suggested for addition (possibly by means of a plugin):
+
+> The `alias` and `aliastext` directives implicitly create
+> redirect pages to the page they are used on. If two or more pages claim a
+> non-existing page to be an alias, a disambiguation page will automatically
+> generated. If an existing page is claimed as an alias, it will be prefixed
+> with a note that its topic is also an alias for other pages.
+>
+> All aliases to a page are automatically listed below the backlink and tag
+> lists at the bottom of a page by default. This can be configured globally by
+> setting the `alias_list` configuration option to `false`, or set explicitly
+> per alias by specifying `list=true` or `list=false`.
+>
+> Similar to the `taglink` directive, `aliastext` produces the alias name as
+> well as registering it.
+>
+> ## Usage example
+>
+> `Greece.mdwn`:
+>
+> >     Greece, also known as \[[!aliastext Hellas]] and officially the
+> >     \[[!aliastext "Hellenic Republic"]], is a …
+> >     
+> >     <!-- there are so many people who misspell this, let's create a redirect -->
+> >     \[[!alias Grece list=false]] 
+>
+> This page by itself will redirect from the "Hellas", "Hellenic Republic" and
+> "Grece" pages as if they both contained just:
+>
+> >     \[[!meta redir="Greece"]]
+>
+> If, on the other hand, `Hellas Planitia` also claims `[[!alias Hellas]]`, the
+> Hellas page will look like this:
+>
+> >     **Hellas** is an alias for the following pages:
+> >
+> >     * \[[Greece]]
+> >     * \[[Hellas Planitia]]
+
+The proposed plugin/directive could be extended, eg. by also including
+old-style redirects in the alias list, but that might introduce unwanted
+coupling with the meta directive.
+
+-----------------
+
+On second thought, implementing this might have similarities with
+[[todo/auto-create tag pages according to a template]] -- the auto-created
+pages would, if the way of the alias directive is followed, not create physical
+files, though, but be created just when someone edits them.
+
+If multiple plugins do such a trick, they would have to fight over who comes
+first. If, for example, we have a setup where not yet created tag pages are
+automatically generated as "\[[!inline  pages="link(<TMPL_VAR TAG>)"
+archive="yes"]]" and aliases are enabled, and a non-tag pages grabs a tag as an
+alias (as to redirect all taglinks of the tag to itself), there are two
+possibilities:
+
+* The autotag plugin comes first:
+    * autotag sees the missing tag and creates its "\[[!inline" stuff
+    * alias sees that there is already content and adds its prefix
+* The alias plugin comes first (this is the prefered way):
+    * alias sees the empty page, sees it is not contested by other alias
+      directives and creates its "\[[!meta" redirect
+    * autotag sees there is already content and doesn't do anything
+
+That issue could be handled with "priority number" on the hook, with plugins
+with a lower number being called first.
+
+[[!tag wishlist]]
index 7eb4049104ce20a9cdac056344778453140e50cc..da038926195d44bf5eb402ddf91f4b75e3fd6779 100644 (file)
@@ -248,4 +248,23 @@ I've tested it fairly thouroughly. --[[Joey]]
 [a358d74bef51dae31332ff27e897fe04834571e6]: http://git.liegesta.at/?p=ikiwiki.git;a=commitdiff;h=a358d74bef51dae31332ff27e897fe04834571e6 (commitdiff for a358d74bef51dae31332ff27e897fe04834571e6)
 [981400177d68a279f485727be3f013e68f0bf691]: http://git.liegesta.at/?p=ikiwiki.git;a=commitdiff;h=981400177d68a279f485727be3f013e68f0bf691 (commitdiff for 981400177d68a279f485727be3f013e68f0bf691)
 
+-------------------
+
+Even if this is already marked as done, I'd like to suggest an alternative
+solution:
+
+Instead of creating a file that gets checked in into the RCS, the source files
+could be left out and the output files be written as long as there is no
+physical source file (think of a virtual underlay). Something similar would be
+required to implement [[todo/alias directive]], which couldn't be easily done
+by writing to the RCS as the page's contents can change depending on which
+other pages claim it as an alias. --[[chrysn]]
+
+I agree with [[chrysn]]. In fact, is there any good reason that the core tag
+plugin doesn't do this? The current usability is horrible, to the point that
+I have gone 2.5 years with Ikiwiki and haven't yet started using tags.
+--[Eric](http://wiki.pdxhub.org/people/eric)
+
+> See [[todo/transient_pages]] for progress on this. --[[smcv]]
+
 [[!tag done]]
diff --git a/doc/todo/autoindex_should_use_add__95__autofile.mdwn b/doc/todo/autoindex_should_use_add__95__autofile.mdwn
new file mode 100644 (file)
index 0000000..9f3fd71
--- /dev/null
@@ -0,0 +1,112 @@
+`add_autofile` is a generic version of [[plugins/autoindex]]'s code,
+so the latter should probably use the former. --[[smcv]]
+
+----
+
+[[!template id=gitbranch branch=smcv/autoindex-autofile author="[[smcv]]"]]
+
+I'm having trouble fixing this:
+
+       # FIXME: some of this is probably redundant with add_autofile now, and
+       # the rest should perhaps be added to the autofile machinery
+
+By "a generic version of" above, it seems I mean "almost, but not
+quite, entirely unlike".
+
+> As long as it's not Tea. ;) --[[Joey]] 
+
+I tried digging through the git history for the
+reasoning behind the autofile and autoindex implementations, but now I'm
+mostly confused.
+
+## autofile
+
+The autofile machinery records a list of every file that has ever been proposed
+as an autofile: for instance, the tag plugin has a list of every tag that
+has ever been named in a \[[!tag]] or \[[!taglink]], even if no file was
+actually needed (e.g. because it already existed). Checks for files that
+already exist (or whatever) are deferred until after this list has been
+updated, and files in this list are never auto-created again unless the wiki
+is rebuilt.
+
+This avoids re-creating the tag `create-del` in this situation, which is
+the third one that I noted on
+[[todo/auto-create tag pages according to a template]]:
+
+* create tags/create-del manually
+* tag a page as create-del
+* delete tags/create-del
+
+and also avoids re-creating `auto-del` in this similar situation (which I
+think is probably the most important one to get right):
+
+* tag a page as auto-del, which is created automatically
+* delete tags/auto-del
+
+I think both of these are desirable.
+
+However, this infrastructure also results in the tag page not being
+re-created in either of these situations (the first and second that I noted
+on the other page):
+
+* tag a page as auto-del-create-del, which is created automatically
+* delete tags/auto-del-create-del
+* create tags/auto-del-create-del manually
+* delete tags/auto-del-create-del again
+
+or
+
+* create tags/create-del-auto
+* delete tags/create-del-auto
+* tag a page as create-del-auto
+
+I'm less sure that these shouldn't create the tag page: we deleted the
+manually-created version, but that doesn't necessarily mean we don't want
+*something* to exist.
+
+> That could be argued, but it's a very DWIM thing. Probably best to keep
+> the behavior simple and predictable, so one only needs to remember that
+> when a page is deleted, nothing will ever re-create it behind ones back.
+> --[[Joey]]
+
+## autoindex
+
+The autoindex machinery records a more complex set. Items are added to the
+set when they are deleted, but would otherwise have been added as an autoindex
+(don't exist, do have children (by which I mean subpages or attachments),
+and are a directory in the srcdir). They're removed if this particular run
+wouldn't have added them as an autoindex (they exist, or don't have children).
+
+Here's what happens in situations mirroring those above.
+
+The "create-del" case still doesn't create the page:
+
+* create create-del manually
+* create create-del/child
+* delete create-del
+* it's added to `%deleted` and not re-created
+
+Neither does the "auto-del" case:
+
+* create auto-del/child, resulting in auto-del being created automatically
+* delete auto-del
+* it's added to `%deleted` and not re-created
+
+However, unlike the generic autofile infrastructure, `autoindex` forgets
+that it shouldn't re-create the deleted page in the latter two situations:
+
+* create auto-del-create-del/child, resulting in auto-del-create-del being
+    created automatically
+* delete auto-del-create-del; it's added to `%deleted` and not re-created
+* create auto-del-create-del manually; it's removed from `%deleted`
+* delete auto-del-create-del again (it's re-created)
+
+and
+
+* create create-del-auto
+* delete create-del-auto; it's not added to `%deleted` because there's no
+    child that would cause it to exist
+* create create-del-auto/child
+
+> I doubt there is any good reason for this behavior. These are probably
+> bugs. --[[Joey]] 
index f0599e4ed94fdf8695272753d5f3708814b8cf21..91f924fa126fd25f296de803d8830d4627d4ddb4 100644 (file)
@@ -58,3 +58,8 @@ The hash is calculated from the user's email address. If the user's email
 is not known, skip it. 
 
 End. :P
+
+---
+
+[libravatar](https://launchpad.net/libravatar) is a federated avatar
+system. Young but might be the right way to get avatars eventually.
diff --git a/doc/todo/capitalize_title.mdwn b/doc/todo/capitalize_title.mdwn
new file mode 100644 (file)
index 0000000..3e8366d
--- /dev/null
@@ -0,0 +1,31 @@
+Here I propose an option (with a [[patch]]) to capitalize the first letter (ucfirst) of default titles : filenames and urls can be lowercase but title are displayed with a capital first character (filename = "foo.mdwn", pagetitle = "Foo"). Note that \[[!meta title]] are unaffected (no automatic capitalization). Comments please :) --[[JeanPrivat]]
+<pre><code>
+diff --git a/IkiWiki.pm b/IkiWiki.pm
+index 6da2819..fd36ec4 100644
+--- a/IkiWiki.pm
++++ b/IkiWiki.pm
+@@ -281,6 +281,13 @@ sub getsetup () {
+                safe => 0,
+                rebuild => 1,
+        },
++       capitalize => {
++               type => "boolean",
++               default => undef,
++               description => "capitalize the first letter of page titles",
++               safe => 1,
++               rebuild => 1,
++       },
+        userdir => {
+                type => "string",
+                default => "",
+@@ -989,6 +996,10 @@ sub pagetitle ($;$) {
+                $page=~s/(__(\d+)__|_)/$1 eq '_' ? ' ' : "&#$2;"/eg;
+        }
++       if ($config{capitalize}) {
++               $page = ucfirst $page;
++       }
++
+        return $page;
+ }
+</code></pre>
diff --git a/doc/todo/configurable_tidy_command_for_htmltidy.mdwn b/doc/todo/configurable_tidy_command_for_htmltidy.mdwn
new file mode 100644 (file)
index 0000000..e317184
--- /dev/null
@@ -0,0 +1,8 @@
+[[!tag patch patch]]
+
+I was trying to get htmltidy to [play nicely with MathML][play].  Unfortunately, I couldn't construct a command line that I was happy with, but along the way I altered htmltidy to allow a configurable command line.  This seemed like a generally useful thing, so I've published my [patch][] as a Git branch.
+
+[play]: http://lists.w3.org/Archives/Public/html-tidy/2006JanMar/0052.html
+[patch]: http://www.physics.drexel.edu/~wking/code/git/git.php?p=ikiwiki.git&a=commitdiff&h=408ee89fd7c1dc70510385a7cf263a05862dda97&hb=e65ce4f0937eaf622846c02a9d39fa7aebe4af12
+
+> Thanks, [[done]] --[[Joey]] 
diff --git a/doc/todo/countdown_directive.mdwn b/doc/todo/countdown_directive.mdwn
new file mode 100644 (file)
index 0000000..61c3620
--- /dev/null
@@ -0,0 +1,5 @@
+I'd love to have a countdown directive, which would take a timestamp to count down to and generate a JavaScript timer in the page.
+
+Ideally I'd also like to either have parameters providing content to show before and after the time passes, or integration with existing conditional directives to do the same thing.
+
+[[!tag wishlist]]
index 0c45f0c9059f7185a131297116000aef5eea6418..77e46049fae7ce0a412411f7893f2030dc77ddb5 100644 (file)
@@ -38,3 +38,15 @@ have a small resize handle in a corner, that can be dragged around. No
 nasty javascript needed. IMHO, this is the right solution, and I hope other
 browsers emulate it. [[done]]
 --[[Joey]]
+
+Wouldn't it be possible to just implement an integer-valued setting for this, accessible via the "Setup" wiki page? This would require a wiki regen, but such a setting would not be changed frequently I suppose. Also, Mediawiki has this implemented as a per-user setting (two settings, actually, -- number of rows and columns of the edit area); such a per-user setting would be the best possible implementation, but I'm not sure if ikiwiki already supports per-user settings. Please consider implementing this as the current 20 rows is a great PITA for any non-trivial page.
+
+> I don't think it would need a wiki rebuild, as the textarea is generated dynamically by the CGI when you perform a CGI action, and (as far as I know) is not cooked into any static content. -- [[Jon]]
+
+>> There is no need for a configuration setting for this -- to change
+>> the default height from 20 rows to something else, you can just put
+>> something like this in your `local.css`: --[[Joey]] 
+
+       #editcontent {
+               height: 50em;
+       }
diff --git a/doc/todo/feed_enhancements_for_inline_pages.mdwn b/doc/todo/feed_enhancements_for_inline_pages.mdwn
new file mode 100644 (file)
index 0000000..5a7b1f8
--- /dev/null
@@ -0,0 +1,8 @@
+[[!template id=gitbranch branch=GiuseppeBilotta/inlinestuff author="Giuseppe Bilotta"]]
+
+A few patches to clean up and improve feed management for inline pages.
+
+* the first patch simply replaces the id attribute in the default template for feedlinks with a class attribute by the same name. This is necessary in pages with multiple inlines to guarantee correctness
+* the second patch tries to define the default description for a feed based not only on the wiki name, but also on the current page name. The actual way this is built might not be the optimal one, so I'm open to suggestions
+* the third patch passes the feed titles to the templates, changing the default templates to use these as title attributes for the links. a rel="alternate" attribute is also included
+* the fourth patch introduces a feedlinks parameter to the inline directive, to allow for the specifications of the locations where the feed links should appear. Currently, two options are allowed (head and body), plus both and none with obvious significance
diff --git a/doc/todo/generic_insert_links.mdwn b/doc/todo/generic_insert_links.mdwn
new file mode 100644 (file)
index 0000000..050f32e
--- /dev/null
@@ -0,0 +1,24 @@
+The attachment plugin's Insert Links button currently only knows
+how to insert plain wikilinks and img directives (for images).
+
+[[wishlist]]: Generalize this, so a plugin can cause arbitrary text
+to be inserted for a particular file. --[[Joey]] 
+
+Design:
+
+Add an insertlinks hook. Each plugin using the hook would be called,
+and passed the filename of the attachment. If it knows how to handle
+the file type, it returns a the text that should be inserted on the page.
+If not, it returns undef, and the next plugin is tried.
+
+This would mean writing plugins in order to handle links for 
+special kinds of attachments. To avoid that for simple stuff,
+a fallback plugin could run last and look for a template
+named like `templates/embed_$extension`, and insert a directive like:
+
+       \[[!template id=embed_vp8 file=my_movie.vp8]]
+
+Then to handle a new file type, a user could just make a template
+that expands to some relevant html. In the example above,
+`templates/embed_vp8` could make a html5 video tag, possibly with some
+flash fallback code even.
diff --git a/doc/todo/inline_raw_files.mdwn b/doc/todo/inline_raw_files.mdwn
new file mode 100644 (file)
index 0000000..100c072
--- /dev/null
@@ -0,0 +1,61 @@
+[[!template id=gitbranch branch=wtk/master author="[[wtk]]"]]
+
+summary
+=======
+
+Extend inlining to handle raw files (files with unrecognized extensions).
+
+Also raise an error in `IkiWiki::pagetype($file)` if `$file` is blank, which avoids trying to do much with missing files, etc.
+
+I'm using the new code in my [blog][].
+
+[blog]: http://www.physics.drexel.edu/~wking/unfolding-disasters/posts/yacc2dot/
+
+usage
+=====
+
+    \[[!inline pagenames="somefile.txt" template="raw" feeds="no"]]
+
+
+> But inline already supports raw files in two ways:
+> 
+> * setting raw=yes will cause a page to be inlined raw without
+>   using any template, as if it were part of the page at the location
+>   of the inline
+> * otherwise, the file becomes an enclosure in the rss feed, for use with
+>    podcasting.
+> 
+> So I don't see the point of your patch. Although since your text
+> editor seems to like to make lots of whitespace changes, it's possible
+> I missed something in the large quantity of noise introduced by it.
+> --[[Joey]]
+
+>> As I understand it, setting `raw=yes` causes the page to be inlined
+>> as if the page contents had appeared in place of the directive.  The
+>> content is then processed by whatever `htmlize()` applies to the
+>> inlining page.  I want the inlined page to be unprocessed, and
+>> wrapped in `<pre><code>...</code></pre>` (as they are on the blog
+>> post I link to above).
+>>
+>> Enclosures do not include the page contents at all, just a link to
+>> them.  I'm trying to inline the content so I can comment on it from
+>> the inlining page.
+>>
+>> Apologies for my cluttered version history, I should have branched my
+>> earlier changes off to make things clearer.  I tried to isolate my
+>> whitespace changes (fixes?) in c9ae012d245154c3374d155958fcb0b60fda57ce.
+>> 157389355d01224b2d3c3f6e4c1eb42a20ec8a90 should hold all the content
+>> changes.
+>>
+>> A list of other things globbed into my master branch that should have
+>> been separate branches:
+>>
+>> * Make it easy to select a Markdown executable for mdwn.pm.
+>> * Included an updated form of
+>>   [[Javier Rojas' linktoimgonly.pm|forum/link_to_an_image_inside_the_wiki_without_inlining_it]].
+>> * Included an updated form of
+>>   [Jason Blevins' mdwn_itex.pm](http://jblevins.org/git/ikiwiki/plugins.git/plain/mdwn_itex.pm).
+>> * Assorted minor documentation changes.
+>>
+>> --[[wtk]]
+
index 4363003c1e58de11155843155c5f06b312e970d5..76bb69c9e46d8897facf15a80c5f5d1804b41e6c 100644 (file)
@@ -9,6 +9,8 @@ of the ikiwiki [[/logo]].
 
 > [[users/JasonBlevins]] has also a plugin for including [[LaTeX]] expressions (by means of `itex2MML`) -- [[plugins/mdwn_itex]] (look at his page for the link). --Ivan Z.
 
+>> I've [updated](http://www.physics.drexel.edu/~wking/unfolding-disasters/posts/mdwn_itex/) Jason's plugin for ikiwiki 3.x.  --W. Trevor King
+
 ----
 
 ikiwiki could also support LaTeX as a document type, again rendering to HTML.
index 6ca9962ba632a1e33c27017ab9cbf5cbb00d2993..c164cf54aa9bbea7f8181bc0f26a2239e8bdc9c4 100644 (file)
@@ -21,4 +21,65 @@ and decided this time it was really needed to implement this feature.
 
 --[[intrigeri]]
 
+> Ping. --[[intrigeri]]
+
 [[!tag patch]]
+
+>> (I'm not an ikiwiki committer, opinions may vary.)
+>>
+>>> In my opinion, you're an ikiwiki committer! --[[Joey]]
+>>
+>> This would be easier to review if there weren't a million merges from
+>> master; perhaps either leave a branch as-is, or rebase it, or merge
+>> only at "significant" times like after a release?
+>>
+>> I believe Joey's main objection to complex $config entries is that
+>> it's not at all clear what [[plugins/websetup]] would do with them.
+>> Would something like this make a reasonable alternative?
+>>
+>>      $config{mirrorlist} = ["nousedirs|file:///home/intrigeri/wiki",
+>>          "usedirs|http://example.com/wiki", "http://example.net"];
+>>
+>> From how I understand tainting, this:
+>>
+>>      $untainted{$_} = possibly_foolish_untaint($tainted->{$_})
+>>
+>> probably needs to untaint the key too:
+>>
+>>      my $key = possibly_foolish_untaint($_);
+>>      $untainted{$key} = possibly_foolish_untaint($tainted->{key});
+>>
+>> --[[smcv]]
+
+>>> You are fully right about the complex `$config` entries. I'll
+>>> convert this to use what you are suggesting, i.e. what we ended up
+>>> choosing for the `po_slave_languages` setting.
+>>>
+>>> About the merges in this branch: Joey told me once he did not care
+>>> about this; moreover the `--no-merges` git log option makes it
+>>> easy to filter these out. I'll try merging tagged releases only in
+>>> the future, though.
+>>>
+>>> --[[intrigeri]]
+
+>>>> FWIW, I don't care about merge commits etc because I review
+>>>> `git diff ...intrigeri/mirrorlist` -- and if I want to dig deeper
+>>>> into the why of some code, I'll probably checkout the branch and
+>>>> use git blame.
+>>>>
+>>>> I agree with what smcv said, my other concern though is that
+>>>> this is such an edge case, that supporting it just adds clutter.
+>>>> Have to wonder if it wouldn't perhaps be better to do something
+>>>> using the goto plugin and cgiurl, so that the mirror doesn't have
+>>>> to know about the configuration of the other mirror. --[[Joey]]
+
+>>>>> I have implemented something using the cgi + goto in my (history
+>>>>> rewrite warning) mirrorlist branch. Please review, please pull.
+>>>>> --[[intrigeri]]
+
+>>>>> concerning goto/cgiurl, what about having that as the default in
+>>>>> mirrorlist, but keeping ``nousedirs|file:///home/intrigeri/wiki`` and
+>>>>> ``usedirs|http://example.com/wiki`` valid for cgi-less cases?
+>>>>> that would keep typical installation with a clutter-less configuration,
+>>>>> and support more individual setups too.
+>>>>> --[[chrysn]]
index 29f28ca3246a853ee585beddc6348246c43b24fa..55624096403baeda26a9b3ea2c80b9d753616f1b 100644 (file)
@@ -35,7 +35,7 @@ in the ikiwiki source code, where emailing is done.
 OK, so I'll have a look at replacing all email handling with *Email::Send*.
 
 [[!tag patch]]
-*<http://www.thomas.schwinge.homeip.net/tmp/ikiwiki-sendmail.patch>*
+*<http://schwinge.homeip.net/~thomas/tmp/ikiwiki-sendmail.patch>*
 
 Remaining TODOs:
 
diff --git a/doc/todo/po:_avoid_rebuilding_to_fix_meta_titles.mdwn b/doc/todo/po:_avoid_rebuilding_to_fix_meta_titles.mdwn
new file mode 100644 (file)
index 0000000..9bb9c72
--- /dev/null
@@ -0,0 +1,60 @@
+Re the meta title escaping issue worked around by `change`. 
+
+>   I suppose this does not only affect meta, but other things
+>   at scan time too. Also, handling it only on rebuild feels
+>   suspicious -- a refresh could involve changes to multiple
+>   pages and trigger the same problem, I think. Also, exposing
+>   this rebuild to the user seems really ugly, not confidence inducing.
+>   
+>   So I wonder if there's a better way. Such as making po, at scan time,
+>   re-run the scan hooks, passing them modified content (either converted
+>   from po to mdwn or with the escaped stuff cheaply de-escaped). (Of
+>   course the scan hook would need to avoid calling itself!)
+> 
+>   (This doesn't need to block the merge, but I hope it can be addressed
+>   eventually..)
+>  
+> --[[Joey]] 
+>> 
+>> I'll think about it soon.
+>> 
+>> --[[intrigeri]]
+>>
+>>> Did you get a chance to? --[[Joey]] 
+
+>>>> I eventually did, and got rid of the ugly double rebuild of pages
+>>>> at build time. This involved adding a `rescan` hook. Rationale
+>>>> and details are in my po branch commit messages. I believe this
+>>>> new way of handling meta title escaping to be far more robust.
+>>>> Moreover this new implementation is more generic, feels more
+>>>> logical to me, and probably fixes other similar bugs outside the
+>>>> meta plugin scope. Please have a look when you can.
+>>>> --[[intrigeri]]
+
+>>>>> Glad you have tackled this. Looking at
+>>>>> 25447bccae0439ea56da7a788482a4807c7c459d,
+>>>>> I wonder how this rescan hook is different from a scan hook
+>>>>> with `last => 1` ? Ah, it comes *after* the preprocess hook
+>>>>> in scan mode. Hmm, I wonder if there's any reason to have 
+>>>>> the scan hook called before those as it does now. Reordering
+>>>>> those 2 lines could avoid adding a new hook. --[[Joey]]
+
+>>>>>> Sure. I was fearing to break other plugins if I did so, so I
+>>>>>> did not dare to. I'll try this. --[[intrigeri]]
+
+>>>>>>> Done in my po branch, please have a look. --[[intrigeri]]
+
+>>>>>>>> I've merged it. Didn't look at the po.pm changes closely;
+>>>>>>>> assume they're ok. [[done]] --[[Joey]] 
+>>>>>>>> 
+>>>>>>>> My thinking about the reordering being safe is that
+>>>>>>>> the relative ordering of scan and preprocess in scan mode hooks
+>>>>>>>> has not been defined before, so it should be ok to define it. :)
+>>>>>>>> 
+>>>>>>>> And as to possible breakage from things that assumed the old
+>>>>>>>> ordering, such a thing would need to have a scan hook and a
+>>>>>>>> preprocess in scan mode hook, and the two hooks would need to 
+>>>>>>>> populate the same data structure with conflicting information,
+>>>>>>>> in order for there to be a problem. That seems highly unlikely
+>>>>>>>> and would be pretty broken on its own. And no plugin in ikiwiki
+>>>>>>>> itself has both types of hooks. --[[Joey]]
diff --git a/doc/todo/po:_better_documentation.mdwn b/doc/todo/po:_better_documentation.mdwn
new file mode 100644 (file)
index 0000000..6e9804d
--- /dev/null
@@ -0,0 +1,3 @@
+Maybe write separate documentation for the po plugin, depending on the
+people it targets:  translators, wiki administrators, hackers. This
+plugin may be complex enough to deserve this.
diff --git a/doc/todo/po:_better_links.mdwn b/doc/todo/po:_better_links.mdwn
new file mode 100644 (file)
index 0000000..af879a5
--- /dev/null
@@ -0,0 +1,12 @@
+Once the fix to
+[[bugs/pagetitle_function_does_not_respect_meta_titles]] from
+[[intrigeri]]'s `meta` branch is merged into ikiwiki upstream, the
+generated links' text will be optionally based on the page titles set
+with the [[meta|plugins/meta]] plugin, and will thus be translatable.
+It will also allow displaying the translation status in links to slave
+pages. Both were implemented, and reverted in commit
+ea753782b222bf4ba2fb4683b6363afdd9055b64, which should be reverted
+once [[intrigeri]]'s `meta` branch is merged.
+
+An integration branch, called `meta-po`, merges [[intrigeri]]'s `po`
+and `meta` branches, and thus has this additional features.
diff --git a/doc/todo/po:_better_translation_interface.mdwn b/doc/todo/po:_better_translation_interface.mdwn
new file mode 100644 (file)
index 0000000..e66a77b
--- /dev/null
@@ -0,0 +1,2 @@
+Add a message-by-message translation interface to the PO plugin,
+with automatic escaping of special chars.
diff --git a/doc/todo/po:_remove_po_files_when_disabling_plugin.mdwn b/doc/todo/po:_remove_po_files_when_disabling_plugin.mdwn
new file mode 100644 (file)
index 0000000..5d0318a
--- /dev/null
@@ -0,0 +1,13 @@
+ikiwiki now has a `disable` hook. Should the po plugin remove the po
+files from the source repository when it has been disabled?
+
+> pot files, possibly, but the po files contain work, so no. --[[Joey]] 
+
+>> I tried to implement this in my `po-disable` branch, but AFAIK, the
+>> current rcs plugins interface provides no way to tell whether a
+>> given file (e.g. a POT file in my case) is under version control;
+>> in most cases, it is not, thanks to .gitignore or similar, but we
+>> can't be sure. So I just can't decide it is needed to call
+>> `rcs_remove` rather than a good old `unlink`. --[[intrigeri]]
+
+>>> I guess you could call `rcs_remove` followed by `unlink`. --[[Joey]] 
diff --git a/doc/todo/po:_rethink_pagespecs.mdwn b/doc/todo/po:_rethink_pagespecs.mdwn
new file mode 100644 (file)
index 0000000..98c7ff6
--- /dev/null
@@ -0,0 +1,40 @@
+I was suprised that, when using the map directive, a pagespec of "*"
+listed all the translated pages as well as regular pages. That can 
+make a big difference to an existing wiki when po is turned on,
+and seems generally not wanted.
+(OTOH, you do want to match translated pages by
+default when locking pages.) --[[Joey]]
+
+> Seems hard to me to sort apart the pagespec whose matching pages
+> list must be restricted to pages in the master (or current?)
+> language, and the ones that should not. The only solution I can see
+> to this surprising behaviour is: documentation. --[[intrigeri]]
+
+>> Well, a sorting criteria might be that if a PageSpec is used
+>> with a specified locaction, as happens whenever a PageSpec is
+>> used on a page, then it should match only `currentlang()`. If it 
+>> is used without a location, as in the setup file, then no such limit.
+
+>>> Ok. --[[intrigeri]]
+
+>> Note that
+>> `match_currentlang` currently dies if called w/o a location -- if
+>> it instead was always true w/o a location, this would just mean that
+>> all pagespecs should have `and currentlang()` added to them. How to
+>> implement that? All I can think of doing is wrapping
+>> `pagespec_translate`.
+
+>>> Seems doable. --[[intrigeri]]
+
+>> The only case I've found where it does make sense to match other
+>> language pages is on `l10n.ikiwiki.info` when listing pages that
+>> need translation.
+>> 
+>> Otherwise, it can be documented, but that's not really enough;
+>> a user who makes a site using auto-blog.setup and enables po will
+>> get a really screwed up blog that lists translations as separate posts
+>> and needs significant work to fix. I have thought about making
+>> `match_currentlang` a stub in IkiWiki (done in my currentlang branch),
+>> so I can use it in all the PageSpecs in the example blog etc, but I
+>> can't say I love the idea.
+>> --[[Joey]] 
diff --git a/doc/todo/po:_translation_of_directives.mdwn b/doc/todo/po:_translation_of_directives.mdwn
new file mode 100644 (file)
index 0000000..89fc936
--- /dev/null
@@ -0,0 +1,8 @@
+If a translated page contains a directive, it may expand to some english
+text, or text in whatever single language ikiwiki is configured to "speak".
+
+Maybe there could be a way to switch ikiwiki to speaking another language
+when building a non-english page? Then the directives would get translated.
+
+(We also will need this in order to use translated templates, when they are
+available.)
index c4e78ca0bb7147eba8765b5185820f3beb279eda..d55fc0aa82b247be8532bddbc91f46bb22d4578c 100644 (file)
@@ -5,9 +5,14 @@ features and thus makes it rather hard to give an ikiwiki site a consistent
 look. If you browse the templates provided in the tarball, you'll notice that
 more than one of them contain the `<html>` tag, which is unnecessary.
 
+> Note that is no longer true, and I didn't have to do such an intrusive
+> change to fix it either. --[[Joey]]
+
 Maybe it's just me, I also find HTML::Template cumbersome to use, due in part
 to its use of capital letters.
 
+> Its entirely optional use of capital letters? --[[Joey]]
+
 Finally, the software seems unmaintained: the mailing list and searchable
 archives linked from
 <http://html-template.sourceforge.net/html_template.html#frequently%20asked%20questions>
@@ -58,3 +63,25 @@ Yes, Template::Toolkit is very powerful. But I think it's somehow overkill for a
 I'd have to agree that Template::Toolkit is overkill and personally I'm not a fan, but it is very popular (there is even a book) and the new version (3) is alleged to be much more nimble than current version.  --[[ajt]]
 
 HTML::Template's HTML-like markup prevents me from editing templates in KompoZer or other WYSIWYG HTML editors.  The editor tries to render the template markup rather than display it verbatim, and large parts of the template become invisible.  A markup syntax that doesn't confuse editors (such as Template::Toolkit's "[% FOO %]") may promote template customization.  The ability to replace the template engine would be within the spirit of ikiwiki's extensibility. --Rocco
+
+
+I agree that being able to replace the template toolkit would be a great piece of modularity, and one I would use. If I could use the slot-based filling and the conditional logic from Template::Toolkit, we could build much more flexible inline and archivepage templates that would look different depending on where in the wiki we use them. Some of this can currently be accomplished with separate templates for each use case and a manual call to the right template in the !inline directive, but this is limited, cumbersome, and makes it difficult to reuse bits of formatting by trapping all of that information in multiple template files. -Ian
+
+> I don't wish HTML::Template to be *replaced* by Template::Toolkit - as
+> others have said above, it's overkill for my needs.  However, I also
+> agree that HTML::Template has its own problems too.  The idea of making
+> the template system modular, with a choice of which backend to use - I
+> really like that idea. It would enable me to use some other template
+> system I like better, such as Text::Template or Text::NeatTemplate. But I
+> think it would be a lot of work to implement, though perhaps no more work
+> than making the revision-control backend modular, I guess.  One would
+> need to write an IkiWiki template interface that didn't care what the
+> backend was, and yet is somehow still flexible enough to take advantage
+> of special features of different backends.  There are an *awful lot* of
+> things that use templates - not just the `pagetemplate` and `template`
+> plugins, but a number of others which have specialized templates of their
+> own. -- [[KathrynAndersen]]a
+
+>> A modular template system in ikiwiki is unlikely, as template objects
+>> are part of the API,  notably the `pagetemplate` hook. Unless the other
+>> system has a compatible template object. --[[Joey]] 
diff --git a/doc/todo/selective_more_directive.mdwn b/doc/todo/selective_more_directive.mdwn
new file mode 100644 (file)
index 0000000..2a99982
--- /dev/null
@@ -0,0 +1,28 @@
+I'm setting up a blog for NaNoWriMo and other story-writing, which means long posts every day. I want to have excerpts on the front page, which link to the full length story posts. I also want a dedicated page for each story which inlines the story in full and in chronological order. I can use the "more" directive to achieve this effect on the front page but then it spoils the story page. My solution was to add a pages= parameter to the more directive to make it more selective.
+
+    --- /usr/share/perl5/IkiWiki/Plugin/more.pm     2010-10-09 00:09:24.000000000 +0000
+    +++ .ikiwiki/IkiWiki/Plugin/more.pm    2010-11-01 20:24:59.000000000 +0000
+    @@ -26,7 +26,10 @@
+     
+            $params{linktext} = $linktext unless defined $params{linktext};
+     
+    -       if ($params{page} ne $params{destpage}) {
+    +       if ($params{page} ne $params{destpage} &&
+    +           (! exists $params{pages} ||
+    +            pagespec_match($params{destpage}, $params{pages},
+    +                  location => $params{page}))) {
+                    return "\n".
+                           htmllink($params{page}, $params{destpage}, $params{page},
+                                    linktext => $params{linktext},
+
+I can now call it as 
+
+    \[[!more pages="index" linktext="Chapter 1" text="""
+    etc
+    """]]
+
+I'm not entirely happy with the design, since I would rather put this information in the inline directive instead of in every story post. Unfortunately I found no way to pass parameters from the inline directive to the inlined page.
+
+-- [[dark]]
+
+> Me neither, but nor do I see a better way, so [[applied|done]]. --[[Joey]] 
diff --git a/doc/todo/support_includes_in_setup_files.mdwn b/doc/todo/support_includes_in_setup_files.mdwn
new file mode 100644 (file)
index 0000000..50afb2b
--- /dev/null
@@ -0,0 +1,10 @@
+I have a client server setup so I can I edit/preview on my laptop/desktop and push to a server. I therefore have two almost identical setup files that reasonably often I let get out of sync.  I'd like to be able into include the common parts into the two setup files. Currently the following works, but it relies on knowing the implementation of IkiWiki::Setup::Standard
+
+use IkiWiki::Setup::Standard { specific stuff };
+require "/path/to/common_setup";
+
+where common_setup contains a call to IkiWiki::Setup::merge
+
+To see that this is fragile, note that the require must come second, or ikiwiki will try to load a module called IkiWiki::Setup::merge
+
+DavidBremner
index da55bce671f275133348d3e8e3bfb1d9ae30703b..653db1ff21552cd00c8f1937b0af35b73b9d878b 100644 (file)
@@ -8,3 +8,14 @@ which uses !inline to list all posts with the tag.
 Joey said on IRC that "probably changing the derel() function in 
 IkiWiki.pm is the best way to do it".
 
+> I implemented this suggestion in the simplest possible way, [[!taglink patch]] available [[here|http://git.oblomov.eu/ikiwiki/patch/f4a52de556436fdee00fd92ca9a3b46e876450fa]].
+> An alternative approach, very similar, would be to make the empty page parameter mean current page (e.g. `link()` would mean pages linking here). The patch would be very similar.
+> -- GB
+
+>> Thanks for this, and also for your recent spam-fighting.
+>> Huh, I was right about changing derel, didn't realize it would be
+>> so obvious a change. :) Oh well, I managed to complicate it
+>> some in optimisation pass.. ;)
+>>
+>> Note that your git-daemon on git.oblomov.eu seems down.
+>> I pulled the patch from gitweb, [[done]] --[[Joey]]
diff --git a/doc/todo/transient_pages.mdwn b/doc/todo/transient_pages.mdwn
new file mode 100644 (file)
index 0000000..1a35ddd
--- /dev/null
@@ -0,0 +1,271 @@
+On [[todo/auto-create_tag_pages_according_to_a_template]], [[chrysn]]
+suggests:
+
+> Instead of creating a file that gets checked in into the RCS, the
+> source files could be left out and the output files be written as
+> long as there is no physical source file (think of a virtual underlay).
+> Something similar would be required to implement alias directive,
+> which couldn't be easily done by writing to the RCS as the page's
+> contents can change depending on which other pages claim it as an alias.
+
+`add_autofile` could be adapted to do this, or a similar API could be
+added.
+
+This would also be useful for autoindex, as suggested on
+[[plugins/autoindex/discussion]]. I'd also like to use it for
+[[plugins/contrib/album]].
+
+It could also be used for an [[todo/alias_directive]].
+
+--[[smcv]]
+
+--------------------------
+
+[[!template id=gitbranch branch=smcv/ready/transient author="[[smcv]]"]]
+[[!template id=gitbranch branch=smcv/ready/transient-recentchanges author="[[smcv]]"]]
+[[!template id=gitbranch branch=smcv/ready/transient-tag author="[[smcv]]"]]
+[[!tag patch]]
+
+I think this branch is now enough to be useful. It adds the following:
+
+If the `transient` plugin is loaded, `$srcdir/.ikiwiki/transient` is added
+as an underlay. I'm not sure whether this should be a plugin or core, so
+I erred on the side of more plugins; I think it's "on the edge of the core",
+like goto.
+
+Pages in the transient underlay are automatically
+deleted if a page of the same name is created in the srcdir (or an underlay
+closer to the srcdir in stacking order).
+
+With the additional `ready/transient-tag` branch,
+`tag` enables `transient`, and if `tag_autocreate_commit` is set to 0
+(default 1), autocreated tags are written to the transient underlay.
+There is a regression test.
+
+With the additional `transient-autoindex` branch,
+`autoindex` uses autofiles. It also enables `transient`, and if
+`autoindex_commit` is set to 0 (default 1), autoindexes are written to
+the transient underlay. There is a regression test. However, this branch
+is blocked by working out what the desired behaviour is, on
+[[todo/autoindex_should_use_add__95__autofile]].
+
+> I wonder why this needs to be configurable? I suppose that gets back to
+> whether it makes sense to check these files in or not. The benefits of 
+> checking them in:
+> 
+> * You can edit them from the VCS, don't have to go into the web
+>   interface. Of course, files from the underlays have a similar issue,
+>   but does it make sense to make that wart larger?
+> * You can know you can build the same site with nothing missing
+>   even if you don't there enable autoindex or whatever. (Edge case.)
+
+>> I'm not sure that that's a huge wart; you can always "edit by
+>> overwriting". If you're running a local clone of the wiki on your laptop
+>> or whatever, you have the underlays already, and can copy from there.
+>> Tag and autoindex pages have rather simple source code anyway. --s
+
+> The benefit of using transient pages seems to just be avoiding commit
+> clutter? For files that are never committed, transient pages are a clear
+> win, but I wonder if adding configuration clutter just to avoid some 
+> commit clutter is really worth it.
+
+>> According to the last section of
+>> [[todo/auto-create_tag_pages_according_to_a_template]], [[chrysn]] and
+>> Eric both feel rather strongly that it should be possible to
+>> not commit any tags; in [[plugins/autoindex/discussion]],
+>> lollipopman and [[JoeRayhawk]] both requested the same for autoindex.
+>> I made it configurable because, as you point out,
+>> there are also reasons why it makes sense to check these
+>> automatically-created files in. I'm neutral on this, personally.
+>>
+>> If this is a point of contention, would you accept a branch that
+>> just adds `transient` and uses it for [[plugins/recentchanges]],
+>> which aren't checked in and never have been? I've split the
+>> branch up in the hope that *some* of it can get merged.
+>>
+>>> I will be happy to merge transient-recentchanges when it's ready.
+>>> I see no obstacle to merging transient-tag either, and am not
+>>> really against using it for autoindex or aggregate either
+>>> once they get completed.
+>>> I just wanted to think through why configurability is needed.
+>>> --[[Joey]]
+>>
+>> One potentially relevant point is that configuration clutter only
+>> affects the site admin whereas commit clutter is part of the whole
+>> wiki's history. --[[smcv]]
+
+> Anyway, the configurability
+> appears subtly broken; the default is only 1 if a new setup file is
+> generated. (Correction: It was not even the default then --[[Joey]])
+> With an existing setup file, the 'default' values in
+> `getsetup` don't take effect, so it will default to undef, which
+> is treated the same as 0. --[[Joey]]
+
+>> Fixed in the branches, hopefully. (How disruptive would it be to have
+>> defaults take effect whenever the setup file doesn't set a value, btw?
+>> It seems pretty astonishing to have them work as they do at the moment.) --s
+
+>>> Well, note that default is not actually a documented field in
+>>> getsetup hooks at all! (It is used in IkiWiki.pm's own `getsetup()`, and
+>>> the concept may have leaked out into one or two plugins (comments,
+>>> transient)).
+>>> 
+>>> Running getsetup at plugin load time is something I have considered
+>>> doing. It would simplify some checkconfig hooks that just set hardcoded 
+>>> defaults. Although since dying is part of the getsetup hook's API, it
+>>> could be problimaric.
+>>> --[[Joey]]
+
+autoindex ignores pages in the transient underlay when deciding whether
+to generate an index.
+
+With the additional `ready/transient-recentchanges` branch, new recent
+changes go in the transient underlay; I tested this manually.
+
+Not done yet (in that branch, at least):
+
+* `remove` can't remove transient pages: this turns out to be harder than
+  I'd hoped, because I don't want to introduce a vulnerability in the
+  non-regular-file detection, so I'd rather defer that.
+
+  > Hmm, I'd at least want that to be dealt with before this was used
+  > by default for autoindex or tag. --[[Joey]]
+
+  >> I'll try to work out which of the checks are required for security
+  >> and which are just nice-to-have, but I'd appreciate any pointers
+  >> you could give. Note that my branch wasn't meant to enable either
+  >> by default, and now hopefully doesn't. --[[smcv]]
+
+* Transient tags that don't match any pages aren't deleted: I'm not sure
+  that that's a good idea anyway, though. Similarly, transient autoindexes
+  of directories that become empty aren't deleted.
+
+  > Doesn't seem necessary, or really desirable to do that. --[[Joey]]
+
+  >> Good, that was my inclination too. --s
+
+* In my `untested/transient` branch, new aggregated files go in the
+  transient underlay too (they'll naturally migrate over time). I haven't
+  tested this yet, it's just a proof-of-concept.
+
+> I can confirm that the behavior of autoindex, at least, is excellent.
+> Haven't tried tag. Joey, can you merge transient and autoindex? --JoeRayhawk
+
+>> Here are some other things I'd like to think about first: --[[Joey]] 
+>>
+>> * There's a FIXME in autoindex.
+>>
+>>     > Right, the extra logic for preventing autoindex pages from being
+>>     > re-created. This is taking a while, so I'm going to leave out the
+>>     > autoindex part for the moment. The FIXME is only relevant
+>>     > because I tried to solve
+>>     > [[todo/autoindex should use add__95__autofile]] first, but
+>>     > strictly speaking, that's an orthogonal change. --s
+
+>> * Suggest making recentchanges unlink the transient page
+>>   first, and only unlink from the old location if it wasn't
+>>   in the transient location. Ok, it only saves 1 syscall :)
+>>
+>>   > Is an unlink() really that expensive? But, OK, fixed in the
+>>   > `ready/transient-recentchanges` branch. --s
+
+>>   >> It's not, but it's easy. :) --[[Joey]]
+
+>> * Similarly it's a bit worrying for performance that it
+>>   needs to pull in and use `Cwd` on every ikiwiki startup now.
+>>   I really don't see the need; `wikistatedir` should
+>>   mostly be absolute, and ikiwiki should not chdir in ways
+>>   that break it anyway.
+>>
+>>   > The reason to make it absolute is that relative underlays
+>>   > are interpreted as relative to the base underlay directory,
+>>   > not the cwd, by `add_underlay`.
+>>   >
+>>   > The updated `ready/transient-only` branch only loads `Cwd` if
+>>   > the path is relative; an extra commit on branch
+>>   > `smcv/transient-relative` goes behind `add_underlay`'s
+>>   > back to allow use of a cwd-relative underlay. Which direction
+>>   > would you prefer?
+>>   >
+>>   > I note in passing that [[plugins/autoindex]] and `IkiWiki::Render`
+>>   > both need to use `Cwd` and `File::Find` on every refresh, so
+>>   > there's only any point in avoiding `Cwd` for runs that don't
+>>   > actually refresh, like simple uses of the CGI. --s
+
+>>   >> Oh, right, I'd forgotten about the horrificness of File::Find
+>>   >> that required a chdir for security. Ugh. Can we just avoid
+>>   >> it for those simple cases then? (demand-calculate wikistatedir)
+>>   >> --[[Joey]] 
+
+>> * Unsure about the use of `default_pageext` in the `change`
+>>   hook. Is everything in the transientdir really going
+>>   to use that pageext? Would it be better to look up the
+>>   complete source filename?
+>>
+>>   > I've updated `ready/transient` to do a more thorough GC by
+>>   > using File::Find on the transient directory. This does
+>>   > require `File::Find` and `Cwd`, but only when pages change,
+>>   > and `refresh` loads both of those in that situation anyway.
+>>   >
+>>   > At the moment everything in the transientdir will either
+>>   > have the `default_pageext` or be internal, although I
+>>   > did wonder whether to make [[plugins/contrib/album]]
+>>   > viewer pages optionally be `html`, for better performance
+>>   > when there's a very large number of photos. --s
+
+>>   >> Oh, ugh, more File::Find... Couldn't it just assume that the
+>>   >> transient page has the same extension as its replacement?
+>>   >> --[[Joey]]
+
+--------------------------
+
+## An earlier version
+
+I had a look at implementing this. It turns out to be harder than I thought
+to have purely in-memory pages (several plugins want to be able to access the
+source file as a file), but I did get this proof-of-concept branch
+to write tag and autoindex pages into an underlay.
+
+This loses the ability to delete the auto-created pages (although they don't
+clutter up git this way, at least), and a lot of the code in autoindex is
+probably now redundant, so this is probably not quite ready for merge, but
+I'd welcome opinions.
+
+Usage: set `tag_underlay` and/or `autoindex_underlay` to an absolute path,
+which you must create beforehand. I suggest *srcdir* + `/.ikiwiki/transient`.
+
+Refinements that could be made if this approach seems reasonable:
+
+* make these options boolean, and have the path always be `.ikiwiki/transient`
+* improve the `remove` plugin so it also deletes from this special underlay
+
+>> Perhaps it should be something more generic, so that other plugins could use it (such as "album" mentioned above).
+>> The `.ikiwiki/transient` would suit this, but instead of saying "tag_underlay" or "autoindex_underlay" have "use_transient_underlay" or something like that?
+>> Or to make it more flexible, have just one option "transient_underlay" which is set to an absolute path, and if it is set, then one is using a transient-underlay.
+>> --[[KathrynAndersen]]
+
+>>> What I had in mind was more like `tag_autocreate_transient => 1` or
+>>> `autoindex_transient => 1`; you might conceivably want tags to be
+>>> checked in but autoindices to be transient, and it's fine for each
+>>> plugin to make its own decision. Going from that to one boolean
+>>> (or just always-transient if people don't think that's too
+>>> astonishing) would be trivial, though.
+>>>
+>>> I don't think relocating the transient underlay really makes sense,
+>>> except for prototyping: you only want one, and `.ikiwiki` is as good
+>>> a place as any (ikiwiki already needs to be able to write there).
+>>>
+>>> For [[plugins/contrib/album]] I think I'd just make the photo viewer
+>>> pages always-transient - you can always make a transient page
+>>> permanent by editing it, after all.
+>>>
+>>> Do you think this approach has enough potential that I should
+>>> continue to hack on it? Any thoughts on the implementation? --[[smcv]]
+
+>>>> Ah, now I understand what you're getting at. Yes, it makes sense to put transient pages under `.ikiwiki`.
+>>>> I haven't looked at the code, but I'd be interested in seeing whether it's generic enough to be used by other plugins (such as `album`) without too much fuss.
+>>>> The idea of a transient underlay gives us a desirable feature for free: that if someone edits the transient page, it is made permanent and added to the repository.
+>>>>
+>>>> I think the tricky thing with removing these transient underlay pages is the question of how to prevent whatever auto-generated the pages in the first place from generating them again - or, conversely, how to force whatever auto-generated those pages to regenerate them if you've changed your mind.
+>>>> I think you'd need something similar to `will_render` so that transient pages would be automatically removed if whatever auto-generated them is no longer around.
+>>>> -- [[KathrynAndersen]]
diff --git a/doc/todo/untrusted_git_push_hooks.mdwn b/doc/todo/untrusted_git_push_hooks.mdwn
new file mode 100644 (file)
index 0000000..313078c
--- /dev/null
@@ -0,0 +1,12 @@
+Re the canrename, canremove, and canedit hooks:
+
+Of the three, only canremove is currently checked during an untrusted
+git push (a normal git push is assumed to be from a trusted user and
+bypasses all checks).
+
+It would probably make sense to add the canedit hook to the checks done
+there. Calling the canrename hook is tricky, because after all, git does
+not record explicit file moves.
+
+The checkcontent hook is another hook not currently called there, that
+probably should be.
diff --git a/doc/todo/use_secure_cookies_for_ssl_logins.mdwn b/doc/todo/use_secure_cookies_for_ssl_logins.mdwn
new file mode 100644 (file)
index 0000000..194db2f
--- /dev/null
@@ -0,0 +1,36 @@
+[[!template id=gitbranch branch=smcv/ready/sslcookie-auto author="[[smcv]]"]]
+[[!tag patch]]
+
+At the moment `sslcookie => 0` never creates secure cookies, so if you log in
+with SSL, your browser will send the session cookie even over plain HTTP.
+Meanwhile `sslcookie => 1` always creates secure cookies, so you can't
+usefully log in over plain http.
+
+This branch adds `sslcookie => 0, sslcookie_auto => 1` as an option; this
+uses the `HTTPS` environment variable, so if you log in over SSL you'll
+get a secure session cookie, but if you log in over HTTP, you won't.
+(The syntax for the setup file is pretty rubbish - any other suggestions?)
+
+> Does this need to be a configurable option at all? The behavior could
+> just be changed in the sslcookie = 0 case. It seems sorta reasonable
+> that, once I've logged in via https, I need to re-login if I then
+> switch to http.
+
+>> Even better. I've amended the branch to have this behaviour, which
+>> turns it into a one-line patch. --[[smcv]]
+
+> And, if your change is made, the sslcookie option could probably itself
+> be dropped too -- at least I don't see a real use case for it if ikiwiki
+> is more paranoid about cookies by default.
+
+>> I haven't done that; it might make sense to do so, but I think it'd be
+>> better to leave it in as a safety-catch (or in case someone's
+>> using a webserver that doesn't put `$HTTPS` in the environment). --s
+
+> Might be best to fix
+> [[todo/want_to_avoid_ikiwiki_using_http_or_https_in_urls_to_allow_serving_both]]
+> first, so that dual https/http sites can better be set up. --[[Joey]]
+
+>> Thanks for merging that! :-) --s
+
+[[merged|done]] --[[Joey]] 
diff --git a/doc/todo/use_templates_for_the_img_plugin.mdwn b/doc/todo/use_templates_for_the_img_plugin.mdwn
new file mode 100644 (file)
index 0000000..1cee1b5
--- /dev/null
@@ -0,0 +1,29 @@
+[[!template id=gitbranch branch=jmtd/img_use_template author="[[Jon]]"]]
+
+Not finished! :-)
+
+The patches in <http://github.com/jmtd/ikiwiki/tree/img_use_template> convert the `img.pm` plugin to use a template (by default, `img.tmpl`, varied using a `template=` parameter) rather than hard-code the generated HTML.
+
+I originally thought of this to solve the problem outlined in [[bugs/can't mix template vars inside directives]], before I realised I could wrap the `img` call in my pages with a template to achieve the same thing.  I therefore sat on it.
+
+However, I since thought of another use for this, and so started implementing it. (note to self: explain this other use)
+
+----
+
+Ok, I have managed to achieve what I wanted with stock ikiwiki, this branch might not have any more life left in it (but it has proven an interesting experiment to see how much logic could be moved from `img.pm` into a template relatively easily. Although the template is not terribly legible.)
+
+My ikiwiki page has a picture on the front page.  I've changed that picture just once, but I would like to change it again from time to time.  I also want to keep a "gallery", or at least a list, of previous pictures, and perhaps include text alongside each picture, but not on the front page.
+
+I've achieved this as follows
+
+ * each index picture gets a page under "indexpics".
+ * the "indexpics" page has a raw inline to include them all[1]
+ * the front page has more-or-less the same inline, with show=1
+ * each index picture page has a [[plugins/conditional]]:
+   * if you are being included, show the resized picture only, and link the picture to the relevant indexpic page
+   * else, show the picture with the default link to a full-size image, and include explanatory text.
+ * most of the boilerplate is hidden inside a template
+
+It is not quite as I envisaged it: the explanatory text would probably make sense on the indexpics "gallery" page, but since that includes the page, the wrong trouser-leg of the conditional is used.  But it works quite well.  Introducing a new index picture involves creating an appropriate page under indexpics and the rest happens automatically.
+
+[1] lie #1: the pagespec is a lot more complex as it has to exclude raw image filetypes
index 65b7cd96a80759425c77839e307c8b219e0af817..dfe41e138200e4f55fc69919016b4cd4d5a571fe 100644 (file)
@@ -1,3 +1,30 @@
+## current status
+
+99% of the way there, but:
+
+* CGI pages, with the exception of edit pages, set `<base>` to
+  `$config{url}`
+
+  I had to revert using `baseurl(undef)` for that, because it needs
+  to be a full url.
+
+  Ideally, baseurl would return an absolute url derived from the url
+  being used to access the cgi, but that needs access to the CGI object,
+  which it does not currently have. Similarly, `misctemplate`
+  does not have access to the CGI object, so it cannot use it to
+  generate a better baseurl. Not sure yet what to do; may have to thread
+  a cgi parameter through all the calls to misctemplate. --[[Joey]]
+
+* Using `do=goto` to go to a comment or recentchanges item
+  will redirect to the `$config{url}`-based url, since the
+  permalinks are made to be absolute urls now.
+
+  Fixing this would seem to involve making meta force permalinks
+  to absolute urls when fulling out templates, while allowing them
+  to be left as partial urls internally, for use by goto. --[[Joey]]
+
+## old attempt
+
 It looks like all links in websites are absolute paths, this has some limitations:
 
 * If connecting to website via https://... all links will take you back to http://
@@ -12,18 +39,322 @@ It would be good if relative paths could be used instead, so the transport metho
 > "../../", and "../". The only absolute links are to CGIs and the w3c DTD.
 > --[[Joey]]
 
->> The problem is within the CGI script. The links within the HTML page are all absolute, including links to the css file.
->> Having a http links within a HTML page retrieved using https upset most browsers (I think). Also if I push cancel on the edit page in https, I end up at at http page. -- Brian May
+>> The problem is within the CGI script. The links within the HTML page are all
+>> absolute, including links to the css file. Having a http links within a HTML
+>> page retrieved using https upset most browsers (I think). Also if I push cancel
+>> on the edit page in https, I end up at at http page. -- Brian May
 
 >>> Ikiwiki does not hardcode http links anywhere. If you don't want
 >>> it to use such links, change your configuration to use https
 >>> consistently. --[[Joey]]
 
-Errr... That is not a solution, that is a work around. ikiwiki does not hard code the absolute paths, but absolute paths are hard coded in the configuration file. If you want to serve your website so that the majority of users can see it as http, including in rss feeds (this allows proxy caches to cache the contents and has reduced load requirements), but editing is done via https for increased security, it is not possible. I have some ideas how this can be implemented (as ikiwiki has the absolute path to the CGI script and the absolute path to the destination, it should be possible to generate a relative path from one to the other), although some minor issues still need to be resolved. -- Brian May
+Errr... That is not a solution, that is a work around. ikiwiki does not hard
+code the absolute paths, but absolute paths are hard coded in the configuration
+file. If you want to serve your website so that the majority of users can see
+it as http, including in rss feeds (this allows proxy caches to cache the
+contents and has reduced load requirements), but editing is done via https for
+increased security, it is not possible. I have some ideas how this can be
+implemented (as ikiwiki has the absolute path to the CGI script and the
+absolute path to the destination, it should be possible to generate a relative
+path from one to the other), although some minor issues still need to be
+resolved. -- Brian May
 
-I noticed the links to the images on <http://ikiwiki.info/recentchanges/> are also absolute, that is <http://ikiwiki.info/wikiicons/diff.png>; this seems surprising, as the change.tmpl file uses &lt;TMPL_VAR BASEURL&gt;
-which seems to do the right thing in page.tmpl, but not for change.tmpl. Where is BASEURL set? -- Brian May
+I noticed the links to the images on <http://ikiwiki.info/recentchanges/> are
+also absolute, that is <http://ikiwiki.info/wikiicons/diff.png>; this seems
+surprising, as the change.tmpl file uses &lt;TMPL_VAR BASEURL&gt; which seems
+to do the right thing in page.tmpl, but not for change.tmpl. Where is BASEURL
+set? -- Brian May
 
 > The use of an absolute baseurl in change.tmpl is a special case. --[[Joey]]
 
+So I'm facing this same issue. I have a wiki which needs to be accessed on
+three different URLs(!) and the hard coding of the URL from the setup file is
+becoming a problem for me. Is there anything I can do here? --[[Perry]]
+
+> I remain puzzled by the problem that Brian is discussing. I don't see
+> why you can't just set the cgiurl and url to a https url, and serve
+> the site using both http and https.
+> 
+> Just for example, <https://kitenet.net/> is an ikiwiki, and it is accessible
+> via https or http, and if you use https, links will remain on https (except
+> for links using the cgi, which I could fix by changing the cgiurl to https).
+> 
+> I think it's possible ikiwiki used to have some
+> absolute urls that have been fixed since Brian filed the bug. --[[Joey]]  
+
 [[wishlist]]
+
+----
+
+[[!toggle id="smcv-https" text="Some discussion of a rejected implementation, smcv/https."]]
+[[!toggleable id="smcv-https" text="""
+
+[[!template id=gitbranch branch=smcv/https author="[[smcv]]"]]
+
+For a while I've been using a configuration where each wiki has a HTTP and
+a HTTPS mirror, and updating one automatically updates the other, but
+that seems unnecessarily complicated. My `https` branch adds `https_url`
+and `https_cgiurl` config options which can be used to provide a HTTPS
+variant of an existing site; the CGI script automatically detects whether
+it was accessed over HTTPS and switches to the other one.
+
+This required some refactoring, which might be worth merging even if
+you don't like my approach:
+
+* change `IkiWiki::cgiurl` to return the equivalent of `$config{cgiurl}` if
+  called with no parameters, and change all plugins to indirect through it
+  (then I only need to change that one function for the HTTPS hack)
+
+* `IkiWiki::baseurl` already has similar behaviour, so change nearly all
+  references to the `$config{url}` to call `baseurl` (a couple of references
+  specifically wanted the top-level public URL for Google or Blogspam rather
+  than a URL for the user's browser, so I left those alone)
+
+--[[smcv]]
+
+> The justification for your patch seems to be wanting to use a different
+> domain, like secure.foo.com, for https? Can you really not just configure
+> both url and cgiurl to use `https://secure.foo.com/...` and rely on
+> relative links to keep users of `http://insecure.foo.com/` on http until
+> they need to use the cgi? 
+
+>> My problem with that is that uses of the CGI aren't all equal (and that
+>> the CA model is broken). You could put CGI uses in two classes:
+>>
+>> - websetup and other "serious" things (for the sites I'm running, which
+>>   aren't very wiki-like, editing pages is also in this class).
+>>   I'd like to be able to let privileged users log in over
+>>   https with httpauth (or possibly even a client certificate), and I don't
+>>   mind teaching these few people how to do the necessary contortions to
+>>   enable something like CACert.
+>>
+>> - Random users making limited use of the CGI: do=goto, do=404, and
+>>   commenting with an OpenID. I don't think it's realistic to expect
+>>   users to jump through all the CA hoops to get CACert installed for that,
+>>   which leaves their browsers being actively obstructive, unless I either
+>>   pay the CA tax (per subdomain) to get "real" certificates, or use plain
+>>   http.
+>>
+>> On a more wiki-like wiki, the second group would include normal page edits.
+>>
+>>> I see your use case. It still seems to me that for the more common
+>>> case where CA tax has been paid (getting a cert that is valid for
+>>> multiple subdomains should be doable?), having anything going through the
+>>> cgiurl upgrade to https would be ok. In that case, http is just an
+>>> optimisation for low-value, high-aggregate-bandwidth type uses, so a
+>>> little extra https on the side is not a big deal. --[[Joey]]
+>>
+>> Perhaps I'm doing this backwards, and instead of having the master
+>> `url`/`cgiurl` be the HTTP version and providing tweakables to override
+>> these with HTTPS, I should be overriding particular uses to plain HTTP...
+>>
+>> --[[smcv]]
+>>> 
+>>> Maybe, or I wonder if you could just use RewriteEngine for such selective
+>>> up/downgrading. Match on `do=(edit|create|prefs)`. --[[Joey]]
+
+> I'm unconvinced.
+> 
+> `Ikiwiki::baseurl()."foo"` just seems to be asking for trouble,
+> ie being accidentially written as `IkiWiki::baseurl("foo")`,
+> which will fail when foo is not a page, but some file.
+
+>> That's a good point. --s
+
+> I see multiple places (inline.pm, meta.pm, poll.pm, recentchanges.pm)
+> where it will now put the https url into a static page if the build
+> happens to be done by the cgi accessed via https, but not otherwise.
+> I would rather not have to audit for such problems going forward.
+
+>> Yes, that's a problem with this approach (either way round). Perhaps
+>> making it easier to run two mostly-synched copies like I was previously
+>> doing is the only solution... --s
+
+"""]]
+
+----
+
+[[!template id=gitbranch branch=smcv/ready/localurl author="[[smcv]]"]]
+[[!tag patch]]
+
+OK, here's an alternative approach, closer in spirit to what was initially
+requested. I included a regression test for `urlto`, `baseurl` and `cgiurl`,
+now that they have slightly more complex behaviour.
+
+The idea is that in the common case, the CGI and the pages will reside on the
+same server, so they can use "semi-absolute" URLs (`/ikiwiki.cgi`, `/style.css`,
+`/bugs/done`) to refer to each other. Most redirects, form actions, links etc.
+can safely use this form rather than the fully-absolute URL.
+
+The initial version of the branch had config options `local_url` and
+`local_cgiurl`, but they're now automatically computed by checking
+whether `url` and `cgiurl` are on the same server with the the same URL
+scheme. In theory you could use things like `//static.example.com/wiki/`
+and `//dynamic.example.com/ikiwiki.cgi` to preserve choice of http/https
+while switching server, but I don't know how consistently browsers
+support that.
+
+"local" here is short for "locally valid", because these URLs are neither
+fully relative nor fully absolute, and there doesn't seem to be a good name
+for them...
+
+I've tested this on a demo website with the CGI enabled, and it seemed to
+work nicely (there might be bugs in some plugins, I didn't try all of them).
+The branch at [[todo/use secure cookies for SSL logins]] goes well with
+this one.
+
+The `$config{url}` and `$config{cgiurl}` are both HTTP, but if I enable
+`httpauth`, set `cgiauthurl` to a HTTPS version of the same site and log
+in via that, links all end up in the HTTPS version.
+
+New API added by this branch:
+
+* `urlto(x, y, 'local')` uses `$local_url` instead of `$config{url}`
+
+  > Yikes. I see why you wanted to keep it to 3 parameters (4 is too many,
+  > and po overrides it), but I dislike overloading the third parameter
+  > like that.
+  > 
+  > There are fairly few calls to `urlto($foo, $bar)`, so why not
+  > make that always return the semi-local url form, and leave the third
+  > parameter for the cases that need a true fully-qualified url.
+  > The new form for local urls will typically be only a little bit longer,
+  > except in the unusual case where the cgiurl is elsewhere. --[[Joey]]
+
+  >> So, have urlto(x, y) use `$local_url`? There are few calls, but IMO
+  >> they're for the most important things - wikilinks, img, map and
+  >> other ordinary hyperlinks. Using `$local_url` would be fine for
+  >> webserver-based use, but it does stop you browsing your wiki's
+  >> HTML over `file:///` (unless you set that as the base URL, but
+  >> then you can't move it around), and stops you moving simple
+  >> outputs (like the docwiki!) around.
+  >>
+  >> I personally think breaking the docwiki is enough to block that.
+  >>
+  >>> Well, the docwiki doesn't have an url configured at all, so I assumed
+  >>> it would need to fall back to current behavior in that case. I had
+  >>> not thought about browsing wiki's html files though, good point.
+  >>
+  >> How about this?
+  >>
+  >> * `urlto($link, $page)` with `$page` defined: relative
+  >> * `urlto($link, undef)`: local, starts with `/`
+  >> * `urlto($link)`: also local, as a side-effect
+  >> * `urlto($link, $anything, 1)` (but idiomatically, `$anything` is
+  >>   normally undef): absolute, starts with `http[s]://`
+  >>
+  >> --[[smcv]]
+  >> 
+  >>> That makes a great deal of sense, bravo for actually removing
+  >>> parameters in the common case while maintaining backwards
+  >>> compatability! --[[Joey]]
+  >>>
+  >>>> Done in my `localurl` branch; not tested in a whole-wiki way
+  >>>> yet, but I did add a regression test. I've used
+  >>>> `urlto(x, undef)` rather than `urlto(x)` so far, but I could
+  >>>> go back through the codebase using the short form if you'd
+  >>>> prefer. --[[smcv]]
+  >>> 
+  >>> It does highlight that it would be better to have a
+  >>> `absolute_urlto($link)` (or maybe `absolute(urlto($link))` )
+  >>> rather than the 3 parameter form. --[[Joey]]
+  >>>
+  >>> Possibly. I haven't added this.
+
+* `IkiWiki::baseurl` has a new second argument which works like the
+  third argument of `urlto`
+
+  > I assume you have no objection to this --[[smcv]]
+
+  >> It's so little used that I don't really care if it's a bit ugly.
+  >> (But I assume changes to `urlto` will follow through here anyway.)
+  >> --[[Joey]] 
+
+  >>> I had to use it a bit more, as a replacement for `$config{url}`
+  >>> when doing things like referencing stylesheets or redirecting to
+  >>> the top of the wiki.
+  >>>
+  >>> I ended up redoing this without the extra parameter. Previously,
+  >>> `baseurl(undef)` was the absolute URL; now, `baseurl(undef)` is
+  >>> the local path. I know you objected to me using `baseurl()` in
+  >>> an earlier branch, because `baseurl().$x` looks confusingly
+  >>> similar to `baseurl($x)` but has totally different semantics;
+  >>> I've generally written it `baseurl(undef)` now, to be more
+  >>> explicit. --[[smcv]]
+
+* `IkiWiki::cgiurl` uses `$local_cgiurl` if passed `local_cgiurl => 1`
+
+  > Now changed to always use the `$local_cgiurl`. --[[smcv]]
+
+* `IkiWiki::cgiurl` omits the trailing `?` if given no named parameters
+  except `cgiurl` and/or `local_cgiurl`
+
+  > I assume you have no objection to this --[[smcv]]
+  > 
+  >> Nod, although I don't know of a use case. --[[Joey]]
+
+  >>> The use-case is that I can replace `$config{cgiurl}` with
+  >>> `IkiWiki::cgiurl()` for things like the action attribute of
+  >>> forms. --[[smcv]]
+
+Fixed bugs:
+
+* I don't think anything except `openid` calls `cgiurl` without also
+  passing in `local_cgiurl => 1`, so perhaps that should be the default;
+  `openid` uses the `cgiurl` named parameter anyway, so there doesn't even
+  necessarily need to be a way to force absolute URLs? Any other module
+  that really needs an absolute URL could use
+  `cgiurl(cgiurl => $config{cgiurl}, ...)`,
+  although that does look a bit strange
+
+  > I agree that makes sense. --[[Joey]]
+
+  >> I'm not completely sure whether you're agreeing with "perhaps do this"
+  >> or "that looks too strange", so please disambiguate:
+  >> would you accept a patch that makes `cgiurl` default to a local
+  >> (starts-with-`/`) result? If you would, that'd reduce the diff. --[[smcv]]
+
+  >>> Yes, I absolutely think it should default to local. (Note that
+  >>> if `absolute()` were implemented as suggested above, it could also
+  >>> be used with cgiurl if necessary.) --[[Joey]]
+
+  >>>> Done (minus `absolute()`). --[[smcv]]
+
+Potential future things:
+
+* It occurs to me that `IkiWiki::cgiurl` could probably benefit from being
+  exported? Perhaps also `IkiWiki::baseurl`?
+
+  > Possibly, see [[firm_up_plugin_interface]]. --[[Joey]]
+
+  >> Not really part of this branch, though, so wontfix (unless you ask me
+  >> to do so). --[[smcv]]
+
+* Or, to reduce use of the unexported `baseurl` function, it might make
+  sense to give `urlto` a special case that references the root of the wiki,
+  with a trailing slash ready to append stuff: perhaps `urlto('/')`,
+  with usage like this?
+
+        do_something(baseurl => urlto('/', undef, local)`);
+        do_something_else(urlto('/').'style.css');
+        IkiWiki::redirect(urlto('/', undef, 1));
+
+  > AFACIS, `baseurl` is only called in 3 places so I don't think that's
+  > needed. --[[Joey]] 
+
+  >> OK, wontfix. For what it's worth, my branch has 6 uses in IkiWiki
+  >> core code (IkiWiki, CGI, Render and the pseudo-core part of editpage)
+  >> and 5 in plugins, since I used it for things like redirection back
+  >> to the top of the wiki --[[smcv]]
+
+merged|done --[[Joey]] (But reopened, see above.)
+
+----
+
+Update: I had to revert part of 296e5cb2fd3690e998b3824d54d317933c595873,
+since it broke openid logins. The openid object requires a complete,
+not a relative cgiurl. I'm not sure if my changing that back to using
+`$config{cgiurl}` will force users back to eg, the non-https version of a
+site when logging in via openid.
+
+> Ok, changed it to use `CGI->url` to get the current absolute cgi url. --[[Joey]] 
diff --git a/doc/todo/web_reversion.mdwn b/doc/todo/web_reversion.mdwn
new file mode 100644 (file)
index 0000000..736d674
--- /dev/null
@@ -0,0 +1,73 @@
+Goal: Web interface to allow reverting of changes.
+
+Interface: 
+
+At least at first, it will be exposed via the recentchanges
+page, with revert icons next to each change. We may want a dynamic 
+per-page interface that goes back more than 100 changes later.
+
+Limiting assumptions:
+
+* No support for resolving conflicts in reverts; such a revert would just
+  fail and not happen.
+* No support for reset-to-this-point; initially the interface would only
+  revert a single commit, and if a bunch needed to go, the user would have
+  to drive that one at a time.
+
+Implementation plan: 
+
+* `rcs_revert` hook that takes a revision to revert.
+* CGI: `do=revert&rev=foo`
+* recentchanges plugin adds above to recentchanges page
+* prompt user to confirm (to avoid spiders doing reverts),
+  check that user is allowed to make the change, commit reversion,
+  and refresh site.
+
+Peter Gammie has done an initial implementation of the above.
+[[!template id=gitbranch branch=peteg/revert author="[[peteg]]"]]
+
+>> It is on a separate branch now. --[[peteg]]
+
+> Review: --[[Joey]] 
+> 
+> The revert commit will not currently say what web user did the revert.
+> This could be fixed by doing a --no-commit revert first and then using
+> rcs_commit_staged.
+>> Fixed, I think. --[[peteg]]
+>
+> So I see one thing I completly forgot about is `check_canedit`. Avoiding users
+> using reverting to make changes they would normally not be allowed to do is
+> tricky. I guess that a easy first pass would be to only let admins do it.
+> That would be enough to get the feature out there..
+> 
+> I'm thinking about having a `rcs_preprevert`. It would take a rev and look
+> at what changes reverting it would entail, and return the same data
+> structure that `rcs_recieve` does. This could be done by using `git revert
+> --no-commit`, and then examining the changes, and then `git reset` to drop
+> them.
+>> We can use the existing `git_commit_info` with the patch ID - no need to touch the working directory. -- [[peteg]]
+> 
+> Then the code that is currently in IkiWiki/Receive.pm, that calls
+> `check_canedit` and `check_canremove` to test the change, can be
+> straightforwardly refactored out, and used for checking reverts too.
+>> Wow, that was easy. :-) -- [[peteg]]
+> 
+> (The data from `rcs_preprevert` could also be used for a confirmation
+> prompt -- it doesn't currently include enough info for diffs, but at
+> least could have a list of changed files.)
+>
+> Note that it's possible for a git repo to have commits that modify wiki
+> files in a subdir, and code files elsewhere. `rcs_preprevert` should
+> detect changes outside the wiki dir, and fail, like `rcs_receive` does.
+>> Taken care of by refactoring `rcs_receive` in `git.pm`
+>> I've tested it lightly in my single-user setup. It's a little nasty that the `attachment` plugin
+>> gets used to check whether attachments are allowed -- there really should be a hook for that.
+>>> I agree, but have not figured out a way to make a hook work yet.
+>>> --[[Joey]] 
+>>
+>> Please look it over and tell me what else needs fixing... -- [[peteg]]
+
+>>> I have made my own revert branch and put a few^Wseveral fixes in there.
+>>> All merged to master now! --[[Joey]] 
+
+[[done]]
index 840d105d2e5517e579f00ae67efe49f8f3bf3016..2325b6502dc11762bc6932bde2542b05291df18e 100644 (file)
@@ -350,7 +350,7 @@ also be configured using a setup file.
 
 * ikiwiki --setup my.setup
 
-  Completly (re)build the wiki using the specified setup file.
+  Completely (re)build the wiki using the specified setup file.
 
 * ikiwiki --setup my.setup --refresh
 
diff --git a/doc/users/Perry.mdwn b/doc/users/Perry.mdwn
new file mode 100644 (file)
index 0000000..d10b862
--- /dev/null
@@ -0,0 +1 @@
+Just another IkiWiki user.
diff --git a/doc/users/Remy.mdwn b/doc/users/Remy.mdwn
new file mode 100644 (file)
index 0000000..5cde4c4
--- /dev/null
@@ -0,0 +1 @@
+Test page
diff --git a/doc/users/anarcat.wiki b/doc/users/anarcat.wiki
new file mode 100644 (file)
index 0000000..7ef474e
--- /dev/null
@@ -0,0 +1 @@
+Hello! I'm anarcat. See [[https://wiki.koumbit.net/TheAnarcat]] to know more about me.
diff --git a/doc/users/chrysn.mdwn b/doc/users/chrysn.mdwn
new file mode 100644 (file)
index 0000000..0daa3b2
--- /dev/null
@@ -0,0 +1,4 @@
+* **name**: chrysn
+* **website**: <http://christian.amsuess.com/>
+* **uses ikiwiki for**: a bunch of internal documentation / organization projects
+* **likes ikiwiki because**: it is a distributed organization tool that pretends to be a web app for the non-programmers out there
diff --git a/doc/users/dark.mdwn b/doc/users/dark.mdwn
new file mode 100644 (file)
index 0000000..e1d06d0
--- /dev/null
@@ -0,0 +1,3 @@
+[[!meta title="Richard Braakman"]]
+
+Lars Wirzenius convinced me to try ikiwiki for blogging :)
index 1647110220d604e5a69b178740086f459669690e..292a3bfad43f11eb5c073343e5c5dca27c39e175 100644 (file)
@@ -1 +1 @@
-Using ikiwiki for my yet to be published personal website :)
+Using ikiwiki for my personal website <http://harish.19thsc.com>
diff --git a/doc/users/jasonriedy.mdwn b/doc/users/jasonriedy.mdwn
new file mode 100644 (file)
index 0000000..c9b4ba7
--- /dev/null
@@ -0,0 +1 @@
+I'm over [thattaway](http://lovesgoodfood.com/jason).
index 414612affd93f203b18148c8f6c93453694c6757..435208a716ce50adc81886e275e99c9a766af0f3 100644 (file)
@@ -1,8 +1,8 @@
 [[!meta title="Thomas Schwinge"]]
 # Thomas Schwinge
 
-<tschwinge@gnu.org>  
-<http://www.thomas.schwinge.homeip.net/>
+<thomas@schwinge.name>  
+<http://schwinge.homeip.net/~thomas/>
 
 I have converted the [GNU Hurd](http://www.gnu.org/software/hurd/)'s previous
 web pages and previous wiki pages to a *[[ikiwiki]]* system; and all that while
@@ -35,10 +35,6 @@ Markdown rendering, for example).
 
     <http://www.gnu.org/software/hurd/purify_html>
 
-## Tags -- [[bugs/tagged__40____41___matching_wikilinks]]
-
-Tags should be a separate concept from wikilinks.
-
 ### \[[!map]] behavior
 
 The \[[!map]] on, for example,
@@ -142,6 +138,7 @@ discussed in *N-to-M Mapping of Input and Output Files* on
     ([[plugins/cutpaste]]) in RSS feed (only; not Atom?) under some conditions
     (refresh only, but not rebuild?).  Perhaps missing to read in / parse some
     files?
+    [[Reported|bugs/Error:_no_text_was_copied_in_this_page_--_missing_page_dependencies]].
 
   * [[plugins/recentchanges]]
 
diff --git a/doc/wikiicons/revert.png b/doc/wikiicons/revert.png
new file mode 100644 (file)
index 0000000..c39e65c
Binary files /dev/null and b/doc/wikiicons/revert.png differ
index aa333793836455eb558f9151e43e96d35d5abb63..339efd37c3ab8655746bff66c4610924936a4c87 100755 (executable)
@@ -1,7 +1,4 @@
 #!/usr/bin/perl
-$ENV{PATH}="/usr/local/bin:/usr/bin:/bin";
-delete @ENV{qw{IFS CDPATH ENV BASH_ENV}};
-
 package IkiWiki;
 
 use warnings;
@@ -163,24 +160,8 @@ sub main () {
                    ! $config{clean} &&
                    ((! $config{refresh} && ! $config{post_commit})
                     || $config{genwrappers})) {
-                       debug(gettext("generating wrappers.."));
                        require IkiWiki::Wrapper;
-                       my %origconfig=(%config);
-                       foreach my $wrapper (@{$config{wrappers}}) {
-                               %config=(%origconfig, %{$wrapper});
-                               $config{verbose}=$config{setupverbose}
-                                       if exists $config{setupverbose};
-                               $config{syslog}=$config{setupsyslog}
-                                       if exists $config{setupsyslog};
-                               delete @config{qw(setupsyslog setupverbose wrappers genwrappers rebuild)};
-                               checkconfig();
-                               if (! $config{cgi} && ! $config{post_commit} &&
-                                   ! $config{test_receive}) {
-                                       $config{post_commit}=1;
-                               }
-                               gen_wrapper();
-                       }
-                       %config=(%origconfig);
+                       gen_wrappers();
                }
                
                # setup implies a wiki rebuild by default
index 7c2c94376c2f519ea5a9e607c6f30c15cc605e29..4567206910f9f208eec7f734b6bfa68106ab05f2 100644 (file)
@@ -1,5 +1,5 @@
 Name:           ikiwiki
-Version: 3.20100704
+Version: 3.20101231
 Release:        1%{?dist}
 Summary:        A wiki compiler
 
@@ -31,7 +31,6 @@ Requires:       perl(HTML::Scrubber)
 Requires:       perl(XML::Simple)
 Requires:       perl(CGI::FormBuilder)
 Requires:       perl(CGI::Session)
-Requires:       perl(Digest::SHA1)
 
 Requires:       python-docutils
 
index 090174534d48e7cc056a5be13def89db80df6717..ad6d3c6026400660e87b67367133ce2e4a78fb81 100755 (executable)
--- a/mdwn2man
+++ b/mdwn2man
@@ -14,7 +14,8 @@ while (<>) {
                s/^#\s/.SH /;
                <>; # blank;
        }
-       s/^\s+//;
+       s/^[ \n]+//;
+       s/^\t/ /;
        s/-/\\-/g;
        s/^Warning:.*//g;
        s/^$/.PP\n/;
index 49dddee2b94d27d132384ba58f1fc4e422b47acf..0d631d812a04a72914f8bc7aadc9fe5f10b37b54 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki-bg\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-18 14:18-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2007-01-12 01:19+0200\n"
 "Last-Translator: Damyan Ivanov <dam@modsodtsys.com>\n"
 "Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -52,7 +52,7 @@ msgstr "Предпочитанията са запазени."
 msgid "You are banned."
 msgstr "Достъпът ви е забранен."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Грешка"
 
@@ -64,77 +64,82 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "липсващ параметър „id” на шаблона"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "нов източник"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "съобщения"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "ново"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "премахване на „%s” (на %s дни)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "премахване на „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "проверка на източника „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "не е намерен източник на адрес „%s”"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 #, fuzzy
 msgid "feed not found"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "данните от източника предизвикаха грешка в модула XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "създаване на нова страницa „%s”"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "грешка при обработване на шаблона"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "готово"
 
@@ -167,19 +172,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -194,77 +199,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr "Няма „счупени” връзки!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "създаване на %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, fuzzy, perl-format
 msgid "commenting on %s"
 msgstr "създаване на %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:490
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:492
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:505
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:509
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:551 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:602
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:640
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:789
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -274,22 +283,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:799
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -309,34 +318,28 @@ msgstr ""
 msgid "creating %s"
 msgstr "създаване на %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:331
-#: ../IkiWiki/Plugin/editpage.pm:341 ../IkiWiki/Plugin/editpage.pm:385
-#: ../IkiWiki/Plugin/editpage.pm:424
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "промяна на %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 #, fuzzy
 msgid "template not specified"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 #, fuzzy
 msgid "match not specified"
 msgstr "не е указан файл на обвивката"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "грешка при обработване на шаблона"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -345,12 +348,12 @@ msgstr ""
 msgid "fortune failed"
 msgstr "грешшка в приставката „fortune”"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 #, fuzzy
 msgid "missing page"
 msgstr "липсващ параметър „id” на шаблона"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -365,23 +368,31 @@ msgstr "грешка при четене на „%s”: %s"
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "крешка при компилиране на файла %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "При използване на приеставката „search” е необходимо е да се укаже %s"
@@ -391,26 +402,26 @@ msgstr "При използване на приеставката „search” 
 msgid "failed to run graphviz"
 msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
 
-#: ../IkiWiki/Plugin/graphviz.pm:90
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "няма разпознати усмивки; изключване на приставката „smiley”"
@@ -430,12 +441,12 @@ msgstr "грешка при запис на файла „%s”: %s"
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, fuzzy, perl-format
 msgid "failed to resize: %s"
 msgstr "грешка при запис на файла „%s”: %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, fuzzy, perl-format
 msgid "failed to determine size of image %s"
 msgstr "грешка при запис на файла „%s”: %s"
@@ -465,12 +476,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "шаблонът „%s” не е намерен"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "грешка при обработване на шаблона"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен"
 
@@ -501,22 +512,22 @@ msgstr ""
 "грешка при зареждането на perl-модула „Markdown.pm” (%s) или „/usr/bin/"
 "markdown” (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 #, fuzzy
 msgid "stylesheet not found"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 #, fuzzy
 msgid "redir page not found"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 #, fuzzy
 msgid "redir cycle is not allowed"
 msgstr "шаблонът „%s” не е намерен"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -536,7 +547,7 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "крешка при компилиране на файла %s"
@@ -590,21 +601,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, fuzzy, perl-format
 msgid "Will ping %s"
 msgstr "промяна на %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 #, fuzzy
 msgid "LWP not found, not pinging"
 msgstr "модулът „RPC::XML::Client” не е намерен; източникът не е проверен"
@@ -613,97 +624,92 @@ msgstr "модулът „RPC::XML::Client” не е намерен; източ
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "промяна на %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "крешка при компилиране на файла %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "крешка при компилиране на файла %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "крешка при компилиране на файла %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "грешка при запис на файла „%s”: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "грешка при запис на файла „%s”: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "приставката „linkmap”: грешка при изпълнение на „dot”"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "гласуване"
@@ -802,6 +808,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -822,16 +838,16 @@ msgstr ""
 msgid "%s is not a file"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -860,29 +876,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, fuzzy, perl-format
 msgid "rename %s"
 msgstr "обновяване на страницата „%s”"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, fuzzy, perl-format
 msgid "update for rename of %s to %s"
 msgstr "обновяване на страниците от уики „%s”: %s от потребител „%s”"
@@ -897,12 +913,12 @@ msgstr "грешка при запис на файла „%s”: %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -924,7 +940,12 @@ msgstr "препратката няма указани параметрите 
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "препратката „%s” сочи към „%s”"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 #, fuzzy
 msgid "failed to parse any smileys"
 msgstr "няма разпознати усмивки; изключване на приставката „smiley”"
@@ -997,16 +1018,11 @@ msgstr "създаване на нова страницa „%s”"
 msgid "missing id parameter"
 msgstr "липсващ параметър „id” на шаблона"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "шаблонът „%s” не е намерен"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 #, fuzzy
 msgid "failed to generate image from code"
 msgstr "грешка при запис на файла „%s”: %s"
@@ -1026,26 +1042,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1055,11 +1071,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, fuzzy, perl-format
-msgid "bad file name %s"
-msgstr "пропускане на невалидното име на файл „%s”"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1072,47 +1083,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "пропускане на невалидното име на файл „%s”"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "премахване на старата страница „%s”"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "обновяване на страницата „%s”, съдържаща препратки към „%s”"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "премахване на „%s” понеже не се генерира от „%s”"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "обновяване на страницата „%s”, зависеща от „%s”"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "обновяване на „%s” и осъвременяване на обратните връзки"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "промяна на %s"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: неуспех при обновяване на страницата „%s”"
@@ -1129,7 +1145,7 @@ msgstr "грешка при четене на „%s”: %s"
 msgid "cannot load %s in safe mode"
 msgstr "грешка при четене на „%s”: %s"
 
-#: ../IkiWiki/Setup.pm:46
+#: ../IkiWiki/Setup.pm:47
 #, fuzzy, perl-format
 msgid "failed to parse %s"
 msgstr "крешка при компилиране на файла %s"
@@ -1152,56 +1168,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "генериране на обвивки..."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "„%s” не е изпълним файл"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "не може да бъде създадена обвивка, която използва файл за настройки"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "не е указан файл на обвивката"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "крешка при компилиране на файла %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "успешно генериране на %s"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "формат: ikiwiki [опции] източник местоназначение"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "генериране на обвивки..."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "обновяване на уики..."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "осъвременяване на уики..."
 
@@ -1209,41 +1225,51 @@ msgstr "осъвременяване на уики..."
 msgid "Discussion"
 msgstr "Дискусия"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "При използване на пареметъра „--cgi” е необходимо да се укаже и "
 "местоположението на уикито чрез параметъра „--url”"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
 
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:1536
+#, fuzzy, perl-format
+msgid "bad file name %s"
+msgstr "пропускане на невалидното име на файл „%s”"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "шаблонът „%s” не е намерен"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2061
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "непознат вид сортиране „%s”"
 
-#: ../IkiWiki.pm:2082
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "непознат вид сортиране „%s”"
 
-#: ../IkiWiki.pm:2218
+#: ../IkiWiki.pm:2352
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "грешка при четене на „%s”: %s"
@@ -1268,6 +1294,10 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "шаблонът „%s” не е намерен"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Първо трябва да влезете."
 
index c3fb1f83252803c6ce0991db6ecb8a097d547743..e4fbe0d114113d07cf034e3e07fd7aca15738550 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-18 14:18-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2009-09-11 20:23+0200\n"
 "Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
 "Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -52,7 +52,7 @@ msgstr "Nastavení uloženo."
 msgid "You are banned."
 msgstr "Jste vyhoštěni."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Chyba"
 
@@ -64,76 +64,81 @@ msgstr "Agregace spuštěna přes web."
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Není třeba nic dělat, všechny kanály jsou aktuální!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "chybí parametr %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "nový kanál"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "příspěvky"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "nový"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "expiruji %s (stará %s dnů)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "expiruji %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "poslední kontrola %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "kontroluji kanál %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "nemohu najít kanál na %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "kanál nebyl nalezen"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(neplatné UTF-8 bylo z kanálu odstraněno)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(entity byly v kanálu zakódovány)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "kanál shodil XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "vytvářím novou stránku %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "nepodařilo se zpracovat:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "mažu bucket..."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "hotovo"
 
@@ -163,19 +168,19 @@ msgstr "stránka nazvaná %s již existuje"
 msgid "prohibited by allowed_attachments"
 msgstr "zakázáno proměnnou allowed_attachments"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "chybné jméno souboru s přílohou"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "příloha nahrána"
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "automatické vytváření indexu"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -192,78 +197,83 @@ msgstr "%s z %s"
 msgid "There are no broken links!"
 msgstr "Žádné porušené odkazy!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "komentář k %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 #, fuzzy
 msgid "moderation"
 msgstr "Schvalování komentářů"
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "nepodporovaný formát stránky %s"
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "komentář musí mít obsah"
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anonym"
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+#, fuzzy
+msgid "Comment Moderation"
+msgstr "Schvalování komentářů"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "chybný název stránky"
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "komentář k %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr "stránka „%s“ neexistuje, takže nemůžete komentovat"
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "komentáře na stránce „%s“ jsou uzamčeny"
 
-#: ../IkiWiki/Plugin/comments.pm:490
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "komentář uložen pro schválení"
 
-#: ../IkiWiki/Plugin/comments.pm:492
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Váš komentář bude zobrazen po schválení moderátorem"
 
-#: ../IkiWiki/Plugin/comments.pm:505
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Přidán komentář"
 
-#: ../IkiWiki/Plugin/comments.pm:509
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Přidán komentář: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:551 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "nejste přihlášeni jako správce"
 
-#: ../IkiWiki/Plugin/comments.pm:602
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Schvalování komentářů"
 
-#: ../IkiWiki/Plugin/comments.pm:640
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "schvalování komentářů"
 
-#: ../IkiWiki/Plugin/comments.pm:789
+#: ../IkiWiki/Plugin/comments.pm:822
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -273,23 +283,23 @@ msgstr[1] "Komentáře"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:799
+#: ../IkiWiki/Plugin/comments.pm:832
 #, fuzzy
 msgid "Comment"
 msgstr "Komentáře"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "parametr %s je povinný"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "na této stránce nebyl zkopírován žádný text"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "na této stránce nebyl zkopírován žádný text s id %s"
@@ -309,32 +319,26 @@ msgstr "%s není editovatelná stránka"
 msgid "creating %s"
 msgstr "vytvářím %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:331
-#: ../IkiWiki/Plugin/editpage.pm:341 ../IkiWiki/Plugin/editpage.pm:385
-#: ../IkiWiki/Plugin/editpage.pm:424
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "upravuji %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "nebyl zadán parametr template"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "nebyl zadán parametr match"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "edittemplate %s byla zaregistrována pro %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "nepodařilo se zpracovat:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "musíte zadat formát a text"
@@ -343,11 +347,11 @@ msgstr "musíte zadat formát a text"
 msgid "fortune failed"
 msgstr "fortune selhal"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "chybějící stránka"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "Stránka %s neexistuje."
@@ -361,23 +365,32 @@ msgstr "není stránkou"
 msgid "%s is an attachment, not a page."
 msgstr "%s není ani příloha, ani stránka."
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "nejste oprávněni měnit %s"
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "nemůžete pracovat se souborem s přístupovým oprávněními %s"
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "nejste oprávněni měnit přístupová oprávnění souborů"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "nejste oprávněni měnit %s"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "nelze zkompilovat %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "%s musíte zadat při každém použití modulu %s"
@@ -386,26 +399,26 @@ msgstr "%s musíte zadat při každém použití modulu %s"
 msgid "failed to run graphviz"
 msgstr "nepodařilo se spustit graphviz"
 
-#: ../IkiWiki/Plugin/graphviz.pm:90
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr "program není platným programem graphviz"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "tohighlight obsahuje neznámý typ souboru „%s“"
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Zdrojový kód: %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr "varování: perlový modul highlight není dostupný; pokračuji bez něj"
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 msgid "htmltidy failed to parse this html"
 msgstr "htmltidy se nepodařilo zpracovat toto html"
 
@@ -423,12 +436,12 @@ msgstr "nelze číst %s: %s"
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr "chybné rozměry „%s“ (formát má být ŠxV)"
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, perl-format
 msgid "failed to resize: %s"
 msgstr "nelze změnit velikost: %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, perl-format
 msgid "failed to determine size of image %s"
 msgstr "nelze určit velikost obrázku %s"
@@ -454,12 +467,12 @@ msgstr "parametry %s a %s nelze použít zároveň"
 msgid "Add a new post titled:"
 msgstr "Přidat nový příspěvek nazvaný:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "šablona %s nebyla nalezena"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "nepodařilo se zpracovat:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client nebyl nalezen, nepinkám"
 
@@ -487,19 +500,19 @@ msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
 "selhalo nahrání perlového modulu Markdown.pm (%s) nebo /usr/bin/markdown (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "styl nebyl nalezen"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "stránka, na kterou vede přesměrování, nebyla nalezena"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "cykly nejsou v přesměrování povoleny"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "vyžaduje parametry „from“ a „to“"
@@ -521,7 +534,7 @@ msgstr "schvalování komentářů"
 msgid "more"
 msgstr "více"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "nelze zkompilovat %s"
@@ -574,21 +587,21 @@ msgstr "resetování hesla bylo zamítnuto"
 msgid "Ping received."
 msgstr "Obdrženo pinknutí."
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "vyžaduje parametry „from“ a „to“"
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "Pinknu %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "Ignoruji direktivu ping pro wiki %s (toto je wiki %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "LWP nebyl nalezen, nepinkám"
 
@@ -596,40 +609,30 @@ msgstr "LWP nebyl nalezen, nepinkám"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr "varování: rozpoznána stará verze po4a, doporučen přechod na 0.35."
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s není platným kódem jazyka"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 "%s není platnou hodnotou parametru po_link_to, používám po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 "po_link_to=negotiated vyžaduje zapnuté usedirs, používám po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr "znovusestavuji všechny stránky, aby se opravily meta nadpisy"
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, perl-format
-msgid "building %s"
-msgstr "sestavuji %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr "aktualizovány PO soubory"
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
@@ -637,7 +640,7 @@ msgstr ""
 "Nemohu odstranit překlad. Nicméně pokud bude odstraněna hlavní stránka, "
 "budou odstraněny také její překlady."
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
@@ -645,55 +648,60 @@ msgstr ""
 "Nemohu přejmenovat překlad. Nicméně pokud bude přejmenována hlavní stránka, "
 "budou přejmenovány také její překlady."
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "POT soubor (%s) neexistuje"
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "nepodařilo se zkopírovat PO soubor na %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr "nepodařilo se aktualizovat %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "nepodařilo se zkopírovat POT soubor na %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr "N/A"
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr "nepodařilo se přeložit %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr "odstraněny zastaralé PO soubory"
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr "nepodařilo se zapsat %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr "překlad se nezdařil"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 "neplatná gettext data, pro pokračování v úpravách se vraťte na předchozí "
 "stránku"
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "hlasovat"
@@ -791,6 +799,16 @@ msgstr "neplatná procentuální hodnota %s"
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr "potřebuji buď parametr `percent`, nebo `totalpages` a `donepages`"
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "potvrďte odstranění %s"
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr "(Diff oříznut)"
@@ -810,16 +828,16 @@ msgstr "%s není ve zdrojovém adresáři a proto nelze smazat"
 msgid "%s is not a file"
 msgstr "%s není souborem"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "potvrďte odstranění %s"
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Vyberte prosím přílohy, které se mají odstranit."
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "odstraněno"
 
@@ -847,29 +865,29 @@ msgstr "%s již existuje"
 msgid "%s already exists on disk"
 msgstr "%s již na disku existuje"
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr "přejmenování %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "Také přejmenovat podstránky a přílohy"
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Najednou lze přejmenovat pouze jednu přílohu."
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Vyberte přílohu, kterou chcete přejmenovat."
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "přejmenování %s na %s"
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "aktualizace pro přejmenování %s na %s"
@@ -884,12 +902,12 @@ msgstr "nepodařilo se přečíst %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
-#, perl-format
-msgid "need Digest::SHA1 to index %s"
+#: ../IkiWiki/Plugin/search.pm:195
+#, fuzzy, perl-format
+msgid "need Digest::SHA to index %s"
 msgstr "pro indexování %s je potřeba Digest::SHA1"
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "hledání"
 
@@ -910,7 +928,12 @@ msgstr "chybí parametr jméno nebo url"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "zkratka %s odkazuje na <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, fuzzy, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "Modul shortcut nebude pracovat bez %s"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "nepodařilo se rozpoznat žádné smajlíky"
 
@@ -976,16 +999,11 @@ msgstr "vytvářím novou stránku %s"
 msgid "missing id parameter"
 msgstr "chybí parametr id"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, perl-format
-msgid "%s not found"
-msgstr "%s nenalezen"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "chybí TeXový kód"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "z kódu se nepodařilo vygenerovat obrázek"
 
@@ -1004,20 +1022,20 @@ msgstr "moduly"
 msgid "enable %s?"
 msgstr "povolit %s?"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "konfigurační soubor této wiki je neznámý"
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "hlavní"
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr "Níže uvedené změny v konfiguraci se projeví až po znovusestavení wiki."
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1025,7 +1043,7 @@ msgstr ""
 "Aby se níže uvedené změny v konfiguraci zcela projevily, budete možná muset "
 "znovusestavit wiki."
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1037,11 +1055,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr "nemohu určit identitu nedůvěryhodného uživatele %s"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "chybné jméno souboru %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1056,47 +1069,52 @@ msgstr ""
 "v cestě ke zdrojovému adresáři (%s) byl nalezen symbolický odkaz -- chcete-"
 "li to povolit, nastavte proměnnou allow_symlinks_before_srcdir"
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "přeskakuji chybné jméno souboru %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s má několik možných zdrojových stránek"
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "odstraňuji starou stránku %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr "sestavuji %s, která odkazuje na %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "odstraňuji %s, již není sestavována pomocí %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr "sestavuji %s, která závisí na %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "sestavuji %s, aby se aktualizovaly zpětné odkazy"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr "sestavuji %s"
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: nelze sestavit %s"
@@ -1113,7 +1131,7 @@ msgstr "nemohu číst %s: %s"
 msgid "cannot load %s in safe mode"
 msgstr "nemohu číst %s: %s"
 
-#: ../IkiWiki/Setup.pm:46
+#: ../IkiWiki/Setup.pm:47
 #, fuzzy, perl-format
 msgid "failed to parse %s"
 msgstr "nepodařilo se aktualizovat %s"
@@ -1136,57 +1154,57 @@ msgstr "nepodařilo se nastavit repositář pomocí ikiwiki-makerepo"
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr "** Deaktivuji modul %s, protože selhává s touto hláškou:"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "generuji obaly..."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s není spustitelný soubor"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "nemohu vytvořit obal, který využívá soubor setup"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "jméno souboru s obalem nebylo zadáno"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "nelze zkompilovat %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s byl úspěšně vytvořen"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "použití: ikiwiki [volby] zdroj cíl"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup konfigurační.soubor"
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "použití: --set proměnná=hodnota"
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 #, fuzzy
 msgid "usage: --set-yaml var=value"
 msgstr "použití: --set proměnná=hodnota"
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "generuji obaly..."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "znovusestavuji wiki..."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "obnovuji wiki..."
 
@@ -1194,39 +1212,49 @@ msgstr "obnovuji wiki..."
 msgid "Discussion"
 msgstr "Diskuse"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Při použití --cgi musíte pomocí --url zadat url k wiki"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr "nelze použít několik rcs modulů"
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "nepodařilo se nahrát externí modul vyžadovaný modulem %s: %s"
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "Byla rozpoznána smyčka na %s v hloubce %i"
 
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "chybné jméno souboru %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "šablona %s nebyla nalezena"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "ano"
 
-#: ../IkiWiki.pm:2061
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "neznámý typ řazení %s"
 
-#: ../IkiWiki.pm:2082
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "neznámý typ řazení %s"
 
-#: ../IkiWiki.pm:2218
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "nelze vybrat stránky: %s"
@@ -1251,6 +1279,12 @@ msgstr "Který uživatel (wiki účet nebo openid) bude správce?"
 msgid "What is the domain name of the web server?"
 msgstr "Jaké je doménové jméno webového serveru?"
 
+#~ msgid "%s not found"
+#~ msgstr "%s nenalezen"
+
+#~ msgid "rebuilding all pages to fix meta titles"
+#~ msgstr "znovusestavuji všechny stránky, aby se opravily meta nadpisy"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Nejprve se musíte přihlásit."
 
index fb0ec754d377526209e6558df07830d2016b9ec0..49dd1de7e15872741ab7f738498df91486f70bc7 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -1,17 +1,17 @@
 # Danish translations for ikiwiki package
-# Copyright (C) 2008 Jonas Smedegaard <dr@jones.dk>
+# Copyright (C) 2008, 2009, 2010, Jonas Smedegaard <dr@jones.dk>
 # This file is distributed under the same license as the ikiwiki package.
-# Jonas Smedegaard <dr@jones.dk>, 2008.
 #
+# Jonas Smedegaard <dr@jones.dk>, 2008-2010.
 msgid ""
 msgstr ""
-"Project-Id-Version: ikiwiki 3.14159\n"
+"Project-Id-Version: ikiwiki 3.20100518\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-18 14:18-0400\n"
-"PO-Revision-Date: 2009-07-23 01:07+0200\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
+"PO-Revision-Date: 2010-08-27 12:45+0200\n"
 "Last-Translator: Jonas Smedegaard <dr@jones.dk>\n"
 "Language-Team: None\n"
-"Language: \n"
+"Language: da\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -56,7 +56,7 @@ msgstr "Indstillinger gemt"
 msgid "You are banned."
 msgstr "Du er banlyst."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Fejl"
 
@@ -68,76 +68,80 @@ msgstr "Indsamling udløst via web."
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Intet at gøre lige nu, alle fødninger er tidssvarende!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "mangler parametren %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "ny fødning"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "indlæg"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "nyt"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "udløber %s (%s dage gammel)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "udløber %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "senest undersøgt %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "undersøger fødning %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "kunne ikke finde fødning ved %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "fødning ikke fundet"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(defekt UTF-8 fjernet fra fødning)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(fødningselementer omgået (escaped))"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "fødning fik XML::Feed til at bryde sammen!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "opretter ny side %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+msgid "failed to process template:"
+msgstr "beandling af skabelon mislykkedes:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "sletter bundt.."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "færdig"
 
@@ -147,17 +151,14 @@ msgid "Must specify %s"
 msgstr "Skal angive %s"
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:140
-#, fuzzy
 msgid "Failed to create S3 bucket: "
-msgstr "Oprettelse af bundt i S3 mislykkedes: "
+msgstr "Oprettelse af S3 bundt mislykkedes: "
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:225
-#, fuzzy
 msgid "Failed to save file to S3: "
-msgstr "Arkivering af fil i S3 mislykkedes: "
+msgstr "Arkivering af fil til S3 mislykkedes: "
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:247
-#, fuzzy
 msgid "Failed to delete file from S3: "
 msgstr "Sletning af fil fra S3 mislykkedes: "
 
@@ -170,19 +171,19 @@ msgstr "der er allerede en side ved navn %s"
 msgid "prohibited by allowed_attachments"
 msgstr "forhindret af allowed_attachments"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "dårligt vedhæftningsfilnavn"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "vedhæftningsoplægning"
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "automatisk indeks-dannelse"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -199,104 +200,107 @@ msgstr "%s fra %s"
 msgid "There are no broken links!"
 msgstr "Ingen henvisninger der ikker fungerer!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
-#, fuzzy, perl-format
+#: ../IkiWiki/Plugin/comments.pm:113
+#, perl-format
 msgid "this comment needs %s"
-msgstr "kommenterer på %s"
+msgstr "denne kommentar kræver %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
-#, fuzzy
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
-msgstr "Kommentarmoderering"
+msgstr "moderering"
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "Ikke-understøttet sideformat %s"
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "kommentar skal have indhold"
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anonym"
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+#, fuzzy
+msgid "Comment Moderation"
+msgstr "Kommentarmoderering"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "dårligt sidenavn"
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "kommenterer på %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr "siden '%s' eksisterer ikke, så du kan ikke kommentere"
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "kommentarer på side '%s' er lukket"
 
-#: ../IkiWiki/Plugin/comments.pm:490
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "kommentar gemt for moderering"
 
-#: ../IkiWiki/Plugin/comments.pm:492
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Din kommentar vil blive tilføjet efter moderatorgenemsyn"
 
-#: ../IkiWiki/Plugin/comments.pm:505
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Tilføjede en kommentar"
 
-#: ../IkiWiki/Plugin/comments.pm:509
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Tilføjede en kommentar: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:551 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "du er ikke logget på som en administrator"
 
-#: ../IkiWiki/Plugin/comments.pm:602
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Kommentarmoderering"
 
-#: ../IkiWiki/Plugin/comments.pm:640
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "kommentarkoderering"
 
-#: ../IkiWiki/Plugin/comments.pm:789
-#, fuzzy, perl-format
+#: ../IkiWiki/Plugin/comments.pm:822
+#, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
-msgstr[0] "Kommentarer"
-msgstr[1] "Kommentarer"
+msgstr[0] "%i kommentar"
+msgstr[1] "%i kommentarer"
 
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:799
-#, fuzzy
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
-msgstr "Kommentarer"
+msgstr "Kommentér"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "parametren %s er krævet"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "ingen tekst blev kopieret i denne side"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "ingen tekst blev kopieret i denne side med id %s"
@@ -316,32 +320,26 @@ msgstr "%s er ikke en redigérbar side"
 msgid "creating %s"
 msgstr "opretter %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:331
-#: ../IkiWiki/Plugin/editpage.pm:341 ../IkiWiki/Plugin/editpage.pm:385
-#: ../IkiWiki/Plugin/editpage.pm:424
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "redigerer %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "skabelon %s ikke angivet"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "sammenligning ikke angivet"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "redigeringsskabelon %s registreret for %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "dannelsen mislykkedes:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "skal angive format og tekst"
@@ -350,42 +348,50 @@ msgstr "skal angive format og tekst"
 msgid "fortune failed"
 msgstr "spådom (fortune) fejlede"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "manglende side"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "Siden %s eksisterer ikke."
 
 #: ../IkiWiki/Plugin/getsource.pm:75
-#, fuzzy
 msgid "not a page"
-msgstr "kan ikke få sider til at passe sammen: %s"
+msgstr "ikke en side"
 
 #: ../IkiWiki/Plugin/getsource.pm:77
-#, fuzzy, perl-format
+#, perl-format
 msgid "%s is an attachment, not a page."
-msgstr "%s er ikke en redigérbar side"
+msgstr "%s er en vedhæftning, ikke en side."
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Du har ikke lov til at ændre %s"
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "du kan ikke påvirke en fil med modus %s"
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "du har ikke lov til at ændre modus for filer"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "Du har ikke lov til at ændre %s"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "kompilering af %s mislykkedes"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Skal angive %s når udvidelsen %s bruges"
@@ -394,31 +400,30 @@ msgstr "Skal angive %s når udvidelsen %s bruges"
 msgid "failed to run graphviz"
 msgstr "graphviz-kørsel mislykkedes"
 
-#: ../IkiWiki/Plugin/graphviz.pm:90
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr "prog er ikke et gyldigt graphviz-program"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "tohighlight indeholder ukendt filtype '%s'"
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Kildekode: %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 "advarsel: highlight perl modul ikke tilgængelig: falder tilbage til simpel "
 "gennemkørsel"
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
-#, fuzzy
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 msgid "htmltidy failed to parse this html"
-msgstr "afkodning af smileys mislykkedes"
+msgstr "htmltidy kunne ikke afkode dette html"
 
 #: ../IkiWiki/Plugin/img.pm:69
 msgid "Image::Magick is not installed"
@@ -434,12 +439,12 @@ msgstr "læsning af %s mislykkedes: %s"
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr "forkert størrelsesformat \"%s\" (burde være WxH)"
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, perl-format
 msgid "failed to resize: %s"
 msgstr "Ændring af størrelse mislykkedes: %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, perl-format
 msgid "failed to determine size of image %s"
 msgstr "Vurdering af billedstørrelse mislykkedes: %s"
@@ -459,18 +464,18 @@ msgstr "mangler pages-parametren"
 #: ../IkiWiki/Plugin/inline.pm:192
 #, perl-format
 msgid "the %s and %s parameters cannot be used together"
-msgstr ""
+msgstr "parametrene %s og %s kan ikke anvendes sammen"
 
 #: ../IkiWiki/Plugin/inline.pm:313
 msgid "Add a new post titled:"
 msgstr "Tilføj nyt indlæg med følgende titel:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "skabelon %s ikke fundet"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "beandling af skabelon mislykkedes:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client ikke fundet, pinger ikke"
 
@@ -481,7 +486,7 @@ msgstr "dot-kørsel mislykkedes"
 
 #: ../IkiWiki/Plugin/linkmap.pm:85
 msgid "linkmap"
-msgstr ""
+msgstr "henvisningskort"
 
 #: ../IkiWiki/Plugin/lockedit.pm:49
 #, perl-format
@@ -500,22 +505,21 @@ msgstr ""
 "Indlæsning af perl-modulet Markdown.pm (%s) eller /usr/bin/markdown (%s) "
 "mislykkedes"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "stilsnit (stylesheet) ikke fundet"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "henvisningsside ikke fundet"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "ring af henvisninger er ikke tilladt"
 
-#: ../IkiWiki/Plugin/meta.pm:387
-#, fuzzy
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
-msgstr "kræver 'from'- og 'to'-parametre"
+msgstr "sort=meta kræver en parameter"
 
 #: ../IkiWiki/Plugin/mirrorlist.pm:44
 msgid "Mirrors"
@@ -526,18 +530,17 @@ msgid "Mirror"
 msgstr "Spejl"
 
 #: ../IkiWiki/Plugin/moderatedcomments.pm:57
-#, fuzzy
 msgid "comment needs moderation"
-msgstr "kommentarkoderering"
+msgstr "kommentar kræver moderering"
 
 #: ../IkiWiki/Plugin/more.pm:8
 msgid "more"
 msgstr "mere"
 
-#: ../IkiWiki/Plugin/openid.pm:58
-#, fuzzy, perl-format
+#: ../IkiWiki/Plugin/openid.pm:70
+#, perl-format
 msgid "failed to load openid module: "
-msgstr "kompilering af %s mislykkedes"
+msgstr "indlæsning af openid-modul mislykkedes: "
 
 #: ../IkiWiki/Plugin/orphans.pm:56
 msgid "All pages have other pages linking to them."
@@ -549,11 +552,11 @@ msgstr "dårlig eller manglende skabelon"
 
 #: ../IkiWiki/Plugin/passwordauth.pm:231
 msgid "Your user page: "
-msgstr ""
+msgstr "Din brugerside: "
 
 #: ../IkiWiki/Plugin/passwordauth.pm:238
 msgid "Create your user page"
-msgstr ""
+msgstr "Opret din brugerside"
 
 #: ../IkiWiki/Plugin/passwordauth.pm:268
 msgid "Account creation successful. Now you can Login."
@@ -588,34 +591,34 @@ msgstr "adgangskodenulstilling afvist"
 msgid "Ping received."
 msgstr "Ping modtaget."
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "kræver 'from'- og 'to'-parametre"
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "vil pinge %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "ignorerer ping-direktiv for wiki %s (denne wiki er %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "LWP ikke fundet, pinger ikke"
 
 #: ../IkiWiki/Plugin/po.pm:15
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
-msgstr ""
+msgstr "advarsel: Gammel po4a detekteret. Anbefaler opgradering til 0.35."
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s er ikke en gyldig sprogkode"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -623,7 +626,7 @@ msgstr ""
 "%s er ikke en gyldig værdi for po_link_to, falder tilbage til "
 "po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
@@ -631,21 +634,11 @@ msgstr ""
 "po_link_to=negotiated kræver at usedirs er aktiveret, falder tilbage til "
 "po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr "gendanner alle sider for at korrigere meta titler"
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, perl-format
-msgid "building %s"
-msgstr "danner %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr "opdaterer PO-filer"
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
@@ -653,7 +646,7 @@ msgstr ""
 "Kan ikke fjerne en oversættelse. Fjern i stedet hovedsiden, så fjernes dens "
 "oversættelser også."
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
@@ -661,54 +654,59 @@ msgstr ""
 "Kan ikke omdøbe en oversættelse. Omdøb i stedet hovedsiden, så omdøbes dens "
 "oversættelser også."
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "POT-filen %s eksisterer ikke"
 
-#: ../IkiWiki/Plugin/po.pm:890
-#, fuzzy, perl-format
+#: ../IkiWiki/Plugin/po.pm:949
+#, perl-format
 msgid "failed to copy underlay PO file to %s"
-msgstr "kopiering af POT-filen til %s mislykkedes"
+msgstr "kopiering af underlags-PO-fil til %s mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr "opdatering af %s mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "kopiering af POT-filen til %s mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr "N/A"
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr "oversættelse af %s mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr "forældede PO filer fjernet"
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr "skrivning af %s mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr "oversættelse mislykkedes"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 "forkert gettext-data, gå tilbage til forrige side og fortsæt redigering"
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "stem"
@@ -806,6 +804,16 @@ msgstr "ugyldig procentværdi %s"
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr "Kræver enten parametre `percent` eller `totalpages og `donepages`"
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "bekræft at %s bliver fjernet"
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr "(Diff trunkeret)"
@@ -825,16 +833,16 @@ msgstr "%s er ikke i srcdir, så kan ikke blive slettet"
 msgid "%s is not a file"
 msgstr "%s er ikke en fil"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "bekræft at %s bliver fjernet"
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Vælg vedhæftning der skal slettes."
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "fjernet"
 
@@ -862,49 +870,49 @@ msgstr "%s eksisterer allerede"
 msgid "%s already exists on disk"
 msgstr "%s eksisterer allerede på disken"
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr "omdøb %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "Omdøb også UnderSider og vedhæftninger"
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Kun en vedhæftning kan blive omdøbt ad gangen."
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Vælg vedhæftningen som skal omdøbes."
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "omdøb %s til %s"
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "opdatering til omdøbning af %s til %s"
 
 #: ../IkiWiki/Plugin/rsync.pm:37
-#, fuzzy, perl-format
+#, perl-format
 msgid "failed to execute rsync_command: %s"
-msgstr "læsning af %s mislykkedes"
+msgstr "afvikling af rsync_command mislykkedes: %s"
 
 #: ../IkiWiki/Plugin/rsync.pm:40
 #, perl-format
 msgid "rsync_command exited %d"
-msgstr ""
+msgstr "rsync_command sluttede (exit code) %d"
 
-#: ../IkiWiki/Plugin/search.pm:194
-#, perl-format
-msgid "need Digest::SHA1 to index %s"
+#: ../IkiWiki/Plugin/search.pm:195
+#, fuzzy, perl-format
+msgid "need Digest::SHA to index %s"
 msgstr "behøver Digest::SHA1 til indeks %s"
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "søg"
 
@@ -925,7 +933,12 @@ msgstr "manglende navn eller url parameter"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "genvej %s viser til <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, fuzzy, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "genvejsudvidelsen vil ikke fungere uden %s"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "afkodning af smileys mislykkedes"
 
@@ -983,58 +996,53 @@ msgid "parse fail at line %d: %s"
 msgstr "afkodningsfejl på linje %d: %s"
 
 #: ../IkiWiki/Plugin/tag.pm:83
-#, fuzzy, perl-format
+#, perl-format
 msgid "creating tag page %s"
-msgstr "opretter ny side %s"
+msgstr "opretter mærkatside %s"
 
 #: ../IkiWiki/Plugin/template.pm:33
 msgid "missing id parameter"
 msgstr "manglende id-parameter"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "fødning ikke fundet"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "manglende tex-kode"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "billedopbygning fra kode mislykkedes"
 
 #: ../IkiWiki/Plugin/websetup.pm:105
-#, fuzzy, perl-format
+#, perl-format
 msgid "%s plugin:"
-msgstr "udvidelse"
+msgstr "%s udvidelse:"
 
 #: ../IkiWiki/Plugin/websetup.pm:121
-#, fuzzy, perl-format
+#, perl-format
 msgid "%s plugins"
-msgstr "udvidelser"
+msgstr "%s udvidelser"
 
 #: ../IkiWiki/Plugin/websetup.pm:135
 #, perl-format
 msgid "enable %s?"
 msgstr "aktivér %s?"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "opsætningsfilen for denne wiki er ukendt"
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "primær"
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 "Opsætningsændringerne vist nedenfor kræver wiki-genopbygning for at træde i "
 "kraft."
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1042,7 +1050,7 @@ msgstr ""
 "For at opsætningsændringerne vist nedenfor træder fuldt ud i kraft, skal du "
 "muligvis genopbygge wikien."
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr "Fejl: %s returnerede ikke-nul (%s). Dropper opsætningsændringer."
@@ -1052,11 +1060,6 @@ msgstr "Fejl: %s returnerede ikke-nul (%s). Dropper opsætningsændringer."
 msgid "cannot determine id of untrusted committer %s"
 msgstr "kan ikke afgøre id for ikke-tillidsfulde skribent %s"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "dårligt filnavn %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1071,47 +1074,52 @@ msgstr ""
 "symbolsk lænke fundet i srcdir-sti (%s) -- sæt allow_symlinks_before_srcdir "
 "for at tillade dette"
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "udelader forkert filnavn %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s har flere mulige kildesider"
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
-msgstr ""
+msgstr "anmoder %s om oprettelses- og redigeringstider for fil.."
 
-#: ../IkiWiki/Render.pm:431
-#, fuzzy, perl-format
+#: ../IkiWiki/Render.pm:446
+#, perl-format
 msgid "removing obsolete %s"
-msgstr "fjerner gammel side %s"
+msgstr "fjerner forældet %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr "danner %s, som henviser til %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "fjerner %s, ikke længere dannet af %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr "danner %s, som afhænger af %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "danner %s, for at opdatere dens krydshenvisninger (backlinks)"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr "danner %s"
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: kan ikke danne %s"
@@ -1124,14 +1132,14 @@ msgid "cannot read %s: %s"
 msgstr "kan ikke læse %s: %s"
 
 #: ../IkiWiki/Setup.pm:34
-#, fuzzy, perl-format
+#, perl-format
 msgid "cannot load %s in safe mode"
-msgstr "kan ikke læse %s: %s"
+msgstr "kan ikke læse %s i sikker tilstand"
 
-#: ../IkiWiki/Setup.pm:46
-#, fuzzy, perl-format
+#: ../IkiWiki/Setup.pm:47
+#, perl-format
 msgid "failed to parse %s"
-msgstr "opdatering af %s mislykkedes"
+msgstr "afkodning af %s mislykkedes"
 
 #: ../IkiWiki/Setup/Automator.pm:34
 msgid "you must enter a wikiname (that contains alphanumerics)"
@@ -1151,57 +1159,56 @@ msgstr "opsætning af depotet med ikiwiki-makerepo mislykkedes"
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr "** Deaktiverer udvidelse %s, da den fejler med denne besked:"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "bygger wrappers.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s ser ikke ud til at kunne afvikles"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "kan ikke oprette en wrapper som bruger en opsætningsfil"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "wrapper-navn ikke angivet"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "kompilering af %s mislykkedes"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "Korrekt bygget %s"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "brug: ikiwiki [valg] kilde mål"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup opsætningsfil"
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "brug: --set var=værdi"
 
-#: ../ikiwiki.in:103
-#, fuzzy
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
-msgstr "brug: --set var=værdi"
-
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "bygger wrappers.."
+msgstr "brug: --set-yaml var=værdi"
 
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "genopbygger wiki..."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "genopfrisker wiki..."
 
@@ -1209,40 +1216,50 @@ msgstr "genopfrisker wiki..."
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Skal angive url til wiki med --url når der bruges --cgi"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr "kan ikke bruge flere samtidige RCS-udvidelser"
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 "indlæsning af ekstern udvidelse krævet af udvidelsen %s mislykkedes: %s"
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "forudberegningssløkke fundet på %s ved dybde %i"
 
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "dårligt filnavn %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "skabelon %s ikke fundet"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "ja"
 
-#: ../IkiWiki.pm:2061
-#, fuzzy, perl-format
+#: ../IkiWiki.pm:2195
+#, perl-format
 msgid "invalid sort type %s"
-msgstr "ukendt sorteringsform %s"
+msgstr "forkert sorteringstype %s"
 
-#: ../IkiWiki.pm:2082
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "ukendt sorteringsform %s"
 
-#: ../IkiWiki.pm:2218
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "kan ikke få sider til at passe sammen: %s"
@@ -1267,35 +1284,8 @@ msgstr "Hvilken bruger (wiki konto eller openid) skal være administrator?"
 msgid "What is the domain name of the web server?"
 msgstr "Hvad er webserverens domænenavn?"
 
-#~ msgid "You need to log in first."
-#~ msgstr "Du skal først logge på."
-
-#~ msgid "Log in with"
-#~ msgstr "Log på med"
-
-#~ msgid "Get an OpenID"
-#~ msgstr "Skaf en OpenID"
-
-#~ msgid "failed to process"
-#~ msgstr "dannelsen mislykkedes"
-
-#~ msgid "nonexistant template %s"
-#~ msgstr "ikke-eksisterende skabelon: %s"
-
-#~ msgid "getctime not implemented"
-#~ msgstr "getctime ikke implementeret"
-
-#~ msgid "Sort::Naturally needed for title_natural sort"
-#~ msgstr "Sort::Naturally krævet for title_natural sortering"
-
-#~ msgid "failed to read %s"
-#~ msgstr "læsning af %s mislykkedes"
-
-#~ msgid "Failed to parse url, cannot determine domain name"
-#~ msgstr "Tolkning af URL mislykkedes, kan ikke afgøre domænenavn"
-
-#~ msgid "code includes disallowed latex commands"
-#~ msgstr "kode indeholder ikke-tilladte latec-kommandoer"
+#~ msgid "%s not found"
+#~ msgstr "%s ikke fundet"
 
-#~ msgid "discussion"
-#~ msgstr "diskussion"
+#~ msgid "rebuilding all pages to fix meta titles"
+#~ msgstr "gendanner alle sider for at korrigere meta titler"
index 1cfc57886dc253e59182df93d648c341d0de387f..4bc3fe379a18a05f067916975723aa45c8da620c 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.14159\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-18 14:18-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2010-03-14 16:09+0530\n"
 "Last-Translator: Sebastian Kuhnert <mail@sebastian-kuhnert.de>\n"
 "Language-Team: German <debian-l10n-german@lists.debian.org>\n"
@@ -53,7 +53,7 @@ msgstr "Einstellungen gespeichert."
 msgid "You are banned."
 msgstr "Sie sind ausgeschlossen worden."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Fehler"
 
@@ -65,76 +65,81 @@ msgstr "Das Web löst die Zusammenstellung aus"
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Es gibt nichts zu tun, alle Vorlagen (feeds) sind aktuell!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "Parameter %s fehlt"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "neue Vorlage (feed)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "Beiträge"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "neu"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s läuft aus (%s Tage alt)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "%s läuft aus"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "zuletzt geprüft %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "überprüfe Vorlage (feed) %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "konnte Vorlage (feed) unter %s nicht finden"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "Vorlage (feed) nicht gefunden"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(ungültiges UTF-8 wurde aus der Vorlage (feed) entfernt)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(Einträge in der Vorlage (feed) wurden maskiert)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "Vorlage (feed) führte zum Absturz von XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "erstelle neue Seite %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "Fehler beim Ablauf:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "lösche Behälter (bucket)..."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "fertig"
 
@@ -165,19 +170,19 @@ msgstr "eine Seite mit dem Namen %s existiert bereits"
 msgid "prohibited by allowed_attachments"
 msgstr "durch allowed_attachements verboten"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "fehlerhafter Dateiname für Anhang"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "Anhang hochladen"
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "automatische Index-Erstellung"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -194,79 +199,84 @@ msgstr "%s von %s"
 msgid "There are no broken links!"
 msgstr "Es gibt keine ungültigen Verweise!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "kommentiere %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 #, fuzzy
 msgid "moderation"
 msgstr "Kommentar-Moderation"
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "nicht unterstütztes Seitenformat %s"
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "ein Kommentar sollte Inhalt haben"
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anonym"
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+#, fuzzy
+msgid "Comment Moderation"
+msgstr "Kommentar-Moderation"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "fehlerhafter Seitenname"
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "kommentiere %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 "Seite %s existiert nicht, Sie können sie deshalb auch nicht kommentieren"
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "Kommentare zur Seite %s sind gesperrt"
 
-#: ../IkiWiki/Plugin/comments.pm:490
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "Der Kommentar wurde zur Moderation gespeichert"
 
-#: ../IkiWiki/Plugin/comments.pm:492
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Ihr Kommentar wird nach Moderation verschickt"
 
-#: ../IkiWiki/Plugin/comments.pm:505
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Kommentar hinzugefügt"
 
-#: ../IkiWiki/Plugin/comments.pm:509
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Kommentar hinzugefügt: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:551 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "Sie sind nicht als Administrator angemeldet"
 
-#: ../IkiWiki/Plugin/comments.pm:602
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Kommentar-Moderation"
 
-#: ../IkiWiki/Plugin/comments.pm:640
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "Kommentar-Moderation"
 
-#: ../IkiWiki/Plugin/comments.pm:789
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -276,22 +286,22 @@ msgstr[1] "%i Kommentare"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:799
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr "Kommentieren"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "der Parameter %s wird benötigt"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "es wurde kein Text in diese Seite kopiert"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "es wurde kein Text in diese Seite mit der id %s kopiert"
@@ -311,32 +321,26 @@ msgstr "Seite %s kann nicht bearbeitet werden"
 msgid "creating %s"
 msgstr "erstelle %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:331
-#: ../IkiWiki/Plugin/editpage.pm:341 ../IkiWiki/Plugin/editpage.pm:385
-#: ../IkiWiki/Plugin/editpage.pm:424
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "bearbeite %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "Vorlage nicht angegeben"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "Übereinstimmung nicht angegeben"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "edittemplate %s für %s registriert"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "Fehler beim Ablauf:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "Format und Text müssen spezifiziert werden"
@@ -345,11 +349,11 @@ msgstr "Format und Text müssen spezifiziert werden"
 msgid "fortune failed"
 msgstr "fortune fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "fehlende Seite"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "Die Seite %s existiert nicht."
@@ -363,23 +367,32 @@ msgstr "Keine Seite"
 msgid "%s is an attachment, not a page."
 msgstr "Seite %s ist ein Anhang und keine Seite."
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Sie dürfen %s nicht verändern"
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "Sie können eine Datei mit den Zugriffsrechten %s nicht nutzen"
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "Sie dürfen die Zugriffsrechte der Datei nicht ändern"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "Sie dürfen %s nicht verändern"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "erzeugen von %s fehlgeschlagen"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "%s muss angegeben werden, wenn die %s Erweiterung verwandt wird"
@@ -388,28 +401,28 @@ msgstr "%s muss angegeben werden, wenn die %s Erweiterung verwandt wird"
 msgid "failed to run graphviz"
 msgstr "graphviz konnte nicht ausgeführt werden"
 
-#: ../IkiWiki/Plugin/graphviz.pm:90
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr "prog ist kein gültiges graphviz-Programm"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "tohighlight enteilt unbekannten Dateityp '%s'"
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Quellcode: %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 "Warnung: das highlight Perlmodul ist nicht verfügbar; greife zurück auf pass "
 "through"
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 msgid "htmltidy failed to parse this html"
 msgstr "htmltidy konnte dieses HTML nicht auswerten"
 
@@ -427,12 +440,12 @@ msgstr "Lesen von %s fehlgeschlagen: %s"
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr "falsches Format in \"%s\" für size (sollte BxH sein)"
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, perl-format
 msgid "failed to resize: %s"
 msgstr "Größenänderung fehlgeschlagen: %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, perl-format
 msgid "failed to determine size of image %s"
 msgstr "Größe des Bildes %s konnte nicht festgestellt werden."
@@ -460,12 +473,12 @@ msgstr "die Parameter %s und %s können nicht zusammen benutzt werden"
 msgid "Add a new post titled:"
 msgstr "Füge einen neuen Beitrag hinzu. Titel:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "Vorlage %s nicht gefunden"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "Fehler beim Ablauf:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client nicht gefunden, führe Ping nicht aus"
 
@@ -496,19 +509,19 @@ msgstr ""
 "laden des Perlmoduls Markdown.pm (%s) oder /usr/bin/markdown (%s) "
 "fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "Stylesheet nicht gefunden"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "Umleitungsseite nicht gefunden"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "Zyklische Umleitungen sind nicht erlaubt"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "erfordert die Parameter 'from' und 'to'"
@@ -529,7 +542,7 @@ msgstr "Kommentar muss moderiert werden"
 msgid "more"
 msgstr "mehr"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "erzeugen von %s fehlgeschlagen"
@@ -584,21 +597,21 @@ msgstr "zurücksetzen des Passworts abgelehnt"
 msgid "Ping received."
 msgstr "Ping empfangen."
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "erfordert die Parameter 'from' und 'to'"
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "werde Ping an %s senden"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "Ignoriere die ping Anweisung für das Wiki %s (dieses Wiki ist %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "LWP nicht gefunden, führe Ping nicht aus"
 
@@ -606,12 +619,12 @@ msgstr "LWP nicht gefunden, führe Ping nicht aus"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr "Warnung: Altes po4a erkannt! Empfehle Aktualisierung auf 0.35"
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s ist keine gültige Sprachkodierung"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -619,7 +632,7 @@ msgstr ""
 "%s ist kein gültiger Wert für po_link_to, greife zurück auf "
 "po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
@@ -627,21 +640,11 @@ msgstr ""
 "po_link_to=negotiated benötigt usedirs eingeschaltet, greife zurück auf "
 "po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr "um die meta-titeln zu reparieren werden alle Seiten neu erstellt"
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, perl-format
-msgid "building %s"
-msgstr "erzeuge %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr "PO-Dateien aktualisiert"
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
@@ -649,7 +652,7 @@ msgstr ""
 "Übersetzung kann nicht entfernt werden. Wenn die Master Seite entfernt wird, "
 "werden auch ihre Übersetzungen entfernt."
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
@@ -657,55 +660,60 @@ msgstr ""
 "Eine Übersetzung kann nicht umbenannt werden. Wenn die Master Seite "
 "unbenannt wird, werden auch ihre Übersetzungen unbenannt."
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "POT-Datei (%s) existiert nicht"
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "konnte die PO-Datei nicht aus dem Underlay nach %s kopieren"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr "aktualisieren von %s fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "kopieren der POT-Datei nach %s fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr "N/A"
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr "übersetzen von %s fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr "überflüssige PO-Dateien wurden entfernt"
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr "schreiben von %s fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr "übersetzen fehlgeschlagen"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 "ungültige gettext Datei, gehe zurück zur vorherigen Seite um weiter zu "
 "arbeiten"
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "abstimmen"
@@ -805,6 +813,16 @@ msgstr ""
 "es werden entweder `percent` oder `totalpages` und `donepages` Parameter "
 "benötigt"
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "bestätigen Sie die Entfernung von %s"
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr "(Diff wurde gekürzt)"
@@ -824,16 +842,16 @@ msgstr "%s ist nicht im srcdir und kann deshalb nicht gelöscht werden"
 msgid "%s is not a file"
 msgstr "%s ist keine Datei"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "bestätigen Sie die Entfernung von %s"
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Bitte wählen Sie die zu entfernenden Anhänge aus."
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "entfernt"
 
@@ -861,29 +879,29 @@ msgstr "%s existiert bereits"
 msgid "%s already exists on disk"
 msgstr "%s existiert bereits auf der Festplatte"
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr "benenne %s um"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "Auch Unterseiten (SubPages) und Anhänge umbenennen"
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Es kann immer nur ein Anhang gleichzeitig umbenannt werden."
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Bitte wählen Sie den Anhang aus, der umbenannt werden soll."
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "benenne %s in %s um"
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "aktualisiert zum Umbenennen von %s nach %s"
@@ -898,12 +916,12 @@ msgstr "konnte das rsync_command nicht ausführen: %s"
 msgid "rsync_command exited %d"
 msgstr "rsync_command gibt Fehler %d zurück"
 
-#: ../IkiWiki/Plugin/search.pm:194
-#, perl-format
-msgid "need Digest::SHA1 to index %s"
+#: ../IkiWiki/Plugin/search.pm:195
+#, fuzzy, perl-format
+msgid "need Digest::SHA to index %s"
 msgstr "benötige Digest::SHA1 um einen Index von %s zu erstellen"
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "suchen"
 
@@ -924,7 +942,12 @@ msgstr "fehlender Name oder URL-Parameter"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "Tastenkürzel %s verweist nach <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, fuzzy, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "die shortcut Erweiterung wird ohne %s nicht funktionieren"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "Smileys konnten nicht ausgewertet werden"
 
@@ -990,16 +1013,11 @@ msgstr "erstelle neue Seite %s"
 msgid "missing id parameter"
 msgstr "fehlender Parameter id"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "Vorlage (feed) nicht gefunden"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "fehlender TeX-Code"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "konnte kein Bild aus dem Code erzeugen"
 
@@ -1018,22 +1036,22 @@ msgstr "%s-Erweiterungen"
 msgid "enable %s?"
 msgstr "%s aktivieren?"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "Die Einrichtungsdatei für dieses Wiki ist unbekannt"
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "Hauptseite"
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 "Die unten aufgeführten Konfigurationsänderungen erfordern ein Neubau des "
 "Wikis, um wirksam zu werden."
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1041,7 +1059,7 @@ msgstr ""
 "Damit die unten aufgeführten Konfigurationsänderungen insgesamt wirksam "
 "werden, kann es notwendig sein, das Wikis neu zu bauen."
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1054,11 +1072,6 @@ msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 "id des nicht vertrauenswürdigen Absenders %s konnte nicht feststellt werden"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "fehlerhafter Dateiname %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1073,47 +1086,52 @@ msgstr ""
 "symbolischer Verweis im srcdir Pfad (%s) gefunden -- setzen Sie "
 "allow_symlinks_before_srcdir, um dies zu erlauben"
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "überspringe fehlerhaften Dateinamen %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s hat mehrere mögliche Quellseiten"
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "entferne alte Seite %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr "erzeuge %s, die auf %s verweist"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "entferne %s, wird nicht länger von %s erzeugt"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr "erzeuge %s, die von %s abhängt"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "erzeuge %s, um dessen Rückverweise zu aktualisieren"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr "erzeuge %s"
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: kann %s nicht erzeugen"
@@ -1130,7 +1148,7 @@ msgstr "kann %s nicht lesen: %s"
 msgid "cannot load %s in safe mode"
 msgstr "kann %s nicht lesen: %s"
 
-#: ../IkiWiki/Setup.pm:46
+#: ../IkiWiki/Setup.pm:47
 #, fuzzy, perl-format
 msgid "failed to parse %s"
 msgstr "aktualisieren von %s fehlgeschlagen"
@@ -1156,57 +1174,57 @@ msgstr ""
 "** Erweiterung %s wurde ausgeschaltet, weil sie mit der folgenden Meldung "
 "fehlgeschlagen ist:"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "erzeuge Wrapper.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s scheint nicht ausführbar zu sein"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "Kann keinen Wrapper erzeugen, der eine Einrichtungsdatei verwendet"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "Dateiname des Wrappers nicht angegeben"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "erzeugen von %s fehlgeschlagen"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s wurde erfolgreich erstellt"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "Aufruf: ikiwiki [Optionen] Quelle Ziel"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup Konfigurationsdatei"
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "Aufruf: --set Variable=Wert"
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 #, fuzzy
 msgid "usage: --set-yaml var=value"
 msgstr "Aufruf: --set Variable=Wert"
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "erzeuge Wrapper.."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "erzeuge Wiki neu.."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "aktualisiere Wiki.."
 
@@ -1214,42 +1232,52 @@ msgstr "aktualisiere Wiki.."
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Es muss eine URL zum Wiki mit --url angegeben werden, wenn --cgi verwandt "
 "wird"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 "Es können nicht mehrere Versionskontrollsystem-Erweiterungen verwandt werden"
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "Laden der für %s benötigten externen Erweiterung fehlgeschlagen: %s"
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "Präprozessorschleife auf %s in Tiefe %i erkannt"
 
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "fehlerhafter Dateiname %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "Vorlage %s nicht gefunden"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "ja"
 
-#: ../IkiWiki.pm:2061
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "Unbekannter Sortierungstyp %s"
 
-#: ../IkiWiki.pm:2082
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "Unbekannter Sortierungstyp %s"
 
-#: ../IkiWiki.pm:2218
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "Kann die Seiten nicht zuordnen: %s"
@@ -1274,6 +1302,13 @@ msgstr "Wer (Wiki-Konto oder OpenID) soll Administrator sein?"
 msgid "What is the domain name of the web server?"
 msgstr "Wie lautet der Domainname des Webservers?"
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "Vorlage (feed) nicht gefunden"
+
+#~ msgid "rebuilding all pages to fix meta titles"
+#~ msgstr "um die meta-titeln zu reparieren werden alle Seiten neu erstellt"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Sie müssen sich zuerst anmelden."
 
index 34c70423872fb0ee2aba0d27241581c5c0658ce1..e5159d0c6aae13936c5b40d2162d17fcb2a9fd2b 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-18 14:18-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2009-06-14 12:32+0200\n"
 "Last-Translator: Victor Moral <victor@taquiones.net>\n"
 "Language-Team:  <en@li.org>\n"
@@ -57,7 +57,7 @@ msgstr "Las preferencias se han guardado."
 msgid "You are banned."
 msgstr "Ha sido expulsado."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Error"
 
@@ -70,76 +70,81 @@ msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 "¡ No hay nada que hacer, todas las fuentes de noticias están actualizadas !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "falta el parámetro %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "nueva entrada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "entradas"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "nuevo"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s caducada (%s días de antigüedad)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "%s caducada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "última comprobación el %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "comprobando fuente de datos %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "no puedo encontrar la fuente de datos en %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "fuente de datos no encontrada"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(una secuencia UTF-8 inválida ha sido eliminada de la fuente de datos)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(los caracteres especiales de la fuente de datos están exceptuados)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "¡ la fuente de datos ha provocado un error fatal en XML::Feed !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "creando nueva página %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "borrando el directorio.."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "completado"
 
@@ -172,19 +177,19 @@ msgstr "ya existe una página de nombre %s"
 msgid "prohibited by allowed_attachments"
 msgstr "prohibido por la claúsula allowed_attachments"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "nombre de archivo adjunto erróneo"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "enviado el adjunto"
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "creación de índice automática"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -201,78 +206,83 @@ msgstr "%s desde la página %s"
 msgid "There are no broken links!"
 msgstr "¡ No hay enlaces rotos !"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "creando comentarios en la página %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 #, fuzzy
 msgid "moderation"
 msgstr "Aprobación de comentarios"
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "formato de página %s no soportado"
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "Un comentario debe tener algún contenido"
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anónimo"
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+#, fuzzy
+msgid "Comment Moderation"
+msgstr "Aprobación de comentarios"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "nombre de página erróneo"
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "creando comentarios en la página %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr "la página '%s' no existe, así que no se puede comentar sobre ella"
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "los comentarios para la página '%s' están cerrados"
 
-#: ../IkiWiki/Plugin/comments.pm:490
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "comentario guardado a la espera de aprobación"
 
-#: ../IkiWiki/Plugin/comments.pm:492
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Su comentario será publicado después de que el moderador lo revise"
 
-#: ../IkiWiki/Plugin/comments.pm:505
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Añadir un comentario"
 
-#: ../IkiWiki/Plugin/comments.pm:509
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Comentario añadido: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:551 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "No está registrado como un administrador"
 
-#: ../IkiWiki/Plugin/comments.pm:602
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Aprobación de comentarios"
 
-#: ../IkiWiki/Plugin/comments.pm:640
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "aprobación de comentarios"
 
-#: ../IkiWiki/Plugin/comments.pm:789
+#: ../IkiWiki/Plugin/comments.pm:822
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -282,23 +292,23 @@ msgstr[1] "Comentarios"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:799
+#: ../IkiWiki/Plugin/comments.pm:832
 #, fuzzy
 msgid "Comment"
 msgstr "Comentarios"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "el parámetro %s es obligatorio"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "no se ha copiado ningún texto en esta página"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "no se ha copiado ningún texto con el identificador %s en esta pagina"
@@ -318,32 +328,26 @@ msgstr "la página %s no es modificable"
 msgid "creating %s"
 msgstr "creando página %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:331
-#: ../IkiWiki/Plugin/editpage.pm:341 ../IkiWiki/Plugin/editpage.pm:385
-#: ../IkiWiki/Plugin/editpage.pm:424
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "modificando página %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "falta indicar la plantilla (template)"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "falta indicar la coincidencia de páginas (match)"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "plantilla de edición %s registrada para %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "se deben especificar tanto el formato como el texto"
@@ -352,11 +356,11 @@ msgstr "se deben especificar tanto el formato como el texto"
 msgid "fortune failed"
 msgstr "el programa fortune ha fallado"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "página no encontrada"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "No existe la página %s."
@@ -371,23 +375,32 @@ msgstr "no encuentro páginas coincidentes: %s"
 msgid "%s is an attachment, not a page."
 msgstr "la página %s no es modificable"
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "No puede cambiar %s"
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "no puede actuar sobre un archivo con permisos %s"
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "No puede cambiar los permisos de acceso de un archivo"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "No puede cambiar %s"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "ha fallado la compilación del programa %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Es obligatorio indicar %s cuando se utiliza el complemento de búsqueda"
@@ -396,28 +409,28 @@ msgstr "Es obligatorio indicar %s cuando se utiliza el complemento de búsqueda"
 msgid "failed to run graphviz"
 msgstr "no he podido ejecutar el programa graphviz "
 
-#: ../IkiWiki/Plugin/graphviz.pm:90
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr "prog no es un programa graphviz válido "
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "la directiva tohighlight contiene el tipo de archivo desconocido '%s' "
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Código fuente: %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 "aviso: el módulo Perl hightlight no está disponible; retrocedo la entrada "
 "para continuar el proceso. "
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "Algunos emoticonos tienen errores"
@@ -436,12 +449,12 @@ msgstr "no puedo leer de %s: %s "
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, perl-format
 msgid "failed to resize: %s"
 msgstr "dimensionamiento fallido: %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, perl-format
 msgid "failed to determine size of image %s"
 msgstr "no he podido determinar el tamaño de la imagen %s"
@@ -469,12 +482,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr "Añadir una entrada nueva titulada:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "no he encontrado la plantilla %s"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "se ha producido un error fatal mientras procesaba la plantilla:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "No he encontrado el componente RPC::XML::Client, no envío señal alguna"
 
@@ -504,19 +517,19 @@ msgstr ""
 "no he podido cargar el módulo Perl Markdown.pm (%s) ó no he podido ejecutar "
 "el programa /usr/bin/markdown (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "hoja de estilo no encontrada "
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "falta la página a donde redirigir"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "ciclo de redirección no permitido"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "los parámetros 'from' y 'to' son obligatorios"
@@ -538,7 +551,7 @@ msgstr "aprobación de comentarios"
 msgid "more"
 msgstr "ver más"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "ha fallado la compilación del programa %s"
@@ -596,21 +609,21 @@ msgstr "reinicio de contraseña denegado"
 msgid "Ping received."
 msgstr "Recibida una señal ping."
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "los parámetros 'from' y 'to' son obligatorios"
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "Informaremos a %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "Ignorando directiva 'ping' para el wiki %s (este wiki es %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "No he encontrado el componente LWP, no envío señal alguna"
 
@@ -618,97 +631,92 @@ msgstr "No he encontrado el componente LWP, no envío señal alguna"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, fuzzy, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s no es un archivo"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "Informaremos a %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, fuzzy, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "No existe la página %s."
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "ha fallado la compilación del programa %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "ha fallado la compilación del programa %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "ha fallado la compilación del programa %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "dimensionamiento fallido: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "dimensionamiento fallido: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "no he podido ejecutar el programa dot"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "Votar"
@@ -806,6 +814,16 @@ msgstr "%s es un valor erróneo para un porcentaje"
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr "son necesarios los parámetros 'donepages' y 'percent' ó 'totalpages'"
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "confirme el borrado de %s"
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr "(Lista de diferencias truncada)"
@@ -825,16 +843,16 @@ msgstr "%s no está en el directorio fuente por lo que no puede ser borrada"
 msgid "%s is not a file"
 msgstr "%s no es un archivo"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "confirme el borrado de %s"
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Por favor seleccione los adjuntos que serán borrados."
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "borrado"
 
@@ -862,29 +880,29 @@ msgstr "%s ya existe"
 msgid "%s already exists on disk"
 msgstr "%s ya existe en el disco"
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr "cambiando de nombre %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "También cambia de nombre las subpáginas y los adjuntos"
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Únicamente un adjunto puede ser renombrado a la vez."
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Por favor, seleccione el adjunto al que cambiar el nombre."
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "%s cambia de nombre a %s"
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "actualizado el cambio de nombre de %s a %s"
@@ -899,12 +917,12 @@ msgstr "no puedo leer de %s: %s "
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
-#, perl-format
-msgid "need Digest::SHA1 to index %s"
+#: ../IkiWiki/Plugin/search.pm:195
+#, fuzzy, perl-format
+msgid "need Digest::SHA to index %s"
 msgstr "se necesita la instalación de Digest::SHA1 para indexar %s"
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "buscar"
 
@@ -925,7 +943,12 @@ msgstr "shortcut necesita el parámetro 'name' ó el parámetro 'url'"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "El atajo %s apunta a <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, fuzzy, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "el complemento shortcut no funcionará si no existe la página %s"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "Algunos emoticonos tienen errores"
 
@@ -995,16 +1018,11 @@ msgstr "creando nueva página %s"
 msgid "missing id parameter"
 msgstr "falta el parámetro \"id\""
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "fuente de datos no encontrada"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "falta el código tex"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "no he podido crear la imagen desde el código"
 
@@ -1023,22 +1041,22 @@ msgstr "complementos"
 msgid "enable %s?"
 msgstr "¿ activar %s ?"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "El archivo de configuración para este wiki es desconocido"
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "principal"
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 "Los cambios en la configuración que se muestran más abajo precisan una "
 "reconstrucción del wiki para tener efecto."
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1046,7 +1064,7 @@ msgstr ""
 "Para que los cambios en la configuración mostrados más abajo tengan efecto, "
 "es posible que necesite reconstruir el wiki."
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1058,11 +1076,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr "no puedo determinar el identificador de un usuario no fiable como %s"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "el nombre de archivo %s es erróneo"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1077,49 +1090,54 @@ msgstr ""
 "encontrado un enlace simbólico en la ruta del directorio fuente (%s) -- use "
 "la directiva allow_symlinks_before_srcdir para permitir la acción"
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "ignorando el archivo %s porque su nombre no es correcto"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s tiene mútiples páginas fuente posibles"
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "eliminando la antigua página %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "convirtiendo la página %s, la cual referencia a %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "eliminando la página %s puesto que ya no se deriva de %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "convirtiendo la página %s, la cual depende de %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr ""
 "convirtiendo la página %s para actualizar la lista de páginas que hacen "
 "referencia a ella."
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "Informaremos a %s"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: no puedo convertir la página %s"
@@ -1136,7 +1154,7 @@ msgstr "no puedo leer el archivo %s: %s"
 msgid "cannot load %s in safe mode"
 msgstr "no puedo leer el archivo %s: %s"
 
-#: ../IkiWiki/Setup.pm:46
+#: ../IkiWiki/Setup.pm:47
 #, fuzzy, perl-format
 msgid "failed to parse %s"
 msgstr "ha fallado la compilación del programa %s"
@@ -1160,58 +1178,58 @@ msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 "** Desactivando el complemento %s dado que está fallando con este mensaje:"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "generando programas auxiliares.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "el programa %s no parece ser ejecutable"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 "no puedo crear un programa envoltorio que utiliza un archivo de configuración"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "el programa envoltorio no ha sido especificado"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "ha fallado la compilación del programa %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "creado con éxito el programa envoltorio %s"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "uso: ikiwiki [opciones] origen destino"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup archivo_de_configuración"
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "uso: --set variable=valor"
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 #, fuzzy
 msgid "usage: --set-yaml var=value"
 msgstr "uso: --set variable=valor"
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "generando programas auxiliares.."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "reconstruyendo el wiki.."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "actualizando el wiki.."
 
@@ -1219,43 +1237,53 @@ msgstr "actualizando el wiki.."
 msgid "Discussion"
 msgstr "Comentarios"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Es obligatorio especificar un url al wiki con el parámetro --url si se "
 "utiliza el parámetro --cgi"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr "no puedo emplear varios complementos rcs"
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "no he podido cargar el complemento externo %s necesario para %s"
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 "se ha detectado en la página %s un bucle de preprocesado en la iteración "
 "número %i"
 
-#: ../IkiWiki.pm:1984
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "el nombre de archivo %s es erróneo"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "no he encontrado la plantilla %s"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "si"
 
-#: ../IkiWiki.pm:2061
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "no conozco este tipo de ordenación %s"
 
-#: ../IkiWiki.pm:2082
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "no conozco este tipo de ordenación %s"
 
-#: ../IkiWiki.pm:2218
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "no encuentro páginas coincidentes: %s"
@@ -1283,6 +1311,10 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr "¿ Cuál es el dominio para el servidor web ?"
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "fuente de datos no encontrada"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Antes es necesario identificarse."
 
index 94e6d6b02d5af74145c3dda712f143f9e4b65566..786889c8845202a058320cccfec6af1c1f21d13f 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -9,19 +9,16 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.141\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 22:18-0500\n"
-"PO-Revision-Date: 2010-07-17 18:13+0200\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
+"PO-Revision-Date: 2010-10-03 10:42+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../IkiWiki/CGI.pm:116
-msgid "You need to log in first."
-msgstr "Vous devez d'abord vous identifier."
-
-#: ../IkiWiki/CGI.pm:149
+#: ../IkiWiki/CGI.pm:162
 msgid ""
 "probable misconfiguration: sslcookie is set, but you are attempting to login "
 "via http, not https"
@@ -29,35 +26,35 @@ msgstr ""
 "Erreur de configuration probable : sslcookie est positionné mais vous tentez "
 "de vous connecter avec http au lieu de https"
 
-#: ../IkiWiki/CGI.pm:152
+#: ../IkiWiki/CGI.pm:165
 msgid "login failed, perhaps you need to turn on cookies?"
 msgstr "Échec de l'identification, vous devez autoriser les cookies."
 
-#: ../IkiWiki/CGI.pm:171 ../IkiWiki/CGI.pm:320
+#: ../IkiWiki/CGI.pm:184 ../IkiWiki/CGI.pm:335
 msgid "Your login session has expired."
 msgstr "Session d'authentification expirée."
 
-#: ../IkiWiki/CGI.pm:192
+#: ../IkiWiki/CGI.pm:205
 msgid "Login"
 msgstr "S’identifier"
 
-#: ../IkiWiki/CGI.pm:193
+#: ../IkiWiki/CGI.pm:206
 msgid "Preferences"
 msgstr "Préférences"
 
-#: ../IkiWiki/CGI.pm:194
+#: ../IkiWiki/CGI.pm:207
 msgid "Admin"
 msgstr "Administrateur"
 
-#: ../IkiWiki/CGI.pm:234
+#: ../IkiWiki/CGI.pm:247
 msgid "Preferences saved."
 msgstr "Les préférences ont été enregistrées."
 
-#: ../IkiWiki/CGI.pm:284
+#: ../IkiWiki/CGI.pm:299
 msgid "You are banned."
 msgstr "Vous avez été banni."
 
-#: ../IkiWiki/CGI.pm:411 ../IkiWiki/CGI.pm:412 ../IkiWiki.pm:1280
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Erreur"
 
@@ -69,76 +66,80 @@ msgstr "Agrégation déclenchée par le web"
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr "Rien à faire pour le moment, tous les flux sont à jour !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "Paramètre %s manquant"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "Nouveau flux"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "Articles"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "Nouveau"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "Fin de validité de %s (date de %s jours)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "Fin de validité de %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "dernière vérification : %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "Vérification du flux %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "Impossible de trouver de flux à %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "Flux introuvable "
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(chaîne UTF-8 non valable supprimée du flux)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(échappement des entités de flux)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "Plantage du flux XML::Feed !"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "Création de la nouvelle page %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+msgid "failed to process template:"
+msgstr "Échec du traitementdu modèle :"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "Suppression du compartiment S3 (« bucket »)..."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:216
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "Terminé"
 
@@ -149,15 +150,15 @@ msgstr "Vous devez spécifier %s"
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:140
 msgid "Failed to create S3 bucket: "
-msgstr "Impossible de créer un compartiment S3 :"
+msgstr "Impossible de créer un compartiment S3 : "
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:225
 msgid "Failed to save file to S3: "
-msgstr "Impossible de sauvegarder le fichier dans le compartiment S3 :"
+msgstr "Impossible de sauvegarder le fichier dans le compartiment S3 : "
 
 #: ../IkiWiki/Plugin/amazon_s3.pm:247
 msgid "Failed to delete file from S3: "
-msgstr "Échec lors de la suppression du fichier sur S3 :"
+msgstr "Échec lors de la suppression du fichier sur S3 : "
 
 #: ../IkiWiki/Plugin/attachment.pm:50
 #, perl-format
@@ -168,19 +169,19 @@ msgstr "Il existe déjà une page nommée %s"
 msgid "prohibited by allowed_attachments"
 msgstr "Action interdite par allowed_attachments"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "Nom de la pièce jointe incorrect"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "Envoi de la pièce jointe"
 
-#: ../IkiWiki/Plugin/autoindex.pm:105
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "Génération de l'index automatique"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -197,68 +198,81 @@ msgstr "%s sur %s"
 msgid "There are no broken links!"
 msgstr "Aucun lien cassé !"
 
-#: ../IkiWiki/Plugin/comments.pm:125 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:113
+#, perl-format
+msgid "this comment needs %s"
+msgstr "Ce commentaire demande %s"
+
+#: ../IkiWiki/Plugin/comments.pm:116
+msgid "moderation"
+msgstr "Modération"
+
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "Format de page non reconnu %s"
 
-#: ../IkiWiki/Plugin/comments.pm:130
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "Un commentaire doit avoir un contenu."
 
-#: ../IkiWiki/Plugin/comments.pm:185
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anonyme"
 
-#: ../IkiWiki/Plugin/comments.pm:340 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr "Modération du commentaire"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "Nom de page incorrect"
 
-#: ../IkiWiki/Plugin/comments.pm:345
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "Faire un commentaire sur %s"
 
-#: ../IkiWiki/Plugin/comments.pm:363
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr "La page '%s' n'existe pas, commentaire impossible."
 
-#: ../IkiWiki/Plugin/comments.pm:370
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "Le commentaire pour la page '%s' est terminé."
 
-#: ../IkiWiki/Plugin/comments.pm:467
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "Le commentaire a été enregistré, en attente de « modération »"
 
-#: ../IkiWiki/Plugin/comments.pm:469
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Votre commentaire sera publié après vérification par le modérateur"
 
-#: ../IkiWiki/Plugin/comments.pm:482
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Commentaire ajouté"
 
-#: ../IkiWiki/Plugin/comments.pm:486
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Commentaire ajouté : %s"
 
-#: ../IkiWiki/Plugin/comments.pm:528 ../IkiWiki/Plugin/websetup.pm:256
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "Vous n'êtes pas authentifié comme administrateur"
 
-#: ../IkiWiki/Plugin/comments.pm:579
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Modération du commentaire"
 
-#: ../IkiWiki/Plugin/comments.pm:618
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "modération du commentaire"
 
-#: ../IkiWiki/Plugin/comments.pm:761
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -268,22 +282,22 @@ msgstr[1] "%i commentaires"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:771
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr "poster un commentaire"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "Le paramètre %s est obligatoire"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "Aucun texte n'a été copié dans cette page"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "Aucun texte n'a été copié dans cette page avec l'identifiant %s"
@@ -298,35 +312,31 @@ msgstr "Suppression de l'ancienne prévisualisation %s"
 msgid "%s is not an editable page"
 msgstr "%s n'est pas une page éditable"
 
-#: ../IkiWiki/Plugin/editpage.pm:296
+#: ../IkiWiki/Plugin/editpage.pm:294
 #, perl-format
 msgid "creating %s"
 msgstr "Création de %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:314 ../IkiWiki/Plugin/editpage.pm:333
-#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:387
-#: ../IkiWiki/Plugin/editpage.pm:426
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "Édition de %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "modèle (« template ») non indiqué"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "correspondance non indiquée"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "edittemplate %s enregistré pour %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:138
-msgid "failed to process"
-msgstr "Échec du traitement"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "le format et le texte doivent être indiqués"
@@ -335,11 +345,11 @@ msgstr "le format et le texte doivent être indiqués"
 msgid "fortune failed"
 msgstr "Échec du lancement de « fortune »"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:57
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "Page manquante"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:59
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "La page %s n'existe pas."
@@ -353,23 +363,32 @@ msgstr "Ce n'est pas une page."
 msgid "%s is an attachment, not a page."
 msgstr "%s est une pièce jointe, pas une page."
 
-#: ../IkiWiki/Plugin/git.pm:658 ../IkiWiki/Plugin/git.pm:676
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "Vous n'êtes pas autorisé à modifier %s"
 
-#: ../IkiWiki/Plugin/git.pm:698
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "Vous ne pouvez pas modifier un fichier dont le mode est %s"
 
-#: ../IkiWiki/Plugin/git.pm:702
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "Vous n'êtes pas autorisé à modifier le mode des fichiers"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:132
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "Vous n'êtes pas autorisé à modifier %s"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "Échec de la compilation de %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Vous devez indiquer %s lors de l'utilisation du greffon %s."
@@ -378,28 +397,28 @@ msgstr "Vous devez indiquer %s lors de l'utilisation du greffon %s."
 msgid "failed to run graphviz"
 msgstr "Échec du lancement de graphviz"
 
-#: ../IkiWiki/Plugin/graphviz.pm:95
+#: ../IkiWiki/Plugin/graphviz.pm:91
 msgid "prog not a valid graphviz program"
 msgstr "Ce programme n'est pas un programme graphviz valable"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "tohighlight contient un type de fichier inconnu : '%s'"
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Code source : %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 "Avertissement : le module perl « highlight » n'est pas disponible. "
 "Continuation malgré tout."
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 msgid "htmltidy failed to parse this html"
 msgstr "htmltidy n'a pas pu analyser cette page html"
 
@@ -417,12 +436,12 @@ msgstr "Échec de la lecture de %s : %s"
 msgid "wrong size format \"%s\" (should be WxH)"
 msgstr "Format de la taille incorrect \"%s\", (devrait être LxH)"
 
-#: ../IkiWiki/Plugin/img.pm:125
+#: ../IkiWiki/Plugin/img.pm:122
 #, perl-format
 msgid "failed to resize: %s"
 msgstr "Échec du redimensionnement : %s"
 
-#: ../IkiWiki/Plugin/img.pm:145
+#: ../IkiWiki/Plugin/img.pm:146
 #, perl-format
 msgid "failed to determine size of image %s"
 msgstr "Échec de la détermination de la taille de l'image : %s"
@@ -450,12 +469,12 @@ msgstr "Les paramètres %s et %s ne peuvent être utilisés ensemble."
 msgid "Add a new post titled:"
 msgstr "Ajouter un nouvel article dont le titre est :"
 
-#: ../IkiWiki/Plugin/inline.pm:333
-#, perl-format
-msgid "nonexistant template %s"
-msgstr "Le modèle de page %s n'existe pas"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "Échec du traitementdu modèle :"
 
-#: ../IkiWiki/Plugin/inline.pm:625
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client introuvable, pas de réponse au ping"
 
@@ -484,18 +503,22 @@ msgstr ""
 "Échec du chargement du module Perl Markdown.pm (%s) ou de /usr/bin/markdown "
 "(%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:162
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "Feuille de style introuvable "
 
-#: ../IkiWiki/Plugin/meta.pm:200
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "Page de redirection introuvable"
 
-#: ../IkiWiki/Plugin/meta.pm:214
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "Redirection cyclique non autorisée"
 
+#: ../IkiWiki/Plugin/meta.pm:400
+msgid "sort=meta requires a parameter"
+msgstr "sort=meta demande un paramètre."
+
 #: ../IkiWiki/Plugin/mirrorlist.pm:44
 msgid "Mirrors"
 msgstr "Miroirs"
@@ -504,7 +527,7 @@ msgstr "Miroirs"
 msgid "Mirror"
 msgstr "Miroir"
 
-#: ../IkiWiki/Plugin/moderatedcomments.pm:42
+#: ../IkiWiki/Plugin/moderatedcomments.pm:57
 msgid "comment needs moderation"
 msgstr "le commentaire doit passer par une instance de modération"
 
@@ -512,17 +535,10 @@ msgstr "le commentaire doit passer par une instance de modération"
 msgid "more"
 msgstr "lire la suite"
 
-#: ../IkiWiki/Plugin/norcs.pm:66
-msgid "getctime not implemented"
-msgstr "getctime n'est pas implémenté"
-
-#: ../IkiWiki/Plugin/openid.pm:62
-msgid "Log in with"
-msgstr "S'identifier en tant que"
-
-#: ../IkiWiki/Plugin/openid.pm:65
-msgid "Get an OpenID"
-msgstr "Obtenir un compte OpenID"
+#: ../IkiWiki/Plugin/openid.pm:70
+#, perl-format
+msgid "failed to load openid module: "
+msgstr "Impossible de charger le module openid"
 
 #: ../IkiWiki/Plugin/orphans.pm:56
 msgid "All pages have other pages linking to them."
@@ -532,43 +548,43 @@ msgstr "Toutes les pages sont liées à d'autres pages."
 msgid "bad or missing template"
 msgstr "Modèle de page incorrect ou manquant"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:229
+#: ../IkiWiki/Plugin/passwordauth.pm:231
 msgid "Your user page: "
 msgstr "Votre page d'utilisateur :"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:236
+#: ../IkiWiki/Plugin/passwordauth.pm:238
 msgid "Create your user page"
 msgstr "Création de votre page d'utilisateur"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:264
+#: ../IkiWiki/Plugin/passwordauth.pm:268
 msgid "Account creation successful. Now you can Login."
 msgstr "Le compte a été créé. Vous pouvez maintenant vous identifier."
 
-#: ../IkiWiki/Plugin/passwordauth.pm:267
+#: ../IkiWiki/Plugin/passwordauth.pm:271
 msgid "Error creating account."
 msgstr "Erreur lors de la création du compte."
 
-#: ../IkiWiki/Plugin/passwordauth.pm:274
+#: ../IkiWiki/Plugin/passwordauth.pm:278
 msgid "No email address, so cannot email password reset instructions."
 msgstr ""
 "Aucune adresse indiquée. Impossible d'envoyer les instructions pour "
 "réinitialiser le mot de passe."
 
-#: ../IkiWiki/Plugin/passwordauth.pm:308
+#: ../IkiWiki/Plugin/passwordauth.pm:312
 msgid "Failed to send mail"
 msgstr "Impossible d'envoyer un courriel"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:310
+#: ../IkiWiki/Plugin/passwordauth.pm:314
 msgid "You have been mailed password reset instructions."
 msgstr ""
 "Vous avez reçu un message contenant les instructions pour réinitialiser le "
 "mot de passe"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:345
+#: ../IkiWiki/Plugin/passwordauth.pm:349
 msgid "incorrect password reset url"
 msgstr "Adresse pour la réinitialisation du mot de passe incorrecte"
 
-#: ../IkiWiki/Plugin/passwordauth.pm:348
+#: ../IkiWiki/Plugin/passwordauth.pm:352
 msgid "password reset denied"
 msgstr "réinitialisation du mot de passe refusée"
 
@@ -576,21 +592,21 @@ msgstr "réinitialisation du mot de passe refusée"
 msgid "Ping received."
 msgstr "Ping reçu"
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "les paramètres « from » et « to » sont nécessaires."
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "va envoyer un ping à %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "Les instructions du wiki %s sont ignorées (ce wiki est %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "LWP est introuvable. Pas de réponse au ping"
 
@@ -600,12 +616,12 @@ msgstr ""
 "Note : ancienne version de po4a détectée. Il est recommandé d'installer la "
 "version 0.35."
 
-#: ../IkiWiki/Plugin/po.pm:139
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s n'est pas un code de langue valable"
 
-#: ../IkiWiki/Plugin/po.pm:151
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
@@ -613,7 +629,7 @@ msgstr ""
 "%s n'est pas une valeur correcte pour po_link_to, retour à la valeur par "
 "défaut."
 
-#: ../IkiWiki/Plugin/po.pm:156
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
@@ -621,23 +637,11 @@ msgstr ""
 "po_link_to=negotiated nécessite que usedirs soit activé, retour à "
 "po_link_to=default."
 
-#: ../IkiWiki/Plugin/po.pm:386
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-"Reconstruction de toutes les pages pour corriger les titres (greffon "
-"« meta »)."
-
-#: ../IkiWiki/Plugin/po.pm:390 ../IkiWiki/Render.pm:655
-#, perl-format
-msgid "building %s"
-msgstr "construction de %s"
-
-#: ../IkiWiki/Plugin/po.pm:428
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr "Fichiers PO mis à jour."
 
-#: ../IkiWiki/Plugin/po.pm:452
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
@@ -645,7 +649,7 @@ msgstr ""
 "Impossible de supprimer cette traduction. Si la page maître est supprimée, "
 "alors ses traductions seront supprimées."
 
-#: ../IkiWiki/Plugin/po.pm:472
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
@@ -653,55 +657,60 @@ msgstr ""
 "Impossible de renommer cette traduction. Si la page maître est renommée, "
 "alors ses traductions pourront être renommées."
 
-#: ../IkiWiki/Plugin/po.pm:871
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "Le fichier POT %s n'existe pas."
 
-#: ../IkiWiki/Plugin/po.pm:885
+#: ../IkiWiki/Plugin/po.pm:949
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "Impossible de copier le fichier PO underlay dans %s"
 
-#: ../IkiWiki/Plugin/po.pm:894
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr "Impossible de mettre à jour %s"
 
-#: ../IkiWiki/Plugin/po.pm:900
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "Impossible de copier le fichier POT dans %s"
 
-#: ../IkiWiki/Plugin/po.pm:936
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr "N/A"
 
-#: ../IkiWiki/Plugin/po.pm:949
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr "Impossible de traduire %s"
 
-#: ../IkiWiki/Plugin/po.pm:1033
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr "Fichiers PO obsolètes supprimés."
 
-#: ../IkiWiki/Plugin/po.pm:1089 ../IkiWiki/Plugin/po.pm:1103
-#: ../IkiWiki/Plugin/po.pm:1142
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr "Impossible de modifier %s"
 
-#: ../IkiWiki/Plugin/po.pm:1101
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr "Impossible de traduire"
 
-#: ../IkiWiki/Plugin/po.pm:1154
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 "Données gettext incorrectes, retour à la page précédente pour la poursuite "
 "des modifications."
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr "La syntaxe de %s n'est pas correcte : il faut utiliser CODE|NOM"
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "Voter"
@@ -798,7 +807,18 @@ msgstr "pourcentage %s illégal"
 #: ../IkiWiki/Plugin/progress.pm:56
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
-"L'un des paramètres « percent », « totalpages » ou « donepages » est nécessaire."
+"L'un des paramètres « percent », « totalpages » ou « donepages » est "
+"nécessaire."
+
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "Suppression de %s confirmée"
 
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
@@ -819,16 +839,16 @@ msgstr "%s n'est pas dans srcdir et ne peut donc pas être supprimé"
 msgid "%s is not a file"
 msgstr "%s n'est pas un fichier"
 
-#: ../IkiWiki/Plugin/remove.pm:135
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "Suppression de %s confirmée"
 
-#: ../IkiWiki/Plugin/remove.pm:172
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Veuillez choisir la pièce jointe à supprimer"
 
-#: ../IkiWiki/Plugin/remove.pm:212
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "supprimé"
 
@@ -841,17 +861,17 @@ msgstr "%s n'est pas dans srcdir. Impossible de le renommer"
 msgid "no change to the file name was specified"
 msgstr "Aucun changement dans le nom du fichier n'a été spécifié"
 
-#: ../IkiWiki/Plugin/rename.pm:69
+#: ../IkiWiki/Plugin/rename.pm:68
 #, perl-format
 msgid "illegal name"
 msgstr "Appellation interdite"
 
-#: ../IkiWiki/Plugin/rename.pm:74
+#: ../IkiWiki/Plugin/rename.pm:73
 #, perl-format
 msgid "%s already exists"
 msgstr "%s existe déjà"
 
-#: ../IkiWiki/Plugin/rename.pm:80
+#: ../IkiWiki/Plugin/rename.pm:79
 #, perl-format
 msgid "%s already exists on disk"
 msgstr "%s existe déjà sur le disque"
@@ -861,24 +881,24 @@ msgstr "%s existe déjà sur le disque"
 msgid "rename %s"
 msgstr "%s renommé"
 
-#: ../IkiWiki/Plugin/rename.pm:162
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "« SubPages » et attachements renommés."
 
-#: ../IkiWiki/Plugin/rename.pm:249
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Modification de pièce jointe : une seule à la fois"
 
-#: ../IkiWiki/Plugin/rename.pm:252
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Veuillez sélectionner la pièce jointe à renommer"
 
-#: ../IkiWiki/Plugin/rename.pm:349
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "Renomme %s en %s"
 
-#: ../IkiWiki/Plugin/rename.pm:573
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "mise à jour, suite au changement de %s en %s"
@@ -893,12 +913,12 @@ msgstr "Impossible d'exécuter la commande rsync : %s"
 msgid "rsync_command exited %d"
 msgstr "la commande rsync s'est terminée avec le code : %d"
 
-#: ../IkiWiki/Plugin/search.pm:183
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr "Digest::SHA1 est nécessaire pour indexer %s"
 
-#: ../IkiWiki/Plugin/search.pm:218
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "recherche"
 
@@ -919,7 +939,12 @@ msgstr "Il manque le paramètre nom ou URL."
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "Le raccourci %s pointe vers <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "Le module smiley ne fonctionne pas sans %s"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "Aucun smiley n'a pu être analysé"
 
@@ -976,58 +1001,54 @@ msgstr "Téléchargement direct des données"
 msgid "parse fail at line %d: %s"
 msgstr "Erreur d'analyse à la ligne %d : %s"
 
-#: ../IkiWiki/Plugin/template.pm:34
-msgid "missing id parameter"
-msgstr "Paramètre d'identification manquant"
-
-#: ../IkiWiki/Plugin/template.pm:41
+#: ../IkiWiki/Plugin/tag.pm:83
 #, perl-format
-msgid "template %s not found"
-msgstr "Modèle de page %s introuvable"
+msgid "creating tag page %s"
+msgstr "Création de la nouvelle page %s"
 
-#: ../IkiWiki/Plugin/template.pm:60
-msgid "failed to process:"
-msgstr "Échec du traitement :"
+#: ../IkiWiki/Plugin/template.pm:33
+msgid "missing id parameter"
+msgstr "Paramètre d'identification manquant"
 
-#: ../IkiWiki/Plugin/teximg.pm:71
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "Il manque le code TeX"
 
-#: ../IkiWiki/Plugin/teximg.pm:123
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "Échec de la création de l'image à partir du code"
 
-#: ../IkiWiki/Plugin/websetup.pm:91
+#: ../IkiWiki/Plugin/websetup.pm:105
 #, perl-format
 msgid "%s plugin:"
 msgstr "greffon %s"
 
-#: ../IkiWiki/Plugin/websetup.pm:107
+#: ../IkiWiki/Plugin/websetup.pm:121
 #, perl-format
 msgid "%s plugins"
 msgstr "Greffons %s"
 
-#: ../IkiWiki/Plugin/websetup.pm:121
+#: ../IkiWiki/Plugin/websetup.pm:135
 #, perl-format
 msgid "enable %s?"
 msgstr "activer %s ?"
 
-#: ../IkiWiki/Plugin/websetup.pm:260
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "Le fichier de configuration de ce wiki n'est pas connu"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "Partie principale"
 
-#: ../IkiWiki/Plugin/websetup.pm:419
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 "Les changements de configuration ci-dessous nécessitent une recompilation du "
 "wiki pour prendre effet"
 
-#: ../IkiWiki/Plugin/websetup.pm:423
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1035,7 +1056,7 @@ msgstr ""
 "Pour que les changements de configuration ci-dessous prennent effet vous "
 "devez recompiler le wiki"
 
-#: ../IkiWiki/Plugin/websetup.pm:460
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr "Erreur : %s s'est terminé anormalement (%s). Modifications ignorées."
@@ -1046,17 +1067,12 @@ msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 "Impossible de déterminer l'identifiant de %s, (enregistrement non fiable)"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "Nom de fichier incorrect %s"
-
-#: ../IkiWiki/Render.pm:153
+#: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
 msgstr "Examen de %s"
 
-#: ../IkiWiki/Render.pm:274
+#: ../IkiWiki/Render.pm:280
 #, perl-format
 msgid ""
 "symlink found in srcdir path (%s) -- set allow_symlinks_before_srcdir to "
@@ -1065,165 +1081,201 @@ msgstr ""
 "Lien symbolique trouvé dans l'adresse de srcdir (%s) -- pour l'autoriser, "
 "activez le paramètre « allow_symlinks_before_srcdir »."
 
-#: ../IkiWiki/Render.pm:303 ../IkiWiki/Render.pm:330
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "Omission du fichier au nom incorrect %s"
 
-#: ../IkiWiki/Render.pm:308
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s peut être associé à plusieurs pages source."
 
-#: ../IkiWiki/Render.pm:413
+#: ../IkiWiki/Render.pm:372
+#, perl-format
+msgid "querying %s for file creation and modification times.."
+msgstr ""
+"recherche de %s pour les dates de modification et de création des fichiers..."
+
+#: ../IkiWiki/Render.pm:446
 #, perl-format
-msgid "removing old page %s"
-msgstr "Suppression de l'ancienne page %s"
+msgid "removing obsolete %s"
+msgstr "Suppression de %s obsolète"
 
-#: ../IkiWiki/Render.pm:486
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr "Reconstruction de %s, qui est lié à %s"
 
-#: ../IkiWiki/Render.pm:495
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "Suppression de %s, qui n'est plus rendu par %s"
 
-#: ../IkiWiki/Render.pm:618
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr "Reconstruction de %s, qui dépend de %s"
 
-#: ../IkiWiki/Render.pm:631
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "Reconstruction de %s, afin de mettre à jour ses rétroliens"
 
-#: ../IkiWiki/Render.pm:707
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr "construction de %s"
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki : impossible de reconstruire %s"
 
 #. translators: The first parameter is a filename, and the second
 #. translators: is a (probably not translated) error message.
-#: ../IkiWiki/Setup.pm:19
+#: ../IkiWiki/Setup.pm:23
 #, perl-format
 msgid "cannot read %s: %s"
 msgstr "Lecture impossible de %s : %s"
 
+#: ../IkiWiki/Setup.pm:34
+#, perl-format
+msgid "cannot load %s in safe mode"
+msgstr "Impossible de charger %s de façon sécurisée"
+
+#: ../IkiWiki/Setup.pm:47
+#, perl-format
+msgid "failed to parse %s"
+msgstr "Impossible d'analyser %s"
+
 #: ../IkiWiki/Setup/Automator.pm:34
 msgid "you must enter a wikiname (that contains alphanumerics)"
 msgstr ""
 "Vous devez spécifier un nom de wiki (contenant des caractères "
 "alphanumériques)"
 
-#: ../IkiWiki/Setup/Automator.pm:82
+#: ../IkiWiki/Setup/Automator.pm:89
 #, perl-format
 msgid "unsupported revision control system %s"
 msgstr "Système de contrôle de version non reconnu : %s"
 
-#: ../IkiWiki/Setup/Automator.pm:108
+#: ../IkiWiki/Setup/Automator.pm:115
 msgid "failed to set up the repository with ikiwiki-makerepo"
 msgstr "Échec lors de la création du dépôt avec ikiwiki-makerepo"
 
-#: ../IkiWiki/Setup/Automator.pm:126
+#: ../IkiWiki/Setup/Automator.pm:134
 #, perl-format
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 "** Désactivation du greffon %s, l'installation a échoué avec le message "
 "suivant :"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "Création des fichiers CGI..."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s ne semble pas être exécutable"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 "Impossible de créer un fichier CGI utilisant un fichier de configuration"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "Le nom du fichier CGI n'a pas été indiqué"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:149
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "Échec de la compilation de %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:169
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s a été créé avec succès"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "Syntaxe : ikiwiki [options] source destination"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup fichier de configuration"
 
-#: ../ikiwiki.in:92
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "Syntaxe : -- set var=valeur"
 
-#: ../ikiwiki.in:142
-msgid "generating wrappers.."
-msgstr "Création des fichiers CGI..."
+#: ../ikiwiki.in:109
+msgid "usage: --set-yaml var=value"
+msgstr "Syntaxe : --set-yaml var=valeur"
 
-#: ../ikiwiki.in:205
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "Reconstruction du wiki..."
 
-#: ../ikiwiki.in:208
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "Rafraîchissement du wiki..."
 
-#: ../IkiWiki.pm:238
+#: ../IkiWiki.pm:232
 msgid "Discussion"
 msgstr "Discussion"
 
-#: ../IkiWiki.pm:514
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Vous devez indiquer l'URL du wiki par --url lors de l'utilisation de --cgi"
 
-#: ../IkiWiki.pm:560
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr "Impossible d'utiliser plusieurs systèmes de contrôle des versions"
 
-#: ../IkiWiki.pm:589
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "Impossible de charger le greffon externe nécessaire au greffon %s : %s"
 
-#: ../IkiWiki.pm:1262
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "Une boucle de prétraitement a été détectée sur %s à hauteur de %i"
 
-#: ../IkiWiki.pm:1877
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "Nom de fichier incorrect %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "Modèle de page %s introuvable"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "oui"
 
-#: ../IkiWiki.pm:2020
-msgid "Sort::Naturally needed for title_natural sort"
-msgstr "Sort::Naturally est nécessaire pour un tri « title_natural »"
+#: ../IkiWiki.pm:2195
+#, perl-format
+msgid "invalid sort type %s"
+msgstr "Type de tri %s inconnu"
 
-#: ../IkiWiki.pm:2031
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "Type de tri %s inconnu"
 
-#: ../IkiWiki.pm:2050
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
-msgstr "Impossible de trouver les pages %s"
+msgstr "Impossible de trouver les pages : %s"
 
 #: ../auto.setup:16
 msgid "What will the wiki be named?"
@@ -1245,6 +1297,35 @@ msgstr "Identifiant de l'administrateur (utilisateur du wiki ou openid) :"
 msgid "What is the domain name of the web server?"
 msgstr "Nom de domaine du serveur HTTP :"
 
+#~ msgid "%s not found"
+#~ msgstr "%s introuvable"
+
+#~ msgid "rebuilding all pages to fix meta titles"
+#~ msgstr ""
+#~ "Reconstruction de toutes les pages pour corriger les titres (greffon "
+#~ "« meta »)."
+
+#~ msgid "You need to log in first."
+#~ msgstr "Vous devez d'abord vous identifier."
+
+#~ msgid "failed to process"
+#~ msgstr "Échec du traitement"
+
+#~ msgid "nonexistant template %s"
+#~ msgstr "Le modèle de page %s n'existe pas"
+
+#~ msgid "getctime not implemented"
+#~ msgstr "getctime n'est pas implémenté"
+
+#~ msgid "Log in with"
+#~ msgstr "S'identifier en tant que"
+
+#~ msgid "Get an OpenID"
+#~ msgstr "Obtenir un compte OpenID"
+
+#~ msgid "Sort::Naturally needed for title_natural sort"
+#~ msgstr "Sort::Naturally est nécessaire pour un tri « title_natural »"
+
 #~ msgid "failed to read %s"
 #~ msgstr "Impossible de lire %s"
 
@@ -1268,5 +1349,5 @@ msgstr "Nom de domaine du serveur HTTP :"
 
 #~ msgid "<p class=\"error\">Error: %s exited nonzero (%s)"
 #~ msgstr ""
-#~ "<p class=\"erreur\">Erreur : %s s'est terminé, valeur de sortie nonzero (%"
-#~ "s)"
+#~ "<p class=\"erreur\">Erreur : %s s'est terminé, valeur de sortie nonzero "
+#~ "(%s)"
index c0dfb145b2d733aae815f87cbe747597998bd0ec..32b7c570161f775f4c346c7a5a8cf87bb71523e9 100644 (file)
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki-gu\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2007-01-11 16:05+0530\n"
 "Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
 "Language-Team: Gujarati <team@utkarsh.org>\n"
@@ -51,7 +51,7 @@ msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
 msgid "You are banned."
 msgstr "તમારા પર પ્રતિબંધ છે."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "ક્ષતિ"
 
@@ -63,76 +63,81 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "ખોવાયેલ %s વિકલ્પ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "નવું ફીડ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "પોસ્ટ"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "નવું"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "જુનું કરે છે %s (%s દિવસો જુનું)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "જુનું કરે છે %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "ફીડ %s ચકાસે છે ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "%s પર ફીડ મળી શક્યું નહી"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "ફીડ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, fuzzy, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "ફીડમાંથી અયોગ્ય રીતે UTF-8 નીકાળેલ છે"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "ફીડ ભાંગી ગયું XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "નવું પાનું %s બનાવે છે"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "સંપૂર્ણ"
 
@@ -165,19 +170,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -192,77 +197,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr "અહીં કોઇ તૂટેલ કડી નથી!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "%s બનાવે છે"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, fuzzy, perl-format
 msgid "commenting on %s"
 msgstr "%s બનાવે છે"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -272,22 +281,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, fuzzy, perl-format
 msgid "%s parameter is required"
 msgstr "\"test\" અને \"then\" વિકલ્પો જરૂરી છે"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -307,34 +316,28 @@ msgstr "%s એ સુધારી શકાય તેવું પાનું 
 msgid "creating %s"
 msgstr "%s બનાવે છે"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "%s સુધારે છે"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 #, fuzzy
 msgid "template not specified"
 msgstr "ટેમ્પલેટ %s મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 #, fuzzy
 msgid "match not specified"
 msgstr "આવરણ ફાઇલનામ સ્પષ્ટ કરેલ નથી"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "ક્રિયા કરવામાં નિષ્ફળ:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -343,12 +346,12 @@ msgstr ""
 msgid "fortune failed"
 msgstr "ભવિષ્ય નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 #, fuzzy
 msgid "missing page"
 msgstr "ખોવાયેલ કિંમતો"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -363,23 +366,31 @@ msgstr "વાંચી શકાતી નથી %s: %s"
 msgid "%s is an attachment, not a page."
 msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "જ્યારે શોધ પ્લગઇન ઉપયોગ કરતા હોવ ત્યારે %s સ્પષ્ટ કરવું જ પડશે"
@@ -392,22 +403,22 @@ msgstr "ગ્રાફવિઝ ચલાવવામાં નિષ્ફળ"
 msgid "prog not a valid graphviz program"
 msgstr "કાર્યક્રમએ યોગ્ય ગ્રાફવિઝ કાર્યક્રમ નથી"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "કોઇપણ સ્માઇલીઓ ઉકેલવામાં નિષ્ફળ"
@@ -460,12 +471,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr "આ શિર્ષકથી નવું પોસ્ટ ઉમેરો:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "àª\9fà«\87મà«\8dપલà«\87àª\9f %s àª®àª³à«\8dયà«\81àª\82 àª¨àª¹à«\80"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "àª\95à«\8dરિયા àª\95રવામાàª\82 àª¨àª¿àª·à«\8dફળ:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી"
 
@@ -492,21 +503,21 @@ msgstr ""
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr "Markdown.pm પર્લ મોડ્યુલ (%s) અથવા /usr/bin/markdown (%s) લાવવામાં નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "સ્ટાઇલશીટ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 #, fuzzy
 msgid "redir page not found"
 msgstr "ફીડ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 #, fuzzy
 msgid "redir cycle is not allowed"
 msgstr "ફીડ મળ્યું નહી"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -526,7 +537,7 @@ msgstr ""
 msgid "more"
 msgstr "વધુ"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
@@ -580,21 +591,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, fuzzy, perl-format
 msgid "Will ping %s"
 msgstr "%s સુધારે છે"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 #, fuzzy
 msgid "LWP not found, not pinging"
 msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવામાં આવતું નથી"
@@ -603,97 +614,92 @@ msgstr "RPC::XML::Client મળ્યું નહી, પિંગ કરવા
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, fuzzy, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "%s સુધારે છે"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "માપ બદલવામાં નિષ્ફળ: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "%s લખવામાં નિષ્ફળ: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "ડોટ ચલાવવામાં નિષ્ફળ"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "મત"
@@ -793,6 +799,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -812,16 +828,16 @@ msgstr "%s એ %s દ્વારા તાળું મરાયેલ છે 
 msgid "%s is not a file"
 msgstr "%s એ સુધારી શકાય તેવું પાનું નથી"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -850,29 +866,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, fuzzy, perl-format
 msgid "rename %s"
 msgstr "રેન્ડર કરે છે %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, fuzzy, perl-format
 msgid "update for rename of %s to %s"
 msgstr "%s નો સુધારો %s નાં %s વડે"
@@ -887,12 +903,12 @@ msgstr "%s વાંચવામાં નિષ્ફળ: %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -913,7 +929,12 @@ msgstr "ખોવાયેલ નામ અથવા યુઆરએલ વિ
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "ટુંકોરસ્તો %s એ <i>%s</i> નો નિર્દેશ કરે છે"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "કોઇપણ સ્માઇલીઓ ઉકેલવામાં નિષ્ફળ"
 
@@ -983,17 +1004,12 @@ msgstr "નવું પાનું %s બનાવે છે"
 msgid "missing id parameter"
 msgstr "ખોવાયેલ આઇડી વિકલ્પ"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, perl-format
-msgid "%s not found"
-msgstr "ટેમ્પલેટ %s મળ્યું નહી"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 #, fuzzy
 msgid "missing tex code"
 msgstr "ખોવાયેલ કિંમતો"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 #, fuzzy
 msgid "failed to generate image from code"
 msgstr "માપ બદલવામાં નિષ્ફળ: %s"
@@ -1013,26 +1029,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1042,11 +1058,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, fuzzy, perl-format
-msgid "bad file name %s"
-msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1059,47 +1070,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "જુનાં પાનાં દૂર કરે છે %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "રેન્ડર કરે છે %s, જે %s સાથે જોડાણ ધરાવે છે"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "દૂર કરે છે %s, હવે %s વડે રેન્ડર કરાતું નથી"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "રેન્ડર કરે છે %s, જે %s પર આધારિત છે"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "રેન્ડર કરે છે %s, તેનાં પાછળનાં જોડાણો સુધારવા માટે"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "%s સુધારે છે"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: %s રેન્ડર કરી શકાતું નથી"
@@ -1139,56 +1155,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "આવરણ બનાવે છે.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s એ ચલાવી શકાય તેમ લાગતું નથી"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "ગોઠવણ ફાઇલનો ઉપયોગ કરે છે તેનું આવરણ બનાવી શકાતું નથી"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "આવરણ ફાઇલનામ સ્પષ્ટ કરેલ નથી"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "%s કમ્પાઇલ કરવામાં નિષ્ફળ"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "ઉપયોગ: ikiwiki [વિકલ્પો] source dest"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "આવરણ બનાવે છે.."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "વીકી ફરીથી બનાવે છે.."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "વીકીને તાજી કરે છે.."
 
@@ -1196,39 +1212,49 @@ msgstr "વીકીને તાજી કરે છે.."
 msgid "Discussion"
 msgstr "ચર્ચા"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "જ્યારે --cgi ઉપયોગ કરતાં હોય ત્યારે વીકીનું યુઆરએલ સ્પષ્ટ કરવું જ પડશે"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "%s પર શોધાયેલ લુપ  %s પર ચલાવે છે %i ઉંડાણ પર"
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, fuzzy, perl-format
+msgid "bad file name %s"
+msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "ટેમ્પલેટ %s મળ્યું નહી"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "અજાણ્યો ગોઠવણી પ્રકાર %s"
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "વાંચી શકાતી નથી %s: %s"
@@ -1253,6 +1279,9 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#~ msgid "%s not found"
+#~ msgstr "ટેમ્પલેટ %s મળ્યું નહી"
+
 #~ msgid "You need to log in first."
 #~ msgstr "તમારે પ્રથમ લોગ ઇન થવું પડશે."
 
index bb0d6e52631e41a684568cc37797cda10a3dd7c7..a2bac1d0e3b00a91d3b548fabee8b08166430415 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-04 16:46-0400\n"
+"POT-Creation-Date: 2010-12-31 21:26-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"
@@ -52,7 +52,7 @@ msgstr ""
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1324
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1414
 msgid "Error"
 msgstr ""
 
@@ -64,76 +64,80 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr ""
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:135
+msgid "failed to process template:"
+msgstr ""
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr ""
 
@@ -175,7 +179,7 @@ msgstr ""
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:110
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -190,77 +194,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, perl-format
 msgid "this comment needs %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:50
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:394
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:401
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:495
+#: ../IkiWiki/Plugin/comments.pm:509
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:497
+#: ../IkiWiki/Plugin/comments.pm:511
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:524
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:514
+#: ../IkiWiki/Plugin/comments.pm:528
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:558 ../IkiWiki/Plugin/websetup.pm:268
+#: ../IkiWiki/Plugin/comments.pm:572 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:610
+#: ../IkiWiki/Plugin/comments.pm:624
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:650
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:807
+#: ../IkiWiki/Plugin/comments.pm:828
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -270,22 +278,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:817
+#: ../IkiWiki/Plugin/comments.pm:838
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -312,24 +320,19 @@ msgstr ""
 msgid "editing %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:70
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:131 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-msgid "failed to process template:"
-msgstr ""
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -338,11 +341,11 @@ msgstr ""
 msgid "fortune failed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -356,23 +359,31 @@ msgstr ""
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:740 ../IkiWiki/Plugin/git.pm:758
-#: ../IkiWiki/Receive.pm:129
+#: ../IkiWiki/Plugin/git.pm:776 ../IkiWiki/Plugin/git.pm:839
+#: ../IkiWiki.pm:1624
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:780
+#: ../IkiWiki/Plugin/git.pm:798
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:784
+#: ../IkiWiki/Plugin/git.pm:802
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:872
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:891
+#, perl-format
+msgid "Failed to revert commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr ""
@@ -385,22 +396,22 @@ msgstr ""
 msgid "prog not a valid graphviz program"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:88
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:99
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:184
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:63
 msgid "htmltidy failed to parse this html"
 msgstr ""
 
@@ -449,12 +460,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:342
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
 #, perl-format
-msgid "template %s not found"
+msgid "failed to process template %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:663
 msgid "RPC::XML::Client not found, not pinging"
 msgstr ""
 
@@ -481,19 +492,19 @@ msgstr ""
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -566,21 +577,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr ""
 
@@ -588,96 +599,91 @@ msgstr ""
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:784
-#, perl-format
-msgid "building %s"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:456
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:455
+#: ../IkiWiki/Plugin/po.pm:479
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:475
+#: ../IkiWiki/Plugin/po.pm:499
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:875
+#: ../IkiWiki/Plugin/po.pm:941
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:889
+#: ../IkiWiki/Plugin/po.pm:955
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:898
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to update %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:904
+#: ../IkiWiki/Plugin/po.pm:970
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:940
+#: ../IkiWiki/Plugin/po.pm:1006
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:951
+#: ../IkiWiki/Plugin/po.pm:1017
 #, perl-format
 msgid "failed to translate %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1035
+#: ../IkiWiki/Plugin/po.pm:1096
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1092 ../IkiWiki/Plugin/po.pm:1104
-#: ../IkiWiki/Plugin/po.pm:1143
+#: ../IkiWiki/Plugin/po.pm:1153 ../IkiWiki/Plugin/po.pm:1165
+#: ../IkiWiki/Plugin/po.pm:1204
 #, perl-format
 msgid "failed to write %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1102
+#: ../IkiWiki/Plugin/po.pm:1163
 msgid "failed to translate"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1155
+#: ../IkiWiki/Plugin/po.pm:1216
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1258
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr ""
@@ -775,7 +781,17 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/recentchangesdiff.pm:37
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchangesdiff.pm:36
 msgid "(Diff truncated)"
 msgstr ""
 
@@ -794,12 +810,12 @@ msgstr ""
 msgid "%s is not a file"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
@@ -831,29 +847,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:577
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr ""
@@ -868,12 +884,12 @@ msgstr ""
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -894,7 +910,12 @@ msgstr ""
 msgid "shortcut %s points to <i>%s</i>"
 msgstr ""
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr ""
 
@@ -960,16 +981,11 @@ msgstr ""
 msgid "missing id parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, perl-format
-msgid "%s not found"
-msgstr ""
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr ""
 
@@ -988,26 +1004,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:288
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:431
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:472
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1017,11 +1033,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:85
-#, perl-format
-msgid "bad file name %s"
-msgstr ""
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1074,7 +1085,12 @@ msgstr ""
 msgid "building %s, to update its backlinks"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:836
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr ""
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr ""
@@ -1114,56 +1130,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr ""
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr ""
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:198
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr ""
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:218
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr ""
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr ""
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr ""
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr ""
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr ""
 
@@ -1171,39 +1187,49 @@ msgstr ""
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki.pm:538
+#: ../IkiWiki.pm:544
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:584
+#: ../IkiWiki.pm:616
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:614
+#: ../IkiWiki.pm:646
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1306
+#: ../IkiWiki.pm:1396
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:2001
+#: ../IkiWiki.pm:1580
+#, perl-format
+msgid "bad file name %s"
+msgstr ""
+
+#: ../IkiWiki.pm:1880
+#, perl-format
+msgid "template %s not found"
+msgstr ""
+
+#: ../IkiWiki.pm:2163
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2078
+#: ../IkiWiki.pm:2240
 #, perl-format
 msgid "invalid sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2099
+#: ../IkiWiki.pm:2261
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2235
+#: ../IkiWiki.pm:2397
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr ""
index e6fd4b42f1ab32a24d6603b9aa3912cdac540eac..fc5fb5aea6df599da1ae5bed286740230baf0849 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2009-08-16 11:01+0100\n"
 "Last-Translator: Luca Bruno <lucab@debian.org>\n"
 "Language-Team: Italian TP <tp@lists.linux.it>\n"
@@ -50,7 +50,7 @@ msgstr "Preferenze salvate."
 msgid "You are banned."
 msgstr "Avete ricevuto un ban."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Errore"
 
@@ -63,76 +63,81 @@ msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 "Nessuna azione da intraprendere, tutti i notiziari sono già aggiornati."
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "parametro %s mancante"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "nuovo notiziario"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "articoli"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "nuovo"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "in scadenza %s (vecchio di %s giorni)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "in scadenza %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "ultimo controllo %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "controllo notiziario %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "impossibile trovare il notiziario %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "notiziario non trovato"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(codifica UTF-8 non valida eliminata dal notiziario)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(entità del notiziario espanse con escape)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "il notiziario ha fatto andare in crash XML::Feed."
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "creazione nuova pagina %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "errore nell'elaborazione:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr "eliminazione contenitore..."
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "fatto"
 
@@ -162,19 +167,19 @@ msgstr "esiste già una pagina chiamata %s"
 msgid "prohibited by allowed_attachments"
 msgstr "non permesso da allowed_attachments"
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr "nome file dell'allegato non valido"
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr "carica allegato"
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr "generazione automatica dell'indice"
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -191,78 +196,83 @@ msgstr "%s da %s"
 msgid "There are no broken links!"
 msgstr "Non ci sono collegamenti rotti."
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "commento su %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 #, fuzzy
 msgid "moderation"
 msgstr "Moderazione commenti"
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr "formato pagina %s non supportato"
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr "i commenti devono avere un contenuto"
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr "Anonimo"
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+#, fuzzy
+msgid "Comment Moderation"
+msgstr "Moderazione commenti"
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr "nome pagina non valido"
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr "commento su %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr "la pagina «%s» non esiste, impossibile commentarla"
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr "i commenti per la pagina «%s» sono chiusi"
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr "commento trattenuto per moderazione"
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr "Il commento sarà pubblicato dopo la verifica del moderatore"
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr "Aggiunto commento"
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr "Aggiunto commento: %s"
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr "non siete autenticati come amministratore"
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr "Moderazione commenti"
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr "moderazione commento"
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, fuzzy, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -272,23 +282,23 @@ msgstr[1] "Commenti"
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 #, fuzzy
 msgid "Comment"
 msgstr "Commenti"
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr "parametro %s necessario"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr "nessun testo è stato copiato in questa pagina"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr "nessun testo è stato copiato in questa pagina con l'id %s"
@@ -308,32 +318,26 @@ msgstr "%s non è una pagina modificabile"
 msgid "creating %s"
 msgstr "creazione %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "modifica %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr "modello non specificato"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr "corrispondenza non specificata"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr "edittemplate %s registrato per %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "errore nell'elaborazione:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr "occorre specificare formato e testo"
@@ -342,11 +346,11 @@ msgstr "occorre specificare formato e testo"
 msgid "fortune failed"
 msgstr "errore nel fortune"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr "pagina mancante"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr "La pagina %s non esiste."
@@ -360,23 +364,32 @@ msgstr "non è una pagina"
 msgid "%s is an attachment, not a page."
 msgstr "%s è un allegato, non una pagina."
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr "non è permesso modificare %s"
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr "non è permesso lavorare su un file in modalità %s"
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr "non è permesso cambiare la modalità del file"
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+#, fuzzy
+msgid "you are not allowed to revert a merge"
+msgstr "non è permesso modificare %s"
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "errore nel compilare %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Occorre specificare %s quando si usa il plugin %s"
@@ -389,23 +402,23 @@ msgstr "errore nell'eseguire graphviz"
 msgid "prog not a valid graphviz program"
 msgstr "prog non è un programma graphviz valido"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr "tohighlight contiene il tipo di file sconosciuto «%s»"
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr "Sorgente: %s"
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 "attenzione: modulo perl highlight non trovato, verrà passato inalterato"
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "impossibile interpretare gli smile"
@@ -456,12 +469,12 @@ msgstr "i parametri %s e %s non possono essere usati insieme"
 msgid "Add a new post titled:"
 msgstr "Aggiungere un nuovo articolo dal titolo:"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "modello %s non trovato"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "errore nell'elaborazione:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client non trovato, impossibile inviare ping"
 
@@ -490,19 +503,19 @@ msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
 "impossibile caricare il modulo perl Markdown.pm (%s) o /usr/bin/markdown (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr "foglio di stile non trovato"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr "pagina di reindirizzamento non trovata"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr "ciclo di reindirizzamento non ammesso"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 #, fuzzy
 msgid "sort=meta requires a parameter"
 msgstr "sono richiesti i parametri \"to\" e \"from\""
@@ -524,7 +537,7 @@ msgstr "moderazione commento"
 msgid "more"
 msgstr "altro"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "errore nel compilare %s"
@@ -580,21 +593,21 @@ msgstr "reset della password non permesso"
 msgid "Ping received."
 msgstr "Ping ricevuto."
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr "sono richiesti i parametri \"to\" e \"from\""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr "Verrà inviato un ping a %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr "Ignorata la richiesta di ping per il wiki %s (questo wiki è %s)"
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr "LWP non trovato, ping non inviato"
 
@@ -604,19 +617,19 @@ msgstr ""
 "attenzione: è presente un vecchio po4a. Si raccomanda di aggiornare almeno "
 "alla versione 0.35."
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr "%s non è una codifica di lingua valida"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 "%s non è un valore per po_link_to valido, verrà utilizzato po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
@@ -624,21 +637,11 @@ msgstr ""
 "po_link_to=negotiated richiede che venga abilitato usedirs, verrà utilizzato "
 "po_link_to=default"
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr "rigenerazione di tutte le pagine per sistemare i meta-titoli"
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, perl-format
-msgid "building %s"
-msgstr "compilazione di %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr "file PO aggiornati"
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
@@ -646,7 +649,7 @@ msgstr ""
 "Impossibile eliminare una traduzione. Tuttavia, se la pagina principale è "
 "stata eliminata anche le traduzioni lo saranno."
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
@@ -654,55 +657,60 @@ msgstr ""
 "Impossibile rinominare una traduzione. Tuttavia, se la pagina principale è "
 "stata rinominata anche le traduzioni lo saranno."
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr "Il file POT (%s) non esiste"
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "impossibile copiare il file PO di underlay in %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr "impossibile aggiornare %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "impossibile copiare il file POT in %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr "N/D"
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr "impossibile tradurre %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr "file PO obsoleti rimossi"
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr "impossibile scrivere %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr "impossibile tradurre"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 "dati gettext non validi, tornare alle pagina precedente per continuare le "
 "modifiche"
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "voto"
@@ -802,6 +810,16 @@ msgstr ""
 "occorrono alternativamente i parametri \"percent\" o \"totalpages\" e "
 "\"donepages\""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, fuzzy, perl-format
+msgid "confirm reversion of %s"
+msgstr "conferma rimozione di %s"
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr "(Diff troncato)"
@@ -821,16 +839,16 @@ msgstr "%s non è in src, quindi non può essere eliminato"
 msgid "%s is not a file"
 msgstr "%s non è un file"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr "conferma rimozione di %s"
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr "Selezionare l'allegato da rimuovere."
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr "rimosso"
 
@@ -858,29 +876,29 @@ msgstr "%s esiste già"
 msgid "%s already exists on disk"
 msgstr "%s già presente su disco"
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr "rinomina di %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr "Rinomina anche SottoPagine e allegati"
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr "Si può rinominare un solo allegato alla volta."
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr "Selezionare l'allegato da rinominare."
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr "rinomina %s in %s"
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr "aggiornamento per rinomina di %s in %s"
@@ -895,12 +913,12 @@ msgstr "impossibile leggere %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
-#, perl-format
-msgid "need Digest::SHA1 to index %s"
+#: ../IkiWiki/Plugin/search.pm:195
+#, fuzzy, perl-format
+msgid "need Digest::SHA to index %s"
 msgstr "è necessario Digest::SHA1 per l'indice di %s"
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr "cerca"
 
@@ -921,7 +939,12 @@ msgstr "parametro nome o url mancante"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "la scorciatoia %s punta a <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, fuzzy, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr "il plugin scorciatoia non può funzionare senza %s"
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr "impossibile interpretare gli smile"
 
@@ -987,16 +1010,11 @@ msgstr "creazione nuova pagina %s"
 msgid "missing id parameter"
 msgstr "parametro id mancante"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "notiziario non trovato"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr "codice tex mancante"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr "impossibile generare l'immagine dal codice"
 
@@ -1015,22 +1033,22 @@ msgstr "plugin"
 msgid "enable %s?"
 msgstr "abilitare %s?"
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr "il file di setup di questo wiki non è noto"
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr "principale"
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 "Le sottostanti modifiche alla configurazione richiedono la ricompilazione "
 "del wiki."
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
@@ -1038,7 +1056,7 @@ msgstr ""
 "Affinché le sottostanti modifiche alla configurazione abbiano effetto, "
 "occorre ricostruire il wiki."
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr "Errore: %s è terminato con errore (%s). Modifiche al setup scartate."
@@ -1048,11 +1066,6 @@ msgstr "Errore: %s è terminato con errore (%s). Modifiche al setup scartate."
 msgid "cannot determine id of untrusted committer %s"
 msgstr "impossibile determinare l'id del committer non fidato %s"
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr "nome file %s scorretto"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1067,47 +1080,52 @@ msgstr ""
 "collegamento simbolico trovato nel percorso srcdir (%s) -- impostare "
 "allow_symlinks_before_srcdir per abilitare questa configurazione"
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "ignorato il file dal nome scorretto %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr "%s ha diverse pagine sorgenti possibili"
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "rimozione della vecchia pagina %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr "compilazione di %s, che è collegato a %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "rimozione di %s, non più richiesto da %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr "compilazione di %s, che dipende da %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "compilazione di %s, per aggiornare i collegamenti ai precedenti"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr "compilazione di %s"
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: impossibile compilare %s"
@@ -1148,57 +1166,57 @@ msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 "** Plugin %s disabilitato, a causa della seguente segnalazione di errore:"
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "generazione contenitori..."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s non sembra essere eseguibile"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "impossibile creare un contenitore che utilizzi un file di setup"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "nome del file del contenitore non specificato"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "errore nel compilare %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s generato con successo"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "utilizzo: ikiwiki [opzioni] sorgente destinazione"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr "       ikiwiki --setup configfile"
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr "utilizzo: --set var=valore"
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 #, fuzzy
 msgid "usage: --set-yaml var=value"
 msgstr "utilizzo: --set var=valore"
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "generazione contenitori..."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "ricostruzione wiki..."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "aggiornamento wiki..."
 
@@ -1206,39 +1224,49 @@ msgstr "aggiornamento wiki..."
 msgid "Discussion"
 msgstr "Discussione"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Occorre specificare l'url del wiki tramite --url quando si usa --cgi"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr "impossibile usare più plugin rcs"
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr "impossibile caricare il plugin esterno per il plugin %s: %s"
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "ciclo del preprocessore individuato su %s alla profondità %i"
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr "nome file %s scorretto"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "modello %s non trovato"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr "sì"
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "ordinamento %s sconosciuto"
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "ordinamento %s sconosciuto"
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr "impossibile trovare pagine corrispondenti: %s"
@@ -1263,6 +1291,13 @@ msgstr "Quale utente (openid o del wiki) sarà l'amministratore?"
 msgid "What is the domain name of the web server?"
 msgstr "Qual è il nome del dominio del server web?"
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "notiziario non trovato"
+
+#~ msgid "rebuilding all pages to fix meta titles"
+#~ msgstr "rigenerazione di tutte le pagine per sistemare i meta-titoli"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Occorre prima effettuare l'accesso."
 
index 299c22e7f36360763f7921e759ff919d6363bab8..dc78149f32a788f1308e8ca60f46e70f14ead9c3 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 1.51\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2007-04-27 22:05+0200\n"
 "Last-Translator: Pawel Tecza <ptecza@net.icm.edu.pl>\n"
 "Language-Team: Debian L10n Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -54,7 +54,7 @@ msgstr "Preferencje zapisane."
 msgid "You are banned."
 msgstr "Twój dostęp został zabroniony przez administratora."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Błąd"
 
@@ -66,77 +66,82 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "brakujący parametr %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "nowy kanał RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "wpisy"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "nowy wpis"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "wygasający wpis %s (ma już %s dni)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "wygasający wpis %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "sprawdzanie kanału RSS %s..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "nie znaleziono kanału RSS pod adresem %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 #, fuzzy
 msgid "feed not found"
 msgstr "nieznaleziony kanał RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, fuzzy, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "Nieprawidłowe kodowanie UTF-8 usunięte z kanału RSS"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "awaria kanału RSS w module XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "tworzenie nowej strony %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "awaria w trakcie przetwarzania:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "gotowe"
 
@@ -169,19 +174,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -196,77 +201,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr "Wszystkie odnośniki są aktualne!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "tworzenie %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, fuzzy, perl-format
 msgid "commenting on %s"
 msgstr "tworzenie %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -276,22 +285,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, fuzzy, perl-format
 msgid "%s parameter is required"
 msgstr "Parametry \"test\" i \"then\" są wymagane"
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -311,34 +320,28 @@ msgstr "Strona %s nie może być edytowana"
 msgid "creating %s"
 msgstr "tworzenie %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "edycja %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 #, fuzzy
 msgid "template not specified"
 msgstr "nieznaleziony szablon %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 #, fuzzy
 msgid "match not specified"
 msgstr "nieokreślona nazwa pliku osłony"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "awaria w trakcie przetwarzania:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -347,12 +350,12 @@ msgstr ""
 msgid "fortune failed"
 msgstr "awaria fortunki"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 #, fuzzy
 msgid "missing page"
 msgstr "brakujące wartości"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -367,23 +370,31 @@ msgstr "awaria w trakcie odczytu %s: %s"
 msgid "%s is an attachment, not a page."
 msgstr "Strona %s nie może być edytowana"
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "awaria w trakcie kompilowania %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Wtyczka do wyszukiwarka wymaga podania %s"
@@ -397,22 +408,22 @@ msgstr "awaria w trakcie uruchamiania wtyczki graphviz"
 msgid "prog not a valid graphviz program"
 msgstr "prog nie jest poprawnym programem graphviz"
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "awaria w trakcie przetwarzania emitoikonki"
@@ -467,12 +478,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr "Tytuł nowego wpisu"
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "nieznaleziony szablon %s"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "awaria w trakcie przetwarzania:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
 
@@ -504,22 +515,22 @@ msgstr ""
 "Awaria w trakcie ładowania perlowego modułu Markdown.pm (%s) lub "
 "uruchamiania programu /usr/bin/markdown (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 #, fuzzy
 msgid "stylesheet not found"
 msgstr "nieznaleziony szablon ze stylami CSS"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 #, fuzzy
 msgid "redir page not found"
 msgstr "nieznaleziony kanał RSS"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 #, fuzzy
 msgid "redir cycle is not allowed"
 msgstr "nieznaleziony kanał RSS"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -539,7 +550,7 @@ msgstr ""
 msgid "more"
 msgstr "więcej"
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "awaria w trakcie kompilowania %s"
@@ -593,21 +604,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, fuzzy, perl-format
 msgid "Will ping %s"
 msgstr "edycja %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 #, fuzzy
 msgid "LWP not found, not pinging"
 msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
@@ -616,97 +627,92 @@ msgstr "Nieznaleziony moduł RPC::XML::Client, brak możliwości pingowania"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, fuzzy, perl-format
 msgid "%s is not a valid language code"
 msgstr "Strona %s nie może być edytowana"
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "edycja %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "awaria w trakcie kompilowania %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "awaria w trakcie kompilowania %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "awaria w trakcie kompilowania %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "awaria w trakcie zmiany rozmiaru: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "awaria w trakcie zapisu %s: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "awaria w trakcie uruchamiania dot"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "głosuj"
@@ -806,6 +812,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -827,16 +843,16 @@ msgstr ""
 msgid "%s is not a file"
 msgstr "Strona %s nie może być edytowana"
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -865,29 +881,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, fuzzy, perl-format
 msgid "rename %s"
 msgstr "renderowanie %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, fuzzy, perl-format
 msgid "update for rename of %s to %s"
 msgstr "aktualizacja stron wiki %s: %s przez użytkownika %s"
@@ -902,12 +918,12 @@ msgstr "awaria w trakcie odczytu %s: %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -929,7 +945,12 @@ msgstr "brakujący parametr name lub url"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "skrót %s wskazuje na adres <i>%s</i>"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 #, fuzzy
 msgid "failed to parse any smileys"
 msgstr "awaria w trakcie przetwarzania emitoikonki"
@@ -1004,17 +1025,12 @@ msgstr "tworzenie nowej strony %s"
 msgid "missing id parameter"
 msgstr "brakujący parametr id"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "nie znaleziono %s"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 #, fuzzy
 msgid "missing tex code"
 msgstr "brakujące wartości"
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 #, fuzzy
 msgid "failed to generate image from code"
 msgstr "awaria w trakcie zmiany rozmiaru: %s"
@@ -1034,26 +1050,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1063,11 +1079,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, fuzzy, perl-format
-msgid "bad file name %s"
-msgstr "pomijanie nieprawidłowej nazwy pliku %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1080,47 +1091,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "pomijanie nieprawidłowej nazwy pliku %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "usuwanie starej strony %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "renderowanie %s z odnośnikiem do %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "usuwanie %s nie tworzonego już przez %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "renderowanie %s zależącego od %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "renderowanie %s w celu aktualizacji powrotnych odnośników"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "edycja %s"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: awaria w trakcie tworzenia %s"
@@ -1160,56 +1176,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "tworzenie osłon..."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "osłona %s nie jest wykonywalna"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "awaria w trakcie tworzenia osłony używającej pliku konfiguracyjnego"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "nieokreślona nazwa pliku osłony"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "awaria w trakcie kompilowania %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "pomyślnie utworzono %s"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "użycie: ikiwiki [parametry] źródło cel"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "tworzenie osłon..."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "przebudowywanie wiki..."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "odświeżanie wiki..."
 
@@ -1217,41 +1233,51 @@ msgstr "odświeżanie wiki..."
 msgid "Discussion"
 msgstr "Dyskusja"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Użycie parametru --cgi wymaga podania adresu URL do wiki za pomocą parametru "
 "--url"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i"
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, fuzzy, perl-format
+msgid "bad file name %s"
+msgstr "pomijanie nieprawidłowej nazwy pliku %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "nieznaleziony szablon %s"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "nieznany sposób sortowania %s"
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "nieznany sposób sortowania %s"
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "awaria w trakcie odczytu %s: %s"
@@ -1276,6 +1302,10 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "nie znaleziono %s"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Proszę najpierw zalogować się."
 
index 6b84f7d54dc183c647f3458aa483802b264e2895..126aa8e17d0949d0c9a55477268464936092ff33 100755 (executable)
@@ -22,7 +22,8 @@ foreach my $file (@$files) {
        $pagesources{$page}=$file; # used by po plugin functions
 }
 
-foreach my $ll (keys %{$config{po_slave_languages}}) {
+foreach my $lang (@{$config{po_slave_languages}}) {
+       my ($ll, $name)=IkiWiki::Plugin::po::splitlangpair($lang);
        $config{destdir}="../underlays/locale/$ll";
 
        foreach my $file (@$files) {
index 6288101e84ef11f766f9f3fb00013a9b04e1e74a..5a2d7b6666eccc40821ed7822bfaea25e5f57ecf 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2007-01-10 23:47+0100\n"
 "Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -51,7 +51,7 @@ msgstr "Inställningar sparades."
 msgid "You are banned."
 msgstr "Du är bannlyst."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Fel"
 
@@ -63,77 +63,82 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "mall saknar id-parameter"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "ny kanal"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "inlägg"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "ny"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "låter %s gå ut (%s dagar gammal)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "låter %s gå ut"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "kontrollerar kanalen %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "kunde inte hitta kanalen på %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 #, fuzzy
 msgid "feed not found"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "kanalen kraschade XML::Feed!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "skapar nya sidan %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "misslyckades med att behandla mall:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "klar"
 
@@ -166,19 +171,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -193,77 +198,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr "Det finns inga trasiga länkar!"
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "skapar %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, fuzzy, perl-format
 msgid "commenting on %s"
 msgstr "skapar %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -273,22 +282,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -308,34 +317,28 @@ msgstr ""
 msgid "creating %s"
 msgstr "skapar %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "redigerar %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 #, fuzzy
 msgid "template not specified"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 #, fuzzy
 msgid "match not specified"
 msgstr "filnamn för wrapper har inte angivits"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "misslyckades med att behandla mall:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -344,12 +347,12 @@ msgstr ""
 msgid "fortune failed"
 msgstr "fortune misslyckades"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 #, fuzzy
 msgid "missing page"
 msgstr "mall saknar id-parameter"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -364,23 +367,31 @@ msgstr "kan inte läsa %s: %s"
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "misslyckades med att kompilera %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Måste ange %s när sökinsticket används"
@@ -394,22 +405,22 @@ msgstr "linkmap misslyckades att köra dot"
 msgid "prog not a valid graphviz program"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "misslyckades med att tolka smilisar, inaktiverar instick"
@@ -462,12 +473,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "mallen %s hittades inte"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "misslyckades med att behandla mall:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "RPC::XML::Client hittades inte, pingar inte"
 
@@ -497,22 +508,22 @@ msgstr ""
 "misslyckades med att läsa in Perl-modulen Markdown.pm (%s) eller /usr/bin/"
 "markdown (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 #, fuzzy
 msgid "stylesheet not found"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 #, fuzzy
 msgid "redir page not found"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 #, fuzzy
 msgid "redir cycle is not allowed"
 msgstr "mallen %s hittades inte"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -532,7 +543,7 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "misslyckades med att kompilera %s"
@@ -586,21 +597,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, fuzzy, perl-format
 msgid "Will ping %s"
 msgstr "redigerar %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 #, fuzzy
 msgid "LWP not found, not pinging"
 msgstr "RPC::XML::Client hittades inte, pingar inte"
@@ -609,97 +620,92 @@ msgstr "RPC::XML::Client hittades inte, pingar inte"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "redigerar %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "misslyckades med att kompilera %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "misslyckades med att kompilera %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "misslyckades med att kompilera %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "misslyckades med att skriva %s: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "misslyckades med att skriva %s: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "linkmap misslyckades att köra dot"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "röst"
@@ -798,6 +804,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -817,16 +833,16 @@ msgstr "%s är låst av %s och kan inte redigeras"
 msgid "%s is not a file"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -855,29 +871,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, fuzzy, perl-format
 msgid "rename %s"
 msgstr "ritar upp %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, fuzzy, perl-format
 msgid "update for rename of %s to %s"
 msgstr "uppdatering av %s, %s av %s"
@@ -892,12 +908,12 @@ msgstr "misslyckades med att skriva %s: %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -919,7 +935,12 @@ msgstr "genväg saknar parameter för namn eller url"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "genvägen %s pekar på %s"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 #, fuzzy
 msgid "failed to parse any smileys"
 msgstr "misslyckades med att tolka smilisar, inaktiverar instick"
@@ -992,16 +1013,11 @@ msgstr "skapar nya sidan %s"
 msgid "missing id parameter"
 msgstr "mall saknar id-parameter"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "mallen %s hittades inte"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 #, fuzzy
 msgid "failed to generate image from code"
 msgstr "misslyckades med att skriva %s: %s"
@@ -1021,26 +1037,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1050,11 +1066,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, fuzzy, perl-format
-msgid "bad file name %s"
-msgstr "hoppar över felaktigt filnamn %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1067,47 +1078,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "hoppar över felaktigt filnamn %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "tar bort gammal sida %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "ritar upp %s, vilken länkar till %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "tar bort %s, som inte längre ritas upp av %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "ritar upp %s, vilken är beroende av %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "ritar upp %s, för att uppdatera dess bakåtlänkar"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "redigerar %s"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: kan inte rita upp %s"
@@ -1147,56 +1163,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "genererar wrappers.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "%s verkar inte vara körbar"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "kan inte skapa en wrapper som använder en konfigurationsfil"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "filnamn för wrapper har inte angivits"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "misslyckades med att kompilera %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "generering av %s lyckades"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "användning: ikiwiki [flaggor] källa mål"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "genererar wrappers.."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "bygger om wiki.."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "uppdaterar wiki.."
 
@@ -1204,39 +1220,49 @@ msgstr "uppdaterar wiki.."
 msgid "Discussion"
 msgstr "Diskussion"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr "Måste ange url till wiki med --url när --cgi används"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "%s förbehandlingsslinga detekterades på %s, djup %i"
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, fuzzy, perl-format
+msgid "bad file name %s"
+msgstr "hoppar över felaktigt filnamn %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "mallen %s hittades inte"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "okänd sorteringstyp %s"
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "okänd sorteringstyp %s"
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "kan inte läsa %s: %s"
@@ -1261,6 +1287,10 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "mallen %s hittades inte"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Du måste logga in först."
 
index 165dfc59f37628f396c2a0c27a07d29d82e9cad1..6b904a945b535d2a856d5623a4a668d0527f9b0c 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.20091031\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2009-11-08 03:04+0200\n"
 "Last-Translator: Recai Oktaş <roktas@debian.org>\n"
 "Language-Team: Turkish <debian-l10n-turkish@lists.debian.org>\n"
@@ -48,7 +48,7 @@ msgstr "Tercihler kaydedildi."
 msgid "You are banned."
 msgstr ""
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Hata"
 
@@ -60,76 +60,80 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, perl-format
 msgid "missing %s parameter"
 msgstr "%s parametresi eksik"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "yeni özet akışı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "gönderi"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "yeni"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "%s için zaman aşımı (%s gün eski)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "%s için zaman aşımı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr "son güncelleme: %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "%s özet akışı denetleniyor ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "%s özet akışı bulunamadı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 msgid "feed not found"
 msgstr "özet akışı bulunamadı"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr "(geçersiz UTF-8 dizgisi özet akışından çıkarıldı)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr "(özet akışı girdileri işlendi)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "özet akışı XML::Feed'in çakılmasına yol açtı!"
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "%s için yeni sayfa oluşturuluyor"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+msgid "failed to process template:"
+msgstr ""
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr ""
 
@@ -159,19 +163,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -186,77 +190,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, perl-format
 msgid "this comment needs %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, perl-format
 msgid "commenting on %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -266,22 +274,22 @@ msgstr[1] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -301,31 +309,26 @@ msgstr ""
 msgid "creating %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 msgid "template not specified"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 msgid "match not specified"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-msgid "failed to process template:"
-msgstr ""
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -334,11 +337,11 @@ msgstr ""
 msgid "fortune failed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 msgid "missing page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -352,23 +355,31 @@ msgstr ""
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, perl-format
+msgid "Failed to revert commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr ""
@@ -381,22 +392,22 @@ msgstr ""
 msgid "prog not a valid graphviz program"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 msgid "htmltidy failed to parse this html"
 msgstr ""
 
@@ -445,12 +456,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:342
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
 #, perl-format
-msgid "template %s not found"
+msgid "failed to process template %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr ""
 
@@ -477,19 +488,19 @@ msgstr ""
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 msgid "stylesheet not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 msgid "redir page not found"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 msgid "redir cycle is not allowed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -509,7 +520,7 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, perl-format
 msgid "failed to load openid module: "
 msgstr ""
@@ -562,21 +573,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, perl-format
 msgid "Will ping %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 msgid "LWP not found, not pinging"
 msgstr ""
 
@@ -584,96 +595,91 @@ msgstr ""
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, perl-format
-msgid "building %s"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, perl-format
 msgid "failed to update %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, perl-format
 msgid "failed to translate %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, perl-format
 msgid "failed to write %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 msgid "failed to translate"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr ""
@@ -771,6 +777,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -790,16 +806,16 @@ msgstr ""
 msgid "%s is not a file"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -827,29 +843,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, perl-format
 msgid "rename %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, perl-format
 msgid "update for rename of %s to %s"
 msgstr ""
@@ -864,12 +880,12 @@ msgstr ""
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -890,7 +906,12 @@ msgstr ""
 msgid "shortcut %s points to <i>%s</i>"
 msgstr ""
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 msgid "failed to parse any smileys"
 msgstr ""
 
@@ -956,16 +977,11 @@ msgstr "%s için yeni sayfa oluşturuluyor"
 msgid "missing id parameter"
 msgstr ""
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "özet akışı bulunamadı"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 msgid "failed to generate image from code"
 msgstr ""
 
@@ -984,26 +1000,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1013,11 +1029,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, perl-format
-msgid "bad file name %s"
-msgstr ""
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1030,47 +1041,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, perl-format
 msgid "removing obsolete %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, perl-format
 msgid "building %s, which links to %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, perl-format
 msgid "building %s, which depends on %s"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, perl-format
 msgid "building %s, to update its backlinks"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, perl-format
+msgid "building %s"
+msgstr ""
+
+#: ../IkiWiki/Render.pm:839
 #, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr ""
@@ -1110,56 +1126,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr ""
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr ""
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr ""
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr ""
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr ""
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr ""
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr ""
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr ""
 
@@ -1167,39 +1183,49 @@ msgstr ""
 msgid "Discussion"
 msgstr ""
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr ""
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, perl-format
+msgid "bad file name %s"
+msgstr ""
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr ""
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, perl-format
 msgid "invalid sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr ""
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, perl-format
 msgid "cannot match pages: %s"
 msgstr ""
@@ -1224,5 +1250,9 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "özet akışı bulunamadı"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Önce sisteme giriş yapmanız gerekiyor."
index 8d3516cff14a789341e25ae6c08d56feb397809e..ebe7251cf613074542865357489b22101447d26d 100644 (file)
@@ -6,14 +6,14 @@ use IkiWiki::Setup::Standard {
        # List here all languages that have translations.
        # Listing languages without active translations
        # will excessively bloat things.
-        po_slave_languages => {
-               'es' => 'Español',
-               'de' => 'Deutsch',
-               'fr' => 'Français',
-               'da' => 'Dansk',
-               'cs' => 'česky',
-        },
-       po_master_language => { 'code' => 'en', 'name' => 'English' },
+        po_slave_languages => [
+               'es|Español',
+               'de|Deutsch',
+               'fr|Français',
+               'da|Dansk',
+               'cs|česky',
+       ],
+       po_master_language => 'en|English',
        po_translatable_pages => "*",
        add_plugins => [qw{po}],
 
index 5516a95e0cb7efa596172c2fb6c313f8ce755da9..2d5e03b88b523ab8d52a9c813fe96028619c24bf 100644 (file)
@@ -2,12 +2,11 @@
 # Copyright (C) 2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
 # This file is distributed under the same license as the PACKAGE Ikiwiki.
 #
-#, fuzzy
 msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-08-30 09:46+0200\n"
+"PO-Revision-Date: 2010-07-21 16:41+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -71,4 +70,4 @@ msgstr "[[ikiwiki/searching]]"
 
 #. type: Bullet: '* '
 msgid "[[templates]]"
-msgstr ""
+msgstr "[[templates]]"
index 2f41cf76c1e820c8d0eea05a15e0bcea5164a50f..455c8146783f928560036f77981760637b491344 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-08-25 09:52+0200\n"
+"PO-Revision-Date: 2010-07-20 21:25+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -50,12 +50,12 @@ msgid ""
 "If you have an account with some of the larger web service providers, you "
 "might already have an OpenID.  [Directory of OpenID providers](http://"
 "openiddirectory.com/openid-providers-c-1.html)"
-msgstr ""
+msgstr "Si vous possédez un compte sur l'un des nombreux fournisseurs de services web, il se peut que vous ayez déjà un OpenID. [Répertoire des fournisseurs d'OpenID](http://openiddirectory.com/openid-providers-c-1.html)."
 
 #. type: Plain text
 #, no-wrap
 msgid "[[!if test=\"enabled(openid)\" then=\"\"\"\n"
-msgstr ""
+msgstr "[[!if test=\"enabled(openid)\" then=\"\"\n"
 
 #. type: Plain text
 msgid ""
index b95b818b1822ce7b1a4b264cf6300f669bb0487a..aef5c74bffe7feac7ed78cd8d0b1b98035cd2aab 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.141\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2010-07-16 10:47+0200\n"
+"PO-Revision-Date: 2010-07-21 17:21+0200\n"
 "Last-Translator: Steve Petruzzello <dlist@bluewin.ch>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -121,6 +121,32 @@ msgid ""
 "* \"`postcomment(glob)`\" - matches only when comments are being \n"
 "  posted to a page matching the specified glob\n"
 msgstr ""
+"* \"`glob(motif)`\" - recherche les pages et fichiers qui correspondent au motif.\n"
+"  N'écrire que le motif lui-même est un raccourci pour cette fonction.\n"
+"* \"`page(motif)`\" - comme `glob()`, mais ne recherche que des pages, pas des fichiers.\n"
+"* \"`link(page)`\" -  correspond aux pages ayant un lien vers cette page (ou motif)\n"
+"* \"`tagged(étiquette)`\" - correspond aux pages qui sont marquées ou qui sont\n"
+"  liées à l'étiquette donnée (ou des étiquettes correspondant à un motif).\n"
+"* \"`backlink(page)`\" -  correspond seulement aux pages qui sont pointées (lien) par la page donnée.\n"
+"* \"`creation_month(mois)`\" - correspond aux pages créées durant ce mois\n"
+"* \"`creation_day(jour)`\" - ou au jour de ce mois\n"
+"* \"`creation_year(année)`\" - ou année\n"
+"* \"`created_after(page)`\" - correspond aux fichiers créés après la création de la page donnée.\n"
+"* \"`created_before(page)`\\\" - correspond aux fichiers créés avant la création de la page donnée.\n"
+"* \"`internal(motif)`\" - comme `glob()`,  mais correspond en plus aux\n"
+"  pages à usage interne que la fonction glob ne trouve pas en général.\n"
+"* \"`title(motif)`\", \"`author(motif)`\", \"`authorurl(motif)`\",\n"
+"  \"`license(motif)`\", \"`copyright(motif)`\", \"`guid(motif)`\"\n"
+"  -  renvoient les pages qui possèdent les métadonnées correspondant au motif donné.\n"
+"* \"`user(username)`\" - teste si une modification est faite par l'identifiant donné.\n"
+"  Si openid est activé, on peut aussi l'utiliser. L'identifiant peut contenir des expressions régulières.\n"
+"  Par exemple, pour obtenir tous les utilisateurs openid, utilisez l'expression : `user(*://*)`.\n"
+"* \"`admin()`\" - teste si une modification par un administrateur du wiki est en cours.\n"
+"* \"`ip(adresse)`\" - teste si une modification par l'IP donnée est en cours.\n"
+"* \"`comment(motif)`\" - renvoient les commentaires d'une page correspondant au motif donné.\n"
+"* \"`comment_pending(motif)`\" - renvoient les commentaires non modérés, en attente.\n"
+"* \"`postcomment(motif)`\" -  ne correspond que si des commentaires sont postés\n"
+"  vers une page correspondant au motif donné.\n"
 
 #. type: Plain text
 msgid ""
index 61264b4063142f0228ba4cb9505ba732b66d9641..5df0b71767b11141324b0989dfa413222f870da9 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-08-25 10:31+0200\n"
+"PO-Revision-Date: 2010-07-21 17:26+0200\n"
 "Last-Translator: Alexandre Dupas <alexandre.dupas@gmail.com>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -33,7 +33,6 @@ msgstr ""
 "répertoire plein de pages."
 
 #. type: Plain text
-#, fuzzy
 #| msgid ""
 #| "To add a SubPage, just make a subdirectory and put pages in it. For "
 #| "example, this page is SubPage.mdwn in this wiki's source, and there is "
@@ -44,12 +43,7 @@ msgid ""
 "this page is subpage.mdwn in this wiki's source, and there is also a subpage "
 "subdirectory, which contains subpage/linkingrules.mdwn. Subpages can be "
 "nested as deeply as you'd like."
-msgstr ""
-"Pour ajouter une sous-page, faites simplement un sous-répertoire et mettez-y "
-"les pages. Par exemple, cette page est `subpage.mdwn` dans les sources de ce "
-"wiki et il y a également un sous-répertoire `subpage`, qui contient `subpage/"
-"linkingrules.mdwn`. Les sous-pages peuvent être emboîtées autant que vous le "
-"souhaitez."
+msgstr "Pour ajouter une sous-page, faites simplement un sous-répertoire et mettez-y les pages. Par exemple, cette page est `subpage.mdwn` dans les sources de ce wiki et il y a également un sous-répertoire subpage, qui contient `subpage/linkingrules.mdwn`. Les sous-pages peuvent être emboîtées autant que vous le souhaitez."
 
 #. type: Plain text
 msgid "Linking to and from a SubPage is explained in [[LinkingRules]]."
index f527ef36454e48529312a8564026a4cfb0dafbc6..9998bbe548d679b161629b6b5151df6208481a60 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-08-28 16:05+0200\n"
+"PO-Revision-Date: 2010-07-21 17:30+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -76,22 +76,19 @@ msgstr ""
 "quelque chose comme `\\[[WikiLink#foo]]`."
 
 #. type: Plain text
-#, fuzzy
 #| msgid ""
 #| "Also, if the file linked to by a WikiLink looks like an image, it will be "
 #| "displayed inline on the page."
 msgid ""
 "If the file linked to by a WikiLink looks like an image, it will be "
 "displayed inline on the page."
-msgstr ""
-"De plus, quand le fichier pointé par un WikiLink ressemble à une image, il "
-"est affiché au fil du texte sur la page."
+msgstr "Quand le fichier pointé par un WikiLink ressemble à une image, il est affiché au fil du texte sur la page."
 
 #. type: Plain text
 msgid ""
 "You can also put an url in a WikiLink, to link to an external page.  Email "
 "addresses can also be used to generate a mailto link."
-msgstr ""
+msgstr "Vous pouvez mettre une URL dans un WikiLink pour lier une page externe. Des adresses électroniques peuvent servir à créer des liens mailto."
 
 #~ msgid "Directives and WikiLinks"
 #~ msgstr "Directives et WikiLinks"
index f7faadb150fb6b3d0de984d6415d9083ae8e2c32..715ef92ff4096bdccb0c0129746725de74653e68 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-09-12 08:40+0200\n"
+"PO-Revision-Date: 2010-07-22 17:30+0200\n"
 "Last-Translator: Alexandre Dupas <alexandre.dupas@gmail.com>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -19,6 +19,8 @@ msgid ""
 "[[Ikiwiki]] uses many templates for many purposes. By editing its templates, "
 "you can fully customise this site."
 msgstr ""
+"[[Ikiwiki]] se sert de modèles dans beaucoup de cas. En modifiant ces "
+"modèles, vous pouvez « personnaliser » ce wiki."
 
 #. type: Plain text
 msgid ""
@@ -27,6 +29,10 @@ msgid ""
 "first. Customised templates can also be placed inside the \"templates/\" "
 "directory in your wiki's source."
 msgstr ""
+"Les modèles sont situés dans le répertoire `/usr/share/ikiwiki/templates`. "
+"Le paramètre `templatedir` peut être utilisé pour commencer la recherche "
+"dans un autre répertoire. Des modèles personnalisés peuvent être placés dans "
+"dans le sous-répertoire `templates/` du répertoire source du wiki."
 
 #. type: Plain text
 msgid ""
@@ -34,19 +40,20 @@ msgid ""
 "things like conditionals and loops in templates and is pretty easy to learn. "
 "All you really need to know to modify templates is this:"
 msgstr ""
+"Ikiwiki utilise le module HTML::Template pour créer ses modèles. Ce module, "
+"facile à étudier, permet l'utilisation de conditions et de boucles. Voici ce "
+"que vous avez besoin de savoir :"
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "To insert the raw value of a variable, with wiki markup not yet converted "
 #| "to html, use `<TMPL_VAR raw_variable>`."
 msgid "To insert the value of a template variable, use `<TMPL_VAR variable>`."
 msgstr ""
-"Pour insérer la valeur brute d'une variable, sans que la syntaxe wiki soit "
-"convertie en html, utilisez `<TMPL_VAR raw_variable>`."
+"Pour insérer la valeur d'une variable, sans que la syntaxe wiki soit "
+"convertie en HTML, utilisez `<TMPL_VAR variable>`."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "To make a block of text conditional on a variable being set use `<TMPL_IF "
 #| "NAME=\"variable\">text</TMPL_IF>`."
@@ -55,10 +62,9 @@ msgid ""
 "variable>text</TMPL_IF>`."
 msgstr ""
 "Pour écrire un bloc de texte si une variable est définie, utilisez `<TMPL_IF "
-"NAME=\"variable\">texte</TMPL_IF>`."
+"variable>texte</TMPL_IF>`."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "To use one block of text if a variable is set and a second if it's not, "
 #| "use `<TMPL_IF NAME=\"variable\">text<TMPL_ELSE>other text</TMPL_IF>`"
@@ -67,19 +73,19 @@ msgid ""
 "`<TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>`"
 msgstr ""
 "Pour utiliser un bloc de texte si une variable est définie et un autre dans "
-"le cas contraire, utilisez `<TMPL_IF NAME=\"variable\">texte<TMPL_ELSE>autre "
-"texte</TMPL_IF>`"
+"le cas contraire, utilisez `<TMPL_IF variable>texte<TMPL_ELSE>autre texte</"
+"TMPL_IF>`"
 
 #. type: Plain text
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
 msgid "[[!if test=\"enabled(template)\" then=\"\"\"\n"
-msgstr "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
+msgstr "[[!if test=\"enabled(template)\" then=\"\"\"\n"
 
 #. type: Title ##
 #, no-wrap
 msgid "template pages"
-msgstr ""
+msgstr "pages modèles"
 
 #. type: Plain text
 msgid ""
@@ -87,17 +93,20 @@ msgid ""
 "wiki pages to be used as templates, filled out and inserted into other pages "
 "in the wiki."
 msgstr ""
+"La directive [[!iki ikiwiki/directive/template desc=\"template\"]] permet "
+"d'utiliser des pages de wiki comme modèles. Ces modèles peuvent être remplis "
+"et insérés dans d'autres pages du wiki."
 
 #. type: Plain text
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
 msgid "[[!if test=\"enabled(edittemplate)\" then=\"\"\"\n"
-msgstr "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
+msgstr "[[!if test=\"enabled(edittemplate)\" then=\"\"\"\n"
 
 #. type: Title ##
 #, no-wrap
 msgid "default content for new pages"
-msgstr ""
+msgstr "contenu par défaut des nouvelles pages"
 
 #. type: Plain text
 msgid ""
@@ -105,17 +114,22 @@ msgid ""
 "can be used to make new pages default to containing text from a template "
 "page, which can be filled out as the page is edited."
 msgstr ""
+"La directive [[!iki ikiwiki/directive/edittemplate desc=\"edittemplate\"]] "
+"permet que le contenu par défaut des nouvelles pages soit le texte d'une "
+"page modèle, qui peut être remplie en même temps que la page est modifiée."
 
 #. type: Plain text
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
 msgid ""
 "[[!if test=\"(enabled(template) or enabled(edittemplate))\n"
 "and enabled(inline)\" then=\"\"\"\n"
-msgstr "[[!if test=\"enabled(template) and enabled(inline)\" then=\"\"\"\n"
+msgstr ""
+"[[!if test=\"enabled(template) or enabled(edittemplate))\n"
+"and enabled(inline)\" then=\"\"\"\n"
 
 #. type: Plain text
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid ""
 #| "[[!inline pages=\"templates/* and !*/discussion\" feeds=no archive=yes\n"
 #| "sort=title template=titlepage]]\n"
@@ -124,26 +138,31 @@ msgid ""
 "feeds=no archive=yes sort=title template=titlepage\n"
 "rootpage=templates postformtext=\"Add a new template named:\"]]\n"
 msgstr ""
-"[[!inline pages=\"templates/* and !*/discussion\" feeds=no archive=yes\n"
-"sort=title template=titlepage]]\n"
+"[[!inline pages=\"templates/* and !*.tmpl and !templates/*/* and !*/discussion\"\n"
+"feeds=no archive=yes sort=title template=titlepage\n"
+"rootpage=templates postformtext=\"Ajouter un nouveau modèle :\"]]\n"
 
 #. type: Title ##
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid "Using a template"
 msgid "wiki templates"
-msgstr "Utiliser un modèle"
+msgstr "modèles du wiki"
 
 #. type: Plain text
 msgid ""
 "These templates are used to build the wiki. The aim is to keep almost all "
 "html out of ikiwiki and in the templates."
 msgstr ""
+"Ces modèles permettent la construction du wiki. Le but est de mettre presque "
+"tout le formatage HTML dans des modèles, hors de ikiwiki."
 
 #. type: Bullet: '* '
 msgid ""
 "`page.tmpl` - Used for displaying all regular wiki pages. This is the key "
 "template to customise. [[!if test=\"enabled(pagetemplate)\" then=\"\"\""
 msgstr ""
+"`page.tmpl` - permet d'afficher toutes les pages normales du wiki. C'est le "
+"principal modèle à modifier. [[!if test=\"enabled(pagetemplate)\" then=\"\"\""
 
 #. type: Plain text
 #, no-wrap
@@ -179,6 +198,34 @@ msgid ""
 "  `passwordmail.tmpl`, `openid-selector.tmpl` - Parts of ikiwiki's user\n"
 "  interface; do not normally need to be customised.\n"
 msgstr ""
+"  (La directive [[!iki ikiwiki/directive/pagetemplate desc=\"pagetemplate\"]]\n"
+"  permet d'utiliser un modèle différent de `page.tmpl`.)\"\"\"]]\n"
+"* `rsspage.tmpl` - permet la création de flux RSS pour les blogs.\n"
+"* `rssitem.tmpl` - permet la création d'éléments individuels dans les flux RSS.\n"
+"* `atompage.tmpl` - permet la création de flux Atom pour les blogs.\n"
+"* `atomitem.tmpl` -  permet la création d'éléments individuels dans les flux Atom.\n"
+"* `inlinepage.tmpl` - permet l'affichage d'un message dans un blog.\n"
+"* `archivepage.tmpl` - permet de lister une page dans une page d'archive de blog.\n"
+"* `titlepage.tmpl` - permet de lister une page par son titre dans une page d'archive de blog.\n"
+"* `microblog.tmpl` - permet de montrer un message de microblog au fil du texte.\n"
+"* `blogpost.tmpl` - offre un formulaire pour ajouter un message dans un blog (avec des liens RSS/Atom)\n"
+"* `feedlink.tmpl` - permet d'ajouter des liens RSS/Atom quand `blogpost.tmpl` n'est pas utilisé.\n"
+"* `aggregatepost.tmpl` - modèle utilisé par le module aggregate pour créer une page de blog.\n"
+"* `searchform.tmpl`, `googleform.tmpl` - modèles utilisés par les modules search et.\n"
+"  google pour ajouter un formulaire de recherche dans les pages de wiki.\n"
+"* `searchquery.tmpl` - C'est un modèle Omega, utilisé par le module search.\n"
+"* `comment.tmpl` - modèle utilisé par le module comments pour afficher un commentaire.\n"
+"* `change.tmpl` - permet la création d'une page décrivant une modification du wiki.\n"
+"* `recentchanges.tmpl` - permet de lister une modification sur la page RecentChanges.\n"
+"* `autoindex.tmpl` - modèle utilisé par le module autoindex pour créer des pages d'index.\n"
+"* `autotag.tmpl` - modèle utilisé par le module tag pour créer des pages avec étiquette.\n"
+"* `calendarmonth.tmpl`, `calendaryear.tmpl` - modèles utilisés par le module ikiwiki-calendar pour\n"
+"  créer les pages d'archives des agendas.\n"
+"* `editpage.tmpl`, `editconflict.tmpl`, `editcreationconflict.tmpl`,\n"
+"  `editfailedsave.tmpl`, `editpagegone.tmpl`, `pocreatepage.tmpl`,\n"
+"  `editcomment.tmpl` `commentmoderation.tmpl`, `renamesummary.tmpl`,\n"
+"  `passwordmail.tmpl`, `openid-selector.tmpl` - modèles faisant partie de l'interface utilisateur\n"
+"  d'ikiwiki'. Il n'y a en général aucun besoin de les personnaliser.\n"
 
 #. type: Plain text
 #, no-wrap
@@ -210,8 +257,12 @@ msgstr "[[!meta robots=\"noindex, follow\"]]\n"
 #~ msgid "Using a template works like this:"
 #~ msgstr "Voici comment fonctionne un modèle :"
 
-#~ msgid "\t\\[[!template id=note text=\"\"\"Here is the text to insert into my note.\"\"\"]]\n"
-#~ msgstr "\t\\[[!template id=note text=\"\"\"Ici se trouve le texte à insérer dans ma note.\"\"\"]]\n"
+#~ msgid ""
+#~ "\t\\[[!template id=note text=\"\"\"Here is the text to insert into my "
+#~ "note.\"\"\"]]\n"
+#~ msgstr ""
+#~ "\t\\[[!template id=note text=\"\"\"Ici se trouve le texte à insérer dans "
+#~ "ma note.\"\"\"]]\n"
 
 #~ msgid ""
 #~ "This fills out the [[note]] template, filling in the `text` field with "
@@ -232,8 +283,12 @@ msgstr "[[!meta robots=\"noindex, follow\"]]\n"
 #~ "sur plusieurs lignes, de larges morceaux de texte mis en forme peuvent "
 #~ "être intégrés dans un modèle :"
 
-#~ msgid "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes=\"\"\"\n"
-#~ msgstr "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes=\"\"\"\n"
+#~ msgid ""
+#~ "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes="
+#~ "\"\"\"\n"
+#~ msgstr ""
+#~ "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes="
+#~ "\"\"\"\n"
 
 #~ msgid "\\[[Charley]]'s sister."
 #~ msgstr "soeur de \\[[Charley]]."
index eedff18b6c61ea2be316406441e0ed9891a4d661..e1e63e716287445dba846a708fbd4d3ea5191a6a 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki 3.15\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-07-18 22:29+0000\n"
+"POT-Creation-Date: 2010-07-18 19:05-0300\n"
 "PO-Revision-Date: 2009-07-23 00:06+0200\n"
 "Last-Translator: Jonas Smedegaard <dr@jones.dk>\n"
 "Language-Team: None\n"
@@ -80,7 +80,7 @@ msgid ""
 "The `ikiwiki-calendar` command can be used to automatically generate the "
 "archive pages. It also refreshes the wiki, updating the calendars to "
 "highlight the current day. This command is typically run at midnight from "
-"cron. An example crontab:"
+"cron."
 msgstr ""
 
 #. type: Plain text
index d406f65808973f27965a97b16d5daf10d679b30f..8506fbe2063d919ebecf64eeb441f375cb4463df 100644 (file)
@@ -4,7 +4,7 @@
 # modification, are permitted under any circumstances. No warranty.
 msgid ""
 msgstr ""
-"POT-Creation-Date: 2010-07-18 22:29+0000\n"
+"POT-Creation-Date: 2010-07-18 19:05-0300\n"
 "PO-Revision-Date: 2010-03-14 13:57+0530\n"
 "Last-Translator: Sebastian Kuhnert <mail@sebastian-kuhnert.de>\n"
 "Language-Team: None\n"
@@ -85,11 +85,17 @@ msgstr ""
 "eingebunden."
 
 #. type: Plain text
+#, fuzzy
+#| msgid ""
+#| "The `ikiwiki-calendar` command can be used to automatically generate the "
+#| "archive pages. It also refreshes the wiki, updating the calendars to "
+#| "highlight the current day. This command is typically run at midnight from "
+#| "cron. An example crontab:"
 msgid ""
 "The `ikiwiki-calendar` command can be used to automatically generate the "
 "archive pages. It also refreshes the wiki, updating the calendars to "
 "highlight the current day. This command is typically run at midnight from "
-"cron. An example crontab:"
+"cron."
 msgstr ""
 "Der `ikiwiki-calendar`-Befehl kann verwendet werden, um die Archivseiten "
 "automatisch zu erzeugen. Es aktualisiert auch das Wiki und hebt in den "
index 71cf94c823ae783aee5e2971b00bd53d8121006e..0ec4e7f523b6dbe0974705c12e7df55026f825c1 100644 (file)
@@ -5,8 +5,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
-"POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2010-07-17 19:07+0200\n"
+"POT-Creation-Date: 2010-07-18 19:05-0300\n"
+"PO-Revision-Date: 2010-07-20 21:54+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -18,17 +18,13 @@ msgstr ""
 msgid ""
 "The `calendar` directive is supplied by the [[!iki plugins/calendar "
 "desc=calendar]] plugin."
-msgstr ""
-"La directive `calendar` est fournie par le module d'extension [[!iki plugins/"
-"calendar desc=calendar]]."
+msgstr "La directive `calendar` est fournie par le module d'extension [[!iki plugins/calendar desc=calendar]]."
 
 #. type: Plain text
 msgid ""
 "This directive displays a calendar, similar to the typical calendars shown "
 "on some blogs."
-msgstr ""
-"Cette directive affiche un calendrier, comparable aux calendriers affichés "
-"par certains blogs."
+msgstr "Cette directive affiche un calendrier, comparable aux calendriers affichés par certains blogs."
 
 #. type: Title #
 #, no-wrap
@@ -85,11 +81,16 @@ msgstr ""
 "dans l'espace de temps donné."
 
 #. type: Plain text
+#| msgid ""
+#| "The `ikiwiki-calendar` command can be used to automatically generate the "
+#| "archive pages. It also refreshes the wiki, updating the calendars to "
+#| "highlight the current day. This command is typically run at midnight from "
+#| "cron. An example crontab:"
 msgid ""
 "The `ikiwiki-calendar` command can be used to automatically generate the "
 "archive pages. It also refreshes the wiki, updating the calendars to "
 "highlight the current day. This command is typically run at midnight from "
-"cron. An example crontab:"
+"cron."
 msgstr ""
 "La commande `ikiwiki-calendar` peut créer automatiquement les pages "
 "d'archives. Elle actualise aussi le wiki, mettant à jour les calendriers "
@@ -108,7 +109,7 @@ msgstr "\t0 0 * * * ikiwiki-calendar ~/ikiwiki.setup \"posts/* and !*/Discussion
 #. type: Title ##
 #, no-wrap
 msgid "usage"
-msgstr "Usage"
+msgstr "utilisation"
 
 #. type: Bullet: '* '
 msgid ""
@@ -127,7 +128,6 @@ msgstr ""
 "seront liées au calendrier. La valeur par défaut est « * »."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "`archivebase` - Configures the base of the archives hierarchy. The "
 #| "default is \"archives\". Note that this default can also be overridden "
@@ -138,25 +138,18 @@ msgid ""
 "wiki by setting `archivebase` in ikiwiki's setup file.  Calendars link to "
 "pages under here, with names like \"2010/04\" and \"2010\". These pages can "
 "be automatically created using the `ikiwiki-calendar` program."
-msgstr ""
-"`archivebase` - Indique la racine des répertoires d'archives, « archives » "
-"par défaut. On peut changer cette valeur en renseignant `archivebase` dans "
-"le fichier de configuration d'ikiwiki."
+msgstr "`archivebase` - Indique la racine des répertoires d'archives, « archives » par défaut. On peut changer cette valeur en renseignant `archivebase` dans le fichier de configuration d'ikiwiki. Les calendriers se lient à des pages placées là, nommées \"2010/04\" ou \"2010\" par exemple. Ces pages peuvent être créées automatiquement par le programme `ikiwiki-calendar`."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "`year` - The year for which the calendar is requested. Defaults to the "
 #| "current year."
 msgid ""
 "`year` - The year for which the calendar is requested. Defaults to the "
 "current year. Can also use -1 to refer to last year, and so on."
-msgstr ""
-"`year` - Indique l'année pour le calendrier annuel. La valeur par défaut est "
-"l'année en cours."
+msgstr "`year` - Indique l'année pour le calendrier annuel. La valeur par défaut est l'année en cours. On peut aussi utiliser -1 pour se référer à l'année dernière, ainsi de suite."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "`month` - The numeric month for which the calendar is requested, in the "
 #| "range 1..12. Used only for the month view calendar, and defaults to the "
@@ -165,10 +158,7 @@ msgid ""
 "`month` - The numeric month for which the calendar is requested, in the "
 "range 1..12. Used only for the month view calendar, and defaults to the "
 "current month. Can also use -1 to refer to last month, and so on."
-msgstr ""
-"`month` - Ce paramètre indique le chiffre du mois (1..12) pour le "
-"calendrier. Il n'est utilisé que pour le calendrier mensuel, et la valeur "
-"par défaut est le chiffre du mois en cours."
+msgstr "`month` - Ce paramètre indique le chiffre du mois (1..12) pour le calendrier. Il n'est utilisé que pour le calendrier mensuel, et la valeur par défaut est le chiffre du mois en cours. On peut aussi utiliser -1 pour se référer au mois dernier, ainsi de suite."
 
 #. type: Bullet: '* '
 msgid ""
@@ -181,7 +171,6 @@ msgstr ""
 "etc. La valeur par défaut est 0, dimanche."
 
 #. type: Bullet: '* '
-#, fuzzy
 #| msgid ""
 #| "`months_per_row` - In the annual calendar, number of months to place in "
 #| "each row. Defaults to 3."
index a129121ffab86b934a67f7c453f7aa650d534693..e0e18a3aad639f35c9aca1e2acfad65508223b99 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-03-14 22:09+0000\n"
-"PO-Revision-Date: 2010-07-17 15:53+0200\n"
+"PO-Revision-Date: 2010-07-18 10:24+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "MIME-Version: 1.0\n"
@@ -85,7 +85,7 @@ msgid ""
 "many pages are included, the map may get so large that graphviz cannot "
 "render it. Using the `connected` parameter is a good way to prune out pages "
 "that clutter the map."
-msgstr "Pour des résultats corrects, il vaut mieux définir l'ensemble des pages à rechercher. Sinon, le diagramme deviendra très grand, illisible et compliqué. Si l'on inclut trop de pages, le diagramme deviendra si grand que graphviz ne pourra pas l'afficher. Le paramètre `connected` permet de se débarrasser des pages qui emcombrent le diagramme."
+msgstr "Pour des résultats corrects, il vaut mieux définir l'ensemble des pages à rechercher. Sinon, le diagramme deviendra très grand, illisible et compliqué. Si l'on inclut trop de pages, le diagramme deviendra si grand que graphviz ne pourra pas l'afficher. Le paramètre `connected` permet de se débarrasser des pages qui encombrent le diagramme."
 
 #. type: Plain text
 #, no-wrap
index 7201edc6efc6865879e2ff74fd64a43627ffe8cd..f78bd99350cd4b25186aa9ce8c9b953f3a85801b 100644 (file)
@@ -38,7 +38,7 @@ msgstr ""
 msgid ""
 "Here's how to use it to create a [[tag]] cloud, with tags sized based on "
 "frequency of use:"
-msgstr "Voici comment afficher un nuage d'étiquettes [[tag]] :"
+msgstr "Voici comment afficher un nuage d'étiquettes [[tag]], avec la taille des étiquettes proportionnelle à la fréquence d'utilisation :"
 
 #. type: Plain text
 #, no-wrap
@@ -49,13 +49,13 @@ msgstr "\t\\[[!pagestats pages=\"tags/*\"]]\n"
 msgid ""
 "Here's how to create a list of tags, sized by use as they would be in a "
 "cloud."
-msgstr ""
+msgstr "Voici comment afficher une liste d'étiquettes, avec la taille des étiquettes proportionnelle à la fréquence d'utilisation, comme pour un nuage :"
 
 #. type: Plain text
 #, fuzzy, no-wrap
 #| msgid "\t\\[[!pagestats pages=\"tags/*\"]]\n"
 msgid "\t\\[[!pagestats style=\"list\" pages=\"tags/*\"]]\n"
-msgstr "\t\\[[!pagestats pages=\"tags/*\"]]\n"
+msgstr "\t\\[[!pagestats style=\"list\" pages=\"tags/*\"]]\n"
 
 #. type: Plain text
 msgid "And here's how to create a table of all the pages on the wiki:"
@@ -108,10 +108,11 @@ msgid "\t\\[[!pagestats style=\"table\" show=\"10\"]]\n"
 msgstr "\t\\[[!pagestats style=\"table\" show=\"10\"]]\n"
 
 #. type: Plain text
+#, fuzzy
 msgid ""
 "The optional `class` parameter can be used to control the class of the "
 "generated tag cloud `div` or page stats `table`."
-msgstr ""
+msgstr "Le paramètre optionnel `class` permet de contrôler la classe de la `div` du nuage d'étiquettes ou du tableau `table` créée par pagestats. "
 
 #. type: Plain text
 #, no-wrap
index 2e6b2dbe4030233a1f882ed9b125be5aa08a6fed..aebf31aceed6286f7514e15e1e13ca520e0abbb1 100644 (file)
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "POT-Creation-Date: 2010-07-18 22:29+0000\n"
-"PO-Revision-Date: 2009-09-12 08:39+0200\n"
+"PO-Revision-Date: 2010-07-21 18:19+0200\n"
 "Last-Translator: Philippe Batailler <philippe.batailler@free.fr>\n"
 "Language-Team: French <debian-l10n-french@lists.debian.org>\n"
 "Language: fr\n"
@@ -29,9 +29,11 @@ msgid ""
 "the directive. The [[templates]] page lists templates that can be used with "
 "this directive."
 msgstr ""
+"Cette directive permet d'utiliser des pages de wiki comme modèles. Ces "
+"modèles peuvent être remplis et insérés dans d'autres pages du wiki. La page "
+"[[templates]] liste les modèles utilisables avec cette directive."
 
 #. type: Plain text
-#, fuzzy
 #| msgid ""
 #| "[[Templates]] are files that can be filled out and inserted into pages in "
 #| "the wiki, by using the template directive. The directive has an `id` "
@@ -41,13 +43,11 @@ msgid ""
 "The directive has an `id` parameter that identifies the template to use. The "
 "remaining parameters are used to fill out the template."
 msgstr ""
-"Les modèles de page [[Templates]] sont des fichiers pouvant être remplis et "
-"insérés dans les pages du wiki, avec la directive template. Cette directive "
-"possède un paramètre `id` qui identifie le modèle à utiliser. Les autres "
-"paramètres servent à remplir le modèle."
+"Cette directive possède un paramètre `id` qui identifie le modèle à "
+"utiliser. Les autres paramètres servent à remplir le modèle."
 
 #. type: Title ##
-#, fuzzy, no-wrap
+#, no-wrap
 #| msgid "Example:"
 msgid "Example"
 msgstr "Exemple :"
@@ -68,7 +68,7 @@ msgstr ""
 #. type: Title ##
 #, no-wrap
 msgid "Using a template"
-msgstr ""
+msgstr "Utilisation d'un modèle"
 
 #. type: Plain text
 msgid ""
@@ -77,34 +77,40 @@ msgid ""
 "included in it. Combined with multi-line quoted values, this allows for "
 "large chunks of marked up text to be embedded into a template:"
 msgstr ""
+"Une valeur peut contenir tout marquage autorisé dans une page de wiki "
+"externe au modèle. On peut même inclure des guillemets dans la valeur, en "
+"les triplant. Avec des valeurs sur plusieurs lignes entre guillemets, on "
+"peut ainsi insérer de longs passages de texte dans un modèle."
 
 #. type: Plain text
 #, no-wrap
 msgid "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes=\"\"\"\n"
-msgstr ""
+msgstr "        \\[[!template id=foo name=\"Sally\" color=\"green\" age=8 notes=\"\"\"\n"
 
 #. type: Bullet: '        * '
 msgid "\\[[Charley]]'s sister."
-msgstr ""
+msgstr "\\[[Charley]]'s sister."
 
 #. type: Bullet: '        * '
 msgid "\"I want to be an astronaut when I grow up.\""
-msgstr ""
+msgstr "\"I want to be an astronaut when I grow up.\""
 
 #. type: Bullet: '        * '
 msgid "Really 8 and a half."
-msgstr ""
+msgstr "Really 8 and a half."
 
 #. type: Title ##
 #, no-wrap
 msgid "Creating a template"
-msgstr ""
+msgstr "Création d'un modèle"
 
 #. type: Plain text
 msgid ""
 "The template is a regular wiki page, located in the `templates/` "
 "subdirectory inside the source directory of the wiki."
 msgstr ""
+"Le modèle est une simple page de wiki, située dans le sous-répertoire "
+"`templates/` du répertoire source du wiki."
 
 #. type: Plain text
 msgid ""
@@ -113,6 +119,11 @@ msgid ""
 "usr/share/ikiwiki/templates`; the `templatedir` setting can be used to make "
 "another directory be searched first.)"
 msgstr ""
+"Il est aussi possible de conserver les modèles dans un répertoire extérieur "
+"au wiki, comme des fichiers avec l'extension \".tmpl\". Par défaut ces "
+"fichiers sont recherchés dans `/usr/share/ikiwiki/templates`. Le paramètre "
+"`templatedir` peut être utilisé pour commencer la recherche dans un autre "
+"répertoire."
 
 #. type: Plain text
 msgid ""
@@ -120,41 +131,45 @@ msgid ""
 "module, which allows for some fairly complex things to be done. Consult its "
 "documentation for the full syntax, but all you really need to know are a few "
 "things:"
-msgstr ""
+msgstr "Le modèle utilise la syntaxe du module Perl [[!cpan HTML::Template]] qui permet de faire des choses assez compliquées. Consultez la documentation mais vous n'avez besoin de connaître que peu de choses :"
 
 #. type: Bullet: '* '
 msgid ""
 "Each parameter you pass to the template directive will generate a template "
 "variable. There are also some pre-defined variables like PAGE and BASENAME."
 msgstr ""
+"Chaque paramètre passé à la directive template créera une variable pour le "
+"modèle. Certaines variables sont prédéfinies comme PAGE et BASENAME."
 
 #. type: Bullet: '* '
 msgid ""
 "To insert the value of a variable, use `<TMPL_VAR variable>`. Wiki markup in "
 "the value will first be converted to html."
-msgstr ""
+msgstr "Pour insérer la valeur d'une variable, utilisez `<TMPL_VAR variable>`. Le marquage wiki dans la valeur sera d'abord converti en HTML."
 
 #. type: Bullet: '* '
 msgid ""
 "To insert the raw value of a variable, with wiki markup not yet converted to "
 "html, use `<TMPL_VAR raw_variable>`."
-msgstr ""
+msgstr "Pour insérer la valeur brute d'une variable, sans conversion en HTML du marquage wiki, utilisez `<TMPL_VAR raw_variable>`."
 
 #. type: Bullet: '* '
 msgid ""
 "To make a block of text conditional on a variable being set use `<TMPL_IF "
 "variable>text</TMPL_IF>`."
 msgstr ""
+"Pour rendre un texte dépendant d'une variable, utilisez  `<TMPL_IF "
+"variable>text</TMPL_IF>`  "
 
 #. type: Bullet: '* '
 msgid ""
 "To use one block of text if a variable is set and a second if it's not, use "
 "`<TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>`"
-msgstr ""
+msgstr "Pour utiliser un texte quand une variable est définie et un autre texte quand elle n'est pas définie, utilisez `<TMPL_IF variable>text<TMPL_ELSE>other text</TMPL_IF>`"
 
 #. type: Plain text
 msgid "Here's a sample template:"
-msgstr ""
+msgstr "Voici un exemple :"
 
 #. type: Plain text
 #, no-wrap
@@ -173,6 +188,19 @@ msgid ""
 "        </TMPL_IF>\n"
 "        </span>\n"
 msgstr ""
+"        <span class=\"infobox\">\n"
+"        Name: \\[[<TMPL_VAR raw_name>]]<br />\n"
+"        Age: <TMPL_VAR age><br />\n"
+"        <TMPL_IF color>\n"
+"        Favorite color: <TMPL_VAR color><br />\"\n"
+"        <TMPL_ELSE>\n"
+"        No favorite color.<br />\n"
+"        </TMPL_IF>\n"
+"        <TMPL_IF notes>\n"
+"        <hr />\n"
+"        <TMPL_VAR notes>\n"
+"        </TMPL_IF>\n"
+"        </span>\n"
 
 #. type: Plain text
 msgid ""
@@ -181,6 +209,10 @@ msgid ""
 "markup in the template. Note though that such WikiLinks will not show up as "
 "backlinks to the page that uses the template."
 msgstr ""
+"Le modèle rempli sera formaté comme le reste de la page dans laquelle il se "
+"trouve. Vous pouvez donc inclure des WikiLinks ou d'autres marquages wiki "
+"dans le modèle. Cependant ces WikiLinks n'apparaîtront pas comme des "
+"rétroliens vers la page qui utilise ce modèle."
 
 #. type: Plain text
 msgid ""
@@ -189,6 +221,10 @@ msgid ""
 "might be mistaken for wiki markup, it's not converted to html before being "
 "processed as a [[ikiwiki/WikiLink]]."
 msgstr ""
+"Remarquez l'utilisation de \"raw_name\" dans [[ikiwiki/WikiLink]] de "
+"l'exemple ci-dessus. Ainsi, si le nom peut être confondu avec un marquage "
+"wiki, il n'est pas converti en html avant d'être créé en tant que [[ikiwiki/"
+"WikiLink]]."
 
 #. type: Plain text
 #, no-wrap
index a1aa8db55da6ad4fc65818530987f23f0b16178f..619509c4c85e93b63c26f471ec98b6dc596d312b 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ikiwiki\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-06-10 15:02-0400\n"
+"POT-Creation-Date: 2010-10-23 17:21-0400\n"
 "PO-Revision-Date: 2007-01-13 15:31+1030\n"
 "Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
 "Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -52,7 +52,7 @@ msgstr "Tùy thích đã được lưu."
 msgid "You are banned."
 msgstr "Bạn bị cấm ra."
 
-#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1316
+#: ../IkiWiki/CGI.pm:426 ../IkiWiki/CGI.pm:427 ../IkiWiki.pm:1370
 msgid "Error"
 msgstr "Lỗi"
 
@@ -64,77 +64,82 @@ msgstr ""
 msgid "Nothing to do right now, all feeds are up-to-date!"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:220
+#: ../IkiWiki/Plugin/aggregate.pm:222
 #, fuzzy, perl-format
 msgid "missing %s parameter"
 msgstr "mẫu thiếu tham số id"
 
-#: ../IkiWiki/Plugin/aggregate.pm:255
+#: ../IkiWiki/Plugin/aggregate.pm:257
 msgid "new feed"
 msgstr "nguồn tin mới"
 
-#: ../IkiWiki/Plugin/aggregate.pm:269
+#: ../IkiWiki/Plugin/aggregate.pm:271
 msgid "posts"
 msgstr "bài"
 
-#: ../IkiWiki/Plugin/aggregate.pm:271
+#: ../IkiWiki/Plugin/aggregate.pm:273
 msgid "new"
 msgstr "mới"
 
-#: ../IkiWiki/Plugin/aggregate.pm:441
+#: ../IkiWiki/Plugin/aggregate.pm:457
 #, perl-format
 msgid "expiring %s (%s days old)"
 msgstr "đang mãn hạn %s (cũ %s ngày)"
 
-#: ../IkiWiki/Plugin/aggregate.pm:448
+#: ../IkiWiki/Plugin/aggregate.pm:464
 #, perl-format
 msgid "expiring %s"
 msgstr "đang mãn hạn %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:475
+#: ../IkiWiki/Plugin/aggregate.pm:491
 #, perl-format
 msgid "last checked %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:479
+#: ../IkiWiki/Plugin/aggregate.pm:495
 #, perl-format
 msgid "checking feed %s ..."
 msgstr "đang kiểm tra nguồn tin %s ..."
 
-#: ../IkiWiki/Plugin/aggregate.pm:484
+#: ../IkiWiki/Plugin/aggregate.pm:500
 #, perl-format
 msgid "could not find feed at %s"
 msgstr "không tìm thấy nguồn tin ở %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:503
+#: ../IkiWiki/Plugin/aggregate.pm:519
 #, fuzzy
 msgid "feed not found"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/aggregate.pm:514
+#: ../IkiWiki/Plugin/aggregate.pm:530
 #, perl-format
 msgid "(invalid UTF-8 stripped from feed)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:522
+#: ../IkiWiki/Plugin/aggregate.pm:538
 #, perl-format
 msgid "(feed entities escaped)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/aggregate.pm:530
+#: ../IkiWiki/Plugin/aggregate.pm:546
 msgid "feed crashed XML::Feed!"
 msgstr "nguồn tin đã gây ra XML::Feed sụp đổ."
 
-#: ../IkiWiki/Plugin/aggregate.pm:616
+#: ../IkiWiki/Plugin/aggregate.pm:632
 #, perl-format
 msgid "creating new page %s"
 msgstr "đang tạo trang mới %s"
 
+#: ../IkiWiki/Plugin/aggregate.pm:652 ../IkiWiki/Plugin/edittemplate.pm:133
+#, fuzzy
+msgid "failed to process template:"
+msgstr "mẫu không xử lý được:"
+
 #: ../IkiWiki/Plugin/amazon_s3.pm:31
 msgid "deleting bucket.."
 msgstr ""
 
-#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:231
+#: ../IkiWiki/Plugin/amazon_s3.pm:38 ../ikiwiki.in:226
 msgid "done"
 msgstr "xong"
 
@@ -167,19 +172,19 @@ msgstr ""
 msgid "prohibited by allowed_attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:141
+#: ../IkiWiki/Plugin/attachment.pm:144
 msgid "bad attachment filename"
 msgstr ""
 
-#: ../IkiWiki/Plugin/attachment.pm:183
+#: ../IkiWiki/Plugin/attachment.pm:188
 msgid "attachment upload"
 msgstr ""
 
-#: ../IkiWiki/Plugin/autoindex.pm:117
+#: ../IkiWiki/Plugin/autoindex.pm:120
 msgid "automatic index generation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/blogspam.pm:109
+#: ../IkiWiki/Plugin/blogspam.pm:112
 msgid ""
 "Sorry, but that looks like spam to <a href=\"http://blogspam.net/"
 "\">blogspam</a>: "
@@ -194,77 +199,81 @@ msgstr ""
 msgid "There are no broken links!"
 msgstr "Không có liên kết bị ngắt nào."
 
-#: ../IkiWiki/Plugin/comments.pm:112
+#: ../IkiWiki/Plugin/comments.pm:113
 #, fuzzy, perl-format
 msgid "this comment needs %s"
 msgstr "đang tạo %s"
 
-#: ../IkiWiki/Plugin/comments.pm:115
+#: ../IkiWiki/Plugin/comments.pm:116
 msgid "moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:136 ../IkiWiki/Plugin/format.pm:48
+#: ../IkiWiki/Plugin/comments.pm:137 ../IkiWiki/Plugin/format.pm:48
 #, perl-format
 msgid "unsupported page format %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:141
+#: ../IkiWiki/Plugin/comments.pm:142
 msgid "comment must have content"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:196
+#: ../IkiWiki/Plugin/comments.pm:195
 msgid "Anonymous"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:357 ../IkiWiki/Plugin/editpage.pm:98
+#: ../IkiWiki/Plugin/comments.pm:256
+msgid "Comment Moderation"
+msgstr ""
+
+#: ../IkiWiki/Plugin/comments.pm:372 ../IkiWiki/Plugin/editpage.pm:98
 msgid "bad page name"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:362
+#: ../IkiWiki/Plugin/comments.pm:377
 #, fuzzy, perl-format
 msgid "commenting on %s"
 msgstr "đang tạo %s"
 
-#: ../IkiWiki/Plugin/comments.pm:380
+#: ../IkiWiki/Plugin/comments.pm:395
 #, perl-format
 msgid "page '%s' doesn't exist, so you can't comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:387
+#: ../IkiWiki/Plugin/comments.pm:402
 #, perl-format
 msgid "comments on page '%s' are closed"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:491
+#: ../IkiWiki/Plugin/comments.pm:510
 msgid "comment stored for moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:493
+#: ../IkiWiki/Plugin/comments.pm:512
 msgid "Your comment will be posted after moderator review"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:506
+#: ../IkiWiki/Plugin/comments.pm:525
 msgid "Added a comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:510
+#: ../IkiWiki/Plugin/comments.pm:529
 #, perl-format
 msgid "Added a comment: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:552 ../IkiWiki/Plugin/websetup.pm:272
+#: ../IkiWiki/Plugin/comments.pm:573 ../IkiWiki/Plugin/websetup.pm:269
 msgid "you are not logged in as an admin"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:603
+#: ../IkiWiki/Plugin/comments.pm:625
 msgid "Comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:641
+#: ../IkiWiki/Plugin/comments.pm:665
 msgid "comment moderation"
 msgstr ""
 
-#: ../IkiWiki/Plugin/comments.pm:790
+#: ../IkiWiki/Plugin/comments.pm:822
 #, perl-format
 msgid "%i comment"
 msgid_plural "%i comments"
@@ -273,22 +282,22 @@ msgstr[0] ""
 #. translators: Here "Comment" is a verb;
 #. translators: the user clicks on it to
 #. translators: post a comment.
-#: ../IkiWiki/Plugin/comments.pm:800
+#: ../IkiWiki/Plugin/comments.pm:832
 msgid "Comment"
 msgstr ""
 
-#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:31
-#: ../IkiWiki/Plugin/cutpaste.pm:46 ../IkiWiki/Plugin/cutpaste.pm:62
+#: ../IkiWiki/Plugin/conditional.pm:28 ../IkiWiki/Plugin/cutpaste.pm:46
+#: ../IkiWiki/Plugin/cutpaste.pm:60 ../IkiWiki/Plugin/cutpaste.pm:75
 #: ../IkiWiki/Plugin/testpagespec.pm:26
 #, perl-format
 msgid "%s parameter is required"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:67
+#: ../IkiWiki/Plugin/cutpaste.pm:80
 msgid "no text was copied in this page"
 msgstr ""
 
-#: ../IkiWiki/Plugin/cutpaste.pm:70
+#: ../IkiWiki/Plugin/cutpaste.pm:83
 #, perl-format
 msgid "no text was copied in this page with id %s"
 msgstr ""
@@ -308,34 +317,28 @@ msgstr ""
 msgid "creating %s"
 msgstr "đang tạo %s"
 
-#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:334
-#: ../IkiWiki/Plugin/editpage.pm:345 ../IkiWiki/Plugin/editpage.pm:390
-#: ../IkiWiki/Plugin/editpage.pm:429
+#: ../IkiWiki/Plugin/editpage.pm:312 ../IkiWiki/Plugin/editpage.pm:332
+#: ../IkiWiki/Plugin/editpage.pm:343 ../IkiWiki/Plugin/editpage.pm:388
+#: ../IkiWiki/Plugin/editpage.pm:430
 #, perl-format
 msgid "editing %s"
 msgstr "đang sửa %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:52
+#: ../IkiWiki/Plugin/edittemplate.pm:54
 #, fuzzy
 msgid "template not specified"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:55
+#: ../IkiWiki/Plugin/edittemplate.pm:57
 #, fuzzy
 msgid "match not specified"
 msgstr "chưa xác định tên tập tin bộ bao bọc"
 
-#: ../IkiWiki/Plugin/edittemplate.pm:64
+#: ../IkiWiki/Plugin/edittemplate.pm:72
 #, perl-format
 msgid "edittemplate %s registered for %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/edittemplate.pm:125 ../IkiWiki/Plugin/inline.pm:339
-#: ../IkiWiki/Plugin/template.pm:44
-#, fuzzy
-msgid "failed to process template:"
-msgstr "mẫu không xử lý được:"
-
 #: ../IkiWiki/Plugin/format.pm:30
 msgid "must specify format and text"
 msgstr ""
@@ -344,12 +347,12 @@ msgstr ""
 msgid "fortune failed"
 msgstr "fortune bị lỗi"
 
-#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:58
+#: ../IkiWiki/Plugin/getsource.pm:64 ../IkiWiki/Plugin/goto.pm:59
 #, fuzzy
 msgid "missing page"
 msgstr "mẫu thiếu tham số id"
 
-#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:60
+#: ../IkiWiki/Plugin/getsource.pm:66 ../IkiWiki/Plugin/goto.pm:61
 #, perl-format
 msgid "The page %s does not exist."
 msgstr ""
@@ -364,23 +367,31 @@ msgstr "không thể đọc %s: %s"
 msgid "%s is an attachment, not a page."
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:687 ../IkiWiki/Plugin/git.pm:705
-#: ../IkiWiki/Receive.pm:130
+#: ../IkiWiki/Plugin/git.pm:764 ../IkiWiki/Plugin/git.pm:827
+#: ../IkiWiki.pm:1580
 #, perl-format
 msgid "you are not allowed to change %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:727
+#: ../IkiWiki/Plugin/git.pm:786
 #, perl-format
 msgid "you cannot act on a file with mode %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/git.pm:731
+#: ../IkiWiki/Plugin/git.pm:790
 msgid "you are not allowed to change file modes"
 msgstr ""
 
-#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/po.pm:134
-#: ../IkiWiki/Plugin/search.pm:37
+#: ../IkiWiki/Plugin/git.pm:861
+msgid "you are not allowed to revert a merge"
+msgstr ""
+
+#: ../IkiWiki/Plugin/git.pm:877
+#, fuzzy, perl-format
+msgid "Failed to revert commit %s"
+msgstr "lỗi biên dịch %s"
+
+#: ../IkiWiki/Plugin/google.pm:26 ../IkiWiki/Plugin/search.pm:38
 #, fuzzy, perl-format
 msgid "Must specify %s when using the %s plugin"
 msgstr "Cần phải xác định %s khi dùng bổ sung tìm kiếm"
@@ -394,22 +405,22 @@ msgstr "linkmap không chạy dot được"
 msgid "prog not a valid graphviz program"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:48
+#: ../IkiWiki/Plugin/highlight.pm:64
 #, perl-format
 msgid "tohighlight contains unknown file type '%s'"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:59
+#: ../IkiWiki/Plugin/highlight.pm:75
 #, perl-format
 msgid "Source code: %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/highlight.pm:124
+#: ../IkiWiki/Plugin/highlight.pm:140
 msgid ""
 "warning: highlight perl module not available; falling back to pass through"
 msgstr ""
 
-#: ../IkiWiki/Plugin/htmltidy.pm:50
+#: ../IkiWiki/Plugin/htmltidy.pm:62
 #, fuzzy
 msgid "htmltidy failed to parse this html"
 msgstr "lỗi phân tách hình cười nào nên tắt bổ sung"
@@ -464,12 +475,12 @@ msgstr ""
 msgid "Add a new post titled:"
 msgstr ""
 
-#: ../IkiWiki/Plugin/inline.pm:342
-#, perl-format
-msgid "template %s not found"
-msgstr "không tìm thấy mẫu %s"
+#: ../IkiWiki/Plugin/inline.pm:339 ../IkiWiki/Plugin/template.pm:44
+#, fuzzy, perl-format
+msgid "failed to process template %s"
+msgstr "mẫu không xử lý được:"
 
-#: ../IkiWiki/Plugin/inline.pm:633
+#: ../IkiWiki/Plugin/inline.pm:630
 msgid "RPC::XML::Client not found, not pinging"
 msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
 
@@ -497,22 +508,22 @@ msgstr ""
 msgid "failed to load Markdown.pm perl module (%s) or /usr/bin/markdown (%s)"
 msgstr "lỗi nạp mô-đun perl Markdown.pm (%s) hay « /usr/bin/markdown » (%s)"
 
-#: ../IkiWiki/Plugin/meta.pm:174
+#: ../IkiWiki/Plugin/meta.pm:175
 #, fuzzy
 msgid "stylesheet not found"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/meta.pm:212
+#: ../IkiWiki/Plugin/meta.pm:217
 #, fuzzy
 msgid "redir page not found"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/meta.pm:226
+#: ../IkiWiki/Plugin/meta.pm:231
 #, fuzzy
 msgid "redir cycle is not allowed"
 msgstr "không tìm thấy mẫu %s"
 
-#: ../IkiWiki/Plugin/meta.pm:387
+#: ../IkiWiki/Plugin/meta.pm:400
 msgid "sort=meta requires a parameter"
 msgstr ""
 
@@ -532,7 +543,7 @@ msgstr ""
 msgid "more"
 msgstr ""
 
-#: ../IkiWiki/Plugin/openid.pm:58
+#: ../IkiWiki/Plugin/openid.pm:70
 #, fuzzy, perl-format
 msgid "failed to load openid module: "
 msgstr "lỗi biên dịch %s"
@@ -586,21 +597,21 @@ msgstr ""
 msgid "Ping received."
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:53
+#: ../IkiWiki/Plugin/pinger.pm:54
 msgid "requires 'from' and 'to' parameters"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:58
+#: ../IkiWiki/Plugin/pinger.pm:59
 #, fuzzy, perl-format
 msgid "Will ping %s"
 msgstr "đang sửa %s"
 
-#: ../IkiWiki/Plugin/pinger.pm:61
+#: ../IkiWiki/Plugin/pinger.pm:62
 #, perl-format
 msgid "Ignoring ping directive for wiki %s (this wiki is %s)"
 msgstr ""
 
-#: ../IkiWiki/Plugin/pinger.pm:77
+#: ../IkiWiki/Plugin/pinger.pm:78
 #, fuzzy
 msgid "LWP not found, not pinging"
 msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
@@ -609,97 +620,92 @@ msgstr "Không tìm thấy RPC::XML::Client nên không gửi gói tin ping"
 msgid "warning: Old po4a detected! Recommend upgrade to 0.35."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:142
+#: ../IkiWiki/Plugin/po.pm:175
 #, perl-format
 msgid "%s is not a valid language code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:154
+#: ../IkiWiki/Plugin/po.pm:187
 #, perl-format
 msgid ""
 "%s is not a valid value for po_link_to, falling back to po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:159
+#: ../IkiWiki/Plugin/po.pm:192
 msgid ""
 "po_link_to=negotiated requires usedirs to be enabled, falling back to "
 "po_link_to=default"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:390
-#, perl-format
-msgid "rebuilding all pages to fix meta titles"
-msgstr ""
-
-#: ../IkiWiki/Plugin/po.pm:394 ../IkiWiki/Render.pm:769
-#, fuzzy, perl-format
-msgid "building %s"
-msgstr "đang sửa %s"
-
-#: ../IkiWiki/Plugin/po.pm:432
+#: ../IkiWiki/Plugin/po.pm:455
 msgid "updated PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:456
+#: ../IkiWiki/Plugin/po.pm:478
 msgid ""
 "Can not remove a translation. If the master page is removed, however, its "
 "translations will be removed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:476
+#: ../IkiWiki/Plugin/po.pm:498
 msgid ""
 "Can not rename a translation. If the master page is renamed, however, its "
 "translations will be renamed as well."
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:876
+#: ../IkiWiki/Plugin/po.pm:935
 #, perl-format
 msgid "POT file (%s) does not exist"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:890
+#: ../IkiWiki/Plugin/po.pm:949
 #, fuzzy, perl-format
 msgid "failed to copy underlay PO file to %s"
 msgstr "lỗi biên dịch %s"
 
-#: ../IkiWiki/Plugin/po.pm:899
+#: ../IkiWiki/Plugin/po.pm:958
 #, fuzzy, perl-format
 msgid "failed to update %s"
 msgstr "lỗi biên dịch %s"
 
-#: ../IkiWiki/Plugin/po.pm:905
+#: ../IkiWiki/Plugin/po.pm:964
 #, fuzzy, perl-format
 msgid "failed to copy the POT file to %s"
 msgstr "lỗi biên dịch %s"
 
-#: ../IkiWiki/Plugin/po.pm:941
+#: ../IkiWiki/Plugin/po.pm:1000
 msgid "N/A"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:954
+#: ../IkiWiki/Plugin/po.pm:1011
 #, fuzzy, perl-format
 msgid "failed to translate %s"
 msgstr "lỗi ghi %s: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1038
+#: ../IkiWiki/Plugin/po.pm:1090
 msgid "removed obsolete PO files"
 msgstr ""
 
-#: ../IkiWiki/Plugin/po.pm:1094 ../IkiWiki/Plugin/po.pm:1108
-#: ../IkiWiki/Plugin/po.pm:1147
+#: ../IkiWiki/Plugin/po.pm:1147 ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1198
 #, fuzzy, perl-format
 msgid "failed to write %s"
 msgstr "lỗi ghi %s: %s"
 
-#: ../IkiWiki/Plugin/po.pm:1106
+#: ../IkiWiki/Plugin/po.pm:1157
 #, fuzzy
 msgid "failed to translate"
 msgstr "linkmap không chạy dot được"
 
-#: ../IkiWiki/Plugin/po.pm:1159
+#: ../IkiWiki/Plugin/po.pm:1210
 msgid "invalid gettext data, go back to previous page to continue edit"
 msgstr ""
 
+#: ../IkiWiki/Plugin/po.pm:1252
+#, perl-format
+msgid "%s has invalid syntax: must use CODE|NAME"
+msgstr ""
+
 #: ../IkiWiki/Plugin/poll.pm:70
 msgid "vote"
 msgstr "bỏ phiếu"
@@ -798,6 +804,16 @@ msgstr ""
 msgid "need either `percent` or `totalpages` and `donepages` parameters"
 msgstr ""
 
+#: ../IkiWiki/Plugin/recentchanges.pm:104
+#, perl-format
+msgid "This reverts commit %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/recentchanges.pm:123
+#, perl-format
+msgid "confirm reversion of %s"
+msgstr ""
+
 #: ../IkiWiki/Plugin/recentchangesdiff.pm:37
 msgid "(Diff truncated)"
 msgstr ""
@@ -817,16 +833,16 @@ msgstr "%s bị %s khoá nên không thể sửa được"
 msgid "%s is not a file"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:137
+#: ../IkiWiki/Plugin/remove.pm:136
 #, perl-format
 msgid "confirm removal of %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:174
+#: ../IkiWiki/Plugin/remove.pm:173
 msgid "Please select the attachments to remove."
 msgstr ""
 
-#: ../IkiWiki/Plugin/remove.pm:216
+#: ../IkiWiki/Plugin/remove.pm:217
 msgid "removed"
 msgstr ""
 
@@ -855,29 +871,29 @@ msgstr ""
 msgid "%s already exists on disk"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:122
+#: ../IkiWiki/Plugin/rename.pm:123
 #, fuzzy, perl-format
 msgid "rename %s"
 msgstr "đang vẽ %s"
 
-#: ../IkiWiki/Plugin/rename.pm:163
+#: ../IkiWiki/Plugin/rename.pm:164
 msgid "Also rename SubPages and attachments"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:250
+#: ../IkiWiki/Plugin/rename.pm:251
 msgid "Only one attachment can be renamed at a time."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:253
+#: ../IkiWiki/Plugin/rename.pm:254
 msgid "Please select the attachment to rename."
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:352
+#: ../IkiWiki/Plugin/rename.pm:353
 #, perl-format
 msgid "rename %s to %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/rename.pm:576
+#: ../IkiWiki/Plugin/rename.pm:578
 #, fuzzy, perl-format
 msgid "update for rename of %s to %s"
 msgstr "cập nhật %2$s của %1$s bởi %3$s"
@@ -892,12 +908,12 @@ msgstr "lỗi ghi %s: %s"
 msgid "rsync_command exited %d"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:194
+#: ../IkiWiki/Plugin/search.pm:195
 #, perl-format
-msgid "need Digest::SHA1 to index %s"
+msgid "need Digest::SHA to index %s"
 msgstr ""
 
-#: ../IkiWiki/Plugin/search.pm:231
+#: ../IkiWiki/Plugin/search.pm:232
 msgid "search"
 msgstr ""
 
@@ -919,7 +935,12 @@ msgstr "lối tắt thiếu tên hay tham số url"
 msgid "shortcut %s points to <i>%s</i>"
 msgstr "lối tắt %s chỉ tới %s"
 
-#: ../IkiWiki/Plugin/smiley.pm:43
+#: ../IkiWiki/Plugin/smiley.pm:30
+#, perl-format
+msgid "smiley plugin will not work without %s"
+msgstr ""
+
+#: ../IkiWiki/Plugin/smiley.pm:50
 #, fuzzy
 msgid "failed to parse any smileys"
 msgstr "lỗi phân tách hình cười nào nên tắt bổ sung"
@@ -992,16 +1013,11 @@ msgstr "đang tạo trang mới %s"
 msgid "missing id parameter"
 msgstr "mẫu thiếu tham số id"
 
-#: ../IkiWiki/Plugin/template.pm:47
-#, fuzzy, perl-format
-msgid "%s not found"
-msgstr "không tìm thấy mẫu %s"
-
-#: ../IkiWiki/Plugin/teximg.pm:72
+#: ../IkiWiki/Plugin/teximg.pm:73
 msgid "missing tex code"
 msgstr ""
 
-#: ../IkiWiki/Plugin/teximg.pm:124
+#: ../IkiWiki/Plugin/teximg.pm:125
 #, fuzzy
 msgid "failed to generate image from code"
 msgstr "lỗi ghi %s: %s"
@@ -1021,26 +1037,26 @@ msgstr ""
 msgid "enable %s?"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:276
+#: ../IkiWiki/Plugin/websetup.pm:273
 msgid "setup file for this wiki is not known"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:292
+#: ../IkiWiki/Plugin/websetup.pm:289
 msgid "main"
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:435
+#: ../IkiWiki/Plugin/websetup.pm:433
 msgid ""
 "The configuration changes shown below require a wiki rebuild to take effect."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:439
+#: ../IkiWiki/Plugin/websetup.pm:437
 msgid ""
 "For the configuration changes shown below to fully take effect, you may need "
 "to rebuild the wiki."
 msgstr ""
 
-#: ../IkiWiki/Plugin/websetup.pm:476
+#: ../IkiWiki/Plugin/websetup.pm:474
 #, perl-format
 msgid "Error: %s exited nonzero (%s). Discarding setup changes."
 msgstr ""
@@ -1050,11 +1066,6 @@ msgstr ""
 msgid "cannot determine id of untrusted committer %s"
 msgstr ""
 
-#: ../IkiWiki/Receive.pm:86
-#, fuzzy, perl-format
-msgid "bad file name %s"
-msgstr "đang bỏ qua tên tập tin sai %s"
-
 #: ../IkiWiki/Render.pm:158
 #, perl-format
 msgid "scanning %s"
@@ -1067,47 +1078,52 @@ msgid ""
 "allow this"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:311
+#: ../IkiWiki/Render.pm:316
 #, perl-format
 msgid "skipping bad filename %s"
 msgstr "đang bỏ qua tên tập tin sai %s"
 
-#: ../IkiWiki/Render.pm:327
+#: ../IkiWiki/Render.pm:332
 #, perl-format
 msgid "%s has multiple possible source pages"
 msgstr ""
 
-#: ../IkiWiki/Render.pm:369
+#: ../IkiWiki/Render.pm:372
 #, perl-format
 msgid "querying %s for file creation and modification times.."
 msgstr ""
 
-#: ../IkiWiki/Render.pm:431
+#: ../IkiWiki/Render.pm:446
 #, fuzzy, perl-format
 msgid "removing obsolete %s"
 msgstr "đang gỡ bỏ trang cũ %s"
 
-#: ../IkiWiki/Render.pm:505
+#: ../IkiWiki/Render.pm:520
 #, fuzzy, perl-format
 msgid "building %s, which links to %s"
 msgstr "đang vẽ %s mà liên kết tới %s"
 
-#: ../IkiWiki/Render.pm:514
+#: ../IkiWiki/Render.pm:529
 #, fuzzy, perl-format
 msgid "removing %s, no longer built by %s"
 msgstr "đang gỡ bỏ %s, không còn được vẽ lại bởi %s"
 
-#: ../IkiWiki/Render.pm:597 ../IkiWiki/Render.pm:679
+#: ../IkiWiki/Render.pm:612 ../IkiWiki/Render.pm:694
 #, fuzzy, perl-format
 msgid "building %s, which depends on %s"
 msgstr "đang vẽ %s mà phụ thuộc vào %s"
 
-#: ../IkiWiki/Render.pm:692
+#: ../IkiWiki/Render.pm:707
 #, fuzzy, perl-format
 msgid "building %s, to update its backlinks"
 msgstr "đang vẽ %s để cập nhật các liên kết ngược của nó"
 
-#: ../IkiWiki/Render.pm:821
+#: ../IkiWiki/Render.pm:787
+#, fuzzy, perl-format
+msgid "building %s"
+msgstr "đang sửa %s"
+
+#: ../IkiWiki/Render.pm:839
 #, fuzzy, perl-format
 msgid "ikiwiki: cannot build %s"
 msgstr "ikiwiki: không thể vẽ %s"
@@ -1147,56 +1163,56 @@ msgstr ""
 msgid "** Disabling plugin %s, since it is failing with this message:"
 msgstr ""
 
-#: ../IkiWiki/Wrapper.pm:16
+#: ../IkiWiki/Wrapper.pm:12
+msgid "generating wrappers.."
+msgstr "đang tạo ra các bộ bao bọc.."
+
+#: ../IkiWiki/Wrapper.pm:36
 #, perl-format
 msgid "%s doesn't seem to be executable"
 msgstr "có vẻ là %s không phải có khả năng thực hiện"
 
-#: ../IkiWiki/Wrapper.pm:20
+#: ../IkiWiki/Wrapper.pm:40
 msgid "cannot create a wrapper that uses a setup file"
 msgstr "không thể tạo bộ bao bọc sử dụng tập tin thiết lập"
 
-#: ../IkiWiki/Wrapper.pm:24
+#: ../IkiWiki/Wrapper.pm:44
 msgid "wrapper filename not specified"
 msgstr "chưa xác định tên tập tin bộ bao bọc"
 
 #. translators: The parameter is a C filename.
-#: ../IkiWiki/Wrapper.pm:160
+#: ../IkiWiki/Wrapper.pm:219
 #, perl-format
 msgid "failed to compile %s"
 msgstr "lỗi biên dịch %s"
 
 #. translators: The parameter is a filename.
-#: ../IkiWiki/Wrapper.pm:180
+#: ../IkiWiki/Wrapper.pm:239
 #, perl-format
 msgid "successfully generated %s"
 msgstr "%s đã được tạo ra"
 
-#: ../ikiwiki.in:13
+#: ../ikiwiki.in:10
 msgid "usage: ikiwiki [options] source dest"
 msgstr "cách sử dụng: ikiwiki [tùy chọn] nguồn đích"
 
-#: ../ikiwiki.in:14
+#: ../ikiwiki.in:11
 msgid "       ikiwiki --setup configfile"
 msgstr ""
 
-#: ../ikiwiki.in:96
+#: ../ikiwiki.in:102
 msgid "usage: --set var=value"
 msgstr ""
 
-#: ../ikiwiki.in:103
+#: ../ikiwiki.in:109
 msgid "usage: --set-yaml var=value"
 msgstr ""
 
-#: ../ikiwiki.in:157
-msgid "generating wrappers.."
-msgstr "đang tạo ra các bộ bao bọc.."
-
-#: ../ikiwiki.in:220
+#: ../ikiwiki.in:215
 msgid "rebuilding wiki.."
 msgstr "đang xây dựng lại wiki.."
 
-#: ../ikiwiki.in:223
+#: ../ikiwiki.in:218
 msgid "refreshing wiki.."
 msgstr "đang làm tươi wiki.."
 
@@ -1204,40 +1220,50 @@ msgstr "đang làm tươi wiki.."
 msgid "Discussion"
 msgstr "Thảo luận"
 
-#: ../IkiWiki.pm:531
+#: ../IkiWiki.pm:538
 msgid "Must specify url to wiki with --url when using --cgi"
 msgstr ""
 "Cần phải xác định địa chỉ URL tới wiki với « --url » khi dùng « --cgi »"
 
-#: ../IkiWiki.pm:577
+#: ../IkiWiki.pm:584
 msgid "cannot use multiple rcs plugins"
 msgstr ""
 
-#: ../IkiWiki.pm:606
+#: ../IkiWiki.pm:614
 #, perl-format
 msgid "failed to load external plugin needed for %s plugin: %s"
 msgstr ""
 
-#: ../IkiWiki.pm:1298
+#: ../IkiWiki.pm:1352
 #, fuzzy, perl-format
 msgid "preprocessing loop detected on %s at depth %i"
 msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i"
 
-#: ../IkiWiki.pm:1993
+#: ../IkiWiki.pm:1536
+#, fuzzy, perl-format
+msgid "bad file name %s"
+msgstr "đang bỏ qua tên tập tin sai %s"
+
+#: ../IkiWiki.pm:1836
+#, perl-format
+msgid "template %s not found"
+msgstr "không tìm thấy mẫu %s"
+
+#: ../IkiWiki.pm:2118
 msgid "yes"
 msgstr ""
 
-#: ../IkiWiki.pm:2070
+#: ../IkiWiki.pm:2195
 #, fuzzy, perl-format
 msgid "invalid sort type %s"
 msgstr "kiểu sắp xếp không rõ %s"
 
-#: ../IkiWiki.pm:2091
+#: ../IkiWiki.pm:2216
 #, perl-format
 msgid "unknown sort type %s"
 msgstr "kiểu sắp xếp không rõ %s"
 
-#: ../IkiWiki.pm:2227
+#: ../IkiWiki.pm:2352
 #, fuzzy, perl-format
 msgid "cannot match pages: %s"
 msgstr "không thể đọc %s: %s"
@@ -1262,6 +1288,10 @@ msgstr ""
 msgid "What is the domain name of the web server?"
 msgstr ""
 
+#, fuzzy
+#~ msgid "%s not found"
+#~ msgstr "không tìm thấy mẫu %s"
+
 #~ msgid "You need to log in first."
 #~ msgstr "Trước tiên bạn cần phải đăng nhập."
 
diff --git a/t/autoindex.t b/t/autoindex.t
new file mode 100755 (executable)
index 0000000..b47f2e0
--- /dev/null
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+package IkiWiki;
+
+use warnings;
+use strict;
+use Test::More;
+
+BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+BEGIN { use_ok("IkiWiki::Plugin::autoindex"); }
+BEGIN { use_ok("IkiWiki::Plugin::html"); }
+BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
+
+ok(! system("rm -rf t/tmp; mkdir t/tmp"));
+
+$config{verbose} = 1;
+$config{srcdir} = 't/tmp';
+$config{underlaydir} = 't/tmp';
+$config{underlaydirbase} = '.';
+$config{templatedir} = 'templates';
+$config{usedirs} = 1;
+$config{htmlext} = 'html';
+$config{wiki_file_chars} = "-[:alnum:]+/.:_";
+$config{userdir} = "users";
+$config{tagbase} = "tags";
+$config{default_pageext} = "mdwn";
+$config{wiki_file_prune_regexps} = [qr/^\./];
+
+is(checkconfig(), 1);
+
+%oldrenderedfiles=%pagectime=();
+%pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
+%destsources=%renderedfiles=%pagecase=%pagestate=();
+
+# pages that (we claim) were deleted in an earlier pass
+$wikistate{autoindex}{deleted}{deleted} = 1;
+$wikistate{autoindex}{deleted}{expunged} = 1;
+$wikistate{autoindex}{deleted}{reinstated} = 1;
+
+foreach my $page (qw(tags/numbers deleted/bar reinstated reinstated/foo gone/bar)) {
+       # we use a non-default extension for these, so they're distinguishable
+       # from programmatically-created pages
+       $pagesources{$page} = "$page.html";
+       $pagemtime{$page} = $pagectime{$page} = 1000000;
+       writefile("$page.html", "t/tmp", "your ad here");
+}
+
+# "gone" disappeared just before this refresh pass so it still has a mtime
+$pagemtime{gone} = $pagectime{gone} = 1000000;
+
+IkiWiki::Plugin::autoindex::refresh();
+
+# these pages are still on record as having been deleted, because they have
+# a reason to be re-created
+is($wikistate{autoindex}{deleted}{deleted}, 1);
+is($wikistate{autoindex}{deleted}{gone}, 1);
+ok(! -f "t/tmp/deleted.mdwn");
+ok(! -f "t/tmp/gone.mdwn");
+
+# this page does not exist and has no reason to be re-created, so we forget
+# about it - it will be re-created if it gains sub-pages
+ok(! exists $wikistate{autoindex}{deleted}{expunged});
+ok(! -f "t/tmp/expunged.mdwn");
+
+# this page was re-created, so it drops off the radar
+ok(! exists $wikistate{autoindex}{deleted}{reinstated});
+ok(! -f "t/tmp/reinstated.mdwn");
+
+# needs creating
+ok(! exists $wikistate{autoindex}{deleted}{tags});
+ok(-s "t/tmp/tags.mdwn");
+
+done_testing();
+1;
index cd840fbe1b39d2d48340430da718e1e8788d5c79..6e58f48f1c4e6183ea6a03d8c194317e5b2f2759 100755 (executable)
@@ -25,6 +25,14 @@ $config{srcdir} = "$dir/repo";
 IkiWiki::loadplugins();
 IkiWiki::checkconfig();
 
+# XXX
+# This is a workaround for bzr's new requirement that bzr whoami be run
+# before committing. This makes the test suite work with an unconfigured
+# bzr, but ignores the need to have a properly configured bzr before
+# using ikiwiki with bzr.
+$ENV{HOME}=$dir;
+system 'bzr whoami test@example.com';
+
 system "bzr init $config{srcdir}";
 
 use CGI::Session;
index a7e7f8c399dd5db99abd11437dc25dc1ca30c999..a436748f90c933bbdce55e5cbd6323047bfa8188 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 use warnings;
 use strict;
-use Test::More tests => 26;
+use Test::More tests => 32;
 use Encode;
 
 BEGIN { use_ok("IkiWiki"); }
@@ -68,3 +68,21 @@ is(IkiWiki::htmlize("foo", "foo", "mdwn",
 is(IkiWiki::htmlize("foo", "foo", "mdwn",
        q{<span class="foo">bar</span>}),
        q{<span class="foo">bar</span>}, "class attribute allowed");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="aaa#foo">}),
+       q{<a href="aaa#foo">}, "simple anchor allowed");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="aaa#foo:bar">}),
+       q{<a href="aaa#foo:bar">}, "colon allowed in anchor");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="aaa?foo:bar">}),
+       q{<a href="aaa?foo:bar">}, "colon allowed in query string");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="foo:bar">}),
+       q{<a>}, "unknown protocol blocked");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="#foo">}),
+       q{<a href="#foo">}, "simple relative anchor allowed");
+is(IkiWiki::htmlize("foo", "foo", "mdwn",
+       q{<a href="#foo:bar">}),
+       q{<a href="#foo:bar">}, "colon in simple relative anchor allowed");
index 97bcc969c4068a958024658dc90f1801304dd2fd..a37b06e8e7480173df642782f96e35debd6b6922 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 use warnings;
 use strict;
-use Test::More tests => 85;
+use Test::More tests => 87;
 
 BEGIN { use_ok("IkiWiki"); }
 
@@ -82,6 +82,8 @@ ok(! pagespec_match("foo.png", "page(foo*)"), "page() fails on non-page glob");
 ok(pagespec_match("foo", "page(foo)"), "page() glob");
 ok(pagespec_match("foo", "page(f*)"), "page() glob fail");
 ok(pagespec_match("foo", "link(bar)"), "link");
+ok(pagespec_match("foo", "link(.)", location => "bar"), "link with .");
+ok(! pagespec_match("foo", "link(.)"), "link with . but missing location");
 ok(pagespec_match("foo", "link(ba?)"), "glob link");
 ok(! pagespec_match("foo", "link(quux)"), "failed link");
 ok(! pagespec_match("foo", "link(qu*)"), "failed glob link");
@@ -99,6 +101,7 @@ ok(pagespec_match("ook", "link(blog/tags/foo)"), "link internal absolute success
 ok(pagespec_match("ook", "link(/blog/tags/foo)"), "link explicit absolute success");
 ok(pagespec_match("meh", "!link(done)"), "negated failing match is a success");
 
+$ENV{TZ}="GMT";
 $IkiWiki::pagectime{foo}=1154532692; # Wed Aug  2 11:26 EDT 2006
 $IkiWiki::pagectime{bar}=1154532695; # after
 ok(pagespec_match("foo", "created_before(bar)"));
index adb8648b4aa6ec9aea50ec31f0197ab6d16d03fd..81d4d18206e860f672f7689222ef45c526dcc0a5 100755 (executable)
@@ -8,6 +8,6 @@ ok(! system("make -s ikiwiki.out"));
 ok(! system("perl -I. ./ikiwiki.out -plugin inline -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -templatedir=templates t/tinyblog t/tmp/out"));
 # This guid should never, ever change, for any reason whatsoever!
 my $guid="http://example.com/post/";
-ok(length `grep '<guid>$guid</guid>' t/tmp/out/index.rss`);
-ok(length `grep '<id>$guid</id>' t/tmp/out/index.atom`);
+ok(length `egrep '<guid.*>$guid</guid>' t/tmp/out/index.rss`);
+ok(length `egrep '<id>$guid</id>' t/tmp/out/index.atom`);
 ok(! system("rm -rf t/tmp t/tinyblog/.ikiwiki"));
diff --git a/t/po.t b/t/po.t
index b6885a37e0983fb75340ec78e13934fb4fc93e53..da0bd68a7d89e6177ddc811e503444d75c59c264 100755 (executable)
--- a/t/po.t
+++ b/t/po.t
@@ -17,7 +17,7 @@ BEGIN {
        }
 }
 
-use Test::More tests => 65;
+use Test::More tests => 109;
 
 BEGIN { use_ok("IkiWiki"); }
 
@@ -31,6 +31,11 @@ my $dir = tempdir("ikiwiki-test-po.XXXXXXXXXX",
 %config=IkiWiki::defaultconfig();
 $config{srcdir} = "$dir/src";
 $config{destdir} = "$dir/dst";
+$config{destdir} = "$dir/dst";
+$config{underlaydirbase} = "/dev/null";
+$config{underlaydir} = "/dev/null";
+$config{url} = "http://example.com";
+$config{cgiurl} = "http://example.com/ikiwiki.cgi";
 $config{discussion} = 0;
 $config{po_master_language} = { code => 'en',
                                name => 'English'
@@ -42,14 +47,16 @@ $config{po_slave_languages} = {
 $config{po_translatable_pages}='index or test1 or test2 or translatable';
 $config{po_link_to}='negotiated';
 IkiWiki::loadplugins();
-IkiWiki::checkconfig();
+ok(IkiWiki::loadplugin('meta'), "meta plugin loaded");
 ok(IkiWiki::loadplugin('po'), "po plugin loaded");
+IkiWiki::checkconfig();
 
 ### seed %pagesources and %pagecase
 $pagesources{'index'}='index.mdwn';
 $pagesources{'index.fr'}='index.fr.po';
 $pagesources{'index.es'}='index.es.po';
 $pagesources{'test1'}='test1.mdwn';
+$pagesources{'test1.es'}='test1.es.po';
 $pagesources{'test1.fr'}='test1.fr.po';
 $pagesources{'test2'}='test2.mdwn';
 $pagesources{'test2.es'}='test2.es.po';
@@ -61,12 +68,14 @@ $pagesources{'translatable.fr'}='translatable.fr.po';
 $pagesources{'translatable.es'}='translatable.es.po';
 $pagesources{'nontranslatable'}='nontranslatable.mdwn';
 foreach my $page (keys %pagesources) {
-    $IkiWiki::pagecase{lc $page}=$page;
+       $IkiWiki::pagecase{lc $page}=$page;
 }
 
 ### populate srcdir
-writefile('index.mdwn', $config{srcdir}, '[[translatable]] [[nontranslatable]]');
-writefile('test1.mdwn', $config{srcdir}, 'test1 content');
+writefile('index.mdwn', $config{srcdir},
+          "[[!meta title=\"index title\"]]\n[[translatable]] [[nontranslatable]]");
+writefile('test1.mdwn', $config{srcdir},
+          "[[!meta title=\"test1 title\"]]\ntest1 content");
 writefile('test2.mdwn', $config{srcdir}, 'test2 content');
 writefile('test3.mdwn', $config{srcdir}, 'test3 content');
 writefile('translatable.mdwn', $config{srcdir}, '[[nontranslatable]]');
@@ -85,12 +94,22 @@ ok(! IkiWiki::Plugin::po::istranslation('index'), "index is not a translation");
 ok(IkiWiki::Plugin::po::istranslation('index.fr'), "index.fr is a translation");
 ok(IkiWiki::Plugin::po::istranslation('index.es'), "index.es is a translation");
 ok(IkiWiki::Plugin::po::istranslation('/index.fr'), "/index.fr is a translation");
+ok(IkiWiki::Plugin::po::istranslatable('test1'), "test1 is translatable");
+ok(IkiWiki::Plugin::po::istranslation('test1.es'), "test1.es is a translation");
+ok(IkiWiki::Plugin::po::istranslation('test1.fr'), "test1.fr is a translation");
 ok(IkiWiki::Plugin::po::istranslatable('test2'), "test2 is translatable");
 ok(! IkiWiki::Plugin::po::istranslation('test2'), "test2 is not a translation");
 ok(! IkiWiki::Plugin::po::istranslatable('test3'), "test3 is not translatable");
 ok(! IkiWiki::Plugin::po::istranslation('test3'), "test3 is not a translation");
 }
 
+### pofiles
+
+my @pofiles = IkiWiki::Plugin::po::pofiles(srcfile("index.mdwn"));
+ok( @pofiles, "pofiles is defined");
+ok( @pofiles == 2, "pofiles has correct size");
+is_deeply(\@pofiles, ["$config{srcdir}/index.es.po", "$config{srcdir}/index.fr.po"], "pofiles content is correct");
+
 ### links
 require IkiWiki::Render;
 
@@ -122,8 +141,8 @@ $config{po_link_to}='current';
 $msgprefix="links (po_link_to=current)";
 refresh_n_scan('index.mdwn', 'translatable.mdwn', 'nontranslatable.mdwn');
 is_deeply(\@{$links{'index'}}, ['translatable', 'nontranslatable'], "$msgprefix index");
-is_deeply(\@{$links{'index.es'}}, [ map bestlink('index.es', $_), ('translatable.es', 'nontranslatable')], "$msgprefix index.es");
-is_deeply(\@{$links{'index.fr'}}, [ map bestlink('index.fr', $_), ('translatable.fr', 'nontranslatable')], "$msgprefix index.fr");
+is_deeply(\@{$links{'index.es'}}, [ (map bestlink('index.es', $_), ('translatable.es', 'nontranslatable'))], "$msgprefix index.es");
+is_deeply(\@{$links{'index.fr'}}, [ (map bestlink('index.fr', $_), ('translatable.fr', 'nontranslatable'))], "$msgprefix index.fr");
 is_deeply(\@{$links{'translatable'}}, [bestlink('translatable', 'nontranslatable')], "$msgprefix translatable");
 is_deeply(\@{$links{'translatable.es'}}, ['nontranslatable'], "$msgprefix translatable.es");
 is_deeply(\@{$links{'translatable.fr'}}, ['nontranslatable'], "$msgprefix translatable.fr");
@@ -149,11 +168,32 @@ $msgprefix="urlto (po_link_to=current)";
 is(urlto('', 'index'), './index.en.html', "$msgprefix index -> ''");
 is(urlto('', 'nontranslatable'), '../index.en.html', "$msgprefix nontranslatable -> ''");
 is(urlto('', 'translatable.fr'), '../index.fr.html', "$msgprefix translatable.fr -> ''");
+# when asking for a semi-absolute or absolute URL, we can't know what the
+# current language is, so for translatable pages we use the master language
+is(urlto('nontranslatable'), '/nontranslatable/', "$msgprefix 1-arg -> nontranslatable");
+is(urlto('translatable'), '/translatable/index.en.html', "$msgprefix 1-arg -> translatable");
+is(urlto('nontranslatable', undef, 1), 'http://example.com/nontranslatable/', "$msgprefix 1-arg -> nontranslatable");
+is(urlto('index', undef, 1), 'http://example.com/index.en.html', "$msgprefix 1-arg -> index");
+is(urlto('', undef, 1), 'http://example.com/index.en.html', "$msgprefix 1-arg -> ''");
+# FIXME: should these three produce the negotiatable URL instead of the master
+# language?
+is(urlto(''), '/index.en.html', "$msgprefix 1-arg -> ''");
+is(urlto('index'), '/index.en.html', "$msgprefix 1-arg -> index");
+is(urlto('translatable', undef, 1), 'http://example.com/translatable/index.en.html', "$msgprefix 1-arg -> translatable");
+
 $config{po_link_to}='negotiated';
 $msgprefix="urlto (po_link_to=negotiated)";
 is(urlto('', 'index'), './', "$msgprefix index -> ''");
 is(urlto('', 'nontranslatable'), '../', "$msgprefix nontranslatable -> ''");
 is(urlto('', 'translatable.fr'), '../', "$msgprefix translatable.fr -> ''");
+is(urlto('nontranslatable'), '/nontranslatable/', "$msgprefix 1-arg -> nontranslatable");
+is(urlto('translatable'), '/translatable/', "$msgprefix 1-arg -> translatable");
+is(urlto(''), '/', "$msgprefix 1-arg -> ''");
+is(urlto('index'), '/', "$msgprefix 1-arg -> index");
+is(urlto('nontranslatable', undef, 1), 'http://example.com/nontranslatable/', "$msgprefix 1-arg -> nontranslatable");
+is(urlto('translatable', undef, 1), 'http://example.com/translatable/', "$msgprefix 1-arg -> translatable");
+is(urlto('index', undef, 1), 'http://example.com/', "$msgprefix 1-arg -> index");
+is(urlto('', undef, 1), 'http://example.com/', "$msgprefix 1-arg -> ''");
 
 ### bestlink
 $config{po_link_to}='current';
@@ -175,3 +215,29 @@ $msgprefix="beautify_urlpath (po_link_to=negotiated)";
 is(IkiWiki::beautify_urlpath('test1/index.html'), './test1/', "$msgprefix test1/index.html");
 is(IkiWiki::beautify_urlpath('test1/index.en.html'), './test1/', "$msgprefix test1/index.en.html");
 is(IkiWiki::beautify_urlpath('test1/index.fr.html'), './test1/', "$msgprefix test1/index.fr.html");
+$config{po_link_to}='current';
+$msgprefix="beautify_urlpath (po_link_to=current)";
+is(IkiWiki::beautify_urlpath('test1/index.en.html'), './test1/index.en.html', "$msgprefix test1/index.en.html");
+is(IkiWiki::beautify_urlpath('test1/index.fr.html'), './test1/index.fr.html', "$msgprefix test1/index.fr.html");
+
+### re-scan
+refresh_n_scan('index.mdwn');
+is($pagestate{'index'}{meta}{title}, 'index title');
+is($pagestate{'index.es'}{meta}{title}, 'index title');
+is($pagestate{'index.fr'}{meta}{title}, 'index title');
+refresh_n_scan('test1.mdwn');
+is($pagestate{'test1'}{meta}{title}, 'test1 title');
+is($pagestate{'test1.es'}{meta}{title}, 'test1 title');
+is($pagestate{'test1.fr'}{meta}{title}, 'test1 title');
+
+### istranslatedto
+ok(IkiWiki::Plugin::po::istranslatedto('index', 'es'));
+ok(IkiWiki::Plugin::po::istranslatedto('index', 'fr'));
+ok(! IkiWiki::Plugin::po::istranslatedto('index', 'cz'));
+ok(IkiWiki::Plugin::po::istranslatedto('test1', 'es'));
+ok(IkiWiki::Plugin::po::istranslatedto('test1', 'fr'));
+ok(! IkiWiki::Plugin::po::istranslatedto('test1', 'cz'));
+ok(! IkiWiki::Plugin::po::istranslatedto('nontranslatable', 'es'));
+ok(! IkiWiki::Plugin::po::istranslatedto('nontranslatable', 'cz'));
+ok(! IkiWiki::Plugin::po::istranslatedto('test1.es', 'fr'));
+ok(! IkiWiki::Plugin::po::istranslatedto('test1.fr', 'es'));
diff --git a/t/rssurls.t b/t/rssurls.t
new file mode 100755 (executable)
index 0000000..8707704
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More tests => 13;
+
+BEGIN { use_ok("IkiWiki::Plugin::inline"); }
+
+# Test the absolute_urls function, used to fix up relative urls for rss
+# feeds.
+sub test {
+       my $input=shift;
+       my $baseurl=shift;
+       my $expected=shift;
+       $expected=~s/URL/$baseurl/g;
+       is(IkiWiki::absolute_urls($input, $baseurl), $expected);
+       # try it with single quoting -- it's ok if the result comes back
+       # double or single-quoted
+       $input=~s/"/'/g;
+       my $expected_alt=$expected;
+       $expected_alt=~s/"/'/g;
+       my $ret=IkiWiki::absolute_urls($input, $baseurl);
+       ok(($ret eq $expected) || ($ret eq $expected_alt), "$ret vs $expected");
+}
+
+sub unchanged {
+       test($_[0], $_[1], $_[0]);
+}
+
+my $url="http://example.com/blog/foo/";
+unchanged("foo", $url);
+unchanged('<a href="http://other.com/bar.html">', $url, );
+test('<a href="bar.html">', $url, '<a href="URLbar.html">');
+test('<a href="/bar.html">', $url, '<a href="http://example.com/bar.html">');
+test('<img src="bar.png" />', $url, '<img src="URLbar.png" />');
+test('<img src="/bar.png" />', $url, '<img src="http://example.com/bar.png" />');
+# off until bug #603736 is fixed
+#test('<video controls src="bar.ogg">', $url, '<video controls src="URLbar.ogg">');
diff --git a/t/tag.t b/t/tag.t
index fe547d85bc51eaa306d85b90e28d79d4793f8a4e..ec17d543418e4bb0bcc00fd81aa4ceb22d0f74a7 100755 (executable)
--- a/t/tag.t
+++ b/t/tag.t
@@ -3,15 +3,30 @@ package IkiWiki;
 
 use warnings;
 use strict;
-use Test::More tests => 7;
+use Test::More tests => 21;
 
 BEGIN { use_ok("IkiWiki"); }
+BEGIN { use_ok("IkiWiki::Render"); }
+BEGIN { use_ok("IkiWiki::Plugin::mdwn"); }
 BEGIN { use_ok("IkiWiki::Plugin::tag"); }
 
 ok(! system("rm -rf t/tmp; mkdir t/tmp"));
 
+$config{verbose} = 1;
+$config{srcdir} = 't/tmp';
+$config{underlaydir} = 't/tmp';
+$config{templatedir} = 'templates';
+$config{usedirs} = 1;
+$config{htmlext} = 'html';
+$config{wiki_file_chars} = "-[:alnum:]+/.:_";
 $config{userdir} = "users";
 $config{tagbase} = "tags";
+$config{tag_autocreate} = 1;
+$config{default_pageext} = "mdwn";
+$config{wiki_file_prune_regexps} = [qr/^\./];
+$config{underlaydirbase} = '.';
+
+is(checkconfig(), 1);
 
 %oldrenderedfiles=%pagectime=();
 %pagesources=%pagemtime=%oldlinks=%links=%depends=%typedlinks=%oldtypedlinks=
@@ -20,6 +35,7 @@ $config{tagbase} = "tags";
 foreach my $page (qw(tags/numbers tags/letters one two alpha beta)) {
        $pagesources{$page} = "$page.mdwn";
        $pagemtime{$page} = $pagectime{$page} = 1000000;
+       writefile("$page.mdwn", "t/tmp", "your ad here");
 }
 
 $links{one}=[qw(tags/numbers alpha tags/letters)];
@@ -36,4 +52,31 @@ ok(!pagespec_match("two", "tagged(alpha)"));
 ok(pagespec_match("one", "link(tags/numbers)"));
 ok(pagespec_match("one", "link(alpha)"));
 
+# emulate preprocessing [[!tag numbers primes lucky]] on page "seven", causing
+# the "numbers" and "primes" tag pages to be auto-created
+IkiWiki::Plugin::tag::preprocess_tag(page => "seven", numbers => undef, primes => undef, lucky => undef);
+is($autofiles{"tags/lucky.mdwn"}{plugin}, "tag");
+is($autofiles{"tags/numbers.mdwn"}{plugin}, "tag");
+is($autofiles{"tags/primes.mdwn"}{plugin}, "tag");
+
+ok(!-e "t/tmp/tags/lucky.mdwn");
+my (%pages, @del);
+IkiWiki::gen_autofile("tags/lucky.mdwn", \%pages, \@del);
+is_deeply(\%pages, {"t/tmp/tags/lucky" => 1}) || diag explain \%pages;
+is_deeply(\@del, []) || diag explain \@del;
+ok(-s "t/tmp/tags/lucky.mdwn");
+
+# generating an autofile that already exists does nothing
+%pages = @del = ();
+IkiWiki::gen_autofile("tags/numbers.mdwn", \%pages, \@del);
+is_deeply(\%pages, {}) || diag explain \%pages;
+is_deeply(\@del, []) || diag explain \@del;
+
+# generating an autofile that we just deleted does nothing
+%pages = ();
+@del = ('tags/primes.mdwn');
+IkiWiki::gen_autofile("tags/primes.mdwn", \%pages, \@del);
+is_deeply(\%pages, {}) || diag explain \%pages;
+is_deeply(\@del, ['tags/primes.mdwn']) || diag explain \@del;
+
 1;
diff --git a/t/urlto.t b/t/urlto.t
new file mode 100755 (executable)
index 0000000..338632e
--- /dev/null
+++ b/t/urlto.t
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Test::More tests => 26;
+
+BEGIN { use_ok("IkiWiki"); }
+
+$IkiWiki::config{srcdir} = '/does/not/exist/';
+$IkiWiki::config{usedirs} = 1;
+$IkiWiki::config{htmlext} = "HTML";
+$IkiWiki::config{wiki_file_chars} = "A-Za-z0-9._";
+
+$IkiWiki::config{url} = "http://smcv.example.co.uk";
+$IkiWiki::config{cgiurl} = "http://smcv.example.co.uk/cgi-bin/ikiwiki.cgi";
+is(IkiWiki::checkconfig(), 1);
+
+# absolute version
+is(IkiWiki::cgiurl(cgiurl => $config{cgiurl}), "http://smcv.example.co.uk/cgi-bin/ikiwiki.cgi");
+is(IkiWiki::cgiurl(cgiurl => $config{cgiurl}, do => 'badger'), "http://smcv.example.co.uk/cgi-bin/ikiwiki.cgi?do=badger");
+is(IkiWiki::urlto('index', undef, 1), "http://smcv.example.co.uk/");
+is(IkiWiki::urlto('stoats', undef, 1), "http://smcv.example.co.uk/stoats/");
+is(IkiWiki::urlto('', undef, 1), "http://smcv.example.co.uk/");
+
+# "local" (absolute path within site) version (default for cgiurl)
+is(IkiWiki::cgiurl(), "/cgi-bin/ikiwiki.cgi");
+is(IkiWiki::cgiurl(do => 'badger'), "/cgi-bin/ikiwiki.cgi?do=badger");
+is(IkiWiki::baseurl(undef), "/");
+is(IkiWiki::urlto('index', undef), "/");
+is(IkiWiki::urlto('index'), "/");
+is(IkiWiki::urlto('stoats', undef), "/stoats/");
+is(IkiWiki::urlto('stoats'), "/stoats/");
+is(IkiWiki::urlto(''), "/");
+
+# fully-relative version (default for urlto and baseurl)
+is(IkiWiki::baseurl('badger/mushroom'), "../../");
+is(IkiWiki::urlto('badger/mushroom', 'snake'), "../badger/mushroom/");
+is(IkiWiki::urlto('', 'snake'), "../");
+is(IkiWiki::urlto('', 'penguin/herring'), "../../");
+
+# explicit cgiurl override
+is(IkiWiki::cgiurl(cgiurl => 'https://foo/ikiwiki'), "https://foo/ikiwiki");
+is(IkiWiki::cgiurl(do => 'badger', cgiurl => 'https://foo/ikiwiki'), "https://foo/ikiwiki?do=badger");
+
+# with url and cgiurl on different sites, "local" degrades to absolute
+$IkiWiki::config{url} = "http://example.co.uk/~smcv";
+$IkiWiki::config{cgiurl} = "http://dynamic.example.co.uk/~smcv/ikiwiki.cgi";
+is(IkiWiki::checkconfig(), 1);
+is(IkiWiki::cgiurl(), "http://dynamic.example.co.uk/~smcv/ikiwiki.cgi");
+is(IkiWiki::baseurl(undef), "http://example.co.uk/~smcv/");
+is(IkiWiki::urlto('stoats', undef), "http://example.co.uk/~smcv/stoats/");
+is(IkiWiki::urlto('', undef), "http://example.co.uk/~smcv/");
index 671b9e48358445260ce6d0db200c0d5750625993..d7ec9087534af331eb53ee1c4f9ab6f786a76e6f 100644 (file)
 <span class="desc"><br />Changed pages:</span>
 <span class="pagelinks">
 <TMPL_LOOP PAGES>
-<TMPL_IF DIFFURL><a href="<TMPL_VAR DIFFURL>">[[diff|wikiicons/diff.png]]</a><TMPL_VAR LINK>
-<TMPL_ELSE>
-<TMPL_VAR LINK>
-</TMPL_IF>
+<TMPL_IF DIFFURL><a href="<TMPL_VAR DIFFURL>" title="diff" rel="nofollow">[[diff|wikiicons/diff.png]]</a><TMPL_VAR LINK>
+<TMPL_ELSE><TMPL_VAR LINK></TMPL_IF>
 </TMPL_LOOP>
 </span>
 <span class="desc"><br />Changed by:</span>
 <span class="committype"><TMPL_VAR COMMITTYPE></span>
 <span class="desc"><br />Date:</span>
 <span class="changedate"><TMPL_VAR COMMITDATE></span>
+<span class="desc"><br /></span>
+<TMPL_IF REVERTURL><span class="revert">
+<a href="<TMPL_VAR REVERTURL>" title="revert" rel="nofollow">[[revert|wikiicons/revert.png]]</a>
+</span></TMPL_IF>
 </div>
 <div class="changelog">
 <TMPL_LOOP MESSAGE>
diff --git a/templates/revert.tmpl b/templates/revert.tmpl
new file mode 100644 (file)
index 0000000..0de3281
--- /dev/null
@@ -0,0 +1,21 @@
+<TMPL_VAR FORM-START>
+<div>
+ <TMPL_VAR FIELD-DO>
+ <TMPL_VAR FIELD-SID>
+ <TMPL_VAR FIELD-REV>
+<label for="revertmessage" class="block">Optional comment about this change:</label>
+ <TMPL_VAR FIELD-REVERTMESSAGE>
+</div>
+<div class="revert buttons">
+<TMPL_VAR form-submit>
+<TMPL_VAR form-cancel>
+</div>
+<TMPL_VAR FORM-END>
+<br \>
+<div class="header">
+<span>Diff being reverted:</span>
+</div>
+<div id="diff">
+<pre>
+<TMPL_VAR diff>
+</pre>
index a64a4ebd79273ceac6c62081efee655e40b9c449..272b340bbdf144373ecd3a484e92bbbeb369cd55 100644 (file)
@@ -8,7 +8,7 @@
 <TMPL_IF GUID>
        <guid isPermaLink="no"><TMPL_VAR GUID></guid>
 <TMPL_ELSE>
-       <guid><TMPL_VAR URL></guid>
+       <guid isPermaLink="no"><TMPL_VAR URL></guid>
 </TMPL_IF>
        <link><TMPL_VAR PERMALINK></link>
 <TMPL_IF CATEGORIES>
index c5925cedd979ddfadde239ef9685a8ac12ba7909..749d9b21e1ca9c1efae9195f04d07242388557e7 100644 (file)
@@ -69,11 +69,11 @@ body {
 
 .pageheader .actions {
        position: absolute;
-       bottom: 5px;
+       bottom: 0;
        right: 2em;
        width: 100%;
        text-align: right;
-       padding: 0;
+       padding: 2px;
 }
 
 #content, #comments, #footer {
@@ -97,8 +97,7 @@ body {
 
 h1 { font: 120% sans-serif }
 h2 { font: bold 100% sans-serif }
-h3 { font: italic 100% sans-serif }
-h4, h5, h6 { font: small-caps 100% sans-serif }
+h3, h4, h5, h6 { font: bold 80% sans-serif }
 
 /* Smaller headings for inline pages */
 .inlinepage h1 { font-size: 110% }
index 540cac415ca7148bb3b519e8493e2281e1433b2e..c07d1cdfa4b305e8a336575c6c0ac5cc9626fda3 100644 (file)
@@ -197,14 +197,14 @@ body {
        font-weight: bold;
 }
 
-.pageheader .header .title, .pageheader .header .parentlinks, .pageheader .actions ul li, .pageheader .header span {
+.pageheader .header .title, .pageheader .header .parentlinks, .pageheader .actions ul li, .pageheader .header span, .pageheader #otherlanguages ul li {
        padding: 0.25em 0.25em 0.25em 0.25em;
        background-image: url('background_darkness.png');
        background-repeat: repeat;
        color: white;
 }
 
-.pageheader .header span a, .pageheader .actions ul li a, .pageheader .header .parentlinks a {
+.pageheader .header span a, .pageheader .actions ul li a, .pageheader .header .parentlinks a, .pageheader #otherlanguages ul li a {
        color: white;
        text-decoration: none;
 }
diff --git a/themes/goldtype/background_darkness.png b/themes/goldtype/background_darkness.png
new file mode 100644 (file)
index 0000000..0a1cb4e
Binary files /dev/null and b/themes/goldtype/background_darkness.png differ
diff --git a/themes/goldtype/base.css b/themes/goldtype/base.css
new file mode 120000 (symlink)
index 0000000..d931877
--- /dev/null
@@ -0,0 +1 @@
+../blueview/style.css
\ No newline at end of file
diff --git a/themes/goldtype/header_background.png b/themes/goldtype/header_background.png
new file mode 100644 (file)
index 0000000..50b11dd
Binary files /dev/null and b/themes/goldtype/header_background.png differ
diff --git a/themes/goldtype/style.css b/themes/goldtype/style.css
new file mode 100644 (file)
index 0000000..9c217c7
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * goldtype theme for ikiwiki
+ */
+
+.pageheader {
+       background-repeat: no-repeat;
+       background-color: #f2d98d;
+       padding: 0;
+       padding-right: 1em;
+       margin-bottom: 2em;
+}
+
+html, body {
+       background-color: #f2d98d;
+}
+
+#content a:hover, #comments a:hover, .sidebar a:hover,
+#content a:visited:hover, #comments a:visited:hover, .sidebar a:visited:hover {
+    color: red;
+}
+#content a:visited, #comments a:visited, .sidebar a:visited {
+    color: #37485e;
+}
index f22f5776a17713b7a5d05b93a2040b6eb393ef49..c59be1edc3e2538fe92b43df985e6f65c3f4ffab 100644 (file)
@@ -21,7 +21,7 @@ var providers_large = {
        icon: 'wikiicons/openidlogin-bg.gif',
         label: 'Enter your OpenID:',
         url: null
-    },
+    }
 };
 var providers_small = {
     livejournal: {
@@ -65,7 +65,7 @@ var providers_small = {
        icon: 'http://verisign.com/favicon.ico',
         label: 'Enter your Verisign username:',
         url: 'http://{username}.pip.verisignlabs.com/'
-    },
+    }
 };
 var providers = $.extend({}, providers_large, providers_small);