diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2010-12-08 14:46:26 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2010-12-08 16:28:52 +0100 |
commit | b86ffdffe857b4464be7f2d019e05ea7fd290b70 (patch) | |
tree | 16bacc4fc1579f3b83e8a25b69880e5a997cc70c /doc/fixnavi.pl | |
parent | 274af0f2f9c689e8bd0bb6abba77bdf7b09ac5f6 (diff) | |
download | qt-creator-b86ffdffe857b4464be7f2d019e05ea7fd290b70.tar.gz |
fix fixing of navigation with multiple files
Diffstat (limited to 'doc/fixnavi.pl')
-rwxr-xr-x | doc/fixnavi.pl | 160 |
1 files changed, 117 insertions, 43 deletions
diff --git a/doc/fixnavi.pl b/doc/fixnavi.pl index bf6acaa383..1d9d76d5a5 100755 --- a/doc/fixnavi.pl +++ b/doc/fixnavi.pl @@ -2,37 +2,82 @@ use strict; -@ARGV == 1 or die "usage: $0 <qdoc-file>\n"; -my $file = $ARGV[0]; -open FILE, $file or die "File $file cannot be opened.\n"; +my @files = (); +my %defines = (); +for (@ARGV) { + if (/^-D(.*)$/) { + $defines{$1} = 1; + } elsif (/^-/) { + printf STDERR "Unknown option '".$_."'\n"; + exit 1; + } else { + push @files, $_; + } +} + +int(@files) or die "usage: $0 [-D<define>]... <qdoc-file>\n"; + my @toc = (); my %title2page = (); my $doctitle = ""; my $curpage = ""; my $intoc = 0; -while (<FILE>) { - if (keys(%title2page) == 1 && /^\h*\\list/) { - $intoc++; - } elsif (!$intoc) { - if (/^\h*\\page\h+(\H+)/) { - $curpage = $1; - } elsif (/^\h*\\title\h+(.+)$/) { - if ($curpage eq "") { - die "Title '$1' appears in no \\page.\n"; +my %prev_skips = (); +my %next_skips = (); +my %define_skips = (); +my %polarity_skips = (); +my $prev_skip = ""; +my $next_skip = ""; +my $define_skip = ""; +my $polarity_skip = 0; +for my $file (@files) { + my $skipping = 0; # no nested ifs! + open FILE, $file or die "File $file cannot be opened.\n"; + while (<FILE>) { + if (/^\h*\\if\h+defined\h*\(\h*(\H+)\h*\)/) { + $skipping = !defined($defines{$1}); + if (!$intoc) { + $define_skip = $1; + $polarity_skip = $skipping; + } + } elsif (/^\h*\\else/) { + $skipping = 1 - $skipping; + } elsif (/^\h*\\endif/) { + $skipping = 0; + } elsif (keys(%title2page) == 1 && /^\h*\\list/) { + $intoc++; + } elsif (!$intoc) { + if ($skipping && /^\h*\\previouspage\h+(\H+)/) { + $prev_skip = $1; + } elsif ($skipping && /^\h*\\nextpage\h+(\H+)/) { + $next_skip = $1; + } elsif (/^\h*\\page\h+(\H+)/) { + $curpage = $1; + } elsif (/^\h*\\title\h+(.+)$/) { + if ($curpage eq "") { + die "Title '$1' appears in no \\page.\n"; + } + if (length($define_skip)) { + $define_skips{$1} = $define_skip; + $polarity_skips{$1} = $polarity_skip; + $prev_skips{$1} = $prev_skip; + $next_skips{$1} = $next_skip; + $define_skip = $prev_skip = $next_skip = ""; + } + $title2page{$1} = $curpage; + $doctitle = $1 if (!$doctitle); + $curpage = ""; + } + } else { + if (/^\h*\\endlist/) { + $intoc--; + } elsif (!$skipping && /^\h*\\o\h+\\l\h*{(.*)}$/) { + push @toc, $1; } - $title2page{$1} = $curpage; - $doctitle = $1 if (!$doctitle); - $curpage = ""; - } - } else { - if (/^\h*\\endlist/) { - $intoc--; - } elsif (/^\h*\\o\h+\\l\h*{(.*)}$/) { - push @toc, $1; } } + close FILE; } -close FILE; my %prev = (); my %next = (); @@ -43,28 +88,57 @@ for my $title (@toc) { $last = $title; } -open IN, $file or die "File $file cannot be opened a second time?!\n"; -open OUT, '>'.$file.".out" or die "File $file.out cannot be created.\n"; -my $cutting = 0; -while (<IN>) { - if (!$cutting) { - if (/^\h*\\contentspage/) { - $cutting = 1; - } - } else { - if (/^\h*\\title\h+(.+)$/) { - print OUT " \\previouspage ".$prev{$1} if ($prev{$1}); - print OUT " \\page ".$title2page{$1}; - print OUT " \\nextpage ".$next{$1} if ($next{$1}); - print OUT "\n"; - $cutting = 0; +for my $file (@files) { + open IN, $file or die "File $file cannot be opened a second time?!\n"; + open OUT, '>'.$file.".out" or die "File $file.out cannot be created.\n"; + my $cutting = 0; + while (<IN>) { + if (!$cutting) { + if (/^\h*\\contentspage/) { + $cutting = 1; + } } else { - next; + if (/^\h*\\title\h+(.+)$/) { + if (defined($define_skips{$1})) { + print OUT " \\if defined(".$define_skips{$1}.")\n"; + if ($polarity_skips{$1}) { + print OUT " \\previouspage ".$prev_skips{$1} if ($prev_skips{$1}); + print OUT " \\else\n"; + } + } + print OUT " \\previouspage ".$prev{$1} if ($prev{$1}); + if (defined($define_skips{$1})) { + if (!$polarity_skips{$1}) { + print OUT " \\else\n"; + print OUT " \\previouspage ".$prev_skips{$1} if ($prev_skips{$1}); + } + print OUT " \\endif\n"; + } + print OUT " \\page ".$title2page{$1}; + if (defined($define_skips{$1})) { + print OUT " \\if defined(".$define_skips{$1}.")\n"; + if ($polarity_skips{$1}) { + print OUT " \\nextpage ".$next_skips{$1} if ($next_skips{$1}); + print OUT " \\else\n"; + } + } + print OUT " \\nextpage ".$next{$1} if ($next{$1}); + if (defined($define_skips{$1})) { + if (!$polarity_skips{$1}) { + print OUT " \\else\n"; + print OUT " \\nextpage ".$next_skips{$1} if ($next_skips{$1}); + } + print OUT " \\endif\n"; + } + print OUT "\n"; + $cutting = 0; + } else { + next; + } } + print OUT $_; } - print OUT $_; + close OUT; + close IN; + rename($file.".out", $file) or die "Cannot replace $file with new version.\n"; } -close OUT; -close IN; - -rename($file.".out", $file) or die "Cannot replace $file with new version.\n"; |