X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/ff700576e342ac67bf575c4fa6220d5b051d1872..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 ecad4f9db..8a8677993 100644 --- a/doc/todo/inline:_numerical_ordering_by_title.mdwn +++ b/doc/todo/inline:_numerical_ordering_by_title.mdwn @@ -30,6 +30,17 @@ Do you have any idea how to workaround that issue? --[[Paweł|ptecza]] >> I don't want to rename all previous files to add `0` prefix. --[[Paweł|ptecza]] +>>> Rather than adding 0's or or a 'sorttype' parameter, I'd just fix the sort order. +>>> Both MacOS and Windows use a smarter sort order than just lexical in their +>>> file browsers (e.g. , +>>> ). +>>> +>>> The [Unicode Collation algorithm](http://en.wikipedia.org/wiki/Unicode_collation_algorithm) +>>> would seem to be a reasonable sort order. (See also .) +>>> Unfortunately the standard perl implementation, [Unicode::Collate](http://perldoc.perl.org/Unicode/Collate.html) +>>> doesn't handle the optional [numbers](http://www.unicode.org/unicode/reports/tr10/#Customization) +>>> extension which is what you want. --[[Will]] + --- Below is my simple patch. Feel free to use it or comment! @@ -72,3 +83,127 @@ I have also 2 considerations for inline sorting: } if (yesno($params{reverse})) { + +--- + +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;