diff options
| Commit | ab0ff28184b83587297ac1c9f11e110d6b76a80f (patch) | |
|---|---|---|
| Author | 2024-07-21 13:12:42 +0300 | |
| Committer | 2024-07-21 13:12:42 +0300 | |
| Files | fa6175a73a08fababc9115e1f6dd9b1e307648a7 /single.awk | |
| csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.tar csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.tar.gz csg-ab0ff28184b83587297ac1c9f11e110d6b76a80f.zip | ||
| Parent | c1fbc6700da0d83bc798b6b7cb7a310905dbaeb9 (diff) | |
(single) Implemented ordered lists
1 files changed, 17 insertions, 10 deletions
| -rw-r--r-- | single.awk | 27 |
@@ -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") } } |
