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