Blame awklib/extract.awk

Packit Service f629e6
# extract.awk --- extract files and run programs from Texinfo files
Packit Service f629e6
#
Packit Service f629e6
# Arnold Robbins, arnold@skeeve.com, Public Domain
Packit Service f629e6
# May 1993
Packit Service f629e6
# Revised September 2000
Packit Service f629e6
Packit Service f629e6
BEGIN    { IGNORECASE = 1 }
Packit Service f629e6
Packit Service f629e6
/^@c(omment)?[ \t]+system/ {
Packit Service f629e6
    if (NF < 3) {
Packit Service f629e6
        e = ("extract: " FILENAME ":" FNR)
Packit Service f629e6
        e = (e  ": badly formed `system' line")
Packit Service f629e6
        print e > "/dev/stderr"
Packit Service f629e6
        next
Packit Service f629e6
    }
Packit Service f629e6
    $1 = ""
Packit Service f629e6
    $2 = ""
Packit Service f629e6
    stat = system($0)
Packit Service f629e6
    if (stat != 0) {
Packit Service f629e6
        e = ("extract: " FILENAME ":" FNR)
Packit Service f629e6
        e = (e ": warning: system returned " stat)
Packit Service f629e6
        print e > "/dev/stderr"
Packit Service f629e6
    }
Packit Service f629e6
}
Packit Service f629e6
/^@c(omment)?[ \t]+file/ {
Packit Service f629e6
    if (NF != 3) {
Packit Service f629e6
        e = ("extract: " FILENAME ":" FNR ": badly formed `file' line")
Packit Service f629e6
        print e > "/dev/stderr"
Packit Service f629e6
        next
Packit Service f629e6
    }
Packit Service f629e6
    if ($3 != curfile) {
Packit Service f629e6
        if (curfile != "")
Packit Service f629e6
            close(curfile)
Packit Service f629e6
        curfile = $3
Packit Service f629e6
    }
Packit Service f629e6
Packit Service f629e6
    for (;;) {
Packit Service f629e6
        if ((getline line) <= 0)
Packit Service f629e6
            unexpected_eof()
Packit Service f629e6
        if (line ~ /^@c(omment)?[ \t]+endfile/)
Packit Service f629e6
            break
Packit Service f629e6
        else if (line ~ /^@(end[ \t]+)?group/)
Packit Service f629e6
            continue
Packit Service f629e6
        else if (line ~ /^@c(omment+)?[ \t]+/)
Packit Service f629e6
            continue
Packit Service f629e6
        if (index(line, "@") == 0) {
Packit Service f629e6
            print line > curfile
Packit Service f629e6
            continue
Packit Service f629e6
        }
Packit Service f629e6
        n = split(line, a, "@")
Packit Service f629e6
        # if a[1] == "", means leading @,
Packit Service f629e6
        # don't add one back in.
Packit Service f629e6
        for (i = 2; i <= n; i++) {
Packit Service f629e6
            if (a[i] == "") { # was an @@
Packit Service f629e6
                a[i] = "@"
Packit Service f629e6
                if (a[i+1] == "")
Packit Service f629e6
                    i++
Packit Service f629e6
            }
Packit Service f629e6
        }
Packit Service f629e6
        print join(a, 1, n, SUBSEP) > curfile
Packit Service f629e6
    }
Packit Service f629e6
}
Packit Service f629e6
function unexpected_eof()
Packit Service f629e6
{
Packit Service f629e6
    printf("extract: %s:%d: unexpected EOF or error\n",
Packit Service f629e6
                     FILENAME, FNR) > "/dev/stderr"
Packit Service f629e6
    exit 1
Packit Service f629e6
}
Packit Service f629e6
Packit Service f629e6
END {
Packit Service f629e6
    if (curfile)
Packit Service f629e6
        close(curfile)
Packit Service f629e6
}
Packit Service f629e6
# join.awk --- join an array into a string
Packit Service f629e6
#
Packit Service f629e6
# Arnold Robbins, arnold@gnu.org, Public Domain
Packit Service f629e6
# May 1993
Packit Service f629e6
Packit Service f629e6
function join(array, start, end, sep,    result, i)
Packit Service f629e6
{
Packit Service f629e6
    if (sep == "")
Packit Service f629e6
       sep = " "
Packit Service f629e6
    else if (sep == SUBSEP) # magic value
Packit Service f629e6
       sep = ""
Packit Service f629e6
    result = array[start]
Packit Service f629e6
    for (i = start + 1; i <= end; i++)
Packit Service f629e6
        result = result sep array[i]
Packit Service f629e6
    return result
Packit Service f629e6
}