Summary Files Commits Branches @commit @diff @stats
path: root / single.awk
diff options
context:
space:
mode:
Commitab0ff28184b83587297ac1c9f11e110d6b76a80f (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-07-21 13:12:42 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-07-21 13:12:42 +0300
Filesfa6175a73a08fababc9115e1f6dd9b1e307648a7 /single.awk
csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.tar
csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.tar.gz
csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.zip
Parentc1fbc6700da0d83bc798b6b7cb7a310905dbaeb9 (diff)
(single) Implemented ordered lists
1 files changed, 17 insertions, 10 deletions
-rw-r--r--single.awk27
diff --git a/single.awk b/single.awk
index 0262a1a..eadb7d1 100644
--- a/single.awk
+++ b/single.awk
@@ -6,7 +6,7 @@
# [x] Line break
# [.] Headers (atx and setex)
# [x] Blockquotes
-# [ ] Lists
+# [x] Lists
# [ ] Code blocks
# [x] Horizontal rules
# [ ] Span elements
@@ -98,20 +98,26 @@ BEGIN {
}
# Unordered lists
+function abs(x) { return ((x < 0) ? -x : x) }
!blankline && lengthStack("list-level") > 0 {
match($0, /^ */)
+ indent = RLENGTH
# Compensating factor for list items
- li_offset = 2 * (substr($0, RSTART + RLENGTH, 2) ~ /(\*|\+|-) /)
- while (RLENGTH + li_offset < topStack("list-level")) {
- print "</ul>"
+ match($0, /(\*|\+|-|[[:digit:]]+\.) /)
+ if (RLENGTH == -1) RLENGTH = 0
+ while (indent + RLENGTH < abs(topStack("list-level"))) {
+ if (topStack("list-level") < 0) print "</ol>"
+ else print "</ul>"
popStack("list-level")
}
}
-/^[[:blank:]]*(\*|\+|-) / {
- match($0, /(\*|\+|-) /)
- if (topStack("list-level") < RSTART) {
- print "<ul><li>"
- pushStack("list-level", RSTART + 1)
+/^[[:blank:]]*(\*|\+|-|[[:digit:]]+\.) / {
+ match($0, /(\*|\+|-|[[:digit:]]+\.) /)
+ if (abs(topStack("list-level")) < RSTART) {
+ if (RLENGTH > 2) { xl = "<ol>"; mult = -1 }
+ else { xl = "<ul>"; mult = 1 }
+ print xl "<li>"
+ pushStack("list-level", mult * (RSTART + RLENGTH - 1))
}
else {
print "</li><li>"
@@ -182,7 +188,8 @@ END {
popStack("bq-level")
}
while (lengthStack("list-level") > 0) {
- print "</ul>"
+ if (topStack("list-level") < 0) print "</ol>"
+ else print "</ul>"
popStack("list-level")
}
}