acdw.net/R

64 lines
1.1 KiB
Plaintext
Raw Permalink Normal View History

2021-02-04 14:42:10 +00:00
# -*- awk -*-
BEGIN {
FS="\n"; RS=""
i=0
_end = "__END__"
_el=" el "; _defel="p"
}
2021-02-06 22:44:05 +00:00
function start(el, not_html) { # start an element
2021-02-04 18:45:30 +00:00
el = (el ? el : _defel)
2021-02-06 22:44:05 +00:00
pre_el = (not_html ? "" : _el)
2021-02-04 14:42:10 +00:00
split(el, el_a, " ")
2021-02-04 18:45:30 +00:00
lvl[++i] = el_a[1]
2021-02-06 22:44:05 +00:00
return "$(<<" _end i lvl[i] pre_el el "\n"
2021-02-04 14:42:10 +00:00
}
2021-02-06 22:44:05 +00:00
function end() { # end an element
2021-02-04 14:42:10 +00:00
return "\n" _end i lvl[i--] "\n)"
}
2021-02-06 22:44:05 +00:00
function wrap(par) { # wrap a non-delimited paragraph with <p>
2021-02-04 14:42:10 +00:00
if (par !~ /^<.*>$/)
return start() par end()
else
return par
}
2021-02-06 22:44:05 +00:00
/^@[^@()]/ { # html element
2021-02-04 14:42:10 +00:00
$1 = start(substr($1, 2))
sub(/\n?$/, end())
print
next
}
2021-02-06 22:44:05 +00:00
/^@@[^()]/ { # arbitrary command
$1 = start(substr($1, 3))
sub(/\n?$/, end())
print
next
}
/^@\(/ { # nested element begin
2021-02-04 14:42:10 +00:00
print start(substr($1, 3))
$1=""; $0=$0
}
2021-02-06 22:44:05 +00:00
/^@@\(/ { # nested arbitrary command begin
print start(substr($1, 4))
$1=""; $0=$0
}
/@@?\)$/ { # nested element end
2021-02-04 14:42:10 +00:00
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); }