diff options
Diffstat (limited to 'aux')
-rwxr-xr-x | aux/emparse | 204 |
1 files changed, 102 insertions, 102 deletions
diff --git a/aux/emparse b/aux/emparse index e59487d..edafcae 100755 --- a/aux/emparse +++ b/aux/emparse @@ -2,16 +2,100 @@ # aux/emparse -- parse em source -function escape(s) { - if (s == "") { - gsub("&", "\\&") - gsub("<", "\\<") - gsub(">", "\\>") - } else { - gsub("&", "\\&", s) - gsub("<", "\\<", s) - gsub(">", "\\>", s) +BEGIN { + expectblock = 1 + itemlevel = 1 + linktext = ENVIRON["linktext"] + if (!linktext) linktext = "link" +} +END { breakblock() } + +/^$/ { breakblock(); getline } +expectblock && /^ / { newblock("table") } +expectblock && /^ - / { newblock("ul") } +expectblock && /^ [0-9a-z]+\. / { newblock("ol") } +expectblock && /^ \[[0-9a-z]\]+ / { newblock("nl") } +expectblock && /^ .*: / { newblock("dl") } +expectblock && /^ / { newblock("pre") } +expectblock && /^---$/ { expectblock = 0; printf "<hr/>\n"; next } +expectblock && /^= .* =$/ { heading(1, $0); next } +expectblock && /^== .* ==$/ { heading(2, $0); next } +expectblock && /^=== .* ===$/ { heading(3, $0); next } +expectblock && /^==== .* ====$/ { heading(4, $0); next } +expectblock && /^===== .* =====$/ { heading(5, $0); next } +expectblock && /^====== .* ======$/ { heading(6, $0); next } +expectblock { newblock("p") } + +openblock == "pre" { sub("^ ", ""); escape(); printf "%s\n", $0; next } + +openblock == "ul" && /^ - / { item(1, "ul", line) } +openblock == "ol" && /^ [0-9a-z]+\. / { item(1, "ol", line) } +openblock == "nl" && /^ \[[0-9a-z]\]+ [^ ]+$/ { next } # hyperlink reference +openblock == "nl" && /^ \[[0-9a-z]\]+ / { item(1, "nl", line) } # text reference +openblock == "dl" && /^ .*: / { term(line) } + +(openblock == "ul" || openblock == "ol") && /^ -/ { item(2, "ul", line) } +(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(2, "ol", line) } +(openblock == "ul" || openblock == "ol") && /^ -/ { item(3, "ul", line) } +(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(3, "ol", line) } +(openblock == "ul" || openblock == "ol") && /^ -/ { item(4, "ul", line) } +(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(4, "ol", line) } +(openblock == "ul" || openblock == "ol") && /^ -/ { item(5, "ul", line) } +(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(5, "ol", line) } +(openblock == "ul" || openblock == "ol") && /^ -/ { item(6, "ul", line) } +(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(6, "ol", line) } + +{ format($0) } # inline formatting + +function format(line) { + escape(line) + n = split(line, w, "[ ]") + for (i = 0; i <= n; i++) { + if (w[i] == "") continue; + + if (match(w[i], "^\\[[0-9a-z]+\\]$")) + w[i] = ref(substr(w[i], 2, RLENGTH-2)) + else if (match(w[i], "^\\[[0-9a-z]+\\][.,:;?!)]$")) + w[i] = ref(substr(w[i], 2, RLENGTH-3)) substr(w[i], RLENGTH) + else if (match(w[i], "^\\[[0-9a-z]+\\]\\)[.,:;?!]$")) + w[i] = ref(substr(w[i], 2, RLENGTH-4)) substr(w[i], RLENGTH-1) + + if (match(w[i], "^`")) + w[i] = "<tt>" substr(w[i], 2) + else if (match(w[i], "^\\*")) + w[i] = "<i>" substr(w[i], 2) + else if (match(w[i], "^_")) + w[i] = "<b>" substr(w[i], 2) + else if (match(w[i], "^\\(`")) + w[i] = "(<tt>" substr(w[i], 3) + else if (match(w[i], "^\\(\\*")) + w[i] = "(<i>" substr(w[i], 3) + else if (match(w[i], "^\\(_")) + w[i] = "(<b>" substr(w[i], 3) + + if (match(w[i], "`$")) + w[i] = substr(w[i], 1, RSTART-1) "</tt>" + else if (match(w[i], "\\*$")) + w[i] = substr(w[i], 1, RSTART-1) "</i>" + else if (match(w[i], "_$")) + w[i] = substr(w[i], 1, RSTART-1) "</b>" + else if (match(w[i], "`[.,:;?!)]$")) + w[i] = substr(w[i], 1, RSTART-1) "</tt>" substr(w[i], RSTART+1) + else if (match(w[i], "\\*[.,:;?!)]$")) + w[i] = substr(w[i], 1, RSTART-1) "</i>" substr(w[i], RSTART+1) + else if (match(w[i], "_[.,:;?!)]$")) + w[i] = substr(w[i], 1, RSTART-1) "</b>" substr(w[i], RSTART+1) + else if (match(w[i], "`\\)[.,:;?!]$")) + w[i] = substr(w[i], 1, RSTART-1) "</tt>" substr(w[i], RSTART+1) + else if (match(w[i], "\\*\\)[.,:;?!]$")) + w[i] = substr(w[i], 1, RSTART-1) "</i>" substr(w[i], RSTART+1) + else if (match(w[i], "_\\)[.,:;?!]$")) + w[i] = substr(w[i], 1, RSTART-1) "</b>" substr(w[i], RSTART+1) + + printf "%s", w[i] + if (i < n) printf " " } + printf "\n" } function beginblock(name) { @@ -95,98 +179,14 @@ function ref(v) { return "[<a href=\"#ref" v "\">" v "</a>]" } -function format(line) { - escape(line) - n = split(line, w, "[ ]") - for (i = 0; i <= n; i++) { - if (w[i] == "") continue; - - if (match(w[i], "^\\[[0-9a-z]+\\]$")) - w[i] = ref(substr(w[i], 2, RLENGTH-2)) - else if (match(w[i], "^\\[[0-9a-z]+\\][.,:;?!)]$")) - w[i] = ref(substr(w[i], 2, RLENGTH-3)) substr(w[i], RLENGTH) - else if (match(w[i], "^\\[[0-9a-z]+\\]\\)[.,:;?!]$")) - w[i] = ref(substr(w[i], 2, RLENGTH-4)) substr(w[i], RLENGTH-1) - - if (match(w[i], "^`")) - w[i] = "<tt>" substr(w[i], 2) - else if (match(w[i], "^\\*")) - w[i] = "<i>" substr(w[i], 2) - else if (match(w[i], "^_")) - w[i] = "<b>" substr(w[i], 2) - else if (match(w[i], "^\\(`")) - w[i] = "(<tt>" substr(w[i], 3) - else if (match(w[i], "^\\(\\*")) - w[i] = "(<i>" substr(w[i], 3) - else if (match(w[i], "^\\(_")) - w[i] = "(<b>" substr(w[i], 3) - - if (match(w[i], "`$")) - w[i] = substr(w[i], 1, RSTART-1) "</tt>" - else if (match(w[i], "\\*$")) - w[i] = substr(w[i], 1, RSTART-1) "</i>" - else if (match(w[i], "_$")) - w[i] = substr(w[i], 1, RSTART-1) "</b>" - else if (match(w[i], "`[.,:;?!)]$")) - w[i] = substr(w[i], 1, RSTART-1) "</tt>" substr(w[i], RSTART+1) - else if (match(w[i], "\\*[.,:;?!)]$")) - w[i] = substr(w[i], 1, RSTART-1) "</i>" substr(w[i], RSTART+1) - else if (match(w[i], "_[.,:;?!)]$")) - w[i] = substr(w[i], 1, RSTART-1) "</b>" substr(w[i], RSTART+1) - else if (match(w[i], "`\\)[.,:;?!]$")) - w[i] = substr(w[i], 1, RSTART-1) "</tt>" substr(w[i], RSTART+1) - else if (match(w[i], "\\*\\)[.,:;?!]$")) - w[i] = substr(w[i], 1, RSTART-1) "</i>" substr(w[i], RSTART+1) - else if (match(w[i], "_\\)[.,:;?!]$")) - w[i] = substr(w[i], 1, RSTART-1) "</b>" substr(w[i], RSTART+1) - - printf "%s", w[i] - if (i < n) printf " " +function escape(s) { + if (s == "") { + gsub("&", "\\&") + gsub("<", "\\<") + gsub(">", "\\>") + } else { + gsub("&", "\\&", s) + gsub("<", "\\<", s) + gsub(">", "\\>", s) } - printf "\n" -} - -BEGIN { - expectblock = 1 - itemlevel = 1 - linktext = ENVIRON["linktext"] - if (!linktext) linktext = "link" } -END { breakblock() } - -/^$/ { breakblock(); getline } -expectblock && /^ / { newblock("table") } -expectblock && /^ - / { newblock("ul") } -expectblock && /^ [0-9a-z]+\. / { newblock("ol") } -expectblock && /^ \[[0-9a-z]\]+ / { newblock("nl") } -expectblock && /^ .*: / { newblock("dl") } -expectblock && /^ / { newblock("pre") } -expectblock && /^---$/ { expectblock = 0; printf "<hr/>\n"; next } -expectblock && /^= .* =$/ { heading(1, $0); next } -expectblock && /^== .* ==$/ { heading(2, $0); next } -expectblock && /^=== .* ===$/ { heading(3, $0); next } -expectblock && /^==== .* ====$/ { heading(4, $0); next } -expectblock && /^===== .* =====$/ { heading(5, $0); next } -expectblock && /^====== .* ======$/ { heading(6, $0); next } -expectblock { newblock("p") } - -openblock == "pre" { sub("^ ", ""); escape(); printf "%s\n", $0; next } - -openblock == "ul" && /^ - / { item(1, "ul", line) } -openblock == "ol" && /^ [0-9a-z]+\. / { item(1, "ol", line) } -openblock == "nl" && /^ \[[0-9a-z]\]+ [^ ]+$/ { next } # hyperlink reference -openblock == "nl" && /^ \[[0-9a-z]\]+ / { item(1, "nl", line) } # text reference -openblock == "dl" && /^ .*: / { term(line) } - -(openblock == "ul" || openblock == "ol") && /^ -/ { item(2, "ul", line) } -(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(2, "ol", line) } -(openblock == "ul" || openblock == "ol") && /^ -/ { item(3, "ul", line) } -(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(3, "ol", line) } -(openblock == "ul" || openblock == "ol") && /^ -/ { item(4, "ul", line) } -(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(4, "ol", line) } -(openblock == "ul" || openblock == "ol") && /^ -/ { item(5, "ul", line) } -(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(5, "ol", line) } -(openblock == "ul" || openblock == "ol") && /^ -/ { item(6, "ul", line) } -(openblock == "ul" || openblock == "ol") && /^ [0-9a-z]+\./ { item(6, "ol", line) } - -{ format($0) } |