#!/bin/awk -f BEGIN { in_pre = 0; in_list = 0; in_html = 0; html_comment = 0; first_pre = 0; } !html_comment && // { html_comment = 0; print $0; next } html_comment { print $0; next } !in_html && /^\^\^\^/ { in_html = 1; next } in_html && /^\^\^\^/ { in_html = 0; next } in_html { print $0; next } !in_pre && /^```/ { in_pre = 1; first_pre = 1; if (in_list) { in_list = 0; print(""); } printf "
";
    next
}
in_pre && /^```/    { in_pre = 0; first_pre = 0; print "
"; next } in_pre && first_pre {print san($0); first_pre = 0; next} in_pre { print san($0); next } /^###/ { output("

", substr($0, 4), "

"); next } /^##/ { output("

", substr($0, 3), "

"); next } /^#/ { output("

", substr($0, 2), "

"); next } /^>>/ { $0 = substr($0, 3); output("
", $0, ""); next; } /^<"; next; } /^>/ { output("
", substr($0, 2), "
"); next } /^\*/ { output("
  • ", substr($0, 2), "
  • "); next } /^=>/ { $0 = substr($0, 3); link = $1; $1 = ""; output_link(link, $0); next; } /^:>/ { $0 = substr($0, 3); link = $1; $1 = ""; output_image(link, $0, $3, $4); next; } // { output("

    ", $0, "

    "); next } END { if (in_list) print "" if (in_pre) print "" if (in_html) print "" print "\n" } function trim(s) { sub("^[ \t]*", "", s); return s; } function san(s) { gsub("&", "\\&", s) gsub("<", "\\<", s) gsub(">", "\\>", s) return s; } function output(ot, content, ct) { content = trim(content); if (!in_list && ot == "
  • ") { in_list = 1; print ""; } if (ot == "

    " && content == "") return; printf("%s%s%s\n", ot, san(content), ct); } function output_link(link, content) { if (in_list) { in_list = 0; print ""; } # If it's a local gemini file, link to the html: if((link !~ /^[a-zA-Z]*:\/\//) && (link ~ /\.gmi$/)){ sub(/\.gmi$/, ".html", link) } if (content == "") content = link; printf("=> %s
    \n", link, trim(san(content))); } function output_image(link, content, width, height) { if (in_list) { in_list = 0; print ""; } if (content == "") content = link; printf("\"%s\"
    \n", link, trim(san(content)), width, height); }