From 1079f927a27db9d194c8e25eb3a188396fdf8eab Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 17 May 2021 21:02:55 +0100 Subject: refactor code --- modules/assert.source.sh | 30 ---------- modules/atomfeed.source.sh | 118 ------------------------------------ modules/gemfeed.source.sh | 51 ---------------- modules/generate.source.sh | 128 --------------------------------------- modules/html.source.sh | 146 --------------------------------------------- modules/log.source.sh | 26 -------- modules/md.source.sh | 55 ----------------- 7 files changed, 554 deletions(-) delete mode 100644 modules/assert.source.sh delete mode 100644 modules/atomfeed.source.sh delete mode 100644 modules/gemfeed.source.sh delete mode 100644 modules/generate.source.sh delete mode 100644 modules/html.source.sh delete mode 100644 modules/log.source.sh delete mode 100644 modules/md.source.sh (limited to 'modules') diff --git a/modules/assert.source.sh b/modules/assert.source.sh deleted file mode 100644 index d7c507a4..00000000 --- a/modules/assert.source.sh +++ /dev/null @@ -1,30 +0,0 @@ -assert::equals () { - local -r result="$1"; shift - local -r expected="$1"; shift - local -r callee=${FUNCNAME[1]} - - if [ "$result" != "$expected" ]; then - cat < "$atom_file.tmp" - - - $now - $DOMAIN feed - $SUBTITLE - - - gemini://$DOMAIN/ -ATOMHEADER - - while read -r gmi_file; do - # Load cached meta information about the post. - source <(atomfeed::meta "$gemfeed_dir/$gmi_file") - # Get HTML content for the feed - local content="$(atomfeed::content "$gemfeed_dir/$gmi_file")" - - assert::not_empty meta_title "$meta_title" - assert::not_empty meta_date "$meta_date" - assert::not_empty meta_author "$meta_author" - assert::not_empty meta_email "$meta_email" - assert::not_empty meta_summary "$meta_summary" - assert::not_empty content "$content" - - cat <> "$atom_file.tmp" - - $meta_title - - gemini://$DOMAIN/gemfeed/$gmi_file - $meta_date - - $meta_author - $meta_email - - $meta_summary - -
- $content -
-
-
-ATOMENTRY - done < <(gemfeed::get_posts | head -n $ATOM_MAX_ENTRIES) - - cat <> "$atom_file.tmp" -
-ATOMFOOTER - - # Delete the 3rd line of the atom feeds (global feed update timestamp) - if ! diff -u <($SED 3d "$atom_file") <($SED 3d "$atom_file.tmp"); then - log INFO 'Feed got something new!' - mv "$atom_file.tmp" "$atom_file" - test "$ADD_GIT" == yes && git add "$atom_file" - else - log INFO 'Nothing really new in the feed' - rm "$atom_file.tmp" - fi -} diff --git a/modules/gemfeed.source.sh b/modules/gemfeed.source.sh deleted file mode 100644 index c68c5070..00000000 --- a/modules/gemfeed.source.sh +++ /dev/null @@ -1,51 +0,0 @@ -# Filters out blog posts from other files in the gemfeed dir. -gemfeed::get_posts () { - local -r gemfeed_dir="$CONTENT_DIR/gemtext/gemfeed" - local -r gmi_pattern='^[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.gmi$' - local -r draft_pattern='\.draft\.gmi$' - - ls "$gemfeed_dir" | grep -E "$gmi_pattern" | grep -E -v "$draft_pattern" | sort -r -} - -# Adds the links from gemfeed/index.gmi to the main index site. -gemfeed::updatemainindex () { - local -r index_gmi="$CONTENT_DIR/gemtext/index.gmi" - local -r gemfeed_dir="$CONTENT_DIR/gemtext/gemfeed" - - log VERBOSE "Updating $index_gmi with posts from $gemfeed_dir" - - # Remove old gemfeeds from main index - $SED '/^=> .\/gemfeed\/[0-9].* - .*/d;' "$index_gmi" > "$index_gmi.tmp" - # Add current gemfeeds to main index - $SED -n '/^=> / { s| ./| ./gemfeed/|; p; }' "$gemfeed_dir/index.gmi" >> "$index_gmi.tmp" - - mv "$index_gmi.tmp" "$index_gmi" - test "$ADD_GIT" == yes && git add "$index_gmi" -} - -# This generates a index.gmi in the ./gemfeed subdir. -gemfeed::generate () { - local -r gemfeed_dir="$CONTENT_DIR/gemtext/gemfeed" - log INFO "Generating Gemfeed index for $gemfeed_dir" - -cat < "$gemfeed_dir/index.gmi.tmp" -# $DOMAIN's Gemfeed - -## $SUBTITLE - -GEMFEED - - gemfeed::get_posts | while read -r gmi_file; do - # Extract first heading as post title. - local title=$($SED -n '/^# / { s/# //; p; q; }' "$gemfeed_dir/$gmi_file" | tr '"' "'") - # Extract the date from the file name. - local filename_date=$(basename "$gemfeed_dir/$gmi_file" | cut -d- -f1,2,3) - - echo "=> ./$gmi_file $filename_date - $title" >> "$gemfeed_dir/index.gmi.tmp" - done - - mv "$gemfeed_dir/index.gmi.tmp" "$gemfeed_dir/index.gmi" - test "$ADD_GIT" == yes && git add "$gemfeed_dir/index.gmi" - - gemfeed::updatemainindex -} diff --git a/modules/generate.source.sh b/modules/generate.source.sh deleted file mode 100644 index 171c31cf..00000000 --- a/modules/generate.source.sh +++ /dev/null @@ -1,128 +0,0 @@ -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::convert_gmi_atom_to_html_atom () { - local -r format="$1"; shift - test "$format" != html && return - - log INFO 'Converting Gemtext Atom feed to HTML Atom feed' - - $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 () { - local -i num_gmi_files=0 - local -i num_doc_files=0 - - log INFO "Generating $* from Gemtext" - - while read -r src; do - (( num_gmi_files++ )) - for format in "$@"; do - generate::fromgmi_ "$src" "$format" - done - done < <(find "$CONTENT_DIR/gemtext" -type f -name \*.gmi) - - log INFO "Converted $num_gmi_files Gemtext files" - - # Add non-.gmi files to html dir. - log VERBOSE "Adding other docs to $*" - - while read -r src; do - (( num_doc_files++ )) - for format in "$@"; do - generate::fromgmi_add_docs "$src" "$format" - done - done < <(find "$CONTENT_DIR/gemtext" -type f | grep -E -v '(.gmi|atom.xml|.tmp)$') - - log INFO "Added $num_doc_files other documents to each of $*" - - # Add atom feed for HTML - for format in "$@"; do - generate::convert_gmi_atom_to_html_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 - - for format in "$@"; do - log INFO "$format can be found in $CONTENT_DIR/$format now" - done -} diff --git a/modules/html.source.sh b/modules/html.source.sh deleted file mode 100644 index 3eb2ee4e..00000000 --- a/modules/html.source.sh +++ /dev/null @@ -1,146 +0,0 @@ -html::special () { - $SED ' - s|\&|\&|g; - s|<|\<|g; - s|>|\>|g; - ' <<< "$@" -} - -html::make_paragraph () { - local -r text="$1"; shift - test -n "$text" && echo "

$(html::special "$text")

" -} - -html::make_heading () { - local -r text=$($SED -E 's/^#+ //' <<< "$1"); shift - local -r level="$1"; shift - - echo "$(html::special "$text")" -} - -html::make_quote () { - local -r quote="${1/> }" - echo "

$(html::special "$quote")

" -} - -html::make_img () { - local link="$1"; shift - local descr="$1"; shift - - if [ -z "$descr" ]; then - echo -n "" - else - echo -n "$descr:" - echo -n "\"$descr\"" - fi - - echo "
" -} - -html::make_link () { - local link="$1"; shift - local descr="$1"; shift - - grep -F -q '://' <<< "$link" || link=${link/.gmi/.html} - test -z "$descr" && descr="$link" - echo "$descr
" -} - -html::fromgmi () { - local -i is_list=0 - local -i is_plain=0 - - while IFS='' read -r line; do - if [ $is_list -eq 1 ]; then - if [[ "$line" == '* '* ]]; then - echo "
  • $(html::special "${line/\* /}")
  • " - else - is_list=0 - echo "" - fi - continue - - elif [ $is_plain -eq 1 ]; then - if [[ "$line" == '```'* ]]; then - echo "" - is_plain=0 - else - html::special "$line" - fi - continue - fi - - case "$line" in - '* '*) - is_list=1 - echo "
      " - echo "
    • ${line/\* /}
    • " - ;; - '```'*) - is_plain=1 - echo "
      "
      -                ;;
      -            '# '*)
      -                html::make_heading "$line" 1
      -                ;;
      -            '## '*)
      -                html::make_heading "$line" 2
      -                ;;
      -            '### '*)
      -                html::make_heading "$line" 3
      -                ;;
      -            '> '*)
      -                html::make_quote "$line"
      -                ;;
      -            '=> '*)
      -                generate::make_link html "$line"
      -                ;;
      -            *)
      -                html::make_paragraph "$line"
      -                ;;
      -        esac
      -    done
      -}
      -
      -html::test () {
      -    local line='Hello world! This is a paragraph.'
      -    assert::equals "$(html::make_paragraph "$line")" '

      Hello world! This is a paragraph.

      ' - - line='' - assert::equals "$(html::make_paragraph "$line")" '' - - line='Foo &<>& Bar!' - assert::equals "$(html::make_paragraph "$line")" '

      Foo &<>& Bar!

      ' - - line='# Header 1' - assert::equals "$(html::make_heading "$line" 1)" '

      Header 1

      ' - - line='## Header 2' - assert::equals "$(html::make_heading "$line" 2)" '

      Header 2

      ' - - line='### Header 3' - assert::equals "$(html::make_heading "$line" 3)" '

      Header 3

      ' - - line='> This is a quote' - assert::equals "$(html::make_quote "$line")" '

      This is a quote

      ' - - line='=> https://example.org' - assert::equals "$(generate::make_link html "$line")" \ - 'https://example.org
      ' - - line='=> index.gmi' - assert::equals "$(generate::make_link html "$line")" \ - 'index.html
      ' - - line='=> http://example.org Description of the link' - assert::equals "$(generate::make_link html "$line")" \ - 'Description of the link
      ' - - line='=> http://example.org/image.png' - assert::equals "$(generate::make_link html "$line")" \ - '
      ' - - line='=> http://example.org/image.png Image description' - assert::equals "$(generate::make_link html "$line")" \ - 'Image description:Image description
      ' -} diff --git a/modules/log.source.sh b/modules/log.source.sh deleted file mode 100644 index 55d693ec..00000000 --- a/modules/log.source.sh +++ /dev/null @@ -1,26 +0,0 @@ -log () { - local -r level="$1"; shift - - for message in "$@"; do - echo "$message" - done | log::_pipe "$level" -} - -log::pipe () { - log::_pipe "$1" -} - -log::_pipe () { - local -r level="$1"; shift - - if [[ "$level" == VERBOSE && -z "$LOG_VERBOSE" ]]; then - return - fi - - local -r callee=${FUNCNAME[2]} - local -r stamp=$($DATE +%Y%m%d-%H%M%S) - - while read -r line; do - echo "$level|$stamp|$callee|$line" >&2 - done -} diff --git a/modules/md.source.sh b/modules/md.source.sh deleted file mode 100644 index 197bdcf7..00000000 --- a/modules/md.source.sh +++ /dev/null @@ -1,55 +0,0 @@ -md::make_img () { - local link="$1"; shift - local descr="$1"; shift - - if [ -z "$descr" ]; then - echo "[![$link]($link)]($link) " - else - echo "[![$descr]($link \"$descr\")]($link) " - fi -} - -md::make_link () { - local link="$1"; shift - local descr="$1"; shift - - grep -F -q '://' <<< "$link" || link=${link/.gmi/.md} - test -z "$descr" && descr="$link" - - echo "[$descr]($link) " -} - -md::test () { - local line='=> https://example.org' - assert::equals "$(generate::make_link md "$line")" \ - '[https://example.org](https://example.org) ' - - line='=> index.md' - assert::equals "$(generate::make_link md "$line")" \ - '[index.md](index.md) ' - - line='=> http://example.org Description of the link' - assert::equals "$(generate::make_link md "$line")" \ - '[Description of the link](http://example.org) ' - - line='=> http://example.org/image.png' - assert::equals "$(generate::make_link md "$line")" \ - '[![http://example.org/image.png](http://example.org/image.png)](http://example.org/image.png) ' - - line='=> http://example.org/image.png Image description' - assert::equals "$(generate::make_link md "$line")" \ - '[![Image description](http://example.org/image.png "Image description")](http://example.org/image.png) ' -} - -md::fromgmi () { - while IFS='' read -r line; do - case "$line" in - '=> '*) - generate::make_link md "$line" - ;; - *) - echo "$line" - ;; - esac - done -} -- cgit v1.2.3