dgsmith_50:
The following definitely doesn't do everything you want, as it's a quick knockup. It'll need some tuning, but I think you can tweak it into something useful for you:
$ cat C_preprocessor_light.pl
#!/usr/bin/perl
#
# see perlmonks 951682
#
use strict;
use warnings;
my %DEF;
my @fl_print = (1);
while (<DATA>) {
if (/^\s*#\s*define\s+(\w+)/) { $DEF{$1}=1; }
elsif (/^\s*#\s*undef\s+(\w+)/) { delete $DEF{$1}; }
elsif (/^\s*#\s*ifdef\s+(\w+)/) {
push @fl_print, (exists($DEF{$1}) and $fl_print[-1]);
}
elsif (/^\s*#\s*ifndef\s+(\w+)/){
push @fl_print, (!exists($DEF{$1}) and $fl_print[-1]);
}
elsif (/^\s*#\s*endif/){
pop @fl_print if @fl_print > 1;
}
print if ($fl_print[-1]);
}
__DATA__
/* Foo */
#ifndef BLARG2
BAR
#define BLARG
#define GRAK
zippy
#ifdef BLARG
happy
#ifndef GRAK
lucky
#endif
puppy
#endif
#foo
#endif
bloink
It doesn't hide exactly the lines I would want to hide, but it's close...
...roboticus
When your only tool is a hammer, all problems look like your thumb.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
|
|