diff options
Diffstat (limited to 'modules/generate.source.sh')
| -rw-r--r-- | modules/generate.source.sh | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/modules/generate.source.sh b/modules/generate.source.sh new file mode 100644 index 00000000..7066576a --- /dev/null +++ b/modules/generate.source.sh @@ -0,0 +1,109 @@ +generate::make_link () { + local -r what="$1"; shift + local -r line="${1/=> }"; shift + local link + local descr + + while read -r token; do + if [ -z "$link" ]; then + link="$token" + elif [ -z "$descr" ]; then + descr="$token" + else + descr="$descr $token" + fi + done < <(echo "$line" | tr ' ' '\n') + + if grep -E -q "$IMAGE_PATTERN" <<< "$link"; then + if [ $what == md ]; then + md::make_img "$link" "$descr" + else + html::make_img "$link" "$(html::special "$descr")" + fi + return + fi + + if [ $what == md ]; then + md::make_link "$link" "$descr" + else + html::make_link "$link" "$(html::special "$descr")" + fi +} + +generate::fromgmi_ () { + local -r src="$1"; shift + local -r format="$1"; shift + local dest=${src/gemtext/$format} + dest=${dest/.gmi/.$format} + local dest_dir=$(dirname "$dest") + + test ! -d "$dest_dir" && mkdir -p "$dest_dir" + if [ $format == html ]; then + cat header.html.part > "$dest.tmp" + html::fromgmi < "$src" >> "$dest.tmp" + cat footer.html.part >> "$dest.tmp" + elif [ $format == md ]; then + md::fromgmi < "$src" >> "$dest.tmp" + fi + + mv "$dest.tmp" "$dest" + test "$ADD_GIT" == yes && git add "$dest" +} + +generate::fromgmi_add_docs () { + local -r src="$1"; shift + local -r format="$1"; shift + local -r dest=${src/gemtext/$format} + local -r dest_dir=$(dirname "$dest") + + test ! -d "$dest_dir" && mkdir -p "$dest_dir" + cp "$src" "$dest" + test "$ADD_GIT" == yes && git add "$dest" +} + +generate::fromgmi_convert_atom () { + local -r format="$1"; shift + + test $format != html && return + $SED 's|.gmi|.html|g; s|gemini://|https://|g' \ + < $CONTENT_DIR/gemtext/gemfeed/atom.xml \ + > $CONTENT_DIR/html/gemfeed/atom.xml + test "$ADD_GIT" == yes && git add $CONTENT_DIR/html/gemfeed/atom.xml +} + +generate::fromgmi_cleanup () { + local -r src="$1"; shift + local -r format="$1"; shift + local dest=${src/.$format/.gmi} + dest=${dest/$format/gemtext} + + test ! -f "$dest" && test "$ADD_GIT" == yes && git rm "$src" +} + +generate::fromgmi () { + find $CONTENT_DIR/gemtext -type f -name \*.gmi | while read -r src; do + for format in "$@"; do + generate::fromgmi_ "$src" "$format" + done + done + + # Add non-.gmi files to html dir. + find $CONTENT_DIR/gemtext -type f | grep -E -v '(.gmi|atom.xml|.tmp)$' | + while read -r src; do + for format in "$@"; do + generate::fromgmi_add_docs "$src" "$format" + done + done + + # Add atom feed for HTML + for format in "$@"; do + generate::fromgmi_convert_atom "$format" + done + + # Remove obsolete files from ./html/ + for format in "$@"; do + find $CONTENT_DIR/$format -type f | while read -r src; do + generate::fromgmi_cleanup "$src" "$format" + done + done +} |
