Add a formatting script for Travis CI
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..7106fe5
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+dist: bionic
+
+stages:
+ - build
+
+matrix:
+ include:
+ - name: Static checks (format.sh)
+ stage: build
+ os: linux
+ addons:
+ apt:
+ packages:
+ - dos2unix
+ - recode
+
+script:
+ - bash ./format.sh
diff --git a/format.sh b/format.sh
new file mode 100755
index 0000000..5d90393
--- /dev/null
+++ b/format.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+# Loops through all text files tracked by Git.
+git grep -zIl '' |
+while IFS= read -rd '' f; do
+ # Exclude some types of files.
+ if [[ $f == *"proj" ]]; then
+ continue
+ elif [[ $f == *"filters" ]]; then
+ continue
+ elif [[ $f == *"sln" ]]; then
+ continue
+ elif [[ $f == *"json" ]]; then
+ continue
+ elif [[ $f == *"min.js" ]]; then
+ continue
+ fi
+ # Ensures that files are UTF-8 formatted.
+ recode UTF-8 $f 2> /dev/null
+ # Ensures that files have LF line endings.
+ dos2unix $f 2> /dev/null
+ # Ensures that files do not contain a BOM.
+ sed -i '1s/^\xEF\xBB\xBF//' "$f"
+ # Ensures that files end with newline characters.
+ tail -c1 < "$f" | read -r _ || echo >> "$f";
+done
+
+git diff > patch.patch
+FILESIZE=$(stat -c%s patch.patch)
+MAXSIZE=5
+
+# If no patch has been generated all is OK, clean up, and exit.
+if (( FILESIZE < MAXSIZE )); then
+ printf "Files in this commit comply with the formatting rules.\n"
+ rm -f patch.patch
+ exit 0
+fi
+
+# A patch has been created, notify the user, clean up, and exit.
+printf "\n*** The following differences were found between the code "
+printf "and the formatting rules:\n\n"
+cat patch.patch
+printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+rm -f patch.patch
+exit 1