#!/bin/sh set -eu . aux/lib.sh sort_dicts() { for f in po/spelling/*.txt; do if ! LANG=POSIX sort "$f" | diff - "$f"; then if [ "$IN_PLACE" = true ]; then OUT="$(mkstemp)" 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 po/spelling eval "touch po/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="$(mkstemp)" for f in "$@"; do l="$(get_lang "$f")" CURR_DICT="$(mkstemp)" cat po/spelling/international.txt "po/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