diff options
Diffstat (limited to 'aux/workflow/assert-spelling.sh')
-rwxr-xr-x | aux/workflow/assert-spelling.sh | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/aux/workflow/assert-spelling.sh b/aux/workflow/assert-spelling.sh new file mode 100755 index 0000000..ff1df2a --- /dev/null +++ b/aux/workflow/assert-spelling.sh @@ -0,0 +1,68 @@ +#!/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 +if [ -z "${LANGS:-}" ]; then + echo 'Missing -l LANGS' >&2 + exit 2 +fi + +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)" +# shellcheck disable=2044 +for f in $(find public -type f -name '*.html'); 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 |