forked from HPR/hpr-tools
		
	
		
			
				
	
	
		
			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
 |