1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#!/usr/bin/perl
$file = $ARGV[0];
if ($file =~ /\.cpp/) {
while (<>) {
print $_;
}
}
else {
@lines = <>;
chomp(@lines);
$brace = 0;
for ($i = 0; $i < scalar @lines; ++$i) {
$_ = $lines[$i];
# adjust brace level
$stm = $_;
if ($$incmt) {
if (m#^([^*]|\*+[^/*])*\*+/(.*)$#) {
$stm = $1;
$$incmt = 0;
}
else {
$stm = "";
}
}
$stm =~ s#//.*##;
$stm =~ s#/\*([^*]|\*+[^/*])*\*+/##g;
if ($stm =~ m#^(([^/]|/[^*])*)/\*#) {
$$incmt = 1;
$stm = $1;
}
++$brace if $stm =~ /\{/;
--$brace, $enum = 0 if $stm =~ /}/;
# skip message handlers
if ($lines[$i] =~ /^\s*long\s+on\w+\(\s*FXObject\s*\*\s*\w*\s*,\s*FXSelector\s*\w*\s*,\s*void\s*\*\s*\w*\s*\);/) {
#splice @lines, $i, 0, (" /** \@name Message Handlers */", " //\@{ ");
#$j = $i+2;
#while ($lines[$j] =~ /^\s*long\s+on\w+\(\s*FXObject\s*\*\s*\w*\s*,\s*FXSelector\s*\w*\s*,\s*void\s*\*\s*\w*\s*\);/) {
# ++$j;
#}
#splice @lines, $j, 0, (" //\@} ");
#$i = $j;
$lines[$i]="";
}
$skip = 0 if $brace <= 1;
$skip = 1 if $stm =~ /^\s*public\s*:\s*$/;
$skip = 2 if $stm =~ /^\s*protected\s*:\s*$/;
$skip = 3 if $stm =~ /^\s*private\s*:\s*$/;
$enum = 1 if $stm =~ /^\s*enum\s+\w*\s*\{[^}]*$/;
if ($skip > 1) {
splice @lines, $i, 1, ();
--$i;
next;
}
if (($lines[$i] =~ /^\*\// || @lines[$i] =~ m#///#)&& $lines[$i+1] =~ /^class/ && scalar @tags > 0 ) {
if (@lines[$i] =~ m#///\s*(.*)$#) {
@lines[$i] = "/** $1";
splice @lines, $i+1, 0, ("*/");
++$i;
}
splice @lines, $i, 0, ("* ", "* See also: ", @tags);
$i += scalar @tags + 2;
}
if ($enum == 1 && m#///?\s*.*$#) {
$lines[$i] =~ s#///?#///<#;
}
if ($skip <= 1) {
if ($brace == 1 && $lines[$i] =~ m|^\s*///?| && $lines[$i+1] =~ m|^\s*enum|) {
$lines[$i] =~ m|^\s*///?\s*(.+)|;
$cmt = $1;
($tag) = $file =~ /(\w+)\.\w+$/;
$tag .= "_" . $group++;
$tag =~ s#[ .:\\/]#_#g;
push @tags, "* \\li \\ref $tag \"$cmt\".";
splice @lines, $i, 0, ("/** \\addtogroup $tag $cmt", " * \@{", " */");
$i += 3;
$j = $i;
while (!($lines[$j] =~ /\};/)) { ++$j; }
splice @lines, $j+1, 0, ("/** @} */");
}
if ($brace == 3 && $lines[$i] =~ m#^\s*enum\s+\{#) {
$j = $i;
$delete = 1;
while (!($lines[$j] =~ m#\}\s*;#)) {
$delete = 0 if $lines[$j] =~ m#///?#;
++$j;
}
if ($delete) {
splice @lines, $i, $j-$i+1;
$enum = 0;
}
}
}
}
foreach (@lines) {
print $_ . "\n";
}
}
|