From 8e46a6d6e38cce30fd2a8212d058ae64b8e7fabb Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 21 Jul 2024 15:30:12 +0300 Subject: (single) Implemented setex-style headings --- single.awk | 73 ++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 26 deletions(-) (limited to 'single.awk') diff --git a/single.awk b/single.awk index 1ceb577..46ff93d 100644 --- a/single.awk +++ b/single.awk @@ -4,7 +4,7 @@ # [ ] Block elements # [x] Paragraph # [x] Line break -# [.] Headers (atx and setex) +# [x] Headers (atx and setex) # [x] Blockquotes # [x] Lists # [ ] Code blocks @@ -32,10 +32,18 @@ BEGIN { prev_blankline = blankline = 1 + skipprint = 1 newStack("bq-level") newStack("list-level") } +function println(line) { + if (0 == line) line = $0 + if (!skipprint) print prev + prev = line + skipprint = 0 +} + { prev_blankline = blankline blankline = 1 @@ -47,7 +55,7 @@ BEGIN { # Inline HTML /^[[:blank:]]*<\/?[[:alnum:]]+/ { - print + println() next } @@ -74,41 +82,50 @@ BEGIN { $0 = substr($0, RLENGTH + 1) level += RSTART while (topStack("bq-level") > level) { - print "" + println("") popStack("bq-level") } if (topStack("bq-level") < level) { - print "
" + println("
") pushStack("bq-level", level) } } } -# Horizontal rules -/^(-|\*|_) ?(-|\*|_) ?(-|\*|_|[[:blank:]])+$/ { - print "
" - blankline = 1 - next -} - -# Line break -/ $/ { - sub(/[[:blank:]]* $/, "
") -} - # atx-style headers /^[[:blank:]]*#+/ { match($0, /#+/) if (RLENGTH <= 6) { gsub(/^[[:blank:]]*#+[[:blank:]]*/, "") gsub(/[[:blank:]]*#+[[:blank:]]*$/, "") - print "" $0 "" + println("" $0 "") blankline = 1 next } } +# setex-style headers +!prev_blankline && /^[[:blank:]]*(=|-)+[[:blank:]]*$/ { + sub(/^

/, "", prev) + hlevel = 1 + ($0 ~ /-/) + print "" prev "" + prev = "" + blankline = 1 + skipprint = 1 + next +} + +# Horizontal rules +/^(-|\*|_) ?(-|\*|_) ?(-|\*|_|[[:blank:]])+$/ { + println("


") + blankline = 1 + next +} + +# Line break +/ $/ { + sub(/[[:blank:]]* $/, "
") +} -# setex-style headers TODO # Code blocks /^( |\t)[[:blank:]]*/ { @@ -123,8 +140,8 @@ function abs(x) { return ((x < 0) ? -x : x) } match($0, /(\*|\+|-|[[:digit:]]+\.) /) if (RLENGTH == -1) RLENGTH = 0 while (indent + RLENGTH < abs(topStack("list-level"))) { - if (topStack("list-level") < 0) print "" - else print "" + if (topStack("list-level") < 0) println("") + else println("") popStack("list-level") } } @@ -133,23 +150,23 @@ function abs(x) { return ((x < 0) ? -x : x) } if (abs(topStack("list-level")) < RSTART) { if (RLENGTH > 2) { xl = "
    "; mult = -1 } else { xl = "
      "; mult = 1 } - print xl "
    • " + println(xl "
    • ") pushStack("list-level", mult * (RSTART + RLENGTH - 1)) } else { - print "
    • " + println("
    • ") } $0 = substr($0, RSTART + RLENGTH) } # Paragraphs -prev_blankline && !blankline && lengthStack("bq-level") == 0 && lengthStack("list-level") == 0 { print "

      " } -!prev_blankline && blankline && lengthStack("bq-level") == 0 && lengthStack("list-level") == 0 { print "

      " } +prev_blankline && !blankline && lengthStack("bq-level") == 0 && lengthStack("list-level") == 0 { $0 = "

      " $0 } +!prev_blankline && blankline && lengthStack("bq-level") == 0 && lengthStack("list-level") == 0 { prev = prev "

      " } # Blockquote Part 2/2 blankline { while (lengthStack("bq-level") > 0) { - print "
" + println("
") popStack("bq-level") } } @@ -194,9 +211,13 @@ function surround(brace, opening, closing) { surround("`", "", "") } -{ print } + +{ + println() +} END { + print prev if (!blankline && lengthStack("bq-level") == 0) { print "

" } while (lengthStack("bq-level") > 0) { print "" -- cgit v1.3.1-23-gd82d