From 109adeb1570ba555da6e6972678ae8874be721e5 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Fri, 6 Jan 2012 17:45:46 +0100
Subject: [PATCH] make fixnavi deal with different conditions for prev/next
 links

Change-Id: If8a47c680ea3e2cba16bf5c3168b0a70862aab47
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
---
 doc/fixnavi.pl | 56 +++++++++++++++++++++++++++++---------------------
 1 file changed, 33 insertions(+), 23 deletions(-)

diff --git a/doc/fixnavi.pl b/doc/fixnavi.pl
index 7e0e584f13f..97357890597 100755
--- a/doc/fixnavi.pl
+++ b/doc/fixnavi.pl
@@ -46,11 +46,15 @@ my %title2page = ();
 my $doctitle = "";
 my %prev_skips = ();
 my %next_skips = ();
-my %define_skips = ();
-my %polarity_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, $prev_skip, $next_skip) = ("", 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*\)/) {
@@ -68,6 +72,7 @@ for my $file (@files) {
             die "Unmatched \\endif in $file:$.\n" if (!$inif);
             $inif = 0;
             $skipping = 0;
+            $define_skip = "";
         } elsif (keys(%title2page) == 1 && /^\h*\\list/) {
             $intoc++;
         } elsif ($intoc) {
@@ -77,22 +82,27 @@ for my $file (@files) {
                 push @toc, $1;
             }
         } elsif ($inhdr) {
-            if ($skipping && /^\h*\\previouspage\h+(\H+)/) {
-                $prev_skip = $1;
-            } elsif ($skipping && /^\h*\\nextpage\h+(\H+)/) {
-                $next_skip = $1;
+            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($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 = "";
+                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);
@@ -130,32 +140,32 @@ for my $file (@files) {
             }
         } else {
             if (/^\h*\\title\h+(.+)$/) {
-                if (defined($define_skips{$1})) {
-                    print OUT "    \\if defined(".$define_skips{$1}.")\n";
-                    if ($polarity_skips{$1}) {
+                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($define_skips{$1})) {
-                    if (!$polarity_skips{$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($define_skips{$1})) {
-                    print OUT "    \\if defined(".$define_skips{$1}.")\n";
-                    if ($polarity_skips{$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($define_skips{$1})) {
-                    if (!$polarity_skips{$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});
                     }
-- 
GitLab