summaryrefslogtreecommitdiff
path: root/checks/get-them
diff options
context:
space:
mode:
Diffstat (limited to 'checks/get-them')
-rwxr-xr-xchecks/get-them137
1 files changed, 137 insertions, 0 deletions
diff --git a/checks/get-them b/checks/get-them
new file mode 100755
index 0000000..33d38b5
--- /dev/null
+++ b/checks/get-them
@@ -0,0 +1,137 @@
+#!/bin/sh
+# -*- AWK -*-
+# Extract all examples from the manual source.
+# Copyright (C) 1992, 2005-2013 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