diff options
| author | davidovski <david@davidovski.xyz> | 2023-06-12 03:57:18 +0100 | 
|---|---|---|
| committer | davidovski <david@davidovski.xyz> | 2023-06-12 03:57:18 +0100 | 
| commit | 52e9c3aeea18d5750fea8704711a113adae93903 (patch) | |
| tree | f8a9d31de26ed8d0b2ffe6515f2302c0d1374ea1 | |
| parent | af75a700c52aaca66ffe6db42c4448c2070be21a (diff) | |
create example site where every page is executed to generate itself
| -rwxr-xr-x | example/entries/entries.sh | 45 | ||||
| -rwxr-xr-x | example/entries/entry1.md | 13 | ||||
| -rwxr-xr-x | example/entries/entry2.md | 9 | ||||
| -rwxr-xr-x[-rw-r--r--] | example/index.md (renamed from src/test.md) | 2 | ||||
| -rwxr-xr-x | src/md2html.sh | 19 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/shblg | 33 | ||||
| -rwxr-xr-x | src/test.sh | 18 | 
7 files changed, 132 insertions, 7 deletions
diff --git a/example/entries/entries.sh b/example/entries/entries.sh new file mode 100755 index 0000000..0479d96 --- /dev/null +++ b/example/entries/entries.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# add a special header to all entries +cat << EOF +<!DOCTYPE html> +<html lang="en"> +<head> +    <meta charset="UTF-8"> +    <title>$1</title> +</head> +<body> +<h1>my blog</h1> +EOF + +# make this page be the index if it is called with no arguments +[ -z "$1" ] && { +    cat << EOF +    <h2>blog entries</h2> +    <ul> +EOF +    # list all the files in the directory +    for file in *.md; do +        printf "<li><a href=\"%s\">%s</a></li>" "${file%.*}.html" "$file" +    done + +    cat << EOF +    </ul> +EOF + +} || { +    # convert the markdown page to html text +    md2html $1 + +    # add a back button +    cat << EOF +<span><a href="entries.html">go back to list</a></span> +EOF +} + +# and a footer +cat << EOF +</body> +</html> +EOF + diff --git a/example/entries/entry1.md b/example/entries/entry1.md new file mode 100755 index 0000000..82917c7 --- /dev/null +++ b/example/entries/entry1.md @@ -0,0 +1,13 @@ +#!./entries.sh + +# first blog entry + +hello welcome to my test blog. here i will be talking about blah  + +## something else + +i probably have something else to say here + +## conclusion + +this is the conclusion, thank you diff --git a/example/entries/entry2.md b/example/entries/entry2.md new file mode 100755 index 0000000..54b978d --- /dev/null +++ b/example/entries/entry2.md @@ -0,0 +1,9 @@ +#!./entries.sh + +# day 2 + +this is a second entry to my blog + +i learned how to make text **bold** and *italic*  + +wow isnt that ***cool???*** diff --git a/src/test.md b/example/index.md index 203d425..1be4e1f 100644..100755 --- a/src/test.md +++ b/example/index.md @@ -1,3 +1,5 @@ +#!/usr/bin/env md2html +  # This is a test md file hello  This is *italics* this is **bold** this is ***both*** wow (this is in brackets ssh) and [this is in square brackets not a anchor lol] diff --git a/src/md2html.sh b/src/md2html.sh index 590cdaa..846498a 100755 --- a/src/md2html.sh +++ b/src/md2html.sh @@ -6,6 +6,19 @@ cat () {      while IFS= read -r line; do printf "%s\n" "$line"; done < "$1"  } +# remove a shebang from the start of the file +_remove_shebang () { +    IFS= read -r line +    case "$line" in +        "#!"*) ;; +        *) printf "%s\n" "$line" +    esac + +    while IFS= read -r line; do +        printf "%s\n" "$line" +    done +} +  # remove traling whitespace from empty lines  #  _pre_strip () { @@ -396,7 +409,8 @@ _squash () {  # convert the markdown from stdin into html  #  md2html () { -    _pre_strip \ +    _remove_shebang \ +    | _pre_strip \      | _code \      | _pre_emph \      | _blockquote \ @@ -414,8 +428,7 @@ md2html () {      | _h 3 \      | _h 2 \      | _h 1 \ -    | _squash \ -    | _html +    | _squash  }  [ -z "$*" ] \ diff --git a/src/shblg b/src/shblg index ff10250..226216c 100644..100755 --- a/src/shblg +++ b/src/shblg @@ -7,7 +7,9 @@ PAGE_TEMPLATE=blog/template.html  while getopts ":o:i:t:" opt; do      case "$opt" in          o) -            OUTPUT_DIR=$(realpath $OPTARG) +            OUTPUT_DIR=$OPTARG/ +            mkdir -p $OUTPUT_DIR +            OUTPUT_DIR=$(realpath $OUTPUT_DIR)              ;;          i)              INPUT_DIR=$(realpath $OPTARG) @@ -18,6 +20,29 @@ while getopts ":o:i:t:" opt; do      esac  done -for f in ${INPUT_DIR}/*.md; do -        md2html "$f" > ${OUTPUT_DIR}/$f -done +# process a file to  +process () { +    path="${1#$INPUT_DIR}" +    dirpath="${1%${1##*/}}" +    out_file="${OUTPUT_DIR}${path}" + +    [ -d "$1" ] && { +        mkdir -p "$out_file" +        for f in "$1"/*; do +            process "$f" +        done  +        return 0 +    } || [ -x "$1" ] && { +        # execute the file +        cd $dirpath +        "$1" > "${out_file%.*}.html" +        cd - +        return 0 +    } || { +        # just output the file as is +        while IFS= read -r line; do printf "%s\n" "$line"; done < "$1" > "$out_file" +        return 0 +    } +} + +process "$INPUT_DIR" diff --git a/src/test.sh b/src/test.sh new file mode 100755 index 0000000..84c5405 --- /dev/null +++ b/src/test.sh @@ -0,0 +1,18 @@ +#!/bin/sh + + +line="hell 			o world" +# replace tabs with spaces +l="$line" +line= +while [ "$l" ]; do +    c="${l%*${l#?}}" +    case "$c" in +        "\t") line="$line    ";; +        *) line="$line$c" ;; +    esac +    l="${l#?}" +    printf "%s\n" "$c" +done +printf "%s\n" "$line" +  | 
