From ccc360b2fb6cfcf2c00db66de34d54edec82e397 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Tue, 27 Aug 2024 16:31:36 -0700 Subject: [PATCH] move non-README.md HTML formation to bin/othermd2html.sh The core of `bin/gen-other-html.sh` code that converts entry non-README.md into HTML has been moved into a new tool: `bin/othermd2html.sh`. The `bin/othermd2html.sh` tool will be useful to the `bin/cvt-submission.sh` tool that is under development. Added info about `bin/othermd2html.sh` to `bin/README.md`. Changed `bin/gen-other-html.sh` VERSION from "1.4.1 2024-08-18" to "1.5 2024-08-27". HTML produced by `bin/gen-other-html.sh` now uses a "jump to" mid-bar test now shows the `YYYY/dir/index.html` link text (with `YYYY/dir/` added). Performed `make gen_other_html` to accomplish the above and to test under macOS. Performed `make gen_top_html` to accomplish the above and to test under macOS. --- 1986/marshall/compilers.html | 2 +- 1991/brnstnd/sorta.README.html | 2 +- 1992/buzzard.2/buzzard.2.README.html | 2 +- 1992/buzzard.2/buzzard.2.design.html | 2 +- 1993/ejb/hanoi.html | 2 +- 1993/ejb/patience.html | 2 +- 1993/rince/design.html | 2 +- 1994/shapiro/shapiro.html | 2 +- 1995/leo/secret.html | 2 +- 1998/dorssel/dorssel.html | 2 +- 1998/schweikh1/macos.html | 2 +- 2004/gavin/gavin.html | 2 +- 2012/deckmyn/deckmyn.html | 2 +- 2012/hou/hint.html | 2 +- 2012/tromp/how.html | 2 +- 2013/hou/doc/example.html | 2 +- 2014/endoh1/quine-qr.html | 2 +- 2015/burton/obfuscation.html | 2 +- 2015/burton/road.to.obscurity.html | 2 +- 2018/burton2/discrepancies.html | 2 +- 2018/ferguson/FILES.html | 2 +- 2018/ferguson/rpm.html | 2 +- 2020/endoh2/obfuscation/index.html | 2 +- 2020/ferguson1/COMPILING.html | 2 +- 2020/ferguson1/HACKING.html | 2 +- 2020/ferguson1/bugs.html | 2 +- 2020/ferguson1/cannibalism.log.html | 2 +- 2020/ferguson1/chocolate-cake.html | 2 +- 2020/ferguson1/crazy.log.html | 2 +- 2020/ferguson1/gameplay.html | 2 +- 2020/ferguson1/obfuscation.html | 2 +- 2020/ferguson1/terminals.html | 2 +- 2020/ferguson1/troubleshooting.html | 2 +- 2020/ferguson2/obfuscation.html | 2 +- 2020/ferguson2/recode.html | 2 +- 2020/ferguson2/testing-procedure.html | 2 +- bin/README.md | 21 + bin/gen-other-html.sh | 175 +++----- bin/index.html | 9 + bin/othermd2html.sh | 603 ++++++++++++++++++++++++++ 40 files changed, 725 insertions(+), 155 deletions(-) create mode 100755 bin/othermd2html.sh diff --git a/1986/marshall/compilers.html b/1986/marshall/compilers.html index d6d86dc17..13153ae78 100644 --- a/1986/marshall/compilers.html +++ b/1986/marshall/compilers.html @@ -376,7 +376,7 @@ diff --git a/1991/brnstnd/sorta.README.html b/1991/brnstnd/sorta.README.html index a56a99feb..c7c4856b6 100644 --- a/1991/brnstnd/sorta.README.html +++ b/1991/brnstnd/sorta.README.html @@ -376,7 +376,7 @@ diff --git a/1992/buzzard.2/buzzard.2.README.html b/1992/buzzard.2/buzzard.2.README.html index 7941da4a8..604798dd5 100644 --- a/1992/buzzard.2/buzzard.2.README.html +++ b/1992/buzzard.2/buzzard.2.README.html @@ -376,7 +376,7 @@ diff --git a/1992/buzzard.2/buzzard.2.design.html b/1992/buzzard.2/buzzard.2.design.html index 4931e0bf5..599f281fa 100644 --- a/1992/buzzard.2/buzzard.2.design.html +++ b/1992/buzzard.2/buzzard.2.design.html @@ -376,7 +376,7 @@ diff --git a/1993/ejb/hanoi.html b/1993/ejb/hanoi.html index 80e135ca1..202c789c2 100644 --- a/1993/ejb/hanoi.html +++ b/1993/ejb/hanoi.html @@ -376,7 +376,7 @@ diff --git a/1993/ejb/patience.html b/1993/ejb/patience.html index a42ee270a..462239e60 100644 --- a/1993/ejb/patience.html +++ b/1993/ejb/patience.html @@ -376,7 +376,7 @@ diff --git a/1993/rince/design.html b/1993/rince/design.html index 4c0c31655..3dc08e8de 100644 --- a/1993/rince/design.html +++ b/1993/rince/design.html @@ -376,7 +376,7 @@ diff --git a/1994/shapiro/shapiro.html b/1994/shapiro/shapiro.html index c58781d32..b56008b9f 100644 --- a/1994/shapiro/shapiro.html +++ b/1994/shapiro/shapiro.html @@ -376,7 +376,7 @@ diff --git a/1995/leo/secret.html b/1995/leo/secret.html index 67f30fbc8..1e60bf227 100644 --- a/1995/leo/secret.html +++ b/1995/leo/secret.html @@ -376,7 +376,7 @@ diff --git a/1998/dorssel/dorssel.html b/1998/dorssel/dorssel.html index be33d80ab..64d0e1995 100644 --- a/1998/dorssel/dorssel.html +++ b/1998/dorssel/dorssel.html @@ -376,7 +376,7 @@ diff --git a/1998/schweikh1/macos.html b/1998/schweikh1/macos.html index 8ad7fd6e6..5d62bfc6c 100644 --- a/1998/schweikh1/macos.html +++ b/1998/schweikh1/macos.html @@ -376,7 +376,7 @@ diff --git a/2004/gavin/gavin.html b/2004/gavin/gavin.html index 9f8d8736d..26f49cba7 100644 --- a/2004/gavin/gavin.html +++ b/2004/gavin/gavin.html @@ -376,7 +376,7 @@ diff --git a/2012/deckmyn/deckmyn.html b/2012/deckmyn/deckmyn.html index cb66b6ee5..f477ddb10 100644 --- a/2012/deckmyn/deckmyn.html +++ b/2012/deckmyn/deckmyn.html @@ -376,7 +376,7 @@ diff --git a/2012/hou/hint.html b/2012/hou/hint.html index 37f9e782e..994339d3e 100644 --- a/2012/hou/hint.html +++ b/2012/hou/hint.html @@ -376,7 +376,7 @@ diff --git a/2012/tromp/how.html b/2012/tromp/how.html index 886556d31..13fffd3e9 100644 --- a/2012/tromp/how.html +++ b/2012/tromp/how.html @@ -376,7 +376,7 @@ diff --git a/2013/hou/doc/example.html b/2013/hou/doc/example.html index 6a801fe98..0f1063adf 100644 --- a/2013/hou/doc/example.html +++ b/2013/hou/doc/example.html @@ -376,7 +376,7 @@ diff --git a/2014/endoh1/quine-qr.html b/2014/endoh1/quine-qr.html index 840d6d8c3..075247b3a 100644 --- a/2014/endoh1/quine-qr.html +++ b/2014/endoh1/quine-qr.html @@ -376,7 +376,7 @@ diff --git a/2015/burton/obfuscation.html b/2015/burton/obfuscation.html index aa916e554..9df592a4a 100644 --- a/2015/burton/obfuscation.html +++ b/2015/burton/obfuscation.html @@ -376,7 +376,7 @@ diff --git a/2015/burton/road.to.obscurity.html b/2015/burton/road.to.obscurity.html index cfc97dadf..ab73c2f4c 100644 --- a/2015/burton/road.to.obscurity.html +++ b/2015/burton/road.to.obscurity.html @@ -376,7 +376,7 @@ diff --git a/2018/burton2/discrepancies.html b/2018/burton2/discrepancies.html index 8ce0ef6eb..49b703105 100644 --- a/2018/burton2/discrepancies.html +++ b/2018/burton2/discrepancies.html @@ -376,7 +376,7 @@ diff --git a/2018/ferguson/FILES.html b/2018/ferguson/FILES.html index 80d13adb9..228d1a982 100644 --- a/2018/ferguson/FILES.html +++ b/2018/ferguson/FILES.html @@ -376,7 +376,7 @@ diff --git a/2018/ferguson/rpm.html b/2018/ferguson/rpm.html index ec3ac689a..cfb4dadbe 100644 --- a/2018/ferguson/rpm.html +++ b/2018/ferguson/rpm.html @@ -376,7 +376,7 @@ diff --git a/2020/endoh2/obfuscation/index.html b/2020/endoh2/obfuscation/index.html index 72b9c84ed..269448ff8 100644 --- a/2020/endoh2/obfuscation/index.html +++ b/2020/endoh2/obfuscation/index.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/COMPILING.html b/2020/ferguson1/COMPILING.html index a8e8e9929..f083d77e0 100644 --- a/2020/ferguson1/COMPILING.html +++ b/2020/ferguson1/COMPILING.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/HACKING.html b/2020/ferguson1/HACKING.html index 3a32bf729..9d765480b 100644 --- a/2020/ferguson1/HACKING.html +++ b/2020/ferguson1/HACKING.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/bugs.html b/2020/ferguson1/bugs.html index 9b11b9f0f..2f4ad6d90 100644 --- a/2020/ferguson1/bugs.html +++ b/2020/ferguson1/bugs.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/cannibalism.log.html b/2020/ferguson1/cannibalism.log.html index 34865c1a7..3a6ad82b3 100644 --- a/2020/ferguson1/cannibalism.log.html +++ b/2020/ferguson1/cannibalism.log.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/chocolate-cake.html b/2020/ferguson1/chocolate-cake.html index 6da7e82f8..83fb32fcd 100644 --- a/2020/ferguson1/chocolate-cake.html +++ b/2020/ferguson1/chocolate-cake.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/crazy.log.html b/2020/ferguson1/crazy.log.html index f1ee4c563..4e6ead31b 100644 --- a/2020/ferguson1/crazy.log.html +++ b/2020/ferguson1/crazy.log.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/gameplay.html b/2020/ferguson1/gameplay.html index 2ca4b1f99..fc86451dd 100644 --- a/2020/ferguson1/gameplay.html +++ b/2020/ferguson1/gameplay.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/obfuscation.html b/2020/ferguson1/obfuscation.html index 52f4db7b7..063252695 100644 --- a/2020/ferguson1/obfuscation.html +++ b/2020/ferguson1/obfuscation.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/terminals.html b/2020/ferguson1/terminals.html index 4fbb5fd91..9489c0435 100644 --- a/2020/ferguson1/terminals.html +++ b/2020/ferguson1/terminals.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson1/troubleshooting.html b/2020/ferguson1/troubleshooting.html index b79a4a6b7..8e948293a 100644 --- a/2020/ferguson1/troubleshooting.html +++ b/2020/ferguson1/troubleshooting.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson2/obfuscation.html b/2020/ferguson2/obfuscation.html index fd076d11d..08e45113b 100644 --- a/2020/ferguson2/obfuscation.html +++ b/2020/ferguson2/obfuscation.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson2/recode.html b/2020/ferguson2/recode.html index 096171e7c..ba60ba904 100644 --- a/2020/ferguson2/recode.html +++ b/2020/ferguson2/recode.html @@ -376,7 +376,7 @@ diff --git a/2020/ferguson2/testing-procedure.html b/2020/ferguson2/testing-procedure.html index 4145b5ff8..2301a7d8c 100644 --- a/2020/ferguson2/testing-procedure.html +++ b/2020/ferguson2/testing-procedure.html @@ -376,7 +376,7 @@ diff --git a/bin/README.md b/bin/README.md index d256020d4..c2b5e66de 100644 --- a/bin/README.md +++ b/bin/README.md @@ -674,6 +674,27 @@ The [md2html.cfg](index.html#md2html_cfg) configuration file is used by [md2html.sh](%%REPO_URL%%/bin/md2html.sh) to drive the generation process. +
+### [othermd2html.sh](%%REPO_URL%%/bin/othermd2html.sh) +
+ +Convert a non-README.md file in an entry to HTML. + +Usage: + +``` + bin/othermd2html.sh YYYY/dir/pathto.md +``` + +For example: + +``` + bin/othermd2html.sh -v 1 2020/ferguson1/chocolate-cake.md +``` + +The [othermd2html.sh](#othermd2html) tool is used by [gen-other-html.sh](#gen-other-html). + +
### [output-index-author.sh](%%REPO_URL%%/bin/output-index-author.sh)
diff --git a/bin/gen-other-html.sh b/bin/gen-other-html.sh index 3ccecc749..7e666a2ca 100755 --- a/bin/gen-other-html.sh +++ b/bin/gen-other-html.sh @@ -86,7 +86,7 @@ shopt -s globstar # enable ** to match all files and zero or more directories an # set variables referenced in the usage message # -export VERSION="1.4.1 2024-08-18" +export VERSION="1.5 2024-08-27" NAME=$(basename "$0") export NAME export V_FLAG=0 @@ -104,8 +104,6 @@ fi export TOPDIR export DOCROOT_SLASH="../../" export TAGLINE="bin/$NAME" -export MD2HTML_SH="bin/md2html.sh" -export PANDOC_WRAPPER="bin/pandoc-wrapper.sh" export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" # GitHub puts individual files under the "blob/master" sub-directory. export REPO_URL="$REPO_TOP_URL/blob/master" @@ -143,12 +141,12 @@ export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) NOTE: The '-t tagline' is passed as leading options on tool command lines. - -Q quick mode, do not run $MD2HTML_SH unless markdown is out of date (def: do) + -Q quick mode, do not run $OTHERMD2HTML unless markdown is out of date (def: do) -w site_url Base URL of the website (def: $SITE_URL) NOTE: The '-w site_url' is passed as leading options on tool command lines. -NOTE: Any '-D docroot/', '-t tagline', '-w site_url' are passed to 'md2html.sh' tool. +NOTE: Any '-D docroot/', '-t tagline', '-v level', '-w site_url' are passed to 'md2html.sh' tool. Exit codes: 0 all OK @@ -305,19 +303,19 @@ fi export BIN_DIR="bin" -# verify that the bin/md2html.sh tool is executable +# verify that the bin/othermd2html.sh tool is executable # -export MD2HTML_SH="$BIN_DIR/md2html.sh" -if [[ ! -e $MD2HTML_SH ]]; then - echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2 +export OTHERMD2HTML="$BIN_DIR/othermd2html.sh" +if [[ ! -e $OTHERMD2HTML ]]; then + echo "$0: ERROR: bin/othermd2html.sh does not exist: $OTHERMD2HTML" 1>&2 exit 5 fi -if [[ ! -f $MD2HTML_SH ]]; then - echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2 +if [[ ! -f $OTHERMD2HTML ]]; then + echo "$0: ERROR: bin/othermd2html.sh is not a regular file: $OTHERMD2HTML" 1>&2 exit 5 fi -if [[ ! -x $MD2HTML_SH ]]; then - echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2 +if [[ ! -x $OTHERMD2HTML ]]; then + echo "$0: ERROR: bin/othermd2html.sh is not an executable file: $OTHERMD2HTML" 1>&2 exit 5 fi @@ -347,6 +345,8 @@ fi # TOOL_OPTION+=("-t") TOOL_OPTION+=("$TAGLINE") +TOOL_OPTION+=("-v") +TOOL_OPTION+=("$V_FLAG") TOOL_OPTION+=("-w") TOOL_OPTION+=("$SITE_URL") @@ -363,7 +363,6 @@ if [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 - echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2 echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 @@ -378,7 +377,7 @@ if [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 - echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2 + echo "$0: debug[3]: OTHERMD2HTML=$OTHERMD2HTML" 1>&2 echo "$0: debug[3]: TOP_FILE=$TOP_FILE" 1>&2 fi @@ -396,7 +395,7 @@ fi # create a temporary exit code # # It is a pain to set the EXIT_CODE deep inside a loop, so we write the EXIT_CODE into a file -# and read the file (setting EXIT_CODE again) after the loop. A hack, but good enough for our needs. +# and read the file (setting EXIT_CODE again) after the loop. A hack, but good enough for o ur needs. # export TMP_EXIT_CODE=".tmp.$NAME.EXIT_CODE.$$.tmp" if [[ $V_FLAG -ge 3 ]]; then @@ -435,18 +434,21 @@ for YYYY in $(< "$TOP_FILE"); do if [[ ! -e $YYYY ]]; then echo "$0: ERROR: YYYY does not exist: $YYYY" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -d $YYYY ]]; then echo "$0: ERROR: YYYY is not a directory: $YYYY" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -r $YYYY ]]; then echo "$0: ERROR: YYYY is not an readable directory: $YYYY" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -457,24 +459,28 @@ for YYYY in $(< "$TOP_FILE"); do if [[ ! -e $YEAR_FILE ]]; then echo "$0: ERROR: YYYY/.year does not exist: $YEAR_FILE" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -f $YEAR_FILE ]]; then echo "$0: ERROR: YYYY/.year is not a regular file: $YEAR_FILE" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -r $YEAR_FILE ]]; then echo "$0: ERROR: YYYY/.year is not an readable file: $YEAR_FILE" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -s $YEAR_FILE ]]; then echo "$0: ERROR: YYYY/.year is not a non-empty readable file: $YEAR_FILE" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -495,12 +501,14 @@ for YYYY in $(< "$TOP_FILE"); do if [[ ! -d $YYYY_DIR ]]; then echo "$0: ERROR: YYYY_DIR is not a directory: $YYYY_DIR" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -w $YYYY_DIR ]]; then echo "$0: ERROR: YYYY_DIR is not a writable directory: $YYYY_DIR" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -508,6 +516,7 @@ for YYYY in $(< "$TOP_FILE"); do if [[ -z $YEAR_DIR ]]; then echo "$0: ERROR: YYYY_DIR not in YYYY/dir form: $YYYY_DIR" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -515,12 +524,14 @@ for YYYY in $(< "$TOP_FILE"); do if [[ -z $ENTRY_DIR ]]; then echo "$0: ERROR: YYYY_DIR not in $YEAR_DIR/dir form: $YYYY_DIR" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ $ENTRY_DIR = */* ]]; then echo "$0: ERROR: YYYY_DIR: $YYYY_DIR dir contains a /: $ENTRY_DIR" 1>&2 EXIT_CODE="6" # exit 6 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -530,18 +541,21 @@ for YYYY in $(< "$TOP_FILE"); do if [[ ! -e $YYYY_DIR ]]; then echo "$0: ERROR: YYYY_DIR does not exist: $YYYY_DIR" 1>&2 EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -d $YYYY_DIR ]]; then echo "$0: ERROR: YYYY_DIR is not a directory: $YYYY_DIR" 1>&2 EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi if [[ ! -w $YYYY_DIR ]]; then echo "$0: ERROR: YYYY_DIR is not an writable directory: $YYYY_DIR" 1>&2 EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -552,6 +566,7 @@ for YYYY in $(< "$TOP_FILE"); do if [[ ! -s $DOT_PATH ]]; then echo "$0: ERROR: not a non-empty file: $DOT_PATH" 1>&2 EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -559,43 +574,26 @@ for YYYY in $(< "$TOP_FILE"); do if [[ $YYYY_DIR != "$DOT_PATH_CONTENT" ]]; then echo "$0: ERROR: arg: $YYYY_DIR does not match $DOT_PATH contents: $DOT_PATH_CONTENT" 1>&2 EXIT_CODE="7" # exit 7 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - export ENTRY_JSON="$YYYY_DIR/.entry.json" - if [[ ! -e $ENTRY_JSON ]]; then - echo "$0: ERROR: .entry.json does not exist: $ENTRY_JSON" 1>&2 - EXIT_CODE="7" # exit 7 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - if [[ ! -f $ENTRY_JSON ]]; then - echo "$0: ERROR: .entry.json is not a file: $ENTRY_JSON" 1>&2 - EXIT_CODE="7" # exit 7 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - if [[ ! -r $ENTRY_JSON ]]; then - echo "$0: ERROR: .entry.json is not a readable file: $ENTRY_JSON" 1>&2 - EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi - # process all markdown files that are NOT README.md for this entry + # process all markdown files that are NOT README.md (nor remarks.md) for this entry # - find "$YYYY_DIR" -type f -name '*.md' ! -name README.md | while read -r MD_FILE; do + find "$YYYY_DIR" -type f -name '*.md' ! -name README.md ! -name remarks.md | while read -r MD_FILE; do - # basename of MD_FILE + # determine HTML filename # - MD_BASENAME=$(basename "$MD_FILE") - export MD_BASENAME - - # determine the HTML file - # - export HTML_FILE=${MD_FILE//\.md/.html} - HTML_BASENAME=$(basename "$HTML_FILE") - export HTML_BASENAME + if [[ $MD_FILE =~ (.*)\.md$ ]]; then + export HTML_FILE="${BASH_REMATCH[1]}.html" + else + echo "$0: ERROR: markdown file does not end in .md: $MD_FILE" 1>&2 + EXIT_CODE="7" # exit 7 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi # case: -Q (quick mode) # @@ -617,79 +615,22 @@ for YYYY in $(< "$TOP_FILE"); do fi fi - # determine the description arg - # - export DESCRIPTION="DESCRIPTION=$MD_BASENAME for $YYYY_DIR" - - # determine the keywords arg - # - KEYWORDS="KEYWORDS=IOCCC, $YYYY_DIR, $MD_BASENAME" - export KEYWORDS - - # determine the HEADER_2 arg - # - export HEADER_2="HEADER_2=$HTML_BASENAME for $YYYY_DIR" - - # determine the number of levels in path of MD_FILE from topdir - # - export NO_SLASH=${MD_FILE///} - LEVEL_CNT=$((${#MD_FILE} - ${#NO_SLASH})) - export LEVEL_CNT - if [[ $LEVEL_CNT -lt 2 ]]; then - echo "$0: ERROR: expected at least 2 level from topdir: $TOPDIR to MD_FILE: $MD_FILE, found $LEVEL_CNT" 1>&2 - echo 12 > "$TMP_EXIT_CODE" # exit 12 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - ((SUB_LEVEL_CNT=LEVEL_CNT-2)) - export SUB_LEVEL_CNT - - # determine -D option string and path to entry index.html file - # - export D_OPTION="../../" - export INDEX_PATH="index.html" - for ((n=0; n&2 + echo "$0: debug[3]: about to run: $OTHERMD2HTML ${TOOL_OPTION[*]} -- $MD_FILE" 1>&2 fi - "$MD2HTML_SH" "${TOOL_OPTION[@]}" \ - -U "$SITE_URL/$HTML_FILE" \ - -s "$DESCRIPTION" -s "$KEYWORDS" -s "$HEADER_2" \ - -s "REPO_URL=$REPO_URL" -s "SITE_URL=$SITE_URL" \ - -s "$UP_LINK" -s "$UP_TEXT" -D "$D_OPTION" -m "$MD_FILE" -v "$V_FLAG" -- \ - "$MD_FILE" "$HTML_FILE" + "$OTHERMD2HTML" "${TOOL_OPTION[@]}" -- "$MD_FILE" status="$?" if [[ $status -ne 0 ]]; then - echo "$0: ERROR: tool: $MD2HTML_SH ${TOOL_OPTION[*]}" \ - "-U $SITE_URL/$HTML_FILE" \ - "-s $DESCRIPTION -s $KEYWORDS -s $HEADER_2" \ - "-s REPO_URL=$REPO_URL -s SITE_URL=$SITE_URL" \ - "-s $UP_LINK -s $UP_TEXT -D $D_OPTION -m $MD_FILE -v $V_FLAG --" \ - "$MD_FILE $HTML_FILE failed, error: $status" 1>&2 - echo 1 > "$TMP_EXIT_CODE" # exit 1 + echo "$0: ERROR: tool: $OTHERMD2HTML ${TOOL_OPTION[*]} -- $MD_FILE" \ + "failed, error: $status" 1>&2 + EXIT_CODE="1" # exit 1 + echo "$EXIT_CODE" > "$TMP_EXIT_CODE" echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 continue fi @@ -707,20 +648,16 @@ for YYYY in $(< "$TOP_FILE"); do # report disabled by -n # elif [[ $V_FLAG -ge 5 ]]; then - echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]}" \ - "-s $DESCRIPTION -s $KEYWORDS -s $HEADER_2" \ - "-s $UP_LINK -s $UP_TEXT -D $D_OPTION -m $MD_FILE -v $V_FLAG --" \ + echo "$0: debug[5]: because of -n, did not run: $OTHERMD2HTML ${TOOL_OPTION[*]} --" \ "$MD_FILE $HTML_FILE" 1>&2 fi done done done -if [[ -z $NOOP ]]; then - EXIT_CODE=$(< "$TMP_EXIT_CODE") - if [[ -z $EXIT_CODE ]]; then - echo "$0: ERROR: temporary exit file has no contents: $TMP_EXIT_CODE" 1>&2 - exit 13 - fi +EXIT_CODE=$(< "$TMP_EXIT_CODE") +if [[ -z $EXIT_CODE ]]; then + echo "$0: ERROR: temporary exit file has no contents: $TMP_EXIT_CODE" 1>&2 + exit 13 fi diff --git a/bin/index.html b/bin/index.html index 5a147e0c3..8303fcce7 100644 --- a/bin/index.html +++ b/bin/index.html @@ -785,6 +785,15 @@ markdown files (permanent markdown files or temporarily generated markdown files) and HTML fragments from the inc directory.

The md2html.cfg configuration file is used by md2html.sh to drive the generation process.

+ +

Convert a non-README.md file in an entry to HTML.

+

Usage:

+
    bin/othermd2html.sh YYYY/dir/pathto.md
+

For example:

+
    bin/othermd2html.sh -v 1 2020/ferguson1/chocolate-cake.md
+

The othermd2html.sh tool is used by gen-other-html.sh.

diff --git a/bin/othermd2html.sh b/bin/othermd2html.sh new file mode 100755 index 000000000..35a4a1efe --- /dev/null +++ b/bin/othermd2html.sh @@ -0,0 +1,603 @@ +#!/usr/bin/env bash +# +# othermd2html.sh - convert a non-README.md file an entry to HTML +# +# We will convert a markdown under an entry directory, that +# is NOT README.md into a HTML file. +# +# Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved. +# +# Permission to use, copy, modify, and distribute this software and +# its documentation for any purpose and without fee is hereby granted, +# provided that the above copyright, this permission notice and text +# this comment, and the disclaimer below appear in all of the following: +# +# supporting documentation +# source copies +# source works derived from this source +# binaries derived from this source or from derived source +# +# LANDON CURT NOLL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO +# EVENT SHALL LANDON CURT NOLL BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# chongo (Landon Curt Noll, http://www.isthe.com/chongo/index.html) /\oo/\ +# +# Share and enjoy! :-) + + +# firewall - run only with a bash that is version 5.1.8 or later +# +# The "/usr/bin/env bash" command must result in using a bash that +# is version 5.1.8 or later. +# +# We could relax this version and insist on version 4.2 or later. Versions +# of bash between 4.2 and 5.1.7 might work. However, to be safe, we will require +# bash version 5.1.8 or later. +# +# WHY 5.1.8 and not 4.2? This safely is done because macOS Homebrew bash we +# often use is "version 5.2.26(1)-release" or later, and the RHEL Linux bash we +# use often use is "version 5.1.8(1)-release" or later. These versions are what +# we initially tested. We recommend you either upgrade bash or install a newer +# version of bash and adjust your $PATH so that "/usr/bin/env bash" finds a bash +# that is version 5.1.8 or later. +# +# NOTE: The macOS shipped, as of 2024 March 15, a version of bash is something like +# bash "version 3.2.57(1)-release". That macOS shipped version of bash +# will NOT work. For users of macOS we recommend you install Homebrew, +# (see https://brew.sh), and then run "brew install bash" which will +# typically install it into /opt/homebrew/bin/bash, and then arrange your $PATH +# so that "/usr/bin/env bash" finds "/opt/homebrew/bin" (or whatever the +# Homebrew bash is). +# +# NOTE: And while MacPorts might work, we noticed a number of subtle differences +# with some of their ported tools to suggest you might be better off +# with installing Homebrew (see https://brew.sh). No disrespect is intended +# to the MacPorts team as they do a commendable job. Nevertheless we ran +# into enough differences with MacPorts environments to suggest you +# might find a better experience with this tool under Homebrew instead. +# +if [[ -z ${BASH_VERSINFO[0]} || + ${BASH_VERSINFO[0]} -lt 5 || + ${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -lt 1 || + ${BASH_VERSINFO[0]} -eq 5 && ${BASH_VERSINFO[1]} -eq 1 && ${BASH_VERSINFO[2]} -lt 8 ]]; then + echo "$0: ERROR: bash version needs to be >= 5.1.8: $BASH_VERSION" 1>&2 + echo "$0: Warning: bash version >= 4.2 might work but 5.1.8 was the minimum we tested" 1>&2 + echo "$0: Notice: For macOS users: install Homebrew (see https://brew.sh), then run" \ + ""brew install bash" and then modify your \$PATH so that \"#!/usr/bin/env bash\"" \ + "finds the Homebrew installed (usually /opt/homebrew/bin/bash) version of bash" 1>&2 + exit 4 +fi + + +# setup bash file matching +# +# We must declare arrays with -ag or -Ag, and we need loops to "export" modified variables. +# This requires a bash with a version 4.2 or later. See the larger comment above about bash versions. +# +shopt -s nullglob # enable expanded to nothing rather than remaining unexpanded +shopt -u failglob # disable error message if no matches are found +shopt -u dotglob # disable matching files starting with . +shopt -u nocaseglob # disable strict case matching +shopt -u extglob # enable extended globbing patterns +shopt -s globstar # enable ** to match all files and zero or more directories and subdirectories + + +# set variables referenced in the usage message +# +export VERSION="1.0 2024-08-27" +NAME=$(basename "$0") +export NAME +export V_FLAG=0 +GIT_TOOL=$(type -P git) +export GIT_TOOL +if [[ -z "$GIT_TOOL" ]]; then + echo "$0: FATAL: git tool is not installed or not in \$PATH" 1>&2 + exit 5 +fi +"$GIT_TOOL" rev-parse --is-inside-work-tree >/dev/null 2>&1 +status="$?" +if [[ $status -eq 0 ]]; then + TOPDIR=$("$GIT_TOOL" rev-parse --show-toplevel) +fi +export TOPDIR +export DOCROOT_SLASH="../../" +export TAGLINE="bin/$NAME" +export REPO_TOP_URL="https://github.com/ioccc-src/temp-test-ioccc" +# GitHub puts individual files under the "blob/master" sub-directory. +export REPO_URL="$REPO_TOP_URL/blob/master" +export SITE_URL="https://ioccc-src.github.io/temp-test-ioccc" +# +export NOOP= +export DO_NOT_PROCESS= +export EXIT_CODE="0" + + +# clear options we will add to tools +# +unset TOOL_OPTION +declare -ag TOOL_OPTION + + +# usage +# +export USAGE="usage: $0 [-h] [-v level] [-V] [-d topdir] [-D docroot/] [-n] [-N] + [-t tagline] [-w site_url] [-e string ..] [-E exitcode] + YYYY/dir/pathto.md + + -h print help message and exit + -v level set verbosity level (def level: 0) + -V print version string and exit + + -d topdir set topdir (def: $TOPDIR) + NOTE: The '-d topdir' is passed as leading options on tool command lines. + -D docroot/ set the document root path followed by slash (def: $DOCROOT_SLASH) + NOTE: The '-D docroot/' is passed as leading options on tool command lines. + NOTE: 'docroot' must end in a slash + + -n go thru the actions, but do not update any files (def: do the action) + NOTE: -n is passed to tool + -N do not process anything, just parse arguments (def: process something) + + -t tagline string to write about the tool that formed the markdown content (def: $TAGLINE) + NOTE: 'tagline' may be enclosed within, but may NOT contain an internal single-quote, or double-quote. + + -w site_url Base URL of the website (def: $SITE_URL) + NOTE: The '-w site_url' is passed as leading options on tool command lines. + + YYYY/dir/pathto.md path from topdir to the non-README.md markdown + +NOTE: Any '-D docroot/', '-t tagline', '-v level', '-w site_url' are passed to 'md2html.sh' tool. + +Exit codes: + 0 all OK + 1 some internal tool exited non-zero + 2 -h and help string printed or -V and version string printed + 3 command line error + 4 bash version is too old + 5 some internal tool is not found or not an executable file + 6 problems found with or in the topdir or topdir/YYYY directory + 7 problems found with or in the entry topdir/YYYY/dir directory + >= 10 internal error + +$NAME version: $VERSION" + + +# parse command line +# +while getopts :hv:Vd:D:nNt:w: flag; do + case "$flag" in + h) echo "$USAGE" 1>&2 + exit 2 + ;; + v) V_FLAG="$OPTARG" + ;; + V) echo "$VERSION" + exit 2 + ;; + d) TOPDIR="$OPTARG" + TOOL_OPTION+=("-d") + TOOL_OPTION+=("$TOPDIR") + ;; + D) # parse -D docroot/ + case "$OPTARG" in + */) ;; + *) echo "$0: ERROR: in -D docroot/, the docroot must end in /" 1>&2 + echo 1>&2 + print_usage 1>&2 + exit 3 + ;; + esac + DOCROOT_SLASH="$OPTARG" + TOOL_OPTION+=("-D") + TOOL_OPTION+=("$DOCROOT_SLASH") + ;; + n) NOOP="-n" + ;; + N) DO_NOT_PROCESS="-N" + ;; + t) # parse -t tagline + case "$OPTARG" in + *"'"*) + echo "$0: ERROR: in -t tagline, the tagline may not contain a single-quote character: $OPTARG" 1>&2 + echo 1>&2 + print_usage 1>&2 + exit 3 + ;; + *'"'*) + echo "$0: ERROR: in -t tagline, the tagline may not contain a double-quote character: $OPTARG" 1>&2 + echo 1>&2 + print_usage 1>&2 + exit 3 + ;; + *) ;; + esac + TAGLINE="$OPTARG" + TOOL_OPTION+=("-t") + TOOL_OPTION+=("$TAGLINE") + ;; + w) SITE_URL="$OPTARG" + TOOL_OPTION+=("-w") + TOOL_OPTION+=("$SITE_URL") + ;; + \?) echo "$0: ERROR: invalid option: -$OPTARG" 1>&2 + echo 1>&2 + print_usage 1>&2 + exit 3 + ;; + :) echo "$0: ERROR: option -$OPTARG requires an argument" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 + ;; + *) echo "$0: ERROR: unexpected value from getopts: $flag" 1>&2 + echo 1>&2 + echo "$USAGE" 1>&2 + exit 3 + ;; + esac +done +# +# remove the options +# +shift $(( OPTIND - 1 )); +# +# verify arg count and parse args +# +if [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: file argument count: $#" 1>&2 +fi +# +if [[ $# -ne 1 ]]; then + echo "$0: ERROR: expected 1 arg, found: $#" 1>&2 + exit 3 +fi +# +export ENTRY_PATH="$1" + + +# always add the '-v level' option, unless level is empty, to the set of options passed to the md2html.sh tool +# +if [[ -n $V_FLAG ]]; then + TOOL_OPTION+=("-v") + TOOL_OPTION+=("$V_FLAG") +fi + + +# always add the '-t tagline' option, unless tagline is empty, to the set of options passed to the md2html.sh tool +# +if [[ -n $TAGLINE ]]; then + TOOL_OPTION+=("-t") + TOOL_OPTION+=("$TAGLINE") +fi + + +# verify that we have a topdir directory +# +REPO_NAME=$(basename "$REPO_TOP_URL") +export REPO_NAME +if [[ -z $TOPDIR ]]; then + echo "$0: ERROR: cannot find top of git repo directory" 1>&2 + echo "$0: Notice: if needed: $GIT_TOOL clone $REPO_TOP_URL; cd $REPO_NAME" 1>&2 + exit 6 +fi +if [[ ! -e $TOPDIR ]]; then + echo "$0: ERROR: TOPDIR does not exist: $TOPDIR" 1>&2 + echo "$0: Notice: if needed: $GIT_TOOL clone $REPO_TOP_URL; cd $REPO_NAME" 1>&2 + exit 6 +fi +if [[ ! -d $TOPDIR ]]; then + echo "$0: ERROR: TOPDIR is not a directory: $TOPDIR" 1>&2 + echo "$0: Notice: if needed: $GIT_TOOL clone $REPO_TOP_URL; cd $REPO_NAME" 1>&2 + exit 6 +fi + + +# cd to topdir +# +if [[ ! -e $TOPDIR ]]; then + echo "$0: ERROR: cannot cd to non-existent path: $TOPDIR" 1>&2 + exit 6 +fi +if [[ ! -d $TOPDIR ]]; then + echo "$0: ERROR: cannot cd to a non-directory: $TOPDIR" 1>&2 + exit 6 +fi +export CD_FAILED +if [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: about to: cd $TOPDIR" 1>&2 +fi +cd "$TOPDIR" || CD_FAILED="true" +if [[ -n $CD_FAILED ]]; then + echo "$0: ERROR: cd $TOPDIR failed" 1>&2 + exit 6 +fi +if [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: now in directory: $(/bin/pwd)" 1>&2 +fi + + +# verify that we have a bin subdirectory +# +export BIN_PATH="$TOPDIR/bin" +if [[ ! -d $BIN_PATH ]]; then + echo "$0: ERROR: bin is not a directory under topdir: $BIN_PATH" 1>&2 + exit 6 +fi +export BIN_DIR="bin" + + +# verify that the bin/md2html.sh tool is executable +# +export MD2HTML_SH="$BIN_DIR/md2html.sh" +if [[ ! -e $MD2HTML_SH ]]; then + echo "$0: ERROR: bin/md2html.sh does not exist: $MD2HTML_SH" 1>&2 + exit 5 +fi +if [[ ! -f $MD2HTML_SH ]]; then + echo "$0: ERROR: bin/md2html.sh is not a regular file: $MD2HTML_SH" 1>&2 + exit 5 +fi +if [[ ! -x $MD2HTML_SH ]]; then + echo "$0: ERROR: bin/md2html.sh is not an executable file: $MD2HTML_SH" 1>&2 + exit 5 +fi + + +# verify that ENTRY_PATH is a entry directory +# +export YEAR_DIR=${ENTRY_PATH%%/*} +if [[ -z $YEAR_DIR ]]; then + echo "$0: ERROR: arg not in YYYY/dir form: $ENTRY_PATH" 1>&2 + exit 3 +fi +export DIR_FILE_PATH=${ENTRY_PATH#*/} +export ARG_1=${DIR_FILE_PATH%%/*} +if [[ -z $ARG_1 ]]; then + echo "$0: ERROR: arg: $ENTRY_PATH not in $YEAR_DIR/dir form: $ENTRY_PATH" 1>&2 + exit 3 +fi +if [[ $ARG_1 = */* ]]; then + echo "$0: ERROR: dir from arg: $ENTRY_PATH contains a /: $ARG_1" 1>&2 + exit 3 +fi +if [[ ! -d $YEAR_DIR ]]; then + echo "$0: ERROR: YYYY from arg: $ENTRY_PATH is not a directory: $YEAR_DIR" 1>&2 + exit 3 +fi +export ENTRY_ID="${YEAR_DIR}_${ARG_1}" +export DOT_YEAR="$YEAR_DIR/.year" +if [[ ! -s $DOT_YEAR ]]; then + echo "$0: ERROR: not a non-empty file: $DOT_YEAR" 1>&2 + exit 6 +fi +# Now that we have moved to topdir, form and verify YYYY_DIR is a writable directory +export YYYY_DIR="$YEAR_DIR/$ARG_1" +if [[ ! -e $YYYY_DIR ]]; then + echo "$0: ERROR: YYYY/dir from arg: $ENTRY_PATH does not exist: $YYYY_DIR" 1>&2 + exit 7 +fi +if [[ ! -d $YYYY_DIR ]]; then + echo "$0: ERROR: YYYY/dir from arg: $ENTRY_PATH is not a directory: $YYYY_DIR" 1>&2 + exit 7 +fi +if [[ ! -w $YYYY_DIR ]]; then + echo "$0: ERROR: YYYY/dir from arg: $ENTRY_PATH is not a writable directory: $YYYY_DIR" 1>&2 + exit 7 +fi + + +# verify that the markdown file is readable +# +export MD_FILE="$ENTRY_PATH" +if [[ ! -e $MD_FILE ]]; then + echo "$0: ERROR: markdown file does not exist: $MD_FILE" 1>&2 + exit 7 +fi +if [[ ! -f $MD_FILE ]]; then + echo "$0: ERROR: markdown file is not a file: $MD_FILE" 1>&2 + exit 7 +fi +if [[ ! -r $MD_FILE ]]; then + echo "$0: ERROR: markdown file is not a readable file: $MD_FILE" 1>&2 + exit 7 +fi +if [[ ! -s $MD_FILE ]]; then + echo "$0: ERROR: markdown file is not a non-empty readable file: $MD_FILE" 1>&2 + exit 7 +fi +if [[ $MD_FILE =~ (.*)\.md$ ]]; then + export HTML_FILE="${BASH_REMATCH[1]}.html" +else + echo "$0: ERROR: markdown file does not end in .md: $MD_FILE" 1>&2 + exit 7 +fi + + +# basename of MD_FILE +# +MD_BASENAME=$(basename "$MD_FILE") +export MD_BASENAME + + +# determine the HTML file +# +HTML_BASENAME=$(basename "$HTML_FILE") +export HTML_BASENAME + + +# verify that the directory for the HTML file is writable +# +HTML_DIR=$(dirname "$HTML_FILE") +if [[ ! -d $HTML_DIR ]]; then + echo "$0: ERROR: HTML_DIR is not a directory: $HTML_DIR" 1>&2 + exit 7 +fi +if [[ ! -w $HTML_DIR ]]; then + echo "$0: ERROR: HTML_DIR is not a writable directory: $HTML_DIR" 1>&2 + exit 7 +fi + + +# always add the '-U URL' for the entry's index.html file +# +TOOL_OPTION+=("-U") +TOOL_OPTION+=("$SITE_URL/$HTML_FILE") + + +# determine the description arg +# +export DESCRIPTION="DESCRIPTION=$MD_BASENAME for $YYYY_DIR" + + +# determine the keywords arg +# +KEYWORDS="KEYWORDS=IOCCC, $YYYY_DIR, $MD_BASENAME" +export KEYWORDS + + +# determine the HEADER_2 arg +# +export HEADER_2="HEADER_2=$HTML_BASENAME for $YYYY_DIR" + + +# determine the number of levels in path of MD_FILE from topdir +# +export NO_SLASH=${MD_FILE///} +LEVEL_CNT=$((${#MD_FILE} - ${#NO_SLASH})) +export LEVEL_CNT +if [[ $LEVEL_CNT -lt 2 ]]; then + echo "$0: ERROR: expected at least 2 level from topdir: $TOPDIR to MD_FILE: $MD_FILE, found $LEVEL_CNT" 1>&2 + exit 10 +fi +((SUB_LEVEL_CNT=LEVEL_CNT-2)) +export SUB_LEVEL_CNT + + +# determine -D option string and path to entry index.html file +# +export D_OPTION="../../" +export INDEX_PATH="index.html" +for ((n=0; n&2 + echo "$0: debug[3]: NAME=$NAME" 1>&2 + echo "$0: debug[3]: V_FLAG=$V_FLAG" 1>&2 + echo "$0: debug[3]: GIT_TOOL=$GIT_TOOL" 1>&2 + echo "$0: debug[3]: TOPDIR=$TOPDIR" 1>&2 + echo "$0: debug[3]: DOCROOT_SLASH=$DOCROOT_SLASH" 1>&2 + echo "$0: debug[3]: TAGLINE=$TAGLINE" 1>&2 + echo "$0: debug[3]: MD2HTML_SH=$MD2HTML_SH" 1>&2 + echo "$0: debug[3]: REPO_TOP_URL=$REPO_TOP_URL" 1>&2 + echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 + echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 + echo "$0: debug[3]: NOOP=$NOOP" 1>&2 + echo "$0: debug[3]: DO_NOT_PROCESS=$DO_NOT_PROCESS" 1>&2 + echo "$0: debug[3]: EXIT_CODE=$EXIT_CODE" 1>&2 + for index in "${!TOOL_OPTION[@]}"; do + echo "$0: debug[3]: TOOL_OPTION[$index]=${TOOL_OPTION[$index]}" 1>&2 + done + echo "$0: debug[3]: ENTRY_PATH=$ENTRY_PATH" 1>&2 + echo "$0: debug[3]: REPO_NAME=$REPO_NAME" 1>&2 + echo "$0: debug[3]: CD_FAILED=$CD_FAILED" 1>&2 + echo "$0: debug[3]: BIN_PATH=$BIN_PATH" 1>&2 + echo "$0: debug[3]: BIN_DIR=$BIN_DIR" 1>&2 + echo "$0: debug[3]: YEAR_DIR=$YEAR_DIR" 1>&2 + echo "$0: debug[3]: DIR_FILE_PATH=$DIR_FILE_PATH" 1>&2 + echo "$0: debug[3]: ARG_1=$ARG_1" 1>&2 + echo "$0: debug[3]: ENTRY_ID=$ENTRY_ID" 1>&2 + echo "$0: debug[3]: DOT_YEAR=$DOT_YEAR" 1>&2 + echo "$0: debug[3]: YYYY_DIR=$YYYY_DIR" 1>&2 + echo "$0: debug[3]: MD_FILE=$MD_FILE" 1>&2 + echo "$0: debug[3]: HTML_FILE=$HTML_FILE" 1>&2 + echo "$0: debug[3]: MD_BASENAME=$MD_BASENAME" 1>&2 + echo "$0: debug[3]: HTML_BASENAME=$HTML_BASENAME" 1>&2 + echo "$0: debug[3]: DESCRIPTION=$DESCRIPTION" 1>&2 + echo "$0: debug[3]: KEYWORDS=$KEYWORDS" 1>&2 + echo "$0: debug[3]: HEADER_2=$HEADER_2" 1>&2 + echo "$0: debug[3]: NO_SLASH=$NO_SLASH" 1>&2 + echo "$0: debug[3]: LEVEL_CNT=$LEVEL_CNT" 1>&2 + echo "$0: debug[3]: SUB_LEVEL_CNT=$SUB_LEVEL_CNT" 1>&2 + echo "$0: debug[3]: D_OPTION=$D_OPTION" 1>&2 + echo "$0: debug[3]: INDEX_PATH=$INDEX_PATH" 1>&2 + echo "$0: debug[3]: UP_LINK=$UP_LINK" 1>&2 + echo "$0: debug[3]: UP_TEXT=$UP_TEXT" 1>&2 +fi + + +# -N stops early before any processing is performed +# +if [[ -n $DO_NOT_PROCESS ]]; then + if [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: arguments parsed, -N given, exiting 0" 1>&2 + fi + exit 0 +fi + + +# run the MD2HTML_SH tool unless -n +# +if [[ -z $NOOP ]]; then + + # possibly update the HTML file + # + if [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: about to run: $MD2HTML_SH ${TOOL_OPTION[*]}" \ + "-s $DESCRIPTION -s $KEYWORDS -s $HEADER_2" \ + "-s REPO_URL=$REPO_URL -s SITE_URL=$SITE_URL" \ + "-s $UP_LINK -s $UP_TEXT -D $D_OPTION -m $MD_FILE -v $V_FLAG --" \ + "$MD_FILE $HTML_FILE" 1>&2 + fi + "$MD2HTML_SH" "${TOOL_OPTION[@]}" \ + -s "$DESCRIPTION" -s "$KEYWORDS" -s "$HEADER_2" \ + -s "REPO_URL=$REPO_URL" -s "SITE_URL=$SITE_URL" \ + -s "$UP_LINK" -s "$UP_TEXT" -D "$D_OPTION" -m "$MD_FILE" -v "$V_FLAG" -- \ + "$MD_FILE" "$HTML_FILE" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: ERROR: tool: $MD2HTML_SH ${TOOL_OPTION[*]}" \ + "-s $DESCRIPTION -s $KEYWORDS -s $HEADER_2" \ + "-s REPO_URL=$REPO_URL -s SITE_URL=$SITE_URL" \ + "-s $UP_LINK -s $UP_TEXT -D $D_OPTION -m $MD_FILE -v $V_FLAG --" \ + "$MD_FILE $HTML_FILE failed, error: $status" 1>&2 + exit 1 + fi + +# report disabled by -n +# +elif [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH ${TOOL_OPTION[*]}" \ + "-s $DESCRIPTION -s $KEYWORDS -s $HEADER_2" \ + "-s $UP_LINK -s $UP_TEXT -D $D_OPTION -m $MD_FILE -v $V_FLAG --" \ + "$MD_FILE $HTML_FILE" 1>&2 +fi + +# All Done!!! All Done!!! -- Jessica Noll, Age 2 +# +if [[ $EXIT_CODE -ne 0 ]]; then + echo "$0: Warning: about to exit non-zero: $EXIT_CODE" 1>&2 +fi +exit "$EXIT_CODE"