From: http://www.cse.unsw.edu.au/~willu/ Date: Wed, 24 Sep 2008 04:45:03 +0000 (-0400) Subject: Add alternate patch X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/commitdiff_plain/3c65e5dc930aceccdbc46273c8f8829908a72472?ds=sidebyside 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 { + "
  • $_
  • " + } + - sort @broken) + + sort titlecmp @broken) + ."\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). + "" + - } sort @orphans). + + } sort titlecmp @orphans). + "\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;