Summary Files Commits Branches @commit @diff @stats
path: root / single.awk
diff options
context:
space:
mode:
Commitbf13dac3035d59bb9463b924a4efbef32b549f27 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-07-22 16:00:23 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-07-22 16:00:23 +0300
Files1f7131c6dce527383e7176658a68631de5c2b369 /single.awk
csg-bf13dac3035d59bb9463b924a4efbef32b549f27.tar
csg-bf13dac3035d59bb9463b924a4efbef32b549f27.tar.gz
csg-bf13dac3035d59bb9463b924a4efbef32b549f27.zip
Parent9c0695c3838734301f09e91797747f94c8328713 (diff)
(csg) Implemented a rough user.begin.awk system
1 files changed, 75 insertions, 10 deletions
-rw-r--r--single.awk85
diff --git a/single.awk b/single.awk
index 7e67aa0..fb79af2 100644
--- a/single.awk
+++ b/single.awk
@@ -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
}