#!/bin/sh
# -*- AWK -*-
# Extract all examples from the manual source.
# Copyright (C) 1992, 2005-2014, 2016-2017, 2020-2025 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 <https://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 = "";
  auxfile = "";
}

/^@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 = "";
  xerr = "";
  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);
}

/^@comment auxfile: / {
  auxfile = $0;
  gsub ("@comment auxfile: ", "", auxfile);
}

/^@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;
    if (auxfile)
        printf("dnl @ expected auxfile: %s\n", auxfile) > file;
    status = 0;
    options = "";
    xout = "";
    xerr = "";
    auxfile = "";
    next;
  }
  if ($0 ~ /^@end example$/) {
    next;
  }
  if ($0 ~ /^\^D$/)
    next;
  if ($0 ~ /^(\$ )?@kbd\{/)
    next;
  if ($0 ~ /^@result\{\}/ || $0 ~ /^@error\{\}/ || $0 ~ /^@auxresult\{[A-Za-z0-9_\/]*\}/)
    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
