171 lines
4.4 KiB
Bash
Executable File
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
|