Mercurial > hg > sv-dependency-builds
comparison src/fftw-3.3.3/doc/FAQ/bfnnconv.pl @ 10:37bf6b4a2645
Add FFTW3
author | Chris Cannam |
---|---|
date | Wed, 20 Mar 2013 15:35:50 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
9:c0fb53affa76 | 10:37bf6b4a2645 |
---|---|
1 #!/usr/bin/perl -- | |
2 # Copyright (C) 1993-1995 Ian Jackson. | |
3 | |
4 # This file is free software; you can redistribute it and/or modify | |
5 # it under the terms of the GNU General Public License as published by | |
6 # the Free Software Foundation; either version 2, or (at your option) | |
7 # any later version. | |
8 | |
9 # It is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with GNU Emacs; see the file COPYING. If not, write to | |
16 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 # Boston, MA 02111-1307, USA. | |
18 | |
19 # (Note: I do not consider works produced using these BFNN processing | |
20 # tools to be derivative works of the tools, so they are NOT covered | |
21 # by the GPL. However, I would appreciate it if you credited me if | |
22 # appropriate in any documents you format using BFNN.) | |
23 | |
24 @outputs=('ascii','info','html'); | |
25 | |
26 while ($ARGV[0] =~ m/^\-/) { | |
27 $_= shift(@ARGV); | |
28 if (m/^-only/) { | |
29 @outputs= (shift(@ARGV)); | |
30 } else { | |
31 warn "unknown option `$_' ignored"; | |
32 } | |
33 } | |
34 | |
35 $prefix= $ARGV[0]; | |
36 $prefix= 'stdin' unless length($prefix); | |
37 $prefix =~ s/\.bfnn$//; | |
38 | |
39 if (open(O,"$prefix.xrefdb")) { | |
40 @xrefdb= <O>; | |
41 close(O); | |
42 } else { | |
43 warn "no $prefix.xrefdb ($!)"; | |
44 } | |
45 | |
46 $section= -1; | |
47 for $thisxr (@xrefdb) { | |
48 $_= $thisxr; | |
49 chop; | |
50 if (m/^Q (\w+) ((\d+)\.(\d+)) (.*)$/) { | |
51 $qrefn{$1}= $2; | |
52 $qreft{$1}= $5; | |
53 $qn2ref{$3,$4}= $1; | |
54 $maxsection= $3; | |
55 $maxquestion[$3]= $4; | |
56 } elsif (m/^S (\d+) /) { | |
57 $maxsection= $1; | |
58 $sn2title{$1}=$'; | |
59 } | |
60 } | |
61 | |
62 open(U,">$prefix.xrefdb-new"); | |
63 | |
64 for $x (@outputs) { require("m-$x.pl"); } | |
65 | |
66 &call('init'); | |
67 | |
68 while (<>) { | |
69 chop; | |
70 next if m/^\\comment\b/; | |
71 if (!m/\S/) { | |
72 &call('endpara'); | |
73 next; | |
74 } | |
75 if (s/^\\section +//) { | |
76 $line= $_; | |
77 $section++; $question=0; | |
78 print U "S $section $line\n"; | |
79 $|=1; print "S$section",' 'x10,"\r"; $|=0; | |
80 &call('endpara'); | |
81 &call('startmajorheading',"$section", | |
82 "Section $section", | |
83 $section<$maxsection ? "Section ".($section+1) : '', | |
84 $section>1 ? 'Section '.($section-1) : 'Top'); | |
85 &text($line); | |
86 &call('endmajorheading'); | |
87 if ($section) { | |
88 &call('endpara'); | |
89 &call('startindex'); | |
90 for $thisxr (@xrefdb) { | |
91 $_= $thisxr; | |
92 chop; | |
93 if (m/^Q (\w+) (\d+)\.(\d+) (.*)$/) { | |
94 $ref= $1; $num1= $2; $num2= $3; $text= $4; | |
95 next unless $num1 == $section; | |
96 &call('startindexitem',$ref,"Q$num1.$num2","Question $num1.$num2"); | |
97 &text($text); | |
98 &call('endindexitem'); | |
99 } | |
100 } | |
101 &call('endindex'); | |
102 } | |
103 } elsif (s/^\\question \d{2}[a-z]{3}((:\w+)?) +//) { | |
104 $line= $_; | |
105 $question++; | |
106 $qrefstring= $1; | |
107 $qrefstring= "q_${section}_$question" unless $qrefstring =~ s/^://; | |
108 print U "Q $qrefstring $section.$question $line\n"; | |
109 $|=1; print "Q$section.$question",' 'x10,"\r"; $|=0; | |
110 &call('endpara'); | |
111 &call('startminorheading',$qrefstring, | |
112 "Question $section.$question", | |
113 $question < $maxquestion[$section] ? "Question $section.".($question+1) : | |
114 $section < $maxsection ? "Question ".($section+1).".1" : '', | |
115 $question > 1 ? "Question $section.".($question-1) : | |
116 $section > 1 ? "Question ".($section-1).'.'.($maxquestion[$section-1]) : | |
117 'Top', | |
118 "Section $section"); | |
119 &text("Question $section.$question. $line"); | |
120 &call('endminorheading'); | |
121 } elsif (s/^\\only +//) { | |
122 @saveoutputs= @outputs; | |
123 @outputs=(); | |
124 for $x (split(/\s+/,$_)) { | |
125 push(@outputs,$x) if grep($x eq $_, @saveoutputs); | |
126 } | |
127 } elsif (s/^\\endonly$//) { | |
128 @outputs= @saveoutputs; | |
129 } elsif (s/^\\copyto +//) { | |
130 $fh= $'; | |
131 while(<>) { | |
132 last if m/^\\endcopy$/; | |
133 while (s/^([^\`]*)\`//) { | |
134 print $fh $1; | |
135 m/([^\\])\`/ || warn "`$_'"; | |
136 $_= $'; | |
137 $cmd= $`.$1; | |
138 $it= `$cmd`; chop $it; | |
139 print $fh $it; | |
140 } | |
141 print $fh $_; | |
142 } | |
143 } elsif (m/\\index$/) { | |
144 &call('startindex'); | |
145 for $thisxr (@xrefdb) { | |
146 $_= $thisxr; | |
147 chop; | |
148 if (m/^Q (\w+) (\d+\.\d+) (.*)$/) { | |
149 $ref= $1; $num= $2; $text= $3; | |
150 &call('startindexitem',$ref,"Q$num","Question $num"); | |
151 &text($text); | |
152 &call('endindexitem'); | |
153 } elsif (m/^S (\d+) (.*)$/) { | |
154 $num= $1; $text= $2; | |
155 next unless $num; | |
156 &call('startindexmainitem',"s_$num", | |
157 "Section $num.","Section $num"); | |
158 &text($text); | |
159 &call('endindexitem'); | |
160 } else { | |
161 warn $_; | |
162 } | |
163 } | |
164 &call('endindex'); | |
165 } elsif (m/^\\call-(\w+) +(\w+)\s*(.*)$/) { | |
166 $fn= $1.'_'.$2; | |
167 eval { &$fn($3); }; | |
168 warn $@ if length($@); | |
169 } elsif (m/^\\call +(\w+)\s*(.*)$/) { | |
170 eval { &call($1,$2); }; | |
171 warn $@ if length($@); | |
172 } elsif (s/^\\set +(\w+)\s*//) { | |
173 $svalue= $'; $svari= $1; | |
174 eval("\$user_$svari=\$svalue"); $@ && warn "setting $svalue failed: $@\n"; | |
175 } elsif (m/^\\verbatim$/) { | |
176 &call('startverbatim'); | |
177 while (<>) { | |
178 chop; | |
179 last if m/^\\endverbatim$/; | |
180 &call('verbatim',$_); | |
181 } | |
182 &call('endverbatim'); | |
183 } else { | |
184 s/\.$/\. /; | |
185 &text($_." "); | |
186 } | |
187 } | |
188 | |
189 print ' 'x25,"\r"; | |
190 &call('finish'); | |
191 rename("$prefix.xrefdb-new","$prefix.xrefdb") || warn "rename xrefdb: $!"; | |
192 exit 0; | |
193 | |
194 | |
195 sub text { | |
196 local($in,$rhs,$word,$refn,$reft,$fn,$style); | |
197 $in= "$holdover$_[0]"; | |
198 $holdover= ''; | |
199 while ($in =~ m/\\/) { | |
200 #print STDERR ">$`##$'\n"; | |
201 $rhs=$'; | |
202 &call('text',$`); | |
203 $_= $rhs; | |
204 if (m/^\w+ $/) { | |
205 $holdover= "\\$&"; | |
206 $in= ''; | |
207 } elsif (s/^fn\s+([^\s\\]*\w)//) { | |
208 $in= $_; | |
209 $word= $1; | |
210 &call('courier'); | |
211 &call('text',$word); | |
212 &call('endcourier'); | |
213 } elsif (s/^tab\s+(\d+)\s+//) { | |
214 $in= $_; &call('tab',$1); | |
215 } elsif (s/^nl\s+//) { | |
216 $in= $_; &call('newline'); | |
217 } elsif (s/^qref\s+(\w+)//) { | |
218 $refn= $qrefn{$1}; | |
219 $reft= $qreft{$1}; | |
220 if (!length($refn)) { | |
221 warn "unknown question `$1'"; | |
222 } | |
223 $in= "$`\\pageref:$1:$refn:$reft\\endpageref.$_"; | |
224 } elsif (s/^pageref:(\w+):([^:\n]+)://) { | |
225 $in= $_; | |
226 &call('pageref',$1,$2); | |
227 } elsif (s/^endpageref\.//) { | |
228 $in= $_; &call('endpageref'); | |
229 } elsif (s/^(\w+)\{//) { | |
230 $in= $_; $fn= $1; | |
231 eval { &call("$fn"); }; | |
232 if (length($@)) { warn $@; $fn= 'x'; } | |
233 push(@styles,$fn); | |
234 } elsif (s/^\}//) { | |
235 $in= $_; | |
236 $fn= pop(@styles); | |
237 if ($fn ne 'x') { &call("end$fn"); } | |
238 } elsif (s/^\\//) { | |
239 $in= $_; | |
240 &call('text',"\\"); | |
241 } elsif (s,^(\w+)\s+([-A-Za-z0-9.\@:/]*\w),,) { | |
242 #print STDERR "**$&**$_\n"; | |
243 $in= $_; | |
244 $style=$1; $word= $2; | |
245 &call($style); | |
246 &call('text',$word); | |
247 &call("end$style"); | |
248 } else { | |
249 warn "unknown control `\\$_'"; | |
250 $in= $_; | |
251 } | |
252 } | |
253 &call('text',$in); | |
254 } | |
255 | |
256 | |
257 sub call { | |
258 local ($fnbase, @callargs) = @_; | |
259 local ($coutput); | |
260 for $coutput (@outputs) { | |
261 if ($fnbase eq 'text' && eval("\@${coutput}_cmds")) { | |
262 #print STDERR "special handling text (@callargs) for $coutput\n"; | |
263 $evstrg= "\$${coutput}_args[\$#${coutput}_args].=\"\@callargs\""; | |
264 eval($evstrg); | |
265 length($@) && warn "call adding for $coutput (($evstrg)): $@"; | |
266 } else { | |
267 $fntc= $coutput.'_'.$fnbase; | |
268 &$fntc(@callargs); | |
269 } | |
270 } | |
271 } | |
272 | |
273 | |
274 sub recurse { | |
275 local (@outputs) = $coutput; | |
276 local ($holdover); | |
277 &text($_[0]); | |
278 } | |
279 | |
280 | |
281 sub arg { | |
282 #print STDERR "arg($_[0]) from $coutput\n"; | |
283 $cmd= $_[0]; | |
284 eval("push(\@${coutput}_cmds,\$cmd); push(\@${coutput}_args,'')"); | |
285 length($@) && warn "arg setting up for $coutput: $@"; | |
286 } | |
287 | |
288 sub endarg { | |
289 #print STDERR "endarg($_[0]) from $coutput\n"; | |
290 $evstrg= "\$${coutput}_cmd= \$cmd= pop(\@${coutput}_cmds); ". | |
291 "\$${coutput}_arg= \$arg= pop(\@${coutput}_args); "; | |
292 eval($evstrg); | |
293 length($@) && warn "endarg extracting for $coutput (($evstrg)): $@"; | |
294 #print STDERR ">call $coutput $cmd $arg< (($evstrg))\n"; | |
295 $evstrg= "&${coutput}_do_${cmd}(\$arg)"; | |
296 eval($evstrg); | |
297 length($@) && warn "endarg running ${coutput}_do_${cmd} (($evstrg)): $@"; | |
298 } |