forked from HPR/hpr-tools
		
	
		
			
	
	
		
			171 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/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
							 |