Before this change, there was a chance that a text editor or compiler
would use the wrong character encoding. For text editors, this commit
adds “charset = utf-8” to .editorconfig. That will cause editors that
support EditorConfig files [1] to automatically use UTF-8 when reading
and writing files. For compilers, this commit adds compiler options that
guarantee that compilers will decode source code files using UTF-8. The
compiler options are known to work on MSVC, GCC and Clang. If we ever
want to support additional compilers, then we might have to edit the if
statement that this commit adds.
This commit does not eliminate the chance that a wrong character
encoding will be used. Someone could always use a text editor that
doesn’t support EditorConfig files or a compiler that doesn’t support
the compiler options that we use. This commit does, however, make an
encoding mismatch much less likely.
[1]: <https://editorconfig.org/#pre-installed>
Most files in this repo assume that tabs are 8 characters wide and use 2
spaces for indentation. Most people’s editors aren’t configured to do
that by default. This can lead to indentation mistakes [1].
The main motivation behind this change is to make indentation mistakes
less likely. Many editors [2] will automatically use whatever
indentation settings are in the EditorConfig file.
On an unrelated note, the EditorConfig that this commit adds includes a
tab_width property. This comment in cfile/cfile.h was the inspiration
for specifying the tab_width property:
// Opens a HOG file. Future calls to cfopen(), etc. will look in this HOG.
// Parameters: libname - the path & filename of the HOG file
// NOTE: libname must be valid for the entire execution of the program. Therefore, it should either
// be a fully-specified path name, or the current directory must not change.
// Returns: 0 if error, else library handle that can be used to close the library
int cf_OpenLibrary(const char *libname);
When tab_width is set to 8, the first “libname” lines up with the second
“libname”, and the m in “must” lines up with the b in “be”. When
tab_width is set to its default value (4 in this case [3]), the first
“libname” doesn’t line up with anything, and the second “libname” lines
up with the b in “be”. It just looks more correct when tab_width is set
to 8.
[1]: <https://github.com/DescentDevelopers/Descent3/pull/372#issuecomment-2122445826>
[2]: <https://editorconfig.org/#pre-installed>
[3]: <https://spec.editorconfig.org/#supported-pairs>