From 93b8f8ef5245852f3f8cedb82c8d65f3b67c7c54 Mon Sep 17 00:00:00 2001 From: Steph Enders Date: Thu, 29 Jun 2023 12:53:18 -0400 Subject: Create gmi to html converter script The usage is fairly simple just do ./gmi2html.sh FILE I would recommend using tidy on the final product to format things but a .gmi file is basically tree-less so its no big deal. --- gmi2html.sh | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100755 gmi2html.sh (limited to 'gmi2html.sh') diff --git a/gmi2html.sh b/gmi2html.sh new file mode 100755 index 0000000..165e4c3 --- /dev/null +++ b/gmi2html.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env sh + +function err { + echo "$@" >&2 +} + +if [ $# -ne 1 ]; then + err "./gmi2html.sh /path/to/gmi" + exit 1; +fi + +# main method +GMI=$1 +list=0 +pre=0 +quote=0 + +while read line; do + # pre formatted text + if [ -n "$(sed -nE '/^[`]{3}/p' <<< $line)" ]; then + if [ $pre -eq 0 ]; then + echo "
"
+	    pre=1
+	else
+	    echo "
" + pre=0 + fi + continue; + fi + if [ $pre -eq 1 ]; then + echo "$line" + continue; + fi + + # lists + if [ -n "$(sed -nE '/^[*] .+/p' <<< "$line")" ]; then + if [ $list -eq 0 ]; then + echo "" + fi + list=0; + fi + + # quotes + if [ -n "$(sed -nE '/^[>] .+/p' <<< $line)" ]; then + if [ $quote -eq 0 ]; then + echo "
" + fi + quote=1; + text=$(sed -E 's/^[>] (.+)$/\1/g' <<< $line) + echo "$text" + continue + else + if [ $quote -eq 1 ]; then + echo "
" + fi + quote=0; + fi + + # single line modifiers + if [ -n "$(sed -nE '/^# .+/p' <<< $line)" ]; then + text=$(sed -E 's/^# (.+)$/\1/g' <<< $line) + echo "

$text

" + continue + fi + if [ -n "$(sed -nE '/^## .+/p' <<< $line)" ]; then + text=$(sed -E 's/^## (.+)$/\1/g' <<< $line) + echo "

$text

" + continue + fi + if [ -n "$(sed -nE '/^### .+/p' <<< $line)" ]; then + text=$(sed -E 's/^### (.+)$/\1/g' <<< $line) + echo "

$text

" + continue + fi + if [ -n "$(sed -nE '/^=> .+/p' <<< "$line")" ]; then + href=$(sed -E 's/^=> ([^ ]+)([ ]?.*)/\1/g' <<< "$line") + if [ -n "$(sed -nE '/^=> [^ ]+ .+$/p' <<< "$line")" ]; then + text=$(sed -E 's/^=> [^ ]+ (.+)$/\1/g' <<< "$line") + else + text=$href + fi + + echo "

$text

" + continue + fi + + # skip blank lines + if [ -z "$line" ]; then + continue + fi + # default paragraphs + echo "

$line

" +done < $GMI -- cgit v1.2.3-54-g00ecf