hpr-tools/Show_Submission/do_vim

171 lines
4.4 KiB
Bash
Executable File

#!/bin/bash -
#===============================================================================
#
# FILE: do_vim
#
# USAGE: ./do_vim <epno>
#
# 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