139 lines
3.1 KiB
Awk
Executable File
139 lines
3.1 KiB
Awk
Executable File
#!/bin/sh
|
|
# -*- AWK -*-
|
|
# Extract all examples from the manual source.
|
|
# Copyright (C) 1992, 2005, 2006, 2007, 2008, 2009 Free Software
|
|
# Foundation, Inc.
|
|
#
|
|
# This file is part of GNU M4.
|
|
#
|
|
# GNU M4 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.
|
|
#
|
|
# GNU M4 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 was designed under GNU awk, but hopefully portable to
|
|
# other implementations.
|
|
|
|
FILE=${1-/dev/null}
|
|
: ${AWK=awk}
|
|
|
|
$AWK '
|
|
|
|
BEGIN {
|
|
node = "";
|
|
seq = -1;
|
|
count = 0;
|
|
file = "NONE";
|
|
status = 0;
|
|
options = "";
|
|
xout = "";
|
|
xerr = "";
|
|
}
|
|
|
|
/^@node / {
|
|
if (seq > 0)
|
|
printf(" -- %d file%s", seq, seq == 1 ? "" : "s");
|
|
if (seq >= 0)
|
|
printf("\n");
|
|
|
|
split($0, tmp, ",");
|
|
node = substr(tmp[1], 7);
|
|
if (length(node) > 10)
|
|
printf("Node: %s - truncated", node);
|
|
else
|
|
printf("Node: %s ", node);
|
|
gsub(" ", "_", node);
|
|
node = tolower(substr(node, 1, 10));
|
|
seq = 0;
|
|
}
|
|
|
|
/^@comment ignore$/ {
|
|
getline;
|
|
status = 0;
|
|
options = "";
|
|
xout = "";
|
|
xout = "";
|
|
next;
|
|
}
|
|
|
|
/^@comment status: / {
|
|
status = $3;
|
|
}
|
|
|
|
/^@comment options: / {
|
|
options = $0;
|
|
gsub ("@comment options:", "", options);
|
|
}
|
|
|
|
/^@comment xout: / {
|
|
xout = $0;
|
|
gsub ("@comment xout: ", "", xout);
|
|
}
|
|
|
|
/^@comment xerr: / {
|
|
xerr = $0;
|
|
gsub ("@comment xerr: ", "", xerr);
|
|
}
|
|
|
|
/^@example$/, /^@end example$/ {
|
|
if (seq < 0)
|
|
next;
|
|
if ($0 ~ /^@example$/) {
|
|
if (count > 0)
|
|
close (file);
|
|
seq++;
|
|
count++;
|
|
file = sprintf("%03d.%s", count, node);
|
|
printf("dnl @ %s:%d: Origin of test\n"\
|
|
"dnl @ expected status: %d\n"\
|
|
"dnl @ extra options: %s\n"\
|
|
"dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software\n"\
|
|
"dnl @ Foundation, Inc.\n"\
|
|
"dnl @ This file is free software; the Free Software Foundation\n"\
|
|
"dnl @ gives unlimited permission to copy and/or distribute it\n"\
|
|
"dnl @ with or without modifications, as long as this notice\n"\
|
|
"dnl @ is preserved.\n", FILENAME, NR, status, options) > file;
|
|
if (xout)
|
|
printf("dnl @ expected output: %s\n", xout) > file;
|
|
if (xerr)
|
|
printf("dnl @ expected error: %s\n", xerr) > file;
|
|
status = 0;
|
|
options = "";
|
|
xout = "";
|
|
xerr = "";
|
|
next;
|
|
}
|
|
if ($0 ~ /^@end example$/) {
|
|
next;
|
|
}
|
|
if ($0 ~ /^\^D$/)
|
|
next;
|
|
if ($0 ~ /^\$ @kbd/)
|
|
next;
|
|
if ($0 ~ /^@result\{\}/ || $0 ~ /^@error\{\}/)
|
|
prefix = "dnl ";
|
|
else
|
|
prefix = "";
|
|
gsub("@@", "@", $0);
|
|
gsub("@[{]", "{", $0);
|
|
gsub("@}", "}", $0);
|
|
gsub("@w[{] }", " ", $0);
|
|
gsub("@tabchar[{]}", "\t", $0);
|
|
printf("%s%s\n", prefix, $0) >> file;
|
|
}
|
|
|
|
END {
|
|
printf("\n");
|
|
if (count > 0)
|
|
close(file);
|
|
}
|
|
' $FILE
|