13 usage: getcomments [-f string] [-h] [-p regex] file...
14 -f|--format string: format string for output printing [%]
15 -h|--help: help message
16 -p|--pattern regex: pattern matching on block []
18 Extract C/C++ block of comments
20 Example: getcomments.pl -p='test:\\s' -f='./%' random.c
26 usage
() if ($#ARGV < 0);
29 foreach my $arg (@ARGV) {
30 use vars qw
/$caif $caip $naif $naip/;
32 # analyse format argument
33 ($caif, $_) = ($arg =~ /^(-f|--format)=(.*)/);
34 ($caif, $_) = (1, $arg) if ($naif);
35 next if ($naif = ($arg =~ /^(-f|--format)$/));
36 if ($caif) { $format = $_; next }
38 # check for help message
39 usage
() if ($arg =~ /^(-h|--help)$/);
41 # analyse pattern argument
42 ($caip, $_) = ($arg =~ /^(-p|--pattern)=(.*)/);
43 ($caip, $_) = (1, $arg) if ($naip);
44 next if ($naip = ($arg =~ /^(-p|--pattern)$/));
45 if ($caip) { $pattern = $_; next }
47 # no more argument, only file
51 if (!open (IN
, "<", $filename)) {
52 print "Can not open $filename\n";
55 # init table of comments
63 # process c++ comments
64 ($cmt, $_) = m{//\s*(.*?)\s*$()} if (m{//} && !m{/\*.*//});
66 # process standard c comments
67 ($cmt, $_) = m{^.*?/\*\s*(.*?)\s*\*/(.*)}s if (m{/\*.*\*/}s);
69 push(@comments, $cmt) if ($cmt);
71 # empty buffer if no comment is present
72 undef($_) if (!m{/[/*]});
78 # display comment blocks
79 foreach my $block (@comments) {
80 if (($block) = ($block =~ /$pattern(.*)/s)) {
81 ($_ = $format) =~ s/%/$block/gs;