From b6a47803b28e68031548b0066b4df7ad4998c1f7 Mon Sep 17 00:00:00 2001 From: Cody Boone Ferguson <53008573+xexyl@users.noreply.github.com> Date: Sun, 5 May 2024 08:38:51 -0700 Subject: [PATCH] Improve bin/gen-top-html.sh It is now possible to specify select files to generate like the comment at the top suggested (but was not actually allowed). This is useful rarely but there is a case for it and that has been updated and it runs a fair bit quicker now. It is an error if no files specified are in the allowed set (the variable TOP_MD_SET). If at least one file specified is in TOP_MD_SET it will process that or those files but it will skip any that are not. This is to prevent trying to process other markdown files like README.md files without the proper script. --- Makefile | 2 +- bin/gen-top-html.sh | 248 +++++++++++++++++++++++++++++++------------- 2 files changed, 177 insertions(+), 73 deletions(-) diff --git a/Makefile b/Makefile index 37754f32a..68520fd45 100644 --- a/Makefile +++ b/Makefile @@ -406,7 +406,7 @@ gen_top_html: ${GEN_TOP_HTML} # Just kidding .. So Long, and Thanks for All the Fish :-) thanks: ${GEN_TOP_HTML} thanks-for-help.md @echo "Thanks for all the help ..." - @${GEN_TOP_HTML} + @${GEN_TOP_HTML} thanks-for-help @echo "... and thanks for all the fish :-)" # build entry HTML files from markdown other than README.md to index.html diff --git a/bin/gen-top-html.sh b/bin/gen-top-html.sh index c4432f1a4..f8cb18f88 100755 --- a/bin/gen-top-html.sh +++ b/bin/gen-top-html.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# gen-top-html.sh - generate select top level HTML files from markdown files +# gen-top-html.sh - generate all or select top level HTML files from markdown files # # We also generate the bin/index.html file from the bin/README.md file. # We also generate the inc/index.html file from the inc/README.md file. @@ -8,6 +8,12 @@ # # Copyright (c) 2024 by Landon Curt Noll. All Rights Reserved. # +# Cody Boone Ferguson made an improvement where one can specify the select top +# html files to generate to save time. Works just like the script without args +# but if any args are specified and the markdown file exists it will just +# generate that or those html files. This is to save time for some Makefile +# rules that only need update one file. +# # 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 @@ -130,6 +136,7 @@ TOP_MD_SET+=("next/guidelines") TOP_MD_SET+=("next/rules") TOP_MD_SET+=("nojs-menu") TOP_MD_SET+=("thanks-for-help") +declare -ag TOP_MD_SELECT_SET # export NOOP= export DO_NOT_PROCESS= @@ -283,7 +290,22 @@ shift $(( OPTIND - 1 )); if [[ $V_FLAG -ge 5 ]]; then echo "$0: debug[5]: file argument count: $#" 1>&2 fi -# + +# allow specifying specific files to generate +FILE_COUNT="$#" +while [[ $# -ne 0 ]]; do + for (( index=0; index < ${#TOP_MD_SET[@]}; index++ )); do + if [[ "${TOP_MD_SET[$index]}" = "$1" ]]; then + TOP_MD_SELECT_SET+=("$1") + fi + done + shift 1 +done +if [[ "$FILE_COUNT" != 0 && ${#TOP_MD_SELECT_SET[@]} = 0 ]]; then + echo "$0: ERROR: no select files specified are in allowed set" 1>&2 + exit 3 +fi + if [[ $# -ne 0 ]]; then echo "$0: ERROR: expected 0 args, found: $#" 1>&2 exit 3 @@ -414,6 +436,11 @@ if [[ $V_FLAG -ge 3 ]]; then echo "$0: debug[3]: PANDOC_WRAPPER=$PANDOC_WRAPPER" 1>&2 echo "$0: debug[3]: REPO_URL=$REPO_URL" 1>&2 echo "$0: debug[3]: SITE_URL=$SITE_URL" 1>&2 + if (( ${#TOP_MD_SELECT_SET[@]} )); then + for index in "${!TOP_MD_SELECT_SET[@]}"; do + echo "$0: debug[3]: TOP_MD_SELECT_SET[$index]=${TOP_MD_SELECT_SET[$index]}" 1>&2 + done + fi for index in "${!TOP_MD_SET[@]}"; do echo "$0: debug[3]: TOP_MD_SET[$index]=${TOP_MD_SET[$index]}" 1>&2 done @@ -442,80 +469,157 @@ fi # process the entire markdown set # -for name in "${TOP_MD_SET[@]}"; do +if (( ${#TOP_MD_SELECT_SET[@]} )); then + for name in "${TOP_MD_SELECT_SET[@]}"; do - # verify that the markdown file exists at the topdir - # - export MD_FILE="$name.md" - if [[ ! -e $MD_FILE ]]; then - echo "$0: Warning: markdown file does not exist: $MD_FILE" 1>&2 - EXIT_CODE=8 # exit 8 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - if [[ ! -f $MD_FILE ]]; then - echo "$0: Warning: markdown file is not a regular file: $MD_FILE" 1>&2 - EXIT_CODE=8 # exit 8 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - if [[ ! -r $MD_FILE ]]; then - echo "$0: Warning: markdown file is not a readable file: $MD_FILE" 1>&2 - EXIT_CODE=8 # exit 8 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - if [[ ! -s $MD_FILE ]]; then - echo "$0: Warning: markdown file is not a non-empty readable file: $MD_FILE" 1>&2 - EXIT_CODE=8 # exit 8 - echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - continue - fi - export HTML_FILE="$name.html" - # bin/README is a special case - if [[ $name == bin/README ]]; then - HTML_FILE="bin/index.html" - fi - # inc/README is a special case - if [[ $name == inc/README ]]; then - HTML_FILE="inc/index.html" - fi - # next/README is a special case - if [[ $name == next/README ]]; then - HTML_FILE="next/index.html" - fi - # archive/historic/README is a special case - if [[ $name == archive/historic/README ]]; then - HTML_FILE="archive/historic/index.html" - fi - - # use the md2html.sh tool to form the HTML file, unless -n - # - if [[ -z $NOOP ]]; then - if [[ $V_FLAG -ge 1 ]]; then - echo "$0: debug[1]: about to run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ - "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 - fi - "$MD2HTML_SH" -U "$SITE_URL/$HTML_FILE" "${TOOL_OPTION[@]}" \ - -m "$MD_FILE" -- "$MD_FILE" "$HTML_FILE" - status="$?" - if [[ $status -ne 0 ]]; then - echo "$0: Warning: md2html.sh: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ - "-m $MD_FILE -- $MD_FILE $HTML_FILE" \ - "failed, error: $status" 1>&2 - EXIT_CODE="1" # exit 1 + # verify that the markdown file exists at the topdir + # + export MD_FILE="$name.md" + if [[ ! -e $MD_FILE ]]; then + echo "$0: Warning: markdown file does not exist: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 - elif [[ $V_FLAG -ge 3 ]]; then - echo "$0: debug[3]: now up to date: $HTML_FILE" 1>&2 + continue + fi + if [[ ! -f $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a regular file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + if [[ ! -r $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a readable file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + if [[ ! -s $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a non-empty readable file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + export HTML_FILE="$name.html" + # bin/README is a special case + if [[ $name == bin/README ]]; then + HTML_FILE="bin/index.html" + fi + # inc/README is a special case + if [[ $name == inc/README ]]; then + HTML_FILE="inc/index.html" + fi + # next/README is a special case + if [[ $name == next/README ]]; then + HTML_FILE="next/index.html" + fi + # archive/historic/README is a special case + if [[ $name == archive/historic/README ]]; then + HTML_FILE="archive/historic/index.html" fi - # report disabled by -n - # - elif [[ $V_FLAG -ge 5 ]]; then - echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ - "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 - fi -done + # use the md2html.sh tool to form the HTML file, unless -n + # + if [[ -z $NOOP ]]; then + if [[ $V_FLAG -ge 1 ]]; then + echo "$0: debug[1]: about to run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 + fi + "$MD2HTML_SH" -U "$SITE_URL/$HTML_FILE" "${TOOL_OPTION[@]}" \ + -m "$MD_FILE" -- "$MD_FILE" "$HTML_FILE" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: Warning: md2html.sh: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" \ + "failed, error: $status" 1>&2 + EXIT_CODE="1" # exit 1 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + elif [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: now up to date: $HTML_FILE" 1>&2 + fi + + # report disabled by -n + # + elif [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 + fi + done +else + for name in "${TOP_MD_SET[@]}"; do + + # verify that the markdown file exists at the topdir + # + export MD_FILE="$name.md" + if [[ ! -e $MD_FILE ]]; then + echo "$0: Warning: markdown file does not exist: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + if [[ ! -f $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a regular file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + if [[ ! -r $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a readable file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + if [[ ! -s $MD_FILE ]]; then + echo "$0: Warning: markdown file is not a non-empty readable file: $MD_FILE" 1>&2 + EXIT_CODE=8 # exit 8 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + continue + fi + export HTML_FILE="$name.html" + # bin/README is a special case + if [[ $name == bin/README ]]; then + HTML_FILE="bin/index.html" + fi + # inc/README is a special case + if [[ $name == inc/README ]]; then + HTML_FILE="inc/index.html" + fi + # next/README is a special case + if [[ $name == next/README ]]; then + HTML_FILE="next/index.html" + fi + # archive/historic/README is a special case + if [[ $name == archive/historic/README ]]; then + HTML_FILE="archive/historic/index.html" + fi + + # use the md2html.sh tool to form the HTML file, unless -n + # + if [[ -z $NOOP ]]; then + if [[ $V_FLAG -ge 1 ]]; then + echo "$0: debug[1]: about to run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 + fi + "$MD2HTML_SH" -U "$SITE_URL/$HTML_FILE" "${TOOL_OPTION[@]}" \ + -m "$MD_FILE" -- "$MD_FILE" "$HTML_FILE" + status="$?" + if [[ $status -ne 0 ]]; then + echo "$0: Warning: md2html.sh: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" \ + "failed, error: $status" 1>&2 + EXIT_CODE="1" # exit 1 + echo "$0: Warning: EXIT_CODE set to: $EXIT_CODE" 1>&2 + elif [[ $V_FLAG -ge 3 ]]; then + echo "$0: debug[3]: now up to date: $HTML_FILE" 1>&2 + fi + + # report disabled by -n + # + elif [[ $V_FLAG -ge 5 ]]; then + echo "$0: debug[5]: because of -n, did not run: $MD2HTML_SH -U $SITE_URL/$HTML_FILE ${TOOL_OPTION[*]}" \ + "-m $MD_FILE -- $MD_FILE $HTML_FILE" 1>&2 + fi + done +fi # All Done!!! -- Jessica Noll, Age 2 #