- if ($state == -1) {
- if (/$re_if/) {
- $state = compare($version, $1, $2, $3, $4);
- $done = $state;
- delete_line($i, "<del>");
- $skip = ($lines[$i-1] eq "\n");
+ if ($state == 1 && /$re_if/) {
+ $level++;
+ unshift @levels, $level;
+ unshift @states, $state;
+ unshift @dones, $done;
+ $state = compare($version, $1, $2, $3, $4);
+ $done = $state;
+ delete_line($i, "<del>");
+ $skip = ($lines[$i-1] eq "\n");
+ } elsif ($level == $levels[0] && /$re_elif/) {
+ $state = compare($version, $1, $2, $3, $4);
+ $state &= !$done;
+ $done |= $state;
+ delete_line($i, "<del>");
+ } elsif ($level == $levels[0] && /^\#else/) {
+ $state = !$done;
+ $done |= $state;
+ delete_line($i, "<del>");
+ } elsif ($level == $levels[0] && /^\#endif/) {
+ $state = shift @states;
+ $done = shift @dones;
+ $level = shift @levels;
+ $level--;
+ delete_line($i, "<del>");
+
+ while ($skip && $lines[$i+1] eq "\n") {
+ $i++;
+ delete_line($i, "<skip>");