diff --git a/.github/DISCUSSION_TEMPLATE/custom-colors.yml b/.github/DISCUSSION_TEMPLATE/custom-colors.yml new file mode 100644 index 000000000..68d57be2a --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/custom-colors.yml @@ -0,0 +1,18 @@ +body: +- type: input + - type: textarea + id: description + attributes: + label: Description + placeholder: | + "You can add some description and screenshots here if you want." + validations: + required: false + - type: textarea + id: colors + attributes: + label: Colors + placeholder: | + "Please paste the colors (obtained via the _copy_ button) here, and surround the text with ``` to make sure it's displayed in a way that can be copied easily." + validations: + required: true diff --git a/.github/DISCUSSION_TEMPLATE/custom-layout.yml b/.github/DISCUSSION_TEMPLATE/custom-layout.yml new file mode 100644 index 000000000..03f8832ab --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/custom-layout.yml @@ -0,0 +1,18 @@ +body: +- type: input + - type: textarea + id: description + attributes: + label: Description + placeholder: | + "You can add some description and screenshots here if you want." + validations: + required: false + - type: textarea + id: layout + attributes: + label: Layout + placeholder: | + "Please paste the layout here, and surround it with ``` to make sure it's displayed in a way that can be copied easily." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 261f74d45..f5be76237 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -12,19 +12,20 @@ tl;dr: **Describe the bug** **To Reproduce** If possible, provide all the necessary steps to reproduce your problem, including the involved apps or settings if relevant. +In case you cannot reproduce the bug, say so and provide information about when the bug may occur for you. Settings and the app you're writing in are usually important, please don't omit them. **Expected behavior** If it's not obvious (e.g. not crash), describe how you think the app should behave. **Screenshots** -ONLY add screenshots if applicable and helpful. +ONLY add screenshots when they add real value. If you add screenshots, reduce the size or use thumbnails to keep the issue nicely readable. **App version** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index e3fd107e3..9a488a4bf 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,7 +8,7 @@ Please see the appropriate readme section for issue reporting guidelines: https: tl;dr: * search for duplicates, also in closed issues * a single issue per topic -* reduce screenshot size +* ONLY add screenshots when necessary, and reduce their size diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 37df29570..cede865ca 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,16 +1,19 @@ -See the contributing readme for more detailed guideline, please understand and accept them: https://github.com/Helium314/HeliBoard/blob/main/CONTRIBUTING.md -tl;dr (you should still read the full list though): -* make sure it's wanted +See the contributing readme for more detailed guidelines: https://github.com/Helium314/HeliBoard/blob/main/CONTRIBUTING.md#guidelines +tl;dr: +necessary; * a single thing only * describe it properly +recommended: +* make changes optional * re-use existing mechanisms / code * low performance impact * make it a draft if you still want to work on it -* no translations or dictionaries + +A good description and small scope ("single thing") massively help with reviewing. Don't be surprised when your PR gets closes if you clearly / repeatedly violate these parts of the guidelines. Further * When the PR contains "fixes" , the related issue will be linked and automatically closed if the PR is merged (also works for other words like "fix", "resolve", "resolves", "closes", ...) -* If you add a keyboard layout, make sure you have read https://github.com/Helium314/HeliBoard/blob/main/layouts.md#adding-new-layouts--languages -* Please avoid force-pushing when doing changes. This way it's not possible which parts have changed since the previous state. +* If you add a keyboard layout, best read https://github.com/Helium314/HeliBoard/blob/main/layouts.md#adding-new-layouts--languages +* Please avoid force-pushing when doing requested changes. This way it's not possible to see which parts have changed since the previous state. \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 850002f3e..60c26f268 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,29 +2,69 @@ HeliBoard project is based on Gradle and Android Gradle Plugin. To get started, you can install [Android Studio](https://developer.android.com/studio), and import project 'from Version Control / Git / Github' by providing this git repository [URL](https://github.com/Helium314/HeliBoard) (or git SSH [URL](git@github.com:Helium314/heliboard.git)). Of course you can also use any other compatible IDE, or work with text editor and command line. - Once everything is up correctly, you're ready to go! +If you have difficulties implementing some functionality, you're welcome to ask for help. No one will write the code for you, but often other contributors can give you very useful hints. + +# About the Code + +HeliBoard is based on AOSP keyboard, and in many places still contains mostly the original code. There are some extensions, and some parts have been replaced completely. +When working on this app, you will likely notice its rather large size, and quite different code styles and often ancient comments and _TODO_s, where the latter are typically untouched since AOSP times. +Unfortunately a lot of the old code is hard to read or to fully understand with all of its intended (and unintended) consequences. + +Some hints for finding what you're looking for: +* Layouts: stored in `layouts` folder in assets, interpreted by `KeyboardParser` and `TextKeyData` + * Popups: either on layouts, or in `locale_key_texts` (mostly letter variations for specific languages that are not dependent on layout) +* Touch and swipe input handling: `PointerTracker` +* Handling of key inputs: `InputLogic` +* Suggestions: `DictionaryFacilitatorImpl`, `Suggest`, `InputLogic`, and `SuggestionStripView` (in order from creation to display) +* Forwarding entered text / keys to the app / text field: `RichInputConnection` +* Receiving events and information from the app / text field: `LatinIME` +* Settings are in `SettingsValues`, with some functionality in `Settings` and the default values in `Default` + # Guidelines -HeliBoard is a complex application, when contributing, you must take a step back and make sure your contribution: -- **Is actually wanted**. Best check related open issues before you start working on a PR. Issues with "PR" and "contributor needed" labels are accepted, but still it would be good if you announced that you are working on it, so we can discuss how changes are best implemented. - If there is no issue related to your intended contribution, it's a good idea to open a new one to avoid disappointment of the contribution not being accepted. For small changes or fixing obvious bugs this step is not necessary. -- **Is only about a single thing**. Mixing unrelated or semi-related contributions into a single PR is hard to review and can get messy. -- **Is finished or a draft**. When you keep changing the PR without reviewer's feedback, any attempt to review it is doomed and a waste of time. Better mark it as a draft in this case. -- **Has a proper description**. What your contribution does is usually less obvious to reviewers than for yourself. A good description helps _a lot_ for understanding what is going on, and for separating wanted from unintended changes in behavior. Therefore the changes should be as described, not more and not less. -- **Uses already in-place mechanism and take advantage of them**. In other terms, does not reinvent the wheel or uses shortcuts that could alter the consistency of the existing code. The contribution should only add as little complexity as necessary, the code is overly complicated already 😶. -- **Has a low footprint**. Some parts of the code are executed very frequently, and the keyboard should stay responsive even on older devices. -- **Does not bring any non-free code or proprietary binary blobs**. This also applies to code/binaries with unknown licenses. Make sure you do not introduce any closed-source library from Google. - If your contribution contains code that is not your own, provide a link to the source. -- **Complies with the user privacy principle HeliBoard follows**. +## Recommended -(and leave dependency upgrades to the maintainers, unless it's an actual security issue) -In addition to previous elements, HeliBoard must stick to [F-Droid inclusion guidelines](https://f-droid.org/docs/Inclusion_Policy/). +If you want to contribute, it's a good idea to make sure your idea is actually wanted in HeliBoard. +Best check related issues before you start working on a PR. If the issue has the [labels](https://github.com/Helium314/HeliBoard/labels) [_PR_](https://github.com/Helium314/HeliBoard/labels/PR) or [_contributor needed_](https://github.com/Helium314/HeliBoard/issues?q=label%3A%22contributor%20needed%22) (even closed ones), contributions are wanted. If you don't find a related issue, it's recommended to open one, but ultimately it's your choice. +Asking before starting a PR may help you for getting pointers to potentially relevant code, and deciding how to implement your desired changes. -# Adding Layouts +HeliBoard is a complex application and used by users with a large variety of opinions on how things should be. +When contributing to the app, please: +* Be careful when modifying core components, as it's easy to trigger unintended consequences +* When introducing a feature or change that might not be wanted by everyone, make it optional +* Keep code simple where possible. Complex code is harder to review and to maintain, so the complexity should also add a clear benefit +* Avoid noticeable performance impact. Some parts of the code are executed very frequently, and the keyboard should stay responsive even on older devices. +* Try making use of in-place mechanisms instead of re-inventing the wheel. Your contribution should only add as much complexity as necessary, the code is overly complicated already 😶. +* Keep your changes to few places, as opposed to sprinkling them over many parts of the code. This helps with keeping down complexity during review, and with maintainability of the app. +* Make a draft PR when you intend to still work on it. Submitting an unfinished PR can be a good idea when you're not sure how to best continue and would like some comments. -See [layouts.md](layouts.md#adding-new-layouts--languages) for how to add new layouts to the app. +Further things to consider (though irrelevant for most PRs): +* APK size: + * Large increases should be discussed first, and will only be added when it's considered worth the increase for a majority of users. It might be possible to avoid size increase by importing optional parts, like it's done for dictionaries. + * Small increases like when adding code or layouts are never an issue +* Do not add proprietary code or binary blobs. If it turns out to be necessary for a feature you want to add, it might be acceptable when the user opts in and imports those parts, like it's done for glide typing. +* Privacy: Only relevant when adding some form of communication with other apps. Internet permission will not be added. +* If your contribution contains code that is not your own, provide a link to the source + * This is especially relevant to be sure the code's license is compatible to HeliBoard's GPL3 + +## Necessary + +Some parts of the guidelines are necessary to fulfill for facilitating code review. It doesn't need to be perfect from the start, but consider it for your future PRs when you're reminded of these guidelines. Note that the larger / more complex your PR is, the more relevant these guidelines are. +Your PR should: +- **Be only about a single thing**. Mixing unrelated or semi-related contributions into a single PR is hard to review and can get messy. As a general rule: if one part doesn't need the other one(s), it should be separate PRs. If one feature builds on top of another one, but the base is usable on its own, do a PR for the base and then a follow-up once it's merged. +- **Have a proper description**. A good description helps _a lot_ for understanding what you intend to achieve with the changes, and for understanding the code. This is relevant for separating wanted from unintended changes in behavior during review. +- **No translations**. Translations should be done using [Weblate](https://translate.codeberg.org/projects/heliboard/). Exception is when you add new resource strings, those can be added right away. + +Please leave dependency upgrades to the maintainers, unless you state a good reason why they should be done now. + +# Adding / Adjusting Layouts + +See [layouts.md](layouts.md#adding-new-layouts--languages) for how to add new layouts to the app. Please stay in line with other layouts regarding the popup keys. + +When editing existing layouts, please consider that people should should still get what they're used to. In case of doubt it might be better to add a new layout instead of overhauling existing layouts. +`locale_key_texts` files should only contain letters that are actually part of the language, with exception of the optional `more_popups_<...>.txt` files. # Update Emojis diff --git a/LICENSE-GPL-3 b/LICENSE similarity index 100% rename from LICENSE-GPL-3 rename to LICENSE diff --git a/README.md b/README.md index a0d4a0cc3..b1e6a3abe 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,11 @@ Does not use internet permission, and thus is 100% offline. ## Table of Contents - [Features](#features) - * [FAQ / Common Issues](#faq--common-issues) - * [Hidden Functionality](#hidden-functionality) - [Contributing](#contributing-) * [Reporting Issues](#reporting-issues) * [Translations](#translations) * [To Community Creation](#to-community) * [Code Contribution](CONTRIBUTING.md) -- [To-do](#to-do) - [License](#license) - [Credits](#credits) @@ -43,56 +40,12 @@ Does not use internet permission, and thus is 100% offline.
  • Clipboard history
  • One-handed mode
  • -
  • Split keyboard (only available if the screen is large enough)
  • +
  • Split keyboard
  • Number pad
  • Backup and restore your settings and learned word / history data
  • -## FAQ / Common Issues -* __Add a dictionary__: First download the dictionary file, e.g. from [here](https://codeberg.org/Helium314/aosp-dictionaries#dictionaries). Then go to language settings, click on the language, then on `+` next to _dictionary_ the _add_ and select the file. Alternatively you can open a `.dict` file in a file explorer with HeliBoard and then select the language. Note that the latter method does not work with all file explorers. -* __Emoji search__: You can get addon dictionaries for emoji suggestions in the [dictionaries repo](https://codeberg.org/Helium314/aosp-dictionaries). An actual search function does not exist yet. -* __Cannot switch choose layout__: This is only possible when _use system languages_ is disabled. You can select the layout when tapping on the language. - * __How to customize layout__: Go to layout selection and use the `+` button, then you can add a custom layout, either from a file or you can copy and edit an existing layout. -* __No suggestions for some language__: Check [dictionaries repo](https://codeberg.org/Helium314/aosp-dictionaries) whether a dictionary is available. If there is one, download it and add it in the language settings for this language. -* __No suggestions in some app / text field__: This app respects the [no suggestions flag](https://developer.android.com/reference/android/text/InputType#TYPE_TEXT_FLAG_NO_SUGGESTIONS) set by some input fields, i.e. the developer does not want you to see suggestions here. Best do in issue report for that app if you think this behavior is wrong. Alternatively you can enable the _always show suggestions_ setting that overrides the _no suggestions_ flag. -* __Multilingual typing__ (type in multiple languages without switching manually): Enable in _Languages & Layouts_, select the main language and tap the `+` button next to _multilingual typing_ to add a language. Note that the selection is limited to languages with the same script as the main language, and to languages that have a dictionary (see above for how to add). -* __How to enable glide typing__: There is no glide typing built into this app, but you can load compatible libraries: Go to advanced settings -> _load gesture typing library_ and point to a file (setting not available in _nouserlib_ version). You can extract the file from GApps packages ("_swypelibs_"), or download one [here](https://github.com/erkserkserks/openboard/tree/master/app/src/main/jniLibs). Make sure to use the correct version (app will tell you in the dialog to load the library). - * __Glide typing is not working after loading a library__: Possibly the download was corrupted, or you downloaded the wrong file. If you get a "_unknown file_" confirmation popup, it is likely you are not using the correct file (or you might be using a different version of the library). In rare cases, there might be crashes when the file is not in internal storage, or some [Samsung-specific problems](https://stackoverflow.com/a/75286899). -* __German layout with / without umlauts__: _German (Germany)_ layout has umlauts, _German_ layout doesn't -* __Spell checker is not checking all languages in multilingual typing__: Make sure you actually enabled HeliBoard spell checker. Usually it can be found in System Settings -> System -> Languages -> Advanced -> Spell Checker, but this may depend on Android version. -* __Words added to Gboard dictionary are not suggested__: Gboard uses its own dictionary instead of the system's personal dictionary. See [here](https://github.com/Helium314/HeliBoard/issues/500#issuecomment-2032292161) for how to export the words. -* __What is the _nouserlib_ version?__: The normal version (_release_) allows the user to provide a library for glide typing, while the _nouserlib_ version does not. Running code that isn't supplied with the app is _dynamic code loading_, which is a security risk. Android Studio warns about this: - > Dynamically loading code from locations other than the application's library directory or the Android platform's built-in library directories is dangerous, as there is an increased risk that the code could have been tampered with. Applications should use loadLibrary when possible, which provides increased assurance that libraries are loaded from one of these safer locations. Application developers should use the features of their development environment to place application native libraries into the lib directory of their compiled APKs. - - The app checks the SHA256 checksum of the library and warns the user if it doesn't match with known library versions. A mismatch indicates the library was modified, but may also occur if the user intentionally provides a different library than expected (e.g. a self-built variant). - Note that if the the app is installed as a system app, both versions have access to the system glide typing library (if it is installed). -* __App crashing when using as system app__: This happens if you do not install the app, but just copy the APK. Then the app's own library is not extracted from the APK, and not accessible to the app. You will need tp either install the app over itself, or provide a library. - -## Hidden Functionality -Features that may go unnoticed, and further potentially useful information -* Long-pressing toolbar keys results in additional functionality: clipboard -> paste, move left/right -> word left/right, move up/down -> page up/down, word left/right -> line start/end, page up/down -> page start/end, copy -> cut, select word <-> select all, undo <-> redo -* Long-press the Comma-key to access Clipboard View, Emoji View, One-handed Mode, Settings, or Switch Language: - * Emoji View and Language Switch will disappear if you have the corresponding key enabled; - * For some layouts it\'s not the Comma-key, but the key at the same position (e.g. it\'s `q` for Dvorak layout). -* When incognito mode is enabled, no words will be learned, and no emojis will be added to recents. -* Sliding key input: Swipe from shift or symbol key to another key. This will enter a single uppercase key or symbol and return to the previous keyboard. -* Hold shift or symbol key, press one or more keys, and then release shift or symbol key to return to the previous keyboard. -* Long-press a suggestion in the suggestion strip to show more suggestions, and a delete button to remove this suggestion. -* Swipe up from a suggestion to open more suggestions, and release on the suggestion to select it. -* Long-press an entry in the clipboard history to pin it (keep it in clipboard until you unpin). -* Swipe left in clipboard view to remove an entry (except when it's pinned) -* Select text and press shift to switch between uppercase, lowercase and capitalize words -* You can add dictionaries by opening the file - * This only works with _content-uris_ and not with _file-uris_, meaning that it may not work with some file explorers. -* Not really a feature, but you can restart the keyboard by going to the settings and swiping it away from recents -* _Debug mode / debug APK_ - * Long-press a suggestion in the suggestion strip twice to show the source dictionary. - * When using debug APK, you can find _Debug Settings_ within the _Advanced Preferences_, though the usefulness is limited except for dumping dictionaries into the log. - * For a release APK, you need to tap the version in _About_ several times, then you can find debug settings in _Advanced Preferences_. - * When enabling _Show suggestion infos_, suggestions will have some tiny numbers on top showing some internal score and source dictionary. - * In the event of an application crash, you will be prompted whether you want the crash logs when you open the Settings. - * When using multilingual typing, space bar will show an confidence value used for determining the currently used language. -* For users doing manual backups with root access: Starting at Android 7, some files and the main shared preferences file are not in the default location, because the app is using [device protected storage](https://developer.android.com/reference/android/content/Context#createDeviceProtectedStorageContext()). This is necessary so the settings and layout files can be read before the device is unlocked, e.g. at boot. The files are usually located in `/data/user_de/0//`, though the location may depend on the device and Android version. +For [FAQ](https://github.com/Helium314/HeliBoard/wiki/FAQ) and more information about the app and features, please visit the [wiki](https://github.com/Helium314/HeliBoard/wiki) # Contributing ❀ @@ -105,7 +58,7 @@ Before opening a new issue, be sure to check the following: - **Is the issue still relevant?** Make sure your issue is not already fixed in the latest version of HeliBoard. - **Is it a single topic?** If you want to suggest multiple things, open multiple issues. - **Did you use the issue template?** It is important to make life of our kind contributors easier by avoiding issues that miss key information to their resolution. -Note that issues that that ignore part of the issue template will likely get treated with very low priority, as often they are needlessly hard to read or understand (e.g. huge screenshots, not providing a proper description, or addressing multiple topics). +Note that issues that that ignore part of the issue template will likely get treated with very low priority, as often they are needlessly hard to read or understand (e.g. huge screenshots, not providing a proper description, or addressing multiple topics). Blatant violation of the guidelines may result in the issue getting closed. If you're interested, you can read the following useful text about effective bug reporting (a bit longer read): https://www.chiark.greenend.org.uk/~sgtatham/bugs.html @@ -113,12 +66,18 @@ If you're interested, you can read the following useful text about effective bug Translations can be added using [Weblate](https://translate.codeberg.org/projects/heliboard/). You will need an account to update translations and add languages. Add the language you want to translate to in Languages -> Manage translated languages in the top menu bar. Updating translations in a PR will not be accepted, as it may cause conflicts with Weblate translations. +Some notes on translations +* when translating metadata, translating the changelogs is rather useless. It's available as it was requested by translators. +* the `hidden_features_message` is horrible to translate with Weblate, and serves little benefit as it's just a copy of what's already in the wiki: https://github.com/Helium314/HeliBoard/wiki/Hidden-functionality. It's been made available in the app on user request/contribution. + ## To Community You can share your themes, layouts and dictionaries with other people: * Themes can be saved and loaded using the menu on top-right in the _adjust colors_ screen + * You can share custom colors in a separate [discussion section](https://github.com/Helium314/HeliBoard/discussions/categories/custom-colors) * Custom keyboard layouts are text files whose content you can edit, copy and share * this applies to main keyboard layouts and to special layouts adjustable in advanced settings * see [layouts.md](layouts.md) for details + * You can share custom layouts in a separate [discussion section](https://github.com/Helium314/HeliBoard/discussions/categories/custom-layout) * Creating dictionaries is a little more work * first you will need a wordlist, as described [here](https://codeberg.org/Helium314/aosp-dictionaries/src/branch/main/wordlists/sample.combined) and in the repository readme * the you need to compile the dictionary using [external tools](https://github.com/remi0s/aosp-dictionary-tools) @@ -128,39 +87,15 @@ You can share your themes, layouts and dictionaries with other people: ## Code Contribution See [Contribution Guidelines](CONTRIBUTING.md) -# To-do -__Planned features and improvements:__ -* Improve support for modifier keys (_alt_, _ctrl_, _meta_ and _fn_), some ideas: - * keep modifier keys on with long press - * keep modifier keys on until the next key press - * use sliding input -* Less complicated addition of new keyboard languages (e.g. #519) -* Additional and customizable key swipe functionality - * Some functionality will not be possible when using glide typing -* Ability to enter all emojis independent of Android version (optional, #297) -* Add and enable emoji dictionaries by default (if available for language) -* Clearer / more intuitive arrangement of settings - * Maybe hide some less used settings by default (similar to color customization) -* Make use of the `.com` key in URL fields (currently only available for tablets) - * With language-dependent TLDs -* Internal cleanup (a lot of over-complicated and convoluted code) -* [Bug fixes](https://github.com/Helium314/HeliBoard/issues?q=is%3Aissue+is%3Aopen+label%3Abug) - -__What will _not_ be added:__ -* Material 3 (not worth adding 1.5 MB to app size) -* Dictionaries for more languages (you can still download them) -* Anything that requires additional permissions, unless there is a very good reason - # License HeliBoard (as a fork of OpenBoard) is licensed under GNU General Public License v3.0. > Permissions of this strong copyleft license are conditioned on making available complete source code of licensed works and modifications, which include larger works using a licensed work, under the same license. Copyright and license notices must be preserved. Contributors provide an express grant of patent rights. -See repo's [LICENSE](/LICENSE-GPL-3) file. +See repo's [LICENSE](/LICENSE) file. Since the app is based on Apache 2.0 licensed AOSP Keyboard, an [Apache 2.0](LICENSE-Apache-2.0) license file is provided. - The icon is licensed under [Creative Commons BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/). A [license file](LICENSE-CC-BY-SA-4.0) is also included. # Credits diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100755 index 5435a4fb9..000000000 --- a/app/build.gradle +++ /dev/null @@ -1,118 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlinx-serialization' - -android { - compileSdk 34 - buildToolsVersion = '34.0.0' - - defaultConfig { - applicationId "helium314.keyboard" - minSdkVersion 21 - targetSdkVersion 34 - versionCode 2201 - versionName '2.2' - ndk { - abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' - } - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - - buildTypes { - release { - minifyEnabled true - shrinkResources false - debuggable false - jniDebuggable false - renderscriptDebuggable false - } - nouserlib { // same as release, but does not allow the user to provide a library - minifyEnabled true - shrinkResources false - debuggable false - jniDebuggable false - renderscriptDebuggable false - } - debug { - minifyEnabled true - jniDebuggable false - applicationIdSuffix ".debug" - } - runTests { // build variant for running tests on CI that skips tests known to fail - minifyEnabled true - jniDebuggable false - } - archivesBaseName = "HeliBoard_" + defaultConfig.versionName - } - - buildFeatures { - viewBinding true - buildConfig true - } - - externalNativeBuild { - ndkBuild { - path 'src/main/jni/Android.mk' - } - } - - - ndkVersion '26.2.11394342' - - packagingOptions { - jniLibs { - // shrinks APK by 3 MB, zipped size unchanged - useLegacyPackaging true - } - } - - testOptions { - unitTests { - includeAndroidResources = true - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - - // see https://github.com/Helium314/HeliBoard/issues/477 - dependenciesInfo { - includeInApk = false - includeInBundle = false - } - - namespace "helium314.keyboard.latin" - lint { - abortOnError true - } -} - -dependencies { - // androidx - implementation 'androidx.core:core-ktx:1.13.1' - implementation 'androidx.appcompat:appcompat:1.7.0' - implementation 'androidx.preference:preference:1.2.1' - implementation 'androidx.recyclerview:recyclerview:1.3.2' - implementation 'androidx.autofill:autofill:1.1.0' - - // kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3" - - // color picker for user-defined colors - implementation 'com.github.martin-stone:hsv-alpha-color-picker-android:3.1.0' - - // test - testImplementation 'junit:junit:4.13.2' - testImplementation 'org.mockito:mockito-core:5.11.0' - testImplementation 'org.mockito:mockito-inline:5.2.0' - testImplementation 'org.robolectric:robolectric:4.12.1' - testImplementation 'androidx.test:runner:1.5.2' - testImplementation 'androidx.test:core:1.5.0' -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100755 index 000000000..a2d08146f --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,132 @@ +plugins { + id("com.android.application") + kotlin("android") + kotlin("plugin.serialization") version "2.1.21" + kotlin("plugin.compose") version "2.0.0" +} + +android { + compileSdk = 35 + + defaultConfig { + applicationId = "helium314.keyboard" + minSdk = 21 + targetSdk = 35 + versionCode = 3101 + versionName = "3.1" + ndk { + abiFilters.clear() + abiFilters.addAll(listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")) + } + proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = true + isShrinkResources = false + isDebuggable = false + isJniDebuggable = false + } + create("nouserlib") { // same as release, but does not allow the user to provide a library + isMinifyEnabled = true + isShrinkResources = false + isDebuggable = false + isJniDebuggable = false + } + debug { + // "normal" debug has minify for smaller APK to fit the GitHub 25 MB limit when zipped + // and for better performance in case users want to install a debug APK + isMinifyEnabled = true + isJniDebuggable = false + applicationIdSuffix = ".debug" + } + create("runTests") { // build variant for running tests on CI that skips tests known to fail + isMinifyEnabled = false + isJniDebuggable = false + } + create("debugNoMinify") { // for faster builds in IDE + isDebuggable = true + isMinifyEnabled = false + isJniDebuggable = false + signingConfig = signingConfigs.getByName("debug") + applicationIdSuffix = ".debug" + } + base.archivesBaseName = "HeliBoard_" + defaultConfig.versionName + } + + buildFeatures { + viewBinding = true + buildConfig = true + compose = true + } + + externalNativeBuild { + ndkBuild { + path = File("src/main/jni/Android.mk") + } + } + ndkVersion = "28.0.13004108" + + packaging { + jniLibs { + // shrinks APK by 3 MB, zipped size unchanged + useLegacyPackaging = true + } + } + + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + // see https://github.com/Helium314/HeliBoard/issues/477 + dependenciesInfo { + includeInApk = false + includeInBundle = false + } + + namespace = "helium314.keyboard.latin" + lint { + abortOnError = true + } +} + +dependencies { + // androidx + implementation("androidx.core:core-ktx:1.16.0") + implementation("androidx.recyclerview:recyclerview:1.4.0") + implementation("androidx.autofill:autofill:1.1.0") + implementation("androidx.viewpager2:viewpager2:1.1.0") + + // kotlin + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1") + + // compose + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") + implementation(platform("androidx.compose:compose-bom:2025.05.00")) + implementation("androidx.compose.material3:material3") + implementation("androidx.compose.ui:ui-tooling-preview") + debugImplementation("androidx.compose.ui:ui-tooling") + implementation("androidx.navigation:navigation-compose:2.9.0") + implementation("sh.calvin.reorderable:reorderable:2.4.3") // for easier re-ordering + implementation("com.github.skydoves:colorpicker-compose:1.1.2") // for user-defined colors + + // test + testImplementation(kotlin("test")) + testImplementation("junit:junit:4.13.2") + testImplementation("org.mockito:mockito-core:5.17.0") + testImplementation("org.robolectric:robolectric:4.14.1") + testImplementation("androidx.test:runner:1.6.2") + testImplementation("androidx.test:core:1.6.1") +} diff --git a/app/src/debugNoMinify/res/values/strings.xml b/app/src/debugNoMinify/res/values/strings.xml new file mode 100644 index 000000000..73f1a95de --- /dev/null +++ b/app/src/debugNoMinify/res/values/strings.xml @@ -0,0 +1,9 @@ + + + + HeliBoard debug + HeliBoard debug Spell Checker + HeliBoard debug Settings + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0cee5671..a7dcab1e6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,7 +5,8 @@ modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - + @@ -20,7 +21,9 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only android:supportsRtl="true" android:allowBackup="true" android:defaultToDeviceProtectedStorage="true" - android:directBootAware="true"> + android:directBootAware="true" + tools:remove="android:appComponentFactory" + tools:targetApi="p"> - - - - - - - - - - - - - - - - @@ -92,8 +68,8 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only @@ -122,7 +98,15 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - + + + + + + + + + diff --git a/app/src/main/assets/dictionaries_in_dict_repo.csv b/app/src/main/assets/dictionaries_in_dict_repo.csv index 07ee4b2d8..5ceab4f16 100644 --- a/app/src/main/assets/dictionaries_in_dict_repo.csv +++ b/app/src/main/assets/dictionaries_in_dict_repo.csv @@ -1,109 +1,116 @@ +main,af,exp main,ar, +main,ar,exp main,hy, main,as, +main,bn_BD,exp main,bn, +main,bn,exp main,eu, main,be, main,bg, +main,bg,exp main,ca, +main,ca,exp main,hr, +main,hr,exp main,cs, +main,cs,exp main,da, +main,da,exp main,nl, +main,nl,exp main,en_AU, +main,en_CA,exp main,en_GB, +main,en_GB,exp main,en_US, +main,en_US,exp +symbols,en,exp emoji,en, main,eo, +main,eo,exp +main,et,exp main,fi, +main,fi,exp emoji,fr, +symbols,fr,exp main,fr, +main,fr,exp main,gl, +main,gl,exp main,ka, +main,de_AT,exp +main,de_CH, main,de, +main,de,exp main,gom, main,el, main,gu, main,he, main,iw, +main,he,exp main,hi, main,hi_ZZ, main,hu, +main,hu,exp +main,is,exp +main,id,exp main,it, +main,it,exp +main,kab,exp main,kn, main,ks, +main,kk,exp +main,km, +main,la, main,lv, +main,lv,exp main,lt, +main,lt,exp main,lb, main,mai, +addon,ml_ZZ,exp main,ml, main,mr, +main,ne,exp main,nb, +main,nb,exp main,or, +main,pms,exp main,pl, +main,pl,exp main,pt_BR, main,pt_PT, +main,pt_PT,exp main,pa, main,ro, +main,ro,exp emoji,ru, main,ru, +main,ru,exp main,sa, main,sat, main,sr_ZZ, main,sr, main,sd, +main,sk,exp main,sl, +main,sl,exp main,es, +main,es,exp +main,zgh_ZZ, +main,zgh, main,sv, +main,sv,exp main,ta, main,te, main,tok, main,tcy, main,tr, +main,tr,exp emoji,uk, main,uk, -main,ur, -main,af,exp -main,ar,exp -main,bn_BD,exp -main,bn,exp -main,bg,exp -main,ca,exp -main,hr,exp -main,cs,exp -main,da,exp -main,nl,exp -main,en_GB,exp -main,en_US,exp -symbols,en,exp -main,eo,exp -main,et,exp -main,fi,exp -symbols,fr,exp -main,fr,exp -main,gl,exp -main,de_AT,exp -main,de,exp -main,he,exp -main,hu,exp -main,is,exp -main,id,exp -main,it,exp -main,kab,exp -main,kk,exp -main,lv,exp -main,lt,exp -addon,ml_ZZ,exp -main,nb,exp -main,pms,exp -main,pl,exp -main,pt_PT,exp -main,ro,exp -main,ru,exp -main,sk,exp -main,sl,exp -main,es,exp -main,sv,exp -main,tr,exp main,uk,exp +main,ur, main,vi,exp diff --git a/app/src/main/assets/emoji/ACTIVITIES.txt b/app/src/main/assets/emoji/ACTIVITIES.txt new file mode 100644 index 000000000..416ac152e --- /dev/null +++ b/app/src/main/assets/emoji/ACTIVITIES.txt @@ -0,0 +1,85 @@ +🎃 +🎄 +🎆 +🎇 +🧚 +✹ +🎈 +🎉 +🎊 +🎋 +🎍 +🎎 +🎏 +🎐 +🎑 +🧧 +🎀 +🎁 +🎗 +🎟 +🎫 +🎖 +🏆 +🏅 +🥇 +🥈 +🥉 +âšœ +⚟ +🥎 +🏀 +🏐 +🏈 +🏉 +🎟 +🥏 +🎳 +🏏 +🏑 +🏒 +🥍 +🏓 +🏞 +🥊 +🥋 +🥅 +⛳ +⛞ +🎣 +🀿 +🎜 +🎿 +🛷 +🥌 +🎯 +🪀 +🪁 +🔫 +🎱 +🔮 +🪄 +🎮 +🕹 +🎰 +🎲 +🧩 +🧞 +🪅 +🪩 +🪆 +♠ +♥ +♊ +♣ +♟ +🃏 +🀄 +🎎 +🎭 +🖌 +🎚 +🧵 +🪡 +🧶 +🪢 \ No newline at end of file diff --git a/app/src/main/assets/emoji/ANIMALS_AND_NATURE.txt b/app/src/main/assets/emoji/ANIMALS_AND_NATURE.txt new file mode 100644 index 000000000..04b714520 --- /dev/null +++ b/app/src/main/assets/emoji/ANIMALS_AND_NATURE.txt @@ -0,0 +1,159 @@ +🐵 +🐒 +🊍 +🊧 +🐶 +🐕 +🊮 +🐕‍🊺 +🐩 +🐺 +🊊 +🊝 +🐱 +🐈 +🐈‍⬛ +🊁 +🐯 +🐅 +🐆 +🐎 +🫎 +🫏 +🐎 +🊄 +🊓 +🊌 +🊬 +🐮 +🐂 +🐃 +🐄 +🐷 +🐖 +🐗 +🐜 +🐏 +🐑 +🐐 +🐪 +🐫 +🊙 +🊒 +🐘 +🊣 +🊏 +🊛 +🐭 +🐁 +🐀 +🐹 +🐰 +🐇 +🐿 +🊫 +🊔 +🊇 +🐻 +🐻‍❄ +🐚 +🐌 +🊥 +🊊 +🊚 +🊘 +🊡 +🐟 +🊃 +🐔 +🐓 +🐣 +🐀 +🐥 +🐊 +🐧 +🕊 +🊅 +🊆 +🊢 +🊉 +🊀 +🪶 +🊩 +🊚 +🊜 +🪜 +🐊‍⬛ +🪿 +🐊‍🔥 +🐞 +🐊 +🐢 +🊎 +🐍 +🐲 +🐉 +🊕 +🊖 +🐳 +🐋 +🐬 +🊭 +🐟 +🐠 +🐡 +🊈 +🐙 +🐚 +🪞 +🪌 +🊀 +🊞 +🊐 +🊑 +🊪 +🐌 +🊋 +🐛 +🐜 +🐝 +🪲 +🐞 +🊗 +🪳 +🕷 +🕞 +🊂 +🊟 +🪰 +🪱 +🊠 +💐 +🌞 +💮 +🪷 +🏵 +🌹 +🥀 +🌺 +🌻 +🌌 +🌷 +🪻 +🌱 +🪎 +🌲 +🌳 +🌎 +🌵 +🌟 +🌿 +☘ +🍀 +🍁 +🍂 +🍃 +🪹 +🪺 +🍄 +🪟 \ No newline at end of file diff --git a/app/src/main/assets/emoji/EMOTICONS.txt b/app/src/main/assets/emoji/EMOTICONS.txt new file mode 100644 index 000000000..c2b3d9ddd --- /dev/null +++ b/app/src/main/assets/emoji/EMOTICONS.txt @@ -0,0 +1,25 @@ +:-) +;-) +:-( +:-! +:-$ +B-) +=-O +:-P +:O +:-* +:-D +:\'( +:-\\ +O:-) +:-[ +(╯° +□° +╯ +┻━┻ +¯\\_ +(ツ) +_/¯ +┬─┬ +ïžµ /( +.□.\\ \ No newline at end of file diff --git a/app/src/main/assets/emoji/FLAGS.txt b/app/src/main/assets/emoji/FLAGS.txt new file mode 100644 index 000000000..c4bd83460 --- /dev/null +++ b/app/src/main/assets/emoji/FLAGS.txt @@ -0,0 +1,270 @@ +🏁 +🚩 +🎌 +🏎 +🏳 +🏳‍🌈 +🏳‍⚧ +🏎‍☠ +🇊🇚 +🇊🇩 +🇊🇪 +🇊🇫 +🇊🇬 +🇊🇮 +🇊🇱 +🇊🇲 +🇊🇎 +🇊🇶 +🇊🇷 +🇊🇞 +🇊🇹 +🇊🇺 +🇊🇌 +🇊🇜 +🇊🇿 +🇧🇊 +🇧🇧 +🇧🇩 +🇧🇪 +🇧🇫 +🇧🇬 +🇧🇭 +🇧🇮 +🇧🇯 +🇧🇱 +🇧🇲 +🇧🇳 +🇧🇎 +🇧🇶 +🇧🇷 +🇧🇞 +🇧🇹 +🇧🇻 +🇧🇌 +🇧🇟 +🇧🇿 +🇚🇊 +🇚🇚 +🇚🇩 +🇚🇫 +🇚🇬 +🇚🇭 +🇚🇮 +🇚🇰 +🇚🇱 +🇚🇲 +🇚🇳 +🇚🇎 +🇚🇵 +🇚🇶 +🇚🇷 +🇚🇺 +🇚🇻 +🇚🇌 +🇚🇜 +🇚🇟 +🇚🇿 +🇩🇪 +🇩🇬 +🇩🇯 +🇩🇰 +🇩🇲 +🇩🇎 +🇩🇿 +🇪🇊 +🇪🇚 +🇪🇪 +🇪🇬 +🇪🇭 +🇪🇷 +🇪🇞 +🇪🇹 +🇪🇺 +🇫🇮 +🇫🇯 +🇫🇰 +🇫🇲 +🇫🇎 +🇫🇷 +🇬🇊 +🇬🇧 +🇬🇩 +🇬🇪 +🇬🇫 +🇬🇬 +🇬🇭 +🇬🇮 +🇬🇱 +🇬🇲 +🇬🇳 +🇬🇵 +🇬🇶 +🇬🇷 +🇬🇞 +🇬🇹 +🇬🇺 +🇬🇌 +🇬🇟 +🇭🇰 +🇭🇲 +🇭🇳 +🇭🇷 +🇭🇹 +🇭🇺 +🇮🇚 +🇮🇩 +🇮🇪 +🇮🇱 +🇮🇲 +🇮🇳 +🇮🇎 +🇮🇶 +🇮🇷 +🇮🇞 +🇮🇹 +🇯🇪 +🇯🇲 +🇯🇎 +🇯🇵 +🇰🇪 +🇰🇬 +🇰🇭 +🇰🇮 +🇰🇲 +🇰🇳 +🇰🇵 +🇰🇷 +🇰🇌 +🇰🇟 +🇰🇿 +🇱🇊 +🇱🇧 +🇱🇚 +🇱🇮 +🇱🇰 +🇱🇷 +🇱🇞 +🇱🇹 +🇱🇺 +🇱🇻 +🇱🇟 +🇲🇊 +🇲🇚 +🇲🇩 +🇲🇪 +🇲🇫 +🇲🇬 +🇲🇭 +🇲🇰 +🇲🇱 +🇲🇲 +🇲🇳 +🇲🇎 +🇲🇵 +🇲🇶 +🇲🇷 +🇲🇞 +🇲🇹 +🇲🇺 +🇲🇻 +🇲🇌 +🇲🇜 +🇲🇟 +🇲🇿 +🇳🇊 +🇳🇚 +🇳🇪 +🇳🇫 +🇳🇬 +🇳🇮 +🇳🇱 +🇳🇎 +🇳🇵 +🇳🇷 +🇳🇺 +🇳🇿 +🇎🇲 +🇵🇊 +🇵🇪 +🇵🇫 +🇵🇬 +🇵🇭 +🇵🇰 +🇵🇱 +🇵🇲 +🇵🇳 +🇵🇷 +🇵🇞 +🇵🇹 +🇵🇌 +🇵🇟 +🇶🇊 +🇷🇪 +🇷🇎 +🇷🇞 +🇷🇺 +🇷🇌 +🇞🇊 +🇞🇧 +🇞🇚 +🇞🇩 +🇞🇪 +🇞🇬 +🇞🇭 +🇞🇮 +🇞🇯 +🇞🇰 +🇞🇱 +🇞🇲 +🇞🇳 +🇞🇎 +🇞🇷 +🇞🇞 +🇞🇹 +🇞🇻 +🇞🇜 +🇞🇟 +🇞🇿 +🇹🇊 +🇹🇚 +🇹🇩 +🇹🇫 +🇹🇬 +🇹🇭 +🇹🇯 +🇹🇰 +🇹🇱 +🇹🇲 +🇹🇳 +🇹🇎 +🇹🇷 +🇹🇹 +🇹🇻 +🇹🇌 +🇹🇿 +🇺🇊 +🇺🇬 +🇺🇲 +🇺🇳 +🇺🇞 +🇺🇟 +🇺🇿 +🇻🇊 +🇻🇚 +🇻🇪 +🇻🇬 +🇻🇮 +🇻🇳 +🇻🇺 +🇌🇫 +🇌🇞 +🇜🇰 +🇟🇪 +🇟🇹 +🇿🇊 +🇿🇲 +🇿🇌 +🏎󠁧󠁢󠁥󠁮󠁧󠁿 +🏎󠁧󠁢󠁳󠁣󠁎󠁿 +🏎󠁧󠁢󠁷󠁬󠁳󠁿 \ No newline at end of file diff --git a/app/src/main/assets/emoji/FOOD_AND_DRINK.txt b/app/src/main/assets/emoji/FOOD_AND_DRINK.txt new file mode 100644 index 000000000..cb9b5dd54 --- /dev/null +++ b/app/src/main/assets/emoji/FOOD_AND_DRINK.txt @@ -0,0 +1,131 @@ +🍇 +🍈 +🍉 +🍊 +🍋 +🍋‍🟩 +🍌 +🍍 +🥭 +🍎 +🍏 +🍐 +🍑 +🍒 +🍓 +🫐 +🥝 +🍅 +🫒 +🥥 +🥑 +🍆 +🥔 +🥕 +🌜 +🌶 +🫑 +🥒 +🥬 +🥊 +🧄 +🧅 +🥜 +🫘 +🌰 +🫚 +🫛 +🍄‍🟫 +🫜 +🍞 +🥐 +🥖 +🫓 +🥚 +🥯 +🥞 +🧇 +🧀 +🍖 +🍗 +🥩 +🥓 +🍔 +🍟 +🍕 +🌭 +🥪 +🌮 +🌯 +🫔 +🥙 +🧆 +🥚 +🍳 +🥘 +🍲 +🫕 +🥣 +🥗 +🍿 +🧈 +🧂 +🥫 +🍱 +🍘 +🍙 +🍚 +🍛 +🍜 +🍝 +🍠 +🍢 +🍣 +🍀 +🍥 +🥮 +🍡 +🥟 +🥠 +🥡 +🍊 +🍧 +🍚 +🍩 +🍪 +🎂 +🍰 +🧁 +🥧 +🍫 +🍬 +🍭 +🍮 +🍯 +🍌 +🥛 +☕ +🫖 +🍵 +🍶 +🍟 +🍷 +🍞 +🍹 +🍺 +🍻 +🥂 +🥃 +🫗 +🥀 +🧋 +🧃 +🧉 +🧊 +🥢 +🍜 +🍎 +🥄 +🔪 +🫙 +🏺 \ No newline at end of file diff --git a/app/src/main/assets/emoji/OBJECTS.txt b/app/src/main/assets/emoji/OBJECTS.txt new file mode 100644 index 000000000..38b94b0b7 --- /dev/null +++ b/app/src/main/assets/emoji/OBJECTS.txt @@ -0,0 +1,264 @@ +👓 +🕶 +🥜 +🥌 +🊺 +👔 +👕 +👖 +🧣 +🧀 +🧥 +🧊 +👗 +👘 +🥻 +🩱 +🩲 +🩳 +👙 +👚 +🪭 +👛 +👜 +👝 +🛍 +🎒 +🩎 +👞 +👟 +🥟 +🥿 +👠 +👡 +🩰 +👢 +🪮 +👑 +👒 +🎩 +🎓 +🧢 +🪖 +⛑ +📿 +💄 +💍 +💎 +🔇 +🔈 +🔉 +🔊 +📢 +📣 +📯 +🔔 +🔕 +🎌 +🎵 +🎶 +🎙 +🎚 +🎛 +🎀 +🎧 +📻 +🎷 +🪗 +🎞 +🎹 +🎺 +🎻 +🪕 +🥁 +🪘 +🪇 +🪈 +🪉 +📱 +📲 +☎ +📞 +📟 +📠 +🔋 +🪫 +🔌 +💻 +🖥 +🖚 +⌚ +🖱 +🖲 +💜 +💟 +💿 +📀 +🧮 +🎥 +🎞 +📜 +🎬 +📺 +📷 +📞 +📹 +📌 +🔍 +🔎 +🕯 +💡 +🔊 +🏮 +🪔 +📔 +📕 +📖 +📗 +📘 +📙 +📚 +📓 +📒 +📃 +📜 +📄 +📰 +🗞 +📑 +🔖 +🏷 +💰 +🪙 +💎 +💵 +💶 +💷 +💞 +💳 +🧟 +💹 +✉ +📧 +📚 +📩 +📀 +📥 +📊 +📫 +📪 +📬 +📭 +📮 +🗳 +✏ +✒ +🖋 +🖊 +🖌 +🖍 +📝 +💌 +📁 +📂 +🗂 +📅 +📆 +🗒 +🗓 +📇 +📈 +📉 +📊 +📋 +📌 +📍 +📎 +🖇 +📏 +📐 +✂ +🗃 +🗄 +🗑 +🔒 +🔓 +🔏 +🔐 +🔑 +🗝 +🔚 +🪓 +⛏ +⚒ +🛠 +🗡 +⚔ +💣 +🪃 +🏹 +🛡 +🪚 +🔧 +🪛 +🔩 +⚙ +🗜 +⚖ +🊯 +🔗 +⛓‍💥 +⛓ +🪝 +🧰 +🧲 +🪜 +🪏 +⚗ +🧪 +🧫 +🧬 +🔬 +🔭 +📡 +💉 +🩞 +💊 +🩹 +🩌 +🩺 +🩻 +🚪 +🛗 +🪞 +🪟 +🛏 +🛋 +🪑 +🚜 +🪠 +🚿 +🛁 +🪀 +🪒 +🧎 +🧷 +🧹 +🧺 +🧻 +🪣 +🧌 +🫧 +🪥 +🧜 +🧯 +🛒 +🚬 +⚰ +🪊 +⚱ +🧿 +🪬 +🗿 +🪧 +🪪 \ No newline at end of file diff --git a/app/src/main/assets/emoji/PEOPLE_AND_BODY.txt b/app/src/main/assets/emoji/PEOPLE_AND_BODY.txt new file mode 100644 index 000000000..d7ceb5bb8 --- /dev/null +++ b/app/src/main/assets/emoji/PEOPLE_AND_BODY.txt @@ -0,0 +1,386 @@ +👋 👋🏻 👋🏌 👋🏜 👋🏟 👋🏿 +🀚 🀚🏻 🀚🏌 🀚🏜 🀚🏟 🀚🏿 +🖐 🖐🏻 🖐🏌 🖐🏜 🖐🏟 🖐🏿 +✋ ✋🏻 ✋🏌 ✋🏜 ✋🏟 ✋🏿 +🖖 🖖🏻 🖖🏌 🖖🏜 🖖🏟 🖖🏿 +🫱 🫱🏻 🫱🏌 🫱🏜 🫱🏟 🫱🏿 +🫲 🫲🏻 🫲🏌 🫲🏜 🫲🏟 🫲🏿 +🫳 🫳🏻 🫳🏌 🫳🏜 🫳🏟 🫳🏿 +🫎 🫎🏻 🫎🏌 🫎🏜 🫎🏟 🫎🏿 +🫷 🫷🏻 🫷🏌 🫷🏜 🫷🏟 🫷🏿 +🫞 🫞🏻 🫞🏌 🫞🏜 🫞🏟 🫞🏿 +👌 👌🏻 👌🏌 👌🏜 👌🏟 👌🏿 +🀌 🀌🏻 🀌🏌 🀌🏜 🀌🏟 🀌🏿 +🀏 🀏🏻 🀏🏌 🀏🏜 🀏🏟 🀏🏿 +✌ ✌🏻 ✌🏌 ✌🏜 ✌🏟 ✌🏿 +🀞 🀞🏻 🀞🏌 🀞🏜 🀞🏟 🀞🏿 +🫰 🫰🏻 🫰🏌 🫰🏜 🫰🏟 🫰🏿 +🀟 🀟🏻 🀟🏌 🀟🏜 🀟🏟 🀟🏿 +🀘 🀘🏻 🀘🏌 🀘🏜 🀘🏟 🀘🏿 +🀙 🀙🏻 🀙🏌 🀙🏜 🀙🏟 🀙🏿 +👈 👈🏻 👈🏌 👈🏜 👈🏟 👈🏿 +👉 👉🏻 👉🏌 👉🏜 👉🏟 👉🏿 +👆 👆🏻 👆🏌 👆🏜 👆🏟 👆🏿 +🖕 🖕🏻 🖕🏌 🖕🏜 🖕🏟 🖕🏿 +👇 👇🏻 👇🏌 👇🏜 👇🏟 👇🏿 +☝ ☝🏻 ☝🏌 ☝🏜 ☝🏟 ☝🏿 +🫵 🫵🏻 🫵🏌 🫵🏜 🫵🏟 🫵🏿 +👍 👍🏻 👍🏌 👍🏜 👍🏟 👍🏿 +👎 👎🏻 👎🏌 👎🏜 👎🏟 👎🏿 +✊ ✊🏻 ✊🏌 ✊🏜 ✊🏟 ✊🏿 +👊 👊🏻 👊🏌 👊🏜 👊🏟 👊🏿 +🀛 🀛🏻 🀛🏌 🀛🏜 🀛🏟 🀛🏿 +🀜 🀜🏻 🀜🏌 🀜🏜 🀜🏟 🀜🏿 +👏 👏🏻 👏🏌 👏🏜 👏🏟 👏🏿 +🙌 🙌🏻 🙌🏌 🙌🏜 🙌🏟 🙌🏿 +🫶 🫶🏻 🫶🏌 🫶🏜 🫶🏟 🫶🏿 +👐 👐🏻 👐🏌 👐🏜 👐🏟 👐🏿 +🀲 🀲🏻 🀲🏌 🀲🏜 🀲🏟 🀲🏿 +🀝 🀝🏻 🀝🏌 🀝🏜 🀝🏟 🀝🏿 +🙏 🙏🏻 🙏🏌 🙏🏜 🙏🏟 🙏🏿 +✍ ✍🏻 ✍🏌 ✍🏜 ✍🏟 ✍🏿 +💅 💅🏻 💅🏌 💅🏜 💅🏟 💅🏿 +🀳 🀳🏻 🀳🏌 🀳🏜 🀳🏟 🀳🏿 +💪 💪🏻 💪🏌 💪🏜 💪🏟 💪🏿 +🊟 +🊿 +🊵 🊵🏻 🊵🏌 🊵🏜 🊵🏟 🊵🏿 +🊶 🊶🏻 🊶🏌 🊶🏜 🊶🏟 🊶🏿 +👂 👂🏻 👂🏌 👂🏜 👂🏟 👂🏿 +🊻 🊻🏻 🊻🏌 🊻🏜 🊻🏟 🊻🏿 +👃 👃🏻 👃🏌 👃🏜 👃🏟 👃🏿 +🧠 +🫀 +🫁 +🊷 +🊎 +👀 +👁 +👅 +👄 +🫊 +👶 👶🏻 👶🏌 👶🏜 👶🏟 👶🏿 +🧒 🧒🏻 🧒🏌 🧒🏜 🧒🏟 🧒🏿 +👊 👊🏻 👊🏌 👊🏜 👊🏟 👊🏿 +👧 👧🏻 👧🏌 👧🏜 👧🏟 👧🏿 +🧑 🧑🏻 🧑🏌 🧑🏜 🧑🏟 🧑🏿 +👱 👱🏻 👱🏌 👱🏜 👱🏟 👱🏿 +👚 👚🏻 👚🏌 👚🏜 👚🏟 👚🏿 +🧔 🧔🏻 🧔🏌 🧔🏜 🧔🏟 🧔🏿 +🧔‍♂ 🧔🏻‍♂ 🧔🏌‍♂ 🧔🏜‍♂ 🧔🏟‍♂ 🧔🏿‍♂ +🧔‍♀ 🧔🏻‍♀ 🧔🏌‍♀ 🧔🏜‍♀ 🧔🏟‍♀ 🧔🏿‍♀ +👚‍🊰 👚🏻‍🊰 👚🏌‍🊰 👚🏜‍🊰 👚🏟‍🊰 👚🏿‍🊰 +👚‍🊱 👚🏻‍🊱 👚🏌‍🊱 👚🏜‍🊱 👚🏟‍🊱 👚🏿‍🊱 +👚‍🊳 👚🏻‍🊳 👚🏌‍🊳 👚🏜‍🊳 👚🏟‍🊳 👚🏿‍🊳 +👚‍🊲 👚🏻‍🊲 👚🏌‍🊲 👚🏜‍🊲 👚🏟‍🊲 👚🏿‍🊲 +👩 👩🏻 👩🏌 👩🏜 👩🏟 👩🏿 +👩‍🊰 👩🏻‍🊰 👩🏌‍🊰 👩🏜‍🊰 👩🏟‍🊰 👩🏿‍🊰 +🧑‍🊰 🧑🏻‍🊰 🧑🏌‍🊰 🧑🏜‍🊰 🧑🏟‍🊰 🧑🏿‍🊰 +👩‍🊱 👩🏻‍🊱 👩🏌‍🊱 👩🏜‍🊱 👩🏟‍🊱 👩🏿‍🊱 +🧑‍🊱 🧑🏻‍🊱 🧑🏌‍🊱 🧑🏜‍🊱 🧑🏟‍🊱 🧑🏿‍🊱 +👩‍🊳 👩🏻‍🊳 👩🏌‍🊳 👩🏜‍🊳 👩🏟‍🊳 👩🏿‍🊳 +🧑‍🊳 🧑🏻‍🊳 🧑🏌‍🊳 🧑🏜‍🊳 🧑🏟‍🊳 🧑🏿‍🊳 +👩‍🊲 👩🏻‍🊲 👩🏌‍🊲 👩🏜‍🊲 👩🏟‍🊲 👩🏿‍🊲 +🧑‍🊲 🧑🏻‍🊲 🧑🏌‍🊲 🧑🏜‍🊲 🧑🏟‍🊲 🧑🏿‍🊲 +👱‍♀ 👱🏻‍♀ 👱🏌‍♀ 👱🏜‍♀ 👱🏟‍♀ 👱🏿‍♀ +👱‍♂ 👱🏻‍♂ 👱🏌‍♂ 👱🏜‍♂ 👱🏟‍♂ 👱🏿‍♂ +🧓 🧓🏻 🧓🏌 🧓🏜 🧓🏟 🧓🏿 +👎 👎🏻 👎🏌 👎🏜 👎🏟 👎🏿 +👵 👵🏻 👵🏌 👵🏜 👵🏟 👵🏿 +🙍 🙍🏻 🙍🏌 🙍🏜 🙍🏟 🙍🏿 +🙍‍♂ 🙍🏻‍♂ 🙍🏌‍♂ 🙍🏜‍♂ 🙍🏟‍♂ 🙍🏿‍♂ +🙍‍♀ 🙍🏻‍♀ 🙍🏌‍♀ 🙍🏜‍♀ 🙍🏟‍♀ 🙍🏿‍♀ +🙎 🙎🏻 🙎🏌 🙎🏜 🙎🏟 🙎🏿 +🙎‍♂ 🙎🏻‍♂ 🙎🏌‍♂ 🙎🏜‍♂ 🙎🏟‍♂ 🙎🏿‍♂ +🙎‍♀ 🙎🏻‍♀ 🙎🏌‍♀ 🙎🏜‍♀ 🙎🏟‍♀ 🙎🏿‍♀ +🙅 🙅🏻 🙅🏌 🙅🏜 🙅🏟 🙅🏿 +🙅‍♂ 🙅🏻‍♂ 🙅🏌‍♂ 🙅🏜‍♂ 🙅🏟‍♂ 🙅🏿‍♂ +🙅‍♀ 🙅🏻‍♀ 🙅🏌‍♀ 🙅🏜‍♀ 🙅🏟‍♀ 🙅🏿‍♀ +🙆 🙆🏻 🙆🏌 🙆🏜 🙆🏟 🙆🏿 +🙆‍♂ 🙆🏻‍♂ 🙆🏌‍♂ 🙆🏜‍♂ 🙆🏟‍♂ 🙆🏿‍♂ +🙆‍♀ 🙆🏻‍♀ 🙆🏌‍♀ 🙆🏜‍♀ 🙆🏟‍♀ 🙆🏿‍♀ +💁 💁🏻 💁🏌 💁🏜 💁🏟 💁🏿 +💁‍♂ 💁🏻‍♂ 💁🏌‍♂ 💁🏜‍♂ 💁🏟‍♂ 💁🏿‍♂ +💁‍♀ 💁🏻‍♀ 💁🏌‍♀ 💁🏜‍♀ 💁🏟‍♀ 💁🏿‍♀ +🙋 🙋🏻 🙋🏌 🙋🏜 🙋🏟 🙋🏿 +🙋‍♂ 🙋🏻‍♂ 🙋🏌‍♂ 🙋🏜‍♂ 🙋🏟‍♂ 🙋🏿‍♂ +🙋‍♀ 🙋🏻‍♀ 🙋🏌‍♀ 🙋🏜‍♀ 🙋🏟‍♀ 🙋🏿‍♀ +🧏 🧏🏻 🧏🏌 🧏🏜 🧏🏟 🧏🏿 +🧏‍♂ 🧏🏻‍♂ 🧏🏌‍♂ 🧏🏜‍♂ 🧏🏟‍♂ 🧏🏿‍♂ +🧏‍♀ 🧏🏻‍♀ 🧏🏌‍♀ 🧏🏜‍♀ 🧏🏟‍♀ 🧏🏿‍♀ +🙇 🙇🏻 🙇🏌 🙇🏜 🙇🏟 🙇🏿 +🙇‍♂ 🙇🏻‍♂ 🙇🏌‍♂ 🙇🏜‍♂ 🙇🏟‍♂ 🙇🏿‍♂ +🙇‍♀ 🙇🏻‍♀ 🙇🏌‍♀ 🙇🏜‍♀ 🙇🏟‍♀ 🙇🏿‍♀ +🀊 🀊🏻 🀊🏌 🀊🏜 🀊🏟 🀊🏿 +🀊‍♂ 🀊🏻‍♂ 🀊🏌‍♂ 🀊🏜‍♂ 🀊🏟‍♂ 🀊🏿‍♂ +🀊‍♀ 🀊🏻‍♀ 🀊🏌‍♀ 🀊🏜‍♀ 🀊🏟‍♀ 🀊🏿‍♀ +🀷 🀷🏻 🀷🏌 🀷🏜 🀷🏟 🀷🏿 +🀷‍♂ 🀷🏻‍♂ 🀷🏌‍♂ 🀷🏜‍♂ 🀷🏟‍♂ 🀷🏿‍♂ +🀷‍♀ 🀷🏻‍♀ 🀷🏌‍♀ 🀷🏜‍♀ 🀷🏟‍♀ 🀷🏿‍♀ +🧑‍⚕ 🧑🏻‍⚕ 🧑🏌‍⚕ 🧑🏜‍⚕ 🧑🏟‍⚕ 🧑🏿‍⚕ +👚‍⚕ 👚🏻‍⚕ 👚🏌‍⚕ 👚🏜‍⚕ 👚🏟‍⚕ 👚🏿‍⚕ +👩‍⚕ 👩🏻‍⚕ 👩🏌‍⚕ 👩🏜‍⚕ 👩🏟‍⚕ 👩🏿‍⚕ +🧑‍🎓 🧑🏻‍🎓 🧑🏌‍🎓 🧑🏜‍🎓 🧑🏟‍🎓 🧑🏿‍🎓 +👚‍🎓 👚🏻‍🎓 👚🏌‍🎓 👚🏜‍🎓 👚🏟‍🎓 👚🏿‍🎓 +👩‍🎓 👩🏻‍🎓 👩🏌‍🎓 👩🏜‍🎓 👩🏟‍🎓 👩🏿‍🎓 +🧑‍🏫 🧑🏻‍🏫 🧑🏌‍🏫 🧑🏜‍🏫 🧑🏟‍🏫 🧑🏿‍🏫 +👚‍🏫 👚🏻‍🏫 👚🏌‍🏫 👚🏜‍🏫 👚🏟‍🏫 👚🏿‍🏫 +👩‍🏫 👩🏻‍🏫 👩🏌‍🏫 👩🏜‍🏫 👩🏟‍🏫 👩🏿‍🏫 +🧑‍⚖ 🧑🏻‍⚖ 🧑🏌‍⚖ 🧑🏜‍⚖ 🧑🏟‍⚖ 🧑🏿‍⚖ +👚‍⚖ 👚🏻‍⚖ 👚🏌‍⚖ 👚🏜‍⚖ 👚🏟‍⚖ 👚🏿‍⚖ +👩‍⚖ 👩🏻‍⚖ 👩🏌‍⚖ 👩🏜‍⚖ 👩🏟‍⚖ 👩🏿‍⚖ +🧑‍🌟 🧑🏻‍🌟 🧑🏌‍🌟 🧑🏜‍🌟 🧑🏟‍🌟 🧑🏿‍🌟 +👚‍🌟 👚🏻‍🌟 👚🏌‍🌟 👚🏜‍🌟 👚🏟‍🌟 👚🏿‍🌟 +👩‍🌟 👩🏻‍🌟 👩🏌‍🌟 👩🏜‍🌟 👩🏟‍🌟 👩🏿‍🌟 +🧑‍🍳 🧑🏻‍🍳 🧑🏌‍🍳 🧑🏜‍🍳 🧑🏟‍🍳 🧑🏿‍🍳 +👚‍🍳 👚🏻‍🍳 👚🏌‍🍳 👚🏜‍🍳 👚🏟‍🍳 👚🏿‍🍳 +👩‍🍳 👩🏻‍🍳 👩🏌‍🍳 👩🏜‍🍳 👩🏟‍🍳 👩🏿‍🍳 +🧑‍🔧 🧑🏻‍🔧 🧑🏌‍🔧 🧑🏜‍🔧 🧑🏟‍🔧 🧑🏿‍🔧 +👚‍🔧 👚🏻‍🔧 👚🏌‍🔧 👚🏜‍🔧 👚🏟‍🔧 👚🏿‍🔧 +👩‍🔧 👩🏻‍🔧 👩🏌‍🔧 👩🏜‍🔧 👩🏟‍🔧 👩🏿‍🔧 +🧑‍🏭 🧑🏻‍🏭 🧑🏌‍🏭 🧑🏜‍🏭 🧑🏟‍🏭 🧑🏿‍🏭 +👚‍🏭 👚🏻‍🏭 👚🏌‍🏭 👚🏜‍🏭 👚🏟‍🏭 👚🏿‍🏭 +👩‍🏭 👩🏻‍🏭 👩🏌‍🏭 👩🏜‍🏭 👩🏟‍🏭 👩🏿‍🏭 +🧑‍💌 🧑🏻‍💌 🧑🏌‍💌 🧑🏜‍💌 🧑🏟‍💌 🧑🏿‍💌 +👚‍💌 👚🏻‍💌 👚🏌‍💌 👚🏜‍💌 👚🏟‍💌 👚🏿‍💌 +👩‍💌 👩🏻‍💌 👩🏌‍💌 👩🏜‍💌 👩🏟‍💌 👩🏿‍💌 +🧑‍🔬 🧑🏻‍🔬 🧑🏌‍🔬 🧑🏜‍🔬 🧑🏟‍🔬 🧑🏿‍🔬 +👚‍🔬 👚🏻‍🔬 👚🏌‍🔬 👚🏜‍🔬 👚🏟‍🔬 👚🏿‍🔬 +👩‍🔬 👩🏻‍🔬 👩🏌‍🔬 👩🏜‍🔬 👩🏟‍🔬 👩🏿‍🔬 +🧑‍💻 🧑🏻‍💻 🧑🏌‍💻 🧑🏜‍💻 🧑🏟‍💻 🧑🏿‍💻 +👚‍💻 👚🏻‍💻 👚🏌‍💻 👚🏜‍💻 👚🏟‍💻 👚🏿‍💻 +👩‍💻 👩🏻‍💻 👩🏌‍💻 👩🏜‍💻 👩🏟‍💻 👩🏿‍💻 +🧑‍🎀 🧑🏻‍🎀 🧑🏌‍🎀 🧑🏜‍🎀 🧑🏟‍🎀 🧑🏿‍🎀 +👚‍🎀 👚🏻‍🎀 👚🏌‍🎀 👚🏜‍🎀 👚🏟‍🎀 👚🏿‍🎀 +👩‍🎀 👩🏻‍🎀 👩🏌‍🎀 👩🏜‍🎀 👩🏟‍🎀 👩🏿‍🎀 +🧑‍🎚 🧑🏻‍🎚 🧑🏌‍🎚 🧑🏜‍🎚 🧑🏟‍🎚 🧑🏿‍🎚 +👚‍🎚 👚🏻‍🎚 👚🏌‍🎚 👚🏜‍🎚 👚🏟‍🎚 👚🏿‍🎚 +👩‍🎚 👩🏻‍🎚 👩🏌‍🎚 👩🏜‍🎚 👩🏟‍🎚 👩🏿‍🎚 +🧑‍✈ 🧑🏻‍✈ 🧑🏌‍✈ 🧑🏜‍✈ 🧑🏟‍✈ 🧑🏿‍✈ +👚‍✈ 👚🏻‍✈ 👚🏌‍✈ 👚🏜‍✈ 👚🏟‍✈ 👚🏿‍✈ +👩‍✈ 👩🏻‍✈ 👩🏌‍✈ 👩🏜‍✈ 👩🏟‍✈ 👩🏿‍✈ +🧑‍🚀 🧑🏻‍🚀 🧑🏌‍🚀 🧑🏜‍🚀 🧑🏟‍🚀 🧑🏿‍🚀 +👚‍🚀 👚🏻‍🚀 👚🏌‍🚀 👚🏜‍🚀 👚🏟‍🚀 👚🏿‍🚀 +👩‍🚀 👩🏻‍🚀 👩🏌‍🚀 👩🏜‍🚀 👩🏟‍🚀 👩🏿‍🚀 +🧑‍🚒 🧑🏻‍🚒 🧑🏌‍🚒 🧑🏜‍🚒 🧑🏟‍🚒 🧑🏿‍🚒 +👚‍🚒 👚🏻‍🚒 👚🏌‍🚒 👚🏜‍🚒 👚🏟‍🚒 👚🏿‍🚒 +👩‍🚒 👩🏻‍🚒 👩🏌‍🚒 👩🏜‍🚒 👩🏟‍🚒 👩🏿‍🚒 +👮 👮🏻 👮🏌 👮🏜 👮🏟 👮🏿 +👮‍♂ 👮🏻‍♂ 👮🏌‍♂ 👮🏜‍♂ 👮🏟‍♂ 👮🏿‍♂ +👮‍♀ 👮🏻‍♀ 👮🏌‍♀ 👮🏜‍♀ 👮🏟‍♀ 👮🏿‍♀ +🕵 🕵🏻 🕵🏌 🕵🏜 🕵🏟 🕵🏿 +🕵‍♂ 🕵🏻‍♂ 🕵🏌‍♂ 🕵🏜‍♂ 🕵🏟‍♂ 🕵🏿‍♂ +🕵‍♀ 🕵🏻‍♀ 🕵🏌‍♀ 🕵🏜‍♀ 🕵🏟‍♀ 🕵🏿‍♀ +💂 💂🏻 💂🏌 💂🏜 💂🏟 💂🏿 +💂‍♂ 💂🏻‍♂ 💂🏌‍♂ 💂🏜‍♂ 💂🏟‍♂ 💂🏿‍♂ +💂‍♀ 💂🏻‍♀ 💂🏌‍♀ 💂🏜‍♀ 💂🏟‍♀ 💂🏿‍♀ +🥷 🥷🏻 🥷🏌 🥷🏜 🥷🏟 🥷🏿 +👷 👷🏻 👷🏌 👷🏜 👷🏟 👷🏿 +👷‍♂ 👷🏻‍♂ 👷🏌‍♂ 👷🏜‍♂ 👷🏟‍♂ 👷🏿‍♂ +👷‍♀ 👷🏻‍♀ 👷🏌‍♀ 👷🏜‍♀ 👷🏟‍♀ 👷🏿‍♀ +🫅 🫅🏻 🫅🏌 🫅🏜 🫅🏟 🫅🏿 +🀎 🀎🏻 🀎🏌 🀎🏜 🀎🏟 🀎🏿 +👞 👞🏻 👞🏌 👞🏜 👞🏟 👞🏿 +👳 👳🏻 👳🏌 👳🏜 👳🏟 👳🏿 +👳‍♂ 👳🏻‍♂ 👳🏌‍♂ 👳🏜‍♂ 👳🏟‍♂ 👳🏿‍♂ +👳‍♀ 👳🏻‍♀ 👳🏌‍♀ 👳🏜‍♀ 👳🏟‍♀ 👳🏿‍♀ +👲 👲🏻 👲🏌 👲🏜 👲🏟 👲🏿 +🧕 🧕🏻 🧕🏌 🧕🏜 🧕🏟 🧕🏿 +🀵 🀵🏻 🀵🏌 🀵🏜 🀵🏟 🀵🏿 +🀵‍♂ 🀵🏻‍♂ 🀵🏌‍♂ 🀵🏜‍♂ 🀵🏟‍♂ 🀵🏿‍♂ +🀵‍♀ 🀵🏻‍♀ 🀵🏌‍♀ 🀵🏜‍♀ 🀵🏟‍♀ 🀵🏿‍♀ +👰 👰🏻 👰🏌 👰🏜 👰🏟 👰🏿 +👰‍♂ 👰🏻‍♂ 👰🏌‍♂ 👰🏜‍♂ 👰🏟‍♂ 👰🏿‍♂ +👰‍♀ 👰🏻‍♀ 👰🏌‍♀ 👰🏜‍♀ 👰🏟‍♀ 👰🏿‍♀ +🀰 🀰🏻 🀰🏌 🀰🏜 🀰🏟 🀰🏿 +🫃 🫃🏻 🫃🏌 🫃🏜 🫃🏟 🫃🏿 +🫄 🫄🏻 🫄🏌 🫄🏜 🫄🏟 🫄🏿 +🀱 🀱🏻 🀱🏌 🀱🏜 🀱🏟 🀱🏿 +👩‍🍌 👩🏻‍🍌 👩🏌‍🍌 👩🏜‍🍌 👩🏟‍🍌 👩🏿‍🍌 +👚‍🍌 👚🏻‍🍌 👚🏌‍🍌 👚🏜‍🍌 👚🏟‍🍌 👚🏿‍🍌 +🧑‍🍌 🧑🏻‍🍌 🧑🏌‍🍌 🧑🏜‍🍌 🧑🏟‍🍌 🧑🏿‍🍌 +👌 👌🏻 👌🏌 👌🏜 👌🏟 👌🏿 +🎅 🎅🏻 🎅🏌 🎅🏜 🎅🏟 🎅🏿 +🀶 🀶🏻 🀶🏌 🀶🏜 🀶🏟 🀶🏿 +🧑‍🎄 🧑🏻‍🎄 🧑🏌‍🎄 🧑🏜‍🎄 🧑🏟‍🎄 🧑🏿‍🎄 +🊞 🊞🏻 🊞🏌 🊞🏜 🊞🏟 🊞🏿 +🊞‍♂ 🊞🏻‍♂ 🊞🏌‍♂ 🊞🏜‍♂ 🊞🏟‍♂ 🊞🏿‍♂ +🊞‍♀ 🊞🏻‍♀ 🊞🏌‍♀ 🊞🏜‍♀ 🊞🏟‍♀ 🊞🏿‍♀ +🊹 🊹🏻 🊹🏌 🊹🏜 🊹🏟 🊹🏿 +🊹‍♂ 🊹🏻‍♂ 🊹🏌‍♂ 🊹🏜‍♂ 🊹🏟‍♂ 🊹🏿‍♂ +🊹‍♀ 🊹🏻‍♀ 🊹🏌‍♀ 🊹🏜‍♀ 🊹🏟‍♀ 🊹🏿‍♀ +🧙 🧙🏻 🧙🏌 🧙🏜 🧙🏟 🧙🏿 +🧙‍♂ 🧙🏻‍♂ 🧙🏌‍♂ 🧙🏜‍♂ 🧙🏟‍♂ 🧙🏿‍♂ +🧙‍♀ 🧙🏻‍♀ 🧙🏌‍♀ 🧙🏜‍♀ 🧙🏟‍♀ 🧙🏿‍♀ +🧚 🧚🏻 🧚🏌 🧚🏜 🧚🏟 🧚🏿 +🧚‍♂ 🧚🏻‍♂ 🧚🏌‍♂ 🧚🏜‍♂ 🧚🏟‍♂ 🧚🏿‍♂ +🧚‍♀ 🧚🏻‍♀ 🧚🏌‍♀ 🧚🏜‍♀ 🧚🏟‍♀ 🧚🏿‍♀ +🧛 🧛🏻 🧛🏌 🧛🏜 🧛🏟 🧛🏿 +🧛‍♂ 🧛🏻‍♂ 🧛🏌‍♂ 🧛🏜‍♂ 🧛🏟‍♂ 🧛🏿‍♂ +🧛‍♀ 🧛🏻‍♀ 🧛🏌‍♀ 🧛🏜‍♀ 🧛🏟‍♀ 🧛🏿‍♀ +🧜 🧜🏻 🧜🏌 🧜🏜 🧜🏟 🧜🏿 +🧜‍♂ 🧜🏻‍♂ 🧜🏌‍♂ 🧜🏜‍♂ 🧜🏟‍♂ 🧜🏿‍♂ +🧜‍♀ 🧜🏻‍♀ 🧜🏌‍♀ 🧜🏜‍♀ 🧜🏟‍♀ 🧜🏿‍♀ +🧝 🧝🏻 🧝🏌 🧝🏜 🧝🏟 🧝🏿 +🧝‍♂ 🧝🏻‍♂ 🧝🏌‍♂ 🧝🏜‍♂ 🧝🏟‍♂ 🧝🏿‍♂ +🧝‍♀ 🧝🏻‍♀ 🧝🏌‍♀ 🧝🏜‍♀ 🧝🏟‍♀ 🧝🏿‍♀ +🧞 +🧞‍♂ +🧞‍♀ +🧟 +🧟‍♂ +🧟‍♀ +🧌 +💆 💆🏻 💆🏌 💆🏜 💆🏟 💆🏿 +💆‍♂ 💆🏻‍♂ 💆🏌‍♂ 💆🏜‍♂ 💆🏟‍♂ 💆🏿‍♂ +💆‍♀ 💆🏻‍♀ 💆🏌‍♀ 💆🏜‍♀ 💆🏟‍♀ 💆🏿‍♀ +💇 💇🏻 💇🏌 💇🏜 💇🏟 💇🏿 +💇‍♂ 💇🏻‍♂ 💇🏌‍♂ 💇🏜‍♂ 💇🏟‍♂ 💇🏿‍♂ +💇‍♀ 💇🏻‍♀ 💇🏌‍♀ 💇🏜‍♀ 💇🏟‍♀ 💇🏿‍♀ +🚶 🚶🏻 🚶🏌 🚶🏜 🚶🏟 🚶🏿 +🚶‍♂ 🚶🏻‍♂ 🚶🏌‍♂ 🚶🏜‍♂ 🚶🏟‍♂ 🚶🏿‍♂ +🚶‍♀ 🚶🏻‍♀ 🚶🏌‍♀ 🚶🏜‍♀ 🚶🏟‍♀ 🚶🏿‍♀ +🚶‍➡ 🚶🏻‍➡ 🚶🏌‍➡ 🚶🏜‍➡ 🚶🏟‍➡ 🚶🏿‍➡ +🚶‍♀‍➡ 🚶🏻‍♀‍➡ 🚶🏌‍♀‍➡ 🚶🏜‍♀‍➡ 🚶🏟‍♀‍➡ 🚶🏿‍♀‍➡ +🚶‍♂‍➡ 🚶🏻‍♂‍➡ 🚶🏌‍♂‍➡ 🚶🏜‍♂‍➡ 🚶🏟‍♂‍➡ 🚶🏿‍♂‍➡ +🧍 🧍🏻 🧍🏌 🧍🏜 🧍🏟 🧍🏿 +🧍‍♂ 🧍🏻‍♂ 🧍🏌‍♂ 🧍🏜‍♂ 🧍🏟‍♂ 🧍🏿‍♂ +🧍‍♀ 🧍🏻‍♀ 🧍🏌‍♀ 🧍🏜‍♀ 🧍🏟‍♀ 🧍🏿‍♀ +🧎 🧎🏻 🧎🏌 🧎🏜 🧎🏟 🧎🏿 +🧎‍♂ 🧎🏻‍♂ 🧎🏌‍♂ 🧎🏜‍♂ 🧎🏟‍♂ 🧎🏿‍♂ +🧎‍♀ 🧎🏻‍♀ 🧎🏌‍♀ 🧎🏜‍♀ 🧎🏟‍♀ 🧎🏿‍♀ +🧎‍➡ 🧎🏻‍➡ 🧎🏌‍➡ 🧎🏜‍➡ 🧎🏟‍➡ 🧎🏿‍➡ +🧎‍♀‍➡ 🧎🏻‍♀‍➡ 🧎🏌‍♀‍➡ 🧎🏜‍♀‍➡ 🧎🏟‍♀‍➡ 🧎🏿‍♀‍➡ +🧎‍♂‍➡ 🧎🏻‍♂‍➡ 🧎🏌‍♂‍➡ 🧎🏜‍♂‍➡ 🧎🏟‍♂‍➡ 🧎🏿‍♂‍➡ +🧑‍🊯 🧑🏻‍🊯 🧑🏌‍🊯 🧑🏜‍🊯 🧑🏟‍🊯 🧑🏿‍🊯 +🧑‍🊯‍➡ 🧑🏻‍🊯‍➡ 🧑🏌‍🊯‍➡ 🧑🏜‍🊯‍➡ 🧑🏟‍🊯‍➡ 🧑🏿‍🊯‍➡ +👚‍🊯 👚🏻‍🊯 👚🏌‍🊯 👚🏜‍🊯 👚🏟‍🊯 👚🏿‍🊯 +👚‍🊯‍➡ 👚🏻‍🊯‍➡ 👚🏌‍🊯‍➡ 👚🏜‍🊯‍➡ 👚🏟‍🊯‍➡ 👚🏿‍🊯‍➡ +👩‍🊯 👩🏻‍🊯 👩🏌‍🊯 👩🏜‍🊯 👩🏟‍🊯 👩🏿‍🊯 +👩‍🊯‍➡ 👩🏻‍🊯‍➡ 👩🏌‍🊯‍➡ 👩🏜‍🊯‍➡ 👩🏟‍🊯‍➡ 👩🏿‍🊯‍➡ +🧑‍🊌 🧑🏻‍🊌 🧑🏌‍🊌 🧑🏜‍🊌 🧑🏟‍🊌 🧑🏿‍🊌 +🧑‍🊌‍➡ 🧑🏻‍🊌‍➡ 🧑🏌‍🊌‍➡ 🧑🏜‍🊌‍➡ 🧑🏟‍🊌‍➡ 🧑🏿‍🊌‍➡ +👚‍🊌 👚🏻‍🊌 👚🏌‍🊌 👚🏜‍🊌 👚🏟‍🊌 👚🏿‍🊌 +👚‍🊌‍➡ 👚🏻‍🊌‍➡ 👚🏌‍🊌‍➡ 👚🏜‍🊌‍➡ 👚🏟‍🊌‍➡ 👚🏿‍🊌‍➡ +👩‍🊌 👩🏻‍🊌 👩🏌‍🊌 👩🏜‍🊌 👩🏟‍🊌 👩🏿‍🊌 +👩‍🊌‍➡ 👩🏻‍🊌‍➡ 👩🏌‍🊌‍➡ 👩🏜‍🊌‍➡ 👩🏟‍🊌‍➡ 👩🏿‍🊌‍➡ +🧑‍🊜 🧑🏻‍🊜 🧑🏌‍🊜 🧑🏜‍🊜 🧑🏟‍🊜 🧑🏿‍🊜 +🧑‍🊜‍➡ 🧑🏻‍🊜‍➡ 🧑🏌‍🊜‍➡ 🧑🏜‍🊜‍➡ 🧑🏟‍🊜‍➡ 🧑🏿‍🊜‍➡ +👚‍🊜 👚🏻‍🊜 👚🏌‍🊜 👚🏜‍🊜 👚🏟‍🊜 👚🏿‍🊜 +👚‍🊜‍➡ 👚🏻‍🊜‍➡ 👚🏌‍🊜‍➡ 👚🏜‍🊜‍➡ 👚🏟‍🊜‍➡ 👚🏿‍🊜‍➡ +👩‍🊜 👩🏻‍🊜 👩🏌‍🊜 👩🏜‍🊜 👩🏟‍🊜 👩🏿‍🊜 +👩‍🊜‍➡ 👩🏻‍🊜‍➡ 👩🏌‍🊜‍➡ 👩🏜‍🊜‍➡ 👩🏟‍🊜‍➡ 👩🏿‍🊜‍➡ +🏃 🏃🏻 🏃🏌 🏃🏜 🏃🏟 🏃🏿 +🏃‍♂ 🏃🏻‍♂ 🏃🏌‍♂ 🏃🏜‍♂ 🏃🏟‍♂ 🏃🏿‍♂ +🏃‍♀ 🏃🏻‍♀ 🏃🏌‍♀ 🏃🏜‍♀ 🏃🏟‍♀ 🏃🏿‍♀ +🏃‍➡ 🏃🏻‍➡ 🏃🏌‍➡ 🏃🏜‍➡ 🏃🏟‍➡ 🏃🏿‍➡ +🏃‍♀‍➡ 🏃🏻‍♀‍➡ 🏃🏌‍♀‍➡ 🏃🏜‍♀‍➡ 🏃🏟‍♀‍➡ 🏃🏿‍♀‍➡ +🏃‍♂‍➡ 🏃🏻‍♂‍➡ 🏃🏌‍♂‍➡ 🏃🏜‍♂‍➡ 🏃🏟‍♂‍➡ 🏃🏿‍♂‍➡ +💃 💃🏻 💃🏌 💃🏜 💃🏟 💃🏿 +🕺 🕺🏻 🕺🏌 🕺🏜 🕺🏟 🕺🏿 +🕎 🕎🏻 🕎🏌 🕎🏜 🕎🏟 🕎🏿 +👯 +👯‍♂ +👯‍♀ +🧖 🧖🏻 🧖🏌 🧖🏜 🧖🏟 🧖🏿 +🧖‍♂ 🧖🏻‍♂ 🧖🏌‍♂ 🧖🏜‍♂ 🧖🏟‍♂ 🧖🏿‍♂ +🧖‍♀ 🧖🏻‍♀ 🧖🏌‍♀ 🧖🏜‍♀ 🧖🏟‍♀ 🧖🏿‍♀ +🧗 🧗🏻 🧗🏌 🧗🏜 🧗🏟 🧗🏿 +🧗‍♂ 🧗🏻‍♂ 🧗🏌‍♂ 🧗🏜‍♂ 🧗🏟‍♂ 🧗🏿‍♂ +🧗‍♀ 🧗🏻‍♀ 🧗🏌‍♀ 🧗🏜‍♀ 🧗🏟‍♀ 🧗🏿‍♀ +🀺 +🏇 🏇🏻 🏇🏌 🏇🏜 🏇🏟 🏇🏿 +⛷ +🏂 🏂🏻 🏂🏌 🏂🏜 🏂🏟 🏂🏿 +🏌 🏌🏻 🏌🏌 🏌🏜 🏌🏟 🏌🏿 +🏌‍♂ 🏌🏻‍♂ 🏌🏌‍♂ 🏌🏜‍♂ 🏌🏟‍♂ 🏌🏿‍♂ +🏌‍♀ 🏌🏻‍♀ 🏌🏌‍♀ 🏌🏜‍♀ 🏌🏟‍♀ 🏌🏿‍♀ +🏄 🏄🏻 🏄🏌 🏄🏜 🏄🏟 🏄🏿 +🏄‍♂ 🏄🏻‍♂ 🏄🏌‍♂ 🏄🏜‍♂ 🏄🏟‍♂ 🏄🏿‍♂ +🏄‍♀ 🏄🏻‍♀ 🏄🏌‍♀ 🏄🏜‍♀ 🏄🏟‍♀ 🏄🏿‍♀ +🚣 🚣🏻 🚣🏌 🚣🏜 🚣🏟 🚣🏿 +🚣‍♂ 🚣🏻‍♂ 🚣🏌‍♂ 🚣🏜‍♂ 🚣🏟‍♂ 🚣🏿‍♂ +🚣‍♀ 🚣🏻‍♀ 🚣🏌‍♀ 🚣🏜‍♀ 🚣🏟‍♀ 🚣🏿‍♀ +🏊 🏊🏻 🏊🏌 🏊🏜 🏊🏟 🏊🏿 +🏊‍♂ 🏊🏻‍♂ 🏊🏌‍♂ 🏊🏜‍♂ 🏊🏟‍♂ 🏊🏿‍♂ +🏊‍♀ 🏊🏻‍♀ 🏊🏌‍♀ 🏊🏜‍♀ 🏊🏟‍♀ 🏊🏿‍♀ +⛹ ⛹🏻 ⛹🏌 ⛹🏜 ⛹🏟 ⛹🏿 +⛹‍♂ ⛹🏻‍♂ ⛹🏌‍♂ ⛹🏜‍♂ ⛹🏟‍♂ ⛹🏿‍♂ +⛹‍♀ ⛹🏻‍♀ ⛹🏌‍♀ ⛹🏜‍♀ ⛹🏟‍♀ ⛹🏿‍♀ +🏋 🏋🏻 🏋🏌 🏋🏜 🏋🏟 🏋🏿 +🏋‍♂ 🏋🏻‍♂ 🏋🏌‍♂ 🏋🏜‍♂ 🏋🏟‍♂ 🏋🏿‍♂ +🏋‍♀ 🏋🏻‍♀ 🏋🏌‍♀ 🏋🏜‍♀ 🏋🏟‍♀ 🏋🏿‍♀ +🚎 🚎🏻 🚎🏌 🚎🏜 🚎🏟 🚎🏿 +🚎‍♂ 🚎🏻‍♂ 🚎🏌‍♂ 🚎🏜‍♂ 🚎🏟‍♂ 🚎🏿‍♂ +🚎‍♀ 🚎🏻‍♀ 🚎🏌‍♀ 🚎🏜‍♀ 🚎🏟‍♀ 🚎🏿‍♀ +🚵 🚵🏻 🚵🏌 🚵🏜 🚵🏟 🚵🏿 +🚵‍♂ 🚵🏻‍♂ 🚵🏌‍♂ 🚵🏜‍♂ 🚵🏟‍♂ 🚵🏿‍♂ +🚵‍♀ 🚵🏻‍♀ 🚵🏌‍♀ 🚵🏜‍♀ 🚵🏟‍♀ 🚵🏿‍♀ +🀞 🀞🏻 🀞🏌 🀞🏜 🀞🏟 🀞🏿 +🀞‍♂ 🀞🏻‍♂ 🀞🏌‍♂ 🀞🏜‍♂ 🀞🏟‍♂ 🀞🏿‍♂ +🀞‍♀ 🀞🏻‍♀ 🀞🏌‍♀ 🀞🏜‍♀ 🀞🏟‍♀ 🀞🏿‍♀ +🀌 +🀌‍♂ +🀌‍♀ +🀜 🀜🏻 🀜🏌 🀜🏜 🀜🏟 🀜🏿 +🀜‍♂ 🀜🏻‍♂ 🀜🏌‍♂ 🀜🏜‍♂ 🀜🏟‍♂ 🀜🏿‍♂ +🀜‍♀ 🀜🏻‍♀ 🀜🏌‍♀ 🀜🏜‍♀ 🀜🏟‍♀ 🀜🏿‍♀ +🀟 🀟🏻 🀟🏌 🀟🏜 🀟🏟 🀟🏿 +🀟‍♂ 🀟🏻‍♂ 🀟🏌‍♂ 🀟🏜‍♂ 🀟🏟‍♂ 🀟🏿‍♂ +🀟‍♀ 🀟🏻‍♀ 🀟🏌‍♀ 🀟🏜‍♀ 🀟🏟‍♀ 🀟🏿‍♀ +🀹 🀹🏻 🀹🏌 🀹🏜 🀹🏟 🀹🏿 +🀹‍♂ 🀹🏻‍♂ 🀹🏌‍♂ 🀹🏜‍♂ 🀹🏟‍♂ 🀹🏿‍♂ +🀹‍♀ 🀹🏻‍♀ 🀹🏌‍♀ 🀹🏜‍♀ 🀹🏟‍♀ 🀹🏿‍♀ +🧘 🧘🏻 🧘🏌 🧘🏜 🧘🏟 🧘🏿 +🧘‍♂ 🧘🏻‍♂ 🧘🏌‍♂ 🧘🏜‍♂ 🧘🏟‍♂ 🧘🏿‍♂ +🧘‍♀ 🧘🏻‍♀ 🧘🏌‍♀ 🧘🏜‍♀ 🧘🏟‍♀ 🧘🏿‍♀ +🛀 🛀🏻 🛀🏌 🛀🏜 🛀🏟 🛀🏿 +🛌 🛌🏻 🛌🏌 🛌🏜 🛌🏟 🛌🏿 +🧑‍🀝‍🧑 🧑🏻‍🀝‍🧑🏻 🧑🏻‍🀝‍🧑🏌 🧑🏻‍🀝‍🧑🏜 🧑🏻‍🀝‍🧑🏟 🧑🏻‍🀝‍🧑🏿 🧑🏌‍🀝‍🧑🏻 🧑🏌‍🀝‍🧑🏌 🧑🏌‍🀝‍🧑🏜 🧑🏌‍🀝‍🧑🏟 🧑🏌‍🀝‍🧑🏿 🧑🏜‍🀝‍🧑🏻 🧑🏜‍🀝‍🧑🏌 🧑🏜‍🀝‍🧑🏜 🧑🏜‍🀝‍🧑🏟 🧑🏜‍🀝‍🧑🏿 🧑🏟‍🀝‍🧑🏻 🧑🏟‍🀝‍🧑🏌 🧑🏟‍🀝‍🧑🏜 🧑🏟‍🀝‍🧑🏟 🧑🏟‍🀝‍🧑🏿 🧑🏿‍🀝‍🧑🏻 🧑🏿‍🀝‍🧑🏌 🧑🏿‍🀝‍🧑🏜 🧑🏿‍🀝‍🧑🏟 🧑🏿‍🀝‍🧑🏿 +👭 👭🏻 👭🏌 👭🏜 👭🏟 👭🏿 +👫 👫🏻 👫🏌 👫🏜 👫🏟 👫🏿 +👬 👬🏻 👬🏌 👬🏜 👬🏟 👬🏿 +💏 💏🏻 💏🏌 💏🏜 💏🏟 💏🏿 +👩‍❀‍💋‍👚 👩🏻‍❀‍💋‍👚🏻 👩🏻‍❀‍💋‍👚🏌 👩🏻‍❀‍💋‍👚🏜 👩🏻‍❀‍💋‍👚🏟 👩🏻‍❀‍💋‍👚🏿 👩🏌‍❀‍💋‍👚🏻 👩🏌‍❀‍💋‍👚🏌 👩🏌‍❀‍💋‍👚🏜 👩🏌‍❀‍💋‍👚🏟 👩🏌‍❀‍💋‍👚🏿 👩🏜‍❀‍💋‍👚🏻 👩🏜‍❀‍💋‍👚🏌 👩🏜‍❀‍💋‍👚🏜 👩🏜‍❀‍💋‍👚🏟 👩🏜‍❀‍💋‍👚🏿 👩🏟‍❀‍💋‍👚🏻 👩🏟‍❀‍💋‍👚🏌 👩🏟‍❀‍💋‍👚🏜 👩🏟‍❀‍💋‍👚🏟 👩🏟‍❀‍💋‍👚🏿 👩🏿‍❀‍💋‍👚🏻 👩🏿‍❀‍💋‍👚🏌 👩🏿‍❀‍💋‍👚🏜 👩🏿‍❀‍💋‍👚🏟 👩🏿‍❀‍💋‍👚🏿 +👚‍❀‍💋‍👚 👚🏻‍❀‍💋‍👚🏻 👚🏻‍❀‍💋‍👚🏌 👚🏻‍❀‍💋‍👚🏜 👚🏻‍❀‍💋‍👚🏟 👚🏻‍❀‍💋‍👚🏿 👚🏌‍❀‍💋‍👚🏻 👚🏌‍❀‍💋‍👚🏌 👚🏌‍❀‍💋‍👚🏜 👚🏌‍❀‍💋‍👚🏟 👚🏌‍❀‍💋‍👚🏿 👚🏜‍❀‍💋‍👚🏻 👚🏜‍❀‍💋‍👚🏌 👚🏜‍❀‍💋‍👚🏜 👚🏜‍❀‍💋‍👚🏟 👚🏜‍❀‍💋‍👚🏿 👚🏟‍❀‍💋‍👚🏻 👚🏟‍❀‍💋‍👚🏌 👚🏟‍❀‍💋‍👚🏜 👚🏟‍❀‍💋‍👚🏟 👚🏟‍❀‍💋‍👚🏿 👚🏿‍❀‍💋‍👚🏻 👚🏿‍❀‍💋‍👚🏌 👚🏿‍❀‍💋‍👚🏜 👚🏿‍❀‍💋‍👚🏟 👚🏿‍❀‍💋‍👚🏿 +👩‍❀‍💋‍👩 👩🏻‍❀‍💋‍👩🏻 👩🏻‍❀‍💋‍👩🏌 👩🏻‍❀‍💋‍👩🏜 👩🏻‍❀‍💋‍👩🏟 👩🏻‍❀‍💋‍👩🏿 👩🏌‍❀‍💋‍👩🏻 👩🏌‍❀‍💋‍👩🏌 👩🏌‍❀‍💋‍👩🏜 👩🏌‍❀‍💋‍👩🏟 👩🏌‍❀‍💋‍👩🏿 👩🏜‍❀‍💋‍👩🏻 👩🏜‍❀‍💋‍👩🏌 👩🏜‍❀‍💋‍👩🏜 👩🏜‍❀‍💋‍👩🏟 👩🏜‍❀‍💋‍👩🏿 👩🏟‍❀‍💋‍👩🏻 👩🏟‍❀‍💋‍👩🏌 👩🏟‍❀‍💋‍👩🏜 👩🏟‍❀‍💋‍👩🏟 👩🏟‍❀‍💋‍👩🏿 👩🏿‍❀‍💋‍👩🏻 👩🏿‍❀‍💋‍👩🏌 👩🏿‍❀‍💋‍👩🏜 👩🏿‍❀‍💋‍👩🏟 👩🏿‍❀‍💋‍👩🏿 +💑 💑🏻 💑🏌 💑🏜 💑🏟 💑🏿 +👩‍❀‍👚 👩🏻‍❀‍👚🏻 👩🏻‍❀‍👚🏌 👩🏻‍❀‍👚🏜 👩🏻‍❀‍👚🏟 👩🏻‍❀‍👚🏿 👩🏌‍❀‍👚🏻 👩🏌‍❀‍👚🏌 👩🏌‍❀‍👚🏜 👩🏌‍❀‍👚🏟 👩🏌‍❀‍👚🏿 👩🏜‍❀‍👚🏻 👩🏜‍❀‍👚🏌 👩🏜‍❀‍👚🏜 👩🏜‍❀‍👚🏟 👩🏜‍❀‍👚🏿 👩🏟‍❀‍👚🏻 👩🏟‍❀‍👚🏌 👩🏟‍❀‍👚🏜 👩🏟‍❀‍👚🏟 👩🏟‍❀‍👚🏿 👩🏿‍❀‍👚🏻 👩🏿‍❀‍👚🏌 👩🏿‍❀‍👚🏜 👩🏿‍❀‍👚🏟 👩🏿‍❀‍👚🏿 +👚‍❀‍👚 👚🏻‍❀‍👚🏻 👚🏻‍❀‍👚🏌 👚🏻‍❀‍👚🏜 👚🏻‍❀‍👚🏟 👚🏻‍❀‍👚🏿 👚🏌‍❀‍👚🏻 👚🏌‍❀‍👚🏌 👚🏌‍❀‍👚🏜 👚🏌‍❀‍👚🏟 👚🏌‍❀‍👚🏿 👚🏜‍❀‍👚🏻 👚🏜‍❀‍👚🏌 👚🏜‍❀‍👚🏜 👚🏜‍❀‍👚🏟 👚🏜‍❀‍👚🏿 👚🏟‍❀‍👚🏻 👚🏟‍❀‍👚🏌 👚🏟‍❀‍👚🏜 👚🏟‍❀‍👚🏟 👚🏟‍❀‍👚🏿 👚🏿‍❀‍👚🏻 👚🏿‍❀‍👚🏌 👚🏿‍❀‍👚🏜 👚🏿‍❀‍👚🏟 👚🏿‍❀‍👚🏿 +👩‍❀‍👩 👩🏻‍❀‍👩🏻 👩🏻‍❀‍👩🏌 👩🏻‍❀‍👩🏜 👩🏻‍❀‍👩🏟 👩🏻‍❀‍👩🏿 👩🏌‍❀‍👩🏻 👩🏌‍❀‍👩🏌 👩🏌‍❀‍👩🏜 👩🏌‍❀‍👩🏟 👩🏌‍❀‍👩🏿 👩🏜‍❀‍👩🏻 👩🏜‍❀‍👩🏌 👩🏜‍❀‍👩🏜 👩🏜‍❀‍👩🏟 👩🏜‍❀‍👩🏿 👩🏟‍❀‍👩🏻 👩🏟‍❀‍👩🏌 👩🏟‍❀‍👩🏜 👩🏟‍❀‍👩🏟 👩🏟‍❀‍👩🏿 👩🏿‍❀‍👩🏻 👩🏿‍❀‍👩🏌 👩🏿‍❀‍👩🏜 👩🏿‍❀‍👩🏟 👩🏿‍❀‍👩🏿 +👚‍👩‍👊 +👚‍👩‍👧 +👚‍👩‍👧‍👊 +👚‍👩‍👊‍👊 +👚‍👩‍👧‍👧 +👚‍👚‍👊 +👚‍👚‍👧 +👚‍👚‍👧‍👊 +👚‍👚‍👊‍👊 +👚‍👚‍👧‍👧 +👩‍👩‍👊 +👩‍👩‍👧 +👩‍👩‍👧‍👊 +👩‍👩‍👊‍👊 +👩‍👩‍👧‍👧 +👚‍👊 +👚‍👊‍👊 +👚‍👧 +👚‍👧‍👊 +👚‍👧‍👧 +👩‍👊 +👩‍👊‍👊 +👩‍👧 +👩‍👧‍👊 +👩‍👧‍👧 +🗣 +👀 +👥 +🫂 +👪 +🧑‍🧑‍🧒 +🧑‍🧑‍🧒‍🧒 +🧑‍🧒 +🧑‍🧒‍🧒 +👣 +🫆 \ No newline at end of file diff --git a/app/src/main/assets/emoji/SMILEYS_AND_EMOTION.txt b/app/src/main/assets/emoji/SMILEYS_AND_EMOTION.txt new file mode 100644 index 000000000..73218d6fe --- /dev/null +++ b/app/src/main/assets/emoji/SMILEYS_AND_EMOTION.txt @@ -0,0 +1,169 @@ +😀 +😃 +😄 +😁 +😆 +😅 +🀣 +😂 +🙂 +🙃 +🫠 +😉 +😊 +😇 +🥰 +😍 +🀩 +😘 +😗 +☺ +😚 +😙 +🥲 +😋 +😛 +😜 +🀪 +😝 +🀑 +🀗 +🀭 +🫢 +🫣 +🀫 +🀔 +🫡 +🀐 +🀚 +😐 +😑 +😶 +🫥 +😶‍🌫 +😏 +😒 +🙄 +😬 +😮‍💚 +🀥 +🫚 +🙂‍↔ +🙂‍↕ +😌 +😔 +😪 +🀀 +😎 +🫩 +😷 +🀒 +🀕 +🀢 +🀮 +🀧 +🥵 +🥶 +🥎 +😵 +😵‍💫 +🀯 +🀠 +🥳 +🥞 +😎 +🀓 +🧐 +😕 +🫀 +😟 +🙁 +☹ +😮 +😯 +😲 +😳 +🥺 +🥹 +😊 +😧 +😚 +😰 +😥 +😢 +😭 +😱 +😖 +😣 +😞 +😓 +😩 +😫 +🥱 +😀 +😡 +😠 +🀬 +😈 +👿 +💀 +☠ +💩 +🀡 +👹 +👺 +👻 +👜 +👟 +🀖 +😺 +😞 +😹 +😻 +😌 +😜 +🙀 +😿 +😟 +🙈 +🙉 +🙊 +💌 +💘 +💝 +💖 +💗 +💓 +💞 +💕 +💟 +❣ +💔 +❀‍🔥 +❀‍🩹 +❀ +🩷 +🧡 +💛 +💚 +💙 +🩵 +💜 +🀎 +🖀 +🩶 +🀍 +💋 +💯 +💢 +💥 +💫 +💊 +💚 +🕳 +💬 +👁‍🗚 +🗚 +🗯 +💭 +💀 \ No newline at end of file diff --git a/app/src/main/assets/emoji/SYMBOLS.txt b/app/src/main/assets/emoji/SYMBOLS.txt new file mode 100644 index 000000000..f85cc13bb --- /dev/null +++ b/app/src/main/assets/emoji/SYMBOLS.txt @@ -0,0 +1,250 @@ +🏧 +🚮 +🚰 +♿ +🚹 +🚺 +🚻 +🚌 +🚟 +🛂 +🛃 +🛄 +🛅 +⚠ +🚞 +⛔ +🚫 +🚳 +🚭 +🚯 +🚱 +🚷 +📵 +🔞 +☢ +☣ +⬆ +↗ +➡ +↘ +⬇ +↙ +⬅ +↖ +↕ +↔ +↩ +↪ +‎ +‵ +🔃 +🔄 +🔙 +🔚 +🔛 +🔜 +🔝 +🛐 +⚛ +🕉 +✡ +☞ +☯ +✝ +☊ +☪ +☮ +🕎 +🔯 +🪯 +♈ +♉ +♊ +♋ +♌ +♍ +♎ +♏ +♐ +♑ +♒ +♓ +⛎ +🔀 +🔁 +🔂 +▶ +⏩ +⏭ +⏯ +◀ +⏪ +⏮ +🔌 +⏫ +🔜 +⏬ +⏞ +⏹ +⏺ +⏏ +🎊 +🔅 +🔆 +📶 +🛜 +📳 +📎 +♀ +♂ +⚧ +✖ +➕ +➖ +➗ +🟰 +♟ +‌ +⁉ +❓ +❔ +❕ +❗ +〰 +💱 +💲 +⚕ +♻ +⚜ +🔱 +📛 +🔰 +⭕ +✅ +☑ +✔ +❌ +❎ +➰ +➿ +〜 +✳ +✎ +❇ +© +® +™ +🫟 +🇊 +🇧 +🇚 +🇩 +🇪 +🇫 +🇬 +🇭 +🇮 +🇯 +🇰 +🇱 +🇲 +🇳 +🇎 +🇵 +🇶 +🇷 +🇞 +🇹 +🇺 +🇻 +🇌 +🇜 +🇟 +🇿 +#⃣ +*⃣ +0⃣ +1⃣ +2⃣ +3⃣ +4⃣ +5⃣ +6⃣ +7⃣ +8⃣ +9⃣ +🔟 +🔠 +🔡 +🔢 +🔣 +🔀 +🅰 +🆎 +🅱 +🆑 +🆒 +🆓 +ℹ +🆔 +Ⓜ +🆕 +🆖 +🅟 +🆗 +🅿 +🆘 +🆙 +🆚 +🈁 +🈂 +🈷 +🈶 +🈯 +🉐 +🈹 +🈚 +🈲 +🉑 +🈞 +🈎 +🈳 +㊗ +㊙ +🈺 +🈵 +🔎 +🟠 +🟡 +🟢 +🔵 +🟣 +🟀 +⚫ +⚪ +🟥 +🟧 +🟚 +🟩 +🟊 +🟪 +🟫 +⬛ +⬜ +◌ +◻ +â—Ÿ +â—œ +▪ +▫ +🔶 +🔷 +🔞 +🔹 +🔺 +🔻 +💠 +🔘 +🔳 +🔲 \ No newline at end of file diff --git a/app/src/main/assets/emoji/TRAVEL_AND_PLACES.txt b/app/src/main/assets/emoji/TRAVEL_AND_PLACES.txt new file mode 100644 index 000000000..ff1f0ad4a --- /dev/null +++ b/app/src/main/assets/emoji/TRAVEL_AND_PLACES.txt @@ -0,0 +1,218 @@ +🌍 +🌎 +🌏 +🌐 +🗺 +🗟 +🧭 +🏔 +⛰ +🌋 +🗻 +🏕 +🏖 +🏜 +🏝 +🏞 +🏟 +🏛 +🏗 +🧱 +🪚 +🪵 +🛖 +🏘 +🏚 +🏠 +🏡 +🏢 +🏣 +🏀 +🏥 +🏊 +🏚 +🏩 +🏪 +🏫 +🏬 +🏭 +🏯 +🏰 +💒 +🗌 +🗜 +⛪ +🕌 +🛕 +🕍 +⛩ +🕋 +⛲ +⛺ +🌁 +🌃 +🏙 +🌄 +🌅 +🌆 +🌇 +🌉 +♚ +🎠 +🛝 +🎡 +🎢 +💈 +🎪 +🚂 +🚃 +🚄 +🚅 +🚆 +🚇 +🚈 +🚉 +🚊 +🚝 +🚞 +🚋 +🚌 +🚍 +🚎 +🚐 +🚑 +🚒 +🚓 +🚔 +🚕 +🚖 +🚗 +🚘 +🚙 +🛻 +🚚 +🚛 +🚜 +🏎 +🏍 +🛵 +🊜 +🊌 +🛺 +🚲 +🛎 +🛹 +🛌 +🚏 +🛣 +🛀 +🛢 +⛜ +🛞 +🚚 +🚥 +🚊 +🛑 +🚧 +⚓ +🛟 +⛵ +🛶 +🚀 +🛳 +⛎ +🛥 +🚢 +✈ +🛩 +🛫 +🛬 +🪂 +💺 +🚁 +🚟 +🚠 +🚡 +🛰 +🚀 +🛞 +🛎 +🧳 +⌛ +⏳ +⌚ +⏰ +⏱ +⏲ +🕰 +🕛 +🕧 +🕐 +🕜 +🕑 +🕝 +🕒 +🕞 +🕓 +🕟 +🕔 +🕠 +🕕 +🕡 +🕖 +🕢 +🕗 +🕣 +🕘 +🕀 +🕙 +🕥 +🕚 +🕊 +🌑 +🌒 +🌓 +🌔 +🌕 +🌖 +🌗 +🌘 +🌙 +🌚 +🌛 +🌜 +🌡 +☀ +🌝 +🌞 +🪐 +⭐ +🌟 +🌠 +🌌 +☁ +⛅ +⛈ +🌀 +🌥 +🌊 +🌧 +🌚 +🌩 +🌪 +🌫 +🌬 +🌀 +🌈 +🌂 +☂ +☔ +⛱ +⚡ +❄ +☃ +⛄ +☄ +🔥 +💧 +🌊 \ No newline at end of file diff --git a/app/src/main/assets/emoji/minApi.txt b/app/src/main/assets/emoji/minApi.txt new file mode 100644 index 000000000..842da2d6b --- /dev/null +++ b/app/src/main/assets/emoji/minApi.txt @@ -0,0 +1,12 @@ +23 🙂 🙃 🀑 🀗 🀔 🀐 🙄 🀒 🀕 🀓 🙁 ☹ ☠ 🀖 ❣ 🕳 👁‍🗚 🗚 🗯 🖐 🖖 🀘 🖕 ✍ 👁 🕵 🕎 ⛷ 🏌 ⛹ 🏋 🛌 👚‍❀‍💋‍👚 👩‍❀‍💋‍👩 👚‍❀‍👚 👩‍❀‍👩 👚‍👩‍👧 👚‍👩‍👧‍👊 👚‍👩‍👊‍👊 👚‍👩‍👧‍👧 👚‍👚‍👊 👚‍👚‍👧 👚‍👚‍👧‍👊 👚‍👚‍👊‍👊 👚‍👚‍👧‍👧 👩‍👩‍👊 👩‍👩‍👧 👩‍👩‍👧‍👊 👩‍👩‍👊‍👊 👩‍👩‍👧‍👧 🗣 🊁 🊄 🐿 🊃 🕊 🊀 🕷 🕞 🊂 🏵 ☘ 🌶 🧀 🌭 🌮 🌯 🍿 🍟 🍜 🏺 🗺 🏔 ⛰ 🏕 🏖 🏜 🏝 🏞 🏟 🏛 🏗 🏘 🏚 🕌 🕍 ⛩ 🕋 🏙 🏎 🏍 🛣 🛀 🛢 🛳 ⛎ 🛥 🛩 🛫 🛬 🛰 🛎 ⏱ ⏲ 🕰 🌡 ⛈ 🌀 🌥 🌊 🌧 🌚 🌩 🌪 🌫 🌬 ☂ ⛱ ☃ ☄ 🎗 🎟 🎖 🏅 🏐 🏏 🏑 🏒 🏓 🏞 ⛞ 🕹 🖌 🕶 🛍 ⛑ 📿 🎙 🎚 🎛 🖥 🖚 ⌚ 🖱 🖲 🎞 📜 📞 🕯 🗞 🏷 🗳 🖋 🖊 🖌 🖍 🗂 🗒 🗓 🖇 🗃 🗄 🗑 🗝 ⛏ ⚒ 🛠 🗡 ⚔ 🏹 🛡 ⚙ 🗜 ⚖ ⛓ ⚗ 🛏 🛋 ⚰ ⚱ ☢ ☣ 🛐 ⚛ 🕉 ✡ ☞ ☯ ✝ ☊ ☪ ☮ 🕎 ⏭ ⏯ ⏮ ⏞ ⏹ ⏺ ⏏ ⚜ *⃣ 🏎 🏳 +24 🀣 🀥 🀀 🀢 🀧 🀠 🀡 🖀 👋🏻 👋🏌 👋🏜 👋🏟 👋🏿 🀚 🀚🏻 🀚🏌 🀚🏜 🀚🏟 🀚🏿 🖐🏻 🖐🏌 🖐🏜 🖐🏟 🖐🏿 ✋🏻 ✋🏌 ✋🏜 ✋🏟 ✋🏿 🖖🏻 🖖🏌 🖖🏜 🖖🏟 🖖🏿 👌🏻 👌🏌 👌🏜 👌🏟 👌🏿 ✌🏻 ✌🏌 ✌🏜 ✌🏟 ✌🏿 🀞 🀞🏻 🀞🏌 🀞🏜 🀞🏟 🀞🏿 🀘🏻 🀘🏌 🀘🏜 🀘🏟 🀘🏿 🀙 🀙🏻 🀙🏌 🀙🏜 🀙🏟 🀙🏿 👈🏻 👈🏌 👈🏜 👈🏟 👈🏿 👉🏻 👉🏌 👉🏜 👉🏟 👉🏿 👆🏻 👆🏌 👆🏜 👆🏟 👆🏿 🖕🏻 🖕🏌 🖕🏜 🖕🏟 🖕🏿 👇🏻 👇🏌 👇🏜 👇🏟 👇🏿 ☝🏻 ☝🏌 ☝🏜 ☝🏟 ☝🏿 👍🏻 👍🏌 👍🏜 👍🏟 👍🏿 👎🏻 👎🏌 👎🏜 👎🏟 👎🏿 ✊🏻 ✊🏌 ✊🏜 ✊🏟 ✊🏿 👊🏻 👊🏌 👊🏜 👊🏟 👊🏿 🀛 🀛🏻 🀛🏌 🀛🏜 🀛🏟 🀛🏿 🀜 🀜🏻 🀜🏌 🀜🏜 🀜🏟 🀜🏿 👏🏻 👏🏌 👏🏜 👏🏟 👏🏿 🙌🏻 🙌🏌 🙌🏜 🙌🏟 🙌🏿 👐🏻 👐🏌 👐🏜 👐🏟 👐🏿 🀝 🙏🏻 🙏🏌 🙏🏜 🙏🏟 🙏🏿 ✍🏻 ✍🏌 ✍🏜 ✍🏟 ✍🏿 💅🏻 💅🏌 💅🏜 💅🏟 💅🏿 🀳 🀳🏻 🀳🏌 🀳🏜 🀳🏟 🀳🏿 💪🏻 💪🏌 💪🏜 💪🏟 💪🏿 👂🏻 👂🏌 👂🏜 👂🏟 👂🏿 👃🏻 👃🏌 👃🏜 👃🏟 👃🏿 👶🏻 👶🏌 👶🏜 👶🏟 👶🏿 👊🏻 👊🏌 👊🏜 👊🏟 👊🏿 👧🏻 👧🏌 👧🏜 👧🏟 👧🏿 👱🏻 👱🏌 👱🏜 👱🏟 👱🏿 👚🏻 👚🏌 👚🏜 👚🏟 👚🏿 👩🏻 👩🏌 👩🏜 👩🏟 👩🏿 👎🏻 👎🏌 👎🏜 👎🏟 👎🏿 👵🏻 👵🏌 👵🏜 👵🏟 👵🏿 🙍🏻 🙍🏌 🙍🏜 🙍🏟 🙍🏿 🙎🏻 🙎🏌 🙎🏜 🙎🏟 🙎🏿 🙅🏻 🙅🏌 🙅🏜 🙅🏟 🙅🏿 🙆🏻 🙆🏌 🙆🏜 🙆🏟 🙆🏿 💁🏻 💁🏌 💁🏜 💁🏟 💁🏿 🙋🏻 🙋🏌 🙋🏜 🙋🏟 🙋🏿 🙇🏻 🙇🏌 🙇🏜 🙇🏟 🙇🏿 🀊 🀊🏻 🀊🏌 🀊🏜 🀊🏟 🀊🏿 🀷 🀷🏻 🀷🏌 🀷🏜 🀷🏟 🀷🏿 👮🏻 👮🏌 👮🏜 👮🏟 👮🏿 🕵🏻 🕵🏌 🕵🏜 🕵🏟 🕵🏿 💂🏻 💂🏌 💂🏜 💂🏟 💂🏿 👷🏻 👷🏌 👷🏜 👷🏟 👷🏿 🀎 🀎🏻 🀎🏌 🀎🏜 🀎🏟 🀎🏿 👞🏻 👞🏌 👞🏜 👞🏟 👞🏿 👳🏻 👳🏌 👳🏜 👳🏟 👳🏿 👲🏻 👲🏌 👲🏜 👲🏟 👲🏿 🀵 🀵🏻 🀵🏌 🀵🏜 🀵🏟 🀵🏿 👰🏻 👰🏌 👰🏜 👰🏟 👰🏿 🀰 🀰🏻 🀰🏌 🀰🏜 🀰🏟 🀰🏿 👌🏻 👌🏌 👌🏜 👌🏟 👌🏿 🎅🏻 🎅🏌 🎅🏜 🎅🏟 🎅🏿 🀶 🀶🏻 🀶🏌 🀶🏜 🀶🏟 🀶🏿 💆🏻 💆🏌 💆🏜 💆🏟 💆🏿 💇🏻 💇🏌 💇🏜 💇🏟 💇🏿 🚶🏻 🚶🏌 🚶🏜 🚶🏟 🚶🏿 🏃🏻 🏃🏌 🏃🏜 🏃🏟 🏃🏿 💃🏻 💃🏌 💃🏜 💃🏟 💃🏿 🕺 🕺🏻 🕺🏌 🕺🏜 🕺🏟 🕺🏿 🀺 🏄🏻 🏄🏌 🏄🏜 🏄🏟 🏄🏿 🚣🏻 🚣🏌 🚣🏜 🚣🏟 🚣🏿 🏊🏻 🏊🏌 🏊🏜 🏊🏟 🏊🏿 ⛹🏻 ⛹🏌 ⛹🏜 ⛹🏟 ⛹🏿 🏋🏻 🏋🏌 🏋🏜 🏋🏟 🏋🏿 🚎🏻 🚎🏌 🚎🏜 🚎🏟 🚎🏿 🚵🏻 🚵🏌 🚵🏜 🚵🏟 🚵🏿 🀞 🀞🏻 🀞🏌 🀞🏜 🀞🏟 🀞🏿 🀌 🀜 🀜🏻 🀜🏌 🀜🏜 🀜🏟 🀜🏿 🀟 🀟🏻 🀟🏌 🀟🏜 🀟🏟 🀟🏿 🀹 🀹🏻 🀹🏌 🀹🏜 🀹🏟 🀹🏿 🛀🏻 🛀🏌 🛀🏜 🛀🏟 🛀🏿 🊍 🊊 🊌 🊏 🊇 🊅 🊆 🊉 🊎 🊈 🊐 🊑 🊋 🥀 🥝 🥑 🥔 🥕 🥒 🥜 🥐 🥖 🥞 🥓 🥙 🥚 🥘 🥗 🥛 🥂 🥃 🥄 🛵 🛎 🛑 🛶 🥇 🥈 🥉 🥊 🥋 🥅 🥁 🛒 🇊🇚 🇊🇶 🇧🇻 🇚🇵 🇭🇲 🇮🇚 🇞🇭 🇞🇯 🇹🇊 🇺🇲 +25 🀝🏻 🀝🏌 🀝🏜 🀝🏟 🀝🏿 👱‍♀ 👱🏻‍♀ 👱🏌‍♀ 👱🏜‍♀ 👱🏟‍♀ 👱🏿‍♀ 👱‍♂ 👱🏻‍♂ 👱🏌‍♂ 👱🏜‍♂ 👱🏟‍♂ 👱🏿‍♂ 🙍‍♂ 🙍🏻‍♂ 🙍🏌‍♂ 🙍🏜‍♂ 🙍🏟‍♂ 🙍🏿‍♂ 🙍‍♀ 🙍🏻‍♀ 🙍🏌‍♀ 🙍🏜‍♀ 🙍🏟‍♀ 🙍🏿‍♀ 🙎‍♂ 🙎🏻‍♂ 🙎🏌‍♂ 🙎🏜‍♂ 🙎🏟‍♂ 🙎🏿‍♂ 🙎‍♀ 🙎🏻‍♀ 🙎🏌‍♀ 🙎🏜‍♀ 🙎🏟‍♀ 🙎🏿‍♀ 🙅‍♂ 🙅🏻‍♂ 🙅🏌‍♂ 🙅🏜‍♂ 🙅🏟‍♂ 🙅🏿‍♂ 🙅‍♀ 🙅🏻‍♀ 🙅🏌‍♀ 🙅🏜‍♀ 🙅🏟‍♀ 🙅🏿‍♀ 🙆‍♂ 🙆🏻‍♂ 🙆🏌‍♂ 🙆🏜‍♂ 🙆🏟‍♂ 🙆🏿‍♂ 🙆‍♀ 🙆🏻‍♀ 🙆🏌‍♀ 🙆🏜‍♀ 🙆🏟‍♀ 🙆🏿‍♀ 💁‍♂ 💁🏻‍♂ 💁🏌‍♂ 💁🏜‍♂ 💁🏟‍♂ 💁🏿‍♂ 💁‍♀ 💁🏻‍♀ 💁🏌‍♀ 💁🏜‍♀ 💁🏟‍♀ 💁🏿‍♀ 🙋‍♂ 🙋🏻‍♂ 🙋🏌‍♂ 🙋🏜‍♂ 🙋🏟‍♂ 🙋🏿‍♂ 🙋‍♀ 🙋🏻‍♀ 🙋🏌‍♀ 🙋🏜‍♀ 🙋🏟‍♀ 🙋🏿‍♀ 🙇‍♂ 🙇🏻‍♂ 🙇🏌‍♂ 🙇🏜‍♂ 🙇🏟‍♂ 🙇🏿‍♂ 🙇‍♀ 🙇🏻‍♀ 🙇🏌‍♀ 🙇🏜‍♀ 🙇🏟‍♀ 🙇🏿‍♀ 🀊‍♂ 🀊🏻‍♂ 🀊🏌‍♂ 🀊🏜‍♂ 🀊🏟‍♂ 🀊🏿‍♂ 🀊‍♀ 🀊🏻‍♀ 🀊🏌‍♀ 🀊🏜‍♀ 🀊🏟‍♀ 🀊🏿‍♀ 🀷‍♂ 🀷🏻‍♂ 🀷🏌‍♂ 🀷🏜‍♂ 🀷🏟‍♂ 🀷🏿‍♂ 🀷‍♀ 🀷🏻‍♀ 🀷🏌‍♀ 🀷🏜‍♀ 🀷🏟‍♀ 🀷🏿‍♀ 👚‍⚕ 👚🏻‍⚕ 👚🏌‍⚕ 👚🏜‍⚕ 👚🏟‍⚕ 👚🏿‍⚕ 👩‍⚕ 👩🏻‍⚕ 👩🏌‍⚕ 👩🏜‍⚕ 👩🏟‍⚕ 👩🏿‍⚕ 👚‍🎓 👚🏻‍🎓 👚🏌‍🎓 👚🏜‍🎓 👚🏟‍🎓 👚🏿‍🎓 👩‍🎓 👩🏻‍🎓 👩🏌‍🎓 👩🏜‍🎓 👩🏟‍🎓 👩🏿‍🎓 👚‍🏫 👚🏻‍🏫 👚🏌‍🏫 👚🏜‍🏫 👚🏟‍🏫 👚🏿‍🏫 👩‍🏫 👩🏻‍🏫 👩🏌‍🏫 👩🏜‍🏫 👩🏟‍🏫 👩🏿‍🏫 👚‍⚖ 👚🏻‍⚖ 👚🏌‍⚖ 👚🏜‍⚖ 👚🏟‍⚖ 👚🏿‍⚖ 👩‍⚖ 👩🏻‍⚖ 👩🏌‍⚖ 👩🏜‍⚖ 👩🏟‍⚖ 👩🏿‍⚖ 👚‍🌟 👚🏻‍🌟 👚🏌‍🌟 👚🏜‍🌟 👚🏟‍🌟 👚🏿‍🌟 👩‍🌟 👩🏻‍🌟 👩🏌‍🌟 👩🏜‍🌟 👩🏟‍🌟 👩🏿‍🌟 👚‍🍳 👚🏻‍🍳 👚🏌‍🍳 👚🏜‍🍳 👚🏟‍🍳 👚🏿‍🍳 👩‍🍳 👩🏻‍🍳 👩🏌‍🍳 👩🏜‍🍳 👩🏟‍🍳 👩🏿‍🍳 👚‍🔧 👚🏻‍🔧 👚🏌‍🔧 👚🏜‍🔧 👚🏟‍🔧 👚🏿‍🔧 👩‍🔧 👩🏻‍🔧 👩🏌‍🔧 👩🏜‍🔧 👩🏟‍🔧 👩🏿‍🔧 👚‍🏭 👚🏻‍🏭 👚🏌‍🏭 👚🏜‍🏭 👚🏟‍🏭 👚🏿‍🏭 👩‍🏭 👩🏻‍🏭 👩🏌‍🏭 👩🏜‍🏭 👩🏟‍🏭 👩🏿‍🏭 👚‍💌 👚🏻‍💌 👚🏌‍💌 👚🏜‍💌 👚🏟‍💌 👚🏿‍💌 👩‍💌 👩🏻‍💌 👩🏌‍💌 👩🏜‍💌 👩🏟‍💌 👩🏿‍💌 👚‍🔬 👚🏻‍🔬 👚🏌‍🔬 👚🏜‍🔬 👚🏟‍🔬 👚🏿‍🔬 👩‍🔬 👩🏻‍🔬 👩🏌‍🔬 👩🏜‍🔬 👩🏟‍🔬 👩🏿‍🔬 👚‍💻 👚🏻‍💻 👚🏌‍💻 👚🏜‍💻 👚🏟‍💻 👚🏿‍💻 👩‍💻 👩🏻‍💻 👩🏌‍💻 👩🏜‍💻 👩🏟‍💻 👩🏿‍💻 👚‍🎀 👚🏻‍🎀 👚🏌‍🎀 👚🏜‍🎀 👚🏟‍🎀 👚🏿‍🎀 👩‍🎀 👩🏻‍🎀 👩🏌‍🎀 👩🏜‍🎀 👩🏟‍🎀 👩🏿‍🎀 👚‍🎚 👚🏻‍🎚 👚🏌‍🎚 👚🏜‍🎚 👚🏟‍🎚 👚🏿‍🎚 👩‍🎚 👩🏻‍🎚 👩🏌‍🎚 👩🏜‍🎚 👩🏟‍🎚 👩🏿‍🎚 👚‍✈ 👚🏻‍✈ 👚🏌‍✈ 👚🏜‍✈ 👚🏟‍✈ 👚🏿‍✈ 👩‍✈ 👩🏻‍✈ 👩🏌‍✈ 👩🏜‍✈ 👩🏟‍✈ 👩🏿‍✈ 👚‍🚀 👚🏻‍🚀 👚🏌‍🚀 👚🏜‍🚀 👚🏟‍🚀 👚🏿‍🚀 👩‍🚀 👩🏻‍🚀 👩🏌‍🚀 👩🏜‍🚀 👩🏟‍🚀 👩🏿‍🚀 👚‍🚒 👚🏻‍🚒 👚🏌‍🚒 👚🏜‍🚒 👚🏟‍🚒 👚🏿‍🚒 👩‍🚒 👩🏻‍🚒 👩🏌‍🚒 👩🏜‍🚒 👩🏟‍🚒 👩🏿‍🚒 👮‍♂ 👮🏻‍♂ 👮🏌‍♂ 👮🏜‍♂ 👮🏟‍♂ 👮🏿‍♂ 👮‍♀ 👮🏻‍♀ 👮🏌‍♀ 👮🏜‍♀ 👮🏟‍♀ 👮🏿‍♀ 🕵‍♂ 🕵🏻‍♂ 🕵🏌‍♂ 🕵🏜‍♂ 🕵🏟‍♂ 🕵🏿‍♂ 🕵‍♀ 🕵🏻‍♀ 🕵🏌‍♀ 🕵🏜‍♀ 🕵🏟‍♀ 🕵🏿‍♀ 💂‍♂ 💂🏻‍♂ 💂🏌‍♂ 💂🏜‍♂ 💂🏟‍♂ 💂🏿‍♂ 💂‍♀ 💂🏻‍♀ 💂🏌‍♀ 💂🏜‍♀ 💂🏟‍♀ 💂🏿‍♀ 👷‍♂ 👷🏻‍♂ 👷🏌‍♂ 👷🏜‍♂ 👷🏟‍♂ 👷🏿‍♂ 👷‍♀ 👷🏻‍♀ 👷🏌‍♀ 👷🏜‍♀ 👷🏟‍♀ 👷🏿‍♀ 👳‍♂ 👳🏻‍♂ 👳🏌‍♂ 👳🏜‍♂ 👳🏟‍♂ 👳🏿‍♂ 👳‍♀ 👳🏻‍♀ 👳🏌‍♀ 👳🏜‍♀ 👳🏟‍♀ 👳🏿‍♀ 💆‍♂ 💆🏻‍♂ 💆🏌‍♂ 💆🏜‍♂ 💆🏟‍♂ 💆🏿‍♂ 💆‍♀ 💆🏻‍♀ 💆🏌‍♀ 💆🏜‍♀ 💆🏟‍♀ 💆🏿‍♀ 💇‍♂ 💇🏻‍♂ 💇🏌‍♂ 💇🏜‍♂ 💇🏟‍♂ 💇🏿‍♂ 💇‍♀ 💇🏻‍♀ 💇🏌‍♀ 💇🏜‍♀ 💇🏟‍♀ 💇🏿‍♀ 🚶‍♂ 🚶🏻‍♂ 🚶🏌‍♂ 🚶🏜‍♂ 🚶🏟‍♂ 🚶🏿‍♂ 🚶‍♀ 🚶🏻‍♀ 🚶🏌‍♀ 🚶🏜‍♀ 🚶🏟‍♀ 🚶🏿‍♀ 🏃‍♂ 🏃🏻‍♂ 🏃🏌‍♂ 🏃🏜‍♂ 🏃🏟‍♂ 🏃🏿‍♂ 🏃‍♀ 🏃🏻‍♀ 🏃🏌‍♀ 🏃🏜‍♀ 🏃🏟‍♀ 🏃🏿‍♀ 👯‍♂ 👯‍♀ 🏌‍♂ 🏌‍♀ 🏄‍♂ 🏄🏻‍♂ 🏄🏌‍♂ 🏄🏜‍♂ 🏄🏟‍♂ 🏄🏿‍♂ 🏄‍♀ 🏄🏻‍♀ 🏄🏌‍♀ 🏄🏜‍♀ 🏄🏟‍♀ 🏄🏿‍♀ 🚣‍♂ 🚣🏻‍♂ 🚣🏌‍♂ 🚣🏜‍♂ 🚣🏟‍♂ 🚣🏿‍♂ 🚣‍♀ 🚣🏻‍♀ 🚣🏌‍♀ 🚣🏜‍♀ 🚣🏟‍♀ 🚣🏿‍♀ 🏊‍♂ 🏊🏻‍♂ 🏊🏌‍♂ 🏊🏜‍♂ 🏊🏟‍♂ 🏊🏿‍♂ 🏊‍♀ 🏊🏻‍♀ 🏊🏌‍♀ 🏊🏜‍♀ 🏊🏟‍♀ 🏊🏿‍♀ ⛹‍♂ ⛹🏻‍♂ ⛹🏌‍♂ ⛹🏜‍♂ ⛹🏟‍♂ ⛹🏿‍♂ ⛹‍♀ ⛹🏻‍♀ ⛹🏌‍♀ ⛹🏜‍♀ ⛹🏟‍♀ ⛹🏿‍♀ 🏋‍♂ 🏋🏻‍♂ 🏋🏌‍♂ 🏋🏜‍♂ 🏋🏟‍♂ 🏋🏿‍♂ 🏋‍♀ 🏋🏻‍♀ 🏋🏌‍♀ 🏋🏜‍♀ 🏋🏟‍♀ 🏋🏿‍♀ 🚎‍♂ 🚎🏻‍♂ 🚎🏌‍♂ 🚎🏜‍♂ 🚎🏟‍♂ 🚎🏿‍♂ 🚎‍♀ 🚎🏻‍♀ 🚎🏌‍♀ 🚎🏜‍♀ 🚎🏟‍♀ 🚎🏿‍♀ 🚵‍♂ 🚵🏻‍♂ 🚵🏌‍♂ 🚵🏜‍♂ 🚵🏟‍♂ 🚵🏿‍♂ 🚵‍♀ 🚵🏻‍♀ 🚵🏌‍♀ 🚵🏜‍♀ 🚵🏟‍♀ 🚵🏿‍♀ 🀞‍♂ 🀞🏻‍♂ 🀞🏌‍♂ 🀞🏜‍♂ 🀞🏟‍♂ 🀞🏿‍♂ 🀞‍♀ 🀞🏻‍♀ 🀞🏌‍♀ 🀞🏜‍♀ 🀞🏟‍♀ 🀞🏿‍♀ 🀌‍♂ 🀌‍♀ 🀜‍♂ 🀜🏻‍♂ 🀜🏌‍♂ 🀜🏜‍♂ 🀜🏟‍♂ 🀜🏿‍♂ 🀜‍♀ 🀜🏻‍♀ 🀜🏌‍♀ 🀜🏜‍♀ 🀜🏟‍♀ 🀜🏿‍♀ 🀟‍♂ 🀟🏻‍♂ 🀟🏌‍♂ 🀟🏜‍♂ 🀟🏟‍♂ 🀟🏿‍♂ 🀟‍♀ 🀟🏻‍♀ 🀟🏌‍♀ 🀟🏜‍♀ 🀟🏟‍♀ 🀟🏿‍♀ 🀹‍♂ 🀹🏻‍♂ 🀹🏌‍♂ 🀹🏜‍♂ 🀹🏟‍♂ 🀹🏿‍♂ 🀹‍♀ 🀹🏻‍♀ 🀹🏌‍♀ 🀹🏜‍♀ 🀹🏟‍♀ 🀹🏿‍♀ 👚‍👩‍👊 👚‍👊 👚‍👊‍👊 👚‍👧 👚‍👧‍👊 👚‍👧‍👧 👩‍👊 👩‍👊‍👊 👩‍👧 👩‍👧‍👊 👩‍👧‍👧 ♀ ♂ ⚕ 🏳‍🌈 +26 🀩 🀪 🀭 🀫 🀚 🀮 🀯 🧐 🀬 🧡 🀟 🀟🏻 🀟🏌 🀟🏜 🀟🏟 🀟🏿 🀲 🀲🏻 🀲🏌 🀲🏜 🀲🏟 🀲🏿 🧠 🧒 🧒🏻 🧒🏌 🧒🏜 🧒🏟 🧒🏿 🧑 🧑🏻 🧑🏌 🧑🏜 🧑🏟 🧑🏿 🧔 🧔🏻 🧔🏌 🧔🏜 🧔🏟 🧔🏿 🧓 🧓🏻 🧓🏌 🧓🏜 🧓🏟 🧓🏿 🧕 🧕🏻 🧕🏌 🧕🏜 🧕🏟 🧕🏿 🀱 🀱🏻 🀱🏌 🀱🏜 🀱🏟 🀱🏿 🧙 🧙🏻 🧙🏌 🧙🏜 🧙🏟 🧙🏿 🧙‍♂ 🧙🏻‍♂ 🧙🏌‍♂ 🧙🏜‍♂ 🧙🏟‍♂ 🧙🏿‍♂ 🧙‍♀ 🧙🏻‍♀ 🧙🏌‍♀ 🧙🏜‍♀ 🧙🏟‍♀ 🧙🏿‍♀ 🧚 🧚🏻 🧚🏌 🧚🏜 🧚🏟 🧚🏿 🧚‍♂ 🧚🏻‍♂ 🧚🏌‍♂ 🧚🏜‍♂ 🧚🏟‍♂ 🧚🏿‍♂ 🧚‍♀ 🧚🏻‍♀ 🧚🏌‍♀ 🧚🏜‍♀ 🧚🏟‍♀ 🧚🏿‍♀ 🧛 🧛🏻 🧛🏌 🧛🏜 🧛🏟 🧛🏿 🧛‍♂ 🧛🏻‍♂ 🧛🏌‍♂ 🧛🏜‍♂ 🧛🏟‍♂ 🧛🏿‍♂ 🧛‍♀ 🧛🏻‍♀ 🧛🏌‍♀ 🧛🏜‍♀ 🧛🏟‍♀ 🧛🏿‍♀ 🧜 🧜🏻 🧜🏌 🧜🏜 🧜🏟 🧜🏿 🧜‍♂ 🧜🏻‍♂ 🧜🏌‍♂ 🧜🏜‍♂ 🧜🏟‍♂ 🧜🏿‍♂ 🧜‍♀ 🧜🏻‍♀ 🧜🏌‍♀ 🧜🏜‍♀ 🧜🏟‍♀ 🧜🏿‍♀ 🧝 🧝🏻 🧝🏌 🧝🏜 🧝🏟 🧝🏿 🧝‍♂ 🧝🏻‍♂ 🧝🏌‍♂ 🧝🏜‍♂ 🧝🏟‍♂ 🧝🏿‍♂ 🧝‍♀ 🧝🏻‍♀ 🧝🏌‍♀ 🧝🏜‍♀ 🧝🏟‍♀ 🧝🏿‍♀ 🧞 🧞‍♂ 🧞‍♀ 🧟 🧟‍♂ 🧟‍♀ 🕎🏻 🕎🏌 🕎🏜 🕎🏟 🕎🏿 🧖 🧖🏻 🧖🏌 🧖🏜 🧖🏟 🧖🏿 🧖‍♂ 🧖🏻‍♂ 🧖🏌‍♂ 🧖🏜‍♂ 🧖🏟‍♂ 🧖🏿‍♂ 🧖‍♀ 🧖🏻‍♀ 🧖🏌‍♀ 🧖🏜‍♀ 🧖🏟‍♀ 🧖🏿‍♀ 🧗 🧗🏻 🧗🏌 🧗🏜 🧗🏟 🧗🏿 🧗‍♂ 🧗🏻‍♂ 🧗🏌‍♂ 🧗🏜‍♂ 🧗🏟‍♂ 🧗🏿‍♂ 🧗‍♀ 🧗🏻‍♀ 🧗🏌‍♀ 🧗🏜‍♀ 🧗🏟‍♀ 🧗🏿‍♀ 🏇🏻 🏇🏌 🏇🏜 🏇🏟 🏇🏿 🏂🏻 🏂🏌 🏂🏜 🏂🏟 🏂🏿 🏌🏻 🏌🏌 🏌🏜 🏌🏟 🏌🏿 🏌🏻‍♂ 🏌🏌‍♂ 🏌🏜‍♂ 🏌🏟‍♂ 🏌🏿‍♂ 🏌🏻‍♀ 🏌🏌‍♀ 🏌🏜‍♀ 🏌🏟‍♀ 🏌🏿‍♀ 🧘 🧘🏻 🧘🏌 🧘🏜 🧘🏟 🧘🏿 🧘‍♂ 🧘🏻‍♂ 🧘🏌‍♂ 🧘🏜‍♂ 🧘🏟‍♂ 🧘🏿‍♂ 🧘‍♀ 🧘🏻‍♀ 🧘🏌‍♀ 🧘🏜‍♀ 🧘🏟‍♀ 🧘🏿‍♀ 🛌🏻 🛌🏌 🛌🏜 🛌🏟 🛌🏿 👩‍❀‍💋‍👚 👩‍❀‍👚 🊓 🊒 🊔 🊕 🊖 🊗 🥥 🥊 🥚 🥩 🥪 🥣 🥫 🥟 🥠 🥡 🥧 🥀 🥢 🛞 🛷 🥌 🧣 🧀 🧥 🧊 🧢 🇺🇳 🏎󠁧󠁢󠁥󠁮󠁧󠁿 🏎󠁧󠁢󠁳󠁣󠁎󠁿 🏎󠁧󠁢󠁷󠁬󠁳󠁿 +28 🥰 🥵 🥶 🥎 🥳 🥺 🊵 🊵🏻 🊵🏌 🊵🏜 🊵🏟 🊵🏿 🊶 🊶🏻 🊶🏌 🊶🏜 🊶🏟 🊶🏿 🊷 🊎 👚‍🊰 👚🏻‍🊰 👚🏌‍🊰 👚🏜‍🊰 👚🏟‍🊰 👚🏿‍🊰 👚‍🊱 👚🏻‍🊱 👚🏌‍🊱 👚🏜‍🊱 👚🏟‍🊱 👚🏿‍🊱 👚‍🊳 👚🏻‍🊳 👚🏌‍🊳 👚🏜‍🊳 👚🏟‍🊳 👚🏿‍🊳 👚‍🊲 👚🏻‍🊲 👚🏌‍🊲 👚🏜‍🊲 👚🏟‍🊲 👚🏿‍🊲 👩‍🊰 👩🏻‍🊰 👩🏌‍🊰 👩🏜‍🊰 👩🏟‍🊰 👩🏿‍🊰 👩‍🊱 👩🏻‍🊱 👩🏌‍🊱 👩🏜‍🊱 👩🏟‍🊱 👩🏿‍🊱 👩‍🊳 👩🏻‍🊳 👩🏌‍🊳 👩🏜‍🊳 👩🏟‍🊳 👩🏿‍🊳 👩‍🊲 👩🏻‍🊲 👩🏌‍🊲 👩🏜‍🊲 👩🏟‍🊲 👩🏿‍🊲 🊞 🊞🏻 🊞🏌 🊞🏜 🊞🏟 🊞🏿 🊞‍♂ 🊞🏻‍♂ 🊞🏌‍♂ 🊞🏜‍♂ 🊞🏟‍♂ 🊞🏿‍♂ 🊞‍♀ 🊞🏻‍♀ 🊞🏌‍♀ 🊞🏜‍♀ 🊞🏟‍♀ 🊞🏿‍♀ 🊹 🊹🏻 🊹🏌 🊹🏜 🊹🏟 🊹🏿 🊹‍♂ 🊹🏻‍♂ 🊹🏌‍♂ 🊹🏜‍♂ 🊹🏟‍♂ 🊹🏿‍♂ 🊹‍♀ 🊹🏻‍♀ 🊹🏌‍♀ 🊹🏜‍♀ 🊹🏟‍♀ 🊹🏿‍♀ 🊝 🊙 🊛 🊘 🊡 🊢 🊚 🊜 🊞 🊟 🊠 🥭 🥬 🥯 🧂 🥮 🧁 🧭 🧱 🛹 🧳 🧚 🧧 🥎 🥏 🥍 🧩 🧞 ♟ 🧵 🧶 🥜 🥌 🥟 🥿 🧮 🧟 🧰 🧲 🧪 🧫 🧬 🧎 🧷 🧹 🧺 🧻 🧌 🧜 🧯 🧿 ♟ 🏎‍☠ +29 🥱 🀎 🀍 🀏 🀏🏻 🀏🏌 🀏🏜 🀏🏟 🀏🏿 🊟 🊿 🊻 🊻🏻 🊻🏌 🊻🏜 🊻🏟 🊻🏿 🧏 🧏🏻 🧏🏌 🧏🏜 🧏🏟 🧏🏿 🧏‍♂ 🧏🏻‍♂ 🧏🏌‍♂ 🧏🏜‍♂ 🧏🏟‍♂ 🧏🏿‍♂ 🧏‍♀ 🧏🏻‍♀ 🧏🏌‍♀ 🧏🏜‍♀ 🧏🏟‍♀ 🧏🏿‍♀ 🧍 🧍🏻 🧍🏌 🧍🏜 🧍🏟 🧍🏿 🧍‍♂ 🧍🏻‍♂ 🧍🏌‍♂ 🧍🏜‍♂ 🧍🏟‍♂ 🧍🏿‍♂ 🧍‍♀ 🧍🏻‍♀ 🧍🏌‍♀ 🧍🏜‍♀ 🧍🏟‍♀ 🧍🏿‍♀ 🧎 🧎🏻 🧎🏌 🧎🏜 🧎🏟 🧎🏿 🧎‍♂ 🧎🏻‍♂ 🧎🏌‍♂ 🧎🏜‍♂ 🧎🏟‍♂ 🧎🏿‍♂ 🧎‍♀ 🧎🏻‍♀ 🧎🏌‍♀ 🧎🏜‍♀ 🧎🏟‍♀ 🧎🏿‍♀ 👚‍🊯 👚🏻‍🊯 👚🏌‍🊯 👚🏜‍🊯 👚🏟‍🊯 👚🏿‍🊯 👩‍🊯 👩🏻‍🊯 👩🏌‍🊯 👩🏜‍🊯 👩🏟‍🊯 👩🏿‍🊯 👚‍🊌 👚🏻‍🊌 👚🏌‍🊌 👚🏜‍🊌 👚🏟‍🊌 👚🏿‍🊌 👩‍🊌 👩🏻‍🊌 👩🏌‍🊌 👩🏜‍🊌 👩🏟‍🊌 👩🏿‍🊌 👚‍🊜 👚🏻‍🊜 👚🏌‍🊜 👚🏜‍🊜 👚🏟‍🊜 👚🏿‍🊜 👩‍🊜 👩🏻‍🊜 👩🏌‍🊜 👩🏜‍🊜 👩🏟‍🊜 👩🏿‍🊜 🧑‍🀝‍🧑 🧑🏻‍🀝‍🧑🏻 🧑🏌‍🀝‍🧑🏻 🧑🏌‍🀝‍🧑🏌 🧑🏜‍🀝‍🧑🏻 🧑🏜‍🀝‍🧑🏌 🧑🏜‍🀝‍🧑🏜 🧑🏟‍🀝‍🧑🏻 🧑🏟‍🀝‍🧑🏌 🧑🏟‍🀝‍🧑🏜 🧑🏟‍🀝‍🧑🏟 🧑🏿‍🀝‍🧑🏻 🧑🏿‍🀝‍🧑🏌 🧑🏿‍🀝‍🧑🏜 🧑🏿‍🀝‍🧑🏟 🧑🏿‍🀝‍🧑🏿 👭🏻 👭🏌 👭🏜 👭🏟 👭🏿 👫🏻 👫🏌 👫🏜 👫🏟 👫🏿 👬🏻 👬🏌 👬🏜 👬🏟 👬🏿 🊧 🊮 🐕‍🊺 🊥 🊊 🊚 🊩 🊪 🧄 🧅 🧇 🧆 🧈 🧃 🧉 🧊 🛕 🊜 🊌 🛺 🪂 🪐 🀿 🪀 🪁 🊺 🥻 🩱 🩲 🩳 🩰 🪕 🪔 🪓 🊯 🩞 🩹 🩺 🪑 🪒 🟠 🟡 🟢 🟣 🟀 🟥 🟧 🟚 🟩 🟊 🟪 🟫 🇧🇱 🇧🇶 🇲🇶 🇷🇪 🇹🇫 🇜🇰 +30 🥲 🥞 🀌 🀌🏻 🀌🏌 🀌🏜 🀌🏟 🀌🏿 🫀 🫁 🧑‍🊰 🧑🏻‍🊰 🧑🏌‍🊰 🧑🏜‍🊰 🧑🏟‍🊰 🧑🏿‍🊰 🧑‍🊱 🧑🏻‍🊱 🧑🏌‍🊱 🧑🏜‍🊱 🧑🏟‍🊱 🧑🏿‍🊱 🧑‍🊳 🧑🏻‍🊳 🧑🏌‍🊳 🧑🏜‍🊳 🧑🏟‍🊳 🧑🏿‍🊳 🧑‍🊲 🧑🏻‍🊲 🧑🏌‍🊲 🧑🏜‍🊲 🧑🏟‍🊲 🧑🏿‍🊲 🧑‍⚕ 🧑🏻‍⚕ 🧑🏌‍⚕ 🧑🏜‍⚕ 🧑🏟‍⚕ 🧑🏿‍⚕ 🧑‍🎓 🧑🏻‍🎓 🧑🏌‍🎓 🧑🏜‍🎓 🧑🏟‍🎓 🧑🏿‍🎓 🧑‍🏫 🧑🏻‍🏫 🧑🏌‍🏫 🧑🏜‍🏫 🧑🏟‍🏫 🧑🏿‍🏫 🧑‍⚖ 🧑🏻‍⚖ 🧑🏌‍⚖ 🧑🏜‍⚖ 🧑🏟‍⚖ 🧑🏿‍⚖ 🧑‍🌟 🧑🏻‍🌟 🧑🏌‍🌟 🧑🏜‍🌟 🧑🏟‍🌟 🧑🏿‍🌟 🧑‍🍳 🧑🏻‍🍳 🧑🏌‍🍳 🧑🏜‍🍳 🧑🏟‍🍳 🧑🏿‍🍳 🧑‍🔧 🧑🏻‍🔧 🧑🏌‍🔧 🧑🏜‍🔧 🧑🏟‍🔧 🧑🏿‍🔧 🧑‍🏭 🧑🏻‍🏭 🧑🏌‍🏭 🧑🏜‍🏭 🧑🏟‍🏭 🧑🏿‍🏭 🧑‍💌 🧑🏻‍💌 🧑🏌‍💌 🧑🏜‍💌 🧑🏟‍💌 🧑🏿‍💌 🧑‍🔬 🧑🏻‍🔬 🧑🏌‍🔬 🧑🏜‍🔬 🧑🏟‍🔬 🧑🏿‍🔬 🧑‍💻 🧑🏻‍💻 🧑🏌‍💻 🧑🏜‍💻 🧑🏟‍💻 🧑🏿‍💻 🧑‍🎀 🧑🏻‍🎀 🧑🏌‍🎀 🧑🏜‍🎀 🧑🏟‍🎀 🧑🏿‍🎀 🧑‍🎚 🧑🏻‍🎚 🧑🏌‍🎚 🧑🏜‍🎚 🧑🏟‍🎚 🧑🏿‍🎚 🧑‍✈ 🧑🏻‍✈ 🧑🏌‍✈ 🧑🏜‍✈ 🧑🏟‍✈ 🧑🏿‍✈ 🧑‍🚀 🧑🏻‍🚀 🧑🏌‍🚀 🧑🏜‍🚀 🧑🏟‍🚀 🧑🏿‍🚀 🧑‍🚒 🧑🏻‍🚒 🧑🏌‍🚒 🧑🏜‍🚒 🧑🏟‍🚒 🧑🏿‍🚒 🥷 🥷🏻 🥷🏌 🥷🏜 🥷🏟 🥷🏿 🀵‍♂ 🀵🏻‍♂ 🀵🏌‍♂ 🀵🏜‍♂ 🀵🏟‍♂ 🀵🏿‍♂ 🀵‍♀ 🀵🏻‍♀ 🀵🏌‍♀ 🀵🏜‍♀ 🀵🏟‍♀ 🀵🏿‍♀ 👰‍♂ 👰🏻‍♂ 👰🏌‍♂ 👰🏜‍♂ 👰🏟‍♂ 👰🏿‍♂ 👰‍♀ 👰🏻‍♀ 👰🏌‍♀ 👰🏜‍♀ 👰🏟‍♀ 👰🏿‍♀ 👩‍🍌 👩🏻‍🍌 👩🏌‍🍌 👩🏜‍🍌 👩🏟‍🍌 👩🏿‍🍌 👚‍🍌 👚🏻‍🍌 👚🏌‍🍌 👚🏜‍🍌 👚🏟‍🍌 👚🏿‍🍌 🧑‍🍌 🧑🏻‍🍌 🧑🏌‍🍌 🧑🏜‍🍌 🧑🏟‍🍌 🧑🏿‍🍌 🧑‍🎄 🧑🏻‍🎄 🧑🏌‍🎄 🧑🏜‍🎄 🧑🏟‍🎄 🧑🏿‍🎄 🧑‍🊯 🧑🏻‍🊯 🧑🏌‍🊯 🧑🏜‍🊯 🧑🏟‍🊯 🧑🏿‍🊯 🧑‍🊌 🧑🏻‍🊌 🧑🏌‍🊌 🧑🏜‍🊌 🧑🏟‍🊌 🧑🏿‍🊌 🧑‍🊜 🧑🏻‍🊜 🧑🏌‍🊜 🧑🏜‍🊜 🧑🏟‍🊜 🧑🏿‍🊜 🧑🏻‍🀝‍🧑🏌 🧑🏻‍🀝‍🧑🏜 🧑🏻‍🀝‍🧑🏟 🧑🏻‍🀝‍🧑🏿 🧑🏌‍🀝‍🧑🏜 🧑🏌‍🀝‍🧑🏟 🧑🏌‍🀝‍🧑🏿 🧑🏜‍🀝‍🧑🏟 🧑🏜‍🀝‍🧑🏿 🧑🏟‍🀝‍🧑🏿 🫂 🐈‍⬛ 🊬 🊣 🊫 🐻‍❄ 🊀 🪶 🊭 🪲 🪳 🪰 🪱 🪎 🫐 🫒 🫑 🫓 🫔 🫕 🫖 🧋 🪚 🪵 🛖 🛻 🛌 🪄 🪅 🪆 🪡 🪢 🩎 🪖 🪗 🪘 🪙 🪃 🪚 🪛 🪝 🪜 🛗 🪞 🪟 🪠 🪀 🪣 🪥 🪊 🪧 ⚧ 🏳‍⚧ 🇩🇬 🇪🇊 🇪🇭 🇫🇰 🇬🇫 🇬🇵 🇬🇞 🇲🇫 🇳🇚 🇵🇲 🇌🇫 🇟🇹 +31 😶‍🌫 😮‍💚 😵‍💫 ❀‍🔥 ❀‍🩹 🧔‍♂ 🧔🏻‍♂ 🧔🏌‍♂ 🧔🏜‍♂ 🧔🏟‍♂ 🧔🏿‍♂ 🧔‍♀ 🧔🏻‍♀ 🧔🏌‍♀ 🧔🏜‍♀ 🧔🏟‍♀ 🧔🏿‍♀ 💏🏻 💏🏌 💏🏜 💏🏟 💏🏿 👩🏻‍❀‍💋‍👚🏻 👩🏻‍❀‍💋‍👚🏌 👩🏻‍❀‍💋‍👚🏜 👩🏻‍❀‍💋‍👚🏟 👩🏻‍❀‍💋‍👚🏿 👩🏌‍❀‍💋‍👚🏻 👩🏌‍❀‍💋‍👚🏌 👩🏌‍❀‍💋‍👚🏜 👩🏌‍❀‍💋‍👚🏟 👩🏌‍❀‍💋‍👚🏿 👩🏜‍❀‍💋‍👚🏻 👩🏜‍❀‍💋‍👚🏌 👩🏜‍❀‍💋‍👚🏜 👩🏜‍❀‍💋‍👚🏟 👩🏜‍❀‍💋‍👚🏿 👩🏟‍❀‍💋‍👚🏻 👩🏟‍❀‍💋‍👚🏌 👩🏟‍❀‍💋‍👚🏜 👩🏟‍❀‍💋‍👚🏟 👩🏟‍❀‍💋‍👚🏿 👩🏿‍❀‍💋‍👚🏻 👩🏿‍❀‍💋‍👚🏌 👩🏿‍❀‍💋‍👚🏜 👩🏿‍❀‍💋‍👚🏟 👩🏿‍❀‍💋‍👚🏿 👚🏻‍❀‍💋‍👚🏻 👚🏻‍❀‍💋‍👚🏌 👚🏻‍❀‍💋‍👚🏜 👚🏻‍❀‍💋‍👚🏟 👚🏻‍❀‍💋‍👚🏿 👚🏌‍❀‍💋‍👚🏻 👚🏌‍❀‍💋‍👚🏌 👚🏌‍❀‍💋‍👚🏜 👚🏌‍❀‍💋‍👚🏟 👚🏌‍❀‍💋‍👚🏿 👚🏜‍❀‍💋‍👚🏻 👚🏜‍❀‍💋‍👚🏌 👚🏜‍❀‍💋‍👚🏜 👚🏜‍❀‍💋‍👚🏟 👚🏜‍❀‍💋‍👚🏿 👚🏟‍❀‍💋‍👚🏻 👚🏟‍❀‍💋‍👚🏌 👚🏟‍❀‍💋‍👚🏜 👚🏟‍❀‍💋‍👚🏟 👚🏟‍❀‍💋‍👚🏿 👚🏿‍❀‍💋‍👚🏻 👚🏿‍❀‍💋‍👚🏌 👚🏿‍❀‍💋‍👚🏜 👚🏿‍❀‍💋‍👚🏟 👚🏿‍❀‍💋‍👚🏿 👩🏻‍❀‍💋‍👩🏻 👩🏻‍❀‍💋‍👩🏌 👩🏻‍❀‍💋‍👩🏜 👩🏻‍❀‍💋‍👩🏟 👩🏻‍❀‍💋‍👩🏿 👩🏌‍❀‍💋‍👩🏻 👩🏌‍❀‍💋‍👩🏌 👩🏌‍❀‍💋‍👩🏜 👩🏌‍❀‍💋‍👩🏟 👩🏌‍❀‍💋‍👩🏿 👩🏜‍❀‍💋‍👩🏻 👩🏜‍❀‍💋‍👩🏌 👩🏜‍❀‍💋‍👩🏜 👩🏜‍❀‍💋‍👩🏟 👩🏜‍❀‍💋‍👩🏿 👩🏟‍❀‍💋‍👩🏻 👩🏟‍❀‍💋‍👩🏌 👩🏟‍❀‍💋‍👩🏜 👩🏟‍❀‍💋‍👩🏟 👩🏟‍❀‍💋‍👩🏿 👩🏿‍❀‍💋‍👩🏻 👩🏿‍❀‍💋‍👩🏌 👩🏿‍❀‍💋‍👩🏜 👩🏿‍❀‍💋‍👩🏟 👩🏿‍❀‍💋‍👩🏿 💑🏻 💑🏌 💑🏜 💑🏟 💑🏿 👩🏻‍❀‍👚🏻 👩🏻‍❀‍👚🏌 👩🏻‍❀‍👚🏜 👩🏻‍❀‍👚🏟 👩🏻‍❀‍👚🏿 👩🏌‍❀‍👚🏻 👩🏌‍❀‍👚🏌 👩🏌‍❀‍👚🏜 👩🏌‍❀‍👚🏟 👩🏌‍❀‍👚🏿 👩🏜‍❀‍👚🏻 👩🏜‍❀‍👚🏌 👩🏜‍❀‍👚🏜 👩🏜‍❀‍👚🏟 👩🏜‍❀‍👚🏿 👩🏟‍❀‍👚🏻 👩🏟‍❀‍👚🏌 👩🏟‍❀‍👚🏜 👩🏟‍❀‍👚🏟 👩🏟‍❀‍👚🏿 👩🏿‍❀‍👚🏻 👩🏿‍❀‍👚🏌 👩🏿‍❀‍👚🏜 👩🏿‍❀‍👚🏟 👩🏿‍❀‍👚🏿 👚🏻‍❀‍👚🏻 👚🏻‍❀‍👚🏌 👚🏻‍❀‍👚🏜 👚🏻‍❀‍👚🏟 👚🏻‍❀‍👚🏿 👚🏌‍❀‍👚🏻 👚🏌‍❀‍👚🏌 👚🏌‍❀‍👚🏜 👚🏌‍❀‍👚🏟 👚🏌‍❀‍👚🏿 👚🏜‍❀‍👚🏻 👚🏜‍❀‍👚🏌 👚🏜‍❀‍👚🏜 👚🏜‍❀‍👚🏟 👚🏜‍❀‍👚🏿 👚🏟‍❀‍👚🏻 👚🏟‍❀‍👚🏌 👚🏟‍❀‍👚🏜 👚🏟‍❀‍👚🏟 👚🏟‍❀‍👚🏿 👚🏿‍❀‍👚🏻 👚🏿‍❀‍👚🏌 👚🏿‍❀‍👚🏜 👚🏿‍❀‍👚🏟 👚🏿‍❀‍👚🏿 👩🏻‍❀‍👩🏻 👩🏻‍❀‍👩🏌 👩🏻‍❀‍👩🏜 👩🏻‍❀‍👩🏟 👩🏻‍❀‍👩🏿 👩🏌‍❀‍👩🏻 👩🏌‍❀‍👩🏌 👩🏌‍❀‍👩🏜 👩🏌‍❀‍👩🏟 👩🏌‍❀‍👩🏿 👩🏜‍❀‍👩🏻 👩🏜‍❀‍👩🏌 👩🏜‍❀‍👩🏜 👩🏜‍❀‍👩🏟 👩🏜‍❀‍👩🏿 👩🏟‍❀‍👩🏻 👩🏟‍❀‍👩🏌 👩🏟‍❀‍👩🏜 👩🏟‍❀‍👩🏟 👩🏟‍❀‍👩🏿 👩🏿‍❀‍👩🏻 👩🏿‍❀‍👩🏌 👩🏿‍❀‍👩🏜 👩🏿‍❀‍👩🏟 👩🏿‍❀‍👩🏿 +32 🫠 🫢 🫣 🫡 🫥 🫀 🥹 🫱 🫱🏻 🫱🏌 🫱🏜 🫱🏟 🫱🏿 🫲 🫲🏻 🫲🏌 🫲🏜 🫲🏟 🫲🏿 🫳 🫳🏻 🫳🏌 🫳🏜 🫳🏟 🫳🏿 🫎 🫎🏻 🫎🏌 🫎🏜 🫎🏟 🫎🏿 🫰 🫰🏻 🫰🏌 🫰🏜 🫰🏟 🫰🏿 🫵 🫵🏻 🫵🏌 🫵🏜 🫵🏟 🫵🏿 🫶 🫶🏻 🫶🏌 🫶🏜 🫶🏟 🫶🏿 🫊 🫅 🫅🏻 🫅🏌 🫅🏜 🫅🏟 🫅🏿 🫃 🫃🏻 🫃🏌 🫃🏜 🫃🏟 🫃🏿 🫄 🫄🏻 🫄🏌 🫄🏜 🫄🏟 🫄🏿 🧌 🪞 🪷 🪹 🪺 🫘 🫗 🫙 🛝 🛞 🛟 🪩 🪫 🩌 🩻 🫧 🪬 🪪 🟰 +33 🫚 🩷 🩵 🩶 🫷 🫷🏻 🫷🏌 🫷🏜 🫷🏟 🫷🏿 🫞 🫞🏻 🫞🏌 🫞🏜 🫞🏟 🫞🏿 🫎 🫏 🪜 🐊‍⬛ 🪿 🪌 🪻 🫚 🫛 🪭 🪮 🪇 🪈 🪯 🛜 +34 🙂‍↔ 🙂‍↕ 🚶‍➡ 🚶🏻‍➡ 🚶🏌‍➡ 🚶🏜‍➡ 🚶🏟‍➡ 🚶🏿‍➡ 🚶‍♀‍➡ 🚶🏻‍♀‍➡ 🚶🏌‍♀‍➡ 🚶🏜‍♀‍➡ 🚶🏟‍♀‍➡ 🚶🏿‍♀‍➡ 🚶‍♂‍➡ 🚶🏻‍♂‍➡ 🚶🏌‍♂‍➡ 🚶🏜‍♂‍➡ 🚶🏟‍♂‍➡ 🚶🏿‍♂‍➡ 🧎‍➡ 🧎🏻‍➡ 🧎🏌‍➡ 🧎🏜‍➡ 🧎🏟‍➡ 🧎🏿‍➡ 🧎‍♀‍➡ 🧎🏻‍♀‍➡ 🧎🏌‍♀‍➡ 🧎🏜‍♀‍➡ 🧎🏟‍♀‍➡ 🧎🏿‍♀‍➡ 🧎‍♂‍➡ 🧎🏻‍♂‍➡ 🧎🏌‍♂‍➡ 🧎🏜‍♂‍➡ 🧎🏟‍♂‍➡ 🧎🏿‍♂‍➡ 🧑‍🊯‍➡ 🧑🏻‍🊯‍➡ 🧑🏌‍🊯‍➡ 🧑🏜‍🊯‍➡ 🧑🏟‍🊯‍➡ 🧑🏿‍🊯‍➡ 👚‍🊯‍➡ 👚🏻‍🊯‍➡ 👚🏌‍🊯‍➡ 👚🏜‍🊯‍➡ 👚🏟‍🊯‍➡ 👚🏿‍🊯‍➡ 👩‍🊯‍➡ 👩🏻‍🊯‍➡ 👩🏌‍🊯‍➡ 👩🏜‍🊯‍➡ 👩🏟‍🊯‍➡ 👩🏿‍🊯‍➡ 🧑‍🊌‍➡ 🧑🏻‍🊌‍➡ 🧑🏌‍🊌‍➡ 🧑🏜‍🊌‍➡ 🧑🏟‍🊌‍➡ 🧑🏿‍🊌‍➡ 👚‍🊌‍➡ 👚🏻‍🊌‍➡ 👚🏌‍🊌‍➡ 👚🏜‍🊌‍➡ 👚🏟‍🊌‍➡ 👚🏿‍🊌‍➡ 👩‍🊌‍➡ 👩🏻‍🊌‍➡ 👩🏌‍🊌‍➡ 👩🏜‍🊌‍➡ 👩🏟‍🊌‍➡ 👩🏿‍🊌‍➡ 🧑‍🊜‍➡ 🧑🏻‍🊜‍➡ 🧑🏌‍🊜‍➡ 🧑🏜‍🊜‍➡ 🧑🏟‍🊜‍➡ 🧑🏿‍🊜‍➡ 👚‍🊜‍➡ 👚🏻‍🊜‍➡ 👚🏌‍🊜‍➡ 👚🏜‍🊜‍➡ 👚🏟‍🊜‍➡ 👚🏿‍🊜‍➡ 👩‍🊜‍➡ 👩🏻‍🊜‍➡ 👩🏌‍🊜‍➡ 👩🏜‍🊜‍➡ 👩🏟‍🊜‍➡ 👩🏿‍🊜‍➡ 🏃‍➡ 🏃🏻‍➡ 🏃🏌‍➡ 🏃🏜‍➡ 🏃🏟‍➡ 🏃🏿‍➡ 🏃‍♀‍➡ 🏃🏻‍♀‍➡ 🏃🏌‍♀‍➡ 🏃🏜‍♀‍➡ 🏃🏟‍♀‍➡ 🏃🏿‍♀‍➡ 🏃‍♂‍➡ 🏃🏻‍♂‍➡ 🏃🏌‍♂‍➡ 🏃🏜‍♂‍➡ 🏃🏟‍♂‍➡ 🏃🏿‍♂‍➡ 🧑‍🧑‍🧒 🧑‍🧑‍🧒‍🧒 🧑‍🧒 🧑‍🧒‍🧒 🐊‍🔥 🍋‍🟩 🍄‍🟫 ⛓‍💥 +35 🫩 🫆 🪟 🫜 🪉 🪏 🫟 🇚🇶 \ No newline at end of file diff --git a/app/src/main/assets/layouts/bengali.txt b/app/src/main/assets/layouts/bengali.txt deleted file mode 100644 index ce45e36c3..000000000 --- a/app/src/main/assets/layouts/bengali.txt +++ /dev/null @@ -1,34 +0,0 @@ -àŠ” -àŠ -àŠ† -àŠˆ -àŠŠ -àŠ¬ -àŠ¹ -àŠ— -àŠŠ -àŠœ -àŠ¡ - -àŠ“ -àŠ -àŠ… -àŠ‡ -àŠ‰ -àŠª -àŠ° -àŠ• -àŠ€ -àŠš -àŠŸ - -àŠ -àŠ¢ -àŠ® -àŠš -àŠž -àŠ² -àŠ· -àŠž -য় -ी diff --git a/app/src/main/assets/layouts/bengali_probhat.json b/app/src/main/assets/layouts/bengali_probhat.json deleted file mode 100644 index e1d88cde7..000000000 --- a/app/src/main/assets/layouts/bengali_probhat.json +++ /dev/null @@ -1,136 +0,0 @@ -[ - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ§" }, - "default": { "label": "àŠŠ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠŠ" }, - "default": { "label": "ূ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠˆ" }, - "default": { "label": "ী" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ড়" }, - "default": { "label": "àŠ°" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ ", "popup": { "main": { "label": "à§³" } } }, - "default": { "label": "àŠŸ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ", "popup": { "main": { "label": "àŠž" } } }, - "default": { "label": "àŠ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ‰", "popup": { "main": { "label": "ৎ" } } }, - "default": { "label": "ু" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ‡" }, - "default": { "label": "àŠ¿" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ”" }, - "default": { "label": "àŠ“" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ«" }, - "default": { "label": "àŠª" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ৈ" }, - "default": { "label": "ে" } - } - ], - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ…" }, - "default": { "label": "àŠŸ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ·" }, - "default": { "label": "àŠž" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¢" }, - "default": { "label": "àŠ¡" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¥" }, - "default": { "label": "àŠ€" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ˜" }, - "default": { "label": "àŠ—" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠƒ" }, - "default": { "label": "àŠ¹" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ" }, - "default": { "label": "àŠœ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ–" }, - "default": { "label": "àŠ•" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ‚" }, - "default": { "label": "àŠ²" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ৌ" }, - "default": { "label": "ো" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "à§³" }, - "default": { "label": "॥" } - } - ], - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¯" }, - "default": { "label": "য়" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ঢ়" }, - "default": { "label": "àŠ¶" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ›" }, - "default": { "label": "àŠš" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ‹" }, - "default": { "label": "àŠ†" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ­" }, - "default": { "label": "àŠ¬" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ£" }, - "default": { "label": "àŠš" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ™" }, - "default": { "label": "àŠ®" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ৃ" }, - "default": { "label": "ी" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ" }, - "default": { "label": "্" } - } - ], - [ - { "label": "," }, - { "label": "." } - ] -] diff --git a/app/src/main/assets/layouts/bengali_unijoy.json b/app/src/main/assets/layouts/bengali_unijoy.json deleted file mode 100644 index bbe534982..000000000 --- a/app/src/main/assets/layouts/bengali_unijoy.json +++ /dev/null @@ -1,112 +0,0 @@ -[ - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ‚" }, - "default": { "label": "àŠ™" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "য়" }, - "default": { "label": "àŠ¯" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¢" }, - "default": { "label": "àŠ¡" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ«" }, - "default": { "label": "àŠª" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ " }, - "default": { "label": "àŠŸ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ›" }, - "default": { "label": "àŠš" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ" }, - "default": { "label": "àŠœ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠž" }, - "default": { "label": "àŠ¹" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ˜" }, - "default": { "label": "àŠ—" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ঢ়" }, - "default": { "label": "ড়" } - } - ], - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠƒ" }, - "default": { "label": "ৃ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ূ" }, - "default": { "label": "ু" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ী" }, - "default": { "label": "àŠ¿" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ…" }, - "default": { "label": "àŠŸ" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ" }, - "default": { "label": "্" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ­" }, - "default": { "label": "àŠ¬" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ–" }, - "default": { "label": "àŠ•" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¥" }, - "default": { "label": "àŠ€" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ§" }, - "default": { "label": "àŠŠ" } - } - ], - [ - { "$": "shift_state_selector", - "manualOrLocked": { "label": "à§àŠ¯" }, - "default": { "label": "à§àŠ°" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ৌ" }, - "default": { "label": "ো" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "ৈ" }, - "default": { "label": "ে" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ²" }, - "default": { "label": "àŠ°" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ£" }, - "default": { "label": "àŠš" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ·" }, - "default": { "label": "àŠž" } - }, - { "$": "shift_state_selector", - "manualOrLocked": { "label": "àŠ¶" }, - "default": { "label": "àŠ®" } - } - ] -] diff --git a/app/src/main/assets/layouts/clipboard_bottom/clip_bottom_row.json b/app/src/main/assets/layouts/clipboard_bottom/clip_bottom_row.json new file mode 100644 index 000000000..2a7c8f6b1 --- /dev/null +++ b/app/src/main/assets/layouts/clipboard_bottom/clip_bottom_row.json @@ -0,0 +1,7 @@ +[ + [ + { "label": "alpha", "width": 0.15 }, + { "label": "space", "width": -1 }, + { "label": "delete", "width": 0.15 } + ] +] diff --git a/app/src/main/assets/layouts/emoji_bottom/emoji_bottom_row.json b/app/src/main/assets/layouts/emoji_bottom/emoji_bottom_row.json new file mode 100644 index 000000000..2a7c8f6b1 --- /dev/null +++ b/app/src/main/assets/layouts/emoji_bottom/emoji_bottom_row.json @@ -0,0 +1,7 @@ +[ + [ + { "label": "alpha", "width": 0.15 }, + { "label": "space", "width": -1 }, + { "label": "delete", "width": 0.15 } + ] +] diff --git a/app/src/main/assets/layouts/functional_keys.json b/app/src/main/assets/layouts/functional/functional_keys.json similarity index 100% rename from app/src/main/assets/layouts/functional_keys.json rename to app/src/main/assets/layouts/functional/functional_keys.json diff --git a/app/src/main/assets/layouts/functional_keys_tablet.json b/app/src/main/assets/layouts/functional/functional_keys_tablet.json similarity index 100% rename from app/src/main/assets/layouts/functional_keys_tablet.json rename to app/src/main/assets/layouts/functional/functional_keys_tablet.json diff --git a/app/src/main/assets/layouts/main/akan.txt b/app/src/main/assets/layouts/main/akan.txt new file mode 100644 index 000000000..1f139b582 --- /dev/null +++ b/app/src/main/assets/layouts/main/akan.txt @@ -0,0 +1,28 @@ +ɛ q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ɔ x +c ¢ +v +b +n +m diff --git a/app/src/main/assets/layouts/arabic.txt b/app/src/main/assets/layouts/main/arabic.txt similarity index 100% rename from app/src/main/assets/layouts/arabic.txt rename to app/src/main/assets/layouts/main/arabic.txt diff --git a/app/src/main/assets/layouts/main/arabic_hijai.txt b/app/src/main/assets/layouts/main/arabic_hijai.txt new file mode 100644 index 000000000..acc3a007d --- /dev/null +++ b/app/src/main/assets/layouts/main/arabic_hijai.txt @@ -0,0 +1,34 @@ +ز +ر +ذ +د +Ø® +Ø­ +ج +Ø« +ت +Øš +ا + +ك +ق +ف +غ +ع +Øž +Ø· +ض +ص +ØŽ +س + +Ø¡ +ى +ي +Ø€ +و +Ø© +ﻩ +ن +م +ل diff --git a/app/src/main/assets/layouts/arabic_pc.txt b/app/src/main/assets/layouts/main/arabic_pc.txt similarity index 100% rename from app/src/main/assets/layouts/arabic_pc.txt rename to app/src/main/assets/layouts/main/arabic_pc.txt diff --git a/app/src/main/assets/layouts/armenian_phonetic.txt b/app/src/main/assets/layouts/main/armenian_phonetic.txt similarity index 100% rename from app/src/main/assets/layouts/armenian_phonetic.txt rename to app/src/main/assets/layouts/main/armenian_phonetic.txt diff --git a/app/src/main/assets/layouts/azerty.json b/app/src/main/assets/layouts/main/azerty.json similarity index 100% rename from app/src/main/assets/layouts/azerty.json rename to app/src/main/assets/layouts/main/azerty.json diff --git a/app/src/main/assets/layouts/belarusian.txt b/app/src/main/assets/layouts/main/belarusian.txt similarity index 100% rename from app/src/main/assets/layouts/belarusian.txt rename to app/src/main/assets/layouts/main/belarusian.txt diff --git a/app/src/main/assets/layouts/main/bemba.txt b/app/src/main/assets/layouts/main/bemba.txt new file mode 100644 index 000000000..5253b2885 --- /dev/null +++ b/app/src/main/assets/layouts/main/bemba.txt @@ -0,0 +1,29 @@ +q +w +e +r +t +y +u +i +o +p +ŋ + +a +s +d +f +g +h +j +k +l + +z +x +c +v +b +n +m diff --git a/app/src/main/assets/layouts/bengali_akkhor.json b/app/src/main/assets/layouts/main/bengali_akkhor.json similarity index 100% rename from app/src/main/assets/layouts/bengali_akkhor.json rename to app/src/main/assets/layouts/main/bengali_akkhor.json diff --git a/app/src/main/assets/layouts/main/bengali_baishakhi.json b/app/src/main/assets/layouts/main/bengali_baishakhi.json new file mode 100644 index 000000000..6b6ee4487 --- /dev/null +++ b/app/src/main/assets/layouts/main/bengali_baishakhi.json @@ -0,0 +1,127 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¢", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¡", "popup": { "relevant": [{ "label": "àŠ¢" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ূ", "labelFlags": 1073741824 }, + "default": { "label": "ী", "popup": { "relevant": [{ "label": "ূ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "ে", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৃ", "labelFlags": 1073741824 }, + "default": { "label": "àŠ°", "popup": { "main": { "label": "àŠ‹" }, "relevant": [{ "label": "àŠ°â€à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ ", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{ "label": "àŠ " }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "য়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¯", "popup": { "relevant": [{ "label": "য়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‰", "labelFlags": 1073741824 }, + "default": { "label": "ু", "popup": { "relevant": [{ "label": "àŠŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‡", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¿", "popup": { "relevant": [{ "label": "àŠˆ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ“", "labelFlags": 1073741824 }, + "default": { "label": "ো", "popup": { "relevant": [{ "label": "àŠ”" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ«", "labelFlags": 1073741824 }, + "default": { "label": "àŠª", "popup": { "relevant": [{ "label": "àŠ«" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ…", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{ "label": "àŠ†" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¶", "labelFlags": 1073741824 }, + "default": { "label": "àŠž", "popup": { "relevant": [{ "label": "àŠ·" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ§", "labelFlags": 1073741824 }, + "default": { "label": "àŠŠ", "popup": { "relevant": [{ "label": "àŠ§" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¥", "labelFlags": 1073741824 }, + "default": { "label": "àŠ€", "popup": { "main": { "label": "àŠ¥" }, "relevant": [{ "label": "ৎ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ˜", "labelFlags": 1073741824 }, + "default": { "label": "àŠ—", "popup": { "relevant": [{ "label": "àŠ˜" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¹", "labelFlags": 1073741824 }, + "default": { "label": "্", "popup": { "relevant": [{ "label": "àŠƒ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "àŠœ", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ–", "labelFlags": 1073741824 }, + "default": { "label": "àŠ•", "popup": { "relevant": [{ "label": "àŠ–" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‚", "labelFlags": 1073741824 }, + "default": { "label": "àŠ²", "popup": { "relevant": [{ "label": "àŠ‚" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৌ", "labelFlags": 1073741824 }, + "default": { "label": "ৈ", "popup": { "relevant": [{ "label": "ৌ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 }, + "default": { "label": "ড়", "popup": { "relevant": [{ "label": "ঢ়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ›", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ›" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824, "popup": { "relevant": [ + { "label": "!autoColumnOrder!6" }, + { "label": "àŠŒ" }, + { "label": "ৄ" }, + { "label": "àŠœ" }, + { "label": "à§¢" }, + { "label": "à§±" }, + { "label": "à§£" }, + { "label": "ৗ" }, + { "label": "à§ " }, + { "label": "৺" }, + { "label": "àŠŒ" }, + { "label": "à§°" }, + { "label": "à§¡"} + ]}}, + "default": { "label": "àŠž", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ­", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¬", "popup": { "relevant": [{ "label": "àŠ­" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ£", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ£" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ™", "labelFlags": 1073741824 }, + "default": { "label": "àŠ®", "popup": { "relevant": [{ "label": "àŠ" }]}} + } + ] + ] + \ No newline at end of file diff --git a/app/src/main/assets/layouts/main/bengali_inscript.json b/app/src/main/assets/layouts/main/bengali_inscript.json new file mode 100644 index 000000000..3e03525e8 --- /dev/null +++ b/app/src/main/assets/layouts/main/bengali_inscript.json @@ -0,0 +1,142 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ”", "labelFlags": 1073741824 }, + "default": { "label": "ৌ", "popup": { "relevant": [{"label": "àŠ”" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "ৈ", "popup": { "relevant": [{"label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ†", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{"label": "àŠ†" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠˆ", "labelFlags": 1073741824 }, + "default": { "label": "ী", "popup": { "relevant": [{"label": "àŠˆ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠŠ", "labelFlags": 1073741824 }, + "default": { "label": "ূ", "popup": { "relevant": [{"label": "àŠŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ­", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¬", "popup": { "relevant": [{"label": "àŠ­" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ™", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¹", "popup": { "relevant": [{"label": "àŠ™" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ˜", "labelFlags": 1073741824 }, + "default": { "label": "àŠ—", "popup": { "relevant": [{"label": "àŠ˜" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ§", "labelFlags": 1073741824 }, + "default": { "label": "àŠŠ", "popup": { "relevant": [{"label": "àŠ§" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "àŠœ", "popup": { "relevant": [{"label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¢", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¡", "popup": { "relevant": [{"label": "àŠ¢" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ“", "labelFlags": 1073741824 }, + "default": { "label": "ো", "popup": { "relevant": [{"label": "àŠ“" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "ে", "popup": { "relevant": [{"label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ…", "labelFlags": 1073741824 }, + "default": { "label": "্", "popup": { "relevant": [{"label": "àŠ…" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‡", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¿", "popup": { "relevant": [{"label": "àŠ‡" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‰", "labelFlags": 1073741824 }, + "default": { "label": "ু", "popup": { "relevant": [{"label": "àŠ‰" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ«", "labelFlags": 1073741824 }, + "default": { "label": "àŠª", "popup": { "relevant": [{"label": "àŠ«" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ড়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ°", "popup": { "main": { "label": "ড়" }, "relevant": [{ "label": "àŠ°â€à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ–", "labelFlags": 1073741824 }, + "default": { "label": "àŠ•", "popup": { "relevant": [{"label": "àŠ–" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¥", "labelFlags": 1073741824 }, + "default": { "label": "àŠ€", "popup": { "main": { "label": "àŠ¥" }, "relevant": [{ "label": "ৎ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ›", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{"label": "àŠ›" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ ", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{"label": "àŠ " }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‹", "labelFlags": 1073741824 }, + "default": { "label": "ৃ", "popup": { "relevant": [{"label": "àŠ‹" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824, "popup": { "relevant": [ + {"label": "!autoColumnOrder!6" }, + { "label": "àŠŒ" }, + { "label": "ৄ" }, + { "label": "àŠœ" }, + { "label": "à§¢" }, + { "label": "à§±" }, + { "label": "à§£" }, + { "label": "ৗ" }, + { "label": "à§ " }, + { "label": "৺" }, + { "label": "àŠŒ" }, + { "label": "à§°" }, + { "label": "à§¡" } + ]}}, + "default": { "label": "àŠ‚", "popup": { "main": { "label": "àŠ" }, "relevant": [{ "label": "àŠƒ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ£", "labelFlags": 1073741824 }, + "default": { "label": "àŠ®", "popup": { "relevant": [{"label": "àŠ£" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠž", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{"label": "àŠž" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¬", "popup": { "relevant": [{"label": "ঢ়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ·", "labelFlags": 1073741824 }, + "default": { "label": "àŠ²", "popup": { "relevant": [{"label": "àŠ·" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¶", "labelFlags": 1073741824 }, + "default": { "label": "àŠž", "popup": { "relevant": [{"label": "àŠ¶" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¯", "labelFlags": 1073741824 }, + "default": { "label": "য়", "popup": { "relevant": [{"label": "àŠ¯" }]}} + } + ] +] \ No newline at end of file diff --git a/app/src/main/assets/layouts/main/bengali_probhat.json b/app/src/main/assets/layouts/main/bengali_probhat.json new file mode 100644 index 000000000..fc147f0e6 --- /dev/null +++ b/app/src/main/assets/layouts/main/bengali_probhat.json @@ -0,0 +1,141 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ§", "labelFlags": 1073741824 }, + "default": { "label": "àŠŠ", "popup": { "relevant": [{ "label": "àŠ§" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠŠ", "labelFlags": 1073741824 }, + "default": { "label": "ূ", "popup": { "relevant": [{ "label": "àŠŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠˆ", "labelFlags": 1073741824 }, + "default": { "label": "ী", "popup": { "relevant": [{ "label": "àŠˆ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ড়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ°", "popup": { "main": { "label": "ড়" }, "relevant": [{ "label": "àŠ°â€à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ ", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{ "label": "àŠ " }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "àŠ", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‰", "labelFlags": 1073741824 }, + "default": { "label": "ু", "popup": { "relevant": [{ "label": "àŠ‰" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‡", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¿", "popup": { "relevant": [{ "label": "àŠ‡" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ”", "labelFlags": 1073741824 }, + "default": { "label": "àŠ“", "popup": { "relevant": [{ "label": "àŠ”" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ«", "labelFlags": 1073741824 }, + "default": { "label": "àŠª", "popup": { "relevant": [{ "label": "àŠ«" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৈ", "labelFlags": 1073741824 }, + "default": { "label": "ে", "popup": { "relevant": [{ "label": "ৈ" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ…", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{ "label": "àŠ…" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ·", "labelFlags": 1073741824 }, + "default": { "label": "àŠž", "popup": { "relevant": [{ "label": "àŠ·" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¢", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¡", "popup": { "relevant": [{ "label": "àŠ¢" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¥", "labelFlags": 1073741824 }, + "default": { "label": "àŠ€", "popup": { "main": { "label": "àŠ¥" }, "relevant": [{ "label": "ৎ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ˜", "labelFlags": 1073741824 }, + "default": { "label": "àŠ—", "popup": { "relevant": [{ "label": "àŠ˜" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠƒ", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¹", "popup": { "relevant": [{ "label": "àŠƒ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "àŠœ", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ–", "labelFlags": 1073741824 }, + "default": { "label": "àŠ•", "popup": { "relevant": [{ "label": "àŠ–" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‚", "labelFlags": 1073741824 }, + "default": { "label": "àŠ²", "popup": { "relevant": [{ "label": "àŠ‚" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৌ", "labelFlags": 1073741824 }, + "default": { "label": "ো", "popup": { "relevant": [{ "label": "ৌ" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¯", "labelFlags": 1073741824 }, + "default": { "label": "য়", "popup": { "main": { "label": "àŠ¯" }, "relevant": [{ "label": "à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¶", "popup": { "relevant": [{ "label": "ঢ়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ›", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ›" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‹", "labelFlags": 1073741824 }, + "default": { "label": "àŠ†", "popup": { "relevant": [{ "label": "àŠ‹" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ­", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¬", "popup": { "relevant": [{ "label": "àŠ­" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ£", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ£" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ™", "labelFlags": 1073741824 }, + "default": { "label": "àŠ®", "popup": { "relevant": [{ "label": "àŠ™" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৃ", "labelFlags": 1073741824 }, + "default": { "label": "àŠž", "popup": { "relevant": [{ "label": "ৃ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "popup": { "relevant": [ + { "label": "!autoColumnOrder!6"}, + { "label": "àŠŒ" }, + { "label": "ৄ"}, + { "label": "àŠœ"}, + { "label": "à§¢"}, + { "label": "à§±"}, + { "label": "à§£"}, + { "label": "ৗ"}, + { "label": "à§ "}, + { "label": "৺"}, + { "label": "àŠŒ"}, + { "label": "à§°"}, + { "label": "à§¡" }]}}, + "default": { "label": "্", "popup": { "relevant": [{ "label": "àŠ" }]}} + } + ] +] \ No newline at end of file diff --git a/app/src/main/assets/layouts/main/bengali_unijoy.json b/app/src/main/assets/layouts/main/bengali_unijoy.json new file mode 100644 index 000000000..929f5d93e --- /dev/null +++ b/app/src/main/assets/layouts/main/bengali_unijoy.json @@ -0,0 +1,126 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ‚", "labelFlags": 1073741824 }, + "default": { "label": "àŠ™", "popup": { "relevant": [{ "label": "àŠ‚" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "য়", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¯", "popup": { "relevant": [{ "label": "য়" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¢", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¡", "popup": { "relevant": [{ "label": "àŠ¢" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ«", "labelFlags": 1073741824 }, + "default": { "label": "àŠª", "popup": { "relevant": [{ "label": "àŠ«" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ ", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "relevant": [{ "label": "àŠ " }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ›", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ›" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824 }, + "default": { "label": "àŠœ", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠž", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¹", "popup": { "relevant": [{ "label": "àŠž" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ˜", "labelFlags": 1073741824 }, + "default": { "label": "àŠ—", "popup": { "relevant": [{ "label": "àŠ˜" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ঢ়", "labelFlags": 1073741824 }, + "default": { "label": "ড়", "popup": { "relevant": [{ "label": "ঢ়" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠƒ", "labelFlags": 1073741824 }, + "default": { "label": "ৃ", "popup": { "relevant": [{ "label": "àŠ‹" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ূ", "popup": { "relevant": [{ "label": "àŠŠ" }]}}, + "default": { "label": "ু", "popup": { "relevant": [{ "label": "àŠ‰" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ী", "popup": { "relevant": [{ "label": "àŠˆ"}]}}, + "default": { "label": "àŠ¿", "popup": { "relevant": [{ "label": "àŠ‡" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ…", "labelFlags": 1073741824 }, + "default": { "label": "àŠŸ", "popup": { "main": { "label": "àŠ†" }, "relevant": [{ "label": "àŠ…" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ", "labelFlags": 1073741824, "popup": { "relevant": [ + { "label": "!autoColumnOrder!6" }, + { "label": "àŠŒ" }, + { "label": "ৄ" }, + { "label": "àŠœ" }, + { "label": "à§¢" }, + { "label": "à§±" }, + { "label": "à§£" }, + { "label": "ৗ" }, + { "label": "à§ " }, + { "label": "৺" }, + { "label": "àŠŒ" }, + { "label": "à§°" }, + { "label": "à§¡"} + ]}}, + "default": { "label": "্", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ­", "labelFlags": 1073741824 }, + "default": { "label": "àŠ¬", "popup": { "relevant": [{ "label": "àŠ­" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ–", "labelFlags": 1073741824 }, + "default": { "label": "àŠ•", "popup": { "relevant": [{ "label": "àŠ–" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¥", "labelFlags": 1073741824 }, + "default": { "label": "àŠ€", "popup": { "main": { "label": "àŠ¥" }, "relevant": [{ "label": "ৎ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ§", "labelFlags": 1073741824 }, + "default": { "label": "àŠŠ", "popup": { "relevant": [{ "label": "àŠ§" }]}} + } + ], + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "à§àŠ¯", "labelFlags": 1073741824 }, + "default": { "label": "à§àŠ°", "popup": { "relevant": [{ "label": "à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৌ", "popup": { "relevant": [{ "label": "àŠ”" }]}}, + "default": { "label": "ো", "popup": { "relevant": [{ "label": "àŠ“" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "ৈ", "popup": { "relevant": [{ "label": "àŠ" }]}}, + "default": { "label": "ে", "popup": { "relevant": [{ "label": "àŠ" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ²", "labelFlags": 1073741824 }, + "default": { "label": "àŠ°", "popup": { "main": { "label": "àŠ²" }, "relevant": [{ "label": "àŠ°â€à§àŠ¯" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ£", "labelFlags": 1073741824 }, + "default": { "label": "àŠš", "popup": { "relevant": [{ "label": "àŠ£" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ·", "labelFlags": 1073741824 }, + "default": { "label": "àŠž", "popup": { "relevant": [{ "label": "àŠ·" }]}} + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "àŠ¶", "labelFlags": 1073741824 }, + "default": { "label": "àŠ®", "popup": { "relevant": [{ "label": "àŠ¶" }]}} + } + ] +] \ No newline at end of file diff --git a/app/src/main/assets/layouts/bepo.txt b/app/src/main/assets/layouts/main/bepo.txt similarity index 100% rename from app/src/main/assets/layouts/bepo.txt rename to app/src/main/assets/layouts/main/bepo.txt diff --git a/app/src/main/assets/layouts/bulgarian.txt b/app/src/main/assets/layouts/main/bulgarian.txt similarity index 100% rename from app/src/main/assets/layouts/bulgarian.txt rename to app/src/main/assets/layouts/main/bulgarian.txt diff --git a/app/src/main/assets/layouts/bulgarian_bds.txt b/app/src/main/assets/layouts/main/bulgarian_bds.txt similarity index 100% rename from app/src/main/assets/layouts/bulgarian_bds.txt rename to app/src/main/assets/layouts/main/bulgarian_bds.txt diff --git a/app/src/main/assets/layouts/bulgarian_bekl.txt b/app/src/main/assets/layouts/main/bulgarian_bekl.txt similarity index 100% rename from app/src/main/assets/layouts/bulgarian_bekl.txt rename to app/src/main/assets/layouts/main/bulgarian_bekl.txt diff --git a/app/src/main/assets/layouts/main/central_kurdish.txt b/app/src/main/assets/layouts/main/central_kurdish.txt new file mode 100644 index 000000000..eec1593e8 --- /dev/null +++ b/app/src/main/assets/layouts/main/central_kurdish.txt @@ -0,0 +1,31 @@ +ق +و +ە +ر +ت +ی +ێ +ØŠ +ۆ +ÙŸ + +ا +س +ØŽ +د +ف +ÚŸ|ه +ژ +ل +Ú© +Ú¯ + +ز +ع +Ø­ +ج +چ +Ø® +Øš +ن +م diff --git a/app/src/main/assets/layouts/chuvash.txt b/app/src/main/assets/layouts/main/chuvash.txt similarity index 100% rename from app/src/main/assets/layouts/chuvash.txt rename to app/src/main/assets/layouts/main/chuvash.txt diff --git a/app/src/main/assets/layouts/colemak.json b/app/src/main/assets/layouts/main/colemak.json similarity index 100% rename from app/src/main/assets/layouts/colemak.json rename to app/src/main/assets/layouts/main/colemak.json diff --git a/app/src/main/assets/layouts/colemak_dh.json b/app/src/main/assets/layouts/main/colemak_dh.json similarity index 100% rename from app/src/main/assets/layouts/colemak_dh.json rename to app/src/main/assets/layouts/main/colemak_dh.json diff --git a/app/src/main/assets/layouts/main/dagbani.txt b/app/src/main/assets/layouts/main/dagbani.txt new file mode 100644 index 000000000..588ff0513 --- /dev/null +++ b/app/src/main/assets/layouts/main/dagbani.txt @@ -0,0 +1,28 @@ +q +w +ɛ e +r ¢ +t +y +u +i +ɔ o +p + +a +s +d +f +É£ g +h +j +k +l + +ʒ z +x x +c +v +b +ŋ n +m diff --git a/app/src/main/assets/layouts/main/dargwa_urakhi.txt b/app/src/main/assets/layouts/main/dargwa_urakhi.txt new file mode 100644 index 000000000..44da4e910 --- /dev/null +++ b/app/src/main/assets/layouts/main/dargwa_urakhi.txt @@ -0,0 +1,35 @@ +й +ц +у Ó¯ Ó± Ü ӱ́ +к ҟ ҝ Ò¡ +е ē ë е́ ë́ +М +г ґ ғ ꚕ +ш +щ +з ҙ +х Ò³ ẋ +ъ + +ф +ы +в w +а ā ӓ á ӓ́ +п Ô¥ +р ҏ +П П̄ Ó§ ó ӧ́ +л +ÐŽ +ж җ +э э̄ э́ +Ӏ + +я я̄ я́ Ế Ê Ç£ +ч Ò¹ +с +ÐŒ +О Ó£ О́ +т ԏ +ь +б ҕ +ю ю́ \ No newline at end of file diff --git a/app/src/main/assets/layouts/dvorak.json b/app/src/main/assets/layouts/main/dvorak.json similarity index 100% rename from app/src/main/assets/layouts/dvorak.json rename to app/src/main/assets/layouts/main/dvorak.json diff --git a/app/src/main/assets/layouts/esperanto.txt b/app/src/main/assets/layouts/main/esperanto.txt similarity index 100% rename from app/src/main/assets/layouts/esperanto.txt rename to app/src/main/assets/layouts/main/esperanto.txt diff --git a/app/src/main/assets/layouts/main/ewe.txt b/app/src/main/assets/layouts/main/ewe.txt new file mode 100644 index 000000000..bb307f1a3 --- /dev/null +++ b/app/src/main/assets/layouts/main/ewe.txt @@ -0,0 +1,28 @@ +ɛ q +w +e +r +t +É£ y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ɔ x +c ¢ +v +b +n +m diff --git a/app/src/main/assets/layouts/farsi.txt b/app/src/main/assets/layouts/main/farsi.txt similarity index 100% rename from app/src/main/assets/layouts/farsi.txt rename to app/src/main/assets/layouts/main/farsi.txt diff --git a/app/src/main/assets/layouts/main/ga.txt b/app/src/main/assets/layouts/main/ga.txt new file mode 100644 index 000000000..03d1fe66e --- /dev/null +++ b/app/src/main/assets/layouts/main/ga.txt @@ -0,0 +1,28 @@ +ɛ q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ɔ x +ŋ c ¢ +v +b +n +m diff --git a/app/src/main/assets/layouts/georgian.json b/app/src/main/assets/layouts/main/georgian.json similarity index 100% rename from app/src/main/assets/layouts/georgian.json rename to app/src/main/assets/layouts/main/georgian.json diff --git a/app/src/main/assets/layouts/greek.json b/app/src/main/assets/layouts/main/greek.json similarity index 82% rename from app/src/main/assets/layouts/greek.json rename to app/src/main/assets/layouts/main/greek.json index c79f686ea..2510bc534 100644 --- a/app/src/main/assets/layouts/greek.json +++ b/app/src/main/assets/layouts/main/greek.json @@ -23,7 +23,11 @@ { "label": "η" }, { "label": "Ο" }, { "label": "κ" }, - { "label": "λ" } + { "label": "λ" }, + { "$": "shift_state_selector", + "shiftedManual": { "code": 776, "label": "š" }, + "default": { "code": 769, "label": "ÂŽ" } + } ], [ { "label": "ζ" }, diff --git a/app/src/main/assets/layouts/gujarati.json b/app/src/main/assets/layouts/main/gujarati.json similarity index 100% rename from app/src/main/assets/layouts/gujarati.json rename to app/src/main/assets/layouts/main/gujarati.json diff --git a/app/src/main/assets/layouts/halmak.txt b/app/src/main/assets/layouts/main/halmak.txt similarity index 100% rename from app/src/main/assets/layouts/halmak.txt rename to app/src/main/assets/layouts/main/halmak.txt diff --git a/app/src/main/assets/layouts/main/hausa.txt b/app/src/main/assets/layouts/main/hausa.txt new file mode 100644 index 000000000..3138eb991 --- /dev/null +++ b/app/src/main/assets/layouts/main/hausa.txt @@ -0,0 +1,28 @@ +ẹ q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ọ x +c +v +b +n ₩ +m diff --git a/app/src/main/assets/layouts/hebrew.json b/app/src/main/assets/layouts/main/hebrew.json similarity index 96% rename from app/src/main/assets/layouts/hebrew.json rename to app/src/main/assets/layouts/main/hebrew.json index 955f60ea4..99cdaa34b 100644 --- a/app/src/main/assets/layouts/hebrew.json +++ b/app/src/main/assets/layouts/main/hebrew.json @@ -2,12 +2,12 @@ [ { "$": "variation_selector", "email": { "label": "-" }, - "url": { "label": "-" }, + "uri": { "label": "-" }, "default": { "label": "'", "popup": { "relevant": [{ "label": "׳" }, { "label": "׎" }, { "label": "\"" }] } } }, { "$": "variation_selector", "email": { "label": "_" }, - "url": { "label": "_" }, + "uri": { "label": "_" }, "default": { "label": "-", "popup": { "relevant": [{ "label": "ÖŸ" }, { "label": "_" }] } } }, { "label": "×§", "popup": { diff --git a/app/src/main/assets/layouts/main/hebrew_1452_2.json b/app/src/main/assets/layouts/main/hebrew_1452_2.json new file mode 100644 index 000000000..137a5d510 --- /dev/null +++ b/app/src/main/assets/layouts/main/hebrew_1452_2.json @@ -0,0 +1,85 @@ +[ + [ + { "label": "×¥", "popup": { + "relevant": [ + { "label": "ש\u05c2" } + ] + } }, + { "label": "ן", "popup": { + "relevant": [ + { "label": "ש\u05c1" } + ] + } }, + { "label": "×§", "popup": { + "relevant": [ + { "label": "\u05b8" }, + { "label": "\u05bb" } + ] + } }, + { "label": "ך", "popup": { + "relevant": [ + { "label": "\u05b3" } + ] + } }, + { "label": "א" }, + { "label": "ט" }, + { "label": "ו", "popup": { + "relevant": [ + { "label": "\u05b9" } + ] + } }, + { "label": "ת" }, + { "label": "ם" }, + { "label": "×€", "popup": { + "relevant": [ + { "label": "\u05b2" }, + { "label": "\u05b7" } + ] + } } + ], + [ + { "label": "ש", "popup": { + "relevant": [ + { "label": "\u05b0" } + ] + } }, + { "label": "ד", "popup": { + "relevant": [ + { "label": "\u05bc" } + ] + } }, + { "label": "ג" }, + { "label": "כ" }, + { "label": "×¢" }, + { "label": "י" }, + { "label": "ח", "popup": { + "relevant": [ + { "label": "\u05b4" } + ] + } }, + { "label": "ל" }, + { "label": "ך" }, + { "label": "×£" } + ], + [ + { "label": "ז" }, + { "label": "ס", "popup": { + "relevant": [ + { "label": "\u05b6" } + ] + } }, + { "label": "ב", "popup": { + "relevant": [ + { "label": "\u05b1" } + ] + } }, + { "label": "ה" }, + { "label": "× " }, + { "label": "מ" }, + { "label": "׊", "popup": { + "relevant": [ + { "label": "\u05b5" } + ] + } } + ] +] diff --git a/app/src/main/assets/layouts/hindi.json b/app/src/main/assets/layouts/main/hindi.json similarity index 100% rename from app/src/main/assets/layouts/hindi.json rename to app/src/main/assets/layouts/main/hindi.json diff --git a/app/src/main/assets/layouts/hindi_compact.json b/app/src/main/assets/layouts/main/hindi_compact.json similarity index 100% rename from app/src/main/assets/layouts/hindi_compact.json rename to app/src/main/assets/layouts/main/hindi_compact.json diff --git a/app/src/main/assets/layouts/main/hindi_phonetic.json b/app/src/main/assets/layouts/main/hindi_phonetic.json new file mode 100644 index 000000000..0a9193299 --- /dev/null +++ b/app/src/main/assets/layouts/main/hindi_phonetic.json @@ -0,0 +1,554 @@ +[ + [ + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€ " + }, + "default": { + "label": "à€Ÿ" + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€¢" + }, + "default": { + "label": "à€¡", + "popup": { + "main": { + "label": "à€¡à€Œ" + }, + "relevant": [ + { + "label": "à€¢à€Œ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "ै" + }, + "default": { + "label": "े", + "popup": { + "main": { + "label": "à€" + }, + "relevant": [ + { + "label": "à€" + }, + { + "label": "à€" + }, + { + "code": 2374, + "label": " ॆ" + }, + { + "code": 2389, + "label": " ॕ" + }, + { + "code": 2382, + "label": " ॎ" + }, + { + "label": "à€Ž" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "ृ" + }, + "default": { + "label": "à€°", + "popup": { + "main": { + "label": "à€‹" + }, + "relevant": [ + { + "label": "ॠ" + }, + { + "label": "ॄ" + }, + { + "label": "à€±" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€¥" + }, + "default": { + "label": "à€€", + "popup": { + "main": { + "label": "à€€à¥à€°" + } + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "य़" + }, + "default": { + "label": "à€¯", + "popup": { + "main": { + "label": "ॺ" + } + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "ू" + }, + "default": { + "label": "ु", + "popup": { + "main": { + "label": "à€‰" + }, + "relevant": [ + { + "label": "à€Š" + }, + { + "label": "ॷ" + }, + { + "code": 2390, + "label": " ॖ" + }, + { + "label": "ॶ" + }, + { + "code": 2391, + "label": " ॗ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "ी" + }, + "default": { + "label": "à€¿", + "popup": { + "main": { + "label": "à€‡" + }, + "relevant": [ + { + "label": "à€ˆ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "ौ" + }, + "default": { + "label": "ो", + "popup": { + "main": { + "label": "à€“" + }, + "relevant": [ + { + "label": "à€”" + }, + { + "label": "à€‘" + }, + { + "code": 2383, + "label": " ॏ" + }, + { + "label": "ॵ" + }, + { + "label": "ॐ" + }, + { + "label": "ॉ" + }, + { + "label": "ॳ" + }, + { + "label": "ॎ" + }, + { + "code": 2362, + "label": " à€º" + }, + { + "code": 2363, + "label": " à€»" + }, + { + "label": "à€’" + }, + { + "code": 2378, + "label": " ॊ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "फ़" + }, + "default": { + "label": "à€ª" + } + } + ], + [ + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€…" + }, + "default": { + "label": "à€Ÿ", + "popup": { + "main": { + "label": "à€†" + }, + "relevant": [ + { + "label": "ॅ" + }, + { + "label": "ॲ" + }, + { + "label": "à€„" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€¶" + }, + "default": { + "label": "à€ž", + "popup": { + "main": { + "label": "à€¶à¥à€°" + }, + "relevant": [ + { + "label": "à€·" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€§" + }, + "default": { + "label": "à€Š", + "popup": { + "main": { + "label": "à€¡à€Œ" + }, + "relevant": [ + { + "label": "य़" + }, + { + "label": "à€¢à€Œ" + }, + { + "label": "फ़" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "code": 2364, + "label": " à€Œ" + }, + "default": { + "label": "à€«", + "popup": { + "main": { + "label": "à€«à€Œ" + } + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€˜" + }, + "default": { + "label": "à€—", + "popup": { + "main": { + "label": "ग़" + }, + "relevant": [ + { + "label": "ॻ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€ƒ" + }, + "default": { + "label": "à€¹" + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€" + }, + "default": { + "label": "à€œ", + "popup": { + "main": { + "label": "à€œà€Œ" + }, + "relevant": [ + { + "label": "ौ" + }, + { + "label": "ॹ" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€–" + }, + "default": { + "label": "à€•", + "popup": { + "main": { + "label": "क़" + }, + "relevant": [ + { + "label": "ख़" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€³" + }, + "default": { + "label": "à€²", + "popup": { + "relevant": [ + { + "label": "à€Ž" + }, + { + "label": "ॣ" + }, + { + "label": "à€Œ" + }, + { + "label": "ॡ" + }, + { + "label": "ॢ" + } + ] + } + } + } + ], + [ + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€œà€Œ", + "labelFlags": 128 + }, + "default": { + "label": "à€œà¥à€ž", + "labelFlags": 128 + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€·" + }, + "default": { + "label": "à€•à¥à€·", + "labelFlags": 128 + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€›" + }, + "default": { + "label": "à€š", + "popup": { + "relevant": [ + { + "$": "auto_text_key", + "code": 2385, + "label": " ॑" + }, + { + "$": "auto_text_key", + "code": 2386, + "label": " ॒" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "्" + }, + "default": { + "label": "à€µ", + "popup": { + "relevant": [ + { + "$": "auto_text_key", + "code": 2387, + "label": " ॓" + }, + { + "$": "auto_text_key", + "code": 2388, + "label": " ॔" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€­" + }, + "default": { + "label": "à€¬", + "popup": { + "relevant": [ + { + "label": "ॿ" + }, + { + "label": "à€œ" + }, + { + "label": "॰" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€£" + }, + "default": { + "label": "à€š", + "popup": { + "main": { + "label": "à€™" + }, + "relevant": [ + { + "label": "à€©" + }, + { + "label": "à€ž" + } + ] + } + } + }, + { + "$": "shift_state_selector", + "manualOrLocked": { + "label": "à€‚" + }, + "default": { + "label": "à€®", + "popup": { + "main": { + "label": "à€" + }, + "relevant": [ + { + "label": "à€€" + } + ] + } + } + } + ] +] diff --git a/app/src/main/assets/layouts/hungarian_extended_qwertz.txt b/app/src/main/assets/layouts/main/hungarian_extended_qwertz.txt similarity index 100% rename from app/src/main/assets/layouts/hungarian_extended_qwertz.txt rename to app/src/main/assets/layouts/main/hungarian_extended_qwertz.txt diff --git a/app/src/main/assets/layouts/main/igbo.txt b/app/src/main/assets/layouts/main/igbo.txt new file mode 100644 index 000000000..9cf50d780 --- /dev/null +++ b/app/src/main/assets/layouts/main/igbo.txt @@ -0,0 +1,28 @@ +ṅ q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ọ x +c +ụ v +b +n ₩ +m diff --git a/app/src/main/assets/layouts/kabyle.json b/app/src/main/assets/layouts/main/kabyle.json similarity index 100% rename from app/src/main/assets/layouts/kabyle.json rename to app/src/main/assets/layouts/main/kabyle.json diff --git a/app/src/main/assets/layouts/kaitag.txt b/app/src/main/assets/layouts/main/kaitag.txt similarity index 100% rename from app/src/main/assets/layouts/kaitag.txt rename to app/src/main/assets/layouts/main/kaitag.txt diff --git a/app/src/main/assets/layouts/kannada.txt b/app/src/main/assets/layouts/main/kannada.txt similarity index 100% rename from app/src/main/assets/layouts/kannada.txt rename to app/src/main/assets/layouts/main/kannada.txt diff --git a/app/src/main/assets/layouts/kannada_extended.txt b/app/src/main/assets/layouts/main/kannada_extended.txt similarity index 100% rename from app/src/main/assets/layouts/kannada_extended.txt rename to app/src/main/assets/layouts/main/kannada_extended.txt diff --git a/app/src/main/assets/layouts/khmer.json b/app/src/main/assets/layouts/main/khmer.json similarity index 100% rename from app/src/main/assets/layouts/khmer.json rename to app/src/main/assets/layouts/main/khmer.json diff --git a/app/src/main/assets/layouts/main/kikuyu.txt b/app/src/main/assets/layouts/main/kikuyu.txt new file mode 100644 index 000000000..0fdbdd8d2 --- /dev/null +++ b/app/src/main/assets/layouts/main/kikuyu.txt @@ -0,0 +1,28 @@ +Ä© q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +Å© x +c +v +b +n +m diff --git a/app/src/main/assets/layouts/korean.json b/app/src/main/assets/layouts/main/korean.json similarity index 100% rename from app/src/main/assets/layouts/korean.json rename to app/src/main/assets/layouts/main/korean.json diff --git a/app/src/main/assets/layouts/main/korean_phonetic.json b/app/src/main/assets/layouts/main/korean_phonetic.json new file mode 100644 index 000000000..b2c2a6bb2 --- /dev/null +++ b/app/src/main/assets/layouts/main/korean_phonetic.json @@ -0,0 +1,55 @@ +[ + [ + { "label": "\u3147" }, + { "label": "\u3161" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3156" }, + "default": { "label": "\u3154", "popup": { "main": { "label": "\u3156" } } } + }, + { "label": "\u3139" }, + { "label": "\u314c" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3152" }, + "default": { "label": "\u3150", "popup": { "main": { "label": "\u3152" } } } + }, + { "label": "\u315c" }, + { "label": "\u3163" }, + { "label": "\u3157" }, + { "label": "\u314d" } + ], + [ + { "label": "\u314f" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3146" }, + "default": { "label": "\u3145", "popup": { "main": { "label": "\u3146" } } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3138" }, + "default": { "label": "\u3137", "popup": { "main": { "label": "\u3138" } } } + }, + { "label": "\u3151" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3132" }, + "default": { "label": "\u3131", "popup": { "main": { "label": "\u3132" } } } + }, + { "label": "\u314e" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3149" }, + "default": { "label": "\u3148", "popup": { "main": { "label": "\u3149" } } } + }, + { "label": "\u314b" }, + { "label": "\u315b" } + ], + [ + { "label": "\u3155" }, + { "label": "\u3160" }, + { "label": "\u314a" }, + { "label": "\u3153" }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "\u3143" }, + "default": { "label": "\u3142", "popup": { "main": { "label": "\u3143" } } } + }, + { "label": "\u3134" }, + { "label": "\u3141" } + ] +] diff --git a/app/src/main/assets/layouts/korean_sebeolsik_390.json b/app/src/main/assets/layouts/main/korean_sebeolsik_390.json similarity index 100% rename from app/src/main/assets/layouts/korean_sebeolsik_390.json rename to app/src/main/assets/layouts/main/korean_sebeolsik_390.json diff --git a/app/src/main/assets/layouts/korean_sebeolsik_final.json b/app/src/main/assets/layouts/main/korean_sebeolsik_final.json similarity index 100% rename from app/src/main/assets/layouts/korean_sebeolsik_final.json rename to app/src/main/assets/layouts/main/korean_sebeolsik_final.json diff --git a/app/src/main/assets/layouts/lao.json b/app/src/main/assets/layouts/main/lao.json similarity index 100% rename from app/src/main/assets/layouts/lao.json rename to app/src/main/assets/layouts/main/lao.json diff --git a/app/src/main/assets/layouts/main/lingala.txt b/app/src/main/assets/layouts/main/lingala.txt new file mode 100644 index 000000000..830109805 --- /dev/null +++ b/app/src/main/assets/layouts/main/lingala.txt @@ -0,0 +1,28 @@ +q +w +ɛ e +r +t +y +u +i +ɔ o +p + +a +s +d +f +g +h +j +k +l + +z +x +c +̌ v +b +n +m diff --git a/app/src/main/assets/layouts/main/luganda.txt b/app/src/main/assets/layouts/main/luganda.txt new file mode 100644 index 000000000..5253b2885 --- /dev/null +++ b/app/src/main/assets/layouts/main/luganda.txt @@ -0,0 +1,29 @@ +q +w +e +r +t +y +u +i +o +p +ŋ + +a +s +d +f +g +h +j +k +l + +z +x +c +v +b +n +m diff --git a/app/src/main/assets/layouts/macedonian.txt b/app/src/main/assets/layouts/main/macedonian.txt similarity index 100% rename from app/src/main/assets/layouts/macedonian.txt rename to app/src/main/assets/layouts/main/macedonian.txt diff --git a/app/src/main/assets/layouts/malayalam.txt b/app/src/main/assets/layouts/main/malayalam.txt similarity index 100% rename from app/src/main/assets/layouts/malayalam.txt rename to app/src/main/assets/layouts/main/malayalam.txt diff --git a/app/src/main/assets/layouts/mansi_north.txt b/app/src/main/assets/layouts/main/mansi_north.txt similarity index 100% rename from app/src/main/assets/layouts/mansi_north.txt rename to app/src/main/assets/layouts/main/mansi_north.txt diff --git a/app/src/main/assets/layouts/marathi.json b/app/src/main/assets/layouts/main/marathi.json similarity index 100% rename from app/src/main/assets/layouts/marathi.json rename to app/src/main/assets/layouts/main/marathi.json diff --git a/app/src/main/assets/layouts/mari.txt b/app/src/main/assets/layouts/main/mari.txt similarity index 100% rename from app/src/main/assets/layouts/mari.txt rename to app/src/main/assets/layouts/main/mari.txt diff --git a/app/src/main/assets/layouts/mongolian.txt b/app/src/main/assets/layouts/main/mongolian.txt similarity index 100% rename from app/src/main/assets/layouts/mongolian.txt rename to app/src/main/assets/layouts/main/mongolian.txt diff --git a/app/src/main/assets/layouts/nepali_romanized.json b/app/src/main/assets/layouts/main/nepali_romanized.json similarity index 100% rename from app/src/main/assets/layouts/nepali_romanized.json rename to app/src/main/assets/layouts/main/nepali_romanized.json diff --git a/app/src/main/assets/layouts/nepali_traditional.json b/app/src/main/assets/layouts/main/nepali_traditional.json similarity index 100% rename from app/src/main/assets/layouts/nepali_traditional.json rename to app/src/main/assets/layouts/main/nepali_traditional.json diff --git a/app/src/main/assets/layouts/pcqwerty.json b/app/src/main/assets/layouts/main/pcqwerty.json similarity index 100% rename from app/src/main/assets/layouts/pcqwerty.json rename to app/src/main/assets/layouts/main/pcqwerty.json diff --git a/app/src/main/assets/layouts/qwerty.txt b/app/src/main/assets/layouts/main/qwerty.txt similarity index 100% rename from app/src/main/assets/layouts/qwerty.txt rename to app/src/main/assets/layouts/main/qwerty.txt diff --git a/app/src/main/assets/layouts/qwertz.txt b/app/src/main/assets/layouts/main/qwertz.txt similarity index 100% rename from app/src/main/assets/layouts/qwertz.txt rename to app/src/main/assets/layouts/main/qwertz.txt diff --git a/app/src/main/assets/layouts/russian.txt b/app/src/main/assets/layouts/main/russian.txt similarity index 80% rename from app/src/main/assets/layouts/russian.txt rename to app/src/main/assets/layouts/main/russian.txt index 7ceb2435d..7da99f64e 100644 --- a/app/src/main/assets/layouts/russian.txt +++ b/app/src/main/assets/layouts/main/russian.txt @@ -8,7 +8,7 @@ ш щ з -х +х ъ [ { ф ы @@ -20,7 +20,7 @@ л ÐŽ ж -э +э э́ ] } я ч diff --git a/app/src/main/assets/layouts/main/russian_extended.txt b/app/src/main/assets/layouts/main/russian_extended.txt new file mode 100644 index 000000000..8b3249fee --- /dev/null +++ b/app/src/main/assets/layouts/main/russian_extended.txt @@ -0,0 +1,34 @@ +й +ц +у +к +е +М +г +ш +щ +з +х [ { +ъ ] } + +ф +ы +в +а +п +р +П +л +ÐŽ +ж +э э́ + +я +ч +с +ÐŒ +О +т +ь +б < +ю > diff --git a/app/src/main/assets/layouts/russian_student.txt b/app/src/main/assets/layouts/main/russian_student.txt similarity index 100% rename from app/src/main/assets/layouts/russian_student.txt rename to app/src/main/assets/layouts/main/russian_student.txt diff --git a/app/src/main/assets/layouts/serbian.txt b/app/src/main/assets/layouts/main/serbian.txt similarity index 100% rename from app/src/main/assets/layouts/serbian.txt rename to app/src/main/assets/layouts/main/serbian.txt diff --git a/app/src/main/assets/layouts/main/sesotho.txt b/app/src/main/assets/layouts/main/sesotho.txt new file mode 100644 index 000000000..b0796b3b5 --- /dev/null +++ b/app/src/main/assets/layouts/main/sesotho.txt @@ -0,0 +1,28 @@ +q +w +e +r +t +y +u +i +o +p + +a +Å¡ s +d +f +g +h +j +k +l + +z +x +c +v +b +n +m diff --git a/app/src/main/assets/layouts/sinhala.json b/app/src/main/assets/layouts/main/sinhala.json similarity index 100% rename from app/src/main/assets/layouts/sinhala.json rename to app/src/main/assets/layouts/main/sinhala.json diff --git a/app/src/main/assets/layouts/tamil.txt b/app/src/main/assets/layouts/main/tamil.txt similarity index 100% rename from app/src/main/assets/layouts/tamil.txt rename to app/src/main/assets/layouts/main/tamil.txt diff --git a/app/src/main/assets/layouts/telugu.txt b/app/src/main/assets/layouts/main/telugu.txt similarity index 100% rename from app/src/main/assets/layouts/telugu.txt rename to app/src/main/assets/layouts/main/telugu.txt diff --git a/app/src/main/assets/layouts/thai.json b/app/src/main/assets/layouts/main/thai.json similarity index 100% rename from app/src/main/assets/layouts/thai.json rename to app/src/main/assets/layouts/main/thai.json diff --git a/app/src/main/assets/layouts/turkish.txt b/app/src/main/assets/layouts/main/turkish.txt similarity index 100% rename from app/src/main/assets/layouts/turkish.txt rename to app/src/main/assets/layouts/main/turkish.txt diff --git a/app/src/main/assets/layouts/ukrainian.txt b/app/src/main/assets/layouts/main/ukrainian.txt similarity index 75% rename from app/src/main/assets/layouts/ukrainian.txt rename to app/src/main/assets/layouts/main/ukrainian.txt index 7e01cde38..ff1ed643a 100644 --- a/app/src/main/assets/layouts/ukrainian.txt +++ b/app/src/main/assets/layouts/main/ukrainian.txt @@ -8,7 +8,8 @@ ш щ з -х +х [ { +ї ] } ф і @@ -20,7 +21,7 @@ л ÐŽ ж -є +є ' " я ч @@ -30,4 +31,4 @@ т ь б < -ю > +ю > ґ diff --git a/app/src/main/assets/layouts/main/ukrainian_extended.txt b/app/src/main/assets/layouts/main/ukrainian_extended.txt new file mode 100644 index 000000000..7e37e93cc --- /dev/null +++ b/app/src/main/assets/layouts/main/ukrainian_extended.txt @@ -0,0 +1,35 @@ +й +ц +у +к +е +М +г +ш +щ +з +х [ { +ї ] } + +ф +і +в +а +п +р +П +л +ÐŽ +ж +є ' " +' " + +я +ч +с +ÐŒ +О +т +ь +б < +ю > ґ diff --git a/app/src/main/assets/layouts/urdu.json b/app/src/main/assets/layouts/main/urdu.json similarity index 100% rename from app/src/main/assets/layouts/urdu.json rename to app/src/main/assets/layouts/main/urdu.json diff --git a/app/src/main/assets/layouts/uzbek.json b/app/src/main/assets/layouts/main/uzbek.json similarity index 100% rename from app/src/main/assets/layouts/uzbek.json rename to app/src/main/assets/layouts/main/uzbek.json diff --git a/app/src/main/assets/layouts/workman.txt b/app/src/main/assets/layouts/main/workman.txt similarity index 100% rename from app/src/main/assets/layouts/workman.txt rename to app/src/main/assets/layouts/main/workman.txt diff --git a/app/src/main/assets/layouts/main/yoruba.txt b/app/src/main/assets/layouts/main/yoruba.txt new file mode 100644 index 000000000..3ee1696dd --- /dev/null +++ b/app/src/main/assets/layouts/main/yoruba.txt @@ -0,0 +1,28 @@ +ẹ q +w +e +r +t +y +u +i +o +p + +a +s +d +f +g +h +j +k +l + +z +ọ x +c +á¹£ v +b +n ₩ +m diff --git a/app/src/main/assets/layouts/symbols_shifted.txt b/app/src/main/assets/layouts/more_symbols/symbols_shifted.txt similarity index 100% rename from app/src/main/assets/layouts/symbols_shifted.txt rename to app/src/main/assets/layouts/more_symbols/symbols_shifted.txt diff --git a/app/src/main/assets/layouts/number.json b/app/src/main/assets/layouts/number/number.json similarity index 100% rename from app/src/main/assets/layouts/number.json rename to app/src/main/assets/layouts/number/number.json diff --git a/app/src/main/assets/layouts/number_row/number_row.json b/app/src/main/assets/layouts/number_row/number_row.json new file mode 100644 index 000000000..3ad11861a --- /dev/null +++ b/app/src/main/assets/layouts/number_row/number_row.json @@ -0,0 +1,44 @@ +[ + [ + { "$": "shift_state_selector", + "manualOrLocked": { "label": "!" }, + "default": { "label": "1", "popup": { "relevant": [{ "label": "¹" }, { "label": "œ" }, { "label": "⅓" }, { "label": "ÂŒ" }, { "label": "⅛" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "@" }, + "default": { "label": "2", "popup": { "relevant": [{ "label": "²" }, { "label": "⅔" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "#" }, + "default": { "label": "3", "popup": { "relevant": [{ "label": "³" }, { "label": "Ÿ" }, { "label": "⅜" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "$" }, + "default": { "label": "4", "popup": { "relevant": [{ "label": "⁎" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "%" }, + "default": { "label": "5", "popup": { "relevant": [{ "label": "⁵" }, { "label": "⅝" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "^" }, + "default": { "label": "6", "popup": { "relevant": [{ "label": "⁶" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "&" }, + "default": { "label": "7", "popup": { "relevant": [{ "label": "⁷" }, { "label": "⅞" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "*" }, + "default": { "label": "8", "popup": { "relevant": [{ "label": "⁞" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": "(" }, + "default": { "label": "9", "popup": { "relevant": [{ "label": "⁹" }] } } + }, + { "$": "shift_state_selector", + "manualOrLocked": { "label": ")" }, + "default": { "label": "0", "popup": { "relevant": [{ "label": "⁰" }, { "label": "ⁿ" }, { "label": "∅" }] } } + } + ] + ] \ No newline at end of file diff --git a/app/src/main/assets/layouts/number_row/number_row_basic.txt b/app/src/main/assets/layouts/number_row/number_row_basic.txt new file mode 100644 index 000000000..709c30a8b --- /dev/null +++ b/app/src/main/assets/layouts/number_row/number_row_basic.txt @@ -0,0 +1,10 @@ +1 ¹ œ ⅓ ÂŒ ⅛ +2 ² ⅔ +3 ³ Ÿ ⅜ +4 ⁎ +5 ⁵ ⅝ +6 ⁶ +7 ⁷ ⅞ +8 ⁞ +9 ⁹ +0 ⁰ ⁿ ∅ \ No newline at end of file diff --git a/app/src/main/assets/layouts/numpad.json b/app/src/main/assets/layouts/numpad/numpad.json similarity index 100% rename from app/src/main/assets/layouts/numpad.json rename to app/src/main/assets/layouts/numpad/numpad.json diff --git a/app/src/main/assets/layouts/numpad_landscape.json b/app/src/main/assets/layouts/numpad_landscape/numpad_landscape.json similarity index 100% rename from app/src/main/assets/layouts/numpad_landscape.json rename to app/src/main/assets/layouts/numpad_landscape/numpad_landscape.json diff --git a/app/src/main/assets/layouts/phone.json b/app/src/main/assets/layouts/phone/phone.json similarity index 100% rename from app/src/main/assets/layouts/phone.json rename to app/src/main/assets/layouts/phone/phone.json diff --git a/app/src/main/assets/layouts/phone_symbols.json b/app/src/main/assets/layouts/phone_symbols/phone_symbols.json similarity index 100% rename from app/src/main/assets/layouts/phone_symbols.json rename to app/src/main/assets/layouts/phone_symbols/phone_symbols.json diff --git a/app/src/main/assets/layouts/symbols.txt b/app/src/main/assets/layouts/symbols/symbols.txt similarity index 100% rename from app/src/main/assets/layouts/symbols.txt rename to app/src/main/assets/layouts/symbols/symbols.txt diff --git a/app/src/main/assets/layouts/symbols_arabic.txt b/app/src/main/assets/layouts/symbols/symbols_arabic.txt similarity index 100% rename from app/src/main/assets/layouts/symbols_arabic.txt rename to app/src/main/assets/layouts/symbols/symbols_arabic.txt diff --git a/app/src/main/assets/locale_key_texts/af.txt b/app/src/main/assets/locale_key_texts/af.txt index de2685f2d..556e2290b 100644 --- a/app/src/main/assets/locale_key_texts/af.txt +++ b/app/src/main/assets/locale_key_texts/af.txt @@ -6,3 +6,6 @@ o ó ÃŽ ö ò õ œ Þ ō u ú û ÃŒ ù Å« n ñ ń y Ü ij + +[tlds] +za diff --git a/app/src/main/assets/locale_key_texts/ar.txt b/app/src/main/assets/locale_key_texts/ar.txt index 884976182..5c4b3c007 100644 --- a/app/src/main/assets/locale_key_texts/ar.txt +++ b/app/src/main/assets/locale_key_texts/ar.txt @@ -24,3 +24,6 @@ question: ؟ [number_row] Ù¡ Ù¢ Ù£ Ù€ Ù¥ ÙŠ Ù§ Ùš Ù© Ù  + +[tlds] +sa diff --git a/app/src/main/assets/locale_key_texts/bg.txt b/app/src/main/assets/locale_key_texts/bg.txt index a0d8740f6..40924464c 100644 --- a/app/src/main/assets/locale_key_texts/bg.txt +++ b/app/src/main/assets/locale_key_texts/bg.txt @@ -3,3 +3,6 @@ [labels] alphabet: АБВ + +[tlds] +bg diff --git a/app/src/main/assets/locale_key_texts/bn-BD.txt b/app/src/main/assets/locale_key_texts/bn-BD.txt index 6f602cf66..fe5d56d4d 100644 --- a/app/src/main/assets/locale_key_texts/bn-BD.txt +++ b/app/src/main/assets/locale_key_texts/bn-BD.txt @@ -16,7 +16,7 @@ ী àŠˆ àŠŸ àŠ† àŠ… ্ àŠ -àŠ àŠŒ ৺ àŠœ ৗ àŠŒ à§¡ à§  à§± à§¢ à§£ ৄ à§° +àŠ !autoColumnOrder!6 àŠŒ ৄ àŠœ à§¢ à§± à§£ ৗ à§  ৺ àŠŒ à§° à§¡ àŠ¬ àŠ­ àŠ• àŠ– àŠ€ àŠ¥ ৎ diff --git a/app/src/main/assets/locale_key_texts/bn-IN.txt b/app/src/main/assets/locale_key_texts/bn-IN.txt index 36387a9e7..f32ed305f 100644 --- a/app/src/main/assets/locale_key_texts/bn-IN.txt +++ b/app/src/main/assets/locale_key_texts/bn-IN.txt @@ -1,36 +1,41 @@ [popup_keys] +ৌ àŠ” +ৈ àŠ +àŠŸ àŠ† +ী àŠˆ +ূ àŠŠ àŠ¬ àŠ­ +àŠ¹ àŠ™ àŠ— àŠ˜ àŠŠ àŠ§ -àŠœ àŠ àŠœà§àŠž -àŠ¡ àŠ¡àŠŒ -àŠ“ ো -àŠ ে -àŠ… ্ -àŠ‡ àŠ¿ -àŠ‰ ু +àŠœ àŠ +àŠ¡ àŠ¢ +ো àŠ“ +ে àŠ +্ àŠ… +àŠ¿ àŠ‡ +ু àŠ‰ àŠª àŠ« -àŠ° ৃ àŠ‹ àŠ€à§àŠ° +àŠ° ড় àŠ°â€à§àŠ¯ àŠ• àŠ– -àŠ€ ৎ àŠ¥ àŠ€à§àŠ€ +àŠ€ àŠ¥ ৎ àŠš àŠ› àŠŸ àŠ  -àŠ àŠƒ àŠ‚ -àŠ¢ àŠ¢àŠŒ -àŠš àŠ£ -àŠž àŠ™ àŠžà§àŠœ -àŠ· àŠ•à§àŠ· +ৃ àŠ‹ +àŠ‚ àŠ àŠƒ +àŠ !autoColumnOrder!6 àŠŒ ৄ àŠœ à§¢ à§± à§£ ৗ à§  ৺ àŠŒ à§° à§¡ +àŠ® àŠ£ +àŠš àŠž +àŠ¬ ঢ় +àŠ² àŠ· àŠž àŠ¶ য় àŠ¯ -ी ॥ -àŠ” ৌ -àŠ ৈ -àŠ† àŠŸ -àŠˆ ী -àŠŠ ূ +punctuation !autoColumnOrder!8 \, ॥ ? ! !icon/zwnj_key|‌ !icon/zwj_key|‍ # @ ( ) / ; : - + \% [labels] alphabet: àŠ•àŠ–àŠ— +symbol: ?à§§à§šà§© +period: ी [number_row] à§§ à§š à§© ৪ à§« ৬ à§­ à§® ৯ à§Š diff --git a/app/src/main/assets/locale_key_texts/ca.txt b/app/src/main/assets/locale_key_texts/ca.txt index 9eccfc28d..619481bcd 100644 --- a/app/src/main/assets/locale_key_texts/ca.txt +++ b/app/src/main/assets/locale_key_texts/ca.txt @@ -5,7 +5,11 @@ i í ï o ò ó u ú ÃŒ c ç +l l·l punctuation !autoColumnOrder!9 \, ? ! · # ) ( / ; ' @ : - " + \% & [extra_keys] 2: ç + +[tlds] +cat es diff --git a/app/src/main/assets/locale_key_texts/ckb.txt b/app/src/main/assets/locale_key_texts/ckb.txt new file mode 100644 index 000000000..5e13897b8 --- /dev/null +++ b/app/src/main/assets/locale_key_texts/ckb.txt @@ -0,0 +1,39 @@ +[popup_keys] +ق Ù¯ +و وو +ە Ø© ﻪ ـہ +ر ڕ ڒ ࢪ +ت Ø· +ی ي ې ۍ +ێ Øœ +ØŠ Ø¡ ﺋ +ۆ Ø€ ۏ ۊ ۋ ۉ ۇ +ÙŸ Ø« +ا Ø£ Ø¥ Ø¢ Ù± +س ص +ØŽ ض +د Û® ڌ ﮆ +ف Ú€ Ú¡ +ÚŸ ÚŸ +ژ ━|ـ +ل Úµ +Ú© ك Úª +Ú¯ غ +ز Øž +ع ؏ +Øš ى +punctuation !autoColumnOrder!8 \؟ ! ، Ù« ؍ : ؛ ; : | - @ _ # * Ùª & ^ +« „ “ ” +» ‚ ‘ ’ ‹ › + +[labels] +alphabet: ؊‌ٟ‌گ +symbol: ٣٢١؟ +comma: ، +question: ؟ + +[number_row] +Ù¡ Ù¢ Ù£ Ù€ Ù¥ ÙŠ Ù§ Ùš Ù© Ù  + +[tlds] +iq krd diff --git a/app/src/main/assets/locale_key_texts/cs.txt b/app/src/main/assets/locale_key_texts/cs.txt index 83e844e6f..a34abb417 100644 --- a/app/src/main/assets/locale_key_texts/cs.txt +++ b/app/src/main/assets/locale_key_texts/cs.txt @@ -14,3 +14,6 @@ y Ü z ÅŸ ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +cz diff --git a/app/src/main/assets/locale_key_texts/da.txt b/app/src/main/assets/locale_key_texts/da.txt index b12cd4160..17094de22 100644 --- a/app/src/main/assets/locale_key_texts/da.txt +++ b/app/src/main/assets/locale_key_texts/da.txt @@ -9,3 +9,6 @@ o Þ 1: Ã¥ 2: Ê À 2: Þ ö + +[tlds] +dk diff --git a/app/src/main/assets/locale_key_texts/de.txt b/app/src/main/assets/locale_key_texts/de.txt index d51c37f2e..0cc11904f 100644 --- a/app/src/main/assets/locale_key_texts/de.txt +++ b/app/src/main/assets/locale_key_texts/de.txt @@ -5,3 +5,6 @@ u ÃŒ s ß ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +de at ch diff --git a/app/src/main/assets/locale_key_texts/el.txt b/app/src/main/assets/locale_key_texts/el.txt index 6372cd786..0dd59534e 100644 --- a/app/src/main/assets/locale_key_texts/el.txt +++ b/app/src/main/assets/locale_key_texts/el.txt @@ -9,3 +9,6 @@ [labels] alphabet: ΑΒΓ + +[tlds] +gr diff --git a/app/src/main/assets/locale_key_texts/es.txt b/app/src/main/assets/locale_key_texts/es.txt index 5e66d9810..bfaa35a94 100644 --- a/app/src/main/assets/locale_key_texts/es.txt +++ b/app/src/main/assets/locale_key_texts/es.txt @@ -10,3 +10,6 @@ punctuation !autoColumnOrder!9 \, ? ! # ) ( / ; ¡ ' @ : - " + \% & ¿ [extra_keys] 2: ñ + +[tlds] +es com.es diff --git a/app/src/main/assets/locale_key_texts/et.txt b/app/src/main/assets/locale_key_texts/et.txt index 0ad69c235..2ee735f5a 100644 --- a/app/src/main/assets/locale_key_texts/et.txt +++ b/app/src/main/assets/locale_key_texts/et.txt @@ -12,3 +12,6 @@ z ÅŸ 2: ö õ 2: À 3: õ + +[tlds] +ee diff --git a/app/src/main/assets/locale_key_texts/fa.txt b/app/src/main/assets/locale_key_texts/fa.txt index 1fce5e719..3ce747ec4 100644 --- a/app/src/main/assets/locale_key_texts/fa.txt +++ b/app/src/main/assets/locale_key_texts/fa.txt @@ -17,3 +17,6 @@ question: ؟ [number_row] Û± Û² Û³ ÛŽ Ûµ Û¶ Û· Ûž Û¹ Û° + +[tlds] +ir diff --git a/app/src/main/assets/locale_key_texts/fi.txt b/app/src/main/assets/locale_key_texts/fi.txt index bfb587327..287d329f8 100644 --- a/app/src/main/assets/locale_key_texts/fi.txt +++ b/app/src/main/assets/locale_key_texts/fi.txt @@ -8,3 +8,6 @@ z ÅŸ 1: Ã¥ 2: ö Þ 2: À Ê + +[tlds] +fi diff --git a/app/src/main/assets/locale_key_texts/fr.txt b/app/src/main/assets/locale_key_texts/fr.txt index 4311b0918..02772665f 100644 --- a/app/src/main/assets/locale_key_texts/fr.txt +++ b/app/src/main/assets/locale_key_texts/fr.txt @@ -11,3 +11,6 @@ y ÿ 1: Ú ÃŒ 2: é ö 2: à À + +[tlds] +fr diff --git a/app/src/main/assets/locale_key_texts/hi-Latn.txt b/app/src/main/assets/locale_key_texts/hi-Latn.txt new file mode 100644 index 000000000..b77e1c872 --- /dev/null +++ b/app/src/main/assets/locale_key_texts/hi-Latn.txt @@ -0,0 +1,2 @@ +[tlds] +in diff --git a/app/src/main/assets/locale_key_texts/hi.txt b/app/src/main/assets/locale_key_texts/hi.txt index 900946954..c30631dca 100644 --- a/app/src/main/assets/locale_key_texts/hi.txt +++ b/app/src/main/assets/locale_key_texts/hi.txt @@ -37,7 +37,7 @@ à€² à€Œ ॡ à€¯ य़ à€Œ ड़ ॰ à€œ -punctuation !autoColumnOrder!9 \, . ? ! # ) ( / ; ' @ : - " + \% & +punctuation !autoColumnOrder!9 \, . ॥ ? ! !icon/zwnj_key|‌ !icon/zwj_key|‍ # @ ( ) / ; : - + \% à€” ौ à€ ै à€† à€Ÿ @@ -73,3 +73,6 @@ period: ी [number_row] १ ग़ ३ ४ ५ ६ ७ ८ ९ ॊ + +[tlds] +in diff --git a/app/src/main/assets/locale_key_texts/hr.txt b/app/src/main/assets/locale_key_texts/hr.txt index 2f20257ae..dbe04049c 100644 --- a/app/src/main/assets/locale_key_texts/hr.txt +++ b/app/src/main/assets/locale_key_texts/hr.txt @@ -5,3 +5,6 @@ c č ć d đ ' ‘ ‚ ’ › ‹ " “ „ ” » « + +[tlds] +hr diff --git a/app/src/main/assets/locale_key_texts/hu.txt b/app/src/main/assets/locale_key_texts/hu.txt index f973343ab..423b45149 100644 --- a/app/src/main/assets/locale_key_texts/hu.txt +++ b/app/src/main/assets/locale_key_texts/hu.txt @@ -6,3 +6,6 @@ o ó ö ő u ú ÃŒ ű ' ‘ ‚ ’ › ‹ " “ „ ” » « + +[tlds] +hu gov.hu diff --git a/app/src/main/assets/locale_key_texts/hy.txt b/app/src/main/assets/locale_key_texts/hy.txt index 4808e31b5..66b3f3443 100644 --- a/app/src/main/assets/locale_key_texts/hy.txt +++ b/app/src/main/assets/locale_key_texts/hy.txt @@ -6,3 +6,6 @@ punctuation !autoColumnOrder!8 \, ՞ ՜   
 ' = / ՝ ՛ ֊ » « ― ) ( [labels] alphabet: Ô±Ô²Ô³ period: ։ + +[tlds] +am diff --git a/app/src/main/assets/locale_key_texts/is.txt b/app/src/main/assets/locale_key_texts/is.txt index b8380b2e1..4474bc166 100644 --- a/app/src/main/assets/locale_key_texts/is.txt +++ b/app/src/main/assets/locale_key_texts/is.txt @@ -9,3 +9,6 @@ y Ü t ß ' ’ ‚ ‘ " ” „ “ + +[tlds] +is diff --git a/app/src/main/assets/locale_key_texts/it.txt b/app/src/main/assets/locale_key_texts/it.txt index 72973870b..8ee569cfd 100644 --- a/app/src/main/assets/locale_key_texts/it.txt +++ b/app/src/main/assets/locale_key_texts/it.txt @@ -1,6 +1,9 @@ [popup_keys] a à ª -e Ú é +e Ú é ə i ì o ò ó º u ù + +[tlds] +it gov.it edu.it diff --git a/app/src/main/assets/locale_key_texts/iw.txt b/app/src/main/assets/locale_key_texts/iw.txt index 70f5f0a2b..781fe76b4 100644 --- a/app/src/main/assets/locale_key_texts/iw.txt +++ b/app/src/main/assets/locale_key_texts/iw.txt @@ -10,3 +10,6 @@ [labels] alphabet: אבג + +[tlds] +il co.il gov.il diff --git a/app/src/main/assets/locale_key_texts/kab.txt b/app/src/main/assets/locale_key_texts/kab.txt index 47a02ff2a..34df72124 100644 --- a/app/src/main/assets/locale_key_texts/kab.txt +++ b/app/src/main/assets/locale_key_texts/kab.txt @@ -14,3 +14,5 @@ b p [labels] alphabet: AƐΓ +[tlds] +dz fr diff --git a/app/src/main/assets/locale_key_texts/ko.txt b/app/src/main/assets/locale_key_texts/ko.txt index 10535b9ad..9f7c4e37b 100644 --- a/app/src/main/assets/locale_key_texts/ko.txt +++ b/app/src/main/assets/locale_key_texts/ko.txt @@ -1,2 +1,5 @@ [labels] alphabet: ㄱㄎㄷ + +[tlds] +kr diff --git a/app/src/main/assets/locale_key_texts/lt.txt b/app/src/main/assets/locale_key_texts/lt.txt index a55b16039..d017e3812 100644 --- a/app/src/main/assets/locale_key_texts/lt.txt +++ b/app/src/main/assets/locale_key_texts/lt.txt @@ -8,3 +8,6 @@ u Å« ų z ÅŸ ' ’ ‚ ‘ " ” „ “ + +[tlds] +lt diff --git a/app/src/main/assets/locale_key_texts/lv.txt b/app/src/main/assets/locale_key_texts/lv.txt index cf6f53653..de243b16f 100644 --- a/app/src/main/assets/locale_key_texts/lv.txt +++ b/app/src/main/assets/locale_key_texts/lv.txt @@ -13,3 +13,6 @@ u Å« z ÅŸ ' ’ ‚ ‘ " ” „ “ + +[tlds] +lv diff --git a/app/src/main/assets/locale_key_texts/nb.txt b/app/src/main/assets/locale_key_texts/nb.txt index 05c9c8773..5b75b95c2 100644 --- a/app/src/main/assets/locale_key_texts/nb.txt +++ b/app/src/main/assets/locale_key_texts/nb.txt @@ -9,3 +9,6 @@ o Þ 1: Ã¥ 2: Þ ö 2: Ê À + +[tlds] +no diff --git a/app/src/main/assets/locale_key_texts/pl.txt b/app/src/main/assets/locale_key_texts/pl.txt index a92ce9c4f..91baf0d31 100644 --- a/app/src/main/assets/locale_key_texts/pl.txt +++ b/app/src/main/assets/locale_key_texts/pl.txt @@ -9,3 +9,6 @@ z ÅŒ ź l ł ' ‘ ‚ ’ " “ „ ” + +[tlds] +pl diff --git a/app/src/main/assets/locale_key_texts/ro.txt b/app/src/main/assets/locale_key_texts/ro.txt index 49b4c2efa..988644ef5 100644 --- a/app/src/main/assets/locale_key_texts/ro.txt +++ b/app/src/main/assets/locale_key_texts/ro.txt @@ -5,3 +5,6 @@ s ș t ț ' ‘ ‚ ’ " “ „ ” + +[tlds] +ro diff --git a/app/src/main/assets/locale_key_texts/ru.txt b/app/src/main/assets/locale_key_texts/ru.txt index f6062fb5a..59583da42 100644 --- a/app/src/main/assets/locale_key_texts/ru.txt +++ b/app/src/main/assets/locale_key_texts/ru.txt @@ -1,8 +1,21 @@ [popup_keys] -е ё -ь ъ +е ё е́ Ñ£ +ф ѳ +ы ы́ +а а́ +П П́ +я я́ +О О́ +ь ъ ы +ю ю́ ' ’ ‚ ‘ › ‹ " ” „ “ » « +і ы +є э э́ + [labels] alphabet: АБВ + +[tlds] +ru diff --git a/app/src/main/assets/locale_key_texts/sk.txt b/app/src/main/assets/locale_key_texts/sk.txt index 36ec252bb..b699ff6b1 100644 --- a/app/src/main/assets/locale_key_texts/sk.txt +++ b/app/src/main/assets/locale_key_texts/sk.txt @@ -15,3 +15,6 @@ z ÅŸ l ÄŸ ĺ ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +sk diff --git a/app/src/main/assets/locale_key_texts/sl.txt b/app/src/main/assets/locale_key_texts/sl.txt index 1a7c5ebe5..beb841433 100644 --- a/app/src/main/assets/locale_key_texts/sl.txt +++ b/app/src/main/assets/locale_key_texts/sl.txt @@ -4,3 +4,6 @@ c č ć z ÅŸ ' ’ ‚ ‘ › ‹ " ” „ “ » « + +[tlds] +si diff --git a/app/src/main/assets/locale_key_texts/sr-Latn.txt b/app/src/main/assets/locale_key_texts/sr-Latn.txt index ecce81e47..7f0b254da 100644 --- a/app/src/main/assets/locale_key_texts/sr-Latn.txt +++ b/app/src/main/assets/locale_key_texts/sr-Latn.txt @@ -10,3 +10,6 @@ d đ 2: ć 3: đ 3: ÅŸ + +[tlds] +rs diff --git a/app/src/main/assets/locale_key_texts/sr.txt b/app/src/main/assets/locale_key_texts/sr.txt index 89e06672f..039e1f481 100644 --- a/app/src/main/assets/locale_key_texts/sr.txt +++ b/app/src/main/assets/locale_key_texts/sr.txt @@ -6,3 +6,6 @@ [labels] alphabet: АБВ + +[tlds] +rs diff --git a/app/src/main/assets/locale_key_texts/sv.txt b/app/src/main/assets/locale_key_texts/sv.txt index 0425538d2..233e02c3b 100644 --- a/app/src/main/assets/locale_key_texts/sv.txt +++ b/app/src/main/assets/locale_key_texts/sv.txt @@ -8,3 +8,6 @@ o ö 1: Ã¥ 2: ö 2: À + +[tlds] +sv diff --git a/app/src/main/assets/locale_key_texts/tr.txt b/app/src/main/assets/locale_key_texts/tr.txt index a729bd4d1..e2f1771b1 100644 --- a/app/src/main/assets/locale_key_texts/tr.txt +++ b/app/src/main/assets/locale_key_texts/tr.txt @@ -7,3 +7,6 @@ u ÃŒ û s ş g ğ c ç + +[tlds] +tr gov.tr edu.tr com.tr diff --git a/app/src/main/assets/locale_key_texts/uk.txt b/app/src/main/assets/locale_key_texts/uk.txt index c30f828de..080bf826b 100644 --- a/app/src/main/assets/locale_key_texts/uk.txt +++ b/app/src/main/assets/locale_key_texts/uk.txt @@ -1,9 +1,22 @@ [popup_keys] +е е́ г ґ -ь ъ +ф ѳ і ї -' ’ ‚ ‘ -" ” „ “ +а а́ +П П́ +я я́ +О О́ і ї +г ґ +ю ю́ +' ’ ‚ ‘ › ‹ +" ” „ “ » « + +ы і ї +э є [labels] alphabet: АБВ + +[tlds] +ua diff --git a/app/src/main/assets/locale_key_texts/vi.txt b/app/src/main/assets/locale_key_texts/vi.txt index 8f8fb9d7d..83db93bb6 100644 --- a/app/src/main/assets/locale_key_texts/vi.txt +++ b/app/src/main/assets/locale_key_texts/vi.txt @@ -6,3 +6,6 @@ o ò ó ỏ õ ọ ÃŽ ồ ố ổ ỗ ộ Æ¡ ờ ớ ở ỡ ợ u ù ú á»§ Å© ụ ư ừ ứ á»­ ữ á»± y ỳ Ü á»· ỹ ỵ d đ + +[tlds] +vn diff --git a/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java b/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java index b920fc334..c2e24943e 100644 --- a/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java +++ b/app/src/main/java/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java @@ -94,6 +94,7 @@ public final class BinaryDictionaryUtils { valueArray); } + /** normalized score is >= 0, with 0 being a bad match, ~0.1 ok for autocorrect, and ~1.5 a very good match */ public static float calcNormalizedScore(final String before, final String after, final int score) { return calcNormalizedScoreNative(StringUtils.toCodePointArray(before), diff --git a/app/src/main/java/helium314/keyboard/accessibility/KeyboardAccessibilityNodeProvider.kt b/app/src/main/java/helium314/keyboard/accessibility/KeyboardAccessibilityNodeProvider.kt index 127415f80..15dcbb97b 100644 --- a/app/src/main/java/helium314/keyboard/accessibility/KeyboardAccessibilityNodeProvider.kt +++ b/app/src/main/java/helium314/keyboard/accessibility/KeyboardAccessibilityNodeProvider.kt @@ -271,7 +271,7 @@ class KeyboardAccessibilityNodeProvider( private fun getKeyDescription(key: Key): String? { val editorInfo = mKeyboard?.mId?.mEditorInfo val shouldObscure = mAccessibilityUtils.shouldObscureInput(editorInfo) - val currentSettings = Settings.getInstance().current + val currentSettings = Settings.getValues() val keyCodeDescription = mKeyCodeDescriptionMapper.getDescriptionForKey( mKeyboardView.context, mKeyboard, key, shouldObscure) return if (currentSettings.isWordSeparator(key.code)) { diff --git a/app/src/main/java/helium314/keyboard/accessibility/MainKeyboardAccessibilityDelegate.kt b/app/src/main/java/helium314/keyboard/accessibility/MainKeyboardAccessibilityDelegate.kt index 0be99c7c0..6a4283494 100644 --- a/app/src/main/java/helium314/keyboard/accessibility/MainKeyboardAccessibilityDelegate.kt +++ b/app/src/main/java/helium314/keyboard/accessibility/MainKeyboardAccessibilityDelegate.kt @@ -14,7 +14,7 @@ import android.view.MotionEvent import helium314.keyboard.accessibility.AccessibilityLongPressTimer.LongPressTimerCallback import helium314.keyboard.keyboard.* import helium314.keyboard.latin.R -import helium314.keyboard.latin.utils.SubtypeLocaleUtils +import helium314.keyboard.latin.utils.SubtypeLocaleUtils.displayName /** * This class represents a delegate that can be registered in [MainKeyboardView] to enhance @@ -86,9 +86,7 @@ class MainKeyboardAccessibilityDelegate( * @param keyboard The new keyboard. */ private fun announceKeyboardLanguage(keyboard: Keyboard) { - val languageText = SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale( - keyboard.mId.mSubtype.rawSubtype) - sendWindowStateChanged(languageText) + sendWindowStateChanged(keyboard.mId.mSubtype.rawSubtype.displayName()) } /** diff --git a/app/src/main/java/helium314/keyboard/event/Event.kt b/app/src/main/java/helium314/keyboard/event/Event.kt index d36ab49c9..75fda0535 100644 --- a/app/src/main/java/helium314/keyboard/event/Event.kt +++ b/app/src/main/java/helium314/keyboard/event/Event.kt @@ -146,12 +146,19 @@ class Event private constructor( } // This creates an input event for a dead character. @see {@link #FLAG_DEAD} - fun createDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, next: Event?): Event { // TODO: add an argument or something if we ever create a software layout with dead keys. + fun createDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, next: Event?): Event { return Event(EVENT_TYPE_INPUT_KEYPRESS, null, codePoint, keyCode, metaState, Constants.EXTERNAL_KEYBOARD_COORDINATE, Constants.EXTERNAL_KEYBOARD_COORDINATE, null, FLAG_DEAD, next) } + // This creates an input event for a dead character. @see {@link #FLAG_DEAD} + @JvmStatic + fun createSoftwareDeadEvent(codePoint: Int, keyCode: Int, metaState: Int, x: Int, y: Int, next: Event?): Event { + return Event(EVENT_TYPE_INPUT_KEYPRESS, null, codePoint, keyCode, metaState, x, y, + null, FLAG_DEAD, next) + } + /** * Create an input event with nothing but a code point. This is the most basic possible input * event; it contains no information on many things the IME requires to function correctly, diff --git a/app/src/main/java/helium314/keyboard/event/HangulEventDecoder.kt b/app/src/main/java/helium314/keyboard/event/HangulEventDecoder.kt index 73635aec5..1080fa8a8 100644 --- a/app/src/main/java/helium314/keyboard/event/HangulEventDecoder.kt +++ b/app/src/main/java/helium314/keyboard/event/HangulEventDecoder.kt @@ -11,7 +11,7 @@ object HangulEventDecoder { @JvmStatic fun decodeHardwareKeyEvent(subtype: RichInputMethodSubtype, event: KeyEvent, defaultEvent: () -> Event): Event { - val layout = LAYOUTS[subtype.keyboardLayoutSetName] ?: return defaultEvent() + val layout = LAYOUTS[subtype.mainLayoutName] ?: return defaultEvent() val codePoint = layout[event.keyCode]?.let { if (event.isShiftPressed) it.second else it.first } ?: return defaultEvent() val hardwareEvent = Event.createHardwareKeypressEvent(codePoint, event.keyCode, event.metaState, null, event.repeatCount != 0) return decodeSoftwareKeyEvent(hardwareEvent) diff --git a/app/src/main/java/helium314/keyboard/keyboard/Key.java b/app/src/main/java/helium314/keyboard/keyboard/Key.java index da9144b61..c80c1eb3b 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/Key.java +++ b/app/src/main/java/helium314/keyboard/keyboard/Key.java @@ -24,6 +24,7 @@ import helium314.keyboard.latin.common.StringUtils; import helium314.keyboard.latin.utils.PopupKeysUtilsKt; import helium314.keyboard.latin.utils.ToolbarKey; import helium314.keyboard.latin.utils.ToolbarUtilsKt; +import kotlin.collections.ArraysKt; import java.util.Arrays; import java.util.Locale; @@ -327,7 +328,7 @@ public class Key implements Comparable { // Final attributes. mCode = key.mCode; mLabel = key.mLabel; - mHintLabel = key.mHintLabel; + mHintLabel = PopopUtilKt.findPopupHintLabel(popupKeys, key.mHintLabel); mLabelFlags = key.mLabelFlags; mIconName = key.mIconName; mWidth = key.mWidth; @@ -919,7 +920,7 @@ public class Key implements Comparable { @NonNull final Drawable spacebarBackground, @NonNull final Drawable actionKeyBackground) { final Drawable background; - if (isAccentColored()) { + if (hasActionKeyBackground()) { background = actionKeyBackground; } else if (hasFunctionalBackground()) { background = functionalKeyBackground; @@ -933,16 +934,10 @@ public class Key implements Comparable { return background; } - public final boolean isAccentColored() { - if (hasActionKeyBackground()) return true; - final String iconName = getIconName(); - if (iconName == null) return false; - // todo: other way of identifying the color? - // if yes, NAME_CLIPBOARD_ACTION_KEY and NAME_CLIPBOARD_NORMAL_KEY could be merged - return iconName.equals(KeyboardIconsSet.NAME_NEXT_KEY) - || iconName.equals(KeyboardIconsSet.NAME_PREVIOUS_KEY) - || iconName.equals(KeyboardIconsSet.NAME_CLIPBOARD_ACTION_KEY) - || iconName.equals(KeyboardIconsSet.NAME_EMOJI_ACTION_KEY); + public final boolean hasActionKeyPopups() { + if (!hasActionKeyBackground()) return false; + // only use the special action key popups for action colored keys, and only for icon popups + return ArraysKt.none(getPopupKeys(), (key) -> key.mIconName == null); } public boolean hasFunctionalBackground() { @@ -1051,7 +1046,6 @@ public class Key implements Comparable { return popupKeysColumnAndFlags; } - // only for testing public String getOutputText() { return mOptionalAttributes == null ? null : mOptionalAttributes.mOutputText; } diff --git a/app/src/main/java/helium314/keyboard/keyboard/Keyboard.java b/app/src/main/java/helium314/keyboard/keyboard/Keyboard.java index 802370cf0..c89423538 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/Keyboard.java +++ b/app/src/main/java/helium314/keyboard/keyboard/Keyboard.java @@ -88,8 +88,6 @@ public class Keyboard { @NonNull private final ProximityInfo mProximityInfo; - @NonNull - private final KeyboardLayout mKeyboardLayout; private final boolean mProximityCharsCorrectionEnabled; @@ -117,8 +115,6 @@ public class Keyboard { mOccupiedWidth, mOccupiedHeight, mMostCommonKeyWidth, mMostCommonKeyHeight, mSortedKeys, params.mTouchPositionCorrection); mProximityCharsCorrectionEnabled = params.mProximityCharsCorrectionEnabled; - mKeyboardLayout = KeyboardLayout.newKeyboardLayout(mSortedKeys, mMostCommonKeyWidth, - mMostCommonKeyHeight, mOccupiedWidth, mOccupiedHeight); } protected Keyboard(@NonNull final Keyboard keyboard) { @@ -143,7 +139,6 @@ public class Keyboard { mProximityInfo = keyboard.mProximityInfo; mProximityCharsCorrectionEnabled = keyboard.mProximityCharsCorrectionEnabled; - mKeyboardLayout = keyboard.mKeyboardLayout; } public boolean hasProximityCharsCorrection(final int code) { @@ -163,11 +158,6 @@ public class Keyboard { return mProximityInfo; } - @NonNull - public KeyboardLayout getKeyboardLayout() { - return mKeyboardLayout; - } - /** * Return the sorted list of keys of this keyboard. * The keys are sorted from top-left to bottom-right order. diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListener.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListener.java index 224337f34..fb177e806 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListener.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListener.java @@ -97,6 +97,7 @@ public interface KeyboardActionListener { */ boolean onHorizontalSpaceSwipe(int steps); boolean onVerticalSpaceSwipe(int steps); + void onEndSpaceSwipe(); boolean toggleNumpad(boolean withSliding, boolean forceReturnToAlpha); void onMoveDeletePointer(int steps); @@ -148,6 +149,8 @@ public interface KeyboardActionListener { return false; } @Override + public void onEndSpaceSwipe() {} + @Override public void onMoveDeletePointer(int steps) {} @Override public void onUpWithDeletePointerActive() {} diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt index fad78ee8f..9df3a9682 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardActionListenerImpl.kt @@ -1,6 +1,8 @@ package helium314.keyboard.keyboard +import android.text.InputType import android.view.KeyEvent +import android.view.inputmethod.InputMethodSubtype import helium314.keyboard.keyboard.internal.keyboard_parser.floris.KeyCode import helium314.keyboard.latin.LatinIME import helium314.keyboard.latin.RichInputMethodManager @@ -12,20 +14,33 @@ import helium314.keyboard.latin.common.loopOverCodePointsBackwards import helium314.keyboard.latin.inputlogic.InputLogic import helium314.keyboard.latin.settings.Settings import kotlin.math.abs +import kotlin.math.min class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inputLogic: InputLogic) : KeyboardActionListener { + private val connection = inputLogic.mConnection + private val keyboardSwitcher = KeyboardSwitcher.getInstance() private val settings = Settings.getInstance() private var metaState = 0 // is this enough, or are there threading issues with the different PointerTrackers? + // language slide state + private var initialSubtype: InputMethodSubtype? = null + private var subtypeSwitchCount = 0 + // todo: maybe keep meta state presses to KeyboardActionListenerImpl, and avoid calls to press/release key private fun adjustMetaState(code: Int, remove: Boolean) { val metaCode = when (code) { KeyCode.CTRL -> KeyEvent.META_CTRL_ON + KeyCode.CTRL_LEFT -> KeyEvent.META_CTRL_LEFT_ON + KeyCode.CTRL_RIGHT -> KeyEvent.META_CTRL_RIGHT_ON KeyCode.ALT -> KeyEvent.META_ALT_ON + KeyCode.ALT_LEFT -> KeyEvent.META_ALT_LEFT_ON + KeyCode.ALT_RIGHT -> KeyEvent.META_ALT_RIGHT_ON KeyCode.FN -> KeyEvent.META_FUNCTION_ON KeyCode.META -> KeyEvent.META_META_ON + KeyCode.META_LEFT -> KeyEvent.META_META_LEFT_ON + KeyCode.META_RIGHT -> KeyEvent.META_META_RIGHT_ON else -> return } metaState = if (remove) metaState and metaCode.inv() @@ -43,8 +58,10 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp keyboardSwitcher.onReleaseKey(primaryCode, withSliding, latinIME.currentAutoCapsState, latinIME.currentRecapitalizeState) } - override fun onCodeInput(primaryCode: Int, x: Int, y: Int, isKeyRepeat: Boolean) = - latinIME.onCodeInput(primaryCode, metaState, x, y, isKeyRepeat) + override fun onCodeInput(primaryCode: Int, x: Int, y: Int, isKeyRepeat: Boolean) { + val mkv = keyboardSwitcher.mainKeyboardView + latinIME.onCodeInput(primaryCode, metaState, mkv.getKeyX(x), mkv.getKeyY(y), isKeyRepeat) + } override fun onTextInput(text: String?) = latinIME.onTextInput(text) @@ -63,25 +80,31 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp keyboardSwitcher.onFinishSlidingInput(latinIME.currentAutoCapsState, latinIME.currentRecapitalizeState) override fun onCustomRequest(requestCode: Int): Boolean { - if (requestCode == Constants.CUSTOM_CODE_SHOW_INPUT_METHOD_PICKER) + if (requestCode == Constants.CUSTOM_CODE_SHOW_INPUT_METHOD_PICKER) { return latinIME.showInputPickerDialog() + } return false } - override fun onHorizontalSpaceSwipe(steps: Int): Boolean = when (Settings.getInstance().current.mSpaceSwipeHorizontal) { + override fun onHorizontalSpaceSwipe(steps: Int): Boolean = when (Settings.getValues().mSpaceSwipeHorizontal) { KeyboardActionListener.SWIPE_MOVE_CURSOR -> onMoveCursorHorizontally(steps) KeyboardActionListener.SWIPE_SWITCH_LANGUAGE -> onLanguageSlide(steps) KeyboardActionListener.SWIPE_TOGGLE_NUMPAD -> toggleNumpad(false, false) else -> false } - override fun onVerticalSpaceSwipe(steps: Int): Boolean = when (Settings.getInstance().current.mSpaceSwipeVertical) { + override fun onVerticalSpaceSwipe(steps: Int): Boolean = when (Settings.getValues().mSpaceSwipeVertical) { KeyboardActionListener.SWIPE_MOVE_CURSOR -> onMoveCursorVertically(steps) KeyboardActionListener.SWIPE_SWITCH_LANGUAGE -> onLanguageSlide(steps) KeyboardActionListener.SWIPE_TOGGLE_NUMPAD -> toggleNumpad(false, false) else -> false } + override fun onEndSpaceSwipe(){ + initialSubtype = null + subtypeSwitchCount = 0 + } + override fun toggleNumpad(withSliding: Boolean, forceReturnToAlpha: Boolean): Boolean { KeyboardSwitcher.getInstance().toggleNumpad(withSliding, latinIME.currentAutoCapsState, latinIME.currentRecapitalizeState, forceReturnToAlpha) return true @@ -89,30 +112,34 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp override fun onMoveDeletePointer(steps: Int) { inputLogic.finishInput() - val end = inputLogic.mConnection.expectedSelectionEnd - var actualSteps = 0 // corrected steps to avoid splitting chars belonging to the same codepoint + val end = connection.expectedSelectionEnd + val actualSteps = actualSteps(steps) + val start = connection.expectedSelectionStart + actualSteps + if (start > end) return + connection.setSelection(start, end) + } + + private fun actualSteps(steps: Int): Int { + var actualSteps = 0 + // corrected steps to avoid splitting chars belonging to the same codepoint if (steps > 0) { - val text = inputLogic.mConnection.getSelectedText(0) - if (text == null) actualSteps = steps - else loopOverCodePoints(text) { - actualSteps += Character.charCount(it) + val text = connection.getSelectedText(0) ?: return steps + loopOverCodePoints(text) { cp, charCount -> + actualSteps += charCount actualSteps >= steps } } else { - val text = inputLogic.mConnection.getTextBeforeCursor(-steps * 4, 0) - if (text == null) actualSteps = steps - else loopOverCodePointsBackwards(text) { - actualSteps -= Character.charCount(it) + val text = connection.getTextBeforeCursor(-steps * 4, 0) ?: return steps + loopOverCodePointsBackwards(text) { cp, charCount -> + actualSteps -= charCount actualSteps <= steps } } - val start = inputLogic.mConnection.expectedSelectionStart + actualSteps - if (start > end) return - inputLogic.mConnection.setSelection(start, end) + return actualSteps } override fun onUpWithDeletePointerActive() { - if (!inputLogic.mConnection.hasSelection()) return + if (!connection.hasSelection()) return inputLogic.finishInput() onCodeInput(KeyCode.DELETE, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false) } @@ -122,7 +149,7 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp } private fun onLanguageSlide(steps: Int): Boolean { - if (abs(steps) < 4) return false + if (abs(steps) < settings.current.mLanguageSwipeDistance) return false val subtypes = RichInputMethodManager.getInstance().getMyEnabledInputMethodSubtypeList(false) if (subtypes.size <= 1) { // only allow if we have more than one subtype return false @@ -131,9 +158,21 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp val current = RichInputMethodManager.getInstance().currentSubtype.rawSubtype var wantedIndex = subtypes.indexOf(current) + if (steps > 0) 1 else -1 wantedIndex %= subtypes.size - if (wantedIndex < 0) + if (wantedIndex < 0) { wantedIndex += subtypes.size - KeyboardSwitcher.getInstance().switchToSubtype(subtypes[wantedIndex]) + } + val newSubtype = subtypes[wantedIndex] + + // do not switch if we would switch to the initial subtype after cycling all other subtypes + if (initialSubtype == null) initialSubtype = current + if (initialSubtype == newSubtype) { + if ((subtypeSwitchCount > 0 && steps > 0) || (subtypeSwitchCount < 0 && steps < 0)) { + return true + } + } + if (steps > 0) subtypeSwitchCount++ else subtypeSwitchCount-- + + KeyboardSwitcher.getInstance().switchToSubtype(newSubtype) return true } @@ -150,17 +189,8 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp val steps = if (RichInputMethodManager.getInstance().currentSubtype.isRtlSubtype) -rawSteps else rawSteps val moveSteps: Int if (steps < 0) { - var actualSteps = 0 // corrected steps to avoid splitting chars belonging to the same codepoint - val text = inputLogic.mConnection.getTextBeforeCursor(-steps * 4, 0) ?: return false - loopOverCodePointsBackwards(text) { - if (StringUtils.mightBeEmoji(it)) { - actualSteps = 0 - return@loopOverCodePointsBackwards true - } - actualSteps -= Character.charCount(it) - actualSteps <= steps - } - moveSteps = -text.length.coerceAtMost(abs(actualSteps)) + val text = connection.getTextBeforeCursor(-steps * 4, 0) ?: return false + moveSteps = negativeMoveSteps(text, steps) if (moveSteps == 0) { // some apps don't return any text via input connection, and the cursor can't be moved // we fall back to virtually pressing the left/right key one or more times instead @@ -170,36 +200,61 @@ class KeyboardActionListenerImpl(private val latinIME: LatinIME, private val inp return true } } else { - var actualSteps = 0 // corrected steps to avoid splitting chars belonging to the same codepoint - val text = inputLogic.mConnection.getTextAfterCursor(steps * 4, 0) ?: return false - loopOverCodePoints(text) { - if (StringUtils.mightBeEmoji(it)) { - actualSteps = 0 - return@loopOverCodePoints true - } - actualSteps += Character.charCount(it) - actualSteps >= steps - } - moveSteps = text.length.coerceAtMost(actualSteps) + val text = connection.getTextAfterCursor(steps * 4, 0) ?: return false + moveSteps = positiveMoveSteps(text, steps) if (moveSteps == 0) { + // some apps don't return any text via input connection, and the cursor can't be moved + // we fall back to virtually pressing the left/right key one or more times instead repeat(steps) { onCodeInput(KeyCode.ARROW_RIGHT, Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE, false) } return true } } - if (inputLogic.moveCursorByAndReturnIfInsideComposingWord(moveSteps)) { + + // the shortcut below causes issues due to horrible handling of text fields by Firefox and forks + // issues: + // * setSelection "will cause the editor to call onUpdateSelection", see: https://developer.android.com/reference/android/view/inputmethod/InputConnection#setSelection(int,%20int) + // but Firefox is simply not doing this within the same word... WTF? + // https://github.com/Helium314/HeliBoard/issues/1139#issuecomment-2588169384 + // * inputType is NOT if variant InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT (variant appears to always be 0) + // so we can't even only do it for browsers (identifying by app name will break for forks) + // best "solution" is not doing this for InputType variation 0 but this applies to the majority of text fields... + val variation = InputType.TYPE_MASK_VARIATION and Settings.getValues().mInputAttributes.mInputType + if (variation != 0 && inputLogic.moveCursorByAndReturnIfInsideComposingWord(moveSteps)) { // no need to finish input and restart suggestions if we're still in the word - // this is a noticeable performance improvement - val newPosition = inputLogic.mConnection.expectedSelectionStart + moveSteps - inputLogic.mConnection.setSelection(newPosition, newPosition) + // this is a noticeable performance improvement when moving through long words + val newPosition = connection.expectedSelectionStart + moveSteps + connection.setSelection(newPosition, newPosition) return true } + inputLogic.finishInput() - val newPosition = inputLogic.mConnection.expectedSelectionStart + moveSteps - inputLogic.mConnection.setSelection(newPosition, newPosition) + val newPosition = connection.expectedSelectionStart + moveSteps + connection.setSelection(newPosition, newPosition) inputLogic.restartSuggestionsOnWordTouchedByCursor(settings.current, keyboardSwitcher.currentKeyboardScript) return true } + private fun positiveMoveSteps(text: CharSequence, steps: Int): Int { + var actualSteps = 0 + // corrected steps to avoid splitting chars belonging to the same codepoint + loopOverCodePoints(text) { cp, charCount -> + if (StringUtils.mightBeEmoji(cp)) return 0 + actualSteps += charCount + actualSteps >= steps + } + return min(actualSteps, text.length) + } + + private fun negativeMoveSteps(text: CharSequence, steps: Int): Int { + var actualSteps = 0 + // corrected steps to avoid splitting chars belonging to the same codepoint + loopOverCodePointsBackwards(text) { cp, charCount -> + if (StringUtils.mightBeEmoji(cp)) return 0 + actualSteps -= charCount + actualSteps <= steps + } + return -min(-actualSteps, text.length) + } } diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardId.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardId.java index 7826c4d84..ac39680a8 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardId.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardId.java @@ -63,6 +63,8 @@ public final class KeyboardId { public static final int ELEMENT_EMOJI_CATEGORY16 = 26; public static final int ELEMENT_CLIPBOARD = 27; public static final int ELEMENT_NUMPAD = 28; + public static final int ELEMENT_EMOJI_BOTTOM_ROW = 29; + public static final int ELEMENT_CLIPBOARD_BOTTOM_ROW = 30; public final RichInputMethodSubtype mSubtype; public final int mWidth; @@ -191,6 +193,10 @@ public final class KeyboardId { return mElementId >= ELEMENT_EMOJI_RECENTS && mElementId <= ELEMENT_EMOJI_CATEGORY16; } + public boolean isEmojiClipBottomRow() { + return mElementId == ELEMENT_CLIPBOARD_BOTTOM_ROW || mElementId == ELEMENT_EMOJI_BOTTOM_ROW; + } + public int imeAction() { return InputTypeUtils.getImeOptionsActionIdFromEditorInfo(mEditorInfo); } diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java deleted file mode 100644 index 75af09ac7..000000000 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayout.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * modified - * SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only - */ - -package helium314.keyboard.keyboard; - -import androidx.annotation.NonNull; - -import com.android.inputmethod.keyboard.ProximityInfo; - -import java.util.ArrayList; -import java.util.List; - -/** - * KeyboardLayout maintains the keyboard layout information. - */ -public class KeyboardLayout { - - private final int[] mKeyCodes; - - private final int[] mKeyXCoordinates; - private final int[] mKeyYCoordinates; - - private final int[] mKeyWidths; - private final int[] mKeyHeights; - - public final int mMostCommonKeyWidth; - public final int mMostCommonKeyHeight; - - public final int mKeyboardWidth; - public final int mKeyboardHeight; - - public KeyboardLayout(ArrayList layoutKeys, int mostCommonKeyWidth, - int mostCommonKeyHeight, int keyboardWidth, int keyboardHeight) { - mMostCommonKeyWidth = mostCommonKeyWidth; - mMostCommonKeyHeight = mostCommonKeyHeight; - mKeyboardWidth = keyboardWidth; - mKeyboardHeight = keyboardHeight; - - mKeyCodes = new int[layoutKeys.size()]; - mKeyXCoordinates = new int[layoutKeys.size()]; - mKeyYCoordinates = new int[layoutKeys.size()]; - mKeyWidths = new int[layoutKeys.size()]; - mKeyHeights = new int[layoutKeys.size()]; - - for (int i = 0; i < layoutKeys.size(); i++) { - Key key = layoutKeys.get(i); - mKeyCodes[i] = Character.toLowerCase(key.getCode()); - mKeyXCoordinates[i] = key.getX(); - mKeyYCoordinates[i] = key.getY(); - mKeyWidths[i] = key.getWidth(); - mKeyHeights[i] = key.getHeight(); - } - } - - public int[] getKeyCodes() { - return mKeyCodes; - } - - /** - * The x-coordinate for the top-left corner of the keys. - * - */ - public int[] getKeyXCoordinates() { - return mKeyXCoordinates; - } - - /** - * The y-coordinate for the top-left corner of the keys. - */ - public int[] getKeyYCoordinates() { - return mKeyYCoordinates; - } - - /** - * The widths of the keys which are smaller than the true hit-area due to the gaps - * between keys. The mostCommonKey(Width/Height) represents the true key width/height - * including the gaps. - */ - public int[] getKeyWidths() { - return mKeyWidths; - } - - /** - * The heights of the keys which are smaller than the true hit-area due to the gaps - * between keys. The mostCommonKey(Width/Height) represents the true key width/height - * including the gaps. - */ - public int[] getKeyHeights() { - return mKeyHeights; - } - - /** - * Factory method to create {@link KeyboardLayout} objects. - */ - public static KeyboardLayout newKeyboardLayout(@NonNull final List sortedKeys, - int mostCommonKeyWidth, int mostCommonKeyHeight, - int occupiedWidth, int occupiedHeight) { - final ArrayList layoutKeys = new ArrayList(); - for (final Key key : sortedKeys) { - if (!ProximityInfo.needsProximityInfo(key)) { - continue; - } - if (key.getCode() != ',') { - layoutKeys.add(key); - } - } - return new KeyboardLayout(layoutKeys, mostCommonKeyWidth, mostCommonKeyHeight, occupiedWidth, occupiedHeight); - } -} diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayoutSet.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayoutSet.java index e77b976f3..2bdbbdc97 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayoutSet.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardLayoutSet.java @@ -13,15 +13,20 @@ import android.text.InputType; import android.view.inputmethod.EditorInfo; import helium314.keyboard.keyboard.internal.KeyboardBuilder; +import helium314.keyboard.keyboard.internal.KeyboardIconsSet; import helium314.keyboard.keyboard.internal.KeyboardParams; import helium314.keyboard.keyboard.internal.UniqueKeysCache; +import helium314.keyboard.keyboard.internal.keyboard_parser.LayoutParser; import helium314.keyboard.keyboard.internal.keyboard_parser.LocaleKeyboardInfos; import helium314.keyboard.keyboard.internal.keyboard_parser.LocaleKeyboardInfosKt; -import helium314.keyboard.keyboard.internal.keyboard_parser.RawKeyboardParser; +import helium314.keyboard.latin.RichInputMethodManager; import helium314.keyboard.latin.RichInputMethodSubtype; +import helium314.keyboard.latin.settings.Settings; import helium314.keyboard.latin.utils.InputTypeUtils; import helium314.keyboard.latin.utils.Log; +import helium314.keyboard.latin.utils.ResourceUtils; import helium314.keyboard.latin.utils.ScriptUtils; +import helium314.keyboard.latin.utils.SubtypeLocaleUtils; import java.lang.ref.SoftReference; import java.util.HashMap; @@ -91,6 +96,7 @@ public final class KeyboardLayoutSet { public static void onSystemLocaleChanged() { clearKeyboardCache(); LocaleKeyboardInfosKt.clearCache(); + SubtypeLocaleUtils.clearSubtypeDisplayNameCache(); } public static void onKeyboardThemeChanged() { @@ -100,7 +106,8 @@ public final class KeyboardLayoutSet { private static void clearKeyboardCache() { sKeyboardCache.clear(); sUniqueKeysCache.clear(); - RawKeyboardParser.INSTANCE.clearCache(); + LayoutParser.INSTANCE.clearCache(); + KeyboardIconsSet.Companion.setNeedsReload(true); } KeyboardLayoutSet(final Context context, @NonNull final Params params) { @@ -210,6 +217,17 @@ public final class KeyboardLayoutSet { } } + public static KeyboardLayoutSet buildEmojiClipBottomRow(final Context context, @Nullable final EditorInfo ei) { + final Builder builder = new Builder(context, ei); + builder.mParams.mMode = KeyboardId.MODE_TEXT; + final int width = ResourceUtils.getKeyboardWidth(context, Settings.getValues()); + // actually the keyboard does not have full height, but at this point we use it to get correct key heights + final int height = ResourceUtils.getKeyboardHeight(context.getResources(), Settings.getValues()); + builder.setKeyboardGeometry(width, height); + builder.setSubtype(RichInputMethodManager.getInstance().getCurrentSubtype()); + return builder.build(); + } + public Builder setKeyboardGeometry(final int keyboardWidth, final int keyboardHeight) { mParams.mKeyboardWidth = keyboardWidth; mParams.mKeyboardHeight = keyboardHeight; @@ -220,7 +238,7 @@ public final class KeyboardLayoutSet { final boolean asciiCapable = subtype.getRawSubtype().isAsciiCapable(); final boolean forceAscii = (mParams.mEditorInfo.imeOptions & EditorInfo.IME_FLAG_FORCE_ASCII) != 0; mParams.mSubtype = (forceAscii && !asciiCapable) - ? RichInputMethodSubtype.getNoLanguageSubtype() + ? RichInputMethodSubtype.Companion.getNoLanguageSubtype() : subtype; return this; } @@ -310,8 +328,8 @@ public final class KeyboardLayoutSet { public static KeyboardId getFakeKeyboardId(final int elementId) { final Params params = new Params(); params.mEditorInfo = new EditorInfo(); - params.mSubtype = RichInputMethodSubtype.getEmojiSubtype(); - params.mSubtype.getKeyboardLayoutSetName(); + params.mSubtype = RichInputMethodSubtype.Companion.getEmojiSubtype(); + params.mSubtype.getMainLayoutName(); return new KeyboardId(elementId, params); } } diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java index 3b7449530..2b679dd26 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java @@ -8,6 +8,7 @@ package helium314.keyboard.keyboard; import android.annotation.SuppressLint; import android.content.Context; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.drawable.Drawable; @@ -40,13 +41,16 @@ import helium314.keyboard.latin.RichInputMethodSubtype; import helium314.keyboard.latin.WordComposer; import helium314.keyboard.latin.settings.Settings; import helium314.keyboard.latin.settings.SettingsValues; -import helium314.keyboard.latin.utils.AdditionalSubtypeUtils; +import helium314.keyboard.latin.suggestions.SuggestionStripView; import helium314.keyboard.latin.utils.CapsModeUtils; +import helium314.keyboard.latin.utils.KtxKt; import helium314.keyboard.latin.utils.LanguageOnSpacebarUtils; import helium314.keyboard.latin.utils.Log; import helium314.keyboard.latin.utils.RecapitalizeStatus; import helium314.keyboard.latin.utils.ResourceUtils; import helium314.keyboard.latin.utils.ScriptUtils; +import helium314.keyboard.latin.utils.SubtypeLocaleUtils; +import helium314.keyboard.latin.utils.SubtypeUtilsAdditional; public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private static final String TAG = KeyboardSwitcher.class.getSimpleName(); @@ -59,7 +63,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private View mEmojiTabStripView; private LinearLayout mClipboardStripView; private HorizontalScrollView mClipboardStripScrollView; - private View mSuggestionStripView; + private SuggestionStripView mSuggestionStripView; private ClipboardHistoryView mClipboardHistoryView; private TextView mFakeToastView; private LatinIME mLatinIME; @@ -74,6 +78,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private Context mThemeContext; private int mCurrentUiMode; private int mCurrentOrientation; + private int mCurrentDpi; + private boolean mThemeNeedsReload; @SuppressLint("StaticFieldLeak") // this is a keyboard, we want to keep it alive in background private static final KeyboardSwitcher sInstance = new KeyboardSwitcher(); @@ -108,22 +114,22 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } } - public void forceUpdateKeyboardTheme(@NonNull Context displayContext) { - mLatinIME.setInputView(onCreateInputView(displayContext, mIsHardwareAcceleratedDrawingEnabled)); - } - - private boolean updateKeyboardThemeAndContextThemeWrapper(final Context context, - final KeyboardTheme keyboardTheme) { - if (mThemeContext == null + private boolean updateKeyboardThemeAndContextThemeWrapper(final Context context, final KeyboardTheme keyboardTheme) { + final Resources res = context.getResources(); + if (mThemeNeedsReload + || mThemeContext == null || !keyboardTheme.equals(mKeyboardTheme) - || mCurrentOrientation != context.getResources().getConfiguration().orientation - || (mCurrentUiMode & Configuration.UI_MODE_NIGHT_MASK) != (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) - || !mThemeContext.getResources().equals(context.getResources()) - || Settings.getInstance().getCurrent().mColors.haveColorsChanged(context)) { + || mCurrentDpi != res.getDisplayMetrics().densityDpi + || mCurrentOrientation != res.getConfiguration().orientation + || (mCurrentUiMode & Configuration.UI_MODE_NIGHT_MASK) != (res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) + || !mThemeContext.getResources().equals(res) + || Settings.getValues().mColors.haveColorsChanged(context)) { + mThemeNeedsReload = false; mKeyboardTheme = keyboardTheme; mThemeContext = new ContextThemeWrapper(context, keyboardTheme.mStyleId); - mCurrentUiMode = context.getResources().getConfiguration().uiMode; - mCurrentOrientation = context.getResources().getConfiguration().orientation; + mCurrentUiMode = res.getConfiguration().uiMode; + mCurrentOrientation = res.getConfiguration().orientation; + mCurrentDpi = res.getDisplayMetrics().densityDpi; KeyboardLayoutSet.onKeyboardThemeChanged(); return true; } @@ -134,9 +140,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { final int currentAutoCapsState, final int currentRecapitalizeState) { final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder( mThemeContext, editorInfo); - final Resources res = mThemeContext.getResources(); - final int keyboardWidth = ResourceUtils.getKeyboardWidth(res, settingsValues); - final int keyboardHeight = ResourceUtils.getKeyboardHeight(res, settingsValues); + final int keyboardWidth = ResourceUtils.getKeyboardWidth(mThemeContext, settingsValues); + final int keyboardHeight = ResourceUtils.getKeyboardHeight(mThemeContext.getResources(), settingsValues); final boolean oneHandedModeEnabled = settingsValues.mOneHandedModeEnabled; mKeyboardLayoutSet = builder.setKeyboardGeometry(keyboardWidth, keyboardHeight) .setSubtype(mRichImm.getCurrentSubtype()) @@ -152,9 +157,9 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } catch (KeyboardLayoutSetException e) { Log.e(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause()); try { - final InputMethodSubtype qwerty = AdditionalSubtypeUtils.createEmojiCapableAdditionalSubtype(mRichImm.getCurrentSubtypeLocale(), "qwerty", true); + final InputMethodSubtype defaults = SubtypeUtilsAdditional.INSTANCE.createDefaultSubtype(mRichImm.getCurrentSubtypeLocale()); mKeyboardLayoutSet = builder.setKeyboardGeometry(keyboardWidth, keyboardHeight) - .setSubtype(new RichInputMethodSubtype(qwerty)) + .setSubtype(RichInputMethodSubtype.Companion.get(defaults)) .setVoiceInputKeyEnabled(settingsValues.mShowsVoiceInputKey) .setNumberRowEnabled(settingsValues.mShowsNumberRow) .setLanguageSwitchKeyEnabled(settingsValues.isLanguageSwitchKeyEnabled()) @@ -163,9 +168,9 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { .setOneHandedModeEnabled(oneHandedModeEnabled) .build(); mState.onLoadKeyboard(currentAutoCapsState, currentRecapitalizeState, oneHandedModeEnabled); - showToast("error loading the keyboard, falling back to qwerty", false); + showToast("error loading the keyboard, falling back to defaults", false); } catch (KeyboardLayoutSetException e2) { - Log.e(TAG, "even fallback to qwerty failed: " + e2.mKeyboardId, e2.getCause()); + Log.e(TAG, "even fallback to defaults failed: " + e2.mKeyboardId, e2.getCause()); } } } @@ -184,7 +189,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private void setKeyboard(final int keyboardId, @NonNull final KeyboardSwitchState toggleState) { // Make {@link MainKeyboardView} visible and hide {@link EmojiPalettesView}. - final SettingsValues currentSettingsValues = Settings.getInstance().getCurrent(); + final SettingsValues currentSettingsValues = Settings.getValues(); setMainKeyboardFrame(currentSettingsValues, toggleState); // TODO: pass this object to setKeyboard instead of getting the current values. final MainKeyboardView keyboardView = mKeyboardView; @@ -302,6 +307,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { @NonNull final SettingsValues settingsValues, @NonNull final KeyboardSwitchState toggleState) { final int visibility = isImeSuppressedByHardwareKeyboard(settingsValues, toggleState) ? View.GONE : View.VISIBLE; + PointerTracker.switchTo(mKeyboardView); mKeyboardView.setVisibility(visibility); // The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}. // @see #getVisibleKeyboardView() and @@ -322,7 +328,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { if (DEBUG_ACTION) { Log.d(TAG, "setEmojiKeyboard"); } - final Keyboard keyboard = mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET); mMainKeyboardFrame.setVisibility(View.VISIBLE); // The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}. // @see #getVisibleKeyboardView() and @@ -332,9 +337,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mClipboardStripScrollView.setVisibility(View.GONE); mEmojiTabStripView.setVisibility(View.VISIBLE); mClipboardHistoryView.setVisibility(View.GONE); - mEmojiPalettesView.startEmojiPalettes( - mKeyboardLayoutSet.mLocaleKeyboardInfos.getLabelAlphabet(), - mKeyboardView.getKeyVisualAttribute(), keyboard.mIconsSet); + mEmojiPalettesView.startEmojiPalettes(mKeyboardView.getKeyVisualAttribute(), + mLatinIME.getCurrentInputEditorInfo(), mLatinIME.mKeyboardActionListener); mEmojiPalettesView.setVisibility(View.VISIBLE); } @@ -344,7 +348,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { if (DEBUG_ACTION) { Log.d(TAG, "setClipboardKeyboard"); } - final Keyboard keyboard = mKeyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET); mMainKeyboardFrame.setVisibility(View.VISIBLE); // The visibility of {@link #mKeyboardView} must be aligned with {@link #MainKeyboardFrame}. // @see #getVisibleKeyboardView() and @@ -355,10 +358,8 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mClipboardStripScrollView.post(() -> mClipboardStripScrollView.fullScroll(HorizontalScrollView.FOCUS_RIGHT)); mClipboardStripScrollView.setVisibility(View.VISIBLE); mEmojiPalettesView.setVisibility(View.GONE); - mClipboardHistoryView.startClipboardHistory( - mLatinIME.getClipboardHistoryManager(), - mKeyboardLayoutSet.mLocaleKeyboardInfos.getLabelAlphabet(), - mKeyboardView.getKeyVisualAttribute(), keyboard.mIconsSet); + mClipboardHistoryView.startClipboardHistory(mLatinIME.getClipboardHistoryManager(), mKeyboardView.getKeyVisualAttribute(), + mLatinIME.getCurrentInputEditorInfo(), mLatinIME.mKeyboardActionListener); mClipboardHistoryView.setVisibility(View.VISIBLE); } @@ -478,7 +479,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { if (mKeyboardViewWrapper.getOneHandedModeEnabled() == enabled) { return; } - mEmojiPalettesView.clearKeyboardCache(); final Settings settings = Settings.getInstance(); mKeyboardViewWrapper.setOneHandedModeEnabled(enabled); mKeyboardViewWrapper.setOneHandedGravity(settings.getCurrent().mOneHandedModeGravity); @@ -488,8 +488,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { // Reload the entire keyboard set with the same parameters, and switch to the previous layout boolean wasEmoji = isShowingEmojiPalettes(); boolean wasClipboard = isShowingClipboardHistory(); - loadKeyboard(mLatinIME.getCurrentInputEditorInfo(), settings.getCurrent(), - mLatinIME.getCurrentAutoCapsState(), mLatinIME.getCurrentRecapitalizeState()); + reloadKeyboard(); if (wasEmoji) setEmojiKeyboard(); else if (wasClipboard) { @@ -504,6 +503,23 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { Settings.getInstance().writeOneHandedModeGravity(mKeyboardViewWrapper.getOneHandedGravity()); } + public void toggleSplitKeyboardMode() { + final Settings settings = Settings.getInstance(); + settings.writeSplitKeyboardEnabled( + !settings.getCurrent().mIsSplitKeyboardEnabled, + mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE + ); + reloadKeyboard(); + } + + public void reloadKeyboard() { + if (mCurrentInputView == null) + return; + mEmojiPalettesView.clearKeyboardCache(); + loadKeyboard(mLatinIME.getCurrentInputEditorInfo(), Settings.getValues(), + mLatinIME.getCurrentAutoCapsState(), mLatinIME.getCurrentRecapitalizeState()); + } + /** * Displays a toast message. * @@ -524,7 +540,7 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } // Displays a toast-like message with the provided text for a specified duration. - public void showFakeToast(final String text, final int timeMillis) { + private void showFakeToast(final String text, final int timeMillis) { if (mFakeToastView.getVisibility() == View.VISIBLE) return; final Drawable appIcon = mFakeToastView.getCompoundDrawables()[0]; @@ -628,11 +644,25 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { } } + public void trimMemory() { + if (mEmojiPalettesView != null) { + mEmojiPalettesView.clearKeyboardCache(); + } + } + @SuppressLint("InflateParams") public View onCreateInputView(@NonNull Context displayContext, final boolean isHardwareAcceleratedDrawingEnabled) { if (mKeyboardView != null) { mKeyboardView.closing(); } + PointerTracker.clearOldViewData(); + final SharedPreferences prefs = KtxKt.prefs(displayContext); + if (mSuggestionStripView != null) + prefs.unregisterOnSharedPreferenceChangeListener(mSuggestionStripView); + if (mClipboardHistoryView != null) + prefs.unregisterOnSharedPreferenceChangeListener(mClipboardHistoryView); + if (mThemeNeedsReload) // necessary in some cases (e.g. theme switch) when mThemeNeedsReload is set before first keyboard load + Settings.getInstance().loadSettings(displayContext, Settings.getValues().mLocale, Settings.getValues().mInputAttributes); updateKeyboardThemeAndContextThemeWrapper(displayContext, KeyboardTheme.getKeyboardTheme(displayContext)); mCurrentInputView = (InputView)LayoutInflater.from(mThemeContext).inflate(R.layout.input_view, null); @@ -655,6 +685,9 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { mClipboardStripScrollView = mCurrentInputView.findViewById(R.id.clipboard_strip_scroll_view); mSuggestionStripView = mCurrentInputView.findViewById(R.id.suggestion_strip_view); + prefs.registerOnSharedPreferenceChangeListener(mSuggestionStripView); + prefs.registerOnSharedPreferenceChangeListener(mClipboardHistoryView); + PointerTracker.switchTo(mKeyboardView); return mCurrentInputView; } @@ -691,4 +724,21 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { public String getLocaleAndConfidenceInfo() { return mLatinIME.getLocaleAndConfidenceInfo(); } + + /** Marks the theme as outdated. The theme will be reloaded next time the keyboard is shown. + * If the keyboard is currently showing, theme will be reloaded immediately. */ + public void setThemeNeedsReload() { + mThemeNeedsReload = true; + if (mLatinIME == null || !mLatinIME.isInputViewShown()) + return; // will be reloaded right before showing IME + + // Hide and show IME, showing will trigger the reload. + // Reloading while IME is shown is glitchy, and hiding / showing is so fast the user shouldn't notice. + mLatinIME.hideWindow(); + try { + mLatinIME.showWindow(true); + } catch (IllegalStateException e) { + // in tests isInputViewShown returns true, but showWindow throws "IllegalStateException: Window token is not set yet." + } + } } diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt b/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt index c7f8b518f..73d03ef00 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardTheme.kt @@ -9,16 +9,27 @@ import android.content.Context import android.content.SharedPreferences import android.graphics.Color import android.os.Build -import android.os.Build.VERSION_CODES +import android.util.TypedValue +import android.view.ContextThemeWrapper import androidx.core.content.ContextCompat +import androidx.core.content.edit import helium314.keyboard.latin.R import helium314.keyboard.latin.common.AllColors +import helium314.keyboard.latin.common.ColorType import helium314.keyboard.latin.common.Colors import helium314.keyboard.latin.common.DefaultColors import helium314.keyboard.latin.common.DynamicColors -import helium314.keyboard.latin.common.readAllColorsMap +import helium314.keyboard.latin.settings.Defaults import helium314.keyboard.latin.settings.Settings -import helium314.keyboard.latin.utils.DeviceProtectedUtils +import helium314.keyboard.latin.utils.ResourceUtils +import helium314.keyboard.latin.utils.brightenOrDarken +import helium314.keyboard.latin.utils.isBrightColor +import helium314.keyboard.latin.utils.isGoodContrast +import helium314.keyboard.latin.utils.prefs +import helium314.keyboard.settings.SettingsActivity +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import java.util.EnumMap class KeyboardTheme // Note: The themeId should be aligned with "themeId" attribute of Keyboard style in values/themes- + diff --git a/app/src/main/res/values-v29/donottranslate.xml b/app/src/main/res/values-v29/donottranslate.xml deleted file mode 100644 index 852e10b6b..000000000 --- a/app/src/main/res/values-v29/donottranslate.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - true - diff --git a/app/src/main/res/values-v31/platform-theme.xml b/app/src/main/res/values-v31/platform-theme.xml index ce9c4f67b..6f6ade775 100644 --- a/app/src/main/res/values-v31/platform-theme.xml +++ b/app/src/main/res/values-v31/platform-theme.xml @@ -5,50 +5,34 @@ - - - - - - diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 20d60d88d..96fc958fa 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -5,8 +5,7 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - "Tra cứu tên liên hệ" - "Trình kiểm tra chính tả sá»­ dụng các mục nhập từ danh bạ cá»§a bạn" + "Tra cứu tên liên hệ" "Rung khi nhấn phím" "Phát âm thanh khi nhấn phím" "PhÃŽng chữ lớn hÆ¡n bật lên khi nhấn phím" @@ -18,9 +17,8 @@ "Bật chia bàn phím" "Phương thức nhập khác" "Phím chuyển đổi ngÃŽn ngữ" - "%s mili giây" + "%s mili giây" "Theo mặc định cá»§a hệ thống" - "Đề xuất tên liên hệ" "Sá»­ dụng tên từ Danh bạ cho các đề xuất và chỉnh sá»­a" "Đề xuất được cá nhân hóa" "Thêm dấu chấm khi nhấn hai phím cách" @@ -28,7 +26,6 @@ "Tá»± động viết hoa" "Viết hoa chữ đầu tiên cá»§a mỗi câu" "Từ điển cá nhân" - "Thêm từ điển" "Từ điển chính" "Hiển thị gợi Ü sá»­a" "Hiển thị từ được đề xuất khi nhập" @@ -53,20 +50,9 @@ "Tiếng Tây Ban Nha (Mỹ)" "Tiếng Anh-Hindi" "Tiếng Serbia (La tinh)" - "Tiếng Anh (Anh) (%s)" - "Tiếng Anh (Mỹ) (%s)" - "Tiếng Tây Ban Nha (Mỹ) (%s)" - "Tiếng Anh-Hindi (%s)" - "Tiếng Serbia (%s)" - "%s (Truyền thống)" - "%s (Viết tắt)" - "KhÃŽng ngÃŽn ngữ nào (Bảng chữ cái)" - "Bảng chữ cái (QWERTY)" - "Bảng chữ cái (QWERTZ)" - "Bảng chữ cái (AZERTY)" - "Bảng chữ cái (Dvorak)" - "Bảng chữ cái (Colemak)" - "Bảng chữ cái (PC)" + "%s (Truyền thống)" + "%s (Viết tắt)" + "KhÃŽng ngÃŽn ngữ nào" "Biểu tượng cảm xúc" "Thêm" "Xóa" @@ -79,41 +65,33 @@ "Biểu tượng cảm xúc cho bàn phím vật lÜ" "Phím Alt thá»±c hiển thị bảng biểu tượng cảm xúc" "Mặc định" - "Chào mừng bạn đến với %s" + "Chào mừng bạn đến với %s" "với Nhập bằng cá»­ chỉ" "Bắt đầu" - "Bước tiếp theo" - "Thiết lập %s" - "Bật %s" - "Hãy chọn \"%s\" trong cài đặt NgÃŽn ngữ và phương thức nhập. Thao tác này sẜ cho phép ứng dụng chạy trên thiết bị cá»§a bạn." - "%s đã được bật trong cài đặt NgÃŽn ngữ và phương thức nhập, do đó bước này đã hoàn tất. Hãy chuyển sang bước tiếp theo!" + "Thiết lập %s" + "Bật %s" + "Hãy chọn \"%s\" trong cài đặt NgÃŽn ngữ và phương thức nhập. Thao tác này sẜ cho phép ứng dụng chạy trên thiết bị cá»§a bạn." "Bật trong Cài đặt" - "Chuyển sang %s" - "Tiếp theo, chọn \"%s\" làm phương thức nhập văn bản hoạt động cá»§a bạn." + "Chuyển sang %s" + "Tiếp theo, chọn \"%s\" làm phương thức nhập văn bản hoạt động cá»§a bạn." "Chuyển phương thức nhập" "Xin chúc mừng, bạn đã cài đặt xong!" - "Bây giờ bạn có thể nhập vào tất cả ứng dụng yêu thích cá»§a mình với %s." + "Bây giờ bạn có thể nhập vào tất cả ứng dụng yêu thích cá»§a mình với %s." "Đã xong" "Hiển thị biểu tượng ứng dụng" "Hiển thị biểu tượng ứng dụng trong trình chạy" - "Từ điển bổ sung" - "Cài đặt cho từ điển" + "Từ điển bổ sung" "Từ điển có sẵn" - "Lỗi kết nối DV từ điển" - "KhÃŽng có từ điển nào" "Cập nhật lần cuối" - "Từ điển chính" "Cài đặt" "Xóa" - "Phiên bản %1$s" - "Thêm" + "Phiên bản %1$s" "Thêm vào từ điển" "Phím tắt:" "NgÃŽn ngữ:" "Nhập từ" "Phím tắt tùy chọn" "Chỉnh sá»­a từ" - "Bạn khÃŽng có bất kỳ từ nào trong từ điển người dùng. Để thêm từ, hãy nhấn vào nút Thêm (+)." "Cho tất cả ngÃŽn ngữ" "NgÃŽn ngữ khác
" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 44753caed..abfb208c3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -3,168 +3,432 @@ Copyright (C) 2008 The Android Open Source Project modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only ---> - - "查扟联系人姓名" - "拌写检查工具䌚䜿甚悚的联系人列衚䞭的条目" +--> + "查扟联系人姓名" "按键振劚" "按键音效" - "按键时匹出星瀺字笊" - "偏奜讟眮" + 按键匹出字笊 + 銖选项 "滑行蟓入" - "文字曎正" + 文本曎正 "高级" - "䞻题背景" - "䜿甚分犻匏键盘" + 䞻题 + 启甚分犻匏键盘 "切换到其他蟓入法" "语蚀切换键" - "%s毫秒" + %s 毫秒 "系统默讀倌" - "联系人姓名建议" - "根据通讯圕䞭的姓名提䟛建议和曎正" + 䜿甚联系人䞭的姓名提䟛建议和曎正 "䞪性化建议" - "双击空栌插入句号" - "双击空栌键可插入句号并后跟空栌" + 双击空栌插入句号 + 双击空栌键可插入䞀䞪句号后跟䞀䞪空栌 "自劚倧写" - "句銖字词倧写" - "䞪人字兞" - "附加字兞" - "䞻字兞" + 句銖单词倧写 + 䞪人词兞 + 䞻词兞 "星瀺曎正建议" - "键入时星瀺建议的字词" - "屏蔜䞍文明的字词" - "屏蔜可胜䞍文明的字词" + 蟓入时星瀺建议单词 + 屏蔜䞍文明的单词 + 䞍芁建议可胜䞍文明的单词 "自劚曎正" "按空栌键和标点可自劚曎正错别字" "关闭" "小改" "倧幅改劚" "极倧幅床改劚" - "后续字词建议" - "根据䞊䞀䞪字词提䟛建议" + 后续单词建议 + 根据䞊䞀䞪单词提䟛建议 "启甚滑行蟓入" - "以滑行方匏写出字词䞭字母来蟓入字词" + 以滑行方匏写出单词䞭字母来蟓入单词 "星瀺滑行蟓入蜚迹" - "劚态挂浮预览" + 劚态浮劚预览 "词组滑行蟓入" "滑行蟓入时滑过空栌键即可蟓入空栌" - "英语(英囜)" - "英语(矎囜)" + 英语英囜 + 英语矎囜 "西班牙语矎囜" "印地英语" "塞尔绎亚语拉䞁语垃局" - 英匏英语 (%s) - 英语矎囜(%s) - 西班牙语矎囜(%s) - 英语印床(%s) - 塞尔绎亚语 (%s) - %s䌠统 - %s (玧凑) - "无语蚀字母" - "字母 (QWERTY)" - "字母 (QWERTZ)" - "字母 (AZERTY)" - "字母 (Dvorak)" - "字母 (Colemak)" - "字母 (PC)" + %s䌠统 + %s 玧凑型 + 无语蚀 "衚情笊号" "添加" - "删陀" + 移陀 "保存" "语蚀" "垃局" "按键振劚时长" "按键音量" "按键长按延迟" - "通过实䜓键盘启甚衚情笊号" - "按实䜓键盘䞊的 Alt 键可星瀺衚情笊号面板" + 甚于物理键盘的衚情笊号 + 物理 Alt 键星瀺衚情笊号调色板 "默讀" - 欢迎䜿甚 %s - "䜓验顺畅的滑行蟓入䜓验" + 欢迎䜿甚 %s + 垊有滑行蟓入 "匀始" - "䞋䞀步" - 讟眮 %s - 启甚 %s - 请圚“语蚀 & 蟓入法”讟眮䞭选䞭“%s”授权该应甚圚悚的讟倇䞊运行。 - 悚已圚“语蚀 & 蟓入法”䞭启甚了%s因歀这䞀步骀已完成。继续䞋䞀步吧 + 讟眮 %s + 启甚 %s + 请圚“语蚀和蟓入法”讟眮䞭选䞭“%s”授权该应甚圚悚的讟倇䞊运行。 "圚讟眮䞭启甚" - 切换到 %s - 接䞋来请选择“%s”䜜䞺悚芁䜿甚的文字蟓入法。 + 切换到 %s + 接䞋来请选择“%s”䜜䞺悚芁䜿甚的文本蟓入法。 "切换蟓入法" "恭喜悚已完成了讟眮" - 现圚悚可以圚自己喜欢的所有应甚䞭䜿甚 %s 来蟓入内容了。 - "完成" + 现圚悚可以圚悚喜欢的所有应甚䞭䜿甚 %s 蟓入内容了。 + 完成了 "星瀺应甚囟标" "圚启劚噚䞭星瀺应甚囟标" - "附加字兞" - "字兞讟眮" - "字兞可䟛䞋蜜" - "连接到字兞服务时发生问题" - "没有可䟛䞋蜜的字兞" - "䞊次曎新时闎" - "䞻字兞" + 附加词兞 + 词兞可䟛䞋蜜 + 最后曎新时闎 "讟眮" "删陀" - 版本 %1$s - "添加" - "添加到字兞" + 版本 %1$s + 添加到词兞 "快捷键" "语蚀" - "蟓入字词" - "快捷键选填" - "修改字词" - "甚户字兞䞭没有任䜕字词。芁添加字词请点按“添加”(+) 按钮。" - "所有语蚀" + 蟓入单词 + 可选快捷键 + 猖蟑单词 + 对于所有语蚀 "曎倚语蚀 " " ABCDEFGHIJKLMNOPQRSTUVWXYZ" 建议 - 其他 + 杂项 剪莎板历史 - æ ¡æ­£ + 曎正 实验性 无限制 - 剪切板 - 保存历史 - 从删陀键䞊进行滑劚可以䞀次选择并删陀蟃倧的文字郚分 - 区力隐私暡匏 - 长按候选词匹框 - 数字行 - 星瀺䞻芁提瀺 - %smin. + 启甚剪莎板历史 + 历史保留时闎 + 从删陀键滑劚䞀次选择并删陀蟃倧的文本郚分 + 区制隐身暡匏 + 星瀺长按提瀺 + 始终星瀺数字行 + 星瀺按键提瀺 + %s 分钟 滑劚删陀 - 衚情键 - 劂果犁甚剪莎板键将粘莎剪莎板内容 + 衚情笊号键 + 劂果犁甚剪莎板键将粘莎剪莎板内容劂果有的话 标点后面自劚插入空栌 - 单词蟓入后自劚添加空栌 + 单词蟓入时自劚圚标点笊号后插入空栌 拌写检查 拌写检查讟眮 - %s (孊校管理暡板) - 字母衚 - 犁止孊习新单词 - 切换蟓入法 - 数字 - 蟹框 - 自劚䞻题 - 系统自劚 + %s (Akkhor) + 犁甚新单词孊习 + 曎倚键 + 数字行 + 按键蟹框 + 自劚日闎/倜闎暡匏 + 倖观将遵埪系统讟眮 蟓入 - HeliBoard讟眮 + 讟眮 额倖键 - 长按空栌切换蟓入法 - 空栌切换蟓入法 - 调敎键盘高床 - 字母衚 - 自劚曎正把握 + 长按空栌键将提瀺蟓入法选择菜单 + 䜿甚空栌键曎改蟓入法 + 键盘高床比䟋 + 自劚曎正眮信床 "䜿甚系统语蚀" "选择蟓入法" - "撀消" - "重做" - "根据悚的通信记圕和以埀蟓入的数据来完善建议" + 撀销 + 恢倍 + 从悚的亀流和蟓入的数据䞭孊习以改进建议 "前埀" - "䞋䞪" - "䞊䞪" + 䞋䞀步 + 䞊䞀步 "完成" "发送" "搜玢" "暂停" "等埅" - \ No newline at end of file + 浮劚预览 + 滑行蟓入时看到建议的单词 + 始终立即匀始 + 滑行蟓入蜚迹寿呜 + %s (Sebeolsik Final) + 错误所选文件䞍是有效的词兞文件 + 风栌 + 圩色富航栏 + 浅色 + 沙滩 + 玫眗兰 + 工具栏 + 自定义莧垁 + 黑色 + 讟眮䞻芁莧垁笊号和最倚 6 䞪次芁莧垁笊号甚空栌隔匀 + 空栌键文本 + 空栌键背景 + 圚 GitHub 查看 + 按键背景 + 添加自定义垃局 + 倜闎 + 内郚䞻词兞 + 权重 + 粉红色 + 按键提瀺文本 + 区调 + 语蚀切换键行䞺 + 还原 + 提䟛本地库以启甚滑行蟓入 + 悚将需芁“%s”的库。䜿甚滑行蟓入时䞍兌容的库可胜䌚厩溃。 +\n +\n譊告加蜜倖郚代码可胜存圚安党风险。仅䜿甚悚信任来源的库。 + 加蜜库 + 右 + 侊 + 数字行 + @string/subtype_locale + 例 + 建议条文本 + 分犻距犻 + 切换䞀者 + 将单词添加到䞪人词兞 + 䜿甚讟倇䞪人词兞存傚孊习到的单词 + 譊告犁甚歀讟眮将枅陀孊习数据 + 始终星瀺建议 + 応略其他应甚犁甚建议的请求可胜䌚富臎问题 + 即䜿蟓入字段没有明确芁求也䌚自劚曎正 + 曎倚自劚曎正 + 选择提瀺源 + 䞍再星瀺 + 始终䜿甚䞭闎建议 + 按空栌或标点笊号时将蟓入䞭闎的建议 + 倇仜错误%s + 倇仜 + 删陀库 + 保存或从文件加蜜。譊告还原将芆盖现有数据 + 匹出星瀺曎倚垊有变音笊号的字母 + 星瀺以键盘语蚀定义的变䜓 + 选择单词 + 单手暡匏 + 完党巊 + 完党右 + 无法读取文件 + 垃局错误%s + 点击以猖蟑原始垃局 + %s实验性 + 歀倄 + 加蜜词兞文件时出错 + 所选文件甚于 %1$s䜆需芁 %2$s。是吊仍将其甚于 %2$s + 错误脚本䞎歀键盘䞍兌容 + 仍䜿甚 + 配色 + 配色倜闎 + 关闭剪莎板历史 + %s (Sebeolsik 390) + %s扩展 + 词兞 + 是吊确定芁替换甚户添加的词兞“%1$s”\n \n圓前词兞 \n%2$s \n \n新词兞 \n%3$s + 替换词兞 + 是吊确定芁移陀甚户添加的词兞“%s” + 选择芁添加的词兞。可以䞋蜜 .dict 栌匏的词兞 %s。 + 党息癜 + 深色 + 曎暗 + 劚态配色 + 保存日志 + 匀源讞可证 + GNU 通甚公共讞可证 v3.0 + 关闭 + 关于 + 版本 + 倖观 + 切换语蚀 + 还原倇仜时出错%s + 语蚀和垃局 + 本地化数字行 + 曎喜欢本地化数字而䞍是拉䞁数字 + 语蚀䌘先级 + 劂果长按某䞪键䌚觊发其他功胜则星瀺提瀺 + 衚情笊号 + 星瀺功胜提瀺 + 长按数字键盘笊号键 + 底郚蟹距比䟋 + 选择兌容栌匏的文件。有关栌匏的信息可甚 %s。 + 单词右 + 向䞊翻页 + 向䞋翻页 + 选择剪莎板工具栏键 + 页面匀始 + 页面结束 + 单词巊 + 建议剪莎板内容 + URL 检测 + 尝试检测 URL 和类䌌的单䞪单词 + 倇仜和还原 + 星瀺最近倍制的剪莎板内容䜜䞺建议 + 倚语蚀蟓入 + 加蜜滑行蟓入库 + 添加垞见变䜓 + 添加所有可甚变䜓 + 语音蟓入 + å·Š + 选择固定工具栏键 + 长按固定工具栏键 + 选择匹出键顺序 + 垃局 + 笊号 + 选择工具栏键 + 剪莎板 + 枅陀剪莎板 + 猩小键闎隔 + 加蜜 + 加蜜文件 + 配眮键盘 + 歀单词已存圚于 %s 甚户词兞䞭。请再蟓入䞀䞪。 + 圆圢 + 海掋 + 自劚选择颜色 + 仅星瀺䞻芁颜色 + 蓝灰色 + 棕色 + 巧克力色 + 倚云 + 森林 + 靛蓝 + 功胜键背景 + %s (Probhat) + 凯塔栌语 + 保存到文件 + 确定芁删陀自定义垃局 %s + 笊号阿拉䌯语 + 甚户自定义 + 甚户自定义倜闎 + 滑行蟓入法 + 切换到䞻键盘后  + 圚衚情笊号视囟䞭选择衚情笊号 + 选择剪莎板历史条目 + 圚笊号视囟蟓入内容后按回蜊键或空栌键 + 从文件添加词兞 + 这将犁甚未固定工具栏键的其他长按操䜜 + 添加非垞垞见的变䜓默讀 + 倍制到剪莎板 + 倍制现有垃局 + 选择语蚀 + "没有词兞悚只胜埗到之前蟓入的文本的建议。<br>\n\n 悚可以䞋蜜词兞 %1$s或检查是吊可以盎接䞋蜜“%2$s”的词兞 %3$s。" + 添加䞀䞪单词 + 移陀基础垃局䞊已存圚的匹出键 + 移陀倚䜙匹出 + %s (Student) + 曌西语 + 笊号 + 䞺文本和背景选择颜色 + 键盘背景 + 按键文本 + 星瀺曎倚颜色 + 星瀺所有颜色 + 歀讟眮星瀺内郚䜿甚的所有颜色。颜色列衚可胜随时曎改。默讀颜色是随机的名称䞍䌚被翻译。 + 讟眮背景囟片 + 䞺日闎或倜闎暡匏讟眮囟片 + 日闎 + 电话 + 电话笊号 + 数字 + 数字键盘 + 功胜键 + 功胜键笊号 + 功胜键曎倚笊号 + 曎倚笊号 + 数字键盘暪屏 + 圚滑行蟓入过皋䞭移劚预览 + 快速蟓入冷华 + 未知库文件。是吊确定是从可信来源获埗并䞔是“%s”的 + 点击语蚀以打匀讟眮 + 隐藏功胜的描述 + 自劚星瀺工具栏 + 建议可甚时隐藏工具栏 + 讟倇保技的存傚 + 氎平空栌键滑劚手势 + 劂果蟓入匀始或选择了文本则星瀺工具栏 + 星瀺可胜被応视的功胜 + 内容已倍制 + 垂盎空栌键滑劚手势 + 无 + 移劚光标 + 切换数字键盘 + 可变工具栏方向 + 选择从右到巊的键盘子类型时反蜬方向 + 自劚隐藏工具栏 + ► 长按固定的工具栏键䌚产生其他功胜<br>\n\t• 剪莎板 &#65515; 粘莎 <br>\n\t• 向巊/向右移劚 &#65515; 单词向巊/向右 <br>\n\t• 向䞊/向䞋移劚 &#65515; 向䞊/向䞋翻页 <br>\n\t• 单词向巊/向右 &#65515; 行起点/终点 <br>\n\t• 向䞊/向䞋翻页 &#65515; 页面匀始/结束 <br>\n\t• 倍制 &#65515; 剪切 <br>\n\t• 选择单词 &#8596; 党选 <br>\n\t• 撀销 &#8596; 恢倍 <br> <br>\n► 长按建议条工具栏䞭的键将它们固定到建议条䞊。 <br> <br>\n► 长按逗号键可访问剪莎板视囟、衚情笊号视囟、单手暡匏、讟眮或切换语蚀<br>\n\t• 劂果启甚了盞应的键衚情笊号视囟和语蚀切换将消倱<br>\n\t• 对于某些垃局它䞍是逗号键而是同䞀䜍眮的键䟋劂对于執沃倏克垃局是“q”。<br> <br>\n► 启甚隐身暡匏后将䞍䌚孊习任䜕单词也䞍䌚圚最近的衚情䞭添加任䜕衚情笊号。<br> <br>\n► 按隐身囟标访问工具栏。<br> <br>\n► 滑劚键蟓入从 Shift 键滑劚到及䞀䞪键蟓入单䞪倧写键<br>\n\t• 这也适甚于“?123”键从笊号键盘蟓入单䞪笊号以及盞关键。<br> <br>\n► 按䜏 Shift 或笊号键按䞀䞪或倚䞪键然后束匀 Shift 或笊号键以返回䞊䞀䞪键盘。<br> <br>\n► 长按建议栏䞭的建议可星瀺曎倚建议长按删陀按钮可移陀歀建议。<br> <br>\n► 从建议向䞊滑劚以打匀曎倚建议然后束匀建议以选择它。<br> <br>\n► 长按剪莎板历史䞭的条目将其固定将其保留圚剪莎板䞭盎到取消固定。<br> <br>\n► 圚剪莎板视囟䞭向巊滑劚以移陀条目被固定时陀倖<br> <br>\n► 选择文本并按 Shift 键圚倧写、小写和倧写单词之闎切换。<br> <br>\n► 悚可以通过圚文件资源管理噚䞭打匀词兞来添加词兞<br>\n\t• 这只适甚于<i>内容 URI</i>䞍适甚于<i>文件 URI</i>这意味着它可胜䞍适甚于某些文件浏览噚。<br> <br>\n► 对于䜿甚 Root 权限进行手劚倇仜的甚户<br>\n\t• 从 Android 7 匀始共享銖选项文件䞍圚默讀䜍眮因䞺应甚正圚䜿甚 %s。这是必芁的这样可以圚讟倇解锁之前读取讟眮䟋劂圚启劚时<br>\n\t• 该文件䜍于 /data/user_de/0/package_id/shared_prefs/ 䞭䜆这可胜取决于讟倇和 Android 版本。<br> <br>\n<i><b>调试暡匏/调试 APK</b></i> <br> <br>\n► 长按建议星瀺源词兞。<br> <br>\n► 䜿甚调试 APK 时悚可以圚高级銖选项䞭扟到调试讟眮䜆陀了将词兞蜬傚到日志䞭倖其甚倄有限。<br>\n\t• 对于发垃 APK悚需芁倚次点击<i>关于</i>䞭的版本然后悚可以圚<i>高级銖选项</i>扟到调试讟眮。<br>\n\t• 圓启甚<i>星瀺建议信息</i>时建议顶郚䌚有䞀些小数字星瀺䞀些内郚分数和源词兞。<br> <br>\n► 劂果应甚厩溃打匀“讟眮”时系统䌚提瀺悚是吊需芁厩溃日志。<br> <br>\n► 䜿甚倚语蚀蟓入时空栌键将星瀺甚于确定圓前䜿甚的语蚀的眮信床倌。<br> <br>\n► 建议顶郚䌚有䞀些小数字星瀺䞀些内郚分数和源词兞可以犁甚。 + 囟标风栌 + 数字行 + 空栌键䞊的自定义文本 + 衚情笊号底行 + 剪莎板底行 + Delete + Caps lock + Shift已按䞋 + 关闭单手暡匏 + 调敎单手暡匏 + 切换单手暡匏 + 语音蟓入已犁甚 + 星瀺/隐藏工具栏 + 语蚀切换 + 零宜连字 + 零宜䞍连字 + 自定义工具栏按键代码 + 按键代码 + 长按代码 + 自定义囟标 + Shift + Enter + Tab + Space数字垃局 + 删陀 + 确定重眮所有自定义囟标 + 圚勿扰暡匏时振劚 + %s泚音 + 芆盖衚情笊号版本 + 蟟尔栌瓊语 (Urakhi) + 自劚曎正快捷方匏 + 从文件讟眮自定义字䜓 + 劂果未讟眮将䜿甚纵向囟片 + 确定枅陀所有自定义按键代码 + 启甚后快捷方匏可胜䌚通过自劚曎正扩展 + 讟眮背景囟片暪屏 + 键盘字䜓比䟋 + 衚情笊号视囟字䜓比䟋 + 底郚蟹距比䟋暪屏 + 䟧蟹距比䟋暪屏 + 䟧蟹距比䟋 + 圚数字行星瀺提瀺 + 切换语蚀滑劚距犻 + 分犻距犻暪屏 + 分犻匏键盘 + 启甚分犻匏键盘暪屏 + 确定删陀 %s + 次芁垃局 + 功胜键倧屏幕 + 无效的名称 + 有词兞的语蚀 + 譊告垃局圓前正圚䜿甚䞭 + 讚论郚分 + 悚可以圚 %s 䞭查扟和分享垃局。 + 悚可以圚 %s 䞭查扟和分享颜色。 + 自定义子类型 + %s (Baishakhi) + 蟓入 URL 和电子邮件地址时甚顶级域替换句点键匹出 + 星瀺顶级域匹出键 + 圚数字键盘蟓入内容后按回蜊键或空栌键 + 数字行基本 + Web 猖蟑字段䞻芁存圚于浏览噚䞭是富臎“始终星瀺建议”讟眮出现问题的䞀䞪非垞垞见的原因 + 䞍芁总是星瀺对 Web 猖蟑字段的建议 + 空栌 + 手势蟓入单词前自劚插入空栌 + 手势蟓入单词后自劚插入空栌 + 按䞋 Shift 键䞍自劚插入空栌 + 按 Shift 键移陀埅插入的自劚空栌 + 退栌键恢倍自劚曎正 + 选择建议后自劚插入空栌 + 时闎戳键的栌匏 + 玢托语 + 蟟巎尌语 + 根据字䜓倧小猩攟衚情笊号键倧小 + 倇仜已还原 + 查扟应甚名称 + 䜿甚已安装应甚的名称进行建议和曎正 + 䞭性 + 默讀衚情笊号肀色 + %1$s%2$s + diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index d60c70f39..0624097d5 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -5,8 +5,7 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - "查扟聯絡人姓名" - "拌字檢查皋匏䜿甚悚的聯絡人名單䞭的各項蚘錄" + "查扟聯絡人姓名" "按鍵時震動" "按鍵時播攟音效" "按鍵時顯瀺圈出匏芖窗" @@ -18,9 +17,8 @@ "啟甚分離匏鍵盀" "切換至其他茞入法" "語蚀切換鍵" - "%s 毫秒" + "%s 毫秒" "系統預蚭" - "建議聯絡人名皱" "䜿甚「聯絡人」的名皱提䟛建議與修正" "個人化建議" "連按兩䞋空癜鍵插入句號" @@ -28,7 +26,6 @@ "自動倧寫" "每句銖個字詞倧寫" "個人字兞" - "附加字兞" "䞻芁字兞" "顯瀺曎正建議" "茞入時顯瀺建議字詞" @@ -53,20 +50,9 @@ "西班牙文 (矎國)" "印床英文" "塞爟維亞文 (拉䞁文)" - "英文 (英國) (%s)" - "英文 (矎國) (%s)" - "西班牙文 (矎國) (%s)" - "印床英文 (%s)" - "塞爟維亞文 (%s)" - "%s (傳統)" - "%s (粟簡版)" - "無語蚀 (字母)" - "字母 (QWERTY)" - "字母 (QWERTZ)" - "字母 (AZERTY)" - "字母 (Dvorak)" - "字母 (Colemak)" - "字母 (PC)" + "%s (傳統)" + "%s (粟簡版)" + "無語蚀" "Emoji" "新增" "移陀" @@ -79,46 +65,38 @@ "寊體鍵盀䞊䜿甚衚情圖案" "以寊體 Alt 鍵顯瀺衚情圖案遞項" "預蚭" - "歡迎䜿甚「%s」" + "歡迎䜿甚「%s」" "配備手勢茞入功胜" "開始" - "䞋䞀步" - "蚭定「%s」" - "啟甚「%s」" - "請圚「語蚀和茞入」蚭定䞭募遞「%s」。這將允蚱裝眮執行歀應甚皋匏。" - "悚已圚「語蚀和茞入」蚭定䞭啟甚「%s」。因歀這個步驟已完成請繌續執行䞋䞀個步驟" + "蚭定「%s」" + "啟甚「%s」" + "請圚「語蚀和茞入」蚭定䞭募遞「%s」。這將允蚱裝眮執行歀應甚皋匏。" "圚蚭定䞭啟甚" - "切換至「%s」" - "接著請遞取「%s」䜜為目前䜿甚的文字茞入方法。" + "切換至「%s」" + "接著請遞取「%s」䜜為目前䜿甚的文字茞入方法。" "切換茞入方法" "恭喜䞀切就緒" - "珟圚悚可以圚所有最愛的應甚皋匏䞭䜿甚「%s」茞入文字。" + "珟圚悚可以圚所有最愛的應甚皋匏䞭䜿甚「%s」茞入文字。" "完成" "顯瀺應甚皋匏圖瀺" "圚啟動噚䞭顯瀺圖瀺" - "附加字兞" - "字兞蚭定" + "附加字兞" "可䜿甚字兞" - "連線至字兞服務時癌生問題" - "沒有可甚的字兞" "䞊次曎新日期" - "䞻芁字兞" "蚭定" "刪陀" - "版本 %1$s" - "新增" + "版本 %1$s" "加入字兞" "快速鍵" "語蚀" "茞入字詞" "自遞快速鍵" "線茯字詞" - "悚的甚戶字兞䞭沒有任䜕字詞。劂芁新增字詞請茕按 [新增] (+) 按鈕。" "所有語蚀" "曎倚語蚀 " " ABCDEFGHIJKLMNOPQRSTUVWXYZ" 寊驗功胜 - %s分鐘 + %s分鐘 拌字檢查 拌字檢查蚭定 Emoji diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index b379bde65..fbf818d83 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -1,12 +1,10 @@ - + - - "查詢聯絡人姓名" - "拌字檢查皋匏䜿甚䜠的聯絡人枅單項目" +--> + "查詢聯絡人姓名" "按鍵時震動" "按鍵聲音" "按鍵時顯瀺倧型字體" @@ -18,9 +16,8 @@ "啟甚分離匏鍵盀" "切換到其他茞入法" "語蚀切換鍵" - "%s 毫秒" + "%s 毫秒" "系統預蚭" - "聯絡人姓名建議" "根據「聯絡人」名皱提䟛建議與修正" "個人化建議" "茕觞兩䞋空栌鍵即插入句號" @@ -28,7 +25,6 @@ "自動倧寫" "句銖字詞倧寫" "個人字兞" - "倖掛字兞" "䞻芁字兞" "顯瀺修正建議" "茞入時顯瀺建議字詞" @@ -53,20 +49,9 @@ "西班牙文 (矎國)" "印床英文" "塞爟維亞文 (拉䞁文)" - "英文 (英國) (%s)" - "英文 (矎國) (%s)" - "西班牙文 (矎國) (%s)" - "印床英文 (%s)" - "塞爟維亞文 (%s)" - "%s (傳統)" - "%s (粟簡)" - "無語蚀 (字母)" - "字母 (QWERTY)" - "字母 (QWERTZ)" - "字母 (AZERTY)" - "字母 (Dvorak)" - "字母 (Colemak)" - "字母 (PC)" + "%s (傳統)" + "%s (粟簡)" + "無語蚀" "衚情笊號" "新增" "移陀" @@ -79,41 +64,33 @@ "透過寊體鍵盀啟甚衚情笊號" "按䞋寊體 Alt 鍵即顯瀺衚情笊號面板" "預蚭" - "歡迎䜿甚 %s" + "歡迎䜿甚 %s" "含滑行茞入功胜" "開始蚭定" - "䞋䞀步" - "正圚蚭定「%s」" - "啟甚「%s」" - "請圚 [語蚀與茞入蚭定] 䞭募遞 [%s]授權該應甚皋匏圚䜠的裝眮䞊執行。" - "䜠已圚 [語蚀與茞入蚭定] 䞭啟甚 %s因歀這個步驟已經完成。請進行䞋䞀個步驟" + "正圚蚭定「%s」" + "啟甚「%s」" + "請圚 [語蚀與茞入蚭定] 䞭募遞 [%s]授權該應甚皋匏圚䜠的裝眮䞊執行。" "圚蚭定䞭啟甚" - "切換至「%s」" - "接著請遞取「%s」做為目前䜿甚的文字茞入法。" + "切換至「%s」" + "接著請遞取「%s」做為目前䜿甚的文字茞入法。" "切換茞入法" "恭喜䜠已完成蚭定" - "珟圚䜠可以圚自己喜愛的所有應甚皋匏䞭䜿甚「%s」茞入文字。" + 珟圚悚可以圚所有悚喜歡的應甚皋匏䞭䜿甚 %s 茞入。 "完成" "顯瀺應甚皋匏圖瀺" "圚啟動噚䞭顯瀺應甚皋匏圖瀺" - "倖掛字兞" - "字兞蚭定" + "倖掛字兞" "可甚的字兞" - "連線至字兞服務時癌生問題" - "沒有可甚的字兞" "䞊次曎新時間" - "䞻芁字兞" "蚭定" "刪陀" - "版本 %1$s" - "新增" + "版本 %1$s" "加入字兞" "快速鍵" "語蚀" "茞入字詞" "可遞甚的快速鍵" "線茯字詞" - "䜿甚者字兞䞭沒有任䜕字詞。劂芁新增字詞請茕觞「新增」(+) 按鈕。" "所有語蚀" "曎倚語蚀 " " ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -130,4 +107,58 @@ "搜尋" "暫停" "等埅" + 暣匏 + å­—å…ž + 玫矅蘭 + 倖觀 + HeliBoard 蚭定 + 建議 + 寊驗功胜 + 雜項 + 還原 + 笊號 + 敞字鍵盀 + 茉入 + 備仜 + 版面 + 笊號 + Shift + 茞入 + 曎正 + 侊 + 衚情笊號 + 顏色 + 電話 + 無 + 敞字 + 日 + 倜 + 版本 + 淺色 + 深色 + 曎深色 + 巧克力色 + 森林 + 海掋 + 粉玅色 + 䜿甚者定矩 + 棕色 + 倚雲 + 黑色 + 關閉 + 圓角 + 靛藍色 + Enter + Tab + 沙 + 語蚀 + å·Š + 右 + 例 + 剪貌簿 + 權重 + 歀處 + 關斌 + 工具列 + Delete diff --git a/app/src/main/res/values-zu/strings.xml b/app/src/main/res/values-zu/strings.xml index 342cbc267..61d3a2739 100644 --- a/app/src/main/res/values-zu/strings.xml +++ b/app/src/main/res/values-zu/strings.xml @@ -5,8 +5,7 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - "Bheka amagama woxhumana nabo" - "Isihloli sokupela sisebenzisa okungenayo kusuka kuhlu lalabo oxhumana nabo" + "Bheka amagama woxhumana nabo" "Dlidlizelisa ngokucindezela inkinobho" "Umsindo wokucindezela ukhiye" "Ugaxekile ngokucindezela ukhiye" @@ -18,9 +17,8 @@ "Nika amandla ikhibhodi yokuhlukanisa" "Shintshela kwezinye izindlela zokungena" "Ukhiye wokushintsha ullimi" - "%sms" + "%sms" "Okuzenzakalelayo kwesistimu" - "Sikisela amagama Othintana nabo" "Amagama abasebenzisi kusuka Kothintana nabo bokusikisela nokulungisa" "Iziphakamiso ezenziwe okomuntu siqu" "Isikhathi se-Double-space" @@ -28,7 +26,6 @@ "Ukwenza ofeleba okuzenzakalelayo" "Yenza ufeleba wegama lokuqala lomusho ngamunye" "Isichazamazwi somuntu" - "Faka izichazamazwi" "Isichazamazwi sakho ngqangi" "Bonisa ukusikesela kokulungisa" "Bonisa amagama aphakamisiwe ngenkathi uthayipha" @@ -53,20 +50,9 @@ "I-Spanish (US)" "I-Hinglish" "Isi-Serbian (Latin)" - "I-English (UK) ( %s )" - "I-English (US) ( %s )" - "Isi-Spanish (US) ( %s )" - "I-Hinglish (%s)" - "Isi-Serbian (%s)" - "Isi-%s (Tradition)" - "%s (Okuqoqene ndawonye)" - "Alikho ulimi (Alfabhethi)" - "Alfabhethi (QWERTY)" - "Alfabhethi (QWERTZ)" - "Alfabhethi (I-AZERTY)" - "Alfabhethi (Dvorak)" - "Alfabhethi (Colemak)" - "Alfabhethi (PC)" + "Isi-%s (Tradition)" + "%s (Okuqoqene ndawonye)" + "Alikho ulimi" "I-Emoji" "Engeza" "Khipha" @@ -79,41 +65,33 @@ "I-Emoji wekhibhodi yangempela" "Ukhiye we-Alt woqobo ubonisa i-emoji palette" "Okuzenzakalelayo" - "Siyakwamukela ku-%s" + "Siyakwamukela ku-%s" "nokuthayipha ngokuthinta" "Qalisa" - "Isinyathelo esilandelayo" - "Kusethwa i-%s" - "Nika amandla i-%s" - "Sicela uhlole i-\"%s\" kulimi lwakho nezilungiselelo zokokufaka. Lokhu kuzoyigunyaza ukuthi isebenze kudivayisi yakho." - "I-%s isivele inikwe amandla kulimi lwakho nakuzilungiselelo zokufaka, ngakho-ke lesi sinyathelo senziwe. Qhubekela kwesilandelayo!" + "Kusethwa i-%s" + "Nika amandla i-%s" + "Sicela uhlole i-\"%s\" kulimi lwakho nezilungiselelo zokokufaka. Lokhu kuzoyigunyaza ukuthi isebenze kudivayisi yakho." "Nika amandla kuzilungiselelo" - "Shintshela ku-%s." - "Okulandelayo, khetha i-\"%s\" njengendlela yakho yokufaka umbhalo osebenzayo." + "Shintshela ku-%s." + "Okulandelayo, khetha i-\"%s\" njengendlela yakho yokufaka umbhalo osebenzayo." "Shintsha izindlela zokufaka" "Siyakuhalalisela, usumi ngomumo!" - "Manje usungathayipha ngokufaka zonke izinhlelo zokusebenza eziyizintandokazi zakho nge-%s." + "Manje usungathayipha ngokufaka zonke izinhlelo zokusebenza eziyizintandokazi zakho nge-%s." "Iqedile" "Bonisa isithonjana sohlelo lokusebenza" "Bonisa isithonjana sohlelo lokusebenza kusiqalisi" - "Izichazamazwi ezingezwayo" - "Izilungiselelo zezichazamazwi" + "Izichazamazwi ezingezwayo" "Isichazamazwi siyatholakala" - "Inkinga yokuxhumanisa kusevisi yesichazamazwi" - "Azikho izachazimazwi ezitholakalayo" "Igcine ukulungiswa" - "Isichazamazwi sakho esisemqoka" "Izilungiselelo" "Susa" - "Inguqulo engu-%1$s" - "Engeza" + "Inguqulo engu-%1$s" "Faka kusichazamazwi" "Isinqamulelo:" "Ulimi:" "Thayipha igama" "Ukunqamulela okukhethekayo" "Hlela igama" - "Awunawo amagama kwisichazamazwi somsebenzisi. Ukuze ungeze igama, thepha inkinobho (+)." "Okwazo zonke izilimi" "Izilimi eziningi
" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 9fe7967b4..ce545a89a 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -156,10 +156,6 @@ - - - - @@ -223,63 +219,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -308,39 +247,39 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + diff --git a/app/src/main/res/values/config-auto-correction-thresholds.xml b/app/src/main/res/values/config-auto-correction-thresholds.xml deleted file mode 100644 index c9929a535..000000000 --- a/app/src/main/res/values/config-auto-correction-thresholds.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - 0.185 - - 0.067 - - floatNegativeInfinity - - - - 0 - 1 - 2 - - - - @string/auto_correction_threshold_mode_index_modest - @string/auto_correction_threshold_mode_index_aggressive - @string/auto_correction_threshold_mode_index_very_aggressive - - - - @string/auto_correction_threshold_mode_modest - @string/auto_correction_threshold_mode_aggressive - @string/auto_correction_threshold_mode_very_aggressive - - diff --git a/app/src/main/res/values/config-common.xml b/app/src/main/res/values/config-common.xml index aea0abfd9..33ad67c43 100644 --- a/app/src/main/res/values/config-common.xml +++ b/app/src/main/res/values/config-common.xml @@ -6,15 +6,6 @@ --> - - false - true - - true - - - 10 100 1100 @@ -27,13 +18,6 @@ 100 - false - 100 - - 300 - 700 - 100 - 10 3000 5 @@ -49,9 +33,6 @@ 3dp 100 - 800 - 1900 - 50 20 500 @@ -79,8 +60,8 @@ 40 - 0%p - 0%p + 8%p + 8%p 0.0dp @@ -97,9 +78,6 @@ 32.0dp 18% - - true - 9.6dp diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index aad83ab52..a1090ecc3 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -4,32 +4,24 @@ modified SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - - - - en-US - en-GB - es-US - hi-Latn - mns - xdq - sr-Latn - + hi-Latn mns + dru xdq sr-Latn - Hinglish - Ма̄МьсО - ХайЎаҡьаМ - Srpski + + + Hinglish + Ма̄МьсО + ХӀурухъла лугъат + ХайЎаҡьаМ + Srpski + %s @@ -60,19 +52,6 @@ Bépo PC - - %s (QWERTY) - %s (QWERTZ) - %s (AZERTY) - %s (Dvorak) - %s (Colemak) - %s (Colemak Mod-DH) - %s (Workman) - %s (Bépo) - %s (PC) %s (BDS) @@ -83,55 +62,14 @@ %s (PC) + + %s (Hija\'i) + + + %s (1452-2) + + HeliBoard 100% FOSS keyboard, based on AOSP. - - false - - internal - input_method - both - - - @string/switch_language - @string/language_switch_key_switch_input_method - @string/language_switch_key_switch_both - - - normal - main - more - all - - - @string/show_popup_keys_normal - @string/show_popup_keys_main - @string/show_popup_keys_more - @string/show_popup_keys_all - - - move_cursor - switch_language - toggle_numpad - none - - - @string/space_swipe_move_cursor_entry - @string/switch_language - @string/space_swipe_toggle_numpad_entry - @string/action_none - - - move_cursor - switch_language - toggle_numpad - none - - - @string/space_swipe_move_cursor_entry - @string/switch_language - @string/space_swipe_toggle_numpad_entry - @string/action_none - diff --git a/app/src/main/res/values/emoji-categories.xml b/app/src/main/res/values/emoji-categories.xml deleted file mode 100644 index e11d71ae1..000000000 --- a/app/src/main/res/values/emoji-categories.xml +++ /dev/null @@ -1,2365 +0,0 @@ - - - - - - - - 1F600 - 1F603 - 1F604 - 1F601 - 1F606 - 1F605 - 1F923||24 - 1F602 - 1F642||23 - 1F643||23 - 1FAE0||32 - 1F609 - 1F60A - 1F607 - 1F970||28 - 1F60D - 1F929||26 - 1F618 - 1F617 - 263A,FE0F - 1F61A - 1F619 - 1F972||30 - 1F60B - 1F61B - 1F61C - 1F92A||26 - 1F61D - 1F911||23 - 1F917||23 - 1F92D||26 - 1FAE2||32 - 1FAE3||32 - 1F92B||26 - 1F914||23 - 1FAE1||32 - 1F910||23 - 1F928||26 - 1F610 - 1F611 - 1F636 - 1FAE5||32 - 1F636,200D,1F32B,FE0F||31 - 1F60F - 1F612 - 1F644||23 - 1F62C - 1F62E,200D,1F4A8||31 - 1F925||24 - 1FAE8||33 - 1F60C - 1F614 - 1F62A - 1F924||24 - 1F634 - 1F637 - 1F912||23 - 1F915||23 - 1F922||24 - 1F92E||26 - 1F927||24 - 1F975||28 - 1F976||28 - 1F974||28 - 1F635 - 1F635,200D,1F4AB||31 - 1F92F||26 - 1F920||24 - 1F973||28 - 1F978||30 - 1F60E - 1F913||23 - 1F9D0||26 - 1F615 - 1FAE4||32 - 1F61F - 1F641||23 - 2639,FE0F||23 - 1F62E - 1F62F - 1F632 - 1F633 - 1F97A||28 - 1F979||32 - 1F626 - 1F627 - 1F628 - 1F630 - 1F625 - 1F622 - 1F62D - 1F631 - 1F616 - 1F623 - 1F61E - 1F613 - 1F629 - 1F62B - 1F971||29 - 1F624 - 1F621 - 1F620 - 1F92C||26 - 1F608 - 1F47F - 1F480 - 2620,FE0F||23 - 1F4A9 - 1F921||24 - 1F479 - 1F47A - 1F47B - 1F47D - 1F47E - 1F916||23 - 1F63A - 1F638 - 1F639 - 1F63B - 1F63C - 1F63D - 1F640 - 1F63F - 1F63E - 1F648 - 1F649 - 1F64A - 1F48C - 1F498 - 1F49D - 1F496 - 1F497 - 1F493 - 1F49E - 1F495 - 1F49F - 2763,FE0F||23 - 1F494 - 2764,FE0F,200D,1F525||31 - 2764,FE0F,200D,1FA79||31 - 2764,FE0F - 1FA77||33 - 1F9E1||26 - 1F49B - 1F49A - 1F499 - 1FA75||33 - 1F49C - 1F90E||29 - 1F5A4||24 - 1FA76||33 - 1F90D||29 - 1F48B - 1F4AF - 1F4A2 - 1F4A5 - 1F4AB - 1F4A6 - 1F4A8 - 1F573,FE0F||23 - 1F4AC - 1F441,FE0F,200D,1F5E8,FE0F||23 - 1F5E8,FE0F||23 - 1F5EF,FE0F||23 - 1F4AD - 1F4A4 - - - - 1F44B - 1F91A||24 - 1F590,FE0F||23 - 270B - 1F596||23 - 1FAF1||32 - 1FAF2||32 - 1FAF3||32 - 1FAF4||32 - 1FAF7||33 - 1FAF8||33 - 1F44C - 1F90C||30 - 1F90F||29 - 270C,FE0F - 1F91E||24 - 1FAF0||32 - 1F91F||26 - 1F918||23 - 1F919||24 - 1F448 - 1F449 - 1F446 - 1F595||23 - 1F447 - 261D,FE0F - 1FAF5||32 - 1F44D - 1F44E - 270A - 1F44A - 1F91B||24 - 1F91C||24 - 1F44F - 1F64C - 1FAF6||32 - 1F450 - 1F932||26 - 1F91D||24 - 1F64F - 270D,FE0F||23 - 1F485 - 1F933||24 - 1F4AA - 1F9BE||29 - 1F9BF||29 - 1F9B5||28 - 1F9B6||28 - 1F442 - 1F9BB||29 - 1F443 - 1F9E0||26 - 1FAC0||30 - 1FAC1||30 - 1F9B7||28 - 1F9B4||28 - 1F440 - 1F441,FE0F||23 - 1F445 - 1F444 - 1FAE6||32 - 1F476 - 1F9D2||26 - 1F466 - 1F467 - 1F9D1||26 - 1F471 - 1F468 - 1F9D4||26 - 1F9D4,200D,2642,FE0F||31 - 1F9D4,200D,2640,FE0F||31 - 1F468,200D,1F9B0||28 - 1F468,200D,1F9B1||28 - 1F468,200D,1F9B3||28 - 1F468,200D,1F9B2||28 - 1F469 - 1F469,200D,1F9B0||28 - 1F9D1,200D,1F9B0||30 - 1F469,200D,1F9B1||28 - 1F9D1,200D,1F9B1||30 - 1F469,200D,1F9B3||28 - 1F9D1,200D,1F9B3||30 - 1F469,200D,1F9B2||28 - 1F9D1,200D,1F9B2||30 - 1F471,200D,2640,FE0F||25 - 1F471,200D,2642,FE0F||25 - 1F9D3||26 - 1F474 - 1F475 - 1F64D - 1F64D,200D,2642,FE0F||25 - 1F64D,200D,2640,FE0F||25 - 1F64E - 1F64E,200D,2642,FE0F||25 - 1F64E,200D,2640,FE0F||25 - 1F645 - 1F645,200D,2642,FE0F||25 - 1F645,200D,2640,FE0F||25 - 1F646 - 1F646,200D,2642,FE0F||25 - 1F646,200D,2640,FE0F||25 - 1F481 - 1F481,200D,2642,FE0F||25 - 1F481,200D,2640,FE0F||25 - 1F64B - 1F64B,200D,2642,FE0F||25 - 1F64B,200D,2640,FE0F||25 - 1F9CF||29 - 1F9CF,200D,2642,FE0F||29 - 1F9CF,200D,2640,FE0F||29 - 1F647 - 1F647,200D,2642,FE0F||25 - 1F647,200D,2640,FE0F||25 - 1F926||24 - 1F926,200D,2642,FE0F||25 - 1F926,200D,2640,FE0F||25 - 1F937||24 - 1F937,200D,2642,FE0F||25 - 1F937,200D,2640,FE0F||25 - 1F9D1,200D,2695,FE0F||30 - 1F468,200D,2695,FE0F||25 - 1F469,200D,2695,FE0F||25 - 1F9D1,200D,1F393||30 - 1F468,200D,1F393||25 - 1F469,200D,1F393||25 - 1F9D1,200D,1F3EB||30 - 1F468,200D,1F3EB||25 - 1F469,200D,1F3EB||25 - 1F9D1,200D,2696,FE0F||30 - 1F468,200D,2696,FE0F||25 - 1F469,200D,2696,FE0F||25 - 1F9D1,200D,1F33E||30 - 1F468,200D,1F33E||25 - 1F469,200D,1F33E||25 - 1F9D1,200D,1F373||30 - 1F468,200D,1F373||25 - 1F469,200D,1F373||25 - 1F9D1,200D,1F527||30 - 1F468,200D,1F527||25 - 1F469,200D,1F527||25 - 1F9D1,200D,1F3ED||30 - 1F468,200D,1F3ED||25 - 1F469,200D,1F3ED||25 - 1F9D1,200D,1F4BC||30 - 1F468,200D,1F4BC||25 - 1F469,200D,1F4BC||25 - 1F9D1,200D,1F52C||30 - 1F468,200D,1F52C||25 - 1F469,200D,1F52C||25 - 1F9D1,200D,1F4BB||30 - 1F468,200D,1F4BB||25 - 1F469,200D,1F4BB||25 - 1F9D1,200D,1F3A4||30 - 1F468,200D,1F3A4||25 - 1F469,200D,1F3A4||25 - 1F9D1,200D,1F3A8||30 - 1F468,200D,1F3A8||25 - 1F469,200D,1F3A8||25 - 1F9D1,200D,2708,FE0F||30 - 1F468,200D,2708,FE0F||25 - 1F469,200D,2708,FE0F||25 - 1F9D1,200D,1F680||30 - 1F468,200D,1F680||25 - 1F469,200D,1F680||25 - 1F9D1,200D,1F692||30 - 1F468,200D,1F692||25 - 1F469,200D,1F692||25 - 1F46E - 1F46E,200D,2642,FE0F||25 - 1F46E,200D,2640,FE0F||25 - 1F575,FE0F||23 - 1F575,FE0F,200D,2642,FE0F||25 - 1F575,FE0F,200D,2640,FE0F||25 - 1F482 - 1F482,200D,2642,FE0F||25 - 1F482,200D,2640,FE0F||25 - 1F977||30 - 1F477 - 1F477,200D,2642,FE0F||25 - 1F477,200D,2640,FE0F||25 - 1FAC5||32 - 1F934||24 - 1F478 - 1F473 - 1F473,200D,2642,FE0F||25 - 1F473,200D,2640,FE0F||25 - 1F472 - 1F9D5||26 - 1F935||24 - 1F935,200D,2642,FE0F||30 - 1F935,200D,2640,FE0F||30 - 1F470 - 1F470,200D,2642,FE0F||30 - 1F470,200D,2640,FE0F||30 - 1F930||24 - 1FAC3||32 - 1FAC4||32 - 1F931||26 - 1F469,200D,1F37C||30 - 1F468,200D,1F37C||30 - 1F9D1,200D,1F37C||30 - 1F47C - 1F385 - 1F936||24 - 1F9D1,200D,1F384||30 - 1F9B8||28 - 1F9B8,200D,2642,FE0F||28 - 1F9B8,200D,2640,FE0F||28 - 1F9B9||28 - 1F9B9,200D,2642,FE0F||28 - 1F9B9,200D,2640,FE0F||28 - 1F9D9||26 - 1F9D9,200D,2642,FE0F||26 - 1F9D9,200D,2640,FE0F||26 - 1F9DA||26 - 1F9DA,200D,2642,FE0F||26 - 1F9DA,200D,2640,FE0F||26 - 1F9DB||26 - 1F9DB,200D,2642,FE0F||26 - 1F9DB,200D,2640,FE0F||26 - 1F9DC||26 - 1F9DC,200D,2642,FE0F||26 - 1F9DC,200D,2640,FE0F||26 - 1F9DD||26 - 1F9DD,200D,2642,FE0F||26 - 1F9DD,200D,2640,FE0F||26 - 1F9DE||26 - 1F9DE,200D,2642,FE0F||26 - 1F9DE,200D,2640,FE0F||26 - 1F9DF||26 - 1F9DF,200D,2642,FE0F||26 - 1F9DF,200D,2640,FE0F||26 - 1F9CC||32 - 1F486 - 1F486,200D,2642,FE0F||25 - 1F486,200D,2640,FE0F||25 - 1F487 - 1F487,200D,2642,FE0F||25 - 1F487,200D,2640,FE0F||25 - 1F6B6 - 1F6B6,200D,2642,FE0F||25 - 1F6B6,200D,2640,FE0F||25 - 1F9CD||29 - 1F9CD,200D,2642,FE0F||29 - 1F9CD,200D,2640,FE0F||29 - 1F9CE||29 - 1F9CE,200D,2642,FE0F||29 - 1F9CE,200D,2640,FE0F||29 - 1F9D1,200D,1F9AF||30 - 1F468,200D,1F9AF||29 - 1F469,200D,1F9AF||29 - 1F9D1,200D,1F9BC||30 - 1F468,200D,1F9BC||29 - 1F469,200D,1F9BC||29 - 1F9D1,200D,1F9BD||30 - 1F468,200D,1F9BD||29 - 1F469,200D,1F9BD||29 - 1F3C3 - 1F3C3,200D,2642,FE0F||25 - 1F3C3,200D,2640,FE0F||25 - 1F483 - 1F57A||24 - 1F574,FE0F||23 - 1F46F - 1F46F,200D,2642,FE0F||25 - 1F46F,200D,2640,FE0F||25 - 1F9D6||26 - 1F9D6,200D,2642,FE0F||26 - 1F9D6,200D,2640,FE0F||26 - 1F9D7||26 - 1F9D7,200D,2642,FE0F||26 - 1F9D7,200D,2640,FE0F||26 - 1F93A||24 - 1F3C7 - 26F7,FE0F||23 - 1F3C2 - 1F3CC,FE0F||23 - 1F3CC,FE0F,200D,2642,FE0F||25 - 1F3CC,FE0F,200D,2640,FE0F||25 - 1F3C4 - 1F3C4,200D,2642,FE0F||25 - 1F3C4,200D,2640,FE0F||25 - 1F6A3 - 1F6A3,200D,2642,FE0F||25 - 1F6A3,200D,2640,FE0F||25 - 1F3CA - 1F3CA,200D,2642,FE0F||25 - 1F3CA,200D,2640,FE0F||25 - 26F9,FE0F||23 - 26F9,FE0F,200D,2642,FE0F||25 - 26F9,FE0F,200D,2640,FE0F||25 - 1F3CB,FE0F||23 - 1F3CB,FE0F,200D,2642,FE0F||25 - 1F3CB,FE0F,200D,2640,FE0F||25 - 1F6B4 - 1F6B4,200D,2642,FE0F||25 - 1F6B4,200D,2640,FE0F||25 - 1F6B5 - 1F6B5,200D,2642,FE0F||25 - 1F6B5,200D,2640,FE0F||25 - 1F938||24 - 1F938,200D,2642,FE0F||25 - 1F938,200D,2640,FE0F||25 - 1F93C||24 - 1F93C,200D,2642,FE0F||25 - 1F93C,200D,2640,FE0F||25 - 1F93D||24 - 1F93D,200D,2642,FE0F||25 - 1F93D,200D,2640,FE0F||25 - 1F93E||24 - 1F93E,200D,2642,FE0F||25 - 1F93E,200D,2640,FE0F||25 - 1F939||24 - 1F939,200D,2642,FE0F||25 - 1F939,200D,2640,FE0F||25 - 1F9D8||26 - 1F9D8,200D,2642,FE0F||26 - 1F9D8,200D,2640,FE0F||26 - 1F6C0 - 1F6CC||23 - 1F9D1,200D,1F91D,200D,1F9D1||29 - 1F46D - 1F46B - 1F46C - 1F48F - 1F469,200D,2764,FE0F,200D,1F48B,200D,1F468||26 - 1F468,200D,2764,FE0F,200D,1F48B,200D,1F468||23 - 1F469,200D,2764,FE0F,200D,1F48B,200D,1F469||23 - 1F491 - 1F469,200D,2764,FE0F,200D,1F468||26 - 1F468,200D,2764,FE0F,200D,1F468||23 - 1F469,200D,2764,FE0F,200D,1F469||23 - 1F46A - 1F468,200D,1F469,200D,1F466||25 - 1F468,200D,1F469,200D,1F467||23 - 1F468,200D,1F469,200D,1F467,200D,1F466||23 - 1F468,200D,1F469,200D,1F466,200D,1F466||23 - 1F468,200D,1F469,200D,1F467,200D,1F467||23 - 1F468,200D,1F468,200D,1F466||23 - 1F468,200D,1F468,200D,1F467||23 - 1F468,200D,1F468,200D,1F467,200D,1F466||23 - 1F468,200D,1F468,200D,1F466,200D,1F466||23 - 1F468,200D,1F468,200D,1F467,200D,1F467||23 - 1F469,200D,1F469,200D,1F466||23 - 1F469,200D,1F469,200D,1F467||23 - 1F469,200D,1F469,200D,1F467,200D,1F466||23 - 1F469,200D,1F469,200D,1F466,200D,1F466||23 - 1F469,200D,1F469,200D,1F467,200D,1F467||23 - 1F468,200D,1F466||25 - 1F468,200D,1F466,200D,1F466||25 - 1F468,200D,1F467||25 - 1F468,200D,1F467,200D,1F466||25 - 1F468,200D,1F467,200D,1F467||25 - 1F469,200D,1F466||25 - 1F469,200D,1F466,200D,1F466||25 - 1F469,200D,1F467||25 - 1F469,200D,1F467,200D,1F466||25 - 1F469,200D,1F467,200D,1F467||25 - 1F5E3,FE0F||23 - 1F464 - 1F465 - 1FAC2||30 - 1F463 - - - - 1F44B,1F3FB||24;1F44B,1F3FC||24;1F44B,1F3FD||24;1F44B,1F3FE||24;1F44B,1F3FF||24 - 1F91A,1F3FB||24;1F91A,1F3FC||24;1F91A,1F3FD||24;1F91A,1F3FE||24;1F91A,1F3FF||24 - 1F590,1F3FB||24;1F590,1F3FC||24;1F590,1F3FD||24;1F590,1F3FE||24;1F590,1F3FF||24 - 270B,1F3FB||24;270B,1F3FC||24;270B,1F3FD||24;270B,1F3FE||24;270B,1F3FF||24 - 1F596,1F3FB||24;1F596,1F3FC||24;1F596,1F3FD||24;1F596,1F3FE||24;1F596,1F3FF||24 - 1FAF1,1F3FB||32;1FAF1,1F3FC||32;1FAF1,1F3FD||32;1FAF1,1F3FE||32;1FAF1,1F3FF||32 - 1FAF2,1F3FB||32;1FAF2,1F3FC||32;1FAF2,1F3FD||32;1FAF2,1F3FE||32;1FAF2,1F3FF||32 - 1FAF3,1F3FB||32;1FAF3,1F3FC||32;1FAF3,1F3FD||32;1FAF3,1F3FE||32;1FAF3,1F3FF||32 - 1FAF4,1F3FB||32;1FAF4,1F3FC||32;1FAF4,1F3FD||32;1FAF4,1F3FE||32;1FAF4,1F3FF||32 - 1FAF7,1F3FB||33;1FAF7,1F3FC||33;1FAF7,1F3FD||33;1FAF7,1F3FE||33;1FAF7,1F3FF||33 - 1FAF8,1F3FB||33;1FAF8,1F3FC||33;1FAF8,1F3FD||33;1FAF8,1F3FE||33;1FAF8,1F3FF||33 - 1F44C,1F3FB||24;1F44C,1F3FC||24;1F44C,1F3FD||24;1F44C,1F3FE||24;1F44C,1F3FF||24 - 1F90C,1F3FB||30;1F90C,1F3FC||30;1F90C,1F3FD||30;1F90C,1F3FE||30;1F90C,1F3FF||30 - 1F90F,1F3FB||29;1F90F,1F3FC||29;1F90F,1F3FD||29;1F90F,1F3FE||29;1F90F,1F3FF||29 - 270C,1F3FB||24;270C,1F3FC||24;270C,1F3FD||24;270C,1F3FE||24;270C,1F3FF||24 - 1F91E,1F3FB||24;1F91E,1F3FC||24;1F91E,1F3FD||24;1F91E,1F3FE||24;1F91E,1F3FF||24 - 1FAF0,1F3FB||32;1FAF0,1F3FC||32;1FAF0,1F3FD||32;1FAF0,1F3FE||32;1FAF0,1F3FF||32 - 1F91F,1F3FB||26;1F91F,1F3FC||26;1F91F,1F3FD||26;1F91F,1F3FE||26;1F91F,1F3FF||26 - 1F918,1F3FB||24;1F918,1F3FC||24;1F918,1F3FD||24;1F918,1F3FE||24;1F918,1F3FF||24 - 1F919,1F3FB||24;1F919,1F3FC||24;1F919,1F3FD||24;1F919,1F3FE||24;1F919,1F3FF||24 - 1F448,1F3FB||24;1F448,1F3FC||24;1F448,1F3FD||24;1F448,1F3FE||24;1F448,1F3FF||24 - 1F449,1F3FB||24;1F449,1F3FC||24;1F449,1F3FD||24;1F449,1F3FE||24;1F449,1F3FF||24 - 1F446,1F3FB||24;1F446,1F3FC||24;1F446,1F3FD||24;1F446,1F3FE||24;1F446,1F3FF||24 - 1F595,1F3FB||24;1F595,1F3FC||24;1F595,1F3FD||24;1F595,1F3FE||24;1F595,1F3FF||24 - 1F447,1F3FB||24;1F447,1F3FC||24;1F447,1F3FD||24;1F447,1F3FE||24;1F447,1F3FF||24 - 261D,1F3FB||24;261D,1F3FC||24;261D,1F3FD||24;261D,1F3FE||24;261D,1F3FF||24 - 1FAF5,1F3FB||32;1FAF5,1F3FC||32;1FAF5,1F3FD||32;1FAF5,1F3FE||32;1FAF5,1F3FF||32 - 1F44D,1F3FB||24;1F44D,1F3FC||24;1F44D,1F3FD||24;1F44D,1F3FE||24;1F44D,1F3FF||24 - 1F44E,1F3FB||24;1F44E,1F3FC||24;1F44E,1F3FD||24;1F44E,1F3FE||24;1F44E,1F3FF||24 - 270A,1F3FB||24;270A,1F3FC||24;270A,1F3FD||24;270A,1F3FE||24;270A,1F3FF||24 - 1F44A,1F3FB||24;1F44A,1F3FC||24;1F44A,1F3FD||24;1F44A,1F3FE||24;1F44A,1F3FF||24 - 1F91B,1F3FB||24;1F91B,1F3FC||24;1F91B,1F3FD||24;1F91B,1F3FE||24;1F91B,1F3FF||24 - 1F91C,1F3FB||24;1F91C,1F3FC||24;1F91C,1F3FD||24;1F91C,1F3FE||24;1F91C,1F3FF||24 - 1F44F,1F3FB||24;1F44F,1F3FC||24;1F44F,1F3FD||24;1F44F,1F3FE||24;1F44F,1F3FF||24 - 1F64C,1F3FB||24;1F64C,1F3FC||24;1F64C,1F3FD||24;1F64C,1F3FE||24;1F64C,1F3FF||24 - 1FAF6,1F3FB||32;1FAF6,1F3FC||32;1FAF6,1F3FD||32;1FAF6,1F3FE||32;1FAF6,1F3FF||32 - 1F450,1F3FB||24;1F450,1F3FC||24;1F450,1F3FD||24;1F450,1F3FE||24;1F450,1F3FF||24 - 1F932,1F3FB||26;1F932,1F3FC||26;1F932,1F3FD||26;1F932,1F3FE||26;1F932,1F3FF||26 - 1F91D,1F3FB||25;1F91D,1F3FC||25;1F91D,1F3FD||25;1F91D,1F3FE||25;1F91D,1F3FF||25 - 1F64F,1F3FB||24;1F64F,1F3FC||24;1F64F,1F3FD||24;1F64F,1F3FE||24;1F64F,1F3FF||24 - 270D,1F3FB||24;270D,1F3FC||24;270D,1F3FD||24;270D,1F3FE||24;270D,1F3FF||24 - 1F485,1F3FB||24;1F485,1F3FC||24;1F485,1F3FD||24;1F485,1F3FE||24;1F485,1F3FF||24 - 1F933,1F3FB||24;1F933,1F3FC||24;1F933,1F3FD||24;1F933,1F3FE||24;1F933,1F3FF||24 - 1F4AA,1F3FB||24;1F4AA,1F3FC||24;1F4AA,1F3FD||24;1F4AA,1F3FE||24;1F4AA,1F3FF||24 - - - 1F9B5,1F3FB||28;1F9B5,1F3FC||28;1F9B5,1F3FD||28;1F9B5,1F3FE||28;1F9B5,1F3FF||28 - 1F9B6,1F3FB||28;1F9B6,1F3FC||28;1F9B6,1F3FD||28;1F9B6,1F3FE||28;1F9B6,1F3FF||28 - 1F442,1F3FB||24;1F442,1F3FC||24;1F442,1F3FD||24;1F442,1F3FE||24;1F442,1F3FF||24 - 1F9BB,1F3FB||29;1F9BB,1F3FC||29;1F9BB,1F3FD||29;1F9BB,1F3FE||29;1F9BB,1F3FF||29 - 1F443,1F3FB||24;1F443,1F3FC||24;1F443,1F3FD||24;1F443,1F3FE||24;1F443,1F3FF||24 - - - - - - - - - - - 1F476,1F3FB||24;1F476,1F3FC||24;1F476,1F3FD||24;1F476,1F3FE||24;1F476,1F3FF||24 - 1F9D2,1F3FB||26;1F9D2,1F3FC||26;1F9D2,1F3FD||26;1F9D2,1F3FE||26;1F9D2,1F3FF||26 - 1F466,1F3FB||24;1F466,1F3FC||24;1F466,1F3FD||24;1F466,1F3FE||24;1F466,1F3FF||24 - 1F467,1F3FB||24;1F467,1F3FC||24;1F467,1F3FD||24;1F467,1F3FE||24;1F467,1F3FF||24 - 1F9D1,1F3FB||26;1F9D1,1F3FC||26;1F9D1,1F3FD||26;1F9D1,1F3FE||26;1F9D1,1F3FF||26 - 1F471,1F3FB||24;1F471,1F3FC||24;1F471,1F3FD||24;1F471,1F3FE||24;1F471,1F3FF||24 - 1F468,1F3FB||24;1F468,1F3FC||24;1F468,1F3FD||24;1F468,1F3FE||24;1F468,1F3FF||24 - 1F9D4,1F3FB||26;1F9D4,1F3FC||26;1F9D4,1F3FD||26;1F9D4,1F3FE||26;1F9D4,1F3FF||26 - 1F9D4,1F3FB,200D,2642,FE0F||31;1F9D4,1F3FC,200D,2642,FE0F||31;1F9D4,1F3FD,200D,2642,FE0F||31;1F9D4,1F3FE,200D,2642,FE0F||31;1F9D4,1F3FF,200D,2642,FE0F||31 - 1F9D4,1F3FB,200D,2640,FE0F||31;1F9D4,1F3FC,200D,2640,FE0F||31;1F9D4,1F3FD,200D,2640,FE0F||31;1F9D4,1F3FE,200D,2640,FE0F||31;1F9D4,1F3FF,200D,2640,FE0F||31 - 1F468,1F3FB,200D,1F9B0||28;1F468,1F3FC,200D,1F9B0||28;1F468,1F3FD,200D,1F9B0||28;1F468,1F3FE,200D,1F9B0||28;1F468,1F3FF,200D,1F9B0||28 - 1F468,1F3FB,200D,1F9B1||28;1F468,1F3FC,200D,1F9B1||28;1F468,1F3FD,200D,1F9B1||28;1F468,1F3FE,200D,1F9B1||28;1F468,1F3FF,200D,1F9B1||28 - 1F468,1F3FB,200D,1F9B3||28;1F468,1F3FC,200D,1F9B3||28;1F468,1F3FD,200D,1F9B3||28;1F468,1F3FE,200D,1F9B3||28;1F468,1F3FF,200D,1F9B3||28 - 1F468,1F3FB,200D,1F9B2||28;1F468,1F3FC,200D,1F9B2||28;1F468,1F3FD,200D,1F9B2||28;1F468,1F3FE,200D,1F9B2||28;1F468,1F3FF,200D,1F9B2||28 - 1F469,1F3FB||24;1F469,1F3FC||24;1F469,1F3FD||24;1F469,1F3FE||24;1F469,1F3FF||24 - 1F469,1F3FB,200D,1F9B0||28;1F469,1F3FC,200D,1F9B0||28;1F469,1F3FD,200D,1F9B0||28;1F469,1F3FE,200D,1F9B0||28;1F469,1F3FF,200D,1F9B0||28 - 1F9D1,1F3FB,200D,1F9B0||30;1F9D1,1F3FC,200D,1F9B0||30;1F9D1,1F3FD,200D,1F9B0||30;1F9D1,1F3FE,200D,1F9B0||30;1F9D1,1F3FF,200D,1F9B0||30 - 1F469,1F3FB,200D,1F9B1||28;1F469,1F3FC,200D,1F9B1||28;1F469,1F3FD,200D,1F9B1||28;1F469,1F3FE,200D,1F9B1||28;1F469,1F3FF,200D,1F9B1||28 - 1F9D1,1F3FB,200D,1F9B1||30;1F9D1,1F3FC,200D,1F9B1||30;1F9D1,1F3FD,200D,1F9B1||30;1F9D1,1F3FE,200D,1F9B1||30;1F9D1,1F3FF,200D,1F9B1||30 - 1F469,1F3FB,200D,1F9B3||28;1F469,1F3FC,200D,1F9B3||28;1F469,1F3FD,200D,1F9B3||28;1F469,1F3FE,200D,1F9B3||28;1F469,1F3FF,200D,1F9B3||28 - 1F9D1,1F3FB,200D,1F9B3||30;1F9D1,1F3FC,200D,1F9B3||30;1F9D1,1F3FD,200D,1F9B3||30;1F9D1,1F3FE,200D,1F9B3||30;1F9D1,1F3FF,200D,1F9B3||30 - 1F469,1F3FB,200D,1F9B2||28;1F469,1F3FC,200D,1F9B2||28;1F469,1F3FD,200D,1F9B2||28;1F469,1F3FE,200D,1F9B2||28;1F469,1F3FF,200D,1F9B2||28 - 1F9D1,1F3FB,200D,1F9B2||30;1F9D1,1F3FC,200D,1F9B2||30;1F9D1,1F3FD,200D,1F9B2||30;1F9D1,1F3FE,200D,1F9B2||30;1F9D1,1F3FF,200D,1F9B2||30 - 1F471,1F3FB,200D,2640,FE0F||25;1F471,1F3FC,200D,2640,FE0F||25;1F471,1F3FD,200D,2640,FE0F||25;1F471,1F3FE,200D,2640,FE0F||25;1F471,1F3FF,200D,2640,FE0F||25 - 1F471,1F3FB,200D,2642,FE0F||25;1F471,1F3FC,200D,2642,FE0F||25;1F471,1F3FD,200D,2642,FE0F||25;1F471,1F3FE,200D,2642,FE0F||25;1F471,1F3FF,200D,2642,FE0F||25 - 1F9D3,1F3FB||26;1F9D3,1F3FC||26;1F9D3,1F3FD||26;1F9D3,1F3FE||26;1F9D3,1F3FF||26 - 1F474,1F3FB||24;1F474,1F3FC||24;1F474,1F3FD||24;1F474,1F3FE||24;1F474,1F3FF||24 - 1F475,1F3FB||24;1F475,1F3FC||24;1F475,1F3FD||24;1F475,1F3FE||24;1F475,1F3FF||24 - 1F64D,1F3FB||24;1F64D,1F3FC||24;1F64D,1F3FD||24;1F64D,1F3FE||24;1F64D,1F3FF||24 - 1F64D,1F3FB,200D,2642,FE0F||25;1F64D,1F3FC,200D,2642,FE0F||25;1F64D,1F3FD,200D,2642,FE0F||25;1F64D,1F3FE,200D,2642,FE0F||25;1F64D,1F3FF,200D,2642,FE0F||25 - 1F64D,1F3FB,200D,2640,FE0F||25;1F64D,1F3FC,200D,2640,FE0F||25;1F64D,1F3FD,200D,2640,FE0F||25;1F64D,1F3FE,200D,2640,FE0F||25;1F64D,1F3FF,200D,2640,FE0F||25 - 1F64E,1F3FB||24;1F64E,1F3FC||24;1F64E,1F3FD||24;1F64E,1F3FE||24;1F64E,1F3FF||24 - 1F64E,1F3FB,200D,2642,FE0F||25;1F64E,1F3FC,200D,2642,FE0F||25;1F64E,1F3FD,200D,2642,FE0F||25;1F64E,1F3FE,200D,2642,FE0F||25;1F64E,1F3FF,200D,2642,FE0F||25 - 1F64E,1F3FB,200D,2640,FE0F||25;1F64E,1F3FC,200D,2640,FE0F||25;1F64E,1F3FD,200D,2640,FE0F||25;1F64E,1F3FE,200D,2640,FE0F||25;1F64E,1F3FF,200D,2640,FE0F||25 - 1F645,1F3FB||24;1F645,1F3FC||24;1F645,1F3FD||24;1F645,1F3FE||24;1F645,1F3FF||24 - 1F645,1F3FB,200D,2642,FE0F||25;1F645,1F3FC,200D,2642,FE0F||25;1F645,1F3FD,200D,2642,FE0F||25;1F645,1F3FE,200D,2642,FE0F||25;1F645,1F3FF,200D,2642,FE0F||25 - 1F645,1F3FB,200D,2640,FE0F||25;1F645,1F3FC,200D,2640,FE0F||25;1F645,1F3FD,200D,2640,FE0F||25;1F645,1F3FE,200D,2640,FE0F||25;1F645,1F3FF,200D,2640,FE0F||25 - 1F646,1F3FB||24;1F646,1F3FC||24;1F646,1F3FD||24;1F646,1F3FE||24;1F646,1F3FF||24 - 1F646,1F3FB,200D,2642,FE0F||25;1F646,1F3FC,200D,2642,FE0F||25;1F646,1F3FD,200D,2642,FE0F||25;1F646,1F3FE,200D,2642,FE0F||25;1F646,1F3FF,200D,2642,FE0F||25 - 1F646,1F3FB,200D,2640,FE0F||25;1F646,1F3FC,200D,2640,FE0F||25;1F646,1F3FD,200D,2640,FE0F||25;1F646,1F3FE,200D,2640,FE0F||25;1F646,1F3FF,200D,2640,FE0F||25 - 1F481,1F3FB||24;1F481,1F3FC||24;1F481,1F3FD||24;1F481,1F3FE||24;1F481,1F3FF||24 - 1F481,1F3FB,200D,2642,FE0F||25;1F481,1F3FC,200D,2642,FE0F||25;1F481,1F3FD,200D,2642,FE0F||25;1F481,1F3FE,200D,2642,FE0F||25;1F481,1F3FF,200D,2642,FE0F||25 - 1F481,1F3FB,200D,2640,FE0F||25;1F481,1F3FC,200D,2640,FE0F||25;1F481,1F3FD,200D,2640,FE0F||25;1F481,1F3FE,200D,2640,FE0F||25;1F481,1F3FF,200D,2640,FE0F||25 - 1F64B,1F3FB||24;1F64B,1F3FC||24;1F64B,1F3FD||24;1F64B,1F3FE||24;1F64B,1F3FF||24 - 1F64B,1F3FB,200D,2642,FE0F||25;1F64B,1F3FC,200D,2642,FE0F||25;1F64B,1F3FD,200D,2642,FE0F||25;1F64B,1F3FE,200D,2642,FE0F||25;1F64B,1F3FF,200D,2642,FE0F||25 - 1F64B,1F3FB,200D,2640,FE0F||25;1F64B,1F3FC,200D,2640,FE0F||25;1F64B,1F3FD,200D,2640,FE0F||25;1F64B,1F3FE,200D,2640,FE0F||25;1F64B,1F3FF,200D,2640,FE0F||25 - 1F9CF,1F3FB||29;1F9CF,1F3FC||29;1F9CF,1F3FD||29;1F9CF,1F3FE||29;1F9CF,1F3FF||29 - 1F9CF,1F3FB,200D,2642,FE0F||29;1F9CF,1F3FC,200D,2642,FE0F||29;1F9CF,1F3FD,200D,2642,FE0F||29;1F9CF,1F3FE,200D,2642,FE0F||29;1F9CF,1F3FF,200D,2642,FE0F||29 - 1F9CF,1F3FB,200D,2640,FE0F||29;1F9CF,1F3FC,200D,2640,FE0F||29;1F9CF,1F3FD,200D,2640,FE0F||29;1F9CF,1F3FE,200D,2640,FE0F||29;1F9CF,1F3FF,200D,2640,FE0F||29 - 1F647,1F3FB||24;1F647,1F3FC||24;1F647,1F3FD||24;1F647,1F3FE||24;1F647,1F3FF||24 - 1F647,1F3FB,200D,2642,FE0F||25;1F647,1F3FC,200D,2642,FE0F||25;1F647,1F3FD,200D,2642,FE0F||25;1F647,1F3FE,200D,2642,FE0F||25;1F647,1F3FF,200D,2642,FE0F||25 - 1F647,1F3FB,200D,2640,FE0F||25;1F647,1F3FC,200D,2640,FE0F||25;1F647,1F3FD,200D,2640,FE0F||25;1F647,1F3FE,200D,2640,FE0F||25;1F647,1F3FF,200D,2640,FE0F||25 - 1F926,1F3FB||24;1F926,1F3FC||24;1F926,1F3FD||24;1F926,1F3FE||24;1F926,1F3FF||24 - 1F926,1F3FB,200D,2642,FE0F||25;1F926,1F3FC,200D,2642,FE0F||25;1F926,1F3FD,200D,2642,FE0F||25;1F926,1F3FE,200D,2642,FE0F||25;1F926,1F3FF,200D,2642,FE0F||25 - 1F926,1F3FB,200D,2640,FE0F||25;1F926,1F3FC,200D,2640,FE0F||25;1F926,1F3FD,200D,2640,FE0F||25;1F926,1F3FE,200D,2640,FE0F||25;1F926,1F3FF,200D,2640,FE0F||25 - 1F937,1F3FB||24;1F937,1F3FC||24;1F937,1F3FD||24;1F937,1F3FE||24;1F937,1F3FF||24 - 1F937,1F3FB,200D,2642,FE0F||25;1F937,1F3FC,200D,2642,FE0F||25;1F937,1F3FD,200D,2642,FE0F||25;1F937,1F3FE,200D,2642,FE0F||25;1F937,1F3FF,200D,2642,FE0F||25 - 1F937,1F3FB,200D,2640,FE0F||25;1F937,1F3FC,200D,2640,FE0F||25;1F937,1F3FD,200D,2640,FE0F||25;1F937,1F3FE,200D,2640,FE0F||25;1F937,1F3FF,200D,2640,FE0F||25 - 1F9D1,1F3FB,200D,2695,FE0F||30;1F9D1,1F3FC,200D,2695,FE0F||30;1F9D1,1F3FD,200D,2695,FE0F||30;1F9D1,1F3FE,200D,2695,FE0F||30;1F9D1,1F3FF,200D,2695,FE0F||30 - 1F468,1F3FB,200D,2695,FE0F||25;1F468,1F3FC,200D,2695,FE0F||25;1F468,1F3FD,200D,2695,FE0F||25;1F468,1F3FE,200D,2695,FE0F||25;1F468,1F3FF,200D,2695,FE0F||25 - 1F469,1F3FB,200D,2695,FE0F||25;1F469,1F3FC,200D,2695,FE0F||25;1F469,1F3FD,200D,2695,FE0F||25;1F469,1F3FE,200D,2695,FE0F||25;1F469,1F3FF,200D,2695,FE0F||25 - 1F9D1,1F3FB,200D,1F393||30;1F9D1,1F3FC,200D,1F393||30;1F9D1,1F3FD,200D,1F393||30;1F9D1,1F3FE,200D,1F393||30;1F9D1,1F3FF,200D,1F393||30 - 1F468,1F3FB,200D,1F393||25;1F468,1F3FC,200D,1F393||25;1F468,1F3FD,200D,1F393||25;1F468,1F3FE,200D,1F393||25;1F468,1F3FF,200D,1F393||25 - 1F469,1F3FB,200D,1F393||25;1F469,1F3FC,200D,1F393||25;1F469,1F3FD,200D,1F393||25;1F469,1F3FE,200D,1F393||25;1F469,1F3FF,200D,1F393||25 - 1F9D1,1F3FB,200D,1F3EB||30;1F9D1,1F3FC,200D,1F3EB||30;1F9D1,1F3FD,200D,1F3EB||30;1F9D1,1F3FE,200D,1F3EB||30;1F9D1,1F3FF,200D,1F3EB||30 - 1F468,1F3FB,200D,1F3EB||25;1F468,1F3FC,200D,1F3EB||25;1F468,1F3FD,200D,1F3EB||25;1F468,1F3FE,200D,1F3EB||25;1F468,1F3FF,200D,1F3EB||25 - 1F469,1F3FB,200D,1F3EB||25;1F469,1F3FC,200D,1F3EB||25;1F469,1F3FD,200D,1F3EB||25;1F469,1F3FE,200D,1F3EB||25;1F469,1F3FF,200D,1F3EB||25 - 1F9D1,1F3FB,200D,2696,FE0F||30;1F9D1,1F3FC,200D,2696,FE0F||30;1F9D1,1F3FD,200D,2696,FE0F||30;1F9D1,1F3FE,200D,2696,FE0F||30;1F9D1,1F3FF,200D,2696,FE0F||30 - 1F468,1F3FB,200D,2696,FE0F||25;1F468,1F3FC,200D,2696,FE0F||25;1F468,1F3FD,200D,2696,FE0F||25;1F468,1F3FE,200D,2696,FE0F||25;1F468,1F3FF,200D,2696,FE0F||25 - 1F469,1F3FB,200D,2696,FE0F||25;1F469,1F3FC,200D,2696,FE0F||25;1F469,1F3FD,200D,2696,FE0F||25;1F469,1F3FE,200D,2696,FE0F||25;1F469,1F3FF,200D,2696,FE0F||25 - 1F9D1,1F3FB,200D,1F33E||30;1F9D1,1F3FC,200D,1F33E||30;1F9D1,1F3FD,200D,1F33E||30;1F9D1,1F3FE,200D,1F33E||30;1F9D1,1F3FF,200D,1F33E||30 - 1F468,1F3FB,200D,1F33E||25;1F468,1F3FC,200D,1F33E||25;1F468,1F3FD,200D,1F33E||25;1F468,1F3FE,200D,1F33E||25;1F468,1F3FF,200D,1F33E||25 - 1F469,1F3FB,200D,1F33E||25;1F469,1F3FC,200D,1F33E||25;1F469,1F3FD,200D,1F33E||25;1F469,1F3FE,200D,1F33E||25;1F469,1F3FF,200D,1F33E||25 - 1F9D1,1F3FB,200D,1F373||30;1F9D1,1F3FC,200D,1F373||30;1F9D1,1F3FD,200D,1F373||30;1F9D1,1F3FE,200D,1F373||30;1F9D1,1F3FF,200D,1F373||30 - 1F468,1F3FB,200D,1F373||25;1F468,1F3FC,200D,1F373||25;1F468,1F3FD,200D,1F373||25;1F468,1F3FE,200D,1F373||25;1F468,1F3FF,200D,1F373||25 - 1F469,1F3FB,200D,1F373||25;1F469,1F3FC,200D,1F373||25;1F469,1F3FD,200D,1F373||25;1F469,1F3FE,200D,1F373||25;1F469,1F3FF,200D,1F373||25 - 1F9D1,1F3FB,200D,1F527||30;1F9D1,1F3FC,200D,1F527||30;1F9D1,1F3FD,200D,1F527||30;1F9D1,1F3FE,200D,1F527||30;1F9D1,1F3FF,200D,1F527||30 - 1F468,1F3FB,200D,1F527||25;1F468,1F3FC,200D,1F527||25;1F468,1F3FD,200D,1F527||25;1F468,1F3FE,200D,1F527||25;1F468,1F3FF,200D,1F527||25 - 1F469,1F3FB,200D,1F527||25;1F469,1F3FC,200D,1F527||25;1F469,1F3FD,200D,1F527||25;1F469,1F3FE,200D,1F527||25;1F469,1F3FF,200D,1F527||25 - 1F9D1,1F3FB,200D,1F3ED||30;1F9D1,1F3FC,200D,1F3ED||30;1F9D1,1F3FD,200D,1F3ED||30;1F9D1,1F3FE,200D,1F3ED||30;1F9D1,1F3FF,200D,1F3ED||30 - 1F468,1F3FB,200D,1F3ED||25;1F468,1F3FC,200D,1F3ED||25;1F468,1F3FD,200D,1F3ED||25;1F468,1F3FE,200D,1F3ED||25;1F468,1F3FF,200D,1F3ED||25 - 1F469,1F3FB,200D,1F3ED||25;1F469,1F3FC,200D,1F3ED||25;1F469,1F3FD,200D,1F3ED||25;1F469,1F3FE,200D,1F3ED||25;1F469,1F3FF,200D,1F3ED||25 - 1F9D1,1F3FB,200D,1F4BC||30;1F9D1,1F3FC,200D,1F4BC||30;1F9D1,1F3FD,200D,1F4BC||30;1F9D1,1F3FE,200D,1F4BC||30;1F9D1,1F3FF,200D,1F4BC||30 - 1F468,1F3FB,200D,1F4BC||25;1F468,1F3FC,200D,1F4BC||25;1F468,1F3FD,200D,1F4BC||25;1F468,1F3FE,200D,1F4BC||25;1F468,1F3FF,200D,1F4BC||25 - 1F469,1F3FB,200D,1F4BC||25;1F469,1F3FC,200D,1F4BC||25;1F469,1F3FD,200D,1F4BC||25;1F469,1F3FE,200D,1F4BC||25;1F469,1F3FF,200D,1F4BC||25 - 1F9D1,1F3FB,200D,1F52C||30;1F9D1,1F3FC,200D,1F52C||30;1F9D1,1F3FD,200D,1F52C||30;1F9D1,1F3FE,200D,1F52C||30;1F9D1,1F3FF,200D,1F52C||30 - 1F468,1F3FB,200D,1F52C||25;1F468,1F3FC,200D,1F52C||25;1F468,1F3FD,200D,1F52C||25;1F468,1F3FE,200D,1F52C||25;1F468,1F3FF,200D,1F52C||25 - 1F469,1F3FB,200D,1F52C||25;1F469,1F3FC,200D,1F52C||25;1F469,1F3FD,200D,1F52C||25;1F469,1F3FE,200D,1F52C||25;1F469,1F3FF,200D,1F52C||25 - 1F9D1,1F3FB,200D,1F4BB||30;1F9D1,1F3FC,200D,1F4BB||30;1F9D1,1F3FD,200D,1F4BB||30;1F9D1,1F3FE,200D,1F4BB||30;1F9D1,1F3FF,200D,1F4BB||30 - 1F468,1F3FB,200D,1F4BB||25;1F468,1F3FC,200D,1F4BB||25;1F468,1F3FD,200D,1F4BB||25;1F468,1F3FE,200D,1F4BB||25;1F468,1F3FF,200D,1F4BB||25 - 1F469,1F3FB,200D,1F4BB||25;1F469,1F3FC,200D,1F4BB||25;1F469,1F3FD,200D,1F4BB||25;1F469,1F3FE,200D,1F4BB||25;1F469,1F3FF,200D,1F4BB||25 - 1F9D1,1F3FB,200D,1F3A4||30;1F9D1,1F3FC,200D,1F3A4||30;1F9D1,1F3FD,200D,1F3A4||30;1F9D1,1F3FE,200D,1F3A4||30;1F9D1,1F3FF,200D,1F3A4||30 - 1F468,1F3FB,200D,1F3A4||25;1F468,1F3FC,200D,1F3A4||25;1F468,1F3FD,200D,1F3A4||25;1F468,1F3FE,200D,1F3A4||25;1F468,1F3FF,200D,1F3A4||25 - 1F469,1F3FB,200D,1F3A4||25;1F469,1F3FC,200D,1F3A4||25;1F469,1F3FD,200D,1F3A4||25;1F469,1F3FE,200D,1F3A4||25;1F469,1F3FF,200D,1F3A4||25 - 1F9D1,1F3FB,200D,1F3A8||30;1F9D1,1F3FC,200D,1F3A8||30;1F9D1,1F3FD,200D,1F3A8||30;1F9D1,1F3FE,200D,1F3A8||30;1F9D1,1F3FF,200D,1F3A8||30 - 1F468,1F3FB,200D,1F3A8||25;1F468,1F3FC,200D,1F3A8||25;1F468,1F3FD,200D,1F3A8||25;1F468,1F3FE,200D,1F3A8||25;1F468,1F3FF,200D,1F3A8||25 - 1F469,1F3FB,200D,1F3A8||25;1F469,1F3FC,200D,1F3A8||25;1F469,1F3FD,200D,1F3A8||25;1F469,1F3FE,200D,1F3A8||25;1F469,1F3FF,200D,1F3A8||25 - 1F9D1,1F3FB,200D,2708,FE0F||30;1F9D1,1F3FC,200D,2708,FE0F||30;1F9D1,1F3FD,200D,2708,FE0F||30;1F9D1,1F3FE,200D,2708,FE0F||30;1F9D1,1F3FF,200D,2708,FE0F||30 - 1F468,1F3FB,200D,2708,FE0F||25;1F468,1F3FC,200D,2708,FE0F||25;1F468,1F3FD,200D,2708,FE0F||25;1F468,1F3FE,200D,2708,FE0F||25;1F468,1F3FF,200D,2708,FE0F||25 - 1F469,1F3FB,200D,2708,FE0F||25;1F469,1F3FC,200D,2708,FE0F||25;1F469,1F3FD,200D,2708,FE0F||25;1F469,1F3FE,200D,2708,FE0F||25;1F469,1F3FF,200D,2708,FE0F||25 - 1F9D1,1F3FB,200D,1F680||30;1F9D1,1F3FC,200D,1F680||30;1F9D1,1F3FD,200D,1F680||30;1F9D1,1F3FE,200D,1F680||30;1F9D1,1F3FF,200D,1F680||30 - 1F468,1F3FB,200D,1F680||25;1F468,1F3FC,200D,1F680||25;1F468,1F3FD,200D,1F680||25;1F468,1F3FE,200D,1F680||25;1F468,1F3FF,200D,1F680||25 - 1F469,1F3FB,200D,1F680||25;1F469,1F3FC,200D,1F680||25;1F469,1F3FD,200D,1F680||25;1F469,1F3FE,200D,1F680||25;1F469,1F3FF,200D,1F680||25 - 1F9D1,1F3FB,200D,1F692||30;1F9D1,1F3FC,200D,1F692||30;1F9D1,1F3FD,200D,1F692||30;1F9D1,1F3FE,200D,1F692||30;1F9D1,1F3FF,200D,1F692||30 - 1F468,1F3FB,200D,1F692||25;1F468,1F3FC,200D,1F692||25;1F468,1F3FD,200D,1F692||25;1F468,1F3FE,200D,1F692||25;1F468,1F3FF,200D,1F692||25 - 1F469,1F3FB,200D,1F692||25;1F469,1F3FC,200D,1F692||25;1F469,1F3FD,200D,1F692||25;1F469,1F3FE,200D,1F692||25;1F469,1F3FF,200D,1F692||25 - 1F46E,1F3FB||24;1F46E,1F3FC||24;1F46E,1F3FD||24;1F46E,1F3FE||24;1F46E,1F3FF||24 - 1F46E,1F3FB,200D,2642,FE0F||25;1F46E,1F3FC,200D,2642,FE0F||25;1F46E,1F3FD,200D,2642,FE0F||25;1F46E,1F3FE,200D,2642,FE0F||25;1F46E,1F3FF,200D,2642,FE0F||25 - 1F46E,1F3FB,200D,2640,FE0F||25;1F46E,1F3FC,200D,2640,FE0F||25;1F46E,1F3FD,200D,2640,FE0F||25;1F46E,1F3FE,200D,2640,FE0F||25;1F46E,1F3FF,200D,2640,FE0F||25 - 1F575,1F3FB||24;1F575,1F3FC||24;1F575,1F3FD||24;1F575,1F3FE||24;1F575,1F3FF||24 - 1F575,1F3FB,200D,2642,FE0F||25;1F575,1F3FC,200D,2642,FE0F||25;1F575,1F3FD,200D,2642,FE0F||25;1F575,1F3FE,200D,2642,FE0F||25;1F575,1F3FF,200D,2642,FE0F||25 - 1F575,1F3FB,200D,2640,FE0F||25;1F575,1F3FC,200D,2640,FE0F||25;1F575,1F3FD,200D,2640,FE0F||25;1F575,1F3FE,200D,2640,FE0F||25;1F575,1F3FF,200D,2640,FE0F||25 - 1F482,1F3FB||24;1F482,1F3FC||24;1F482,1F3FD||24;1F482,1F3FE||24;1F482,1F3FF||24 - 1F482,1F3FB,200D,2642,FE0F||25;1F482,1F3FC,200D,2642,FE0F||25;1F482,1F3FD,200D,2642,FE0F||25;1F482,1F3FE,200D,2642,FE0F||25;1F482,1F3FF,200D,2642,FE0F||25 - 1F482,1F3FB,200D,2640,FE0F||25;1F482,1F3FC,200D,2640,FE0F||25;1F482,1F3FD,200D,2640,FE0F||25;1F482,1F3FE,200D,2640,FE0F||25;1F482,1F3FF,200D,2640,FE0F||25 - 1F977,1F3FB||30;1F977,1F3FC||30;1F977,1F3FD||30;1F977,1F3FE||30;1F977,1F3FF||30 - 1F477,1F3FB||24;1F477,1F3FC||24;1F477,1F3FD||24;1F477,1F3FE||24;1F477,1F3FF||24 - 1F477,1F3FB,200D,2642,FE0F||25;1F477,1F3FC,200D,2642,FE0F||25;1F477,1F3FD,200D,2642,FE0F||25;1F477,1F3FE,200D,2642,FE0F||25;1F477,1F3FF,200D,2642,FE0F||25 - 1F477,1F3FB,200D,2640,FE0F||25;1F477,1F3FC,200D,2640,FE0F||25;1F477,1F3FD,200D,2640,FE0F||25;1F477,1F3FE,200D,2640,FE0F||25;1F477,1F3FF,200D,2640,FE0F||25 - 1FAC5,1F3FB||32;1FAC5,1F3FC||32;1FAC5,1F3FD||32;1FAC5,1F3FE||32;1FAC5,1F3FF||32 - 1F934,1F3FB||24;1F934,1F3FC||24;1F934,1F3FD||24;1F934,1F3FE||24;1F934,1F3FF||24 - 1F478,1F3FB||24;1F478,1F3FC||24;1F478,1F3FD||24;1F478,1F3FE||24;1F478,1F3FF||24 - 1F473,1F3FB||24;1F473,1F3FC||24;1F473,1F3FD||24;1F473,1F3FE||24;1F473,1F3FF||24 - 1F473,1F3FB,200D,2642,FE0F||25;1F473,1F3FC,200D,2642,FE0F||25;1F473,1F3FD,200D,2642,FE0F||25;1F473,1F3FE,200D,2642,FE0F||25;1F473,1F3FF,200D,2642,FE0F||25 - 1F473,1F3FB,200D,2640,FE0F||25;1F473,1F3FC,200D,2640,FE0F||25;1F473,1F3FD,200D,2640,FE0F||25;1F473,1F3FE,200D,2640,FE0F||25;1F473,1F3FF,200D,2640,FE0F||25 - 1F472,1F3FB||24;1F472,1F3FC||24;1F472,1F3FD||24;1F472,1F3FE||24;1F472,1F3FF||24 - 1F9D5,1F3FB||26;1F9D5,1F3FC||26;1F9D5,1F3FD||26;1F9D5,1F3FE||26;1F9D5,1F3FF||26 - 1F935,1F3FB||24;1F935,1F3FC||24;1F935,1F3FD||24;1F935,1F3FE||24;1F935,1F3FF||24 - 1F935,1F3FB,200D,2642,FE0F||30;1F935,1F3FC,200D,2642,FE0F||30;1F935,1F3FD,200D,2642,FE0F||30;1F935,1F3FE,200D,2642,FE0F||30;1F935,1F3FF,200D,2642,FE0F||30 - 1F935,1F3FB,200D,2640,FE0F||30;1F935,1F3FC,200D,2640,FE0F||30;1F935,1F3FD,200D,2640,FE0F||30;1F935,1F3FE,200D,2640,FE0F||30;1F935,1F3FF,200D,2640,FE0F||30 - 1F470,1F3FB||24;1F470,1F3FC||24;1F470,1F3FD||24;1F470,1F3FE||24;1F470,1F3FF||24 - 1F470,1F3FB,200D,2642,FE0F||30;1F470,1F3FC,200D,2642,FE0F||30;1F470,1F3FD,200D,2642,FE0F||30;1F470,1F3FE,200D,2642,FE0F||30;1F470,1F3FF,200D,2642,FE0F||30 - 1F470,1F3FB,200D,2640,FE0F||30;1F470,1F3FC,200D,2640,FE0F||30;1F470,1F3FD,200D,2640,FE0F||30;1F470,1F3FE,200D,2640,FE0F||30;1F470,1F3FF,200D,2640,FE0F||30 - 1F930,1F3FB||24;1F930,1F3FC||24;1F930,1F3FD||24;1F930,1F3FE||24;1F930,1F3FF||24 - 1FAC3,1F3FB||32;1FAC3,1F3FD||32;1FAC3,1F3FE||32;1FAC3,1F3FF||32 - 1FAC4,1F3FB||32;1FAC4,1F3FC||32;1FAC4,1F3FD||32;1FAC4,1F3FE||32;1FAC4,1F3FF||32 - 1F931,1F3FB||26;1F931,1F3FC||26;1F931,1F3FD||26;1F931,1F3FE||26;1F931,1F3FF||26 - 1F469,1F3FB,200D,1F37C||30;1F469,1F3FC,200D,1F37C||30;1F469,1F3FD,200D,1F37C||30;1F469,1F3FE,200D,1F37C||30;1F469,1F3FF,200D,1F37C||30 - 1F468,1F3FB,200D,1F37C||30;1F468,1F3FC,200D,1F37C||30;1F468,1F3FD,200D,1F37C||30;1F468,1F3FE,200D,1F37C||30;1F468,1F3FF,200D,1F37C||30 - 1F9D1,1F3FB,200D,1F37C||30;1F9D1,1F3FC,200D,1F37C||30;1F9D1,1F3FD,200D,1F37C||30;1F9D1,1F3FE,200D,1F37C||30;1F9D1,1F3FF,200D,1F37C||30 - 1F47C,1F3FB||24;1F47C,1F3FC||24;1F47C,1F3FD||24;1F47C,1F3FE||24;1F47C,1F3FF||24 - 1F385,1F3FB||24;1F385,1F3FC||24;1F385,1F3FD||24;1F385,1F3FE||24;1F385,1F3FF||24 - 1F936,1F3FB||24;1F936,1F3FC||24;1F936,1F3FD||24;1F936,1F3FE||24;1F936,1F3FF||24 - 1F9D1,1F3FB,200D,1F384||30;1F9D1,1F3FC,200D,1F384||30;1F9D1,1F3FD,200D,1F384||30;1F9D1,1F3FE,200D,1F384||30;1F9D1,1F3FF,200D,1F384||30 - 1F9B8,1F3FB||28;1F9B8,1F3FC||28;1F9B8,1F3FD||28;1F9B8,1F3FE||28;1F9B8,1F3FF||28 - 1F9B8,1F3FB,200D,2642,FE0F||28;1F9B8,1F3FC,200D,2642,FE0F||28;1F9B8,1F3FD,200D,2642,FE0F||28;1F9B8,1F3FE,200D,2642,FE0F||28;1F9B8,1F3FF,200D,2642,FE0F||28 - 1F9B8,1F3FB,200D,2640,FE0F||28;1F9B8,1F3FC,200D,2640,FE0F||28;1F9B8,1F3FD,200D,2640,FE0F||28;1F9B8,1F3FE,200D,2640,FE0F||28;1F9B8,1F3FF,200D,2640,FE0F||28 - 1F9B9,1F3FB||28;1F9B9,1F3FC||28;1F9B9,1F3FD||28;1F9B9,1F3FE||28;1F9B9,1F3FF||28 - 1F9B9,1F3FB,200D,2642,FE0F||28;1F9B9,1F3FC,200D,2642,FE0F||28;1F9B9,1F3FD,200D,2642,FE0F||28;1F9B9,1F3FE,200D,2642,FE0F||28;1F9B9,1F3FF,200D,2642,FE0F||28 - 1F9B9,1F3FB,200D,2640,FE0F||28;1F9B9,1F3FC,200D,2640,FE0F||28;1F9B9,1F3FD,200D,2640,FE0F||28;1F9B9,1F3FE,200D,2640,FE0F||28;1F9B9,1F3FF,200D,2640,FE0F||28 - 1F9D9,1F3FB||26;1F9D9,1F3FC||26;1F9D9,1F3FD||26;1F9D9,1F3FE||26;1F9D9,1F3FF||26 - 1F9D9,1F3FB,200D,2642,FE0F||26;1F9D9,1F3FC,200D,2642,FE0F||26;1F9D9,1F3FD,200D,2642,FE0F||26;1F9D9,1F3FE,200D,2642,FE0F||26;1F9D9,1F3FF,200D,2642,FE0F||26 - 1F9D9,1F3FB,200D,2640,FE0F||26;1F9D9,1F3FC,200D,2640,FE0F||26;1F9D9,1F3FD,200D,2640,FE0F||26;1F9D9,1F3FE,200D,2640,FE0F||26;1F9D9,1F3FF,200D,2640,FE0F||26 - 1F9DA,1F3FB||26;1F9DA,1F3FC||26;1F9DA,1F3FD||26;1F9DA,1F3FE||26;1F9DA,1F3FF||26 - 1F9DA,1F3FB,200D,2642,FE0F||26;1F9DA,1F3FC,200D,2642,FE0F||26;1F9DA,1F3FD,200D,2642,FE0F||26;1F9DA,1F3FE,200D,2642,FE0F||26;1F9DA,1F3FF,200D,2642,FE0F||26 - 1F9DA,1F3FB,200D,2640,FE0F||26;1F9DA,1F3FC,200D,2640,FE0F||26;1F9DA,1F3FD,200D,2640,FE0F||26;1F9DA,1F3FE,200D,2640,FE0F||26;1F9DA,1F3FF,200D,2640,FE0F||26 - 1F9DB,1F3FB||26;1F9DB,1F3FC||26;1F9DB,1F3FD||26;1F9DB,1F3FE||26;1F9DB,1F3FF||26 - 1F9DB,1F3FB,200D,2642,FE0F||26;1F9DB,1F3FC,200D,2642,FE0F||26;1F9DB,1F3FD,200D,2642,FE0F||26;1F9DB,1F3FE,200D,2642,FE0F||26;1F9DB,1F3FF,200D,2642,FE0F||26 - 1F9DB,1F3FB,200D,2640,FE0F||26;1F9DB,1F3FC,200D,2640,FE0F||26;1F9DB,1F3FD,200D,2640,FE0F||26;1F9DB,1F3FE,200D,2640,FE0F||26;1F9DB,1F3FF,200D,2640,FE0F||26 - 1F9DC,1F3FB||26;1F9DC,1F3FC||26;1F9DC,1F3FD||26;1F9DC,1F3FE||26;1F9DC,1F3FF||26 - 1F9DC,1F3FB,200D,2642,FE0F||26;1F9DC,1F3FC,200D,2642,FE0F||26;1F9DC,1F3FD,200D,2642,FE0F||26;1F9DC,1F3FE,200D,2642,FE0F||26;1F9DC,1F3FF,200D,2642,FE0F||26 - 1F9DC,1F3FB,200D,2640,FE0F||26;1F9DC,1F3FC,200D,2640,FE0F||26;1F9DC,1F3FD,200D,2640,FE0F||26;1F9DC,1F3FE,200D,2640,FE0F||26;1F9DC,1F3FF,200D,2640,FE0F||26 - 1F9DD,1F3FB||26;1F9DD,1F3FC||26;1F9DD,1F3FD||26;1F9DD,1F3FE||26;1F9DD,1F3FF||26 - 1F9DD,1F3FB,200D,2642,FE0F||26;1F9DD,1F3FC,200D,2642,FE0F||26;1F9DD,1F3FD,200D,2642,FE0F||26;1F9DD,1F3FE,200D,2642,FE0F||26;1F9DD,1F3FF,200D,2642,FE0F||26 - 1F9DD,1F3FB,200D,2640,FE0F||26;1F9DD,1F3FC,200D,2640,FE0F||26;1F9DD,1F3FD,200D,2640,FE0F||26;1F9DD,1F3FE,200D,2640,FE0F||26;1F9DD,1F3FF,200D,2640,FE0F||26 - - - - - - - - 1F486,1F3FB||24;1F486,1F3FC||24;1F486,1F3FD||24;1F486,1F3FE||24;1F486,1F3FF||24 - 1F486,1F3FB,200D,2642,FE0F||25;1F486,1F3FC,200D,2642,FE0F||25;1F486,1F3FD,200D,2642,FE0F||25;1F486,1F3FE,200D,2642,FE0F||25;1F486,1F3FF,200D,2642,FE0F||25 - 1F486,1F3FB,200D,2640,FE0F||25;1F486,1F3FC,200D,2640,FE0F||25;1F486,1F3FD,200D,2640,FE0F||25;1F486,1F3FE,200D,2640,FE0F||25;1F486,1F3FF,200D,2640,FE0F||25 - 1F487,1F3FB||24;1F487,1F3FC||24;1F487,1F3FD||24;1F487,1F3FE||24;1F487,1F3FF||24 - 1F487,1F3FB,200D,2642,FE0F||25;1F487,1F3FC,200D,2642,FE0F||25;1F487,1F3FD,200D,2642,FE0F||25;1F487,1F3FE,200D,2642,FE0F||25;1F487,1F3FF,200D,2642,FE0F||25 - 1F487,1F3FB,200D,2640,FE0F||25;1F487,1F3FC,200D,2640,FE0F||25;1F487,1F3FD,200D,2640,FE0F||25;1F487,1F3FE,200D,2640,FE0F||25;1F487,1F3FF,200D,2640,FE0F||25 - 1F6B6,1F3FB||24;1F6B6,1F3FC||24;1F6B6,1F3FD||24;1F6B6,1F3FE||24;1F6B6,1F3FF||24 - 1F6B6,1F3FB,200D,2642,FE0F||25;1F6B6,1F3FC,200D,2642,FE0F||25;1F6B6,1F3FD,200D,2642,FE0F||25;1F6B6,1F3FE,200D,2642,FE0F||25;1F6B6,1F3FF,200D,2642,FE0F||25 - 1F6B6,1F3FB,200D,2640,FE0F||25;1F6B6,1F3FC,200D,2640,FE0F||25;1F6B6,1F3FD,200D,2640,FE0F||25;1F6B6,1F3FE,200D,2640,FE0F||25;1F6B6,1F3FF,200D,2640,FE0F||25 - 1F9CD,1F3FB||29;1F9CD,1F3FC||29;1F9CD,1F3FD||29;1F9CD,1F3FE||29;1F9CD,1F3FF||29 - 1F9CD,1F3FB,200D,2642,FE0F||29;1F9CD,1F3FC,200D,2642,FE0F||29;1F9CD,1F3FD,200D,2642,FE0F||29;1F9CD,1F3FE,200D,2642,FE0F||29;1F9CD,1F3FF,200D,2642,FE0F||29 - 1F9CD,1F3FB,200D,2640,FE0F||29;1F9CD,1F3FC,200D,2640,FE0F||29;1F9CD,1F3FD,200D,2640,FE0F||29;1F9CD,1F3FE,200D,2640,FE0F||29;1F9CD,1F3FF,200D,2640,FE0F||29 - 1F9CE,1F3FB||29;1F9CE,1F3FC||29;1F9CE,1F3FD||29;1F9CE,1F3FE||29;1F9CE,1F3FF||29 - 1F9CE,1F3FB,200D,2642,FE0F||29;1F9CE,1F3FC,200D,2642,FE0F||29;1F9CE,1F3FD,200D,2642,FE0F||29;1F9CE,1F3FE,200D,2642,FE0F||29;1F9CE,1F3FF,200D,2642,FE0F||29 - 1F9CE,1F3FB,200D,2640,FE0F||29;1F9CE,1F3FC,200D,2640,FE0F||29;1F9CE,1F3FD,200D,2640,FE0F||29;1F9CE,1F3FE,200D,2640,FE0F||29;1F9CE,1F3FF,200D,2640,FE0F||29 - 1F9D1,1F3FB,200D,1F9AF||30;1F9D1,1F3FC,200D,1F9AF||30;1F9D1,1F3FD,200D,1F9AF||30;1F9D1,1F3FE,200D,1F9AF||30;1F9D1,1F3FF,200D,1F9AF||30 - 1F468,1F3FB,200D,1F9AF||29;1F468,1F3FC,200D,1F9AF||29;1F468,1F3FD,200D,1F9AF||29;1F468,1F3FE,200D,1F9AF||29;1F468,1F3FF,200D,1F9AF||29 - 1F469,1F3FB,200D,1F9AF||29;1F469,1F3FC,200D,1F9AF||29;1F469,1F3FD,200D,1F9AF||29;1F469,1F3FE,200D,1F9AF||29;1F469,1F3FF,200D,1F9AF||29 - 1F9D1,1F3FB,200D,1F9BC||30;1F9D1,1F3FC,200D,1F9BC||30;1F9D1,1F3FD,200D,1F9BC||30;1F9D1,1F3FE,200D,1F9BC||30;1F9D1,1F3FF,200D,1F9BC||30 - 1F468,1F3FB,200D,1F9BC||29;1F468,1F3FC,200D,1F9BC||29;1F468,1F3FD,200D,1F9BC||29;1F468,1F3FE,200D,1F9BC||29;1F468,1F3FF,200D,1F9BC||29 - 1F469,1F3FB,200D,1F9BC||29;1F469,1F3FC,200D,1F9BC||29;1F469,1F3FD,200D,1F9BC||29;1F469,1F3FE,200D,1F9BC||29;1F469,1F3FF,200D,1F9BC||29 - 1F9D1,1F3FB,200D,1F9BD||30;1F9D1,1F3FC,200D,1F9BD||30;1F9D1,1F3FD,200D,1F9BD||30;1F9D1,1F3FE,200D,1F9BD||30;1F9D1,1F3FF,200D,1F9BD||30 - 1F468,1F3FB,200D,1F9BD||29;1F468,1F3FC,200D,1F9BD||29;1F468,1F3FD,200D,1F9BD||29;1F468,1F3FE,200D,1F9BD||29;1F468,1F3FF,200D,1F9BD||29 - 1F469,1F3FB,200D,1F9BD||29;1F469,1F3FC,200D,1F9BD||29;1F469,1F3FD,200D,1F9BD||29;1F469,1F3FE,200D,1F9BD||29;1F469,1F3FF,200D,1F9BD||29 - 1F3C3,1F3FB||24;1F3C3,1F3FC||24;1F3C3,1F3FD||24;1F3C3,1F3FE||24;1F3C3,1F3FF||24 - 1F3C3,1F3FB,200D,2642,FE0F||25;1F3C3,1F3FC,200D,2642,FE0F||25;1F3C3,1F3FD,200D,2642,FE0F||25;1F3C3,1F3FE,200D,2642,FE0F||25;1F3C3,1F3FF,200D,2642,FE0F||25 - 1F3C3,1F3FB,200D,2640,FE0F||25;1F3C3,1F3FC,200D,2640,FE0F||25;1F3C3,1F3FD,200D,2640,FE0F||25;1F3C3,1F3FE,200D,2640,FE0F||25;1F3C3,1F3FF,200D,2640,FE0F||25 - 1F483,1F3FB||24;1F483,1F3FC||24;1F483,1F3FD||24;1F483,1F3FE||24;1F483,1F3FF||24 - 1F57A,1F3FB||24;1F57A,1F3FC||24;1F57A,1F3FD||24;1F57A,1F3FE||24;1F57A,1F3FF||24 - 1F574,1F3FB||26;1F574,1F3FC||26;1F574,1F3FD||26;1F574,1F3FE||26;1F574,1F3FF||26 - - - - 1F9D6,1F3FB||26;1F9D6,1F3FC||26;1F9D6,1F3FD||26;1F9D6,1F3FE||26;1F9D6,1F3FF||26 - 1F9D6,1F3FB,200D,2642,FE0F||26;1F9D6,1F3FC,200D,2642,FE0F||26;1F9D6,1F3FD,200D,2642,FE0F||26;1F9D6,1F3FE,200D,2642,FE0F||26;1F9D6,1F3FF,200D,2642,FE0F||26 - 1F9D6,1F3FB,200D,2640,FE0F||26;1F9D6,1F3FC,200D,2640,FE0F||26;1F9D6,1F3FD,200D,2640,FE0F||26;1F9D6,1F3FE,200D,2640,FE0F||26;1F9D6,1F3FF,200D,2640,FE0F||26 - 1F9D7,1F3FB||26;1F9D7,1F3FC||26;1F9D7,1F3FD||26;1F9D7,1F3FE||26;1F9D7,1F3FF||26 - 1F9D7,1F3FB,200D,2642,FE0F||26;1F9D7,1F3FC,200D,2642,FE0F||26;1F9D7,1F3FD,200D,2642,FE0F||26;1F9D7,1F3FE,200D,2642,FE0F||26;1F9D7,1F3FF,200D,2642,FE0F||26 - 1F9D7,1F3FB,200D,2640,FE0F||26;1F9D7,1F3FC,200D,2640,FE0F||26;1F9D7,1F3FD,200D,2640,FE0F||26;1F9D7,1F3FE,200D,2640,FE0F||26;1F9D7,1F3FF,200D,2640,FE0F||26 - - 1F3C7,1F3FB||26;1F3C7,1F3FC||26;1F3C7,1F3FD||26;1F3C7,1F3FE||26;1F3C7,1F3FF||26 - - 1F3C2,1F3FB||26;1F3C2,1F3FC||26;1F3C2,1F3FD||26;1F3C2,1F3FE||26;1F3C2,1F3FF||26 - 1F3CC,1F3FB||26;1F3CC,1F3FC||26;1F3CC,1F3FD||26;1F3CC,1F3FE||26;1F3CC,1F3FF||26 - 1F3CC,1F3FB,200D,2642,FE0F||26;1F3CC,1F3FC,200D,2642,FE0F||26;1F3CC,1F3FD,200D,2642,FE0F||26;1F3CC,1F3FE,200D,2642,FE0F||26;1F3CC,1F3FF,200D,2642,FE0F||26 - 1F3CC,1F3FB,200D,2640,FE0F||26;1F3CC,1F3FC,200D,2640,FE0F||26;1F3CC,1F3FD,200D,2640,FE0F||26;1F3CC,1F3FE,200D,2640,FE0F||26;1F3CC,1F3FF,200D,2640,FE0F||26 - 1F3C4,1F3FB||24;1F3C4,1F3FC||24;1F3C4,1F3FD||24;1F3C4,1F3FE||24;1F3C4,1F3FF||24 - 1F3C4,1F3FB,200D,2642,FE0F||25;1F3C4,1F3FC,200D,2642,FE0F||25;1F3C4,1F3FD,200D,2642,FE0F||25;1F3C4,1F3FE,200D,2642,FE0F||25;1F3C4,1F3FF,200D,2642,FE0F||25 - 1F3C4,1F3FB,200D,2640,FE0F||25;1F3C4,1F3FC,200D,2640,FE0F||25;1F3C4,1F3FD,200D,2640,FE0F||25;1F3C4,1F3FE,200D,2640,FE0F||25;1F3C4,1F3FF,200D,2640,FE0F||25 - 1F6A3,1F3FB||24;1F6A3,1F3FC||24;1F6A3,1F3FD||24;1F6A3,1F3FE||24;1F6A3,1F3FF||24 - 1F6A3,1F3FB,200D,2642,FE0F||25;1F6A3,1F3FC,200D,2642,FE0F||25;1F6A3,1F3FD,200D,2642,FE0F||25;1F6A3,1F3FE,200D,2642,FE0F||25;1F6A3,1F3FF,200D,2642,FE0F||25 - 1F6A3,1F3FB,200D,2640,FE0F||25;1F6A3,1F3FC,200D,2640,FE0F||25;1F6A3,1F3FD,200D,2640,FE0F||25;1F6A3,1F3FE,200D,2640,FE0F||25;1F6A3,1F3FF,200D,2640,FE0F||25 - 1F3CA,1F3FB||24;1F3CA,1F3FC||24;1F3CA,1F3FD||24;1F3CA,1F3FE||24;1F3CA,1F3FF||24 - 1F3CA,1F3FB,200D,2642,FE0F||25;1F3CA,1F3FC,200D,2642,FE0F||25;1F3CA,1F3FD,200D,2642,FE0F||25;1F3CA,1F3FE,200D,2642,FE0F||25;1F3CA,1F3FF,200D,2642,FE0F||25 - 1F3CA,1F3FB,200D,2640,FE0F||25;1F3CA,1F3FC,200D,2640,FE0F||25;1F3CA,1F3FD,200D,2640,FE0F||25;1F3CA,1F3FE,200D,2640,FE0F||25;1F3CA,1F3FF,200D,2640,FE0F||25 - 26F9,1F3FB||24;26F9,1F3FC||24;26F9,1F3FD||24;26F9,1F3FE||24;26F9,1F3FF||24 - 26F9,1F3FB,200D,2642,FE0F||25;26F9,1F3FC,200D,2642,FE0F||25;26F9,1F3FD,200D,2642,FE0F||25;26F9,1F3FE,200D,2642,FE0F||25;26F9,1F3FF,200D,2642,FE0F||25 - 26F9,1F3FB,200D,2640,FE0F||25;26F9,1F3FC,200D,2640,FE0F||25;26F9,1F3FD,200D,2640,FE0F||25;26F9,1F3FE,200D,2640,FE0F||25;26F9,1F3FF,200D,2640,FE0F||25 - 1F3CB,1F3FB||24;1F3CB,1F3FC||24;1F3CB,1F3FD||24;1F3CB,1F3FE||24;1F3CB,1F3FF||24 - 1F3CB,1F3FB,200D,2642,FE0F||25;1F3CB,1F3FC,200D,2642,FE0F||25;1F3CB,1F3FD,200D,2642,FE0F||25;1F3CB,1F3FE,200D,2642,FE0F||25;1F3CB,1F3FF,200D,2642,FE0F||25 - 1F3CB,1F3FB,200D,2640,FE0F||25;1F3CB,1F3FC,200D,2640,FE0F||25;1F3CB,1F3FD,200D,2640,FE0F||25;1F3CB,1F3FE,200D,2640,FE0F||25;1F3CB,1F3FF,200D,2640,FE0F||25 - 1F6B4,1F3FB||24;1F6B4,1F3FC||24;1F6B4,1F3FD||24;1F6B4,1F3FE||24;1F6B4,1F3FF||24 - 1F6B4,1F3FB,200D,2642,FE0F||25;1F6B4,1F3FC,200D,2642,FE0F||25;1F6B4,1F3FD,200D,2642,FE0F||25;1F6B4,1F3FE,200D,2642,FE0F||25;1F6B4,1F3FF,200D,2642,FE0F||25 - 1F6B4,1F3FB,200D,2640,FE0F||25;1F6B4,1F3FC,200D,2640,FE0F||25;1F6B4,1F3FD,200D,2640,FE0F||25;1F6B4,1F3FE,200D,2640,FE0F||25;1F6B4,1F3FF,200D,2640,FE0F||25 - 1F6B5,1F3FB||24;1F6B5,1F3FC||24;1F6B5,1F3FD||24;1F6B5,1F3FE||24;1F6B5,1F3FF||24 - 1F6B5,1F3FB,200D,2642,FE0F||25;1F6B5,1F3FC,200D,2642,FE0F||25;1F6B5,1F3FD,200D,2642,FE0F||25;1F6B5,1F3FE,200D,2642,FE0F||25;1F6B5,1F3FF,200D,2642,FE0F||25 - 1F6B5,1F3FB,200D,2640,FE0F||25;1F6B5,1F3FC,200D,2640,FE0F||25;1F6B5,1F3FD,200D,2640,FE0F||25;1F6B5,1F3FE,200D,2640,FE0F||25;1F6B5,1F3FF,200D,2640,FE0F||25 - 1F938,1F3FB||24;1F938,1F3FC||24;1F938,1F3FD||24;1F938,1F3FE||24;1F938,1F3FF||24 - 1F938,1F3FB,200D,2642,FE0F||25;1F938,1F3FC,200D,2642,FE0F||25;1F938,1F3FD,200D,2642,FE0F||25;1F938,1F3FE,200D,2642,FE0F||25;1F938,1F3FF,200D,2642,FE0F||25 - 1F938,1F3FB,200D,2640,FE0F||25;1F938,1F3FC,200D,2640,FE0F||25;1F938,1F3FD,200D,2640,FE0F||25;1F938,1F3FE,200D,2640,FE0F||25;1F938,1F3FF,200D,2640,FE0F||25 - - - - 1F93D,1F3FB||24;1F93D,1F3FC||24;1F93D,1F3FD||24;1F93D,1F3FE||24;1F93D,1F3FF||24 - 1F93D,1F3FB,200D,2642,FE0F||25;1F93D,1F3FC,200D,2642,FE0F||25;1F93D,1F3FD,200D,2642,FE0F||25;1F93D,1F3FE,200D,2642,FE0F||25;1F93D,1F3FF,200D,2642,FE0F||25 - 1F93D,1F3FB,200D,2640,FE0F||25;1F93D,1F3FC,200D,2640,FE0F||25;1F93D,1F3FD,200D,2640,FE0F||25;1F93D,1F3FE,200D,2640,FE0F||25;1F93D,1F3FF,200D,2640,FE0F||25 - 1F93E,1F3FB||24;1F93E,1F3FC||24;1F93E,1F3FD||24;1F93E,1F3FE||24;1F93E,1F3FF||24 - 1F93E,1F3FB,200D,2642,FE0F||25;1F93E,1F3FC,200D,2642,FE0F||25;1F93E,1F3FD,200D,2642,FE0F||25;1F93E,1F3FE,200D,2642,FE0F||25;1F93E,1F3FF,200D,2642,FE0F||25 - 1F93E,1F3FB,200D,2640,FE0F||25;1F93E,1F3FC,200D,2640,FE0F||25;1F93E,1F3FD,200D,2640,FE0F||25;1F93E,1F3FE,200D,2640,FE0F||25;1F93E,1F3FF,200D,2640,FE0F||25 - 1F939,1F3FB||24;1F939,1F3FC||24;1F939,1F3FD||24;1F939,1F3FE||24;1F939,1F3FF||24 - 1F939,1F3FB,200D,2642,FE0F||25;1F939,1F3FC,200D,2642,FE0F||25;1F939,1F3FD,200D,2642,FE0F||25;1F939,1F3FE,200D,2642,FE0F||25;1F939,1F3FF,200D,2642,FE0F||25 - 1F939,1F3FB,200D,2640,FE0F||25;1F939,1F3FC,200D,2640,FE0F||25;1F939,1F3FD,200D,2640,FE0F||25;1F939,1F3FE,200D,2640,FE0F||25;1F939,1F3FF,200D,2640,FE0F||25 - 1F9D8,1F3FB||26;1F9D8,1F3FC||26;1F9D8,1F3FD||26;1F9D8,1F3FE||26;1F9D8,1F3FF||26 - 1F9D8,1F3FB,200D,2642,FE0F||26;1F9D8,1F3FC,200D,2642,FE0F||26;1F9D8,1F3FD,200D,2642,FE0F||26;1F9D8,1F3FE,200D,2642,FE0F||26;1F9D8,1F3FF,200D,2642,FE0F||26 - 1F9D8,1F3FB,200D,2640,FE0F||26;1F9D8,1F3FC,200D,2640,FE0F||26;1F9D8,1F3FD,200D,2640,FE0F||26;1F9D8,1F3FE,200D,2640,FE0F||26;1F9D8,1F3FF,200D,2640,FE0F||26 - 1F6C0,1F3FB||24;1F6C0,1F3FC||24;1F6C0,1F3FD||24;1F6C0,1F3FE||24;1F6C0,1F3FF||24 - 1F6CC,1F3FB||26;1F6CC,1F3FC||26;1F6CC,1F3FD||26;1F6CC,1F3FE||26;1F6CC,1F3FF||26 - - 1F46D,1F3FB||29;1F46D,1F3FC||29;1F46D,1F3FD||29;1F46D,1F3FE||29;1F46D,1F3FF||29 - 1F46B,1F3FB||29;1F46B,1F3FC||29;1F46B,1F3FD||29;1F46B,1F3FE||29;1F46B,1F3FF||29 - 1F46C,1F3FB||29;1F46C,1F3FC||29;1F46C,1F3FD||29;1F46C,1F3FE||29;1F46C,1F3FF||29 - 1F48F,1F3FB||31;1F48F,1F3FC||31;1F48F,1F3FD||31;1F48F,1F3FE||31;1F48F,1F3FF||31 - - - - 1F491,1F3FB||31;1F491,1F3FC||31;1F491,1F3FD||31;1F491,1F3FE||31;1F491,1F3FF||31 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1F435 - 1F412 - 1F98D||24 - 1F9A7||29 - 1F436 - 1F415 - 1F9AE||29 - 1F415,200D,1F9BA||29 - 1F429 - 1F43A - 1F98A||24 - 1F99D||28 - 1F431 - 1F408 - 1F408,200D,2B1B||30 - 1F981||23 - 1F42F - 1F405 - 1F406 - 1F434 - 1FACE||33 - 1FACF||33 - 1F40E - 1F984||23 - 1F993||26 - 1F98C||24 - 1F9AC||30 - 1F42E - 1F402 - 1F403 - 1F404 - 1F437 - 1F416 - 1F417 - 1F43D - 1F40F - 1F411 - 1F410 - 1F42A - 1F42B - 1F999||28 - 1F992||26 - 1F418 - 1F9A3||30 - 1F98F||24 - 1F99B||28 - 1F42D - 1F401 - 1F400 - 1F439 - 1F430 - 1F407 - 1F43F,FE0F||23 - 1F9AB||30 - 1F994||26 - 1F987||24 - 1F43B - 1F43B,200D,2744,FE0F||30 - 1F428 - 1F43C - 1F9A5||29 - 1F9A6||29 - 1F9A8||29 - 1F998||28 - 1F9A1||28 - 1F43E - 1F983||23 - 1F414 - 1F413 - 1F423 - 1F424 - 1F425 - 1F426 - 1F427 - 1F54A,FE0F||23 - 1F985||24 - 1F986||24 - 1F9A2||28 - 1F989||24 - 1F9A4||30 - 1FAB6||30 - 1F9A9||29 - 1F99A||28 - 1F99C||28 - 1FABD||33 - 1F426,200D,2B1B||33 - 1FABF||33 - 1F438 - 1F40A - 1F422 - 1F98E||24 - 1F40D - 1F432 - 1F409 - 1F995||26 - 1F996||26 - 1F433 - 1F40B - 1F42C - 1F9AD||30 - 1F41F - 1F420 - 1F421 - 1F988||24 - 1F419 - 1F41A - 1FAB8||32 - 1FABC||33 - 1F40C - 1F98B||24 - 1F41B - 1F41C - 1F41D - 1FAB2||30 - 1F41E - 1F997||26 - 1FAB3||30 - 1F577,FE0F||23 - 1F578,FE0F||23 - 1F982||23 - 1F99F||28 - 1FAB0||30 - 1FAB1||30 - 1F9A0||28 - 1F490 - 1F338 - 1F4AE - 1FAB7||32 - 1F3F5,FE0F||23 - 1F339 - 1F940||24 - 1F33A - 1F33B - 1F33C - 1F337 - 1FABB||33 - 1F331 - 1FAB4||30 - 1F332 - 1F333 - 1F334 - 1F335 - 1F33E - 1F33F - 2618,FE0F||23 - 1F340 - 1F341 - 1F342 - 1F343 - 1FAB9||32 - 1FABA||32 - 1F344 - - - - 1F347 - 1F348 - 1F349 - 1F34A - 1F34B - 1F34C - 1F34D - 1F96D||28 - 1F34E - 1F34F - 1F350 - 1F351 - 1F352 - 1F353 - 1FAD0||30 - 1F95D||24 - 1F345 - 1FAD2||30 - 1F965||26 - 1F951||24 - 1F346 - 1F954||24 - 1F955||24 - 1F33D - 1F336,FE0F||23 - 1FAD1||30 - 1F952||24 - 1F96C||28 - 1F966||26 - 1F9C4||29 - 1F9C5||29 - 1F95C||24 - 1FAD8||32 - 1F330 - 1FADA||33 - 1FADB||33 - 1F35E - 1F950||24 - 1F956||24 - 1FAD3||30 - 1F968||26 - 1F96F||28 - 1F95E||24 - 1F9C7||29 - 1F9C0||23 - 1F356 - 1F357 - 1F969||26 - 1F953||24 - 1F354 - 1F35F - 1F355 - 1F32D||23 - 1F96A||26 - 1F32E||23 - 1F32F||23 - 1FAD4||30 - 1F959||24 - 1F9C6||29 - 1F95A||24 - 1F373 - 1F958||24 - 1F372 - 1FAD5||30 - 1F963||26 - 1F957||24 - 1F37F||23 - 1F9C8||29 - 1F9C2||28 - 1F96B||26 - 1F371 - 1F358 - 1F359 - 1F35A - 1F35B - 1F35C - 1F35D - 1F360 - 1F362 - 1F363 - 1F364 - 1F365 - 1F96E||28 - 1F361 - 1F95F||26 - 1F960||26 - 1F961||26 - 1F980||23 - 1F99E||28 - 1F990||24 - 1F991||24 - 1F9AA||29 - 1F366 - 1F367 - 1F368 - 1F369 - 1F36A - 1F382 - 1F370 - 1F9C1||28 - 1F967||26 - 1F36B - 1F36C - 1F36D - 1F36E - 1F36F - 1F37C - 1F95B||24 - 2615 - 1FAD6||30 - 1F375 - 1F376 - 1F37E||23 - 1F377 - 1F378 - 1F379 - 1F37A - 1F37B - 1F942||24 - 1F943||24 - 1FAD7||32 - 1F964||26 - 1F9CB||30 - 1F9C3||29 - 1F9C9||29 - 1F9CA||29 - 1F962||26 - 1F37D,FE0F||23 - 1F374 - 1F944||24 - 1F52A - 1FAD9||32 - 1F3FA||23 - - - - 1F30D - 1F30E - 1F30F - 1F310 - 1F5FA,FE0F||23 - 1F5FE - 1F9ED||28 - 1F3D4,FE0F||23 - 26F0,FE0F||23 - 1F30B - 1F5FB - 1F3D5,FE0F||23 - 1F3D6,FE0F||23 - 1F3DC,FE0F||23 - 1F3DD,FE0F||23 - 1F3DE,FE0F||23 - 1F3DF,FE0F||23 - 1F3DB,FE0F||23 - 1F3D7,FE0F||23 - 1F9F1||28 - 1FAA8||30 - 1FAB5||30 - 1F6D6||30 - 1F3D8,FE0F||23 - 1F3DA,FE0F||23 - 1F3E0 - 1F3E1 - 1F3E2 - 1F3E3 - 1F3E4 - 1F3E5 - 1F3E6 - 1F3E8 - 1F3E9 - 1F3EA - 1F3EB - 1F3EC - 1F3ED - 1F3EF - 1F3F0 - 1F492 - 1F5FC - 1F5FD - 26EA - 1F54C||23 - 1F6D5||29 - 1F54D||23 - 26E9,FE0F||23 - 1F54B||23 - 26F2 - 26FA - 1F301 - 1F303 - 1F3D9,FE0F||23 - 1F304 - 1F305 - 1F306 - 1F307 - 1F309 - 2668,FE0F - 1F3A0 - 1F6DD||32 - 1F3A1 - 1F3A2 - 1F488 - 1F3AA - 1F682 - 1F683 - 1F684 - 1F685 - 1F686 - 1F687 - 1F688 - 1F689 - 1F68A - 1F69D - 1F69E - 1F68B - 1F68C - 1F68D - 1F68E - 1F690 - 1F691 - 1F692 - 1F693 - 1F694 - 1F695 - 1F696 - 1F697 - 1F698 - 1F699 - 1F6FB||30 - 1F69A - 1F69B - 1F69C - 1F3CE,FE0F||23 - 1F3CD,FE0F||23 - 1F6F5||24 - 1F9BD||29 - 1F9BC||29 - 1F6FA||29 - 1F6B2 - 1F6F4||24 - 1F6F9||28 - 1F6FC||30 - 1F68F - 1F6E3,FE0F||23 - 1F6E4,FE0F||23 - 1F6E2,FE0F||23 - 26FD - 1F6DE||32 - 1F6A8 - 1F6A5 - 1F6A6 - 1F6D1||24 - 1F6A7 - 2693 - 1F6DF||32 - 26F5 - 1F6F6||24 - 1F6A4 - 1F6F3,FE0F||23 - 26F4,FE0F||23 - 1F6E5,FE0F||23 - 1F6A2 - 2708,FE0F - 1F6E9,FE0F||23 - 1F6EB||23 - 1F6EC||23 - 1FA82||29 - 1F4BA - 1F681 - 1F69F - 1F6A0 - 1F6A1 - 1F6F0,FE0F||23 - 1F680 - 1F6F8||26 - 1F6CE,FE0F||23 - 1F9F3||28 - 231B - 23F3 - 231A - 23F0 - 23F1,FE0F||23 - 23F2,FE0F||23 - 1F570,FE0F||23 - 1F55B - 1F567 - 1F550 - 1F55C - 1F551 - 1F55D - 1F552 - 1F55E - 1F553 - 1F55F - 1F554 - 1F560 - 1F555 - 1F561 - 1F556 - 1F562 - 1F557 - 1F563 - 1F558 - 1F564 - 1F559 - 1F565 - 1F55A - 1F566 - 1F311 - 1F312 - 1F313 - 1F314 - 1F315 - 1F316 - 1F317 - 1F318 - 1F319 - 1F31A - 1F31B - 1F31C - 1F321,FE0F||23 - 2600,FE0F - 1F31D - 1F31E - 1FA90||29 - 2B50 - 1F31F - 1F320 - 1F30C - 2601,FE0F - 26C5 - 26C8,FE0F||23 - 1F324,FE0F||23 - 1F325,FE0F||23 - 1F326,FE0F||23 - 1F327,FE0F||23 - 1F328,FE0F||23 - 1F329,FE0F||23 - 1F32A,FE0F||23 - 1F32B,FE0F||23 - 1F32C,FE0F||23 - 1F300 - 1F308 - 1F302 - 2602,FE0F||23 - 2614 - 26F1,FE0F||23 - 26A1 - 2744,FE0F - 2603,FE0F||23 - 26C4 - 2604,FE0F||23 - 1F525 - 1F4A7 - 1F30A - - - - 1F383 - 1F384 - 1F386 - 1F387 - 1F9E8||28 - 2728 - 1F388 - 1F389 - 1F38A - 1F38B - 1F38D - 1F38E - 1F38F - 1F390 - 1F391 - 1F9E7||28 - 1F380 - 1F381 - 1F397,FE0F||23 - 1F39F,FE0F||23 - 1F3AB - 1F396,FE0F||23 - 1F3C6 - 1F3C5||23 - 1F947||24 - 1F948||24 - 1F949||24 - 26BD - 26BE - 1F94E||28 - 1F3C0 - 1F3D0||23 - 1F3C8 - 1F3C9 - 1F3BE - 1F94F||28 - 1F3B3 - 1F3CF||23 - 1F3D1||23 - 1F3D2||23 - 1F94D||28 - 1F3D3||23 - 1F3F8||23 - 1F94A||24 - 1F94B||24 - 1F945||24 - 26F3 - 26F8,FE0F||23 - 1F3A3 - 1F93F||29 - 1F3BD - 1F3BF - 1F6F7||26 - 1F94C||26 - 1F3AF - 1FA80||29 - 1FA81||29 - 1F52B - 1F3B1 - 1F52E - 1FA84||30 - 1F3AE - 1F579,FE0F||23 - 1F3B0 - 1F3B2 - 1F9E9||28 - 1F9F8||28 - 1FA85||30 - 1FAA9||32 - 1FA86||30 - 2660,FE0F - 2665,FE0F - 2666,FE0F - 2663,FE0F - 265F,FE0F||28 - 1F0CF - 1F004 - 1F3B4 - 1F3AD - 1F5BC,FE0F||23 - 1F3A8 - 1F9F5||28 - 1FAA1||30 - 1F9F6||28 - 1FAA2||30 - - - - 1F453 - 1F576,FE0F||23 - 1F97D||28 - 1F97C||28 - 1F9BA||29 - 1F454 - 1F455 - 1F456 - 1F9E3||26 - 1F9E4||26 - 1F9E5||26 - 1F9E6||26 - 1F457 - 1F458 - 1F97B||29 - 1FA71||29 - 1FA72||29 - 1FA73||29 - 1F459 - 1F45A - 1FAAD||33 - 1F45B - 1F45C - 1F45D - 1F6CD,FE0F||23 - 1F392 - 1FA74||30 - 1F45E - 1F45F - 1F97E||28 - 1F97F||28 - 1F460 - 1F461 - 1FA70||29 - 1F462 - 1FAAE||33 - 1F451 - 1F452 - 1F3A9 - 1F393 - 1F9E2||26 - 1FA96||30 - 26D1,FE0F||23 - 1F4FF||23 - 1F484 - 1F48D - 1F48E - 1F507 - 1F508 - 1F509 - 1F50A - 1F4E2 - 1F4E3 - 1F4EF - 1F514 - 1F515 - 1F3BC - 1F3B5 - 1F3B6 - 1F399,FE0F||23 - 1F39A,FE0F||23 - 1F39B,FE0F||23 - 1F3A4 - 1F3A7 - 1F4FB - 1F3B7 - 1FA97||30 - 1F3B8 - 1F3B9 - 1F3BA - 1F3BB - 1FA95||29 - 1F941||24 - 1FA98||30 - 1FA87||33 - 1FA88||33 - 1F4F1 - 1F4F2 - 260E,FE0F - 1F4DE - 1F4DF - 1F4E0 - 1F50B - 1FAAB||32 - 1F50C - 1F4BB - 1F5A5,FE0F||23 - 1F5A8,FE0F||23 - 2328,FE0F||23 - 1F5B1,FE0F||23 - 1F5B2,FE0F||23 - 1F4BD - 1F4BE - 1F4BF - 1F4C0 - 1F9EE||28 - 1F3A5 - 1F39E,FE0F||23 - 1F4FD,FE0F||23 - 1F3AC - 1F4FA - 1F4F7 - 1F4F8||23 - 1F4F9 - 1F4FC - 1F50D - 1F50E - 1F56F,FE0F||23 - 1F4A1 - 1F526 - 1F3EE - 1FA94||29 - 1F4D4 - 1F4D5 - 1F4D6 - 1F4D7 - 1F4D8 - 1F4D9 - 1F4DA - 1F4D3 - 1F4D2 - 1F4C3 - 1F4DC - 1F4C4 - 1F4F0 - 1F5DE,FE0F||23 - 1F4D1 - 1F516 - 1F3F7,FE0F||23 - 1F4B0 - 1FA99||30 - 1F4B4 - 1F4B5 - 1F4B6 - 1F4B7 - 1F4B8 - 1F4B3 - 1F9FE||28 - 1F4B9 - 2709,FE0F - 1F4E7 - 1F4E8 - 1F4E9 - 1F4E4 - 1F4E5 - 1F4E6 - 1F4EB - 1F4EA - 1F4EC - 1F4ED - 1F4EE - 1F5F3,FE0F||23 - 270F,FE0F - 2712,FE0F - 1F58B,FE0F||23 - 1F58A,FE0F||23 - 1F58C,FE0F||23 - 1F58D,FE0F||23 - 1F4DD - 1F4BC - 1F4C1 - 1F4C2 - 1F5C2,FE0F||23 - 1F4C5 - 1F4C6 - 1F5D2,FE0F||23 - 1F5D3,FE0F||23 - 1F4C7 - 1F4C8 - 1F4C9 - 1F4CA - 1F4CB - 1F4CC - 1F4CD - 1F4CE - 1F587,FE0F||23 - 1F4CF - 1F4D0 - 2702,FE0F - 1F5C3,FE0F||23 - 1F5C4,FE0F||23 - 1F5D1,FE0F||23 - 1F512 - 1F513 - 1F50F - 1F510 - 1F511 - 1F5DD,FE0F||23 - 1F528 - 1FA93||29 - 26CF,FE0F||23 - 2692,FE0F||23 - 1F6E0,FE0F||23 - 1F5E1,FE0F||23 - 2694,FE0F||23 - 1F4A3 - 1FA83||30 - 1F3F9||23 - 1F6E1,FE0F||23 - 1FA9A||30 - 1F527 - 1FA9B||30 - 1F529 - 2699,FE0F||23 - 1F5DC,FE0F||23 - 2696,FE0F||23 - 1F9AF||29 - 1F517 - 26D3,FE0F||23 - 1FA9D||30 - 1F9F0||28 - 1F9F2||28 - 1FA9C||30 - 2697,FE0F||23 - 1F9EA||28 - 1F9EB||28 - 1F9EC||28 - 1F52C - 1F52D - 1F4E1 - 1F489 - 1FA78||29 - 1F48A - 1FA79||29 - 1FA7C||32 - 1FA7A||29 - 1FA7B||32 - 1F6AA - 1F6D7||30 - 1FA9E||30 - 1FA9F||30 - 1F6CF,FE0F||23 - 1F6CB,FE0F||23 - 1FA91||29 - 1F6BD - 1FAA0||30 - 1F6BF - 1F6C1 - 1FAA4||30 - 1FA92||29 - 1F9F4||28 - 1F9F7||28 - 1F9F9||28 - 1F9FA||28 - 1F9FB||28 - 1FAA3||30 - 1F9FC||28 - 1FAE7||32 - 1FAA5||30 - 1F9FD||28 - 1F9EF||28 - 1F6D2||24 - 1F6AC - 26B0,FE0F||23 - 1FAA6||30 - 26B1,FE0F||23 - 1F9FF||28 - 1FAAC||32 - 1F5FF - 1FAA7||30 - 1FAAA||32 - - - - 1F3E7 - 1F6AE - 1F6B0 - 267F - 1F6B9 - 1F6BA - 1F6BB - 1F6BC - 1F6BE - 1F6C2 - 1F6C3 - 1F6C4 - 1F6C5 - 26A0,FE0F - 1F6B8 - 26D4 - 1F6AB - 1F6B3 - 1F6AD - 1F6AF - 1F6B1 - 1F6B7 - 1F4F5 - 1F51E - 2622,FE0F||23 - 2623,FE0F||23 - 2B06,FE0F - 2197,FE0F - 27A1,FE0F - 2198,FE0F - 2B07,FE0F - 2199,FE0F - 2B05,FE0F - 2196,FE0F - 2195,FE0F - 2194,FE0F - 21A9,FE0F - 21AA,FE0F - 2934,FE0F - 2935,FE0F - 1F503 - 1F504 - 1F519 - 1F51A - 1F51B - 1F51C - 1F51D - 1F6D0||23 - 269B,FE0F||23 - 1F549,FE0F||23 - 2721,FE0F||23 - 2638,FE0F||23 - 262F,FE0F||23 - 271D,FE0F||23 - 2626,FE0F||23 - 262A,FE0F||23 - 262E,FE0F||23 - 1F54E||23 - 1F52F - 1FAAF||33 - 2648 - 2649 - 264A - 264B - 264C - 264D - 264E - 264F - 2650 - 2651 - 2652 - 2653 - 26CE - 1F500 - 1F501 - 1F502 - 25B6,FE0F - 23E9 - 23ED,FE0F||23 - 23EF,FE0F||23 - 25C0,FE0F - 23EA - 23EE,FE0F||23 - 1F53C - 23EB - 1F53D - 23EC - 23F8,FE0F||23 - 23F9,FE0F||23 - 23FA,FE0F||23 - 23CF,FE0F||23 - 1F3A6 - 1F505 - 1F506 - 1F4F6 - 1F6DC||33 - 1F4F3 - 1F4F4 - 2640,FE0F||25 - 2642,FE0F||25 - 26A7,FE0F||30 - 2716,FE0F - 2795 - 2796 - 2797 - 1F7F0||32 - 267E,FE0F||28 - 203C,FE0F - 2049,FE0F - 2753 - 2754 - 2755 - 2757 - 3030,FE0F - 1F4B1 - 1F4B2 - 2695,FE0F||25 - 267B,FE0F - 269C,FE0F||23 - 1F531 - 1F4DB - 1F530 - 2B55 - 2705 - 2611,FE0F - 2714,FE0F - 274C - 274E - 27B0 - 27BF - 303D,FE0F - 2733,FE0F - 2734,FE0F - 2747,FE0F - A9,FE0F - AE,FE0F - 2122,FE0F - 1F1E6 - 1F1E7 - 1F1E8 - 1F1E9 - 1F1EA - 1F1EB - 1F1EC - 1F1ED - 1F1EE - 1F1EF - 1F1F0 - 1F1F1 - 1F1F2 - 1F1F3 - 1F1F4 - 1F1F5 - 1F1F6 - 1F1F7 - 1F1F8 - 1F1F9 - 1F1FA - 1F1FB - 1F1FC - 1F1FD - 1F1FE - 1F1FF - 23,FE0F,20E3||21 - 2A,FE0F,20E3||23 - 30,FE0F,20E3||21 - 31,FE0F,20E3||21 - 32,FE0F,20E3||21 - 33,FE0F,20E3||21 - 34,FE0F,20E3||21 - 35,FE0F,20E3||21 - 36,FE0F,20E3||21 - 37,FE0F,20E3||21 - 38,FE0F,20E3||21 - 39,FE0F,20E3||21 - 1F51F - 1F520 - 1F521 - 1F522 - 1F523 - 1F524 - 1F170,FE0F - 1F18E - 1F171,FE0F - 1F191 - 1F192 - 1F193 - 2139,FE0F - 1F194 - 24C2,FE0F - 1F195 - 1F196 - 1F17E,FE0F - 1F197 - 1F17F,FE0F - 1F198 - 1F199 - 1F19A - 1F201 - 1F202,FE0F - 1F237,FE0F - 1F236 - 1F22F - 1F250 - 1F239 - 1F21A - 1F232 - 1F251 - 1F238 - 1F234 - 1F233 - 3297,FE0F - 3299,FE0F - 1F23A - 1F235 - 1F534 - 1F7E0||29 - 1F7E1||29 - 1F7E2||29 - 1F535 - 1F7E3||29 - 1F7E4||29 - 26AB - 26AA - 1F7E5||29 - 1F7E7||29 - 1F7E8||29 - 1F7E9||29 - 1F7E6||29 - 1F7EA||29 - 1F7EB||29 - 2B1B - 2B1C - 25FC,FE0F - 25FB,FE0F - 25FE - 25FD - 25AA,FE0F - 25AB,FE0F - 1F536 - 1F537 - 1F538 - 1F539 - 1F53A - 1F53B - 1F4A0 - 1F518 - 1F533 - 1F532 - - - - 1F3C1 - 1F6A9 - 1F38C - 1F3F4||23 - 1F3F3,FE0F||23 - 1F3F3,FE0F,200D,1F308||25 - 1F3F3,FE0F,200D,26A7,FE0F||30 - 1F3F4,200D,2620,FE0F||28 - 1F1E6,1F1E8||24 - 1F1E6,1F1E9||21 - 1F1E6,1F1EA||21 - 1F1E6,1F1EB||21 - 1F1E6,1F1EC||21 - 1F1E6,1F1EE||21 - 1F1E6,1F1F1||21 - 1F1E6,1F1F2||21 - 1F1E6,1F1F4||21 - 1F1E6,1F1F6||24 - 1F1E6,1F1F7||21 - 1F1E6,1F1F8||21 - 1F1E6,1F1F9||21 - 1F1E6,1F1FA||21 - 1F1E6,1F1FC||21 - 1F1E6,1F1FD||21 - 1F1E6,1F1FF||21 - 1F1E7,1F1E6||21 - 1F1E7,1F1E7||21 - 1F1E7,1F1E9||21 - 1F1E7,1F1EA||21 - 1F1E7,1F1EB||21 - 1F1E7,1F1EC||21 - 1F1E7,1F1ED||21 - 1F1E7,1F1EE||21 - 1F1E7,1F1EF||21 - 1F1E7,1F1F1||29 - 1F1E7,1F1F2||21 - 1F1E7,1F1F3||21 - 1F1E7,1F1F4||21 - 1F1E7,1F1F6||29 - 1F1E7,1F1F7||21 - 1F1E7,1F1F8||21 - 1F1E7,1F1F9||21 - 1F1E7,1F1FB||24 - 1F1E7,1F1FC||21 - 1F1E7,1F1FE||21 - 1F1E7,1F1FF||21 - 1F1E8,1F1E6||21 - 1F1E8,1F1E8||21 - 1F1E8,1F1E9||21 - 1F1E8,1F1EB||21 - 1F1E8,1F1EC||21 - 1F1E8,1F1ED||21 - 1F1E8,1F1EE||21 - 1F1E8,1F1F0||21 - 1F1E8,1F1F1||21 - 1F1E8,1F1F2||21 - 1F1E8,1F1F3||21 - 1F1E8,1F1F4||21 - 1F1E8,1F1F5||24 - 1F1E8,1F1F7||21 - 1F1E8,1F1FA||21 - 1F1E8,1F1FB||21 - 1F1E8,1F1FC||21 - 1F1E8,1F1FD||21 - 1F1E8,1F1FE||21 - 1F1E8,1F1FF||21 - 1F1E9,1F1EA||21 - 1F1E9,1F1EF||21 - 1F1E9,1F1F0||21 - 1F1E9,1F1F2||21 - 1F1E9,1F1F4||21 - 1F1E9,1F1FF||21 - 1F1EA,1F1E8||21 - 1F1EA,1F1EA||21 - 1F1EA,1F1EC||21 - 1F1EA,1F1F7||21 - 1F1EA,1F1F8||21 - 1F1EA,1F1F9||21 - 1F1EA,1F1FA||21 - 1F1EB,1F1EE||21 - 1F1EB,1F1EF||21 - 1F1EB,1F1F2||21 - 1F1EB,1F1F4||21 - 1F1EB,1F1F7||21 - 1F1EC,1F1E6||21 - 1F1EC,1F1E7||21 - 1F1EC,1F1E9||21 - 1F1EC,1F1EA||21 - 1F1EC,1F1EC||21 - 1F1EC,1F1ED||21 - 1F1EC,1F1EE||21 - 1F1EC,1F1F1||21 - 1F1EC,1F1F2||21 - 1F1EC,1F1F3||21 - 1F1EC,1F1F6||21 - 1F1EC,1F1F7||21 - 1F1EC,1F1F9||21 - 1F1EC,1F1FA||21 - 1F1EC,1F1FC||21 - 1F1EC,1F1FE||21 - 1F1ED,1F1F0||21 - 1F1ED,1F1F2||24 - 1F1ED,1F1F3||21 - 1F1ED,1F1F7||21 - 1F1ED,1F1F9||21 - 1F1ED,1F1FA||21 - 1F1EE,1F1E8||24 - 1F1EE,1F1E9||21 - 1F1EE,1F1EA||21 - 1F1EE,1F1F1||21 - 1F1EE,1F1F2||21 - 1F1EE,1F1F3||21 - 1F1EE,1F1F4||21 - 1F1EE,1F1F6||21 - 1F1EE,1F1F7||21 - 1F1EE,1F1F8||21 - 1F1EE,1F1F9||21 - 1F1EF,1F1EA||21 - 1F1EF,1F1F2||21 - 1F1EF,1F1F4||21 - 1F1EF,1F1F5||21 - 1F1F0,1F1EA||21 - 1F1F0,1F1EC||21 - 1F1F0,1F1ED||21 - 1F1F0,1F1EE||21 - 1F1F0,1F1F2||21 - 1F1F0,1F1F3||21 - 1F1F0,1F1F5||21 - 1F1F0,1F1F7||21 - 1F1F0,1F1FC||21 - 1F1F0,1F1FE||21 - 1F1F0,1F1FF||21 - 1F1F1,1F1E6||21 - 1F1F1,1F1E7||21 - 1F1F1,1F1E8||21 - 1F1F1,1F1EE||21 - 1F1F1,1F1F0||21 - 1F1F1,1F1F7||21 - 1F1F1,1F1F8||21 - 1F1F1,1F1F9||21 - 1F1F1,1F1FA||21 - 1F1F1,1F1FB||21 - 1F1F1,1F1FE||21 - 1F1F2,1F1E6||21 - 1F1F2,1F1E8||21 - 1F1F2,1F1E9||21 - 1F1F2,1F1EA||21 - 1F1F2,1F1EC||21 - 1F1F2,1F1ED||21 - 1F1F2,1F1F0||21 - 1F1F2,1F1F1||21 - 1F1F2,1F1F2||21 - 1F1F2,1F1F3||21 - 1F1F2,1F1F4||21 - 1F1F2,1F1F5||21 - 1F1F2,1F1F6||29 - 1F1F2,1F1F7||21 - 1F1F2,1F1F8||21 - 1F1F2,1F1F9||21 - 1F1F2,1F1FA||21 - 1F1F2,1F1FB||21 - 1F1F2,1F1FC||21 - 1F1F2,1F1FD||21 - 1F1F2,1F1FE||21 - 1F1F2,1F1FF||21 - 1F1F3,1F1E6||21 - 1F1F3,1F1EA||21 - 1F1F3,1F1EB||21 - 1F1F3,1F1EC||21 - 1F1F3,1F1EE||21 - 1F1F3,1F1F1||21 - 1F1F3,1F1F4||21 - 1F1F3,1F1F5||21 - 1F1F3,1F1F7||21 - 1F1F3,1F1FA||21 - 1F1F3,1F1FF||21 - 1F1F4,1F1F2||21 - 1F1F5,1F1E6||21 - 1F1F5,1F1EA||21 - 1F1F5,1F1EB||21 - 1F1F5,1F1EC||21 - 1F1F5,1F1ED||21 - 1F1F5,1F1F0||21 - 1F1F5,1F1F1||21 - 1F1F5,1F1F3||21 - 1F1F5,1F1F7||21 - 1F1F5,1F1F8||21 - 1F1F5,1F1F9||21 - 1F1F5,1F1FC||21 - 1F1F5,1F1FE||21 - 1F1F6,1F1E6||21 - 1F1F7,1F1EA||29 - 1F1F7,1F1F4||21 - 1F1F7,1F1F8||21 - 1F1F7,1F1FA||21 - 1F1F7,1F1FC||21 - 1F1F8,1F1E6||21 - 1F1F8,1F1E7||21 - 1F1F8,1F1E8||21 - 1F1F8,1F1E9||21 - 1F1F8,1F1EA||21 - 1F1F8,1F1EC||21 - 1F1F8,1F1ED||24 - 1F1F8,1F1EE||21 - 1F1F8,1F1EF||24 - 1F1F8,1F1F0||21 - 1F1F8,1F1F1||21 - 1F1F8,1F1F2||21 - 1F1F8,1F1F3||21 - 1F1F8,1F1F4||21 - 1F1F8,1F1F7||21 - 1F1F8,1F1F8||21 - 1F1F8,1F1F9||21 - 1F1F8,1F1FB||21 - 1F1F8,1F1FD||21 - 1F1F8,1F1FE||21 - 1F1F8,1F1FF||21 - 1F1F9,1F1E6||24 - 1F1F9,1F1E8||21 - 1F1F9,1F1E9||21 - 1F1F9,1F1EB||29 - 1F1F9,1F1EC||21 - 1F1F9,1F1ED||21 - 1F1F9,1F1EF||21 - 1F1F9,1F1F0||21 - 1F1F9,1F1F1||21 - 1F1F9,1F1F2||21 - 1F1F9,1F1F3||21 - 1F1F9,1F1F4||21 - 1F1F9,1F1F7||21 - 1F1F9,1F1F9||21 - 1F1F9,1F1FB||21 - 1F1F9,1F1FC||21 - 1F1F9,1F1FF||21 - 1F1FA,1F1E6||21 - 1F1FA,1F1EC||21 - 1F1FA,1F1F2||24 - 1F1FA,1F1F3||26 - 1F1FA,1F1F8||21 - 1F1FA,1F1FE||21 - 1F1FA,1F1FF||21 - 1F1FB,1F1E6||21 - 1F1FB,1F1E8||21 - 1F1FB,1F1EA||21 - 1F1FB,1F1EC||21 - 1F1FB,1F1EE||21 - 1F1FB,1F1F3||21 - 1F1FB,1F1FA||21 - 1F1FC,1F1F8||21 - 1F1FD,1F1F0||29 - 1F1FE,1F1EA||21 - 1F1FF,1F1E6||21 - 1F1FF,1F1F2||21 - 1F1FF,1F1FC||21 - 1F3F4,E0067,E0062,E0065,E006E,E0067,E007F||26 - 1F3F4,E0067,E0062,E0073,E0063,E0074,E007F||26 - 1F3F4,E0067,E0062,E0077,E006C,E0073,E007F||26 - - - - - - 30 - 31 - - - - :-) - ;-) - :-( - :-! - :-$ - B-) - =-O - :-P - :O - :-* - :-D - :\'( - :-\\ - O:-) - :-[ - (╯° - □° - ╯ - ┻━┻ - ¯\\_ - (ツ) - _/¯ - ┬─┬ - ïžµ /( - .□.\\ - - - - diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index c5d5899fd..000000000 --- a/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - #FFFFFF - \ No newline at end of file diff --git a/app/src/main/res/values/keyboard-icons-holo.xml b/app/src/main/res/values/keyboard-icons-holo.xml deleted file mode 100644 index e7dc6853b..000000000 --- a/app/src/main/res/values/keyboard-icons-holo.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values/keyboard-icons-lxx-light.xml b/app/src/main/res/values/keyboard-icons-lxx-light.xml deleted file mode 100644 index 5edb41210..000000000 --- a/app/src/main/res/values/keyboard-icons-lxx-light.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values/keyboard-icons-rounded.xml b/app/src/main/res/values/keyboard-icons-rounded.xml deleted file mode 100644 index 65e56293d..000000000 --- a/app/src/main/res/values/keyboard-icons-rounded.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/platform-theme.xml b/app/src/main/res/values/platform-theme.xml index ed9fc5af6..2942b101f 100644 --- a/app/src/main/res/values/platform-theme.xml +++ b/app/src/main/res/values/platform-theme.xml @@ -6,11 +6,21 @@ --> - + + diff --git a/app/src/main/res/values/predefined-subtypes.xml b/app/src/main/res/values/predefined-subtypes.xml deleted file mode 100644 index 75afa454d..000000000 --- a/app/src/main/res/values/predefined-subtypes.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - de:qwerty:AsciiCapable - fr:qwertz:AsciiCapable - hu:qwerty:AsciiCapable - - diff --git a/app/src/main/res/values/preferences_styles.xml b/app/src/main/res/values/preferences_styles.xml deleted file mode 100644 index 7c2356fb2..000000000 --- a/app/src/main/res/values/preferences_styles.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/values/setup-dimens.xml b/app/src/main/res/values/setup-dimens.xml deleted file mode 100644 index 6d513112e..000000000 --- a/app/src/main/res/values/setup-dimens.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - 40sp - 20sp - 18sp - 18dp - 18sp - 14sp - 16sp - 2dp - 12dp - 46dp - 20dp - 10dp - 6dp - 12dp - 2dp - 40 - 60 - 16dp - 4dp - 12dp - 12dp - 30 - 5 - diff --git a/app/src/main/res/values/setup-styles-common.xml b/app/src/main/res/values/setup-styles-common.xml deleted file mode 100644 index 348fbe8c3..000000000 --- a/app/src/main/res/values/setup-styles-common.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - diff --git a/app/src/main/res/values/setup-styles.xml b/app/src/main/res/values/setup-styles.xml deleted file mode 100644 index 11106d899..000000000 --- a/app/src/main/res/values/setup-styles.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/app/src/main/res/values/setup-wizard.xml b/app/src/main/res/values/setup-wizard.xml deleted file mode 100644 index 4dc390307..000000000 --- a/app/src/main/res/values/setup-wizard.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bc8113f74..90f8972ff 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,76 +5,83 @@ SPDX-License-Identifier: Apache-2.0 AND GPL-3.0-only --> - HeliBoard HeliBoard Spell Checker HeliBoard Settings HeliBoard Spell Checker Settings - - Look up contact names - - Spell checker uses entries from your contact list Vibrate on keypress + + Vibrate in do not disturb mode Sound on keypress Popup on keypress - + Preferences - + Gesture Typing - + Text correction - + Advanced - + Theme - + Input - + Additional keys - + Clipboard history - + Corrections - + + Space + Suggestions - + Experimental - + Miscellaneous - + Enable split keyboard - + + Enable split keyboard (landscape) + Split distance - + + Split distance (landscape) + Switch to other input methods - + Switch Language - + Switch both - + Language switch key Language switch key behavior Emoji key - - %s ms - - %s min - + + %s ms + + %s min + System default - + No limit - - Suggest Contact names - + + Look up contact names + Use names from Contacts for suggestions and corrections - + + Look up app names + + Use names of installed apps for suggestions and corrections + Personalized suggestions Warning: Disabling this setting will clear learned data @@ -82,18 +89,16 @@ Add words to personal dictionary Use device personal dictionary to store learned words - + Double-space period - + Double tap on spacebar inserts a period followed by a space Auto-capitalization Capitalize the first word of each sentence - + Personal dictionary - - Add-on dictionaries Main dictionary @@ -104,27 +109,37 @@ Always show suggestions Ignore other apps’ request to disable suggestions (may cause issues) - + + Don’t always show suggestions for web edit fields + + Web edit fields (mostly found in browsers) are a very common cause for issues with the always show suggestions setting + Block offensive words - + Do not suggest potentially offensive words - + Auto-correction - + Spacebar and punctuation automatically correct mistyped words More auto-correction Auto-correct even when not explicitly requested by the input field - + Auto-correction confidence - + + Auto-correct shortcuts + + When enabled shortcuts might be expanded by autocorrect + + Backspace reverts autocorrect + Off - + Modest - + Aggressive - + Very aggressive Always use middle suggestion @@ -138,29 +153,29 @@ Suggest clipboard content Show recently copied clipboard content as a suggestion - + Enable gesture typing - + Input a word by sliding through the letters - + Show gesture trail - + Floating preview - + See the suggested word while gesturing - + Dynamic floating preview - + Move the preview during a gesture - + Phrase gesture - + Input spaces during gestures by gliding to the space key - + Rapid typing cooldown - + Always start instantly - + Gesture trail lifespan Enable clipboard history @@ -184,8 +199,14 @@ Backup Restore + + Backup restored + + Format for timestamp key Multilingual typing + + Languages with dictionaries Load gesture typing library @@ -199,10 +220,20 @@ Load library Delete library - + Autospace after punctuation - + Automatically insert space after punctuation when typing a new word + + Autospace after picking a suggestion + + Autospace before gesture typing a word + + Autospace after gesture typing a word + + No autospace when pressing shift + + Shift removes pending autospace Show more letters with diacritics in popup @@ -233,6 +264,8 @@ Localize number row Prefer localized over latin numbers + + Show hints on number row Show key hints @@ -241,9 +274,13 @@ Select hint source Select popup key order + + Show TLD popup keys + + Replace period key popups with top level domains when typing URLs and email addresses Number row - Language + @string/subtype_locale Language (priority) Layout Symbols @@ -261,6 +298,7 @@ @android:string/selectAll Select word One-handed mode + Split keyboard Full left Full right Page start @@ -292,7 +330,7 @@ Remove redundant popups - Suppress popup keys that are present on the base layout + Suppress popup keys that are already present on the base layout Change input method with space key @@ -305,210 +343,116 @@ Keyboard height scale Bottom padding scale - + + Bottom padding scale (landscape) + + + Side padding scale + + Side padding scale (landscape) + Keyboard font scale + + Emoji view font scale + + Scale emoji key size with font size + + Default emoji skin tone + + Neutral + + Custom text on space bar + + Set custom font from file + English (UK) - + English (US) - + Spanish (US) - + + Serbian (Latin) + Hinglish Mansi - + Kaitag - - Serbian (Latin) - - English (UK) (%s) - - English (US) (%s) - - Spanish (US) (%s) - - Hinglish (%s) - - %s (Extended) - - Mansi (%s) - Kaitag (%s) - - Serbian (%s) - - %s (Traditional) - - %s (Akkhor) - - %s (Probhat) - - %s (Compact) - - %s (Sebeolsik 390) - - %s (Sebeolsik Final) - - %s (Student) + + Dagbani + + Sesotho + Dargwa (Urakhi) + + %1$s (%2$s) + + %s (Extended) + + %s (Traditional) + + %s (Akkhor) + + %s (Probhat) + + %s (Baishakhi) + + %s (Compact) + + %s (Phonetic) + + %s (Sebeolsik 390) + + %s (Sebeolsik Final) + + %s (Student) - No language (Alphabet) - - Alphabet (QWERTY) - - Alphabet (QWERTZ) - - Alphabet (AZERTY) - - Alphabet (Dvorak) - - Alphabet (Colemak) - - Alphabet (Colemak Mod-DH) - - Alphabet (Workman) - - Alphabet (Bépo) - Alphabet (PC) - +language, hence "No language". --> + No language + Emoji - + Add - + Remove - + Save - + Load - + Language Layout Add custom layout - + Select a file in a compatible format. Information about the formats is available %s. - + Load file - + Save to file Copy to Clipboard Cannot read file - - Copy existing layout - - Set layout name - + + Copy existing layout + Really delete custom layout %s? + + Warning: layout is in currently use Layout error: %s Tap to edit raw layout - - Customize symbols and number layouts - - Customize functional key layouts + + Secondary layouts Functional keys + + Functional keys (large screen) Functional keys (Symbols) @@ -529,8 +473,20 @@ disposition rather than other common dispositions for Latin languages. [CHAR LIM Numpad Numpad (landscape) + + Number row + + Number row (basic) + + Emoji bottom row + + Clipboard bottom row Set background image + + Set background image (landscape) + + If not set, portrait image will be used Customize currencies @@ -543,82 +499,70 @@ disposition rather than other common dispositions for Latin languages. [CHAR LIM Selecting clipboard history entry Pressing enter or space after other keys in symbols view + + Pressing enter or space after other keys in numpad Set image for day or night mode? Day Night - + Keypress vibration duration - + Keypress sound volume - + Key long press delay - + + Override Emoji version + Emoji for physical keyboard - + Physical Alt key shows the emoji palette - + Default - - "Welcome to %s" - + + "Welcome to %s" + with Gesture Typing - + Get started - - Next step - - "Setting up %s" - - 1 - - "Enable %s" - - "Please check \"%s\" in your Languages & input settings. This will authorize it to run on your device." - - "%s is already enabled in your Languages & input settings, so this step is done. On to the next one!" - + + "Setting up %s" + + "Enable %s" + + "Please check \"%s\" in your Languages & input settings. This will authorize it to run on your device." + Enable in Settings - - 2 - - "Switch to %s" - - "Next, select \"%s\" as your active text-input method." - + + "Switch to %s" + + "Next, select \"%s\" as your active text-input method." + Switch input methods - - 3 - + "Congratulations, you're all set!" - - Now you can type in all your favorite apps with %s. - + + Now you can type in all your favorite apps with %s. + Configure the keyboard - + Finished - + Show app icon - + Display application icon in the launcher - - Add-on dictionaries - - Settings for dictionaries + + Add-on dictionaries Dictionaries Internal main dictionary "Add dictionary from file" - - "To which language should the dictionary \"%1$s\" for %2$s be added?" "Select language" - - "Add to %s" "Really replace user-added dictionary \"%1$s\"?\n Current dictionary: @@ -636,76 +580,68 @@ New dictionary: You can download dictionaries %1$s, or check whether a dictionary for \"%2$s\" can be downloaded directly %3$s." "Don't show again" - + "Select a dictionary to add. Dictionaries in .dict format can be downloaded %s." - + "here" - + "%s (experimental)" "Error: Selected file is not a valid dictionary file" - - "The selected file is for %1$s, but %2$s was expected. Still use it for %2$s?" + + "The selected file is for %1$s, but %2$s was expected. Still use it for %2$s?" "Error: script not compatible with this keyboard" - - "Still use" + + "Still use" "Error loading dictionary file" Dictionary available - - Problem connecting to dictionary service - - No dictionaries available - + Last updated - - Main dictionary - + Delete - - Version %1$s - - Add - + + Version %s + Add to dictionary - + Shortcut: Weight: - + Language: - + Type a word - + Optional shortcut Edit word - - You don\'t have any words in the user dictionary. To add a word, tap the Add (+) button. For all languages - + More languages
 - \u0020ABCDEFGHIJKLMNOPQRSTUVWXYZ This word is already present in the %s user dictionary. Please type another one. Add a word - + Style + + Icon style Rounded - + Colors - + Colors (night) - + Key borders - + Auto day/night mode Appearance will follow system settings @@ -747,10 +683,6 @@ New dictionary: User-Defined User-Defined (night) - - Adjust colors - - Adjust colors (night) Choose color automatically @@ -759,14 +691,10 @@ New dictionary: Show more colors Show all colors - - Loading will overwrite the current theme This setting exposes all colors that are used internally. The list of colors may change at any time. The default color is random, and the names will not be translated. - - Click for preview - - Select colors for text and backgrounds + + Select colors for text and backgrounds Keyboard background @@ -787,7 +715,13 @@ New dictionary: Accent Gesture input - + + "You can find and share colors in the %s." + + "You can find and share layouts in the %s." + + "discussion section" + About Version @@ -799,10 +733,10 @@ New dictionary: Open-source license GNU General Public License v3.0 - + Close - - "Use system languages" + + "Use system languages" Tap the language to open settings @@ -817,7 +751,7 @@ New dictionary: Show features that may go unnoticed device protected storage - + ► Long-pressing pinned toolbar keys results in additional functionality: <br> \n\t• clipboard &#65515; paste <br> \n\t• move left/right &#65515; word left/right <br> @@ -855,22 +789,54 @@ New dictionary: \n► When using multilingual typing, space bar will show an confidence value used for determining the currently used language. <br> <br> \n► Suggestions will have some tiny numbers on top showing some internal score and source dictionary (can be disabled). Learn from your communications and typed data to improve suggestions - + Go - + Next - + Prev - + Done - + Send - + Search - + Pause - + Wait + + Enter + + Tab + + Delete + + Shift + + Shift (shifted) + + Caps lock + + Space (number layout) + + End one-handed mode + + Resize one-handed mode + + Switch one-handed mode side + + Voice input disabled + + Show / hide toolbar + + @string/show_language_switch_key + + Zero-width joiner + + Zero-width non-joiner + + Bin Horizontal spacebar swipe gesture @@ -885,6 +851,16 @@ New dictionary: Variable toolbar direction Reverse direction when a right-to-left keyboard subtype is selected + + Switch language swipe distance + + Customize toolbar key codes + + Really clear all customized key codes? + + Key code + + Long press code Auto show toolbar @@ -895,4 +871,14 @@ New dictionary: Hide the toolbar when suggestions become available Content copied + + Customize icons + + Really reset all customized icons? + + Really delete %s? + + Invalid name + + Custom subtype diff --git a/app/src/main/res/values/themes-holo_base.xml b/app/src/main/res/values/themes-holo_base.xml index 1c0217d65..f57f237fa 100644 --- a/app/src/main/res/values/themes-holo_base.xml +++ b/app/src/main/res/values/themes-holo_base.xml @@ -6,7 +6,7 @@ --> -