]> git.ipfire.org Git - thirdparty/openssl.git/blob - util/su-filter.pl
More comment changes required for indent
[thirdparty/openssl.git] / util / su-filter.pl
1 #!/usr/bin/env perl
2 #
3 # su-filter.pl
4 #
5 use strict;
6
7 my $in_su = 0;
8 my $indent = 0;
9 my $out;
10 my $braces = 0;
11 my $arrcnt;
12 my $data;
13 my $tststr;
14 my $incomm = 0;
15
16 while(<>) {
17 $tststr = $_;
18 $incomm++ while $tststr =~ /\/\*/g;
19 $incomm-- while $tststr =~ /\*\//g;
20
21 if($in_su == 1) {
22 if(/}(.*);/) {
23 $out .= $_;
24 do_output($out);
25 $in_su = 0;
26 } elsif(/^ *\} [^\s]+(\[\d*\])* = \{/) {
27 $tststr = $1;
28 $arrcnt = 0;
29 $arrcnt++ while $tststr =~ /\[/g;
30 $in_su++;
31 $braces = 1;
32 /^(.* = \{)(.*)$/;
33 $data = $2;
34 $out .= $1."\n";
35 } else {
36 $out .= $_;
37 }
38 } elsif($in_su == 2) {
39 $data .= $_;
40 if(/};$/) {
41 #$data = "\n$data";
42 $data =~ s/\n */\n/g;
43 $data =~ s/};\n?//s;
44 my @strucdata = structureData($data);
45 $out .= displayData($indent, 0, \@strucdata);
46 $out .= "\n$indent};\n";
47 do_output($out);
48 $in_su = 0;
49 }
50 } elsif($incomm <= 0 && /( *)(static )?(const )?(union|struct) ([^\s]+ )?\{/) {
51 $in_su = 1;
52 $indent = $1;
53 $out = $_;
54 next;
55 } else {
56 do_output($_);
57 }
58 }
59
60
61 sub structureData {
62 my $data = $_[0];
63 my @datalist = split(/(\{|\}|,|"|#|\n|\/\*|\*\/|\(|\))/, $data);
64 my $item;
65 my $dataitem = "";
66 my @struclist = ();
67 my $substruc;
68 my $inquote = 0;
69 my $inbrace = 0;
70 my $preproc = 0;
71 my $comment = 0;
72 my $inparen = 0;
73
74
75 foreach $item (@datalist) {
76 if($comment) {
77 if($item eq "*/") {
78 $comment = 0;
79 $dataitem .= "*/";
80 push @struclist, $dataitem;
81 $dataitem = "";
82 next;
83 }
84 $dataitem .= $item;
85 next;
86 }
87 if($inquote) {
88 $dataitem .= $item;
89 if($item eq "\"") {
90 $inquote--;
91 }
92 next;
93 }
94 if($preproc) {
95 if($item eq "\n") {
96 $preproc = 0;
97 push @struclist, $dataitem;
98 $dataitem = "";
99 next;
100 }
101 $dataitem .= $item;
102 next;
103 }
104 if($inbrace) {
105 if($item eq "}") {
106 $inbrace --;
107
108 if(!$inbrace) {
109 $substruc = structureData($dataitem);
110 $dataitem = $substruc;
111 next;
112 }
113 } elsif($item eq "{") {
114 $inbrace++;
115 } elsif ($item eq "\"") {
116 $inquote++;
117 }
118 $dataitem .= $item;
119 next;
120 }
121 if($inparen) {
122 if($item eq ")") {
123 $inparen--;
124 }
125 $dataitem .= $item;
126 next;
127 }
128 if($item eq "\n") {
129 next;
130 }
131 if($item eq "#") {
132 $preproc = 1;
133 push @struclist, $dataitem;
134 $dataitem = "#";
135 next;
136 }
137 if($item eq "/*") {
138 $comment = 1;
139 push @struclist, $dataitem;
140 $dataitem= "/*";
141 next;
142 }
143 if($item eq "\"") {
144 $dataitem .= $item;
145 $inquote++;
146 next;
147 }
148 if($item eq "{") {
149 $inbrace++;
150 next;
151 }
152 if($item eq ",") {
153 push @struclist, $dataitem;
154 $dataitem = "";
155 next;
156 }
157 if($item eq "(") {
158 $dataitem .= $item;
159 $inparen++;
160 next;
161 }
162 if($item =~ /^\s*$/) {
163 next;
164 }
165 if(ref $dataitem eq 'ARRAY') {
166 push @struclist, $dataitem;
167 $dataitem = "";
168 }
169 $dataitem .= $item;
170 }
171 push @struclist, $dataitem;
172 return \@struclist;
173 }
174
175 sub displayData {
176 my $indent = shift;
177 my $depth = shift;
178 my $data = shift;
179 my $item;
180 my $out = "";
181 my $currline = "";
182 my $first = 1;
183 my $prevpreproc = 0;
184 my $prevcomment = 0;
185
186 foreach $item (@{$data}) {
187 if($item =~ /^\/\*/) {
188 #Comment
189 $item =~ s/\n/\n$indent/g;
190 if($out =~ /\n\s*$/s) {
191 $out .= $item."\n".$indent;
192 } else {
193 $out .= "\n".$indent.$item."\n".$indent;
194 }
195 $currline = $indent;
196 $prevcomment = 1;
197 next;
198 }
199 $item =~ s/^\s+//;
200 if($item =~ /^#/) {
201 #Pre-processor directive
202 if($out =~ /\n\s*$/s) {
203 $out =~ s/\n\s*$/\n/;
204 $out .= $item."\n".$indent;
205 } else {
206 $out .= "\n".$item."\n".$indent;
207 }
208 $currline = $indent;
209 $prevpreproc = 1;
210 next;
211 }
212 if($first) {
213 $first = 0;
214 if($depth != 0) {
215 $out .= $indent;
216 $currline = $indent;
217 }
218 } else {
219 if(!$prevpreproc && !$prevcomment) {
220 $out .= ", ";
221 $currline .= ", ";
222 if($depth == 1) {
223 $out .= "\n";
224 $currline = "";
225 }
226 if($depth == 1) {
227 $out .= $indent;
228 $currline .= $indent;
229 }
230 }
231
232 }
233 $prevpreproc = 0;
234 $prevcomment = 0;
235
236 if (ref $item eq 'ARRAY') {
237 if($depth == 0) {
238 $out .= displayData("$indent ", $depth+1, $item);
239 } else {
240 $out .= "{\n".displayData("$indent ", $depth+1, $item)."\n".$indent."}";
241 $currline = $indent."}";
242 }
243 } else {
244 if(length $currline.$item > 79) {
245 $currline = $indent;
246 $out .= "\n$indent";
247 }
248 $out .= $item;
249 $currline .= $item;
250 }
251 }
252 return $out;
253 }
254
255 sub do_output {
256 my $out = shift;
257 # Strip any trailing whitespace
258 $out =~ s/\s+\n/\n/g;
259 print $out;
260 }