aboutsummaryrefslogtreecommitdiff
path: root/aux/workflow/assert-spelling.sh
diff options
context:
space:
mode:
Diffstat (limited to 'aux/workflow/assert-spelling.sh')
-rwxr-xr-x[-rw-r--r--]aux/workflow/assert-spelling.sh73
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