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