From: Norman Walsh Date: Mon, 26 Aug 2002 10:56:53 +0000 (+0000) Subject: Support page ranges (generated by startofrang/endofrange index entries) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d55446187070adfd2c60ebea43041c378f787532;p=docbook-dsssl Support page ranges (generated by startofrang/endofrange index entries) --- diff --git a/xsl/fo/pdf2index b/xsl/fo/pdf2index index 2a8439852..c52963989 100755 --- a/xsl/fo/pdf2index +++ b/xsl/fo/pdf2index @@ -29,6 +29,22 @@ while ($index =~ /^(.*?)((.*?<\/phrase>\s*)+)/s) { my @pages = m/.*?<\/phrase>\s*/sg; + # Expand ranges + if ($#pages >= 0) { + my @mpages = (); + foreach my $page (@pages) { + my $pageno = &pageno($page); + if ($pageno =~ /^([0-9]+)[^0-9]([0-9]+)$/) { # funky - + for (my $count = $1; $count <= $2; $count++) { + push (@mpages, "$count"); + } + } else { + push (@mpages, $page); + } + } + @pages = sort rangesort @mpages; + } + # Remove duplicates... if ($#pages > 0) { my @mpages = (); @@ -91,6 +107,16 @@ sub pageno { return "?"; } +sub rangesort { + my $apno = &pageno($a); + my $bpno = &pageno($b); + + # Make sure roman pages come before arabic ones, otherwise sort them in order + return -1 if ($apno !~ /^\d+/ && $bpno =~ /^\d+/); + return 1 if ($apno =~ /^\d+/ && $bpno !~ /^\d+/); + return $apno cmp $bpno; +} + sub rangelen { my $count = shift; my @pages = @_;