summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordavidovki <david@davidovski.xyz>2023-03-03 04:55:27 +0000
committerdavidovki <david@davidovski.xyz>2023-03-03 04:55:27 +0000
commitb1ffc4b5ba572a5e4070d162888c4c92b94a62c1 (patch)
treeec67f003f563c5a7ddb5078a0e6f82e99b7fd106 /src
parent7bcc93b621c4886f5a5f5aa72b22fe423cd3a777 (diff)
Parse ordered lists and unordered lists
Diffstat (limited to 'src')
-rwxr-xr-xsrc/md2html.sh95
-rw-r--r--src/test.md19
2 files changed, 108 insertions, 6 deletions
diff --git a/src/md2html.sh b/src/md2html.sh
index 7387fb2..86ebc3d 100755
--- a/src/md2html.sh
+++ b/src/md2html.sh
@@ -110,8 +110,8 @@ _p () {
# parse ref-style links
#
-_ref () {
-}
+#_ref () {
+#}
# parse links
#
@@ -144,25 +144,106 @@ _a_img () {
done
}
+
+_get_indent () {
+ indent=0
+ l="$*"
+ while [ "$l" ]; do
+ c="${l%*${l#?}}"
+ case "$c" in
+ " ") indent=$((indent+1)) ;;
+ *)
+ l="${l#?}"
+ break
+ ;;
+ esac
+ l="${l#?}"
+ done
+ printf "$indent"
+}
+
+
# parse unordered lists
#
_ul () {
+ local list=false
+ local indent_level=0
+ while IFS= read -r line; do
+ set -- $line
+ case "$1" in
+ "-"|"_"|"+")
+ indent=$(_get_indent "$line")
+
+ $list || {
+ list=true
+ printf "<ul>\n"
+ }
+
+ [ "$indent_level" -lt "$indent" ] \
+ && printf "<ul>\n"
+ [ "$indent_level" -gt "$indent" ] \
+ && printf "</ul>\n"
+ indent_level=$indent
+
+ printf "<li>%s</li>\n" "${line#*$1 }"
+ ;;
+ *)
+ $list && {
+ printf "</ul>"
+ list=false
+ }
+ printf "%s\n" "$line"
+ ;;
+ esac
+ done
+ $list && printf "</ul>\n"
}
# parse ordered lists
#
_ol () {
+ local list=false
+ local indent_level=0
+ while IFS= read -r line; do
+ set -- $line
+ case "$1" in
+ *.|*\))
+ indent=$(_get_indent "$line")
+
+ $list || {
+ list=true
+ printf "<ol>\n"
+ }
+
+ [ "$indent_level" -lt "$indent" ] \
+ && printf "<ol>\n"
+ [ "$indent_level" -gt "$indent" ] \
+ && printf "</ol>\n"
+ indent_level=$indent
+
+ printf "<li>%s</li>\n" "${line#*$1 }"
+ ;;
+ *)
+ $list && {
+ printf "</ol>"
+ list=false
+ }
+ printf "%s\n" "$line"
+ ;;
+ esac
+ done
+ $list && printf "</ol>\n"
}
# parse mutliline codeblocks
#
-_code () {
-}
+#_code () {
+#}
# parse quotes
#
-_quote () {
-}
+#_quote () {
+#}
# convert the markdown from stdin into html
@@ -171,6 +252,8 @@ md2html () {
_p \
| _pre_emph \
+ | _ul \
+ | _ol \
| _emph '__' "<strong>" "</strong>" \
| _emph '_' "<em>" "</em>" \
| _emph '`' "<code>" "</code>" \
diff --git a/src/test.md b/src/test.md
index 6aacbed..d527b96 100644
--- a/src/test.md
+++ b/src/test.md
@@ -9,3 +9,22 @@ click [here](http) for stuff and [over here](http12 "my title") for more
this is a paragraph
haha
+
+- this is a list
+ - of items
+ - please dont
+- break
+
+
+* star list
+* this is a star
+
++ plus now wow
++ plus wow so cool
+
+1. hello
+2. world
+3. lOL
+
+
+ok that worked?