diff options
| author | davidovki <david@davidovski.xyz> | 2023-03-05 01:09:33 +0000 | 
|---|---|---|
| committer | davidovki <david@davidovski.xyz> | 2023-03-05 01:09:33 +0000 | 
| commit | 1eac038e141dddb40f6b151ae75c72c3bdc8deba (patch) | |
| tree | 7f9462085a766db4cdd88f09edb6c94f9cbc25b0 /src | |
| parent | 6bc6d5fb6b72fb899587d7bd20caa2896d528c2d (diff) | |
Add blockquotes
Diffstat (limited to 'src')
| -rwxr-xr-x | src/md2html.sh | 60 | ||||
| -rw-r--r-- | src/test.md | 13 | 
2 files changed, 65 insertions, 8 deletions
diff --git a/src/md2html.sh b/src/md2html.sh index bc21764..568caaf 100755 --- a/src/md2html.sh +++ b/src/md2html.sh @@ -86,8 +86,11 @@ _p () {      while IFS= read -r line; do          case "$line" in              "#"*|">"*|'``'*|'<'*'>'*) -                $empty && -                    printf "%s\n" "$line" +                $empty || { +                    printf "</p>\n" +                    empty=true  +                } +                printf "%s\n" "$line"                  ;;              "")                   $empty || { @@ -97,8 +100,8 @@ _p () {                  ;;              *)                   $empty && -                    printf "<p>%s " "$line" || -                    printf "%s " "$line" +                    printf "<p>\n%s\n " "$line" || +                    printf "%s\n " "$line"                  empty=false ;;          esac @@ -146,7 +149,8 @@ _a_img () {      done  } - +# get indentation level of a line +#  _get_indent () {      indent=0      l="$*" @@ -244,15 +248,54 @@ _ol () {  # parse quotes  # -#_quote () { -#} +_blockquote () { +    local level=0 +    while IFS= read -r line; do +        set - $line +        case "$1" in +            ">"*) +                indent=0 +                while [ "$line" ]; do +                    c="${line%*${line#?}}" +                    case "$c" in +                        ">") indent=$((indent+1)) ;; +                        " "*)  +                            line="${line#?}" +                            break +                        ;; +                    esac +                    line="${line#?}" +                done + +                [ "$indent" -gt "$level" ] && +                    printf "<blockquote>\n" +                [ "$indent" -lt "$level" ] && +                    printf "</blockquote>\n" +                level="$indent" +                printf "%s\n" "$line" +                ;; +            *) +                printf "%s\n" "$line" +                ;; +        esac +    done +    [ "$indent" -lt "$level" ] && +        printf "</blockquote>\n" +} + +_html () { +    printf "<!DOCTYPE html>\n" +    cat +}  # convert the markdown from stdin into html  #  md2html () { +    # the order of these somewhat matters              _pre_emph \ +            | _blockquote \              | _ul \              | _ol \              | _p \ @@ -266,7 +309,8 @@ md2html () {              | _h 4 \              | _h 3 \              | _h 2 \ -            | _h 1  +            | _h 1 \ +            | _html  }  md2html diff --git a/src/test.md b/src/test.md index d527b96..39750ac 100644 --- a/src/test.md +++ b/src/test.md @@ -8,6 +8,19 @@ click [here](http) for stuff and [over here](http12 "my title") for more  this is a paragraph +> this is a quote hi + +ok that was a quote + +> this quote has a list inside i +> - this is a list in a quote +> - it was quoted +>  +> and also there is another quote; +>> Hi i am a quote  +> + +  haha  - this is a list  | 
