From: http://www.cse.unsw.edu.au/~willu/ <http://www.cse.unsw.edu.au/~willu/@web>
Date: Wed, 24 Sep 2008 04:45:03 +0000 (-0400)
Subject: Add alternate patch
X-Git-Tag: 2.65~2
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/3c65e5dc930aceccdbc46273c8f8829908a72472

Add alternate patch
---

diff --git a/doc/todo/inline:_numerical_ordering_by_title.mdwn b/doc/todo/inline:_numerical_ordering_by_title.mdwn
index 3dc207b6b..8a8677993 100644
--- a/doc/todo/inline:_numerical_ordering_by_title.mdwn
+++ b/doc/todo/inline:_numerical_ordering_by_title.mdwn
@@ -87,3 +87,123 @@ I have also 2 considerations for inline sorting:
 ---
 
 Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]]
+
+> Okie.  Here is a different [[patch]] based on my comment above.  It doesn't introduce
+> a new key, but rather changes the title sorting order. Two caveats:
+
+ * I've only tested this in `inline`, not the other places I changed the sort order.
+ * I'm unsure if the regexp used in the split should be `/(-?\d+)/` instead of `/(\d+)/`.
+    As written, '-' is interpreted as a hyphen rather than a minus sign.
+
+> --[[Will]]
+
+----
+
+    diff --git a/IkiWiki.pm b/IkiWiki.pm
+    index c0f5dea..d001f8d 100644
+    --- a/IkiWiki.pm
+    +++ b/IkiWiki.pm
+    @@ -20,7 +20,7 @@ use Exporter q{import};
+     our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
+                      bestlink htmllink readfile writefile pagetype srcfile pagename
+                      displaytime will_render gettext urlto targetpage
+    -		 add_underlay
+    +		 add_underlay titlecmp
+                      %config %links %pagestate %renderedfiles
+                      %pagesources %destsources);
+     our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
+    @@ -835,6 +835,42 @@ sub titlepage ($) { #{{{
+     	return $title;
+     } #}}}
+     
+    +sub titlecmp ($$) { #{{{
+    +	my $titleA=shift;
+    +	my $titleB=shift;
+    +	
+    +	my @listA=split(/(\d+)/,$titleA);
+    +	my @listB=split(/(\d+)/,$titleB);
+    +	
+    +	while (@listA && @listB) {
+    +		# compare bits of text
+    +		my $a = shift @listA;
+    +		my $b = shift @listB;
+    +		my $c = ($a cmp $b);
+    +		return $c if ($c);
+    +
+    +		if (@listA && @listB) {
+    +			# compare numbers
+    +			$a = shift @listA;
+    +			$b = shift @listB;
+    +			$c = $a <=> $b;
+    +			return $c if ($c);
+    +			
+    +			# 01 is different to 1
+    +			$c = (length($a) <=> length($b));
+    +			return $c if ($c);
+    +
+    +			$c = ($a cmp $b);
+    +			return $c if ($c);
+    +		}
+    +	}
+    +	
+    +	return 1 if (@listA);
+    +	return -1 if (@listB);
+    +	
+    +	return 0;
+    +} #}}}
+    +
+     sub linkpage ($) { #{{{
+     	my $link=shift;
+     	my $chars = defined $config{wiki_file_chars} ? $config{wiki_file_chars} : "-[:alnum:]+/.:_";
+    diff --git a/IkiWiki/Plugin/brokenlinks.pm b/IkiWiki/Plugin/brokenlinks.pm
+    index 37752dd..ccaa399 100644
+    --- a/IkiWiki/Plugin/brokenlinks.pm
+    +++ b/IkiWiki/Plugin/brokenlinks.pm
+    @@ -59,7 +59,7 @@ sub preprocess (@) { #{{{
+     			map {
+     				"<li>$_</li>"
+     			}
+    -			sort @broken)
+    +			sort titlecmp @broken)
+     		."</ul>\n";
+     } # }}}
+     
+    diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
+    index 8efef3f..263e7a6 100644
+    --- a/IkiWiki/Plugin/inline.pm
+    +++ b/IkiWiki/Plugin/inline.pm
+    @@ -192,7 +192,7 @@ sub preprocess_inline (@) { #{{{
+     	}
+     
+     	if (exists $params{sort} && $params{sort} eq 'title') {
+    -		@list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list;
+    +		@list=sort { titlecmp(pagetitle(basename($a)),pagetitle(basename($b))) } @list;
+     	}
+     	elsif (exists $params{sort} && $params{sort} eq 'mtime') {
+     		@list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list;
+    diff --git a/IkiWiki/Plugin/orphans.pm b/IkiWiki/Plugin/orphans.pm
+    index b910758..10a1d87 100644
+    --- a/IkiWiki/Plugin/orphans.pm
+    +++ b/IkiWiki/Plugin/orphans.pm
+    @@ -56,7 +56,7 @@ sub preprocess (@) { #{{{
+     				htmllink($params{page}, $params{destpage}, $_,
+     					 noimageinline => 1).
+     				"</li>"
+    -			} sort @orphans).
+    +			} sort titlecmp @orphans).
+     		"</ul>\n";
+     } # }}}
+     
+    diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
+    index ceb7c84..00798e1 100644
+    --- a/IkiWiki/Render.pm
+    +++ b/IkiWiki/Render.pm
+    @@ -89,7 +89,7 @@ sub genpage ($$) { #{{{
+     		$template->param(have_actions => 1);
+     	}
+     
+    -	my @backlinks=sort { $a->{page} cmp $b->{page} } backlinks($page);
+    +	my @backlinks=sort { titlecmp($a->{page}, $b->{page}) } backlinks($page);
+     	my ($backlinks, $more_backlinks);
+     	if (@backlinks <= $config{numbacklinks} || ! $config{numbacklinks}) {
+     		$backlinks=\@backlinks;