diff --git a/R b/R index 2dc1da8..bfe465e 100644 --- a/R +++ b/R @@ -7,37 +7,50 @@ BEGIN { _el=" el "; _defel="p" } -function start(el) { +function start(el, not_html) { # start an element el = (el ? el : _defel) + pre_el = (not_html ? "" : _el) split(el, el_a, " ") lvl[++i] = el_a[1] - return "$(<<" _end i lvl[i] _el el "\n" + return "$(<<" _end i lvl[i] pre_el el "\n" } -function end() { +function end() { # end an element return "\n" _end i lvl[i--] "\n)" } -function wrap(par) { +function wrap(par) { # wrap a non-delimited paragraph with

if (par !~ /^<.*>$/) return start() par end() else return par } -/^@[^()]/ { +/^@[^@()]/ { # html element $1 = start(substr($1, 2)) sub(/\n?$/, end()) print next } -/^@\(/ { +/^@@[^()]/ { # arbitrary command + $1 = start(substr($1, 3)) + sub(/\n?$/, end()) + print + next +} + +/^@\(/ { # nested element begin print start(substr($1, 3)) $1=""; $0=$0 } -/@\)$/ { +/^@@\(/ { # nested arbitrary command begin + print start(substr($1, 4)) + $1=""; $0=$0 +} + +/@@?\)$/ { # nested element end nf=$NF; NF--; $0=$0; print if ($0) { print wrap($0)