FMSLogo was written before Unicode existed and was therefore written as an ANSI application. In the meantime, Windows was rewritten to support Unicode natively and ANSI code pages are supported only for compatibility.
FMSLogo being an ANSI application causes the following problems:
- It's impossible to use characters that are not within the system code page. For example, it's impossible to, say, use Greek letters on an English build.
- There is confusing behavior when copying and pasting text that contains Unicode characters.
- Most libraries don't support ANSI text well. In particular, the wxWidgets has several bugs that when using ANSI strings.
- It also complicates the translation process, as many translators find it difficult to save files as ANSI text.
- It complicates the testing process, as testing a non-English build requires changing a system setting and rebooting.
- It complicates creating a native GNU/Linux project Feature Request #1, as the wxWidgets package in all Linux distributions were compiled without ANSI support.
- For some languages, notable Chinese and Russian, the editor is much worse than the other languages because of incompatibilies with wxWidgets and the way Chinese ANSI code pages work.
- It complicates and slows down the build, as each source code is compiled multiple times, one for each language (mostly due to supporting a different editor in #7)
- There is a risk that Windows will eventually stop supporting ANSI programs, in which case FMSLogo wouldn't work on new versions of Windows.
The most difficult part using Unicode will be maintaining backward compatibility, being able to read old ANSI Logo programs, only saving a file with a BOM if the workspace contains a non-ASCII character, continuing to support ANSI strings in DLLCALL, continuing to send ANSI strings in the network API, updating RAWASCII, CHAR, and ASCII, etc.
I have started work on this and exist it will be released as a new major version, 8.0.0.
I have finished updating FMSLogo to be a Unicode application. It supports the BMP, but will have trouble with code points >65535.
This introduced the following breaking changes: