diff options
Diffstat (limited to 'aux/workflow/assert-spelling.sh')
-rwxr-xr-x[-rw-r--r--] | aux/workflow/assert-spelling.sh | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/aux/workflow/assert-spelling.sh b/aux/workflow/assert-spelling.sh index e69de29..3781454 100644..100755 --- a/aux/workflow/assert-spelling.sh +++ b/aux/workflow/assert-spelling.sh @@ -0,0 +1,73 @@ +#!/bin/sh +set -eu + +sort_dicts() { + for f in doc/spelling/*.txt; do + if ! LANG=POSIX sort "$f" | diff - "$f"; then + if [ "$IN_PLACE" = true ]; then + OUT="$(mktemp)" + LANG=POSIX sort "$f" | uniq > "$OUT" + mv "$OUT" "$f" + else + echo "The $f dictionary is unsorted. To fix it, run:" >&2 + echo " sh aux/workflow/assert-spelling.sh -i" >&2 + exit 1 + fi + fi + done +} + +IN_PLACE=false +while getopts 'l:i' flag; do + case "$flag" in + l) + LANGS="$OPTARG" + ;; + i) + IN_PLACE=true + sort_dicts + exit + ;; + *) + exit 2 + ;; + esac +done +shift $((OPTIND -1)) + +assert_arg() { + if [ -z "$1" ]; then + echo "Missing $2" >&2 + exit 2 + fi +} + +assert_arg "${LANGS:-}" '-l LANGS' + +mkdir -p doc/spelling +eval "touch doc/spelling/{international,$(echo "$LANGS" | tr ' ' ,)}.txt" + +get_lang() { + grep lang=.. "$1" | \ + head -n1 | \ + awk ' + match($0, /lang="(..)"/) { + print substr($0, RSTART+length("lang=\""), 2) + } + ' +} + +ACC="$(mktemp)" +for f in "$@"; do + l="$(get_lang "$f")" + CURR_DICT="$(mktemp)" + cat doc/spelling/international.txt "doc/spelling/$l.txt" | sort | uniq > "$CURR_DICT" + hunspell -u3 -H -d "$l" -p "$CURR_DICT" "$f" | tee -a "$ACC" >&2 +done + +if [ -s "$ACC" ]; then + printf '\n\tMispelled words detected by hunspell above.\n\n' >&2 + exit 1 +fi + +sort_dicts |