]>
git.saurik.com Git - bison.git/blob - examples/extexi
2 # Extract all examples from the manual source.
4 # This file is part of GNU Bison
6 # Copyright (C) 1992, 2000-2001, 2005-2006, 2009-2013 Free Software
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 # GNU General Public License for more details.
19 # You should have received a copy of the GNU General Public License
20 # along with this program. If not, see <http://www.gnu.org/licenses/>.
22 # Usage: extexi input-file.texi ... -- [FILES to extract]
24 # Look for @example environments preceded with lines such as:
26 # @comment file calc.y
28 # @comment file calc.y: 3
30 # and output their content in that file (calc.y). When numbers are
31 # provided, use them to decide the output order (block numbered 1 is
32 # output before block 2, even if the latter appears before). The same
33 # number may be used several time, in which case the order of
40 # Remove Texinfo mark up.
45 s/^\@(c |comment|dots|end (ignore|group)|ignore|group).*//mg;
46 s/\@value\{VERSION\}/$ENV{VERSION}/g;
47 s/^\@(error|result)\{\}//mg;
53 # Print messages only once.
60 print STDERR
"extexi: $msg\n";
65 # basename => full file name for files we should extract.
72 my $f = new IO
::File
($in)
73 or die "$in: cannot open: $?";
74 # FILE-NAME => { BLOCK-NUM => CODE }
77 # The latest "@comment file: FILE [BLOCK-NUM]" arguments.
80 # The @example block currently read.
85 if (/^\@comment file: ([^:\n]+)(?::\s*(\d+))?$/)
91 $file = $file_wanted{$f};
92 message
(" GEN $file");
99 elsif ($file && /^\@(small)?example$/ .. /^\@end (small)?example$/)
101 if (/^\@(small)?example$/)
103 # Bison supports synclines, but not Flex.
104 $input .= sprintf ("#line %s \"$in\"\n", $. + 1)
105 if $file =~ /\.[chy]*$/;
108 elsif (/^\@end (small)?example$/)
110 die "no contents: $file"
113 $file{$file}{$block} .= normalize
($input);
114 $file = $input = undef;
125 for my $file (keys %file)
127 # No spurious end of line: use printf.
128 my $o = new IO
::File
(">$file")
129 or die "$file: cannot create: $?";
130 print $o $file{$file}{$_}
131 for sort keys %{$file{$file}};
146 $file_wanted{basename
($arg)} = $arg;
157 ### Setup "GNU" style for perl-mode and cperl-mode.
159 ## perl-indent-level: 2
160 ## perl-continued-statement-offset: 2
161 ## perl-continued-brace-offset: 0
162 ## perl-brace-offset: 0
163 ## perl-brace-imaginary-offset: 0
164 ## perl-label-offset: -2
165 ## cperl-indent-level: 2
166 ## cperl-brace-offset: 0
167 ## cperl-continued-brace-offset: 0
168 ## cperl-label-offset: -2
169 ## cperl-extra-newline-before-brace: t
170 ## cperl-merge-trailing-else: nil
171 ## cperl-continued-statement-offset: 2