Blame awklib/extract.awk

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