#!/bin/sh
warnings=`grep '\[..\]' $1`
if [ -n "$warnings" ]; then
    echo ""
    echo "Warning: The following lines may need more work"
    grep '\[..\]' $1
fi  
rm -f validate.err
awk '\
/^\/[*#$p]$/ { s=substr($0,2,1) s; next; } \
/^[*#$p]\/$/ { \
	c=substr($0,1,1); \
	if (length(s)==0) \
	    print "Missing opening /" c " at line " NR >> "validate.err"; \
	else if (substr(s,1,1)==c) \
	    s=substr(s,2); \
	else if (index(s,c)) \
	    print "Crossed divs at " NR >> "validate.err"; \
	else
	    print "/" substr(s,1,1) \
	      " block closed by " c "/ at line " NR >> "validate.err"; \
}
END { \
	if (length(s)) \
	    print "Missing closing divs (" s ") at EOF" >> "validate.err"; \
}' $1
if [ -s validate.err ]; then
    echo ""
    echo "Validation fails:"
    cat validate.err
    exit 1
fi
awk '/^\/[*$p]$/ { in_nowrap=1; next; } /^[*$p]\/$/ { in_nowrap=0; next; } { if (!in_nowrap) print; }' $1 | sed -e '/^-----File: .*\.png---------------------------------------------------------$/d' -e 's/\[\*\*[^]]*\]//g' > validate.wrap
sed -n -e '/ -/p' -e '/^-/p' -e '/- /p' -e '/-$/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: spaces around hyphens"
    cat validate.err
    exit 1
fi
sed -n -e '/ \.[^.]/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: spaces before periods"
    cat validate.err
    exit 1
fi
sed -n -e '/ [!?;:,]/p' -e '/^[!?;:,]/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: spaces before punctuation"
    cat validate.err
    exit 1
fi
sed -n -e '/ []})]/p' -e '/^[]})]/p' -e '/[{([] /p' -e '/[{([]$/p' \
  validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: spaces inside brackets"
    cat validate.err
    exit 1
fi
sed -n -e '/[«»]/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    # Handling this would require us to establish which system the text
    # is using: «like this» (eg., Italian), »like this« (eg., German),
    # or »like this» (Finish).
    echo ""
    echo "Internal error: unhandled guillemets"
    cat validate.err
    exit 1
fi
sed -n -e '/\.\.\./p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    # Handling this would require us to decide whether "...."
    # was really "…." or ".…"
    echo ""
    echo "Internal error: unhandled ellipses"
    cat validate.err
    exit 1
fi
sed -n -e '/  /p' -e '/^ /p' -e '/ $/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Warning: multiple spaces"
    cat validate.err
fi
# "Dash all sorts"
sed -n -e '/—-/p' -e '/-—/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: hyphens around dashes (odd number of hyphens)"
    cat validate.err
    exit 1
fi
sed -n -e '/———/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Error: over-long dash"
    cat validate.err
    exit 1
fi
sed -n -e '/ —/p' -e '/^—/p' -e '/— /p' -e '/—$/p' validate.wrap > validate.err
if [ -s "validate.err" ]; then
    echo ""
    echo "Warning: spaces around dashes"
    cat validate.err
fi
