summaryrefslogtreecommitdiffstats
path: root/doc
diff options
context:
space:
mode:
authorLeena Miettinen <riitta-leena.miettinen@nokia.com>2012-02-15 12:33:57 +0100
committerLeena Miettinen <riitta-leena.miettinen@nokia.com>2012-02-15 13:34:29 +0100
commitef5f3744e6a7f9b89ca68abc488f85fb717d5ec6 (patch)
tree8aac8392eab511efc61415183fb90e6a5b6ed851 /doc
parentbd4b51196497cb7bca27c70625f4a62675f3b4d3 (diff)
Doc: update fixnavi
Change-Id: Id01f25a89fc68f4831f2980b8d82d082bb5ce68c Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Diffstat (limited to 'doc')
-rw-r--r--doc/doc.pri5
-rw-r--r--doc/fixnavi.pl207
2 files changed, 166 insertions, 46 deletions
diff --git a/doc/doc.pri b/doc/doc.pri
index b37049592..63e45ae0d 100644
--- a/doc/doc.pri
+++ b/doc/doc.pri
@@ -62,3 +62,8 @@ macx {
}
OTHER_FILES = $$HELP_DEP_FILES
+
+fixnavi.commands = \
+ cd $$replace(PWD, "/", $$QMAKE_DIR_SEP) && \
+ perl fixnavi.pl installerfw.qdoc .
+QMAKE_EXTRA_TARGETS += fixnavi
diff --git a/doc/fixnavi.pl b/doc/fixnavi.pl
index bf6acaa38..973578905 100644
--- a/doc/fixnavi.pl
+++ b/doc/fixnavi.pl
@@ -1,38 +1,124 @@
-#! /usr/bin/perl -w
+#! /usr/bin/perl
+use warnings;
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";
+sub visitDir($)
+{
+ my ($dir) = @_;
+ my @ret = ();
+ my @subret = ();
+ opendir DIR, $dir or die "$dir: $!\n";
+ my @ents = readdir DIR;
+ closedir DIR;
+ for my $ent (grep !/^\./, @ents) {
+ my $ret = $dir."/".$ent;
+ if (-d $ret) {
+ push @subret, &visitDir($ret);
+ } elsif ($ret =~ /\.qdoc$/) {
+ push @ret, $ret;
+ }
+ }
+ return @ret, @subret;
+}
+
+my @files = ();
+my %defines = ();
+for (@ARGV) {
+ if (/^-D(.*)$/) {
+ $defines{$1} = 1;
+ } elsif (/^-/) {
+ printf STDERR "Unknown option '".$_."'\n";
+ exit 1;
+ } else {
+ if (-d $_) {
+ push @files, visitDir($_);
+ } 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 %prev_define_skips = ();
+my %next_define_skips = ();
+my %prev_polarity_skips = ();
+my %next_polarity_skips = ();
+for my $file (@files) {
+ my ($curpage, $inhdr, $intoc, $inif) = ("", 0, 0, 0);
+ my ($define_skip, $polarity_skip, $skipping) = ("", 0, 0);
+ my ($prev_define_skip, $prev_polarity_skip, $prev_skip,
+ $next_define_skip, $next_polarity_skip, $next_skip) = ("", 0, "", "", 0, "");
+ open FILE, $file or die "File $file cannot be opened.\n";
+ while (<FILE>) {
+ if (/^\h*\\if\h+defined\h*\(\h*(\H+)\h*\)/) {
+ die "Nested \\if at $file:$.\n" if ($inif);
+ $inif = 1;
+ $skipping = !defined($defines{$1});
+ if ($inhdr) {
+ $define_skip = $1;
+ $polarity_skip = $skipping;
+ }
+ } elsif (/^\h*\\else/) {
+ die "Unmatched \\else in $file:$.\n" if (!$inif);
+ $skipping = 1 - $skipping;
+ } elsif (/^\h*\\endif/) {
+ die "Unmatched \\endif in $file:$.\n" if (!$inif);
+ $inif = 0;
+ $skipping = 0;
+ $define_skip = "";
+ } elsif (keys(%title2page) == 1 && /^\h*\\list/) {
+ $intoc++;
+ } elsif ($intoc) {
+ if (/^\h*\\endlist/) {
+ $intoc--;
+ } elsif (!$skipping && /^\h*\\o\h+\\l\h*{(.*)}$/) {
+ push @toc, $1;
+ }
+ } elsif ($inhdr) {
+ if (/^\h*\\previouspage\h+(\H+)/) {
+ $prev_skip = $1 if ($skipping);
+ ($prev_define_skip, $prev_polarity_skip) = ($define_skip, $polarity_skip);
+ } elsif (/^\h*\\nextpage\h+(\H+)/) {
+ $next_skip = $1 if ($skipping);
+ ($next_define_skip, $next_polarity_skip) = ($define_skip, $polarity_skip);
+ } elsif (/^\h*\\page\h+(\H+)/) {
+ $curpage = $1;
+ } elsif (/^\h*\\title\h+(.+)$/) {
+ if ($curpage eq "") {
+ die "Title '$1' appears in no \\page.\n";
+ }
+ if (length($prev_define_skip)) {
+ ($prev_define_skips{$1}, $prev_polarity_skips{$1}, $prev_skips{$1}) =
+ ($prev_define_skip, $prev_polarity_skip, $prev_skip);
+ $prev_define_skip = $prev_skip = "";
+ }
+ if (length($next_define_skip)) {
+ ($next_define_skips{$1}, $next_polarity_skips{$1}, $next_skips{$1}) =
+ ($next_define_skip, $next_polarity_skip, $next_skip);
+ $next_define_skip = $next_skip = "";
+ }
+ $title2page{$1} = $curpage;
+ $doctitle = $1 if (!$doctitle);
+ $curpage = "";
+ $inhdr = 0;
+ }
+ } else {
+ if (/^\h*\\contentspage\b/) {
+ $inhdr = 1;
}
- $title2page{$1} = $curpage;
- $doctitle = $1 if (!$doctitle);
- $curpage = "";
- }
- } else {
- if (/^\h*\\endlist/) {
- $intoc--;
- } elsif (/^\h*\\o\h+\\l\h*{(.*)}$/) {
- push @toc, $1;
}
}
+ die "Missing \\title in $file\n" if ($inhdr);
+ die "Unclosed TOC in $file\n" if ($intoc);
+ close FILE;
}
-close FILE;
my %prev = ();
my %next = ();
@@ -43,28 +129,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($prev_define_skips{$1})) {
+ print OUT " \\if defined(".$prev_define_skips{$1}.")\n";
+ if ($prev_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($prev_define_skips{$1})) {
+ if (!$prev_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($next_define_skips{$1})) {
+ print OUT " \\if defined(".$next_define_skips{$1}.")\n";
+ if ($next_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($next_define_skips{$1})) {
+ if (!$next_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";