#!/bin/bash - #=============================================================================== # # FILE: do_vim # # USAGE: ./do_vim # # DESCRIPTION: Run vim on notes for a show # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: The validate_html script failed because the HTML::Valid module # wasn't visible but the edit went ahead regardless. How to # handle such errors cleanly? Not found an answer yet. # 2022-12-22: Added code to write to the .status file # AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com # VERSION: 0.0.8 # CREATED: 2016-05-14 14:21:14 # REVISION: 2022-12-22 17:08:22 # #=============================================================================== set -o nounset # Treat unset variables as an error SCRIPT=${0##*/} #DIR=${0%/*} VERSION="0.0.8" if [[ $# -ne 1 ]]; then echo "[${SCRIPT} ${VERSION}] Usage: $SCRIPT shownumber" exit fi BASENAME="$HOME/HPR/Show_Submission" SHOWDIR="$BASENAME/shownotes/hpr${1}" EXTRACT="$SHOWDIR/hpr${1}.out" FORMAT="$SHOWDIR/.format" VALIDATE="$BASENAME/validate_html" ERRORS="$SHOWDIR/hpr${1}.err" REPORT="$SHOWDIR/errors.txt" PICTPL="$SHOWDIR/.pictures.tt2" STATUSFILE="$SHOWDIR/.status" # # Sanity checks # [ -e "$VALIDATE" ] || { echo "$SCRIPT: HTML validator '$VALIDATE' not found" exit 1 } if [[ ! -e $EXTRACT ]]; then echo "$SCRIPT: File not found: $EXTRACT" exit fi fmt= # # Set the Vim command from the declared format # if [[ ! -e $FORMAT ]]; then # # Default # vimcom=':set filetype=markdown' else # # Define filetypes that Vim knows based on the names that arrive in the # form. All need work other than 'txt2tags' # fmt="$(cat "$FORMAT")" case $fmt in html5) fmt='html';; Markdown_GitHub | Markdown_Pandoc | markdown_standard | plain_text) fmt='markdown';; restructured_text) fmt='rst';; txt2tags) ;; # No action needed *) fmt='markdown';; esac vimcom=":set filetype=$fmt" fi # # For html5 (now called 'html') run a validator on it. If this generates # errors run Vim with a Quickfix window on the error file so the errors can be # spotted and fixed. # if [[ $fmt == 'html' ]]; then # # The validator exits with False if there are errors # if ! $VALIDATE "$EXTRACT" > "$ERRORS"; then # # Did the validation script crash? # RES=$? if [[ $RES -ne 0 ]]; then echo "Problem running $VALIDATE; Edit aborted" exit fi # # HTML::Valid can put unwanted stuff in the error file. Not sure why. # We remove it with 'sed'. Only lines beginning with the path of the # input file are wanted. # # shellcheck disable=SC1117 sed -i -ne "\#^$EXTRACT#p" "$ERRORS" # # Make an error file for reporting to the host, but only if it doesn't # already exist. Start with the HTML itself with line numbers and # follow with the error report with the file paths truncated. # if [[ ! -e $REPORT ]]; then nl -ba -w3 -s': ' "$EXTRACT" > "$REPORT" sed -e "s:^$BASENAME/::" "$ERRORS" >> "$REPORT" fi # # Run Vim on the errors with the option of running 'make' to # re-validate after correcting. We force Vim to open the quickfix # window so errors and warnings can be seen and edited. # # shellcheck disable=SC1117 vim --cmd ":set makeprg=${VALIDATE}\ %" -c "$vimcom" \ -c ':setlocal spell' -c:cope -q "$ERRORS" RES=$? else # # No validation errors # vim -c "$vimcom" -c ':setlocal spell' "$EXTRACT" RES=$? fi else # # Not html5. If the picture template exists open it in a vertical split # if [[ -e $PICTPL ]]; then vim -c "$vimcom" -c ':setlocal spell' -O "$EXTRACT" "$PICTPL" RES=$? else vim -c "$vimcom" -c ':setlocal spell' "$EXTRACT" RES=$? fi fi if [[ $RES -eq 0 ]]; then echo "Edited $EXTRACT ok" # # Update the status file # echo "edited" >> "$STATUSFILE" || \ { echo "Failed to update $STATUSFILE"; exit 1; } else echo "Oops! Something went wrong!" fi exit # vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21