Add alternate patch

master
http://www.cse.unsw.edu.au/~willu/ 2008-09-24 00:45:03 -04:00 committed by Joey Hess
parent 6036a954a0
commit 3c65e5dc93
1 changed files with 120 additions and 0 deletions

View File

@ -87,3 +87,123 @@ I have also 2 considerations for inline sorting:
--- ---
Joey, have you forgotten about that request? ;) --[[Paweł|ptecza]] 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;