Refactor to separate out language-specific logic
Terms
- [X] I have searched open and closed issues
- [X] I agree to follow Scribe-iOS' Code of Conduct
Issue
What?
This issue is for a refactor to separate language-specific logic out from the main base keyboard functionality, generally those under Keyboards/KeyboardsBase/*.swift.
Why? Keeping the codebase cleaner and organized as code may get messy/hard-to-read with language-specific logic sprinkled around, especially as more languages are added over time (and their exceptions and quirks along with them).
How?
The general initial idea is to move language-specific logic/checks into the languages' respective Keyboards/LanguageKeyboards/{language}/*.swift files. Discussion on how to implement this exactly can be done in this issue. Work can (and likely will) happen in multiple PR increments as we identify ways on how to refactor.
Other Notes:
- Initial discussion came out of from this PR thread.
- Somewhat related to https://github.com/scribe-org/Scribe-iOS/issues/1, which did some previous refactoring.
An initial idea brought up offline by @SaurabhJamadagni
Use delegate design pattern
- Larger functions need to be broken down so that language specific parts can be delegated
- Example case: protocol for German and Russian prepositional case annotation