X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/6036a954a09a10e9c9eb8bfb0a1493be93fc931b..3c65e5dc930aceccdbc46273c8f8829908a72472:/doc/todo/inline:_numerical_ordering_by_title.mdwn 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 { + "