declare RED='\033[0;31m' declare OG="\033[93m" 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 $OG$@$NC; } error () { message $RED$0:$?: $@$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 } # Sets a global hash of acronyms and definitions from rst :abbr: defs. Also # sets an array of hash keys to facilitate sorting. # # Takes path to the file to parse. Optional "1" flag as second option # suppresses plural forms such as "PVCs". get_abbrs () { local ABBREVS declare -a -g acro_keys declare -A -g acro_keyvals local regex=":abbr:\`([A-Za-z]+)\s+\((.*)\)\`" [[ ! -z ${1+x} ]] && [[ -e $1 ]] && ABBREVS="$1" \ || error "Can't find abbrevs file $1" [[ ! -z $2{+x} ]] && [[ ${2} == "1" ]] \ && local strip_plurals=$2 while IFS= read -r line do if [[ $line =~ $regex ]]; then if [[ ${strip_plurals} -eq 1 ]] && [[ ${BASH_REMATCH[1]:0-1} == "s" ]]; then message " Skipping pluralization \"${BASH_REMATCH[1]}\"" continue fi acro_keys+=("${BASH_REMATCH[1]}") acro_keyvals["${BASH_REMATCH[1]}"]="${BASH_REMATCH[2]}" fi done < "$ABBREVS" || error "Cannot read $ABBREVS" } # Report duplicate :abbr: anchor strings. (Duplicate placeholders cause # Sphinx warnings.) # # Takes an array of anchor strings. Echos duplicates and returns a duplicate # count check_abbr_dups () { local -a _anchors=("$@") declare -a dups; declare -i _dup_count=0 IFS=$'\n'; dups=($(sort -f <<<"${_anchors[*]}")); unset IFS message "... Checking for duplicate anchor strings" for ((i=0; i < ${#dups[@]}; i++)); do if [[ ${dups[$i]} == ${dups[$i-1]} ]]; then warn " Duplicate anchor string \"${dups[$i]}\" found" ((_dup_count=$_dup_count+1)) fi done echo $_dup_count } declare utils_loaded=1