]>
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-2012 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