diff --git a/_utils.sh b/_utils.sh new file mode 100644 index 000000000..5ad1d3bde --- /dev/null +++ b/_utils.sh @@ -0,0 +1,55 @@ + +declare RED='\033[0;31m' +declare GR='\033[0;32m' +declare NC='\033[0m' + +# Output functions. Colorize various types of messages. +message () { echo -e "$@" 1>&2; } +confirmation () { message $GR$@$NC; } +warn () { message $RED$@$NC; } +error () { message $RED$@$NC; exit 1; } + +# Check for and exit if file dependancies are not met. Takes a list of full or +# relative paths. +check_file_deps () { + for filereq in $@ + do + if [ ! -f "${filereq}" ] && [ ! -L "${filereq}" ]; then error "${filereq} not found. Quiting."; exit 1; fi + done +} + +# Check for and exit if command dependancies are not met. Takes a list of +# executables. +check_util_deps () { + for dep in $@ + do + if ! hash $dep 2>/dev/null; then + error >&2 "... $dep dependency not met. Please install." + exit 1 + fi + done +} + +# Creates an rST title over/underscore string of the same length +# as the argument. Section strings are not supported. Returned output +# is a sequence of equal signs (=). +make_strike () { + local _title="$1" + local _strike + _strike=$(for ((i=1; i<=${#_title}; i++)); do + printf '=%.0s' "$i" + done) + echo $_strike +} + +# Trim leading and trailing whitespaces from string. +trimspaces () { + local _s=$1 + + _s="${_s#"${_s%%[![:space:]]*}"}" + _s="${_s#"${_s%%[![:space:]]*}"}" + + echo $_s +} + +declare utils_loaded=1 \ No newline at end of file diff --git a/doc/source/shared/strings.txt b/doc/source/shared/strings.txt index 27bb726e8..9104a69c0 100644 --- a/doc/source/shared/strings.txt +++ b/doc/source/shared/strings.txt @@ -55,3 +55,10 @@ | .. |optional| replace:: **Optional step:** + +.. Flag to mark an output html file for post-build step to hide empty rows + in tables. This is mostly useful where some rows are conditionalized. + +.. |hide-empty-rows| raw:: html + + \ No newline at end of file diff --git a/hide-empty-rows.sh b/hide-empty-rows.sh new file mode 100755 index 000000000..ddd301a0a --- /dev/null +++ b/hide-empty-rows.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# strip empty rows from HTML output tables. Max width 10 columns. +# |hide-empty-rows| must be present in corresponding rst file. + +. $(pwd)/_utils.sh +if [[ -z ${utils_loaded+x} ]]; then echo "Could not load utilities"; exit 1; fi + +if [ "$#" -ne 1 ]; then + error "Usage: $0 " +elif [[ ! -e "$1" ]]; then + error "$0: Directory \"$1\" not found" +fi + +declare htmlPath=$1 +declare flag="post-build-hide-empty-table-rows" +declare td="\n*[\n\s]*\n*" +declare td_p=${td} + +message "Cleaning up empty table rows in flagged files" + +declare flagged_files=( $(grep -rl --include="*.html" "${flag}" ${htmlPath}) ) + +for _html in ${flagged_files[@]}; do + + confirmation "... $_html" + + sed -i -E -e ':a;N;$!ba;s/\n(<\/tr>)/\1/g' ${_html} + sed -i -E -e ':a;N;$!ba;s/\n(<\/td>+)(<\/tr>)/\1\2/g' ${_html} + + # sed has no non-greedy mode + for i in {1..10}; do + sed -i -E "s:^${td_p}::g" ${_html} + td_p="$td_p$td" + done + + # sed -i -E "s:^(+)():\1\2:g" ${_html} +done + +confirmation "... Done" \ No newline at end of file diff --git a/tox.ini b/tox.ini index 0bcfe6c9d..3e0b5517b 100644 --- a/tox.ini +++ b/tox.ini @@ -28,6 +28,7 @@ commands = git clean -dfx doc/source/fault-mgmt/ git restore doc/source/dist_cloud/kubernetes/* # bash hw-updates.sh + bash hide-empty-rows.sh doc/build/html bash htmlChecks.sh doc/build/html [testenv:docs] @@ -40,6 +41,7 @@ commands = {[testenv:postbuild-docs]commands} # Note: The dev env for the docs team uses a version of tox that does not yet support allowlist_externals whitelist_externals = bash + hide-empty-rows.sh htmlChecks.sh get-remote-files.sh git @@ -54,6 +56,7 @@ commands = sphinx-build -a -E -W --keep-going -d doc/build/doctrees -t starlingx -t openstack -b singlehtml doc/source doc/build/singlepage {posargs} {[testenv:postbuild-docs]commands} whitelist_externals = bash + hide-empty-rows.sh htmlChecks.sh get-remote-files.sh git