Summary Files Commits Branches @commit @diff @stats
path: root / single.awk
diff options
context:
space:
mode:
Commitc1fbc6700da0d83bc798b6b7cb7a310905dbaeb9 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-07-21 11:50:32 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-07-21 11:50:32 +0300
Files80d6db875efb2cfdc82652ce11c2caf30f46086d /single.awk
csg-c1fbc6700da0d83bc798b6b7cb7a310905dbaeb9.tar
csg-c1fbc6700da0d83bc798b6b7cb7a310905dbaeb9.tar.gz
csg-c1fbc6700da0d83bc798b6b7cb7a310905dbaeb9.zip
Parent80aac3ffed20cbb3514ac81ccacb91c14871ce01 (diff)
(single) Implemented unordered lists
1 files changed, 28 insertions, 0 deletions
-rw-r--r--single.awk28
diff --git a/single.awk b/single.awk
index 6d9e80e..0262a1a 100644
--- a/single.awk
+++ b/single.awk
@@ -31,6 +31,7 @@
BEGIN {
prev_blankline = blankline = 1
newStack("bq-level")
+ newStack("list-level")
}
{
@@ -96,6 +97,29 @@ BEGIN {
/^( |\t)[[:blank:]]*/ {
}
+# Unordered lists
+!blankline && lengthStack("list-level") > 0 {
+ match($0, /^ */)
+ # Compensating factor for list items
+ li_offset = 2 * (substr($0, RSTART + RLENGTH, 2) ~ /(\*|\+|-) /)
+ while (RLENGTH + li_offset < topStack("list-level")) {
+ print "</ul>"
+ popStack("list-level")
+ }
+}
+/^[[:blank:]]*(\*|\+|-) / {
+ match($0, /(\*|\+|-) /)
+ if (topStack("list-level") < RSTART) {
+ print "<ul><li>"
+ pushStack("list-level", RSTART + 1)
+ }
+ else {
+ print "</li><li>"
+ }
+ $0 = substr($0, RSTART + RLENGTH)
+}
+lengthStack("list-level") > 0 { blankline = 1 }
+
# Paragraphs
prev_blankline && !blankline && lengthStack("bq-level") == 0 { print "<p>" }
!prev_blankline && blankline && lengthStack("bq-level") == 0 { print "</p>" }
@@ -157,4 +181,8 @@ END {
print "</blockquote>"
popStack("bq-level")
}
+ while (lengthStack("list-level") > 0) {
+ print "</ul>"
+ popStack("list-level")
+ }
}