#!/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 . # 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