diff options
Diffstat (limited to 'doc/tools/toc-docbook')
-rw-r--r-- | doc/tools/toc-docbook | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/doc/tools/toc-docbook b/doc/tools/toc-docbook new file mode 100644 index 00000000..6d16f9b3 --- /dev/null +++ b/doc/tools/toc-docbook @@ -0,0 +1,71 @@ +#!/usr/bin/perl + +# Copyright (C) 2001 by Claudiu Costin +# <claudiuc@work.ro> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +use Getopt::Long; + +my $prefix = ''; +my $depth = 1; +GetOptions( 'prefix=s' => \$prefix, + 'depth=i' => \$depth ) || die "Wrong options\n"; + +$initialdepth = $depth; +$b3=$b2=$b1=""; +$in_processing=0; +while (<>) { + chop; + + if (/Table of Contents<\/B/) { + $in_processing=1; + next; + } + last if (/List of Tables/); + next if (!$in_processing); + + if (/HREF=\"(.+)\"/) { + $url = $1; + } + if (/>(.+)<\/A/) { + $name=$1; + $name =~ s/\"/"e;/g; + $name =~ s/—/-/g; + $name =~ s/^\s*-?\s*//g; + $name =~ s/\.$//g; +# print "NAME $name\n"; + } + + if ($b3 =~ /><DL/i) { + $depth++; + $b3=$b2; + $b2=$b1; + $b1=$_; + next; + } + if ($b3 =~ /><\/DL/i) { + $depth--; + print " "x($depth-1) . "</tocsect${depth}>\n" if ($depth != $initialdepth-1); + $b3=$b2; + $b2=$b1; + $b1=$_; + next; + } + + if ($b3 =~ />.*<\/DT/i && $name ne "" && $url ne "") { + if ($b1 =~ /><DL/i) { + print " "x($depth-1) . "<tocsect${depth} name=\"$name\" url=\"$url\">\n"; + } else { + print " "x($depth-1) . "<tocsect${depth} name=\"$name\" url=\"$url\"/>\n"; + } + } + + # a simulated delay line with 6 cells + $b3=$b2; + $b2=$b1; + $b1=$_; +} |