Split out sortnaturally into a plugin
authorSimon McVittie <smcv@debian.org>
Sat, 3 Apr 2010 12:48:30 +0000 (13:48 +0100)
committerSimon McVittie <smcv@debian.org>
Sat, 3 Apr 2010 13:28:21 +0000 (14:28 +0100)
IkiWiki.pm
IkiWiki/Plugin/sortnaturally.pm [new file with mode: 0644]
debian/NEWS
doc/ikiwiki/pagespec/sorting.mdwn
doc/plugins/sortnaturally.mdwn [new file with mode: 0644]

index a89c14058c0520bbb269a798882ea5a68b27f6f6..8f36f5818c641424b9ba060d77b714f618ad11cb 100644 (file)
@@ -2423,15 +2423,4 @@ sub cmp_title {
 sub cmp_mtime { $IkiWiki::pagemtime{$_[1]} <=> $IkiWiki::pagemtime{$_[0]} }
 sub cmp_age { $IkiWiki::pagectime{$_[1]} <=> $IkiWiki::pagectime{$_[0]} }
 
-sub check_cmp_title_natural {
-       eval q{use Sort::Naturally};
-       if ($@) {
-               error(gettext("Sort::Naturally needed for title_natural sort"));
-       }
-}
-sub cmp_title_natural {
-       Sort::Naturally::ncmp(IkiWiki::pagetitle(IkiWiki::basename($_[0])),
-               IkiWiki::pagetitle(IkiWiki::basename($_[1])))
-}
-
 1
diff --git a/IkiWiki/Plugin/sortnaturally.pm b/IkiWiki/Plugin/sortnaturally.pm
new file mode 100644 (file)
index 0000000..0023f31
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/perl
+# Sort::Naturally-powered title_natural sort order for IkiWiki
+package IkiWiki::Plugin::sortnaturally;
+
+use IkiWiki 3.00;
+no warnings;
+
+sub import {
+       hook(type => "getsetup", id => "sortnaturally", call => \&getsetup);
+}
+
+sub getsetup {
+       return
+               plugin => {
+                       safe => 1,
+                       rebuild => 1,
+               },
+}
+
+sub checkconfig () {
+       eval q{use Sort::Naturally};
+       error $@ if $@;
+}
+
+package IkiWiki::PageSpec;
+
+sub cmp_title_natural {
+       Sort::Naturally::ncmp(IkiWiki::pagetitle(IkiWiki::basename($_[0])),
+               IkiWiki::pagetitle(IkiWiki::basename($_[1])))
+}
+
+1;
index 50332670ff96bf3e0b36f6073835e8af831f6da0..614eb11f8642272c551401ecf915f2cc7d5b2491 100644 (file)
@@ -1,3 +1,11 @@
+ikiwiki (3.20100320) UNRELEASED; urgency=low
+
+  The sort="title_natural" option on [[!inline]] etc. now requires the
+  new sortnaturally plugin. This is not enabled by default, because it requires
+  the Sort::Naturally module.
+
+ -- Simon McVittie <smcv@debian.org>  Sat, 03 Apr 2010 13:46:08 +0100
+
 ikiwiki (3.20091017) unstable; urgency=low
 
   To take advantage of significant performance improvements, all
index f27972d4ebad13becf442eec9c4b35eec41ca0ef..ba995a521632edaddd97d120ddd039e41e73e139 100644 (file)
@@ -6,9 +6,10 @@ orders can be specified.
 * `age` - List pages from the most recently created to the oldest.
 * `mtime` - List pages with the most recently modified first.
 * `title` - Order by title (page name).
-* `title_natural` - Only available if [[!cpan Sort::Naturally]] is
-  installed. Orders by title, but numbers in the title are treated
+[[!if test="enabled(sortnaturally)" then="""
+* `title_natural` - Orders by title, but numbers in the title are treated
   as such, ("1 2 9 10 20" instead of "1 10 2 20 9")
+"""]]
 [[!if test="enabled(meta)" then="""
 * `meta_title` - Order according to the `\[[!meta title="foo" sort="bar"]]`
   or `\[[!meta title="foo"]]` [[ikiwiki/directive]], or the page name if no
diff --git a/doc/plugins/sortnaturally.mdwn b/doc/plugins/sortnaturally.mdwn
new file mode 100644 (file)
index 0000000..91f373f
--- /dev/null
@@ -0,0 +1,5 @@
+[[!template id=plugin name=sortnaturally core=1 author="[[chrysn]], [[smcv]]"]]
+[[!tag type/meta]]
+
+This plugin provides the `title_natural` [[ikiwiki/pagespec/sorting]] order,
+which uses Sort::Naturally to sort numbered pages in a more natural order.