51 lines
764 B
Awk
51 lines
764 B
Awk
# -*- awk -*-
|
|
|
|
BEGIN {
|
|
FS="\n"; RS=""
|
|
i=0
|
|
_end = "__END__"
|
|
_el=" el "; _defel="p"
|
|
print ". hell/hell"
|
|
}
|
|
|
|
function start(el) {
|
|
split(el, el_a, " ")
|
|
lvl[++i] = (el ? el_a[1] : _defel)
|
|
return "$(<<" _end i lvl[i] _el lvl[i] "\n"
|
|
}
|
|
|
|
function end() {
|
|
return "\n" _end i lvl[i--] "\n)"
|
|
}
|
|
|
|
function wrap(par) {
|
|
if (par !~ /^<.*>$/)
|
|
return start() par end()
|
|
else
|
|
return par
|
|
}
|
|
|
|
/^@[^()]/ {
|
|
$1 = start(substr($1, 2))
|
|
sub(/\n?$/, end())
|
|
print
|
|
next
|
|
}
|
|
|
|
/^@\(/ {
|
|
print start(substr($1, 3))
|
|
$1=""; $0=$0
|
|
}
|
|
|
|
/@\)$/ {
|
|
nf=$NF; NF--; $0=$0; print
|
|
if ($0) {
|
|
print wrap($0)
|
|
print substr(nf, 0, length(nf)-2) end()
|
|
} else
|
|
print end()
|
|
next
|
|
}
|
|
|
|
{ print wrap($0); }
|