diff options
author | John Ankarström <john@ankarstrom.se> | 2021-01-29 19:09:51 +0000 |
---|---|---|
committer | John Ankarström <john@ankarstrom.se> | 2021-01-29 19:09:51 +0000 |
commit | eb8d329d93efa56c8afa4106932b0dfe62eef50e (patch) | |
tree | 8b6b279cfad468f72ada551619bf2a89f83ce20c | |
parent | 99e2817d51dfa45b59276e6d002c6dd95b9f4156 (diff) | |
download | em-eb8d329d93efa56c8afa4106932b0dfe62eef50e.tar.gz |
Add references and reference lists
-rwxr-xr-x | em | 95 |
1 files changed, 64 insertions, 31 deletions
@@ -9,15 +9,20 @@ function newblock(name) { printf "<%s>", name } +function closeblock(name) { + if (name == "nl") printf "</ol>\n" + else printf "</%s>\n", name +} + function breakblock() { if (openitem) { printf "</li>\n" while (itemlevel-- > 1) - printf "</%s>\n", openblock + closeblock(openblock) itemlevel = 1 } if (opendef) printf "</dd>\n" - if (openblock) printf "</%s>\n", openblock + if (openblock) closeblock(openblock) openitem = 0 opendef = 0 openblock = 0 @@ -37,9 +42,22 @@ function item(level, type, line) { if (level > itemlevel) printf "<ul>\n" if (level < itemlevel) printf "</ul>\n" itemlevel = level - if (type == "ul") sub("^ +- ", "") - if (type == "ol") sub("^ +[0-9]+\. ", "") - printf "<li>" + if (type == "ul") { + sub("^ +- ", "") + printf "<li>" + } + if (type == "ol") { + match($0, "[0-9]+\.") + n = substr($0, RSTART, RLENGTH-1) + sub("^ +[0-9]+\. ", "") + printf "<li value=\"%s\">", n + } + if (type == "nl") { + match($0, "\[[0-9]+\]") + n = substr($0, RSTART+1, RLENGTH-2) + sub("^ +\[[0-9]+\] ", "") + printf "<li value=\"%d\" id=\"ref%d\">", n, n + } } function term(line, t) { # t is a local variable @@ -52,29 +70,40 @@ function term(line, t) { # t is a local variable printf "<dt>%s</dt><dd>", t } +function ref(n) { + return "[<a href=\"#ref" n "\">" n "</a>]" +} + function format(line) { n = split(line, w, "[ ]") for (i = 0; i <= n; i++) { - if (w[i] == "") - continue; + if (w[i] == "") continue; + + if (match(w[i], "^\[[0-9]+\]$")) + w[i] = ref(substr(w[i], 2, RLENGTH-2)) + else if (match(w[i], "^\[[0-9]+\][.,:;?!]$")) + w[i] = ref(substr(w[i], 2, RLENGTH-3)) substr(w[i], RLENGTH) + 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) + if (match(w[i], "`$")) - w[i] = substr(w[i], 1, RLENGTH-2) "</tt>" + w[i] = substr(w[i], 1, RSTART-1) "</tt>" else if (match(w[i], "\\*$")) - w[i] = substr(w[i], 1, RLENGTH-2) "</i>" + w[i] = substr(w[i], 1, RSTART-1) "</i>" else if (match(w[i], "_$")) - w[i] = substr(w[i], 1, RLENGTH-2) "</b>" + 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) + printf "%s", w[i] if (i < n) printf " " } @@ -84,13 +113,14 @@ function format(line) { BEGIN { expectblock = 1; itemlevel = 1 } END { breakblock() } -/^$/ { breakblock(); getline } -expectblock && /^ / { newblock("table") } -expectblock && /^ - / { newblock("ul") } -expectblock && /^ [0-9]+\. / { newblock("ol") } -expectblock && /^ .*: / { newblock("dl") } -expectblock && /^ / { newblock("pre"); sub("^ ", "") } -expectblock && /^---$/ { expectblock = 0; printf "<hr/>\n"; next } +/^$/ { breakblock(); getline } +expectblock && /^ / { newblock("table") } +expectblock && /^ - / { newblock("ul") } +expectblock && /^ [0-9]+\. / { newblock("ol") } +expectblock && /^ \[[0-9]\]+ / { newblock("nl") } +expectblock && /^ .*: / { newblock("dl") } +expectblock && /^ / { newblock("pre"); sub("^ ", "") } +expectblock && /^---$/ { expectblock = 0; printf "<hr/>\n"; next } expectblock && /^= .* =$/ { heading(1, $0); next } expectblock && /^== .* ==$/ { heading(3, $0); next } expectblock && /^=== .* ===$/ { heading(3, $0); next } @@ -99,19 +129,22 @@ expectblock && /^===== .* =====$/ { heading(5, $0); next } expectblock && /^====== .* ======$/ { heading(6, $0); next } expectblock { newblock("p") } -block = "ul" && /^ -/ { item(1, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(1, "ol", line) } -block = "dl" && /^ .*:/ { term(line) } - -block = "ul" && /^ -/ { item(2, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(2, "ol", line) } -block = "ul" && /^ -/ { item(3, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(3, "ol", line) } -block = "ul" && /^ -/ { item(4, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(4, "ol", line) } -block = "ul" && /^ -/ { item(5, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(5, "ol", line) } -block = "ul" && /^ -/ { item(6, "ul", line) } -block = "ol" && /^ [0-9]+\./ { item(6, "ol", line) } +block = "ul" && /^ - / { item(1, "ul", line) } +block = "ol" && /^ [0-9]+\. / { item(1, "ol", line) } +block = "nl" && /^ \[[0-9]\]+ / { item(1, "nl", line) } +block = "dl" && /^ .*: / { term(line) } + +block = "ul" && /^ -/ { item(2, "ul", line) } +block = "ol" && /^ [0-9]+\./ { item(2, "ol", line) } +block = "ul" && /^ -/ { item(3, "ul", line) } +block = "ol" && /^ [0-9]+\./ { item(3, "ol", line) } +block = "ul" && /^ -/ { item(4, "ul", line) } +block = "ol" && /^ [0-9]+\./ { item(4, "ol", line) } +block = "ul" && /^ -/ { item(5, "ul", line) } +block = "ol" && /^ [0-9]+\./ { item(5, "ol", line) } +block = "ul" && /^ -/ { item(6, "ul", line) } +block = "ol" && /^ [0-9]+\./ { item(6, "ol", line) } + +block = "pre" && /^ / { sub("^ ", ""); printf "%s\n", $0; next } { format($0) } |