diff options
| Commit | bf13dac3035d59bb9463b924a4efbef32b549f27 (patch) | |
|---|---|---|
| Author | 2024-07-22 16:00:23 +0300 | |
| Committer | 2024-07-22 16:00:23 +0300 | |
| Files | 1f7131c6dce527383e7176658a68631de5c2b369 /single.awk | |
| csg-bf13dac3035d59bb9463b924a4efbef32b549f27.tar csg-bf13dac3035d59bb9463b924a4efbef32b549f27.tar.gz csg-bf13dac3035d59bb9463b924a4efbef32b549f27.zip | ||
| Parent | 9c0695c3838734301f09e91797747f94c8328713 (diff) | |
(csg) Implemented a rough user.begin.awk system
1 files changed, 75 insertions, 10 deletions
| -rw-r--r-- | single.awk | 85 |
@@ -41,9 +41,26 @@ BEGIN { function println(line) { if (0 == line) line = $0 - if (!skipprint) print prev + print prev prev = line - skipprint = 0 +} + +function autoinsert(arrname, isbefore) { + if (isbefore == "") isbefore = 0 + for (confstr in arrname) { + split(confstr, conf, SUBSEP) + + ## FILENAME regex, ".*" (default) + if (2 in conf && FILENAME !~ conf[2]) { continue } + ## Text regex, ".*" (default) + if (3 in conf && text !~ conf[3]) { continue } + + if (isbefore) prev = arrname[confstr] prev + else prev = prev arrname[confstr] + + ## When, FIRST | ALL + if (conf[1] == FIRST) { delete arrname[confstr] } + } } { @@ -86,10 +103,14 @@ function println(line) { level += RSTART while (topStack("bq-level") > level) { println("</blockquote>") + autoinsert(user_BLOCKQUOTE_AFTER) + popStack("bq-level") } if (topStack("bq-level") < level) { + autoinsert(user_BLOCKQUOTE_BEFORE, 1) println("<blockquote>") + pushStack("bq-level", level) } } @@ -102,7 +123,25 @@ function println(line) { ## Remove prefix/suffix gsub(/^[[:blank:]]*#+[[:blank:]]*/, "") gsub(/[[:blank:]]*#+[[:blank:]]*$/, "") + + if (RLENGTH == 1) autoinsert(user_H1_BEFORE, 1) + else if (RLENGTH == 2) autoinsert(user_H2_BEFORE, 1) + else if (RLENGTH == 3) autoinsert(user_H3_BEFORE, 1) + else if (RLENGTH == 4) autoinsert(user_H4_BEFORE, 1) + else if (RLENGTH == 5) autoinsert(user_H5_BEFORE, 1) + else if (RLENGTH == 6) autoinsert(user_H6_BEFORE, 1) + autoinsert(user_H_BEFORE, 1) + println("<h" RLENGTH ">" $0 "</h" RLENGTH ">") + + autoinsert(user_H_AFTER) + if (RLENGTH == 1) autoinsert(user_H1_AFTER) + else if (RLENGTH == 2) autoinsert(user_H2_AFTER) + else if (RLENGTH == 3) autoinsert(user_H3_AFTER) + else if (RLENGTH == 4) autoinsert(user_H4_AFTER) + else if (RLENGTH == 5) autoinsert(user_H5_AFTER) + else if (RLENGTH == 6) autoinsert(user_H6_AFTER) + blankline = 1 next } @@ -111,15 +150,26 @@ function println(line) { !prev_blankline && /^[[:blank:]]*(=|-)+[[:blank:]]*$/ { sub(/^<p>/, "", prev) ## from paragraph logic hlevel = 1 + ($0 ~ /-/) - print "<h" hlevel ">" prev "</h" hlevel ">" + + prev = "<h" hlevel ">" prev "</h" hlevel ">" + + if (hlevel == 1) autoinsert(user_H1_BEFORE, 1) + else autoinsert(user_H2_BEFORE, 1) + autoinsert(user_H_BEFORE, 1) + + autoinsert(user_H_AFTER) + if (hlevel == 1) autoinsert(user_H1_AFTER) + else autoinsert(user_H2_AFTER) + blankline = 1 - skipprint = 1 next } # Horizontal rules /^(-|\*|_) ?(-|\*|_) ?(-|\*|_|[[:blank:]])+$/ { + autoinsert(user_HR_BEFORE, 1) println("<hr>") + autoinsert(user_HR_AFTER) blankline = 1 next } @@ -143,16 +193,31 @@ function abs(x) { return ((x < 0) ? -x : x) } if (RLENGTH == -1) RLENGTH = 0 ## indent + RLENGTH = length(" * " or " 1. ") while (indent + RLENGTH < abs(topStack("list-level"))) { - if (topStack("list-level") < 0) println("</ol>") - else println("</ul>") + if (topStack("list-level") < 0) { + println("</ol>") + autoinsert(user_L_AFTER) + autoinsert(user_OL_AFTER) + } + else { + println("</ul>") + autoinsert(user_L_AFTER) + autoinsert(user_UL_AFTER) + } popStack("list-level") } } /^[[:blank:]]*(\*|\+|-|[[:digit:]]+\.) / { match($0, /(\*|\+|-|[[:digit:]]+\.) /) if (abs(topStack("list-level")) < RSTART) { - if (RLENGTH > 2) { xl = "<ol>"; mult = -1 } - else { xl = "<ul>"; mult = 1 } + if (RLENGTH > 2) { + xl = "<ol>"; mult = -1 + autoinsert(user_OL_BEFORE, 1) + } + else { + xl = "<ul>"; mult = 1 + autoinsert(user_UL_BEFORE, 1) + } + autoinsert(user_L_BEFORE, 1) println(xl "<li>") pushStack("list-level", mult * (RSTART + RLENGTH - 1)) } @@ -170,6 +235,7 @@ prev_blankline && !blankline && lengthStack("bq-level") == 0 && lengthStack("lis blankline { while (lengthStack("bq-level") > 0) { println("</blockquote>") + autoinsert(user_BLOCKQUOTE_AFTER) popStack("bq-level") } } @@ -218,8 +284,7 @@ function surround(brace, opening, closing) { !prev_blankline && /^: / { sub(/^<p>/, "", prev) sub(/^: /, "") - print "<dl><dt>" prev "</dt>" ORS "<dd>" $0 "</dd></dl>" - skipprint = 1 + prev = "<dl><dt>" prev "</dt>" ORS "<dd>" $0 "</dd></dl>" blankline = 1 next } |
