| Index: bison/src/bison/2.4.1/bison-2.4.1-src/examples/extexi
 | 
| ===================================================================
 | 
| --- bison/src/bison/2.4.1/bison-2.4.1-src/examples/extexi	(revision 0)
 | 
| +++ bison/src/bison/2.4.1/bison-2.4.1-src/examples/extexi	(revision 0)
 | 
| @@ -0,0 +1,137 @@
 | 
| +# Extract all examples from the manual source.            -*- AWK -*-
 | 
| +
 | 
| +# This file is part of GNU Bison
 | 
| +# Copyright 1992, 2000, 2001, 2005, 2006 Free Software Foundation, Inc.
 | 
| +#
 | 
| +# This program is free software: you can redistribute it and/or modify
 | 
| +# it under the terms of the GNU General Public License as published by
 | 
| +# the Free Software Foundation, either version 3 of the License, or
 | 
| +# (at your option) any later version.
 | 
| +#
 | 
| +# This program is distributed in the hope that it will be useful,
 | 
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
| +# GNU General Public License for more details.
 | 
| +#
 | 
| +# You should have received a copy of the GNU General Public License
 | 
| +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
| +
 | 
| +# This script is for use with any Awk that conforms to POSIX.
 | 
| +# It was derived from a similar script tests/generate.awk in GNU m4.
 | 
| +#
 | 
| +# Usage: extexi input-file.texi ... -- [FILES to extract]
 | 
| +BEGIN {
 | 
| +  if (!output_dir)
 | 
| +    output_dir = ".";
 | 
| +  for (argc = 1; argc < ARGC; ++argc)
 | 
| +    if (ARGV[argc] == "--")
 | 
| +      break;
 | 
| +  for (i = argc + 1; i < ARGC; ++i)
 | 
| +    file_wanted[ARGV[i]] = 1;
 | 
| +  ARGC = argc;
 | 
| +}
 | 
| +
 | 
| +/^@node / {
 | 
| +  if (seq > 0)
 | 
| +    print "AT_CLEANUP";
 | 
| +
 | 
| +  split ($0, tmp, ",");
 | 
| +  node = substr(tmp[1], 7);
 | 
| +  seq = 0;
 | 
| +}
 | 
| +
 | 
| +/^@comment file: / {
 | 
| +  if (!file_wanted[$3])
 | 
| +    message("ignoring " $3);
 | 
| +  else
 | 
| +    {
 | 
| +      message("extracting " $3);
 | 
| +      file = $3;
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +/^@example$/, /^@end example$/ {
 | 
| +  if (!file)
 | 
| +    next;
 | 
| +
 | 
| +  if ($0 ~ /^@example$/)
 | 
| +    {
 | 
| +      input = files_output[file] ? "\n" : "";
 | 
| +
 | 
| +      # FNR is starting at 0 instead of 1, and
 | 
| +      # #line report the line number of the *next* line.
 | 
| +      # => + 2.
 | 
| +      # Note that recent Bison support it, but not Flex.
 | 
| +      if (file ~ /\.[chy]*$/)
 | 
| +	input = "#line " (FNR + 1) " \"" FILENAME "\"\n";
 | 
| +      next;
 | 
| +    }
 | 
| +
 | 
| +  if ($0 ~ /^@end example$/)
 | 
| +    {
 | 
| +      if (input == "")
 | 
| +	fatal("no contents: " file);
 | 
| +
 | 
| +      input = normalize(input);
 | 
| +      # No spurious end of line: use printf.
 | 
| +      if (files_output[file])
 | 
| +	# The parens around the output file seem to be required
 | 
| +        # by awk on Mac OS X Tiger (darwin 8.4.6).
 | 
| +        printf ("%s", input) >> (output_dir "/" file);
 | 
| +      else
 | 
| +	printf ("%s", input) > (output_dir "/" file);
 | 
| +      close (output_dir "/" file);
 | 
| +      files_output[file] = 1;
 | 
| +
 | 
| +      file = input = "";
 | 
| +      next;
 | 
| +    }
 | 
| +
 | 
| +  input = input $0 "\n";
 | 
| +}
 | 
| +
 | 
| +
 | 
| +# We have to handle CONTENTS line per line, since anchors in AWK are
 | 
| +# referring to the whole string, not the lines.
 | 
| +function normalize(contents,    i, lines, n, line, res) {
 | 
| +  # Remove the Texinfo tags.
 | 
| +  n = split (contents, lines, "\n");
 | 
| +  # We don't want the last field which empty: it's behind the last \n.
 | 
| +  for (i = 1; i < n; ++i)
 | 
| +    {
 | 
| +      line = lines[i];
 | 
| +
 | 
| +      # Whole line commands.
 | 
| +      if (line ~ /^@(c |comment|dots|end (ignore|group)|ignore|group)/)
 | 
| +	# Gperf accepts empty lines as valid input!!!
 | 
| +	if (file ~ /\.gperf$/)
 | 
| +	  continue;
 | 
| +	else
 | 
| +	  line = "";
 | 
| +
 | 
| +      gsub (/"@value\{VERSION\}"/, "\"" VERSION "\"", line)
 | 
| +      gsub (/^@result\{\}/, "", line);
 | 
| +      gsub (/^@error\{\}/,  "", line);
 | 
| +      gsub ("@[{]", "{", line);
 | 
| +      gsub ("@}", "}", line);
 | 
| +      gsub ("@@", "@", line);
 | 
| +      gsub ("@comment.*", "", line);
 | 
| +
 | 
| +      res = res line "\n";
 | 
| +    }
 | 
| +  return res;
 | 
| +}
 | 
| +
 | 
| +
 | 
| +function message(msg) {
 | 
| +  if (! message_printed[msg])
 | 
| +    {
 | 
| +      print "extexi: " msg > "/dev/stderr";
 | 
| +      message_printed[msg] = 1;
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +function fatal(msg) {
 | 
| +  message(msg);
 | 
| +  exit 1
 | 
| +}
 | 
| 
 |