mirror of
https://github.com/Julow/Unexpected-Keyboard.git
synced 2025-08-17 20:41:22 +02:00
Compare commits
244 Commits
key-gestur
...
delete-wor
Author | SHA1 | Date | |
---|---|---|---|
e60304b30d | |||
a6f9c72eb3 | |||
2b978dd2e0 | |||
55cb5f5315 | |||
b7d1508d7b | |||
77b0c30728 | |||
466e0b8218 | |||
75fdc2bfa9 | |||
bee59aceaa | |||
92d50dd73f | |||
ba05b2770e | |||
44d1343b83 | |||
ca25cc55f6 | |||
68be82a4f9 | |||
581b31bf99 | |||
56903084f2 | |||
ac8fff599f | |||
a22cc39a45 | |||
7e86ca70cd | |||
33f8bf9dea | |||
653c598a1c | |||
bd5c815a6f | |||
06b76d58c2 | |||
255d7f80d7 | |||
d3753cc455 | |||
96dabde7c8 | |||
bd1a72d01e | |||
87667a2438 | |||
8f729bb90a | |||
aaf0a9a249 | |||
ae9c2fa626 | |||
0061911ef3 | |||
6b40803fa4 | |||
defc4bc0bd | |||
e1191f3add | |||
188c68279d | |||
3e3fd6ffda | |||
81c493bff2 | |||
e97dbbc771 | |||
1f9e450dfa | |||
b93bc90242 | |||
c6908ec846 | |||
16c2be96b3 | |||
d4a6bfe122 | |||
e3f9341ed1 | |||
3ea5c8d6b7 | |||
f7c5b74940 | |||
4351b3eb6e | |||
bffc76907a | |||
ca05c073d2 | |||
ddd2eebb0e | |||
1783dcdb35 | |||
4f8b5fa6ce | |||
c4e2b446e5 | |||
7b8f739400 | |||
a3023a7f18 | |||
6ce2195253 | |||
9ba718694b | |||
11c9bd850b | |||
b120fa8f09 | |||
e8c20bf521 | |||
56c62a005d | |||
115eda4084 | |||
55060f656e | |||
42c23d3864 | |||
f64a0be6fa | |||
b43cbf77c2 | |||
568b5a99f6 | |||
12d9e5eaf8 | |||
e594915e80 | |||
78974b7453 | |||
1a4e61557f | |||
e13f58658d | |||
e4695e1ff4 | |||
a9b78923c0 | |||
d9b5b36c27 | |||
5b5d8c692e | |||
926b99cbfe | |||
52af262e16 | |||
0d5954cc3a | |||
370f921bc3 | |||
57dbf3292f | |||
3162a5abe6 | |||
3e5e5a1979 | |||
c13e7608fa | |||
2e9f69d58c | |||
02cbe0632f | |||
e09abdd330 | |||
7aec194cdb | |||
3da696276e | |||
cbfd53a36b | |||
ae50ff2a5c | |||
82e472ba46 | |||
bd2170e04b | |||
a1dd0b8f2b | |||
4a429357ef | |||
83c6e5d2ad | |||
d73b9d638e | |||
f9c92007db | |||
908bb93f82 | |||
c59af9cf89 | |||
855b5359be | |||
e4a49d5256 | |||
fe7906a194 | |||
7c85870352 | |||
2060e6ab07 | |||
b3d28a65d1 | |||
baa16d742b | |||
ba02a3e305 | |||
5e312bfe58 | |||
dacd9ca6df | |||
4eb1f8bd9e | |||
dc922b0258 | |||
91751afec8 | |||
30fb50d912 | |||
b872c53798 | |||
905a78a541 | |||
9ac823be2d | |||
de6ee1858b | |||
bd49ff5432 | |||
ae323affca | |||
b6a8b4a285 | |||
6ea5901775 | |||
6b1551d103 | |||
ed36098439 | |||
997b7be4c0 | |||
23097921cf | |||
237c4e2cc2 | |||
9bf0a20226 | |||
354c0a6f1c | |||
46408572bc | |||
0d51f7ea1e | |||
fcbaa23ccf | |||
70365b48d4 | |||
3c30e8248e | |||
73742a853f | |||
24a6dd0f2c | |||
2233250e4d | |||
c4a88e4d5b | |||
cd2932bde1 | |||
6fae23a432 | |||
6e2494ca0b | |||
8a6dc34b2c | |||
9f0cf15d2e | |||
700ec23bd4 | |||
fb93d841a5 | |||
a1be402638 | |||
9f22e53a3b | |||
e309b76c0a | |||
4d686a8836 | |||
b21bf3fffd | |||
7454389f48 | |||
b61e9db21e | |||
24d6b96ad7 | |||
13ad05c0b0 | |||
a8e331c322 | |||
b600332595 | |||
e734d1d0e2 | |||
c57ae83bfa | |||
c886a89b11 | |||
231c08eb97 | |||
4eca9caec1 | |||
bc8fef11f1 | |||
4d0598a011 | |||
038f693cae | |||
72d88a5298 | |||
bd50964651 | |||
105a5a2f33 | |||
62530e98b9 | |||
b3d1a3fc1a | |||
50a3c0f5bc | |||
d8fc4e80e3 | |||
9d76227982 | |||
3967fb8a9f | |||
29b4b665dc | |||
35f35b27be | |||
bf2bec0d4b | |||
6e1364b5c2 | |||
acddd70435 | |||
6c786f2a1a | |||
2696f42144 | |||
84e10e0470 | |||
65f4ffd15b | |||
deb611a0d2 | |||
29f03d0e96 | |||
4629410230 | |||
b9526d918d | |||
db3b021bfc | |||
3862f4d6ba | |||
555ede0fee | |||
7b90294b57 | |||
69881e75c7 | |||
533e22ab4f | |||
46c86a05bd | |||
e053d4b20c | |||
c1e19a21d0 | |||
3164215879 | |||
99367a9ec6 | |||
cd0f61da74 | |||
ce57b5a4a2 | |||
bf3b9c374e | |||
6021a0b83c | |||
89d0e6c063 | |||
a2eea76e70 | |||
2cb5e67d1f | |||
3a371c354b | |||
bdb080657d | |||
bf33230c26 | |||
45fc18576e | |||
b432f1d773 | |||
66cf643574 | |||
ada3b5f3b7 | |||
6405e5e8be | |||
460f25317f | |||
81d1a1a831 | |||
c01b289eaf | |||
a7b79022e5 | |||
bad2e8c237 | |||
b7be19dc1f | |||
b5a96dc4dc | |||
944ed32a37 | |||
773147ab9c | |||
52805d9745 | |||
8d793da6b6 | |||
91ace060bc | |||
ecac6a77f8 | |||
a886f6eede | |||
1197ce36b4 | |||
8b99c04a21 | |||
6ac973cfda | |||
c5e9e3ff5c | |||
cf1aaa3bdf | |||
39b3f50aa3 | |||
f7f1d85f80 | |||
5d2eb35574 | |||
93d58571cc | |||
1a290f96f2 | |||
304375268d | |||
9d89297c15 | |||
46f3b41393 | |||
bea2e6cd1f | |||
abf36e5d56 | |||
c9b6380ed0 | |||
4906f8105f |
4
.github/workflows/check-layouts.yml
vendored
4
.github/workflows/check-layouts.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
- run: python3 gen_layouts.py
|
||||
- name: "Check that the generated 'layouts.xml' is uptodate, otherwise run 'python3 gen_layouts.py'"
|
||||
- name: "Run 'python3 gen_layouts.py' to update generated files"
|
||||
run: git diff --exit-code
|
||||
check-layouts:
|
||||
name: check_layout.output
|
||||
@ -22,5 +22,5 @@ jobs:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
- run: python3 check_layout.py
|
||||
- name: "Check that the generated 'check_layout.output' is uptodate, otherwise run 'python3 check_layout.py'"
|
||||
- name: "Fix your layout accordingly or run 'python3 check_layout.py' to promote the warnings"
|
||||
run: git diff --exit-code
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -10,3 +10,4 @@
|
||||
/build
|
||||
# Directory _build is not used anymore
|
||||
/_build
|
||||
/release
|
||||
|
@ -10,11 +10,13 @@
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.view.im" android:resource="@xml/method"/>
|
||||
</service>
|
||||
<activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@mipmap/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/appTheme" android:exported="true" android:directBootAware="true">
|
||||
|
||||
<activity android:name="juloo.keyboard2.SettingsActivity" android:icon="@mipmap/ic_launcher" android:label="@string/settings_activity_label" android:theme="@style/settingsTheme" android:exported="true" android:directBootAware="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name="juloo.keyboard2.LauncherActivity" android:icon="@mipmap/ic_launcher" android:theme="@style/appTheme" android:exported="true" android:directBootAware="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
@ -190,6 +190,12 @@ As translations need to be updated regularly, you can subscribe to this issue
|
||||
to receive a notification when an update is needed:
|
||||
https://github.com/Julow/Unexpected-Keyboard/issues/373
|
||||
|
||||
### Adding Compose key sequences
|
||||
|
||||
New Compose sequences can be added into `srcs/compose/compose/extra.json`.
|
||||
If a entirely new family of sequences were to be added, a new `.json` file can
|
||||
be created in the same directory to host them.
|
||||
|
||||
### Adding key combinations
|
||||
|
||||
Key combinations are defined in `srcs/juloo.keyboard2/KeyModifier.java`.
|
||||
|
@ -25,7 +25,7 @@ Usage: to apply the symbols located in the corners of each key, slide your finge
|
||||
| <img src="/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot-4" /> | <img src="/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot-5" /> | <img src="/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" alt="Screenshot-6" /> |
|
||||
|
||||
## Similar apps
|
||||
* [Calculator++](https://github.com/Bubu/android-calculatorpp) - Calculator with a similar UX, swipe to corners for advanced math symbols and operators. Works up to Android 13 but maybe unmaintained.
|
||||
* [Calculator++](https://git.bubu1.eu/Bubu/android-calculatorpp) - Calculator with a similar UX, swipe to corners for advanced math symbols and operators.
|
||||
|
||||
## Contributing
|
||||
|
||||
|
Binary file not shown.
31
build.gradle
31
build.gradle
@ -2,25 +2,33 @@ plugins {
|
||||
id 'com.android.application' version '8.1.1'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
testImplementation "junit:junit:4.13.2"
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'juloo.keyboard2'
|
||||
compileSdk 33
|
||||
compileSdk 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId "juloo.keyboard2"
|
||||
minSdk 11
|
||||
targetSdkVersion 33
|
||||
versionCode 39
|
||||
versionName "1.27.0"
|
||||
minSdk 21
|
||||
targetSdkVersion 35
|
||||
versionCode 46
|
||||
versionName "1.30.3"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
java.srcDirs = ['srcs']
|
||||
java.srcDirs = ['srcs/juloo.keyboard2']
|
||||
res.srcDirs = ['res', 'build/generated-resources']
|
||||
assets.srcDirs = ['assets']
|
||||
}
|
||||
|
||||
test {
|
||||
java.srcDirs = ['test']
|
||||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
@ -84,9 +92,6 @@ android {
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
}
|
||||
|
||||
tasks.register('buildKeyboardFont') {
|
||||
println "\nBuilding assets/special_font.ttf"
|
||||
mkdir "$buildDir"
|
||||
@ -129,12 +134,8 @@ tasks.register('genLayoutsList') {
|
||||
tasks.register('checkKeyboardLayouts') {
|
||||
println "\nChecking layouts"
|
||||
exec {
|
||||
def layouts = new File(projectDir, "srcs/layouts").listFiles().findAll {
|
||||
it.name.endsWith(".xml")
|
||||
}
|
||||
workingDir = projectDir
|
||||
commandLine("python", "check_layout.py", *layouts)
|
||||
standardOutput = new FileOutputStream("${projectDir}/check_layout.output")
|
||||
commandLine("python", "check_layout.py")
|
||||
}
|
||||
}
|
||||
|
||||
@ -151,7 +152,7 @@ tasks.register('compileComposeSequences') {
|
||||
println "\nGenerating ${out}"
|
||||
exec {
|
||||
def sequences = new File(projectDir, "srcs/compose").listFiles().findAll {
|
||||
it.name.endsWith(".pre") || it.name.endsWith(".json")
|
||||
!it.name.endsWith(".py") && !it.name.endsWith(".md")
|
||||
}
|
||||
workingDir = projectDir
|
||||
commandLine("python", "srcs/compose/compile.py", *sequences)
|
||||
|
@ -1,145 +1,36 @@
|
||||
# arab_alt
|
||||
Layout includes some ASCII punctuation but not all, missing: !, ", ', +, -, /, :, ;, <, =, >, ?, [, \, ], _, |, ~
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# arab_hamvaj_tly
|
||||
Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], _, `, {, |, }
|
||||
Layout doesn't define some important keys, missing: esc, f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# arab_pc
|
||||
Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
|
||||
1 warnings
|
||||
# arab_pc_ckb
|
||||
Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ., :, ;, <, =, >, ?, `, |, ~
|
||||
1 warnings
|
||||
# arab_pc_hindu
|
||||
Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
|
||||
1 warnings
|
||||
# arab_pc_ir
|
||||
Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, }
|
||||
1 warnings
|
||||
# armenian_ph_am
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# beng_national
|
||||
Layout includes some ASCII punctuation but not all, missing: $
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# beng_provat
|
||||
Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, }
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# cyrl_jcuken_ru
|
||||
0 warnings
|
||||
# cyrl_jcuken_uk
|
||||
0 warnings
|
||||
# cyrl_ueishsht
|
||||
0 warnings
|
||||
# cyrl_yaverti
|
||||
Layout includes some ASCII punctuation but not all, missing: ~
|
||||
1 warnings
|
||||
# deva_alt
|
||||
Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), +, ., /, :, <, =, >, [, \, ], ^, _, `, {, |, }, ~
|
||||
Layout doesn't define some important keys, missing: esc, f11_placeholder, f12_placeholder, tab
|
||||
2 warnings
|
||||
# deva_inscript
|
||||
Duplicate keys: ।
|
||||
Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, |
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
3 warnings
|
||||
# grek_qwerty
|
||||
Duplicate keys: ;
|
||||
1 warnings
|
||||
# guj_phonetic_in
|
||||
Duplicate keys: ટ, ડ
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# hang_dubeolsik_kr
|
||||
0 warnings
|
||||
# hebr_1_il
|
||||
Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
|
||||
1 warnings
|
||||
# hebr_2_il
|
||||
Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
|
||||
1 warnings
|
||||
# latn_azerty_fr
|
||||
0 warnings
|
||||
# latn_bepo_fr
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# latn_bone
|
||||
Layout includes some ASCII punctuation but not all, missing: $
|
||||
Layout redefines the bottom row but some important keys are missing, missing: cursor_left, cursor_right, loc compose, loc end, loc home, loc page_down, loc page_up, loc switch_greekmath, loc voice_typing, switch_backward
|
||||
2 warnings
|
||||
# latn_colemak
|
||||
Some keys contain whitespaces, unexpected: ́
|
||||
1 warnings
|
||||
# latn_dvorak
|
||||
0 warnings
|
||||
# latn_neo2
|
||||
0 warnings
|
||||
# latn_qwerty_br
|
||||
0 warnings
|
||||
# latn_qwerty_cz
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# latn_qwerty_da
|
||||
0 warnings
|
||||
# latn_qwerty_es
|
||||
0 warnings
|
||||
# latn_qwerty_gb
|
||||
0 warnings
|
||||
# latn_qwerty_hu
|
||||
0 warnings
|
||||
# latn_qwerty_lv
|
||||
0 warnings
|
||||
# latn_qwerty_no
|
||||
0 warnings
|
||||
# latn_qwerty_pl
|
||||
0 warnings
|
||||
# latn_qwerty_ro
|
||||
0 warnings
|
||||
# latn_qwerty_se
|
||||
Duplicate keys: !, ', ,, -, ., ?
|
||||
1 warnings
|
||||
# latn_qwerty_sk
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# latn_qwerty_tly
|
||||
Duplicate keys: a, c, j, q
|
||||
Layout doesn't define some important keys, missing: esc, f11_placeholder, f12_placeholder, tab
|
||||
2 warnings
|
||||
# latn_qwerty_tr
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# latn_qwerty_us
|
||||
0 warnings
|
||||
# latn_qwerty_vi
|
||||
0 warnings
|
||||
# latn_qwertz
|
||||
0 warnings
|
||||
# latn_qwertz_cz
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
1 warnings
|
||||
# latn_qwertz_cz_multifunctional
|
||||
Layout includes some ASCII punctuation but not all, missing: `
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# latn_qwertz_de
|
||||
0 warnings
|
||||
# latn_qwertz_fr_ch
|
||||
0 warnings
|
||||
# latn_qwertz_hu
|
||||
0 warnings
|
||||
# latn_qwertz_sk
|
||||
Layout includes some ASCII punctuation but not all, missing: `
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
2 warnings
|
||||
# shaw_imperial_en
|
||||
0 warnings
|
||||
# urdu_phonetic_ur
|
||||
Duplicate keys:
|
||||
Layout includes some ASCII punctuation but not all, missing: <, >, ?, `, |, ~
|
||||
Layout doesn't define some important keys, missing: f11_placeholder, f12_placeholder
|
||||
Some keys contain whitespaces, unexpected:
|
||||
4 warnings
|
||||
arab_alt: Layout includes some ASCII punctuation but not all, missing: !, ", ', +, -, /, :, ;, <, =, >, ?, [, \, ], _, |, ~
|
||||
arab_hamvaj_tly: Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], _, `, {, |, }
|
||||
arab_pc: Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
|
||||
arab_pc_ckb: Layout includes some ASCII punctuation but not all, missing: ", %, ', +, ,, ;, <, =, >, ?, `, |, ~
|
||||
arab_pc_ckb_fa: Layout includes some ASCII punctuation but not all, missing: ", #, $, %, &, ', ,, /, ;, ?, @, \, ^, `, |, ~
|
||||
arab_pc_hindu: Layout includes some ASCII punctuation but not all, missing: !, ', +, ;, ?, \, |
|
||||
arab_pc_ir: Layout includes some ASCII punctuation but not all, missing: ", %, ', ,, /, ;, <, =, >, ?, [, \, ], `, {, |, }
|
||||
beng_national: Layout includes some ASCII punctuation but not all, missing: $
|
||||
beng_provat: Layout includes some ASCII punctuation but not all, missing: $, &, *, ., /, <, >, [, \, ], `, {, |, }
|
||||
cyrl_yaverti: Layout includes some ASCII punctuation but not all, missing: ~
|
||||
cyrl_yqukeng_tj: These keys are now added automatically, unexpected: f11_placeholder, f12_placeholder
|
||||
cyrl_yxukeng_os: Layout includes some ASCII punctuation but not all, missing: ", #, $, &, ', @, [, ], ~
|
||||
cyrl_yxukeng_os: These keys are now added automatically, unexpected: f11_placeholder, f12_placeholder
|
||||
deva_alt: Layout includes some ASCII punctuation but not all, missing: #, $, %, &, ', (, ), *, +, ., /, :, <, =, >, [, \, ], ^, _, `, {, |, }, ~
|
||||
deva_alt: Layout doesn't define some important keys, missing: delete
|
||||
deva_inscript: Duplicate keys: ।
|
||||
deva_inscript: Layout includes some ASCII punctuation but not all, missing: ", $, ', ^, _, `, |
|
||||
deva_phonetic_in: Duplicate keys: ट
|
||||
grek_qwerty: Duplicate keys: ;
|
||||
guj_phonetic_in: Duplicate keys: ટ, ડ
|
||||
hebr_1_il: Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
|
||||
hebr_2_il: Layout includes some ASCII punctuation but not all, missing: (, ), <, >, [, ], {, }
|
||||
kann_kannada: Layout includes some ASCII punctuation but not all, missing: #, $, %, (, ), *, +, /, <, =, >, [, \, ], ^, `, {, |, }, ~
|
||||
latn_bepo_fr: Missing important key, missing: loc capslock
|
||||
latn_bone: Missing important key, missing: loc capslock
|
||||
latn_colemak: Some keys contain whitespaces, unexpected: ́
|
||||
latn_dvorak: Missing important key, missing: loc capslock
|
||||
latn_neo2: Layout redefines the bottom row but some important keys are missing, missing: loc switch_clipboard
|
||||
latn_qwerty_se: Duplicate keys: !, ', ,, -, ., ?
|
||||
latn_qwerty_tly: Duplicate keys: a, c, j, q
|
||||
latn_qwerty_tly: Missing programming keys, missing: loc esc, loc tab
|
||||
latn_qwertz_cz_multifunctional: Layout includes some ASCII punctuation but not all, missing: `
|
||||
latn_qwertz_sk: Layout includes some ASCII punctuation but not all, missing: `
|
||||
urdu_phonetic_ur: Duplicate keys:
|
||||
urdu_phonetic_ur: Layout includes some ASCII punctuation but not all, missing: <, >, ?, `, |, ~
|
||||
urdu_phonetic_ur: Some keys contain whitespaces, unexpected:
|
||||
|
@ -1,17 +1,23 @@
|
||||
import xml.etree.ElementTree as ET
|
||||
import sys, os
|
||||
import sys, os, glob
|
||||
|
||||
warning_count = 0
|
||||
layout_file_name = 0
|
||||
warnings = []
|
||||
|
||||
KNOWN_NOT_LAYOUT = set([
|
||||
"number_row", "numpad", "pin",
|
||||
"bottom_row", "settings", "method",
|
||||
"greekmath", "numeric", "emoji_bottom_row" ])
|
||||
"greekmath", "numeric", "emoji_bottom_row",
|
||||
"clipboard_bottom_row" ])
|
||||
|
||||
KEY_ATTRIBUTES = set([
|
||||
"key0", "key1", "key2", "key3", "key4", "key5", "key6", "key7", "key8",
|
||||
"c", "nw", "ne", "sw", "se", "w", "e", "n", "s"
|
||||
])
|
||||
|
||||
def warn(msg):
|
||||
global warning_count
|
||||
print(msg)
|
||||
warning_count += 1
|
||||
global warnings
|
||||
warnings.append("%s: %s" % (layout_file_name, msg))
|
||||
|
||||
def key_list_str(keys):
|
||||
return ", ".join(sorted(list(keys)))
|
||||
@ -38,7 +44,7 @@ def unexpected_keys(keys, symbols, msg):
|
||||
def parse_row_from_et(row, keys, dup):
|
||||
for key in row:
|
||||
for attr in key.keys():
|
||||
if attr.startswith("key"):
|
||||
if attr in KEY_ATTRIBUTES:
|
||||
k = key.get(attr).removeprefix("\\")
|
||||
if k in keys: dup.add(k)
|
||||
keys.add(k)
|
||||
@ -67,10 +73,7 @@ def check_layout(layout):
|
||||
if len(dup) > 0: warn("Duplicate keys: " + key_list_str(dup))
|
||||
missing_some_of(keys, "~!@#$%^&*(){}`[]=\\-_;:/.,?<>'\"+|", "ASCII punctuation")
|
||||
missing_some_of(keys, "0123456789", "digits")
|
||||
missing_required(keys,
|
||||
["esc", "tab", "backspace", "delete",
|
||||
"f11_placeholder", "f12_placeholder"],
|
||||
"Layout doesn't define some important keys")
|
||||
missing_required(keys, ["backspace", "delete"], "Layout doesn't define some important keys")
|
||||
unexpected_keys(keys,
|
||||
["copy", "paste", "cut", "selectAll", "shareText",
|
||||
"pasteAsPlainText", "undo", "redo" ],
|
||||
@ -82,6 +85,11 @@ def check_layout(layout):
|
||||
unexpected_keys(keys, [""], "Layout contains empty strings")
|
||||
unexpected_keys(keys, ["loc"], "Special keyword cannot be a symbol")
|
||||
unexpected_keys(keys, filter(lambda k: k.strip()!=k, keys), "Some keys contain whitespaces")
|
||||
unexpected_keys(keys, ["f11_placeholder", "f12_placeholder"], "These keys are now added automatically")
|
||||
|
||||
if root.get("script", "latin") == "latin":
|
||||
missing_required(keys, ["shift", "loc capslock"], "Missing important key")
|
||||
missing_required(keys, ["loc esc", "loc tab"], "Missing programming keys")
|
||||
|
||||
_, bottom_row_keys, _ = parse_row("res/xml/bottom_row.xml")
|
||||
|
||||
@ -95,15 +103,17 @@ def check_layout(layout):
|
||||
if root.get("script") == None:
|
||||
warn("Layout doesn't specify a script.")
|
||||
|
||||
for fname in sorted(sys.argv[1:]):
|
||||
for fname in sorted(glob.glob("srcs/layouts/*.xml")):
|
||||
layout_id, _ = os.path.splitext(os.path.basename(fname))
|
||||
if layout_id in KNOWN_NOT_LAYOUT:
|
||||
continue
|
||||
layout_file_name = layout_id
|
||||
layout = parse_layout(fname)
|
||||
if layout == None:
|
||||
print("Not a layout file: %s" % layout_id)
|
||||
warn("Not a layout file")
|
||||
else:
|
||||
print("# %s" % layout_id)
|
||||
warning_count = 0
|
||||
check_layout(layout)
|
||||
print("%d warnings" % warning_count)
|
||||
|
||||
with open("check_layout.output", "w") as out:
|
||||
for w in warnings:
|
||||
print(w, file=out)
|
||||
|
156
doc/Custom-layouts.md
Normal file
156
doc/Custom-layouts.md
Normal file
@ -0,0 +1,156 @@
|
||||
# Custom layouts
|
||||
You select a key layout for Unexpected Keyboard by calling up the Settings page (swipe the gear icon) and, at the top of the page, either tapping an existing layout or tapping _Add an alternate layout_. This displays a menu of available layouts. You can define your own layout by choosing _Custom layout_ at the bottom of this menu. Unexpected Keyboard now displays code in the XML format. You make changes by replacing this with different code and tapping OK.
|
||||
|
||||
We recommend you keep your work in a file outside Unexpected Keyboard (named something like `MyChanges.xml`). If you installed a new version of Unexpected from a different website (with a different signature), then the work you did solely by editing the XML inside Unexpected would be lost.
|
||||
|
||||
Put initial contents into your file in one of these ways:
|
||||
* Copypaste the code Unexpected displays for _Custom layout_.
|
||||
* Make a copy of one of the built-in layouts found in [`/srcs/layouts`](https://github.com/Julow/Unexpected-Keyboard/tree/master/srcs/layouts).
|
||||
* Use the [web-based editor](https://unexpected-keyboard-layout-editor.lixquid.com/). Interact with this web page to define keys and swipes and move keys to desired positions, and it will write the XML code for you. You can make the web page put the XML in a text file or copy it to the clipboard.
|
||||
|
||||
When you have prepared suitable XML code in one of these ways, copy it to the clipboard and paste it into Unexpected Keyboard.
|
||||
|
||||
## XML language overview
|
||||
A layout XML file comprises tags that start with `<` and end with `>`.
|
||||
* Every layout file starts with this declaration:
|
||||
`<?xml version="1.0" encoding="utf-8"?>`
|
||||
* Certain tags come in pairs—an opening tag and a closing tag—and apply to everything between them.
|
||||
* The `<keyboard>`...`</keyboard>` pair says that the material between them is the definition of your keyboard. There can be only one of these.
|
||||
* The `<row>`...`</row>` pair encloses the definition of a single row.
|
||||
* An optional `<modmap>`...`</modmap>` pair contains instructions if you want to change the behavior of a modifier key such as Shift.
|
||||
* Stand-alone tags include `<key`...`/>`, which defines a single key.
|
||||
|
||||
A tag can have properties, defined using an equals sign and a pair of ASCII double quotes. For example, `<key c="a" />` defines the "a" key. The `c` property of the `key` tag says which key you are defining, and the tag's location inside `<row>`...`</row>` specifies where it will go in the row.
|
||||
|
||||
### Example
|
||||
Here is a complete keyboard file with a single row containing an "a" key on the left and a "b" key on the right:
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard name="Simple example" script="latin">
|
||||
<row>
|
||||
<key c="a" />
|
||||
<key c="b" />
|
||||
</row>
|
||||
</keyboard>
|
||||
|
||||
## Keyboard metadata
|
||||
|
||||
The `<keyboard>`...`</keyboard>` pair follows the declaration tag and encloses the whole keyboard. The following properties may be used (The first two appear in the example above):
|
||||
|
||||
* `name`: The name of the keyboard. The name you specify will appear in the Settings menu. If not present, the layout will just appear as “Custom layout”.
|
||||
|
||||
* `script`: The (main) writing system that the keyboard supports. The possible values are `arabic`, `armenian`, `bengali`, `cyrillic`, `devanagari`, `gujarati`, `hangul`, `hebrew`, `latin`, `persian`, `shavian`, and `urdu`. It defaults to `latin`.
|
||||
|
||||
* `numpad_script`: The script to use for the numpad. This is useful for scripts where a different, non-ASCII set of numerals is used, like Devanagari and Arabic. It defaults to the same as `script`.
|
||||
|
||||
* `bottom_row`: Whether or not to show the built-in bottom row. It accepts `true` or `false`, and defaults to `true`. If your custom layout defines the bottom row, then specify `bottom_row="false"` to disable the built-in bottom row.
|
||||
+ We recommend your layout use the built-in bottom row, because it is still evolving and your layout will incorporate innovations in future versions. However, to define your own, the current definition of the bottom row is in [bottom_row.xml](https://github.com/Julow/Unexpected-Keyboard/res/xml/bottom_row.xml). You can copypaste this XML into your custom layout as a starting point.
|
||||
+ Likewise, the current definition of the top (number) row is in [number_row.xml](https://github.com/Julow/Unexpected-Keyboard/res/xml/number_row.xml).
|
||||
|
||||
* `embedded_number_row`: Whether the layout has an embedded number row, and thus the "Show number row" setting shouldn't add another one. It accepts `true` or `false`, and defaults to `false`.
|
||||
|
||||
* `locale_extra_keys`: Whether Unexpected should add language-dependent extra keys from [method.xml](../res/xml/method.xml) to this layout. It accepts `true` or `false`, and defaults to `true`. To disable these automatic additions, specify `locale_extra_keys="false"`.
|
||||
|
||||
## Row
|
||||
The `<row>`...`</row>` pair encloses one row on the keyboard. It has only one optional property:
|
||||
* `height`: The height of the row: a positive floating-point value.
|
||||
|
||||
A row's default height is 1.0 (one quarter of the keyboard height specified on the Settings menu). The `height` property makes the row taller or shorter than this. For example, if you define a 5-row keyboard but one row has `height="0.7"`, then the keyboard's total height is 4.7 units. If the total is different from 4.0, the keyboard will be taller or shorter than that specified in Settings.
|
||||
|
||||
## Key
|
||||
The `<key />` tag defines a key on the keyboard. Its position in the sequence of keys inside `<row>`...`</row>` indicates its position in the row from left to right. What the key does is defined by optional properties.
|
||||
|
||||
### Taps
|
||||
What the key does when tapped is defined by the optional `c` property. For example, `<key c="a" />` defines the "a" key. Unexpected Keyboard provides a legend in the middle of the key.
|
||||
|
||||
When the Shift modifier is tapped, the "a" key becomes the "A" key and the legend temporarily changes. The Fn modifier makes a different change. You can override this behavior with a modmap (see below).
|
||||
|
||||
### Swipes
|
||||
The following optional properties define the effects of swipes:
|
||||
* `n`, `ne`, `e`, `se`, `s`, `sw`, `w`, `nw`: What the key should do when it is swiped in the direction of that compass point. ("North" means upward and "East" is to the right.)
|
||||
<TABLE ALIGN=CENTER>
|
||||
<TR>
|
||||
<TD STYLE="width: 6em;">nw</TD><TD>n</TD><TD>ne</TD>
|
||||
</TR>
|
||||
<TR ALIGN=CENTER>
|
||||
<TD>w</TD><TD>c</TD><TD>e</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>sw</TD><TD>s</TD><TD>se</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
* `key1` through `key8` is an older way to achieve the same effects. The directions are ordered as follows:
|
||||
<TABLE ALIGN=CENTER>
|
||||
<TR>
|
||||
<TD>key1</TD><TD>key7</TD><TD>key2</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>key5</TD><TD>key0</TD><TD>key6</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD>key3</TD><TD>key8</TD><TD>key4</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
You can define a swipe only once with either compass-point or numeric notation. Unexpected Keyboard automatically puts a small legend in that direction from the center of the key.
|
||||
|
||||
* `anticircle`: The key value to send when doing an anti-clockwise gesture on the key.
|
||||
|
||||
### Layout
|
||||
A key may have the following properties to control the row's layout:
|
||||
* `width`: The width of the key, a positive floating-point value. It defaults to 1.0
|
||||
* `shift`: How much empty space to add to the left of this key, a non-negative floating-point value. It defaults to 0.0
|
||||
|
||||
Normally, a key's width is 1.0 unit. Unexpected Keyboard occupies the full width of the screen, and the row defining the highest number of units (in widths plus shifts) is as wide as the screen. A row whose width is a smaller number of units has empty space on the right.
|
||||
|
||||
### Extra legend
|
||||
* `indication`: An optional extra legend to show under the main label. For example, `<key c="2" indication="ABC" />` displays ABC at the bottom of the 2 key, as on a pinpad or some telephones. If the key also defines a downward swipe with `s` or `key8`, the legends overlap.
|
||||
|
||||
### Possible key values
|
||||
Built-in strings that assign a special function to a key are described in [this page](Possible-key-values.md). For example, `se="copy"` means a southeasterly swipe produces the Copy key. If a key value does not match any of the built-in strings, it outputs that text _verbatim_. For example, `c="a"` simply outputs the letter a.
|
||||
|
||||
In a layout, a key value can also start with the `loc` prefix. These are place-holders; the tap or swipe does nothing unless enabled through the "Add keys to keyboard" option in the Settings menu, or implicitly enabled by the language the device is set to use. For example, `ne="loc accent_aigu"` says that a northeast swipe produces the acute accent combinatorial key—if enabled.
|
||||
|
||||
## Modmap
|
||||
The `<modmap>`...`</modmap>` pair encloses custom mappings for modifier keys. The modmap is placed inside the `<keyboard>`...`</keyboard>` pair, but outside any row. A layout can have at most one modmap. It can contain any number of mappings. Each mapping has an `a` property and a `b` property and maps the `a` key to the `b` key. Valid values are listed in [Possible key values](Possible-key-values.md).
|
||||
|
||||
The following mappings are supported:
|
||||
|
||||
```xml
|
||||
<shift a="before" b="after" />
|
||||
```
|
||||
This means that when the Shift modifier is on, the key `before` is changed into `after`.
|
||||
|
||||
```xml
|
||||
<fn a="before" b="after" />
|
||||
```
|
||||
This means that when the Fn modifier is on, the key `before` is changed into `after`.
|
||||
|
||||
```xml
|
||||
<ctrl a="before" b="after" />
|
||||
```
|
||||
This means that when the Ctrl modifier is on, the key `before` is changed into `after`. The `<ctrl />` mapping is special in that the Ctrl modifier is applied to `after` after the mapping.
|
||||
|
||||
The clockwise circle and the round-trip gestures are affected by both `<shift />` and `<fn />` mappings. The Shift mappings are used first and if that did not modify the key, the Fn mappings are used instead.
|
||||
|
||||
### Examples
|
||||
① Turkish keyboards use the Latin alphabet, but when "i" is shifted, it should produce "İ". This is achieved with the following mapping:
|
||||
|
||||
```xml
|
||||
<shift a="i" b="İ" />
|
||||
```
|
||||
② Cyrillic layouts have no V key. A layout can define Ctrl-V with the following mapping:
|
||||
|
||||
```xml
|
||||
<ctrl a="в" b="v" />
|
||||
```
|
||||
This maps Ctrl+в to Ctrl+V—not to v.
|
||||
|
||||
## Portrait vs. landscape
|
||||
Unexpected Keyboard remembers *separately* which layout has last been used in portrait and landscape orientation. So you may have one custom layout for portrait orientation, but another custom layout for landscape orientation, and Unexpected Keyboard will switch between them without your intervention.
|
||||
|
||||
## Contributing your layout
|
||||
The Unexpected Keyboard project enthusiastically accepts user contributions, including custom layouts. (See the guidance for layouts at [CONTRIBUTING.md](https://github.com/Julow/Unexpected-Keyboard/blob/master/CONTRIBUTING.md#Adding-a-layout)).
|
||||
* Submit a layout that has innovations of possible interest to other users at [Unexpected-Keyboard-layouts](https://github.com/Julow/Unexpected-Keyboard-layouts).
|
||||
* Propose that your layout be included in the set of built-in layouts by making a Pull Request for an addition to [srcs/layouts](https://github.com/Julow/Unexpected-Keyboard/tree/master/srcs/layouts). Please show that such a layout is standard in your locale or has a substantial number of users.
|
188
doc/Possible-key-values.md
Normal file
188
doc/Possible-key-values.md
Normal file
@ -0,0 +1,188 @@
|
||||
# Key values
|
||||
|
||||
A key value defines what a key on the keyboard does when pressed or swiped.
|
||||
|
||||
Key values appear in the following places:
|
||||
|
||||
- In custom layouts, they are the value of: the `c` attribute, the compass-point attributes `nw` ... `se`, and the old-style `key0` ... `key8` attributes.
|
||||
- Internally, they are used in the definition of the "Add keys to the keyboard" setting.
|
||||
|
||||
Key values can be any of the following:
|
||||
|
||||
- The name of a special key. A complete list of valid special keys follows.
|
||||
|
||||
- An arbitrary sequence of characters not containing `:`.
|
||||
This results in a key that writes the specified characters.
|
||||
|
||||
- The syntax `legend:key_def`.
|
||||
`legend` is the visible legend on the keyboard. It cannot contain `:`.
|
||||
`key_def` can be:
|
||||
+ The name of a special key, as listed below.
|
||||
+ `'string'` An arbitrary string that can contain `:`. `'` can be added to the string as `` \' ``.
|
||||
+ `keyevent:keycode` An Android keycode. They are listed as `KEYCODE_...` in [KeyEvent](https://developer.android.com/reference/android/view/KeyEvent#summary).
|
||||
|
||||
Examples:
|
||||
+ `⏯:keyevent:85` A play/pause key (which has no effect in most apps).
|
||||
+ `my@:'my.email@domain.com'` A key that sends an arbitrary string
|
||||
|
||||
- A macro, `symbol:key_def1,key_def2,...`.
|
||||
This results in a key that behaves as if the sequence of `key_def` had been pressed in order.
|
||||
|
||||
Examples:
|
||||
+ `CA:ctrl,a,ctrl,c` A key with legend CA that sends the sequence `ctrl+a`, `ctrl+c`.
|
||||
+ `Cd:ctrl,backspace` A key with legend Cd that sends the shortcut `ctrl+backspace`.
|
||||
|
||||
## Escape codes
|
||||
Value | Escape code for
|
||||
:---- | :------
|
||||
`\?` | `?`
|
||||
`\#` | `#`
|
||||
`\@` | `@`
|
||||
`\n` | Literal newline character. This is different from `enter` and `action` in certain apps.
|
||||
`\t` | Literal tab character. This is different from `tab` in certain apps.
|
||||
`\\` | `\`
|
||||
|
||||
XML escape codes also work, including:
|
||||
|
||||
Value | Escape code for
|
||||
:------- | :------
|
||||
`&` | `&`
|
||||
`<` | `<`
|
||||
`>` | `>`
|
||||
`"` | `"`
|
||||
|
||||
## Modifiers
|
||||
System modifiers are sent to the app, which can take app-specific action.
|
||||
|
||||
Value | Meaning
|
||||
:---------- | :------
|
||||
`shift` | System modifier.
|
||||
`ctrl` | System modifier.
|
||||
`alt` | System modifier.
|
||||
`meta` | System modifier. Equivalent to the Windows key.
|
||||
|
||||
The other modifiers take effect only within the keyboard.
|
||||
|
||||
Value | Meaning
|
||||
:---------- | :------
|
||||
`fn` | Activates Fn mode, which assigns letters and symbols to special characters. Example: `fn` `!` = `¡`
|
||||
`compose` | Compose key. Enables composing characters using Linux-like shortcuts. Example: `Compose` `A` `'` types `Á` (A with acute accent).
|
||||
`capslock` | Activates and locks Shift.
|
||||
|
||||
## App function keys
|
||||
These keys are sent to apps, which are free to ignore them. The keyboard does not perform editing in response to these keys.
|
||||
|
||||
`esc`, `enter`,
|
||||
`up`, `right`,
|
||||
`down`, `left`,
|
||||
`page_up`, `page_down`,
|
||||
`home`, `end`,
|
||||
`backspace`, `delete`,
|
||||
`insert`, `scroll_lock`,
|
||||
`f1`-`f12`,
|
||||
`tab`, `copy`,
|
||||
`paste`, `cut`,
|
||||
`selectAll`, `pasteAsPlainText`,
|
||||
`undo`, `redo`
|
||||
|
||||
## Keyboard editing actions
|
||||
In contrast, these keys perform editing on the text without sending anything to the app.
|
||||
Value | Meaning
|
||||
:-------------------- | :------
|
||||
`cursor_left` | Moves the cursor to the left with the slider gesture.
|
||||
`cursor_right` | Moves the cursor to the right with the slider gesture.
|
||||
`cursor_up` | Moves the cursor up with the slider gesture. Warning: this might make the cursor leave the text box.
|
||||
`cursor_down` | Moves the cursor down with the slider gesture. Warning: this might make the cursor leave the text box.
|
||||
`delete_word` | Delete the word to the left of the cursor.
|
||||
`forward_delete_word` | Delete the word to the right of the cursor.
|
||||
|
||||
## Whitespace
|
||||
Value | Meaning
|
||||
:------ | :------
|
||||
`space` | Space bar.
|
||||
`nbsp` | Non-breaking space.
|
||||
`nnbsp` | Narrow non-breaking space.
|
||||
`zwj` | Zero-width joiner.
|
||||
`zwnj` | Zero-width non-joiner.
|
||||
|
||||
## Other modifiers and diacritics
|
||||
Value | Meaning
|
||||
:------------------- | :------
|
||||
`accent_aigu` | Acute accent. `á`
|
||||
`accent_caron` | Háček. `č`
|
||||
`accent_cedille` | Cedilla. `ç`
|
||||
`accent_circonflexe` | Circumflex. `â`
|
||||
`accent_grave` | Grave accent. `à`
|
||||
`accent_macron` | Macron. `ā`
|
||||
`accent_ring` | Ring accent. `å`
|
||||
`accent_tilde` | Tilde. `ã`
|
||||
`accent_trema` | Dieresis/umlaut. `ä`
|
||||
`accent_ogonek` | Ogonek. `ą`
|
||||
`accent_dot_above` | Dot accent. `ż` If applied to the lowercase `i`, removes the dot instead for Turkish. `ı`
|
||||
`accent_double_aigu` | Double acute accent. `ő`
|
||||
`accent_slash` | Slash through. `ø`
|
||||
`accent_arrow_right` | Right arrow above, used to denote a vector. `a⃗`
|
||||
`accent_breve` | Breve. `ă`
|
||||
`accent_bar` | Bar/strikethrough. `ɨ`
|
||||
`accent_dot_below` | Dot below. `ạ`
|
||||
`accent_horn` | Horn accent. `ơ`
|
||||
`accent_hook_above` | Hook accent. `ả`
|
||||
`accent_double_grave` | Double grave accent. `ȁ`
|
||||
`superscript` | Superscript. `ᵃ`
|
||||
`subscript` | Subscript. `ₐ`
|
||||
`ordinal` | Turns `a` and `o` into `ª` and `º`.
|
||||
`arrows` | Turns `1`-`4` and `6`-`9` into arrows.
|
||||
`box` | Turns `1`-`9`, `0`, and `.` into single-line, thin box-drawing characters.
|
||||
|
||||
## Bidirectional
|
||||
Value | Meaning
|
||||
:------ | :------
|
||||
`lrm` | Left-to-right mark.
|
||||
`rlm` | Right-to-left mark.
|
||||
`b(`, `b)`, `b[`, `b]`, `b{`, `b}`, `blt`, `bgt` | Sends the bracket characters, but with mirrored key legends for right-to-left languages. (`blt` and `bgt` print `<` and `>` respectively.)
|
||||
|
||||
## Hebrew
|
||||
Keys ending in `_placeholder` are normally hidden unless the Fn key is pressed.
|
||||
|
||||
`qamats`, `patah`,
|
||||
`sheva`, `dagesh`,
|
||||
`hiriq`, `segol`,
|
||||
`tsere`, `holam`,
|
||||
`qubuts`, `hataf_patah`,
|
||||
`hataf_qamats`, `hataf_segol`,
|
||||
`shindot`, `shindot_placeholder`,
|
||||
`sindot`, `sindot_placeholder`,
|
||||
`geresh`, `gershayim`,
|
||||
`maqaf`, `rafe`,
|
||||
`ole`, `ole_placeholder`,
|
||||
`meteg`, `meteg_placeholder`
|
||||
|
||||
## Keyboard behavior keys
|
||||
Value | Meaning
|
||||
:--------------------- | :------
|
||||
`config` | Gear icon; opens Unexpected Keyboard settings.
|
||||
`switch_text` | Switch to the text layer (main layer).
|
||||
`switch_numeric` | Switch to the numeric layer.
|
||||
`switch_emoji` | Switch to the emoji layer.
|
||||
`switch_back_emoji` | Switch to the text layer from the emoji layer.
|
||||
`switch_forward` | Change the keyboard layout, as long as Unexpected Keyboard has multiple keyboard layouts enabled in the settings.
|
||||
`switch_backward` | Change the keyboard layout to the previous one in the list.
|
||||
`switch_greekmath` | Switch to the Greek & Math Symbols layer.
|
||||
`switch_clipboard` | Switch to the clipboard pane.
|
||||
`change_method` | Open the input method picker dialog.
|
||||
`change_method_prev` | Switch to the previously used input method.
|
||||
`action` | Performs a special context-sensitive operation related to the Enter key. For example, in the Twitter (X) app, `enter` adds a new line, while `action` posts.
|
||||
`voice_typing` | Begin voice typing.
|
||||
`voice_typing_chooser` | Shows a menu where you can choose which voice typing provider to use, then begins voice typing when you make a selection.
|
||||
`shareText` | Emit a share Intent for the selected text. **Oddity:** This is in CamelCase.
|
||||
|
||||
## Unused
|
||||
These keys are known to do nothing.
|
||||
|
||||
`replaceText`, `textAssist`,
|
||||
`autofill`, `removed`
|
||||
|
||||
## Placeholders
|
||||
These keys are normally hidden unless the Fn modifier is activated.
|
||||
|
||||
`f11_placeholder` | `f12_placeholder`
|
11
fastlane/metadata/android/en-US/changelogs/40.txt
Normal file
11
fastlane/metadata/android/en-US/changelogs/40.txt
Normal file
@ -0,0 +1,11 @@
|
||||
MessagEase and Thumb-Key inspired gestures with the anti-clockwise circle being
|
||||
completely configurable.
|
||||
|
||||
Updated emojis.
|
||||
Improved Hangul (Korean) support.
|
||||
Added Danish support.
|
||||
Improved spacebar slider.
|
||||
Updated translations.
|
||||
Various improvements and fixes to the app and layouts.
|
||||
|
||||
Many thanks to the contributors: @alotbsol555 @bkmgit @Cheesebaron @CloneWith @eandersons @JapanYoshi @Julow @la-ninpre @m15a @marciozomb13 @polyctena @solokot @Spike-from-NH @tmqCypher @Validbit
|
8
fastlane/metadata/android/en-US/changelogs/41.txt
Normal file
8
fastlane/metadata/android/en-US/changelogs/41.txt
Normal file
@ -0,0 +1,8 @@
|
||||
Clipboard pane
|
||||
|
||||
New Monet theme
|
||||
Improvements to custom layouts
|
||||
Options to disable key repeat and the circle gesture
|
||||
Options to disable the Tab and Esc keys
|
||||
|
||||
Many thanks to the contributors: @alotbsol555 @ChasmSolacer @eandersons @polyctena @Sestowner @solokot @Spike-from-NH @TadaCZE @V6lhost @Validbit
|
6
fastlane/metadata/android/en-US/changelogs/42.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/42.txt
Normal file
@ -0,0 +1,6 @@
|
||||
Fix crash on Android 6.
|
||||
Fix scaling issues for layouts with few columns.
|
||||
Added Serbian layouts.
|
||||
Layout and compose key tweaks. Improvements to custom layouts. Added Menu key.
|
||||
|
||||
Many thanks to the contributors: @adrian4096 @asivery @bokidori @dingodoppelt @RZHSSNZDH
|
14
fastlane/metadata/android/en-US/changelogs/43.txt
Normal file
14
fastlane/metadata/android/en-US/changelogs/43.txt
Normal file
@ -0,0 +1,14 @@
|
||||
New supported languages: Albanian, Belgian, Estonian, Georgian, Hawaiian,
|
||||
Irish, Kannada, Kazakh, Old Church Slavonic, Serbian, Tajiki, Tamil, Welsh
|
||||
|
||||
Added WORKMAN (US) layout.
|
||||
Improved layouts for modern Hindi and Sanskrit, Greek, Kurdish, Persian, Czech.
|
||||
|
||||
New compose sequences and added combining diacritic keys.
|
||||
New and improved themes.
|
||||
Many bug fixes and improvements.
|
||||
|
||||
Many thanks to the contributors: @anaskaejdar @bokidori @cknight828 @cuhsy
|
||||
@Danger-Mkh @DocJr90 @IYO-OYI @kalankaboom @Kxeo @marciozomb13 @ms-jagadeeshan
|
||||
@npnpatidar @ptitgnu @quantenzitrone @Sestowner @solokot @Spike-from-NH
|
||||
@tenextractor
|
1
fastlane/metadata/android/en-US/changelogs/44.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/44.txt
Normal file
@ -0,0 +1 @@
|
||||
Bug fixes
|
1
fastlane/metadata/android/en-US/changelogs/45.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/45.txt
Normal file
@ -0,0 +1 @@
|
||||
Bug fixes
|
1
fastlane/metadata/android/en-US/changelogs/46.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/46.txt
Normal file
@ -0,0 +1 @@
|
||||
Bug fixes
|
7
fastlane/metadata/android/ja-JP/full_description.txt
Normal file
7
fastlane/metadata/android/ja-JP/full_description.txt
Normal file
@ -0,0 +1,7 @@
|
||||
このキーボードは、キーの角をスワイプすることで様々なキーを入力できます。
|
||||
|
||||
このアプリは元々はTermuxでのプログラミング用に設計されました。
|
||||
しかし、今では普段の入力にも適しています。
|
||||
PCキーボードでの半角入力を再現しています。日本語入力、変換は出来ません。
|
||||
|
||||
このアプリは広告を含まず、インターネットに接続せず、そしてオープンソースです。
|
1
fastlane/metadata/android/ja-JP/short_description.txt
Normal file
1
fastlane/metadata/android/ja-JP/short_description.txt
Normal file
@ -0,0 +1 @@
|
||||
軽量でプライバシーに配慮したAndroid用仮想キーボード
|
1
fastlane/metadata/android/ja-JP/title.txt
Normal file
1
fastlane/metadata/android/ja-JP/title.txt
Normal file
@ -0,0 +1 @@
|
||||
Unexpected Keyboard
|
@ -1,18 +1,6 @@
|
||||
이 앱은 안드로이드용 가상 키보드입니다. 주요 기능은 스와이프 제스처를 사용하여 모든 ASCII 문자를 쉽게 입력할 수 있다는 점과 악센트 및 수정자 키를 위한 데드 키와 특수 키(tab, esc, 방향키 등)이 있다는 것입니다.
|
||||
주요 기능은 모서리 방향으로 키를 스와이프하여 더 많은 문자를 입력할 수 있다는 것입니다.
|
||||
|
||||
키보드는 각 키의 모서리에 최대 4개의 추가 문자를 표시합니다. 이러한 추가 문자는 키에서 손가락을 스와이프하여 적중됩니다.
|
||||
이 앱은 처음에는 Termux를 사용하는 프로그래머들을 위한 것으로 개발되었습니다.
|
||||
지금은 일상적인 용도로도 완벽합니다.
|
||||
|
||||
일부 하이라이트 기능:
|
||||
|
||||
- PC 키보드에서 사용할 수 있는 모든 문자 및 특수 키를 사요 가능합니다. 이것은 Termux와 같은 앱을 사용하는 데 효과적입니다.
|
||||
|
||||
- 여기에는 Tab, Esc, 방향키 및 function 키뿐만이 아닌 Ctrl 및 Alt 키도 포함되어 있습니다 !
|
||||
|
||||
- 악센트 키는 데드 키를 사용하여 액세스할 수 있습니다. 먼저 악센트 키를 활성화한 다음 악센트 문자를 입력합니다.
|
||||
|
||||
- 매우 가볍고 빠릅니다. Google 키보드보다 500배, 기본 키보드보다 15배 적은 공간을 사용합니다. 광고와 사용 기록 추적 없음.
|
||||
|
||||
- 다중 레이아웃: QWERTY, QWERTZ, AZERTY. 다양한 테마: White, Dark, OLED Black. 또한 다른 많은 옵션들.
|
||||
|
||||
다른 가상 키보드와 마찬가지로 시스템 설정에서 활성화해야 합니다. 시스템 설정을 열고 다음으로 이동합니다.
|
||||
시스템 > 언어 및 입력 > 키보드 > 키보드 관리.
|
||||
이 응용 프로그램에는 광고가 없으며 네트워크 요청을 하지 않고 오픈 소스입니다.
|
||||
|
@ -52,7 +52,7 @@ def generate_arrays(out, layouts):
|
||||
values_items, entries_items = zip(*(system_item + layouts + custom_item)) # unzip
|
||||
ids_items = map(lambda s: "@xml/%s" % s if s not in ["system", "custom"] else "-1", values_items)
|
||||
root = XML.Element("resources")
|
||||
root.append(XML.Comment(text="DO NOT EDIT. This file is generated, see gen_layouts.py."))
|
||||
root.append(XML.Comment(text=" DO NOT EDIT. This file is generated, run 'gradle genLayoutsList'. "))
|
||||
root.append(mk_array("string-array", "pref_layout_values", values_items))
|
||||
root.append(mk_array("string-array", "pref_layout_entries", entries_items))
|
||||
root.append(mk_array("integer-array", "layout_ids", ids_items))
|
||||
|
38
res/drawable/doc_anim_circle.xml
Normal file
38
res/drawable/doc_anim_circle.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0"?>
|
||||
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<aapt:attr name="android:drawable">
|
||||
<vector android:name="vector" android:width="35dp" android:height="40dp" android:viewportWidth="35" android:viewportHeight="40">
|
||||
<path android:name="trace" android:pathData="M 17.5 20 C 20 3 26 7 27.5 10" android:strokeColor="#09b3f1" android:strokeWidth="2" android:strokeLineCap="round"/>
|
||||
<group android:name="pointer_g">
|
||||
<path android:name="pointer" android:pathData="m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0" android:fillColor="#09b3f1" android:strokeColor="#09b3f1" android:strokeWidth="2" android:fillAlpha="0" android:strokeAlpha="0"/>
|
||||
</group>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="trace">
|
||||
<aapt:attr name="android:animation">
|
||||
<set>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="trimPathEnd" android:duration="700" android:valueFrom="0" android:valueTo="1" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="pointer">
|
||||
<aapt:attr name="android:animation">
|
||||
<set>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
<target android:name="pointer_g">
|
||||
<aapt:attr name="android:animation">
|
||||
<set>
|
||||
<objectAnimator android:propertyXName="translateX" android:propertyYName="translateY" android:duration="700" android:pathData="M 17.5 20 C 20 3 26 7 27 10" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
33
res/drawable/doc_anim_round_trip.xml
Normal file
33
res/drawable/doc_anim_round_trip.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0"?>
|
||||
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<aapt:attr name="android:drawable">
|
||||
<vector android:name="vector" android:width="35dp" android:height="40dp" android:viewportWidth="35" android:viewportHeight="40">
|
||||
<path android:name="trace" android:pathData="M 0 0" android:fillColor="#09b3f1" android:strokeColor="#09b3f1" android:strokeWidth="2" android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="trace">
|
||||
<aapt:attr name="android:animation">
|
||||
<set>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator
|
||||
android:propertyName="pathData"
|
||||
android:duration="350"
|
||||
android:valueFrom="M 17.5 20.0 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 17.5,20.0"
|
||||
android:valueTo="M 31 4 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 31,4"
|
||||
android:valueType="pathType"
|
||||
android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator
|
||||
android:propertyName="pathData"
|
||||
android:startOffset="400"
|
||||
android:duration="800"
|
||||
android:valueFrom="M 31 4 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 31,4"
|
||||
android:valueTo="M 17.5 20.0 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 31,4"
|
||||
android:valueType="pathType"
|
||||
android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
25
res/drawable/doc_anim_swipe.xml
Normal file
25
res/drawable/doc_anim_swipe.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0"?>
|
||||
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt">
|
||||
<aapt:attr name="android:drawable">
|
||||
<vector android:name="vector" android:width="35dp" android:height="40dp" android:viewportWidth="35" android:viewportHeight="40">
|
||||
<path android:name="trace" android:pathData="M 0 0" android:fillColor="#09b3f1" android:strokeColor="#09b3f1" android:strokeWidth="2" android:strokeLineCap="round"/>
|
||||
</vector>
|
||||
</aapt:attr>
|
||||
<target android:name="trace">
|
||||
<aapt:attr name="android:animation">
|
||||
<set>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:duration="100" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" android:interpolator="@android:interpolator/fast_out_slow_in"/>
|
||||
<objectAnimator
|
||||
android:propertyName="pathData"
|
||||
android:duration="700"
|
||||
android:valueFrom="M 17.5 20.0 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 17.5,20.0"
|
||||
android:valueTo=" M 31 4 m 2,0 a 2,2 0 1,1 -4,0 a 2,2 0 1,1 4,0 M 17.5 20.0 L 31 ,4"
|
||||
android:valueType="pathType"
|
||||
android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="fillAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
<objectAnimator android:propertyName="strokeAlpha" android:startOffset="900" android:duration="400" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" android:interpolator="@android:interpolator/linear_out_slow_in"/>
|
||||
</set>
|
||||
</aapt:attr>
|
||||
</target>
|
||||
</animated-vector>
|
25
res/drawable/doc_key_g.xml
Normal file
25
res/drawable/doc_key_g.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="35dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="35.0"
|
||||
android:viewportHeight="40.0">
|
||||
<path
|
||||
android:pathData="M11.26,10.13L23.74,10.13A1.13,1.13 0,0 1,24.87 11.26L24.87,28.74A1.13,1.13 0,0 1,23.74 29.88L11.26,29.88A1.13,1.13 0,0 1,10.13 28.74L10.13,11.26A1.13,1.13 0,0 1,11.26 10.13z"
|
||||
android:fillAlpha="1"
|
||||
android:strokeColor="#404040"
|
||||
android:fillColor="#333333"
|
||||
android:strokeWidth="0.251"
|
||||
android:strokeAlpha="1"/>
|
||||
<path
|
||||
android:pathData="m11.18,28.83l0,-0.54l2.9,0l0,0.54z"
|
||||
android:fillColor="#cccccc"
|
||||
android:strokeWidth="0.265729"/>
|
||||
<path
|
||||
android:pathData="m19.52,17.02 l0.26,0.81q-0.27,0.09 -0.61,0.12 -0.33,0.03 -0.73,0.03 0.41,0.18 0.62,0.47 0.21,0.28 0.21,0.7 0,0.45 -0.22,0.8 -0.22,0.35 -0.62,0.55 -0.41,0.2 -0.97,0.2 -0.2,0 -0.35,-0.02 -0.14,-0.02 -0.28,-0.06 -0.09,0.06 -0.15,0.17 -0.06,0.1 -0.06,0.21 0,0.14 0.11,0.24 0.12,0.1 0.46,0.1l0.8,0q0.49,0 0.87,0.17 0.38,0.17 0.59,0.46 0.22,0.29 0.22,0.65 0,0.69 -0.59,1.07 -0.59,0.38 -1.71,0.38 -0.79,0 -1.24,-0.16 -0.45,-0.16 -0.63,-0.48 -0.18,-0.32 -0.18,-0.78l0.88,0q0,0.24 0.09,0.4 0.1,0.16 0.35,0.24 0.26,0.08 0.74,0.08 0.48,0 0.77,-0.08 0.29,-0.08 0.41,-0.23 0.13,-0.15 0.13,-0.36 0,-0.28 -0.24,-0.43 -0.24,-0.15 -0.65,-0.15l-0.79,0q-0.65,0 -0.96,-0.27 -0.3,-0.27 -0.3,-0.62 0,-0.24 0.13,-0.45 0.14,-0.22 0.38,-0.38 -0.41,-0.22 -0.61,-0.53 -0.19,-0.31 -0.19,-0.76 0,-0.49 0.24,-0.85 0.24,-0.37 0.68,-0.57 0.44,-0.2 1,-0.2 0.55,0 0.92,-0.06 0.37,-0.06 0.64,-0.17 0.28,-0.11 0.55,-0.24zM17.41,18.15q-0.47,0 -0.7,0.27 -0.24,0.26 -0.24,0.68 0,0.44 0.24,0.7 0.24,0.26 0.71,0.26 0.43,0 0.66,-0.25 0.23,-0.25 0.23,-0.72 0,-0.47 -0.23,-0.71 -0.23,-0.24 -0.68,-0.24z"
|
||||
android:fillColor="#fdfdfd"
|
||||
android:strokeWidth="0.265729"/>
|
||||
<path
|
||||
android:pathData="m21.24,13.59l0,-0.53l2.4,0l0,0.53z"
|
||||
android:fillColor="#cccccc"
|
||||
android:strokeWidth="0.265729"/>
|
||||
</vector>
|
25
res/drawable/doc_key_u.xml
Normal file
25
res/drawable/doc_key_u.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="35dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="35.0"
|
||||
android:viewportHeight="40.0">
|
||||
<path
|
||||
android:pathData="M11.26,10.13L23.74,10.13A1.13,1.13 0,0 1,24.87 11.26L24.87,28.74A1.13,1.13 0,0 1,23.74 29.88L11.26,29.88A1.13,1.13 0,0 1,10.13 28.74L10.13,11.26A1.13,1.13 0,0 1,11.26 10.13z"
|
||||
android:fillAlpha="1"
|
||||
android:strokeColor="#404040"
|
||||
android:fillColor="#333333"
|
||||
android:strokeWidth="0.251"
|
||||
android:strokeAlpha="1"/>
|
||||
<path
|
||||
android:pathData="m16.64,17.64l0,3.21q0,0.41 0.16,0.58 0.17,0.17 0.5,0.17 0.31,0 0.61,-0.19 0.29,-0.19 0.46,-0.46l0,-3.33l0.98,0l0,4.6l-0.84,0l-0.06,-0.59q-0.26,0.34 -0.65,0.53 -0.39,0.18 -0.8,0.18 -0.67,0 -1,-0.37 -0.33,-0.37 -0.33,-1.01l0,-3.33z"
|
||||
android:fillColor="#fdfdfd"
|
||||
android:strokeWidth="0.265729"/>
|
||||
<path
|
||||
android:pathData="m12.52,24.71q0.3,0 0.54,0.09 0.25,0.09 0.49,0.35l-0.37,0.33q-0.14,-0.16 -0.28,-0.23 -0.14,-0.08 -0.34,-0.08 -0.27,0 -0.41,0.15 -0.14,0.15 -0.14,0.39 0,0.17 0.08,0.31 0.08,0.14 0.23,0.22 0.15,0.08 0.33,0.08l1.58,0l0,0.46l-0.47,0l0,1.56q-0.1,0.12 -0.26,0.24 -0.16,0.12 -0.41,0.21 -0.24,0.08 -0.58,0.08 -0.45,0 -0.75,-0.17 -0.3,-0.17 -0.44,-0.45 -0.15,-0.28 -0.15,-0.6 0,-0.46 0.24,-0.74 0.24,-0.28 0.66,-0.37l0,-0.02q-0.25,-0.06 -0.4,-0.18 -0.15,-0.12 -0.22,-0.3 -0.07,-0.17 -0.07,-0.37 0,-0.26 0.14,-0.48 0.14,-0.22 0.4,-0.35 0.26,-0.13 0.6,-0.13zM13.18,26.79l-0.58,0q-0.28,0 -0.45,0.12 -0.17,0.12 -0.26,0.32 -0.08,0.19 -0.08,0.39 0,0.2 0.08,0.37 0.08,0.17 0.24,0.28 0.16,0.1 0.42,0.1 0.21,0 0.37,-0.07 0.16,-0.07 0.26,-0.19z"
|
||||
android:fillColor="#cccccc"
|
||||
android:strokeWidth="0.265729"/>
|
||||
<path
|
||||
android:pathData="m22.12,15.25 l-0.61,-0.19 1.54,-3.37l-1.84,0l0,-0.51l2.49,0l0,0.47z"
|
||||
android:fillColor="#cccccc"
|
||||
android:strokeWidth="0.265729"/>
|
||||
</vector>
|
1
res/drawable/ic_clipboard_paste.xml
Normal file
1
res/drawable/ic_clipboard_paste.xml
Normal file
@ -0,0 +1 @@
|
||||
<!-- drawable/file_send.xml --><vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"><path android:fillColor="#000000" android:pathData="M14,2H6C4.89,2 4,2.89 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M12.54,19.37V17.37H8.54V15.38H12.54V13.38L15.54,16.38L12.54,19.37M13,9V3.5L18.5,9H13Z" /></vector>
|
1
res/drawable/ic_clipboard_save.xml
Normal file
1
res/drawable/ic_clipboard_save.xml
Normal file
@ -0,0 +1 @@
|
||||
<!-- drawable/bookmark_plus.xml --><vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"><path android:fillColor="#000000" android:pathData="M17,3A2,2 0 0,1 19,5V21L12,18L5,21V5C5,3.89 5.9,3 7,3H17M11,7V9H9V11H11V13H13V11H15V9H13V7H11Z" /></vector>
|
1
res/drawable/ic_delete.xml
Normal file
1
res/drawable/ic_delete.xml
Normal file
@ -0,0 +1 @@
|
||||
<!-- drawable/delete.xml --><vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24"><path android:fillColor="#000000" android:pathData="M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z" /></vector>
|
8
res/layout/clipboard_history_entry.xml
Normal file
8
res/layout/clipboard_history_entry.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<TextView android:id="@+id/clipboard_entry_text" style="@style/clipboardEntry"/>
|
||||
<LinearLayout style="@style/clipboardEntryButtons">
|
||||
<View android:id="@+id/clipboard_entry_paste" style="@style/clipboardEntryButton" android:background="@drawable/ic_clipboard_paste"/>
|
||||
<View android:id="@+id/clipboard_entry_addpin" style="@style/clipboardEntryButton" android:background="@drawable/ic_clipboard_save"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
12
res/layout/clipboard_pane.xml
Normal file
12
res/layout/clipboard_pane.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="?attr/colorKeyboard" android:hardwareAccelerated="false">
|
||||
<ScrollView android:layout_width="fill_parent" android:layout_height="@dimen/clipboard_view_height">
|
||||
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<juloo.keyboard2.ClipboardHistoryCheckBox android:text="@string/clipboard_history_heading" style="@style/clipboardHeading" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
||||
<juloo.keyboard2.ClipboardHistoryView android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="?attr/clipboard_divider_color" android:dividerHeight="?attr/clipboard_divider_height"/>
|
||||
<TextView android:text="@string/clipboard_pin_heading" style="@style/clipboardHeading" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
||||
<juloo.keyboard2.ClipboardPinView android:id="@+id/clipboard_pin_view" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="?attr/clipboard_divider_color" android:dividerHeight="?attr/clipboard_divider_height"/>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
<juloo.keyboard2.Keyboard2View layout="@xml/clipboard_bottom_row" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="?attr/colorKeyboard"/>
|
||||
</LinearLayout>
|
8
res/layout/clipboard_pin_entry.xml
Normal file
8
res/layout/clipboard_pin_entry.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<TextView android:id="@+id/clipboard_pin_text" style="@style/clipboardEntry" android:maxLines="3"/>
|
||||
<LinearLayout style="@style/clipboardEntryButtons">
|
||||
<View android:id="@+id/clipboard_pin_paste" style="@style/clipboardEntryButton" android:background="@drawable/ic_clipboard_paste"/>
|
||||
<View android:id="@+id/clipboard_pin_remove" style="@style/clipboardEntryButton" android:background="@drawable/ic_delete"/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
@ -2,7 +2,5 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:hardwareAccelerated="false">
|
||||
<juloo.keyboard2.EmojiGroupButtonsBar android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
|
||||
<juloo.keyboard2.EmojiGridView android:id="@+id/emoji_grid" android:layout_width="fill_parent" android:layout_height="@dimen/emoji_grid_height" android:orientation="vertical" android:numColumns="auto_fit" android:columnWidth="45sp" android:background="?attr/colorKeyboard"/>
|
||||
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content">
|
||||
<juloo.keyboard2.Keyboard2View layout="@xml/emoji_bottom_row" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="?attr/emoji_key_bg"/>
|
||||
</LinearLayout>
|
||||
<juloo.keyboard2.Keyboard2View layout="@xml/emoji_bottom_row" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="?attr/emoji_key_bg"/>
|
||||
</LinearLayout>
|
||||
|
@ -1,10 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true">
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:fitsSystemWindows="true">
|
||||
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">
|
||||
<TextView style="@style/paragraph" android:text="@string/launcher_description"/>
|
||||
<Button style="@style/paragraph" android:text="@string/launcher_button_imesettings" android:onClick="launch_imesettings" android:layout_width="wrap_content"/>
|
||||
<Button style="@style/paragraph" android:text="@string/launcher_button_imepicker" android:onClick="launch_imepicker" android:layout_width="wrap_content"/>
|
||||
<VideoView android:id="@+id/launcher_intro_video" android:layout_width="240dp" android:layout_height="wrap_content" android:layout_gravity="center"/>
|
||||
<LinearLayout style="@style/anim_box">
|
||||
<ImageView style="@style/anim" android:id="@+id/launcher_anim_swipe" android:background="@drawable/doc_key_u" android:src="@drawable/doc_anim_swipe"/>
|
||||
<TextView style="@style/anim_text" android:text="7"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout style="@style/anim_box">
|
||||
<ImageView style="@style/anim" android:id="@+id/launcher_anim_circle" android:background="@drawable/doc_key_g" android:src="@drawable/doc_anim_circle"/>
|
||||
<TextView style="@style/anim_text" android:text="G"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout style="@style/anim_box">
|
||||
<ImageView style="@style/anim" android:id="@+id/launcher_anim_round_trip" android:background="@drawable/doc_key_g" android:src="@drawable/doc_anim_round_trip"/>
|
||||
<TextView style="@style/anim_text" android:text="–"/>
|
||||
</LinearLayout>
|
||||
<TextView android:id="@+id/launcher_tryhere_text" style="@style/paragraph" android:text="@string/launcher_tryhere"/>
|
||||
<EditText android:id="@+id/launcher_tryhere_area" style="@style/paragraph" android:inputType="text" android:hint="@string/launcher_tryhere_hint" android:importantForAutofill="no"/>
|
||||
<TextView style="@style/paragraph" android:text="@string/launcher_sourcecode"/>
|
||||
|
Binary file not shown.
@ -38,8 +38,9 @@ Tato aplikace neobsahuje žádné reklamy, nevyužívá připojení k síti a je
|
||||
<string name="pref_category_typing">Psaní</string>
|
||||
<string name="pref_swipe_dist_title">Vzdálenost posunutí prstem</string>
|
||||
<string name="pref_swipe_dist_summary">Jak daleko je třeba posunout prst pro zadání znaku/znaménka v rohu klávey (%s)</string>
|
||||
<string name="pref_long_timeout_title">Časová prodleva opakování znaků</string>
|
||||
<string name="pref_long_timeout_title">Doba pro aktivaci dlouhého podržení</string>
|
||||
<string name="pref_long_interval_title">Interval opakování znaků</string>
|
||||
<string name="pref_keyrepeat_enabled">Opakování kláves při držení</string>
|
||||
<string name="pref_lock_double_tap_title">Dvojklik pro aktivaci Capslock(u)</string>
|
||||
<string name="pref_lock_double_tap_summary">Umožňuje zamknout Shift dvojklikem, namísto podržení</string>
|
||||
<string name="pref_category_behavior">Chování</string>
|
||||
@ -67,6 +68,10 @@ Tato aplikace neobsahuje žádné reklamy, nevyužívá připojení k síti a je
|
||||
<string name="pref_theme_e_epaper">ePapír</string>
|
||||
<string name="pref_theme_e_desert">Poušťě</string>
|
||||
<string name="pref_theme_e_jungle">Džungle</string>
|
||||
<string name="pref_theme_e_monet">Monet (dle systému)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Světlý)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Tmavý)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Velmi krátká</string>
|
||||
<string name="pref_swipe_dist_e_short">Krátká</string>
|
||||
<string name="pref_swipe_dist_e_default">Běžná</string>
|
||||
@ -77,6 +82,11 @@ Tato aplikace neobsahuje žádné reklamy, nevyužívá připojení k síti a je
|
||||
<string name="pref_border_config_title">Přizpůsobit okraje</string>
|
||||
<string name="pref_border_width_title">Šířka okraje</string>
|
||||
<string name="pref_corners_radius_title">Poloměr okraje</string>
|
||||
<string name="pref_circle_sensitivity_title">Citlivost kruhového gesta</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Vysoká</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Střední</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Nízká</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Deaktivováno</string>
|
||||
<string name="key_action_next">Další</string>
|
||||
<string name="key_action_done">Dokončit</string>
|
||||
<string name="key_action_go">Spustit</string>
|
||||
@ -110,4 +120,19 @@ Tato aplikace neobsahuje žádné reklamy, nevyužívá připojení k síti a je
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Správce schránky</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Nedávno kopírovaný text</string>
|
||||
<string name="clipboard_pin_heading">Připnout</string>
|
||||
<string name="clipboard_remove_confirm">Odebrat ze schránky?</string>
|
||||
<string name="clipboard_remove_confirmed">Ano</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Diese App enthält keine Werbung, benötigt keinen Netzwerkzugriff und ist quell
|
||||
<string name="pref_category_typing">Tippen</string>
|
||||
<string name="pref_swipe_dist_title">Länge der Wischgeste</string>
|
||||
<string name="pref_swipe_dist_summary">Abstand der Zeichen in den Ecken der Tasten (%s)</string>
|
||||
<string name="pref_long_timeout_title">Zeitüberschreitung bei Tastenwiederholung</string>
|
||||
<string name="pref_long_timeout_title">Zeitüberschreitung durch langes Drücken</string>
|
||||
<string name="pref_long_interval_title">Intervall der Tastenwiederholung</string>
|
||||
<string name="pref_keyrepeat_enabled">Tastenwiederholung bei langem Drücken</string>
|
||||
<string name="pref_lock_double_tap_title">Umschalttaste mit Doppeltippen einrasten</string>
|
||||
<string name="pref_lock_double_tap_summary">Anstatt Taste längere Zeit gedrückt zu halten</string>
|
||||
<string name="pref_category_behavior">Verhalten</string>
|
||||
@ -67,6 +68,10 @@ Diese App enthält keine Werbung, benötigt keinen Netzwerkzugriff und ist quell
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Wüste</string>
|
||||
<string name="pref_theme_e_jungle">Dschungel</string>
|
||||
<string name="pref_theme_e_monet">Monet (System)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Hell)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Dunkel)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Sehr kurz</string>
|
||||
<string name="pref_swipe_dist_e_short">Kurz</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
@ -77,6 +82,11 @@ Diese App enthält keine Werbung, benötigt keinen Netzwerkzugriff und ist quell
|
||||
<string name="pref_border_config_title">Ränder anpassen</string>
|
||||
<string name="pref_border_width_title">Randbreite</string>
|
||||
<string name="pref_corners_radius_title">Radius der Ecken</string>
|
||||
<string name="pref_circle_sensitivity_title">Empfindlichkeit der Kreisgeste</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Hoch</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Mittel</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Niedrig</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Aus</string>
|
||||
<string name="key_action_next">Nächstes</string>
|
||||
<string name="key_action_done">Fertig</string>
|
||||
<string name="key_action_go">Los</string>
|
||||
@ -110,4 +120,19 @@ Diese App enthält keine Werbung, benötigt keinen Netzwerkzugriff und ist quell
|
||||
<string name="key_descr_page_down">Bild ab</string>
|
||||
<string name="key_descr_home">Pos1</string>
|
||||
<string name="key_descr_end">Ende</string>
|
||||
<string name="key_descr_clipboard">Clipboard-Manager</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Zuletzt kopierter Text</string>
|
||||
<string name="clipboard_pin_heading">Angeheftet</string>
|
||||
<string name="clipboard_remove_confirm">Aus der Zwischenablage entfernen?</string>
|
||||
<string name="clipboard_remove_confirmed">Ja</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ La misma no contiene ningún anuncio/publicidad, no realiza peticiones de red y
|
||||
<string name="pref_category_typing">Escritura</string>
|
||||
<string name="pref_swipe_dist_title">Distancia de deslizamiento</string>
|
||||
<string name="pref_swipe_dist_summary">Distancia de caracteres en las esquinas de las teclas (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tiempo de espera para repetir tecla</string>
|
||||
<string name="pref_long_timeout_title">Duración para toque largo</string>
|
||||
<string name="pref_long_interval_title">Intervalo de repetición de tecla</string>
|
||||
<string name="pref_keyrepeat_enabled">Permitir repetición de toque largo</string>
|
||||
<string name="pref_lock_double_tap_title">Doble toque en Mayús para bloquear las mayúsculas</string>
|
||||
<string name="pref_lock_double_tap_summary">Se puede bloquear cualquier modificador manteniéndolo presionado</string>
|
||||
<string name="pref_category_behavior">Comportamiento</string>
|
||||
@ -67,6 +68,10 @@ La misma no contiene ningún anuncio/publicidad, no realiza peticiones de red y
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Desierto</string>
|
||||
<string name="pref_theme_e_jungle">Selva</string>
|
||||
<string name="pref_theme_e_monet">Monet (de sistema)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (claro)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (oscuro)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Muy corta</string>
|
||||
<string name="pref_swipe_dist_e_short">Corta</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
@ -77,6 +82,11 @@ La misma no contiene ningún anuncio/publicidad, no realiza peticiones de red y
|
||||
<string name="pref_border_config_title">Bordes personalizados</string>
|
||||
<string name="pref_border_width_title">Ancho de bordes</string>
|
||||
<string name="pref_corners_radius_title">Radio de rincones</string>
|
||||
<string name="pref_circle_sensitivity_title">Sensibilidad a gestos circulares</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Alta</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Mediana</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Baja</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Apagada</string>
|
||||
<string name="key_action_next">Siguiente</string>
|
||||
<string name="key_action_done">Hecho</string>
|
||||
<string name="key_action_go">Ir</string>
|
||||
@ -110,4 +120,19 @@ La misma no contiene ningún anuncio/publicidad, no realiza peticiones de red y
|
||||
<string name="key_descr_page_down">Re Pág</string>
|
||||
<string name="key_descr_home">Inicio</string>
|
||||
<string name="key_descr_end">Fin</string>
|
||||
<string name="key_descr_clipboard">Arreglar portapapeles</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Textos recién copiados</string>
|
||||
<string name="clipboard_pin_heading">Pegado</string>
|
||||
<string name="clipboard_remove_confirm">¿Sacar este portapapeles?</string>
|
||||
<string name="clipboard_remove_confirmed">Sí</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_category_typing">درحال نوشتن</string>
|
||||
<string name="pref_swipe_dist_title">فاصله کشیدن</string>
|
||||
<string name="pref_swipe_dist_summary">فاصله حروف از گوشههای کلیدها )(%s)</string>
|
||||
<string name="pref_long_timeout_title">درنگ تکرار کلید</string>
|
||||
<!-- <string name="pref_long_timeout_title">Long press timeout</string> -->
|
||||
<string name="pref_long_interval_title">فاصله تکرار کلید</string>
|
||||
<!-- <string name="pref_keyrepeat_enabled">Key repeat on long press</string> -->
|
||||
<string name="pref_lock_double_tap_title">دوبار ضربه روی دگرساز برای فعال شدن کپس لاک</string>
|
||||
<string name="pref_lock_double_tap_summary">شما میتوانید قفل کنید هر میانبری را با نگه داشتن آن</string>
|
||||
<string name="pref_category_behavior">ٰرفتار</string>
|
||||
@ -67,6 +68,10 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_theme_e_epaper">ای-پیپر</string>
|
||||
<!-- <string name="pref_theme_e_desert">Desert</string> -->
|
||||
<!-- <string name="pref_theme_e_jungle">Jungle</string> -->
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">بسیار کوتاه</string>
|
||||
<string name="pref_swipe_dist_e_short">کوتاه</string>
|
||||
<string name="pref_swipe_dist_e_default">عادی</string>
|
||||
@ -77,6 +82,11 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_high">High</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_medium">Medium</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_low">Low</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_disabled">Disabled</string> -->
|
||||
<string name="key_action_next">بعدی</string>
|
||||
<string name="key_action_done">اتمام</string>
|
||||
<string name="key_action_go">برو</string>
|
||||
@ -110,4 +120,19 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<!-- <string name="key_descr_page_down">Page Down</string> -->
|
||||
<!-- <string name="key_descr_home">Home</string> -->
|
||||
<!-- <string name="key_descr_end">End</string> -->
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="pref_category_typing">Saisie</string>
|
||||
<string name="pref_swipe_dist_title">Distance de swipe</string>
|
||||
<string name="pref_swipe_dist_summary">La distance des caractères dans les coins (%s)</string>
|
||||
<string name="pref_long_timeout_title">Délai avant répétition</string>
|
||||
<string name="pref_long_timeout_title">Delai de l\'appui long</string>
|
||||
<string name="pref_long_interval_title">Écart entre les répétitions</string>
|
||||
<string name="pref_keyrepeat_enabled">Répétition par appui long</string>
|
||||
<string name="pref_lock_double_tap_title">Appuyer deux fois pour bloquer la majuscule</string>
|
||||
<string name="pref_lock_double_tap_summary">Un appui long bloque la majuscule</string>
|
||||
<string name="pref_category_behavior">Comportement</string>
|
||||
@ -47,8 +48,8 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="pref_autocapitalisation_summary">Activer Shift au début des phrases</string>
|
||||
<string name="pref_switch_input_immediate_title">Changer vers le clavier utilisé en dernier</string>
|
||||
<string name="pref_switch_input_immediate_summary">Comportement de la touche de changement de clavier</string>
|
||||
<!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
|
||||
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
|
||||
<string name="pref_vibrate_custom">Vibrations personnalisées</string>
|
||||
<string name="pref_vibrate_duration_title">Intensité des vibrations</string>
|
||||
<string name="pref_pin_entry_enabled_title">Clavier PIN</string>
|
||||
<string name="pref_pin_entry_enabled_summary">Lors de la saisie de nombres, de dates et de numéros de téléphone</string>
|
||||
<string name="pref_category_style">Style</string>
|
||||
@ -67,6 +68,10 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Desert</string>
|
||||
<string name="pref_theme_e_jungle">Jungle</string>
|
||||
<string name="pref_theme_e_monet">Monet (Système)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Clair)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Sombre)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Très courte</string>
|
||||
<string name="pref_swipe_dist_e_short">Courte</string>
|
||||
<string name="pref_swipe_dist_e_default">Normale</string>
|
||||
@ -74,9 +79,14 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="pref_swipe_dist_e_very_far">Très longue</string>
|
||||
<string name="pref_key_horizontal_space">Espacement horizontal entre les touches</string>
|
||||
<string name="pref_key_vertical_space">Espacement vertical entre les touches</string>
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<string name="pref_border_config_title">Bordures personnalisées</string>
|
||||
<string name="pref_border_width_title">Largeur des bordures</string>
|
||||
<string name="pref_corners_radius_title">Rayon des coins</string>
|
||||
<string name="pref_circle_sensitivity_title">Sensibilité du mouvement en cercle</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Haute</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Moyenne</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Basse</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Désactivée</string>
|
||||
<string name="key_action_next">Suiv.</string>
|
||||
<string name="key_action_done">Fin</string>
|
||||
<string name="key_action_go">Aller</string>
|
||||
@ -88,11 +98,11 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="launcher_description">Cette application est un clavier virtuel. Activez-le dans les paramètres système en cliquant sur le bouton ci-dessous.</string>
|
||||
<string name="launcher_sourcecode">Cette application est libre et open-source. Lisez le source code et reportez des problèmes sur Github.</string>
|
||||
<string name="launcher_tryhere">Après l\'avoir activé, vous pouvez l\'essayer ici:</string>
|
||||
<!-- <string name="launcher_tryhere_hint">Try here</string> -->
|
||||
<string name="launcher_tryhere_hint">Essayer ici</string>
|
||||
<string name="key_descr_capslock">Verrouillage majuscules</string>
|
||||
<!-- <string name="key_descr_compose">Compose</string> -->
|
||||
<string name="key_descr_compose">Compose</string>
|
||||
<string name="key_descr_switch_greekmath">Symboles mathématiques</string>
|
||||
<!-- <string name="key_descr_change_method">Switch keyboard</string> -->
|
||||
<string name="key_descr_change_method">Changer de clavier</string>
|
||||
<string name="key_descr_voice_typing">Saisie vocale</string>
|
||||
<string name="key_descr_copy">Copier</string>
|
||||
<string name="key_descr_paste">Coller</string>
|
||||
@ -110,4 +120,19 @@ Cette application ne contient pas de publicité, n'accède pas au réseau et est
|
||||
<string name="key_descr_page_down">Page suivante</string>
|
||||
<string name="key_descr_home">Début</string>
|
||||
<string name="key_descr_end">Fin</string>
|
||||
<string name="key_descr_clipboard">Presse-papiers</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Texte récemment copié</string>
|
||||
<string name="clipboard_pin_heading">Épinglé</string>
|
||||
<string name="clipboard_remove_confirm">Supprimer ce presse-papiers ?</string>
|
||||
<string name="clipboard_remove_confirmed">Oui</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_category_typing">Digitando</string>
|
||||
<string name="pref_swipe_dist_title">Distanza swipe</string>
|
||||
<string name="pref_swipe_dist_summary">Distanza dei caratteri negli angoli dei tasti (%s)</string>
|
||||
<string name="pref_long_timeout_title">Timeout ripetizione tasto</string>
|
||||
<!-- <string name="pref_long_timeout_title">Long press timeout</string> -->
|
||||
<string name="pref_long_interval_title">Intervallo ripetizione tasto</string>
|
||||
<!-- <string name="pref_keyrepeat_enabled">Key repeat on long press</string> -->
|
||||
<string name="pref_lock_double_tap_title">Doppio tocco su Shift per attivare CapsLock</string>
|
||||
<string name="pref_lock_double_tap_summary">Invece di premere i modificatori a lungo</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
@ -67,6 +68,10 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<!-- <string name="pref_theme_e_desert">Desert</string> -->
|
||||
<!-- <string name="pref_theme_e_jungle">Jungle</string> -->
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Veramente breve</string>
|
||||
<string name="pref_swipe_dist_e_short">Breve</string>
|
||||
<string name="pref_swipe_dist_e_default">Normale</string>
|
||||
@ -77,6 +82,11 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_high">High</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_medium">Medium</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_low">Low</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_disabled">Disabled</string> -->
|
||||
<string name="key_action_next">Prossimo</string>
|
||||
<string name="key_action_done">Fatto</string>
|
||||
<string name="key_action_go">Vai</string>
|
||||
@ -110,4 +120,19 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<!-- <string name="key_descr_page_down">Page Down</string> -->
|
||||
<!-- <string name="key_descr_home">Home</string> -->
|
||||
<!-- <string name="key_descr_end">End</string> -->
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
139
res/values-ja/strings.xml
Normal file
139
res/values-ja/strings.xml
Normal file
@ -0,0 +1,139 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name_release">Unexpected Keyboard</string>
|
||||
<string name="app_name_debug">Unexpected Keyboard (Debug)</string>
|
||||
<string name="short_description">軽量でプライバシーに配慮したAndroid用仮想キーボード</string>
|
||||
<string name="store_description">"このキーボードは、キーの角をスワイプすることで様々なキーを入力できます。
|
||||
|
||||
このアプリは元々はTermuxでのプログラミング用に設計されました。
|
||||
しかし、今では普段の入力にも適しています。
|
||||
PCキーボードでの半角入力を再現しています。日本語入力、変換は出来ません。
|
||||
|
||||
このアプリは広告を含まず、インターネットに接続せず、そしてオープンソースです。"</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboardの設定</string>
|
||||
<string name="pref_portrait">縦向き</string>
|
||||
<string name="pref_landscape">横向き</string>
|
||||
<string name="pref_category_layout">レイアウト</string>
|
||||
<string name="pref_label_brightness">文字の明るさ</string>
|
||||
<string name="pref_keyboard_opacity">背景の不透明度</string>
|
||||
<string name="pref_key_opacity">キーの不透明度</string>
|
||||
<string name="pref_key_activated_opacity">押下中のキーの不透明度</string>
|
||||
<string name="pref_layout_e_system">システム設定</string>
|
||||
<string name="pref_layout_e_custom">カスタムレイアウト</string>
|
||||
<string name="pref_layouts_add">レイアウトを追加</string>
|
||||
<string name="pref_layouts_item">レイアウト %1$d: %2$s</string>
|
||||
<string name="pref_layouts_remove_custom">レイアウトを削除</string>
|
||||
<string name="pref_custom_layout_title">カスタムレイアウト</string>
|
||||
<string name="pref_show_numpad_title">テンキーを表示</string>
|
||||
<string name="pref_show_numpad_never">表示しない</string>
|
||||
<string name="pref_show_numpad_landscape">横向きの時は表示</string>
|
||||
<string name="pref_show_numpad_always">表示する</string>
|
||||
<string name="pref_number_row_title">数字の行を表示</string>
|
||||
<string name="pref_number_row_summary">テンキーが非表示の場合最上段に数字の行を追加します</string>
|
||||
<string name="pref_numpad_layout">テンキーのレイアウト</string>
|
||||
<string name="pref_numpad_layout_e_high_first">大きい数字を上に</string>
|
||||
<string name="pref_numpad_layout_e_low_first">小さい数字を上に</string>
|
||||
<string name="pref_extra_keys_title">追加のキーの設定</string>
|
||||
<string name="pref_extra_keys_custom">キーを追加</string>
|
||||
<string name="pref_extra_keys_internal">キーボードに表示するキーを選択</string>
|
||||
<string name="pref_category_typing">入力</string>
|
||||
<string name="pref_swipe_dist_title">スワイプ距離</string>
|
||||
<string name="pref_swipe_dist_summary">キーの角をスワイプする距離 (%s)</string>
|
||||
<string name="pref_long_timeout_title">キー長押しの時間</string>
|
||||
<string name="pref_long_interval_title">キーを連続入力する間隔</string>
|
||||
<string name="pref_keyrepeat_enabled">長押しでキーを連続入力する</string>
|
||||
<string name="pref_lock_double_tap_title">ShiftをダブルタップでCaps Lock</string>
|
||||
<string name="pref_lock_double_tap_summary">どの装飾キーも長押しで固定できます</string>
|
||||
<string name="pref_category_behavior">挙動</string>
|
||||
<string name="pref_autocapitalisation_title">自動大文字化</string>
|
||||
<string name="pref_autocapitalisation_summary">文章の先頭でShiftキーを自動入力</string>
|
||||
<string name="pref_switch_input_immediate_title">最後に使用したキーボードに切替</string>
|
||||
<string name="pref_switch_input_immediate_summary">キーボード切替キーの挙動</string>
|
||||
<string name="pref_vibrate_custom">キーボード独自の振動設定</string>
|
||||
<string name="pref_vibrate_duration_title">振動の時間</string>
|
||||
<string name="pref_pin_entry_enabled_title">PIN入力</string>
|
||||
<string name="pref_pin_entry_enabled_summary">数字・日付・電話番号入力時</string>
|
||||
<string name="pref_category_style">表示</string>
|
||||
<string name="pref_margin_bottom_title">下の余白</string>
|
||||
<string name="pref_keyboard_height_title">キーボードの高さ</string>
|
||||
<string name="pref_horizontal_margin_title">左右の余白</string>
|
||||
<string name="pref_character_size_title">文字の大きさ</string>
|
||||
<string name="pref_character_size_summary">キーボードに表示される文字の大きさ (%.2fx)</string>
|
||||
<string name="pref_theme">テーマ</string>
|
||||
<string name="pref_theme_e_system">システム設定</string>
|
||||
<string name="pref_theme_e_dark">ダークモード</string>
|
||||
<string name="pref_theme_e_light">ライトモード</string>
|
||||
<string name="pref_theme_e_black">黒</string>
|
||||
<string name="pref_theme_e_altblack">黒(別バージョン)</string>
|
||||
<string name="pref_theme_e_white">白</string>
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Desert</string>
|
||||
<string name="pref_theme_e_jungle">Jungle</string>
|
||||
<string name="pref_theme_e_monet">Monet (システム)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (ライト)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (ダーク)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">短い</string>
|
||||
<string name="pref_swipe_dist_e_short">やや短い</string>
|
||||
<string name="pref_swipe_dist_e_default">普通</string>
|
||||
<string name="pref_swipe_dist_e_far">やや長い</string>
|
||||
<string name="pref_swipe_dist_e_very_far">長い</string>
|
||||
<string name="pref_key_horizontal_space">キー間の左右の間隔</string>
|
||||
<string name="pref_key_vertical_space">キー間の上下の間隔</string>
|
||||
<string name="pref_border_config_title">キー形状の設定</string>
|
||||
<string name="pref_border_width_title">縁取り</string>
|
||||
<string name="pref_corners_radius_title">丸み</string>
|
||||
<string name="pref_circle_sensitivity_title">円形ジェスチャーの感度</string>
|
||||
<string name="pref_circle_sensitivity_e_high">高</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">中</string>
|
||||
<string name="pref_circle_sensitivity_e_low">低</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">無効</string>
|
||||
<string name="key_action_next">次へ</string>
|
||||
<string name="key_action_done">完了</string>
|
||||
<string name="key_action_go">実行</string>
|
||||
<string name="key_action_prev">戻る</string>
|
||||
<string name="key_action_search">検索</string>
|
||||
<string name="key_action_send">送信</string>
|
||||
<string name="launcher_button_imesettings">キーボードを有効化</string>
|
||||
<string name="launcher_button_imepicker">キーボードを選択</string>
|
||||
<string name="launcher_description">このアプリは仮想キーボードです。下のボタンからシステム設定を開いてUnexpected Keyboardを有効化してください。</string>
|
||||
<string name="launcher_sourcecode">このアプリはオープンソースのフリーウェアです。GitHubでソースコードを入手したり、不具合を報告したりできます。</string>
|
||||
<string name="launcher_tryhere">有効化されている場合、ここでキーボードを試すことができます。</string>
|
||||
<string name="launcher_tryhere_hint">文字を入力</string>
|
||||
<string name="key_descr_capslock">Caps Lock</string>
|
||||
<string name="key_descr_compose">Compose</string>
|
||||
<string name="key_descr_switch_greekmath">ギリシャ文字と数学記号</string>
|
||||
<string name="key_descr_change_method">キーボードの切替</string>
|
||||
<string name="key_descr_voice_typing">音声入力</string>
|
||||
<string name="key_descr_copy">コピー</string>
|
||||
<string name="key_descr_paste">貼り付け</string>
|
||||
<string name="key_descr_cut">切り取り</string>
|
||||
<string name="key_descr_selectAll">すべて選択</string>
|
||||
<string name="key_descr_shareText">テキストを共有</string>
|
||||
<string name="key_descr_pasteAsPlainText">書式なしで貼り付け</string>
|
||||
<string name="key_descr_undo">元に戻す</string>
|
||||
<string name="key_descr_redo">やり直し</string>
|
||||
<string name="key_descr_ª">序数標識</string>
|
||||
<string name="key_descr_º">序数標識</string>
|
||||
<string name="key_descr_superscript">上付き文字</string>
|
||||
<string name="key_descr_subscript">下付き文字</string>
|
||||
<string name="key_descr_page_up">Page Up</string>
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">クリップボード</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">最近コピーしたテキスト</string>
|
||||
<string name="clipboard_pin_heading">お気に入り</string>
|
||||
<string name="clipboard_remove_confirm">クリップボードから削除しますか?</string>
|
||||
<string name="clipboard_remove_confirmed">はい</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
@ -3,54 +3,55 @@
|
||||
<string name="app_name_release">Unexpected Keyboard</string>
|
||||
<!-- <string name="app_name_debug">Unexpected Keyboard (Debug)</string> -->
|
||||
<string name="short_description">개발자들을 위한 가벼운 가상 키보드.</string>
|
||||
<!-- <string name="store_description">"The main feature is that you can type more characters by swiping the keys towards the corners.
|
||||
<string name="store_description">"주요 기능은 모서리 방향으로 키를 스와이프하여 더 많은 문자를 입력할 수 있다는 것입니다.
|
||||
|
||||
This application was originally designed for programmers using Termux.
|
||||
Now perfect for everyday use.
|
||||
이 앱은 처음에는 Termux를 사용하는 프로그래머들을 위한 것으로 개발되었습니다.
|
||||
지금은 일상적인 용도로도 완벽합니다.
|
||||
|
||||
This application contains no ads, doesn't make any network requests and is Open Source."</string> -->
|
||||
이 응용 프로그램에는 광고가 없으며 네트워크 요청을 하지 않고 오픈 소스입니다."</string>
|
||||
<string name="settings_activity_label">Unexpected Keyboard 설정</string>
|
||||
<!-- <string name="pref_portrait">In portrait mode</string> -->
|
||||
<!-- <string name="pref_landscape">In landscape mode</string> -->
|
||||
<string name="pref_portrait">세로 화면</string>
|
||||
<string name="pref_landscape">가로 화면</string>
|
||||
<string name="pref_category_layout">레이아웃</string>
|
||||
<!-- <string name="pref_label_brightness">Adjust label brightness</string> -->
|
||||
<!-- <string name="pref_keyboard_opacity">Adjust keyboard background opacity</string> -->
|
||||
<!-- <string name="pref_key_opacity">Adjust key opacity</string> -->
|
||||
<!-- <string name="pref_key_activated_opacity">Adjust pressed key opacity</string> -->
|
||||
<string name="pref_label_brightness">라벨 밝기 조절</string>
|
||||
<string name="pref_keyboard_opacity">키보드 배경 불투명도 조절</string>
|
||||
<string name="pref_key_opacity">키 불투명도 조절</string>
|
||||
<string name="pref_key_activated_opacity">누른 키 불투명도 조절</string>
|
||||
<string name="pref_layout_e_system">시스템 세팅</string>
|
||||
<!-- <string name="pref_layout_e_custom">Custom layout</string> -->
|
||||
<!-- <string name="pref_layouts_add">Add an alternate layout</string> -->
|
||||
<!-- <string name="pref_layouts_item">Layout %1$d: %2$s</string> -->
|
||||
<!-- <string name="pref_layouts_remove_custom">Remove layout</string> -->
|
||||
<!-- <string name="pref_custom_layout_title">Custom layout</string> -->
|
||||
<!-- <string name="pref_show_numpad_title">Show NumPad</string> -->
|
||||
<!-- <string name="pref_show_numpad_never">Never</string> -->
|
||||
<!-- <string name="pref_show_numpad_landscape">Only in landscape mode</string> -->
|
||||
<!-- <string name="pref_show_numpad_always">Always</string> -->
|
||||
<!-- <string name="pref_number_row_title">Show number row</string> -->
|
||||
<!-- <string name="pref_number_row_summary">Add a number row at the top of the keyboard when the numpad is hidden</string> -->
|
||||
<!-- <string name="pref_numpad_layout">NumPad layout</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_high_first">High digits first</string> -->
|
||||
<!-- <string name="pref_numpad_layout_e_low_first">Low digits first</string> -->
|
||||
<!-- <string name="pref_extra_keys_title">Add keys to the keyboard</string> -->
|
||||
<!-- <string name="pref_extra_keys_custom">Add custom keys</string> -->
|
||||
<!-- <string name="pref_extra_keys_internal">Select keys to add to the keyboard</string> -->
|
||||
<string name="pref_category_typing">타자</string>
|
||||
<string name="pref_layout_e_custom">사용자 정의 레이아웃</string>
|
||||
<string name="pref_layouts_add">대체 레이아웃 추가</string>
|
||||
<string name="pref_layouts_item">레이아웃 %1$d: %2$s</string>
|
||||
<string name="pref_layouts_remove_custom">레이아웃 제거</string>
|
||||
<string name="pref_custom_layout_title">사용자 정의 레이아웃</string>
|
||||
<string name="pref_show_numpad_title">NumPad 표시</string>
|
||||
<string name="pref_show_numpad_never">안 함</string>
|
||||
<string name="pref_show_numpad_landscape">가로 모드에서만</string>
|
||||
<string name="pref_show_numpad_always">항상</string>
|
||||
<string name="pref_number_row_title">숫자 열 표시</string>
|
||||
<string name="pref_number_row_summary">NumPad이 숨겨진 경우 키보드 상단에 숫자 행을 추가합니다.</string>
|
||||
<string name="pref_numpad_layout">NumPad 레이아웃</string>
|
||||
<string name="pref_numpad_layout_e_high_first">높은 자리수 우선</string>
|
||||
<string name="pref_numpad_layout_e_low_first">낮은 자리수 우선</string>
|
||||
<string name="pref_extra_keys_title">키보드에 추가 키 설정</string>
|
||||
<string name="pref_extra_keys_custom">사용자 정의 키 추가</string>
|
||||
<string name="pref_extra_keys_internal">키보드에 추가할 키 선택</string>
|
||||
<string name="pref_category_typing">입력</string>
|
||||
<string name="pref_swipe_dist_title">스와이프 범위</string>
|
||||
<string name="pref_swipe_dist_summary">키 모서리 문자의 입력 범위 (%s)</string>
|
||||
<string name="pref_long_timeout_title">키 길게 누르기 지연</string>
|
||||
<string name="pref_long_timeout_title">길게 누르는 시간</string>
|
||||
<string name="pref_long_interval_title">키 반복 간격</string>
|
||||
<!-- <string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string> -->
|
||||
<!-- <string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string> -->
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
<!-- <string name="pref_autocapitalisation_title">Automatic capitalisation</string> -->
|
||||
<!-- <string name="pref_autocapitalisation_summary">Press Shift at the beginning of a sentence</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_title">Switch to the last used keyboard</string> -->
|
||||
<!-- <string name="pref_switch_input_immediate_summary">Behavior of the keyboard-switching key</string> -->
|
||||
<!-- <string name="pref_vibrate_custom">Custom vibration</string> -->
|
||||
<!-- <string name="pref_vibrate_duration_title">Vibration intensity</string> -->
|
||||
<!-- <string name="pref_pin_entry_enabled_title">Pin entry layout</string> -->
|
||||
<!-- <string name="pref_pin_entry_enabled_summary">When typing numbers, dates and phone numbers</string> -->
|
||||
<string name="pref_keyrepeat_enabled">키보드 입력을 길게 유지할 때 반복</string>
|
||||
<string name="pref_lock_double_tap_title">쉬프트 키 더블 탭을 통해 대문자 잠금 설정</string>
|
||||
<string name="pref_lock_double_tap_summary">modifier를 길게 누르고 있으면 해당 modifier가 잠긴 상태로 유지됩니다.</string>
|
||||
<string name="pref_category_behavior">동작</string>
|
||||
<string name="pref_autocapitalisation_title">자동 대문자 전환</string>
|
||||
<string name="pref_autocapitalisation_summary">문장의 시작에서 Shift 키를 눌러 대문자로 전환합니다.</string>
|
||||
<string name="pref_switch_input_immediate_title">마지막으로 사용한 키보드로 전환</string>
|
||||
<string name="pref_switch_input_immediate_summary">키보드 전환 키의 동작 방식입니다.</string>
|
||||
<string name="pref_vibrate_custom">사용자 정의 진동</string>
|
||||
<string name="pref_vibrate_duration_title">진동 강도</string>
|
||||
<string name="pref_pin_entry_enabled_title">Pin 입력 레이아웃</string>
|
||||
<string name="pref_pin_entry_enabled_summary">숫자를 입력할 때, 날짜와 전화번호를 입력할 때 해당 레이아웃이 사용됩니다.</string>
|
||||
<string name="pref_category_style">스타일</string>
|
||||
<string name="pref_margin_bottom_title">아래 넓이</string>
|
||||
<string name="pref_keyboard_height_title">키보드 높이</string>
|
||||
@ -59,14 +60,18 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_character_size_summary">키보드의 표시되는 폰트 크기 (%.2fx)</string>
|
||||
<string name="pref_theme">테마</string>
|
||||
<string name="pref_theme_e_system">시스템 테마</string>
|
||||
<string name="pref_theme_e_dark">Dark</string>
|
||||
<string name="pref_theme_e_light">Light</string>
|
||||
<string name="pref_theme_e_black">Black</string>
|
||||
<!-- <string name="pref_theme_e_altblack">Alternative Black</string> -->
|
||||
<!-- <string name="pref_theme_e_white">White</string> -->
|
||||
<!-- <string name="pref_theme_e_epaper">ePaper</string> -->
|
||||
<!-- <string name="pref_theme_e_desert">Desert</string> -->
|
||||
<!-- <string name="pref_theme_e_jungle">Jungle</string> -->
|
||||
<string name="pref_theme_e_dark">다크</string>
|
||||
<string name="pref_theme_e_light">라이트</string>
|
||||
<string name="pref_theme_e_black">블랙</string>
|
||||
<string name="pref_theme_e_altblack">대체 블랙</string>
|
||||
<string name="pref_theme_e_white">화이트</string>
|
||||
<string name="pref_theme_e_epaper">종이</string>
|
||||
<string name="pref_theme_e_desert">사막</string>
|
||||
<string name="pref_theme_e_jungle">정글</string>
|
||||
<string name="pref_theme_e_monet">모네트 (시스템)</string>
|
||||
<string name="pref_theme_e_monetlight">모네트 (라이트)</string>
|
||||
<string name="pref_theme_e_monetdark">모네트 (다크)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">매우 짧음</string>
|
||||
<string name="pref_swipe_dist_e_short">짧음</string>
|
||||
<string name="pref_swipe_dist_e_default">보통</string>
|
||||
@ -74,40 +79,60 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_swipe_dist_e_very_far">매우 넓음</string>
|
||||
<string name="pref_key_horizontal_space">키보드 양 옆 간격</string>
|
||||
<string name="pref_key_vertical_space">키보드 세로 간격</string>
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<string name="pref_border_config_title">경계선 사용자 정의</string>
|
||||
<string name="pref_border_width_title">경계선 너비</string>
|
||||
<string name="pref_corners_radius_title">모서리 반지름</string>
|
||||
<string name="pref_circle_sensitivity_title">원형 제스처 감도</string>
|
||||
<string name="pref_circle_sensitivity_e_high">높음</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">중간</string>
|
||||
<string name="pref_circle_sensitivity_e_low">낮음</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">사용 안 함</string>
|
||||
<string name="key_action_next">다음</string>
|
||||
<string name="key_action_done">확인</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
<string name="key_action_go">엔터</string>
|
||||
<string name="key_action_prev">이전</string>
|
||||
<string name="key_action_search">검색</string>
|
||||
<string name="key_action_send">보내기</string>
|
||||
<!-- <string name="launcher_button_imesettings">Enable keyboard</string> -->
|
||||
<!-- <string name="launcher_button_imepicker">Select keyboard</string> -->
|
||||
<!-- <string name="launcher_description">This application is a virtual keyboard. Go to the system settings by clicking on the button below and enable Unexpected-Keyboard.</string> -->
|
||||
<!-- <string name="launcher_sourcecode">This is a free and open source application. You can find the source code or report bugs on GitHub.</string> -->
|
||||
<!-- <string name="launcher_tryhere">After enabling, you can try the keyboard here:</string> -->
|
||||
<!-- <string name="launcher_tryhere_hint">Try here</string> -->
|
||||
<!-- <string name="key_descr_capslock">Caps lock</string> -->
|
||||
<!-- <string name="key_descr_compose">Compose</string> -->
|
||||
<!-- <string name="key_descr_switch_greekmath">Greek & math symbols</string> -->
|
||||
<!-- <string name="key_descr_change_method">Switch keyboard</string> -->
|
||||
<!-- <string name="key_descr_voice_typing">Voice typing</string> -->
|
||||
<!-- <string name="key_descr_copy">Copy</string> -->
|
||||
<!-- <string name="key_descr_paste">Paste</string> -->
|
||||
<!-- <string name="key_descr_cut">Cut</string> -->
|
||||
<!-- <string name="key_descr_selectAll">Select all</string> -->
|
||||
<!-- <string name="key_descr_shareText">Share text</string> -->
|
||||
<!-- <string name="key_descr_pasteAsPlainText">Paste as plain text</string> -->
|
||||
<!-- <string name="key_descr_undo">Undo</string> -->
|
||||
<!-- <string name="key_descr_redo">Redo</string> -->
|
||||
<!-- <string name="key_descr_ª">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_º">Ordinal Indicator</string> -->
|
||||
<!-- <string name="key_descr_superscript">Superscript</string> -->
|
||||
<!-- <string name="key_descr_subscript">Subscript</string> -->
|
||||
<!-- <string name="key_descr_page_up">Page Up</string> -->
|
||||
<!-- <string name="key_descr_page_down">Page Down</string> -->
|
||||
<!-- <string name="key_descr_home">Home</string> -->
|
||||
<!-- <string name="key_descr_end">End</string> -->
|
||||
<string name="launcher_button_imesettings">키보드 활성화</string>
|
||||
<string name="launcher_button_imepicker">키보드 선택</string>
|
||||
<string name="launcher_description">이 앱은 가상 키보드입니다.Unexpected-Keyboard를 클릭하여 시스템 설정으로 이동하고 아래 버튼을 클릭하세요.</string>
|
||||
<string name="launcher_sourcecode">이것은 무료이고 오픈 소스 응용 프로그램입니다. GitHub에서 원본 코드를 찾을 수 있습니다 또는 버그를 신고할 수 있습니다.</string>
|
||||
<string name="launcher_tryhere">켜면 여기에서 키보드를 시험해 볼 수 있습니다:</string>
|
||||
<string name="launcher_tryhere_hint">여기서 시험해 보기</string>
|
||||
<string name="key_descr_capslock">대문자 잠금</string>
|
||||
<string name="key_descr_compose">구성</string>
|
||||
<string name="key_descr_switch_greekmath">그리스 수학 기호 전환</string>
|
||||
<string name="key_descr_change_method">키보드 전환</string>
|
||||
<string name="key_descr_voice_typing">음성 입력</string>
|
||||
<string name="key_descr_copy">복사</string>
|
||||
<string name="key_descr_paste">붙여넣기</string>
|
||||
<string name="key_descr_cut">자르기</string>
|
||||
<string name="key_descr_selectAll">전부 선택</string>
|
||||
<string name="key_descr_shareText">텍스트 공유</string>
|
||||
<string name="key_descr_pasteAsPlainText">일반 텍스트로 붙여넣기</string>
|
||||
<string name="key_descr_undo">실행 취소</string>
|
||||
<string name="key_descr_redo">다시 실행</string>
|
||||
<string name="key_descr_ª">순서 표시기</string>
|
||||
<string name="key_descr_º">순서 표시기</string>
|
||||
<string name="key_descr_superscript">상위 스크립트</string>
|
||||
<string name="key_descr_subscript">하위 스크립트</string>
|
||||
<string name="key_descr_page_up">페이지 위</string>
|
||||
<string name="key_descr_page_down">페이지 아래</string>
|
||||
<string name="key_descr_home">홈</string>
|
||||
<string name="key_descr_end">종료</string>
|
||||
<string name="key_descr_clipboard">클립보드 관리자</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">최근에 복사한 텍스트</string>
|
||||
<string name="clipboard_pin_heading">고정</string>
|
||||
<string name="clipboard_remove_confirm">이 클립보드를 제거하시겠습니까?</string>
|
||||
<string name="clipboard_remove_confirmed">예</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Tagad lieliski piemērota izmantošanai ikdienā.
|
||||
<string name="pref_category_typing">Rakstīšana</string>
|
||||
<string name="pref_swipe_dist_title">Pavilkšanas attālums</string>
|
||||
<string name="pref_swipe_dist_summary">Taustiņu stūros esošo rakstzīmju attālums (%s)</string>
|
||||
<string name="pref_long_timeout_title">Taustiņa atkārtošanās ātrums</string>
|
||||
<string name="pref_long_timeout_title">Ilgas piespiešanas noildze</string>
|
||||
<string name="pref_long_interval_title">Taustiņa atkārtošanās aizture</string>
|
||||
<string name="pref_keyrepeat_enabled">Taustiņa atkārtošanās ar ilgu piespiešanu</string>
|
||||
<string name="pref_lock_double_tap_title">Divkāršs piesitiens burtslēgam</string>
|
||||
<string name="pref_lock_double_tap_summary">Tā vietā, lai ilstoši piespiestu pārveidotāju</string>
|
||||
<string name="pref_category_behavior">Uzvedība</string>
|
||||
@ -67,6 +68,10 @@ Tagad lieliski piemērota izmantošanai ikdienā.
|
||||
<string name="pref_theme_e_epaper">ePapīrs</string>
|
||||
<string name="pref_theme_e_desert">Tuksnesis</string>
|
||||
<string name="pref_theme_e_jungle">Džungļi</string>
|
||||
<string name="pref_theme_e_monet">Monē (sistēmas)</string>
|
||||
<string name="pref_theme_e_monetlight">Monē (gaišs)</string>
|
||||
<string name="pref_theme_e_monetdark">Monē (tumšs)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Ļoti tuvs</string>
|
||||
<string name="pref_swipe_dist_e_short">Tuvs</string>
|
||||
<string name="pref_swipe_dist_e_default">Vidējs</string>
|
||||
@ -77,6 +82,11 @@ Tagad lieliski piemērota izmantošanai ikdienā.
|
||||
<string name="pref_border_config_title">Pielāgot apmales</string>
|
||||
<string name="pref_border_width_title">Apmales platums</string>
|
||||
<string name="pref_corners_radius_title">Stūru rādiuss</string>
|
||||
<string name="pref_circle_sensitivity_title">Apļveida kustības jutīgums</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Augsts</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Vidējs</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Zems</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Atspējots</string>
|
||||
<string name="key_action_next">Nākamais</string>
|
||||
<string name="key_action_done">Darīts</string>
|
||||
<string name="key_action_go">Aiziet</string>
|
||||
@ -112,4 +122,19 @@ Tagad lieliski piemērota izmantošanai ikdienā.
|
||||
<string name="key_descr_page_down">Lejupšķirt</string>
|
||||
<string name="key_descr_home">Sākums</string>
|
||||
<string name="key_descr_end">Beigas</string>
|
||||
<string name="key_descr_clipboard">Starpliktuves pārvaldnieks</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Nesen starpliktuvē ievietots teksts</string>
|
||||
<string name="clipboard_pin_heading">Piesprausts</string>
|
||||
<string name="clipboard_remove_confirm">Noņemt šo starpliktuves vienumu?</string>
|
||||
<string name="clipboard_remove_confirmed">Jā</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Aplikacja nie zawiera reklam, nie żąda dostępu do internetu, a jej kod źród
|
||||
<string name="pref_category_typing">Pisanie</string>
|
||||
<string name="pref_swipe_dist_title">Odległość przesuwania</string>
|
||||
<string name="pref_swipe_dist_summary">Odległość znaków od rogów klawiszy (%s)</string>
|
||||
<string name="pref_long_timeout_title">Opóźnienie powtarzania naciśnięć klawisza</string>
|
||||
<string name="pref_long_interval_title">Czas pomiędzy powtórzeniami</string>
|
||||
<string name="pref_long_timeout_title">Opóźnienie przytrzymania klawisza</string>
|
||||
<string name="pref_long_interval_title">Czas pomiędzy powtórzeniem klawisza</string>
|
||||
<string name="pref_keyrepeat_enabled">Powtarzanie klawisza po przytrzymaniu</string>
|
||||
<string name="pref_lock_double_tap_title">Naciśnij Shift podwójnie, aby włączyć caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Możesz zablokować modyfikator poprzez jego długie naciśnięcie</string>
|
||||
<string name="pref_category_behavior">Zachowanie</string>
|
||||
@ -67,6 +68,10 @@ Aplikacja nie zawiera reklam, nie żąda dostępu do internetu, a jej kod źród
|
||||
<string name="pref_theme_e_epaper">e-paper</string>
|
||||
<string name="pref_theme_e_desert">Pustynny</string>
|
||||
<string name="pref_theme_e_jungle">Dżunglowy</string>
|
||||
<string name="pref_theme_e_monet">Monet (Systemowy)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Jasny)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Ciemny)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Bardzo mała</string>
|
||||
<string name="pref_swipe_dist_e_short">Mała</string>
|
||||
<string name="pref_swipe_dist_e_default">Normalna</string>
|
||||
@ -77,6 +82,11 @@ Aplikacja nie zawiera reklam, nie żąda dostępu do internetu, a jej kod źród
|
||||
<string name="pref_border_config_title">Dostosuj krawędzie</string>
|
||||
<string name="pref_border_width_title">Grubość krawedzi</string>
|
||||
<string name="pref_corners_radius_title">Promień rogów</string>
|
||||
<string name="pref_circle_sensitivity_title">Czułość gestu koła</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Wysoka</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Średnia</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Mała</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Wyłączona</string>
|
||||
<string name="key_action_next">Dalej</string>
|
||||
<string name="key_action_done">OK</string>
|
||||
<string name="key_action_go">Przejdź</string>
|
||||
@ -110,4 +120,19 @@ Aplikacja nie zawiera reklam, nie żąda dostępu do internetu, a jej kod źród
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Zarządzanie schowkiem</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Ostatnio skopiowane elementy</string>
|
||||
<string name="clipboard_pin_heading">Przypięte</string>
|
||||
<string name="clipboard_remove_confirm">Usunąć ten element ze schowka?</string>
|
||||
<string name="clipboard_remove_confirmed">Tak</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Este aplicativo não contém anúncios, não faz nenhuma solicitação de rede e
|
||||
<string name="pref_category_typing">Digitação</string>
|
||||
<string name="pref_swipe_dist_title">Distância a deslizar</string>
|
||||
<string name="pref_swipe_dist_summary">Distância até acionar os cantos das teclas (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tempo até repetir tecla</string>
|
||||
<string name="pref_long_timeout_title">Tempo de pressionamento</string>
|
||||
<string name="pref_long_interval_title">Intervalo de repetição de tecla</string>
|
||||
<string name="pref_keyrepeat_enabled">Repetir tecla ao pressionar</string>
|
||||
<string name="pref_lock_double_tap_title">Tecle duas vezes no shift para travá-lo acionado</string>
|
||||
<string name="pref_lock_double_tap_summary">Ao invés de apertar e segurar por um tempo</string>
|
||||
<string name="pref_category_behavior">Comportamento</string>
|
||||
@ -67,16 +68,25 @@ Este aplicativo não contém anúncios, não faz nenhuma solicitação de rede e
|
||||
<string name="pref_theme_e_epaper">Papel Eletrônico</string>
|
||||
<string name="pref_theme_e_desert">Deserto</string>
|
||||
<string name="pref_theme_e_jungle">Selva</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Bem curto</string>
|
||||
<string name="pref_swipe_dist_e_short">Curto</string>
|
||||
<string name="pref_theme_e_monet">Monet (Sistema)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Claro)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Escuro)</string>
|
||||
<string name="pref_theme_e_rosepine">Rosé Pine</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Bem curta</string>
|
||||
<string name="pref_swipe_dist_e_short">Curta</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
<string name="pref_swipe_dist_e_far">Longo</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Bem longo</string>
|
||||
<string name="pref_swipe_dist_e_far">Longa</string>
|
||||
<string name="pref_swipe_dist_e_very_far">Bem longa</string>
|
||||
<string name="pref_key_horizontal_space">Distância horizontal entre teclas</string>
|
||||
<string name="pref_key_vertical_space">Distância vertical entre teclas</string>
|
||||
<string name="pref_border_config_title">Personalizar bordas</string>
|
||||
<string name="pref_border_width_title">Largura de borda</string>
|
||||
<string name="pref_corners_radius_title">Arredondamento de canto</string>
|
||||
<string name="pref_corners_radius_title">Arredondamento de cantos</string>
|
||||
<string name="pref_circle_sensitivity_title">Sensibilidade do gesto circular</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Alta</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Média</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Baixa</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Desativada</string>
|
||||
<string name="key_action_next">Próximo</string>
|
||||
<string name="key_action_done">Pronto</string>
|
||||
<string name="key_action_go">Ir</string>
|
||||
@ -110,4 +120,19 @@ Este aplicativo não contém anúncios, não faz nenhuma solicitação de rede e
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Área de transferência</string>
|
||||
<string name="key_descr_combining">Combinação de diacríticos</string>
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Textos recém copiados</string>
|
||||
<string name="clipboard_pin_heading">Fixados</string>
|
||||
<string name="clipboard_remove_confirm">Remover esta cópia?</string>
|
||||
<string name="clipboard_remove_confirmed">Sim</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Această aplicație nu conține publicitate, nu folosește rețeaua deloc și e
|
||||
<string name="pref_category_typing">Tipărire</string>
|
||||
<string name="pref_swipe_dist_title">Distanța de glisare</string>
|
||||
<string name="pref_swipe_dist_summary">Distanța dintre caracterele din colțurile tastelor (%s)</string>
|
||||
<string name="pref_long_timeout_title">Timeout pentru repetarea tastelor</string>
|
||||
<!-- <string name="pref_long_timeout_title">Long press timeout</string> -->
|
||||
<string name="pref_long_interval_title">Intervalul de repetare a tastelor</string>
|
||||
<!-- <string name="pref_keyrepeat_enabled">Key repeat on long press</string> -->
|
||||
<string name="pref_lock_double_tap_title">Apăsare dublă pe Shift activează Caps Lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Puteți activa orice modificator, ținându-l apăsat</string>
|
||||
<string name="pref_category_behavior">Comportament</string>
|
||||
@ -67,6 +68,10 @@ Această aplicație nu conține publicitate, nu folosește rețeaua deloc și e
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<!-- <string name="pref_theme_e_desert">Desert</string> -->
|
||||
<!-- <string name="pref_theme_e_jungle">Jungle</string> -->
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Foarte apropiată</string>
|
||||
<string name="pref_swipe_dist_e_short">Apropiată</string>
|
||||
<string name="pref_swipe_dist_e_default">Normală</string>
|
||||
@ -77,6 +82,11 @@ Această aplicație nu conține publicitate, nu folosește rețeaua deloc și e
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_high">High</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_medium">Medium</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_low">Low</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_disabled">Disabled</string> -->
|
||||
<string name="key_action_next">Următor</string>
|
||||
<string name="key_action_done">Gata</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
@ -110,4 +120,19 @@ Această aplicație nu conține publicitate, nu folosește rețeaua deloc și e
|
||||
<!-- <string name="key_descr_page_down">Page Down</string> -->
|
||||
<!-- <string name="key_descr_home">Home</string> -->
|
||||
<!-- <string name="key_descr_end">End</string> -->
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,9 +38,10 @@
|
||||
<string name="pref_category_typing">Набор текста</string>
|
||||
<string name="pref_swipe_dist_title">Длина жеста</string>
|
||||
<string name="pref_swipe_dist_summary">Расстояние между символами в углах клавиш (%s)</string>
|
||||
<string name="pref_long_timeout_title">Задержка повтора клавиш</string>
|
||||
<string name="pref_long_timeout_title">Задержка долгого нажатия</string>
|
||||
<string name="pref_long_interval_title">Интервал повтора клавиш</string>
|
||||
<string name="pref_lock_double_tap_title">Двойное нажатие Shift включает CapsLock</string>
|
||||
<string name="pref_keyrepeat_enabled">Повтор клавиши при долгом нажатии</string>
|
||||
<string name="pref_lock_double_tap_title">CapsLock двойным нажатием Shift</string>
|
||||
<string name="pref_lock_double_tap_summary">Также можно активировать модификатор долгим нажатием</string>
|
||||
<string name="pref_category_behavior">Поведение</string>
|
||||
<string name="pref_autocapitalisation_title">Автоматическая смена регистра</string>
|
||||
@ -67,6 +68,10 @@
|
||||
<string name="pref_theme_e_epaper">Электронная бумага</string>
|
||||
<string name="pref_theme_e_desert">Пустыня</string>
|
||||
<string name="pref_theme_e_jungle">Джунгли</string>
|
||||
<string name="pref_theme_e_monet">Моне (системная)</string>
|
||||
<string name="pref_theme_e_monetlight">Моне (светлая)</string>
|
||||
<string name="pref_theme_e_monetdark">Моне (темная)</string>
|
||||
<string name="pref_theme_e_rosepine">Розовая сосна</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Очень короткая</string>
|
||||
<string name="pref_swipe_dist_e_short">Короткая</string>
|
||||
<string name="pref_swipe_dist_e_default">Обычная</string>
|
||||
@ -77,6 +82,11 @@
|
||||
<string name="pref_border_config_title">Настройка рамки</string>
|
||||
<string name="pref_border_width_title">Ширина рамки</string>
|
||||
<string name="pref_corners_radius_title">Радиус скругления</string>
|
||||
<string name="pref_circle_sensitivity_title">Чувствительность круговых жестов</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Высокая</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Средняя</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Низкая</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Отключено</string>
|
||||
<string name="key_action_next">Вперед</string>
|
||||
<string name="key_action_done">Ввод</string>
|
||||
<string name="key_action_go">Перейти</string>
|
||||
@ -110,4 +120,19 @@
|
||||
<string name="key_descr_page_down">Страница вниз</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Менеджер буфера обмена</string>
|
||||
<string name="key_descr_combining">Сочетание диакритических знаков</string>
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<string name="key_descr_zwj">Соединитель нулевой ширины</string>
|
||||
<string name="key_descr_zwnj">Разделитель нулевой ширины</string>
|
||||
<string name="key_descr_nbsp">Неразрывный пробел</string>
|
||||
<string name="key_descr_nnbsp">Узкий неразрывный пробел</string>
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Недавно скопированный текст</string>
|
||||
<string name="clipboard_pin_heading">Закреплено</string>
|
||||
<string name="clipboard_remove_confirm">Удалить этот буфер обмена?</string>
|
||||
<string name="clipboard_remove_confirmed">Да</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Bu uygulama açık kaynaklıdır. Reklam içermez ve internete bağlanmaz."</str
|
||||
<string name="pref_category_typing">Yazma</string>
|
||||
<string name="pref_swipe_dist_title">Kaydırma mesafesi</string>
|
||||
<string name="pref_swipe_dist_summary">Tuşların köşelerinden kaydırma mesafesi (%s)</string>
|
||||
<string name="pref_long_timeout_title">Tuşların tekrarlaması için geçmesi gereken süre</string>
|
||||
<string name="pref_long_timeout_title">Uzun basma süresi</string>
|
||||
<string name="pref_long_interval_title">Tuşların tekrarlama sıklığı</string>
|
||||
<string name="pref_keyrepeat_enabled">Uzun basınca tuş tekrarlamaları</string>
|
||||
<string name="pref_lock_double_tap_title">CapsLock için Shift tuşuna çift bas</string>
|
||||
<string name="pref_lock_double_tap_summary">Uzun basarak CapsLock açılabilir</string>
|
||||
<string name="pref_category_behavior">Klavye davranışı</string>
|
||||
@ -67,6 +68,10 @@ Bu uygulama açık kaynaklıdır. Reklam içermez ve internete bağlanmaz."</str
|
||||
<string name="pref_theme_e_epaper">E-Kağıt</string>
|
||||
<string name="pref_theme_e_desert">Çöl</string>
|
||||
<string name="pref_theme_e_jungle">Orman</string>
|
||||
<string name="pref_theme_e_monet">Monet (Sisteme uyarla)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Açık)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Koyu)</string>
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Çok kısa</string>
|
||||
<string name="pref_swipe_dist_e_short">Kısa</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
@ -74,9 +79,14 @@ Bu uygulama açık kaynaklıdır. Reklam içermez ve internete bağlanmaz."</str
|
||||
<string name="pref_swipe_dist_e_very_far">Çok uzun</string>
|
||||
<string name="pref_key_horizontal_space">Tuşlar arasındaki yatay boşluk</string>
|
||||
<string name="pref_key_vertical_space">Tuşlar arasındaki dikey boşluk</string>
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<string name="pref_border_config_title">Çerçeveyi özelleştir</string>
|
||||
<string name="pref_border_width_title">Çerçeve kalınlığı</string>
|
||||
<string name="pref_corners_radius_title">Kenar yumuşaklığı</string>
|
||||
<string name="pref_circle_sensitivity_title">Dairesel hareket hassasiyeti</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Yüksek</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Orta</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Düşük</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Devre dışı</string>
|
||||
<string name="key_action_next">Sonraki</string>
|
||||
<string name="key_action_done">Tamam</string>
|
||||
<string name="key_action_go">ileri</string>
|
||||
@ -88,9 +98,9 @@ Bu uygulama açık kaynaklıdır. Reklam içermez ve internete bağlanmaz."</str
|
||||
<string name="launcher_description">Bu uygulama bir sanal klavye uygulamasıdır. Aşağıdaki butona basarak sistem ayarlarında etkinleştiriniz.</string>
|
||||
<string name="launcher_sourcecode">Bu uygulama ücretsiz ve açık kaynaklıdır. Kaynak koduna erişmek veya bir hata raporlamak için GitHub</string>
|
||||
<string name="launcher_tryhere">Ayarlardan aktif ettikten sonra klavyeyi burada test edebilirsin:</string>
|
||||
<!-- <string name="launcher_tryhere_hint">Try here</string> -->
|
||||
<string name="launcher_tryhere_hint">Burada dene</string>
|
||||
<string name="key_descr_capslock">CapsLock</string>
|
||||
<!-- <string name="key_descr_compose">Compose</string> -->
|
||||
<string name="key_descr_compose">Oluştur</string>
|
||||
<string name="key_descr_switch_greekmath">Greek & math sembolleri</string>
|
||||
<string name="key_descr_change_method">Klavye değiştir</string>
|
||||
<string name="key_descr_voice_typing">Sesle yazma</string>
|
||||
@ -110,4 +120,19 @@ Bu uygulama açık kaynaklıdır. Reklam içermez ve internete bağlanmaz."</str
|
||||
<string name="key_descr_page_down">Aşağı</string>
|
||||
<string name="key_descr_home">BAŞ(Sol yön tuşu)</string>
|
||||
<string name="key_descr_end">SON(Sağ yön tuşu)</string>
|
||||
<string name="key_descr_clipboard">Pano</string>
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Son kopyalanan metin</string>
|
||||
<string name="clipboard_pin_heading">Sabitlendi</string>
|
||||
<string name="clipboard_remove_confirm">Bu sabitlemeyi sil</string>
|
||||
<string name="clipboard_remove_confirmed">Evet</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@
|
||||
<string name="pref_category_typing">Введення</string>
|
||||
<string name="pref_swipe_dist_title">Відстань проведення</string>
|
||||
<string name="pref_swipe_dist_summary">Відстань між символами в кутах клавіш (%s)</string>
|
||||
<string name="pref_long_timeout_title">Час очікування повтору клавіші</string>
|
||||
<string name="pref_long_timeout_title">Час очікування тривалого натискання</string>
|
||||
<string name="pref_long_interval_title">Інтервал повторення клавіш</string>
|
||||
<string name="pref_keyrepeat_enabled">Повторення клавіші при тривалому натисканні</string>
|
||||
<string name="pref_lock_double_tap_title">Двічі торкніться Shift для Caps Lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Ви можете заблокувати будь-який модифікатор, утримуючи його</string>
|
||||
<string name="pref_category_behavior">Поведінка</string>
|
||||
@ -67,6 +68,10 @@
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Пустеля</string>
|
||||
<string name="pref_theme_e_jungle">Джунглі</string>
|
||||
<string name="pref_theme_e_monet">Моне (Системна)</string>
|
||||
<string name="pref_theme_e_monetlight">Моне (Світла)</string>
|
||||
<string name="pref_theme_e_monetdark">Моне (Темна)</string>
|
||||
<string name="pref_theme_e_rosepine">Рожева сосна</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Дуже коротка</string>
|
||||
<string name="pref_swipe_dist_e_short">Коротка</string>
|
||||
<string name="pref_swipe_dist_e_default">Звичайна</string>
|
||||
@ -77,6 +82,11 @@
|
||||
<string name="pref_border_config_title">Налаштувати межі</string>
|
||||
<string name="pref_border_width_title">Ширина межі</string>
|
||||
<string name="pref_corners_radius_title">Радіус кута</string>
|
||||
<string name="pref_circle_sensitivity_title">Чутливість до колових жестів</string>
|
||||
<string name="pref_circle_sensitivity_e_high">Висока</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Середня</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Низька</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Вимкнено</string>
|
||||
<string name="key_action_next">Далі</string>
|
||||
<string name="key_action_done">Готово</string>
|
||||
<string name="key_action_go">Іти</string>
|
||||
@ -110,4 +120,19 @@
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Менеджер буфера обміну</string>
|
||||
<string name="key_descr_combining">Комбінування діакритики</string>
|
||||
<string name="key_descr_dead_key">Мертва клавіша</string>
|
||||
<string name="key_descr_zwj">З\'єднувач нульової ширини</string>
|
||||
<string name="key_descr_zwnj">Разділювач нульової ширини</string>
|
||||
<string name="key_descr_nbsp">Нерозривний пробіл</string>
|
||||
<string name="key_descr_nnbsp">Вузький нерозривний пробіл</string>
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<string name="clipboard_history_heading">Нещодавно скопійований текст</string>
|
||||
<string name="clipboard_pin_heading">Закріплено</string>
|
||||
<string name="clipboard_remove_confirm">Видалити цей буфер обміну?</string>
|
||||
<string name="clipboard_remove_confirmed">Так</string>
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@ Bây giờ đã hoàn hảo cho việc sử dụng hàng ngày.
|
||||
<string name="pref_category_typing">Gõ</string>
|
||||
<string name="pref_swipe_dist_title">Khoảng cách vuốt</string>
|
||||
<string name="pref_swipe_dist_summary">Khoảng cách giữa các ký tự ở góc phím (%s)</string>
|
||||
<string name="pref_long_timeout_title">Thời hạn lặp phím</string>
|
||||
<!-- <string name="pref_long_timeout_title">Long press timeout</string> -->
|
||||
<string name="pref_long_interval_title">Khoảng thời gian lặp phím</string>
|
||||
<!-- <string name="pref_keyrepeat_enabled">Key repeat on long press</string> -->
|
||||
<string name="pref_lock_double_tap_title">Nhấn hai lần Shift để bật Caps Lock</string>
|
||||
<string name="pref_lock_double_tap_summary">Bạn có thể khóa phím hỗ trợ bằng cách giữ vào nó</string>
|
||||
<!-- <string name="pref_category_behavior">Behavior</string> -->
|
||||
@ -67,6 +68,10 @@ Bây giờ đã hoàn hảo cho việc sử dụng hàng ngày.
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<!-- <string name="pref_theme_e_desert">Desert</string> -->
|
||||
<!-- <string name="pref_theme_e_jungle">Jungle</string> -->
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">Rất gần</string>
|
||||
<string name="pref_swipe_dist_e_short">Gần</string>
|
||||
<string name="pref_swipe_dist_e_default">Trungbình</string>
|
||||
@ -77,6 +82,11 @@ Bây giờ đã hoàn hảo cho việc sử dụng hàng ngày.
|
||||
<!-- <string name="pref_border_config_title">Customize borders</string> -->
|
||||
<!-- <string name="pref_border_width_title">Border Width</string> -->
|
||||
<!-- <string name="pref_corners_radius_title">Corner radius</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_high">High</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_medium">Medium</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_low">Low</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_disabled">Disabled</string> -->
|
||||
<string name="key_action_next">Tiếp</string>
|
||||
<string name="key_action_done">Xong</string>
|
||||
<string name="key_action_go">Đi</string>
|
||||
@ -110,4 +120,19 @@ Bây giờ đã hoàn hảo cho việc sử dụng hàng ngày.
|
||||
<!-- <string name="key_descr_page_down">Page Down</string> -->
|
||||
<!-- <string name="key_descr_home">Home</string> -->
|
||||
<!-- <string name="key_descr_end">End</string> -->
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -38,8 +38,9 @@
|
||||
<string name="pref_category_typing">输入</string>
|
||||
<string name="pref_swipe_dist_title">滑动触发距离</string>
|
||||
<string name="pref_swipe_dist_summary">输入按键四角的符号需要滑动的距离 (%s)</string>
|
||||
<string name="pref_long_timeout_title">长按到开始重复输入的时间</string>
|
||||
<!-- <string name="pref_long_timeout_title">Long press timeout</string> -->
|
||||
<string name="pref_long_interval_title">长按后每次重复输入的时间间隔</string>
|
||||
<!-- <string name="pref_keyrepeat_enabled">Key repeat on long press</string> -->
|
||||
<string name="pref_lock_double_tap_title">双击 Shift 键锁定大写</string>
|
||||
<string name="pref_lock_double_tap_summary">任何时候长按修饰键均可将其锁定</string>
|
||||
<string name="pref_category_behavior">行为</string>
|
||||
@ -67,6 +68,10 @@
|
||||
<string name="pref_theme_e_epaper">白色带边框</string>
|
||||
<string name="pref_theme_e_desert">沙漠</string>
|
||||
<string name="pref_theme_e_jungle">雨林</string>
|
||||
<!-- <string name="pref_theme_e_monet">Monet (System)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetlight">Monet (Light)</string> -->
|
||||
<!-- <string name="pref_theme_e_monetdark">Monet (Dark)</string> -->
|
||||
<!-- <string name="pref_theme_e_rosepine">Rosé Pine</string> -->
|
||||
<string name="pref_swipe_dist_e_very_short">非常短</string>
|
||||
<string name="pref_swipe_dist_e_short">短</string>
|
||||
<string name="pref_swipe_dist_e_default">中(默认)</string>
|
||||
@ -77,6 +82,11 @@
|
||||
<string name="pref_border_config_title">自定义边界</string>
|
||||
<string name="pref_border_width_title">边界宽度</string>
|
||||
<string name="pref_corners_radius_title">圆角半径</string>
|
||||
<!-- <string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_high">High</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_medium">Medium</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_low">Low</string> -->
|
||||
<!-- <string name="pref_circle_sensitivity_e_disabled">Disabled</string> -->
|
||||
<string name="key_action_next">下一项</string>
|
||||
<string name="key_action_done">完成</string>
|
||||
<string name="key_action_go">前往</string>
|
||||
@ -110,4 +120,19 @@
|
||||
<string name="key_descr_page_down">下一页</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<!-- <string name="key_descr_clipboard">Clipboard manager</string> -->
|
||||
<!-- <string name="key_descr_combining">Combining diacritic</string> -->
|
||||
<!-- <string name="key_descr_dead_key">Dead key</string> -->
|
||||
<!-- <string name="key_descr_zwj">Zero width joiner</string> -->
|
||||
<!-- <string name="key_descr_zwnj">Zero width non-joiner</string> -->
|
||||
<!-- <string name="key_descr_nbsp">Non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_nnbsp">Narrow non-breaking space</string> -->
|
||||
<!-- <string name="key_descr_delete_word">Delete a word</string> -->
|
||||
<!-- <string name="key_descr_forward_delete_word">Delete a word on the right</string> -->
|
||||
<!-- <string name="key_descr_gesture">Gesture</string> -->
|
||||
<!-- <string name="clipboard_history_heading">Recently copied text</string> -->
|
||||
<!-- <string name="clipboard_pin_heading">Pinned</string> -->
|
||||
<!-- <string name="clipboard_remove_confirm">Remove this clipboard?</string> -->
|
||||
<!-- <string name="clipboard_remove_confirmed">Yes</string> -->
|
||||
<!-- <string name="toast_no_voice_input">No voice typing app installed</string> -->
|
||||
</resources>
|
||||
|
@ -28,6 +28,10 @@
|
||||
<item>@string/pref_theme_e_epaper</item>
|
||||
<item>@string/pref_theme_e_desert</item>
|
||||
<item>@string/pref_theme_e_jungle</item>
|
||||
<item>@string/pref_theme_e_monet</item>
|
||||
<item>@string/pref_theme_e_monetlight</item>
|
||||
<item>@string/pref_theme_e_monetdark</item>
|
||||
<item>@string/pref_theme_e_rosepine</item>
|
||||
</string-array>
|
||||
<string-array name="pref_theme_values">
|
||||
<item>system</item>
|
||||
@ -39,6 +43,10 @@
|
||||
<item>epaper</item>
|
||||
<item>desert</item>
|
||||
<item>jungle</item>
|
||||
<item>monet</item>
|
||||
<item>monetlight</item>
|
||||
<item>monetdark</item>
|
||||
<item>rosepine</item>
|
||||
</string-array>
|
||||
<string-array name="pref_swipe_dist_entries">
|
||||
<item>@string/pref_swipe_dist_e_very_short</item>
|
||||
@ -54,4 +62,16 @@
|
||||
<item>25</item>
|
||||
<item>35</item>
|
||||
</string-array>
|
||||
<string-array name="pref_circle_sensitivity_entries">
|
||||
<item>@string/pref_circle_sensitivity_e_high</item>
|
||||
<item>@string/pref_circle_sensitivity_e_medium</item>
|
||||
<item>@string/pref_circle_sensitivity_e_low</item>
|
||||
<item>@string/pref_circle_sensitivity_e_disabled</item>
|
||||
</string-array>
|
||||
<string-array name="pref_circle_sensitivity_values">
|
||||
<item>2</item>
|
||||
<item>3</item>
|
||||
<item>4</item>
|
||||
<item>12</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--DO NOT EDIT. This file is generated, see gen_layouts.py.-->
|
||||
<!-- DO NOT EDIT. This file is generated, run 'gradle genLayoutsList'. -->
|
||||
<string-array name="pref_layout_values">
|
||||
<item>system</item>
|
||||
<item>latn_qwerty_us</item>
|
||||
@ -10,49 +10,77 @@
|
||||
<item>arab_hamvaj_tly</item>
|
||||
<item>arab_pc</item>
|
||||
<item>arab_pc_ckb</item>
|
||||
<item>arab_pc_ckb_fa</item>
|
||||
<item>arab_pc_hindu</item>
|
||||
<item>arab_pc_ir</item>
|
||||
<item>armenian_ph_am</item>
|
||||
<item>beng_national</item>
|
||||
<item>beng_provat</item>
|
||||
<item>cyrl_fcuzhen_mn</item>
|
||||
<item>cyrl_jcuken_kk</item>
|
||||
<item>cyrl_jcuken_ru</item>
|
||||
<item>cyrl_jcuken_uk</item>
|
||||
<item>cyrl_lynyertz_sr</item>
|
||||
<item>cyrl_ueishsht</item>
|
||||
<item>cyrl_yaverti</item>
|
||||
<item>cyrl_yqukeng_tj</item>
|
||||
<item>cyrl_yxukeng_os</item>
|
||||
<item>deva_alt</item>
|
||||
<item>deva_inscript</item>
|
||||
<item>deva_phonetic_in</item>
|
||||
<item>georgian_mes</item>
|
||||
<item>georgian_qwerty</item>
|
||||
<item>grek_qwerty</item>
|
||||
<item>guj_phonetic_in</item>
|
||||
<item>hang_dubeolsik_kr</item>
|
||||
<item>hebr_1_il</item>
|
||||
<item>hebr_2_il</item>
|
||||
<item>kann_kannada</item>
|
||||
<item>latn_azerty_be</item>
|
||||
<item>latn_azerty_fr</item>
|
||||
<item>latn_bepo_fr</item>
|
||||
<item>latn_bone</item>
|
||||
<item>latn_neo2</item>
|
||||
<item>latn_qwerty_apl</item>
|
||||
<item>latn_qwerty_az</item>
|
||||
<item>latn_qwerty_bqn</item>
|
||||
<item>latn_qwerty_br</item>
|
||||
<item>latn_qwerty_cy</item>
|
||||
<item>latn_qwerty_cz</item>
|
||||
<item>latn_qwerty_da</item>
|
||||
<item>latn_qwerty_es</item>
|
||||
<item>latn_qwerty_et</item>
|
||||
<item>latn_qwerty_ga</item>
|
||||
<item>latn_qwerty_gb</item>
|
||||
<item>latn_qwerty_haw</item>
|
||||
<item>latn_qwerty_hu</item>
|
||||
<item>latn_qwerty_jp</item>
|
||||
<item>latn_qwerty_kk</item>
|
||||
<item>latn_qwerty_lt</item>
|
||||
<item>latn_qwerty_lv</item>
|
||||
<item>latn_qwerty_mt</item>
|
||||
<item>latn_qwerty_no</item>
|
||||
<item>latn_qwerty_pl</item>
|
||||
<item>latn_qwerty_ro</item>
|
||||
<item>latn_qwerty_se</item>
|
||||
<item>latn_qwerty_sk</item>
|
||||
<item>latn_qwerty_sr</item>
|
||||
<item>latn_qwerty_tly</item>
|
||||
<item>latn_qwerty_tr</item>
|
||||
<item>latn_qwerty_uz</item>
|
||||
<item>latn_qwerty_vi</item>
|
||||
<item>latn_qwertz</item>
|
||||
<item>latn_qwertz_cz</item>
|
||||
<item>latn_qwertz_cz_diacritics</item>
|
||||
<item>latn_qwertz_cz_multifunctional</item>
|
||||
<item>latn_qwertz_de</item>
|
||||
<item>latn_qwertz_fr_ch</item>
|
||||
<item>latn_qwertz_hu</item>
|
||||
<item>latn_qwertz_sk</item>
|
||||
<item>latn_qwertz_sq</item>
|
||||
<item>latn_workman_us</item>
|
||||
<item>shaw_imperial_en</item>
|
||||
<item>tamil_default</item>
|
||||
<item>urdu_phonetic_ur</item>
|
||||
<item>custom</item>
|
||||
</string-array>
|
||||
@ -64,50 +92,78 @@
|
||||
<item>Arabic Alt</item>
|
||||
<item>Talysh (تالشی همواج)</item>
|
||||
<item>Arabic PC</item>
|
||||
<item>Kurdish (کوردی)</item>
|
||||
<item>Kurdish (کوردی) QWERTY</item>
|
||||
<item>Central Kurdish (سۆرانی) Persian Layout</item>
|
||||
<item>Arabic PC (Hindu numerals)</item>
|
||||
<item>Persian PC</item>
|
||||
<item>Armenian</item>
|
||||
<item>বাংলা (জাতীয়)</item>
|
||||
<item>বাংলা (প্রভাত)</item>
|
||||
<item>ФЦУЖЭН (Монгол)</item>
|
||||
<item>ЙЦУКЕН (Қазақша)</item>
|
||||
<item>ЙЦУКЕН (Русский)</item>
|
||||
<item>ЙЦУКЕН (Українська)</item>
|
||||
<item>ЉЊЕРТЗ (Српски)</item>
|
||||
<item>УЕИШЩ (Български, БДС)</item>
|
||||
<item>ЯВЕРТЪ</item>
|
||||
<item>Tajiki Persian (Тоҷикӣ)</item>
|
||||
<item>Old Church Slavonic (Црькъвьнословѣньскъ ѩзыкъ)</item>
|
||||
<item>देवनागरी (हिंदी)-2</item>
|
||||
<item>देवनागरी (हिंदी)-1</item>
|
||||
<item>हिन्दी फोनेटिक - Hindi Phonetic</item>
|
||||
<item>ქართული (MES)</item>
|
||||
<item>ქართული (QWERTY)</item>
|
||||
<item>QWERTY (Greek)</item>
|
||||
<item>ગુજરાતી ફોનેટિક - Gujarati Phonetic</item>
|
||||
<item>두벌식 (Korean)</item>
|
||||
<item>Hebrew 1</item>
|
||||
<item>Hebrew 2</item>
|
||||
<item>ಕನ್ನಡ - Kannada</item>
|
||||
<item>AZERTY (Belgian)</item>
|
||||
<item>AZERTY (Français)</item>
|
||||
<item>BEPO (Français)</item>
|
||||
<item>Bone</item>
|
||||
<item>Neo 2</item>
|
||||
<item>QWERTY (APL)</item>
|
||||
<item>QWERTY (Azərbaycanca)</item>
|
||||
<item>QWERTY (BQN)</item>
|
||||
<item>QWERTY (Brasileiro)</item>
|
||||
<item>QWERTY (Welsh)</item>
|
||||
<item>QWERTY (Czech)</item>
|
||||
<item>QWERTY (Danish)</item>
|
||||
<item>QWERTY (Español)</item>
|
||||
<item>QWERTY (eesti)</item>
|
||||
<item>QWERTY (Irish)</item>
|
||||
<item>QWERTY (UK)</item>
|
||||
<item>QWERTY (Hawaiian)</item>
|
||||
<item>QWERTY (Magyar)</item>
|
||||
<item>QWERTY (Japan)</item>
|
||||
<item>QWERTY (Qazaqşa)</item>
|
||||
<item>QWERTY (Lietuviškai)</item>
|
||||
<item>QWERTY (Latvian)</item>
|
||||
<item>QWERTY (Malti)</item>
|
||||
<item>QWERTY (Norwegian)</item>
|
||||
<item>QWERTY (Polski)</item>
|
||||
<item>QWERTY (Română)</item>
|
||||
<item>QWERTY (Swedish)</item>
|
||||
<item>QWERTY (Slovak)</item>
|
||||
<item>QWERTY (Srpski, latinica)</item>
|
||||
<item>QWERTY (Talysh New Latin)</item>
|
||||
<item>QWERTY (Türkçe)</item>
|
||||
<item>QWERTY (Oʻzbekcha)</item>
|
||||
<item>QWERTY (Vietnamese)</item>
|
||||
<item>QWERTZ</item>
|
||||
<item>QWERTZ (Czech)</item>
|
||||
<item>QWERTZ (Czech with diacritic keys)</item>
|
||||
<item>QWERTZ Multifunctional (Czech)</item>
|
||||
<item>QWERTZ (Deutsch)</item>
|
||||
<item>QWERTZ (Swiss French)</item>
|
||||
<item>QWERTZ (Magyar)</item>
|
||||
<item>QWERTZ (Slovak)</item>
|
||||
<item>QWERTZ (Albanian)</item>
|
||||
<item>WORKMAN (US)</item>
|
||||
<item>Shaw Imperial</item>
|
||||
<item>தமிழ்</item>
|
||||
<item>Urdu Phonetic</item>
|
||||
<item>@string/pref_layout_e_custom</item>
|
||||
</string-array>
|
||||
@ -120,49 +176,77 @@
|
||||
<item>@xml/arab_hamvaj_tly</item>
|
||||
<item>@xml/arab_pc</item>
|
||||
<item>@xml/arab_pc_ckb</item>
|
||||
<item>@xml/arab_pc_ckb_fa</item>
|
||||
<item>@xml/arab_pc_hindu</item>
|
||||
<item>@xml/arab_pc_ir</item>
|
||||
<item>@xml/armenian_ph_am</item>
|
||||
<item>@xml/beng_national</item>
|
||||
<item>@xml/beng_provat</item>
|
||||
<item>@xml/cyrl_fcuzhen_mn</item>
|
||||
<item>@xml/cyrl_jcuken_kk</item>
|
||||
<item>@xml/cyrl_jcuken_ru</item>
|
||||
<item>@xml/cyrl_jcuken_uk</item>
|
||||
<item>@xml/cyrl_lynyertz_sr</item>
|
||||
<item>@xml/cyrl_ueishsht</item>
|
||||
<item>@xml/cyrl_yaverti</item>
|
||||
<item>@xml/cyrl_yqukeng_tj</item>
|
||||
<item>@xml/cyrl_yxukeng_os</item>
|
||||
<item>@xml/deva_alt</item>
|
||||
<item>@xml/deva_inscript</item>
|
||||
<item>@xml/deva_phonetic_in</item>
|
||||
<item>@xml/georgian_mes</item>
|
||||
<item>@xml/georgian_qwerty</item>
|
||||
<item>@xml/grek_qwerty</item>
|
||||
<item>@xml/guj_phonetic_in</item>
|
||||
<item>@xml/hang_dubeolsik_kr</item>
|
||||
<item>@xml/hebr_1_il</item>
|
||||
<item>@xml/hebr_2_il</item>
|
||||
<item>@xml/kann_kannada</item>
|
||||
<item>@xml/latn_azerty_be</item>
|
||||
<item>@xml/latn_azerty_fr</item>
|
||||
<item>@xml/latn_bepo_fr</item>
|
||||
<item>@xml/latn_bone</item>
|
||||
<item>@xml/latn_neo2</item>
|
||||
<item>@xml/latn_qwerty_apl</item>
|
||||
<item>@xml/latn_qwerty_az</item>
|
||||
<item>@xml/latn_qwerty_bqn</item>
|
||||
<item>@xml/latn_qwerty_br</item>
|
||||
<item>@xml/latn_qwerty_cy</item>
|
||||
<item>@xml/latn_qwerty_cz</item>
|
||||
<item>@xml/latn_qwerty_da</item>
|
||||
<item>@xml/latn_qwerty_es</item>
|
||||
<item>@xml/latn_qwerty_et</item>
|
||||
<item>@xml/latn_qwerty_ga</item>
|
||||
<item>@xml/latn_qwerty_gb</item>
|
||||
<item>@xml/latn_qwerty_haw</item>
|
||||
<item>@xml/latn_qwerty_hu</item>
|
||||
<item>@xml/latn_qwerty_jp</item>
|
||||
<item>@xml/latn_qwerty_kk</item>
|
||||
<item>@xml/latn_qwerty_lt</item>
|
||||
<item>@xml/latn_qwerty_lv</item>
|
||||
<item>@xml/latn_qwerty_mt</item>
|
||||
<item>@xml/latn_qwerty_no</item>
|
||||
<item>@xml/latn_qwerty_pl</item>
|
||||
<item>@xml/latn_qwerty_ro</item>
|
||||
<item>@xml/latn_qwerty_se</item>
|
||||
<item>@xml/latn_qwerty_sk</item>
|
||||
<item>@xml/latn_qwerty_sr</item>
|
||||
<item>@xml/latn_qwerty_tly</item>
|
||||
<item>@xml/latn_qwerty_tr</item>
|
||||
<item>@xml/latn_qwerty_uz</item>
|
||||
<item>@xml/latn_qwerty_vi</item>
|
||||
<item>@xml/latn_qwertz</item>
|
||||
<item>@xml/latn_qwertz_cz</item>
|
||||
<item>@xml/latn_qwertz_cz_diacritics</item>
|
||||
<item>@xml/latn_qwertz_cz_multifunctional</item>
|
||||
<item>@xml/latn_qwertz_de</item>
|
||||
<item>@xml/latn_qwertz_fr_ch</item>
|
||||
<item>@xml/latn_qwertz_hu</item>
|
||||
<item>@xml/latn_qwertz_sk</item>
|
||||
<item>@xml/latn_qwertz_sq</item>
|
||||
<item>@xml/latn_workman_us</item>
|
||||
<item>@xml/shaw_imperial_en</item>
|
||||
<item>@xml/tamil_default</item>
|
||||
<item>@xml/urdu_phonetic_ur</item>
|
||||
<item>-1</item>
|
||||
</integer-array>
|
||||
|
@ -38,8 +38,9 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_category_typing">Typing</string>
|
||||
<string name="pref_swipe_dist_title">Swiping distance</string>
|
||||
<string name="pref_swipe_dist_summary">Distance of characters in the corners of the keys (%s)</string>
|
||||
<string name="pref_long_timeout_title">Key repeat timeout</string>
|
||||
<string name="pref_long_timeout_title">Long press timeout</string>
|
||||
<string name="pref_long_interval_title">Key repeat interval</string>
|
||||
<string name="pref_keyrepeat_enabled">Key repeat on long press</string>
|
||||
<string name="pref_lock_double_tap_title">Double tap on shift for caps lock</string>
|
||||
<string name="pref_lock_double_tap_summary">You can lock any modifier by holding it</string>
|
||||
<string name="pref_category_behavior">Behavior</string>
|
||||
@ -67,6 +68,10 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_theme_e_epaper">ePaper</string>
|
||||
<string name="pref_theme_e_desert">Desert</string>
|
||||
<string name="pref_theme_e_jungle">Jungle</string>
|
||||
<string name="pref_theme_e_monet">Monet (System)</string>
|
||||
<string name="pref_theme_e_monetlight">Monet (Light)</string>
|
||||
<string name="pref_theme_e_monetdark">Monet (Dark)</string>
|
||||
<string name="pref_theme_e_rosepine">Rosé Pine</string>
|
||||
<string name="pref_swipe_dist_e_very_short">Very short</string>
|
||||
<string name="pref_swipe_dist_e_short">Short</string>
|
||||
<string name="pref_swipe_dist_e_default">Normal</string>
|
||||
@ -77,6 +82,11 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="pref_border_config_title">Customize borders</string>
|
||||
<string name="pref_border_width_title">Border Width</string>
|
||||
<string name="pref_corners_radius_title">Corner radius</string>
|
||||
<string name="pref_circle_sensitivity_title">Circle gesture sensitivity</string>
|
||||
<string name="pref_circle_sensitivity_e_high">High</string>
|
||||
<string name="pref_circle_sensitivity_e_medium">Medium</string>
|
||||
<string name="pref_circle_sensitivity_e_low">Low</string>
|
||||
<string name="pref_circle_sensitivity_e_disabled">Disabled</string>
|
||||
<string name="key_action_next">Next</string>
|
||||
<string name="key_action_done">Done</string>
|
||||
<string name="key_action_go">Go</string>
|
||||
@ -110,4 +120,19 @@ This application contains no ads, doesn't make any network requests and is Open
|
||||
<string name="key_descr_page_down">Page Down</string>
|
||||
<string name="key_descr_home">Home</string>
|
||||
<string name="key_descr_end">End</string>
|
||||
<string name="key_descr_clipboard">Clipboard manager</string>
|
||||
<string name="key_descr_combining">Combining diacritic</string>
|
||||
<string name="key_descr_dead_key">Dead key</string>
|
||||
<string name="key_descr_zwj">Zero width joiner</string>
|
||||
<string name="key_descr_zwnj">Zero width non-joiner</string>
|
||||
<string name="key_descr_nbsp">Non-breaking space</string>
|
||||
<string name="key_descr_nnbsp">Narrow non-breaking space</string>
|
||||
<string name="key_descr_delete_word">Delete a word</string>
|
||||
<string name="key_descr_forward_delete_word">Delete a word on the right</string>
|
||||
<string name="key_descr_gesture">Gesture</string>
|
||||
<string name="clipboard_history_heading">Recently copied text</string>
|
||||
<string name="clipboard_pin_heading">Pinned</string>
|
||||
<string name="clipboard_remove_confirm">Remove this clipboard?</string>
|
||||
<string name="clipboard_remove_confirmed">Yes</string>
|
||||
<string name="toast_no_voice_input">No voice typing app installed</string>
|
||||
</resources>
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Emoji pane -->
|
||||
<style name="emojiTypeButton">
|
||||
<item name="android:padding">1px</item>
|
||||
<item name="android:gravity">center</item>
|
||||
@ -15,6 +16,39 @@
|
||||
<item name="android:textSize">@dimen/emoji_text_size</item>
|
||||
<item name="android:textColor">?attr/emoji_color</item>
|
||||
</style>
|
||||
<!-- Clipboard pane -->
|
||||
<style name="clipboardEntry">
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:layout_width">fill_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginHorizontal">14dp</item>
|
||||
<item name="android:layout_marginVertical">14dp</item>
|
||||
<item name="android:textSize">16dp</item>
|
||||
<item name="android:textColor">?attr/colorLabel</item>
|
||||
</style>
|
||||
<style name="clipboardHeading">
|
||||
<item name="android:layout_marginHorizontal">6dp</item>
|
||||
<item name="android:layout_marginTop">14dp</item>
|
||||
<item name="android:layout_marginBottom">0dp</item>
|
||||
<item name="android:textSize">14dp</item>
|
||||
<item name="android:fontWeight">700</item>
|
||||
<item name="android:textColor">?attr/colorSubLabel</item>
|
||||
</style>
|
||||
<style name="clipboardEntryButtons">
|
||||
<item name="android:orientation">horizontal</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_gravity">center_vertical</item>
|
||||
<item name="android:layout_marginRight">12dp</item>
|
||||
</style>
|
||||
<style name="clipboardEntryButton">
|
||||
<item name="android:layout_width">24dp</item>
|
||||
<item name="android:layout_height">24dp</item>
|
||||
<item name="android:layout_marginHorizontal">2dp</item>
|
||||
<item name="android:backgroundTint">?attr/colorLabel</item>
|
||||
<item name="android:backgroundTintMode">src_in</item>
|
||||
</style>
|
||||
<!-- Launcher activity -->
|
||||
<style name="paragraph">
|
||||
<item name="android:layout_width">fill_parent</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
@ -22,5 +56,33 @@
|
||||
<item name="android:layout_marginHorizontal">16dp</item>
|
||||
<item name="android:layout_gravity">center</item>
|
||||
</style>
|
||||
<style name="anim">
|
||||
<item name="android:adjustViewBounds">true</item>
|
||||
<item name="android:layout_height">120dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
</style>
|
||||
<style name="anim_text">
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginHorizontal">20dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:textAlignment">center</item>
|
||||
<item name="android:textSize">18dp</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
</style>
|
||||
<style name="anim_box">
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginVertical">16dp</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:orientation">horizontal</item>
|
||||
</style>
|
||||
<style name="appTheme" parent="@android:style/Theme.DeviceDefault.DayNight"/>
|
||||
<style name="settingsTheme" parent="appTheme">
|
||||
<!-- Setting this in the activity theme so it propagate to nested
|
||||
preference screens. -->
|
||||
<item name="android:fitsSystemWindows">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
@ -23,11 +23,14 @@
|
||||
<attr name="keyBorderColorTop" format="color"/>
|
||||
<attr name="keyBorderColorRight" format="color"/>
|
||||
<attr name="keyBorderColorBottom" format="color"/>
|
||||
<!-- Emoji panel -->
|
||||
<!-- Emoji pane -->
|
||||
<attr name="emoji_button_bg" type="color" format="color"/>
|
||||
<attr name="emoji_color" type="color" format="color"/>
|
||||
<attr name="emoji_key_bg" type="color" format="color"/>
|
||||
<attr name="emoji_key_text" type="color" format="color"/>
|
||||
<!-- Clipboard pane -->
|
||||
<attr name="clipboard_divider_color" type="color" format="color"/>
|
||||
<attr name="clipboard_divider_height" format="dimension"/>
|
||||
<!-- System integration -->
|
||||
<attr name="navigationBarColor" format="color"/>
|
||||
<attr name="windowLightNavigationBar" format="boolean"/>
|
||||
@ -43,6 +46,8 @@
|
||||
<item name="greyedDimming">0.5</item>
|
||||
<item name="emoji_key_bg" type="color">?attr/emoji_button_bg</item>
|
||||
<item name="emoji_key_text" type="color">?attr/colorLabel</item>
|
||||
<item name="clipboard_divider_color" type="color">?attr/colorKey</item>
|
||||
<item name="clipboard_divider_height">1px</item>
|
||||
</style>
|
||||
<style name="Dark" parent="BaseTheme">
|
||||
<item name="android:isLightTheme">false</item>
|
||||
@ -116,6 +121,7 @@
|
||||
<item name="colorSubLabel">#333333</item>
|
||||
<item name="emoji_button_bg">#ffffff</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
<item name="clipboard_divider_color" type="color">#eeeeee</item>
|
||||
</style>
|
||||
<style name="ePaper" parent="BaseTheme">
|
||||
<item name="android:isLightTheme">true</item>
|
||||
@ -134,6 +140,8 @@
|
||||
<item name="colorSubLabel">#333333</item>
|
||||
<item name="emoji_button_bg">#ffffff</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
<item name="clipboard_divider_color" type="color">#000000</item>
|
||||
<item name="clipboard_divider_height">2dp</item>
|
||||
</style>
|
||||
<style name="Desert" parent="@style/BaseTheme">
|
||||
<item name="android:isLightTheme">true</item>
|
||||
@ -171,4 +179,47 @@
|
||||
<item name="emoji_button_bg">?colorKeyActivated</item>
|
||||
<item name="emoji_color">#000000</item>
|
||||
</style>
|
||||
<style name="MonetLight" parent="@style/BaseTheme">
|
||||
<item name="android:isLightTheme">true</item>
|
||||
<item name="colorKeyboard">@android:color/system_accent1_100</item>
|
||||
<item name="colorKey">@android:color/system_accent1_0</item>
|
||||
<item name="colorKeyActivated">@android:color/system_accent1_300</item>
|
||||
<item name="colorLabel">@android:color/system_accent1_1000</item>
|
||||
<item name="colorLabelActivated">@android:color/system_accent1_1000</item>
|
||||
<item name="colorLabelLocked">@android:color/system_accent1_500</item>
|
||||
<item name="colorSubLabel">@android:color/system_accent1_900</item>
|
||||
<item name="emoji_button_bg">?colorKeyActivated</item>
|
||||
<item name="emoji_color">@android:color/system_accent1_1000</item>
|
||||
</style>
|
||||
<style name="MonetDark" parent="@style/BaseTheme">
|
||||
<item name="android:isLightTheme">false</item>
|
||||
<item name="colorKeyboard">@android:color/system_neutral1_900</item>
|
||||
<item name="colorKey">@android:color/system_accent2_800</item>
|
||||
<item name="colorKeyActivated">@android:color/system_accent1_800</item>
|
||||
<item name="colorLabel">@android:color/system_neutral1_0</item>
|
||||
<item name="colorLabelActivated">@android:color/system_accent1_400</item>
|
||||
<item name="colorLabelLocked">@android:color/system_accent1_100</item>
|
||||
<item name="colorSubLabel">@android:color/system_neutral1_300</item>
|
||||
<item name="emoji_button_bg">?colorKeyActivated</item>
|
||||
<item name="emoji_color">@android:color/system_neutral1_900</item>
|
||||
</style>
|
||||
<style name="RosePine" parent="BaseTheme">
|
||||
<item name="android:isLightTheme">false</item>
|
||||
<item name="colorKeyboard">#191724</item>
|
||||
<item name="colorKey">#26233a</item>
|
||||
<item name="colorKeyActivated">#403d52</item>
|
||||
<item name="keyBorderWidth">0dp</item>
|
||||
<item name="keyBorderWidthActivated">1dp</item>
|
||||
<item name="keyBorderColorLeft">#6e6a86</item>
|
||||
<item name="keyBorderColorTop">#6e6a86</item>
|
||||
<item name="keyBorderColorRight">#6e6a86</item>
|
||||
<item name="keyBorderColorBottom">#6e6a86</item>
|
||||
<item name="colorLabel">#e0def4</item>
|
||||
<item name="colorLabelActivated">#c4a7e7</item>
|
||||
<item name="colorLabelLocked">#31748f</item>
|
||||
<item name="colorSubLabel">#6e6a86</item>
|
||||
<item name="keyBorderRadius">1dp</item>
|
||||
<item name="emoji_button_bg">#26233a</item>
|
||||
<item name="emoji_color">#e0def4</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
@ -4,6 +4,11 @@
|
||||
<dimen name="key_padding">2dp</dimen>
|
||||
<dimen name="emoji_grid_height">250dp</dimen>
|
||||
<dimen name="emoji_text_size">28dp</dimen>
|
||||
<dimen name="clipboard_view_height">300dp</dimen>
|
||||
<dimen name="pref_button_size">28dp</dimen>
|
||||
<bool name="debug_logs">false</bool> <!-- Will be overwritten automatically by Gradle for the debug build variant -->
|
||||
<!-- Margin needed to accomodate the gesture nav bar on Android 15. Found in
|
||||
[core/res/res/values/dimens.xml]. -->
|
||||
<dimen name="bottom_inset_min">48dp</dimen>
|
||||
<!-- Will be overwritten automatically by Gradle for the debug build variant -->
|
||||
<bool name="debug_logs">false</bool>
|
||||
</resources>
|
||||
|
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.95">
|
||||
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key4="switch_numeric"/>
|
||||
<key width="1.7" key0="ctrl" key1="loc switch_greekmath" key2="loc meta" key3="loc switch_clipboard" key4="switch_numeric"/>
|
||||
<key width="1.1" key0="fn" key1="loc alt" key2="loc change_method" key3="switch_emoji" key4="config"/>
|
||||
<key width="4.4" key0="space" key7="switch_forward" key8="switch_backward" key5="cursor_left" key6="cursor_right" slider="true"/>
|
||||
<key width="4.4" key0="space" key7="switch_forward" key8="switch_backward" key5="cursor_left" key6="cursor_right"/>
|
||||
<key width="1.1" key0="loc compose" key7="up" key6="right" key5="left" key8="down" key1="loc home" key2="loc page_up" key3="loc end" key4="loc page_down"/>
|
||||
<key width="1.7" key0="enter" key1="loc voice_typing" key2="action"/>
|
||||
</row>
|
||||
|
10
res/xml/clipboard_bottom_row.xml
Normal file
10
res/xml/clipboard_bottom_row.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- The bottom row used in the clipboard history pane. -->
|
||||
<keyboard bottom_row="false">
|
||||
<row height="0.95">
|
||||
<key key0="switch_back_clipboard"/>
|
||||
<key width="3" key0="space" key5="cursor_left" key6="cursor_right"/>
|
||||
<key key0="backspace" key2="delete"/>
|
||||
<key key0="enter" key2="action"/>
|
||||
</row>
|
||||
</keyboard>
|
@ -3,8 +3,8 @@
|
||||
<keyboard bottom_row="false">
|
||||
<row height="0.95">
|
||||
<key key0="switch_back_emoji"/>
|
||||
<key width="4" key0="space" key5="cursor_left" key6="cursor_right" slider="true"/>
|
||||
<key key0="backspace"/>
|
||||
<key key0="enter"/>
|
||||
<key width="3" key0="space" key5="cursor_left" key6="cursor_right"/>
|
||||
<key key0="backspace" key2="delete"/>
|
||||
<key key0="enter" key2="action"/>
|
||||
</row>
|
||||
</keyboard>
|
||||
|
@ -9,15 +9,15 @@
|
||||
<key key0="ψ" key1="∥" key3="≪" key4="7"/>
|
||||
<key key0="υ" key1="⌀" key2="⟨" key3="≡" key4="8"/>
|
||||
<key key0="ι" key1="∞" key2="⟩" key3="≫" key4="9"/>
|
||||
<key key0="ο" key1="∝" key3="□" key4="f11_placeholder"/>
|
||||
<key key0="π" key1="∅" key3="∘" key4="f12_placeholder"/>
|
||||
<key key0="ο" key1="∝" key3="□"/>
|
||||
<key key0="π" key1="∅" key3="∘"/>
|
||||
</row>
|
||||
<row>
|
||||
<key key0="α" key4="ℂ"/>
|
||||
<key key0="σ" key3="←" key4="∂"/>
|
||||
<key key0="δ" key3="↓" key4="∫"/>
|
||||
<key key0="φ" key3="→" key4="∃"/>
|
||||
<key key0="γ" key4="∈"/>
|
||||
<key key0="γ" key3="∋" key4="∈"/>
|
||||
<key key0="η" key1="⊕" key4="4"/>
|
||||
<key key0="ξ" key1="⊖" key3="ℕ" key4="5"/>
|
||||
<key key0="κ" key1="⊙" key3="ℝ" key4="6"/>
|
||||
@ -36,8 +36,8 @@
|
||||
<key width="1.5" key0="backspace" key3="delete"/>
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.2" key0="switch_text" key2="esc"/>
|
||||
<key width="1.2" key0="switch_numeric" key2="tab"/>
|
||||
<key width="1.2" key0="switch_text" key2="loc esc"/>
|
||||
<key width="1.2" key0="switch_numeric" key2="loc tab"/>
|
||||
<key width="1.2" key0="fn"/>
|
||||
<key width="2.8" key0="space" key1="superscript" key3="subscript"/>
|
||||
<key width="1.2" key0="0" key2="."/>
|
||||
|
@ -1,44 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<input-method xmlns:android="http://schemas.android.com/apk/res/android" android:settingsActivity="juloo.keyboard2.SettingsActivity" android:supportsSwitchingToNextInputMethod="true">
|
||||
<!-- The first entry of the list makes latn_qwerty_us the default layout for
|
||||
unrecognized locales. -->
|
||||
<subtype android:label="%s" android:languageTag="en" android:imeSubtypeLocale="en" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="ar" android:imeSubtypeLocale="ar" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=arabic,default_layout=arab_pc_hindu"/>
|
||||
<subtype android:label="%s" android:languageTag="ar" android:imeSubtypeLocale="ar_TN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=arabic,default_layout=arab_pc"/>
|
||||
<subtype android:label="%s" android:languageTag="ay" android:imeSubtypeLocale="ay_AM" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=armenian,default_layout=armenian_ph_am"/>
|
||||
<subtype android:label="%s" android:languageTag="az" android:imeSubtypeLocale="az_AZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_az,extra_keys=accent_trema:ü:ö@w|accent_cedille:ç:ş@s|ğ@g|ı@k|ə@l"/>
|
||||
<subtype android:label="%s" android:languageTag="be" android:imeSubtypeLocale="be_BY" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_ru,extra_keys=ґ|є|і|ї|ў"/>
|
||||
<subtype android:label="%s" android:languageTag="bg" android:imeSubtypeLocale="bg_BG" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_ueishsht,extra_keys=€"/>
|
||||
<subtype android:label="%s" android:languageTag="bn" android:imeSubtypeLocale="bn_BD" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=৳"/>
|
||||
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_cz,extra_keys=accent_aigu:á:é:í:ó:ú:ý|accent_ring:ů|accent_caron:č:ě:ň:ř:š:ž:ď:ť"/>
|
||||
<subtype android:label="%s" android:languageTag="cs" android:imeSubtypeLocale="cs_CZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_cz,extra_keys=accent_aigu:á:é:í:ó:ú:ý@d|accent_ring:ů@s|accent_caron:č:ě:ň:ř:š:ž:ď:ť@f"/>
|
||||
<subtype android:label="%s" android:languageTag="cy" android:imeSubtypeLocale="cy_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_cy"/>
|
||||
<subtype android:label="%s" android:languageTag="da" android:imeSubtypeLocale="da_DK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_da,extra_keys=€|æ|å|ø"/>
|
||||
<subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,extra_keys=accent_trema:ä:ö:ü|ß|€"/>
|
||||
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,extra_keys=£|€"/>
|
||||
<subtype android:label="%s" android:languageTag="de" android:imeSubtypeLocale="de_DE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_de,extra_keys=accent_trema:ä:ö:ü@u|ß|€"/>
|
||||
<subtype android:label="%s" android:languageTag="de-BE" android:imeSubtypeLocale="de_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,extra_keys=accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="el" android:imeSubtypeLocale="el" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=grek_qwerty,extra_keys=£@l|€"/>
|
||||
<subtype android:label="%s" android:languageTag="en-AU" android:imeSubtypeLocale="en_AU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="en-CA" android:imeSubtypeLocale="en_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_gb,extra_keys=£"/>
|
||||
<subtype android:label="%s" android:languageTag="en-GB" android:imeSubtypeLocale="en_GB" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_gb,extra_keys=£@l"/>
|
||||
<subtype android:label="%s" android:languageTag="en-IN" android:imeSubtypeLocale="en_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="en-US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_aigu:á:é:í:ó:ú|accent_tilde:ñ|accent_grave|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="es" android:imeSubtypeLocale="es_ES" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_es,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_tilde:ñ@n|accent_grave@f|accent_trema@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="et" android:imeSubtypeLocale="et_EE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_et,extra_keys=accent_trema:ä:ö:ü@u|accent_tilde:õ@o|accent_caron:š:ž@s|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fa" android:imeSubtypeLocale="fa_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=arab_pc_ir"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CA" android:imeSubtypeLocale="fr_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CH" android:imeSubtypeLocale="fr_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_fr_ch,extra_keys=accent_grave:à:è:ù|accent_aigu:é|accent_circonflexe:â:ê:ô|accent_cedille:ç|accent_trema:ë:ï:ü:ÿ|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-FR" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è@a|accent_aigu:é@e|accent_circonflexe:â:ê:ô@e|accent_cedille:ç@c|accent_trema:ë:ï:ü@l|€"/>
|
||||
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=hebr_1_il,extra_keys=₪|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-BE" android:imeSubtypeLocale="fr_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,extra_keys=accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CA" android:imeSubtypeLocale="fr_CA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:â:ê:ô@f|accent_cedille:ç@c|accent_trema:ë:ï:ü:ÿ@u"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-CH" android:imeSubtypeLocale="fr_CH" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_fr_ch,extra_keys=accent_grave:à:è:ù@f|accent_aigu:é@d|accent_circonflexe:â:ê:ô@o|accent_cedille:ç@c|accent_trema:ë:ï:ü:ÿ@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="fr-FR" android:imeSubtypeLocale="fr_FR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:à:è@d|accent_aigu:é@d|accent_circonflexe:â:ê:ô@o|accent_cedille:ç@c|accent_trema:ë:ï:ü@l|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ga" android:imeSubtypeLocale="ga_IE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ga,extra_keys=accent_aigu:á:é:í:ó:ú@k|accent_dot_above@l"/>
|
||||
<subtype android:label="%s" android:languageTag="haw" android:imeSubtypeLocale="haw_US" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_haw,extra_keys=ʻ@l|accent_macron:ā:ē:ī:ō:ū@m"/>
|
||||
<subtype android:label="%s" android:languageTag="he" android:imeSubtypeLocale="he_IL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hebrew,default_layout=hebr_1_il,extra_keys=₪@r|€"/>
|
||||
<subtype android:label="%s" android:languageTag="hi" android:imeSubtypeLocale="hi_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
|
||||
<subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,extra_keys=accent_aigu:á:é:í:ó:ú|accent_trema:ö:ü|accent_ogonek|accent_double_aigu:ő:ű|€"/>
|
||||
<subtype android:label="%s" android:languageTag="is" android:imeSubtypeLocale="is_IS" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=ð|þ|æ|accent_trema:ö|accent_aigu:á:é:í:ó:ú:ý"/>
|
||||
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_grave:à:è:ì:ò:ù|accent_aigu:é:ó|accent_circonflexe:î|€|ə"/>
|
||||
<subtype android:label="%s" android:languageTag="hu" android:imeSubtypeLocale="hu_HU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_hu,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_trema:ö:ü@u|accent_ogonek@s|accent_double_aigu:ő:ű@k|€"/>
|
||||
<subtype android:label="%s" android:languageTag="is" android:imeSubtypeLocale="is_IS" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=ð|þ|æ|accent_trema:ö@o|accent_aigu:á:é:í:ó:ú:ý@d"/>
|
||||
<subtype android:label="%s" android:languageTag="it" android:imeSubtypeLocale="it_IT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_grave:à:è:ì:ò:ù@f|accent_aigu:é:ó@d|accent_circonflexe:î@f|€|ə"/>
|
||||
<subtype android:label="%s" android:languageTag="ka-GE" android:imeSubtypeLocale="ka_GE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=georgian_mes"/>
|
||||
<subtype android:label="%s" android:languageTag="kk" android:imeSubtypeLocale="kk_KZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_kk"/>
|
||||
<subtype android:label="%s" android:languageTag="kn" android:imeSubtypeLocale="kn_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=kannada,default_layout=kann_kannada"/>
|
||||
<subtype android:label="%s" android:languageTag="ko" android:imeSubtypeLocale="ko_KR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=hangul,default_layout=latn_qwerty_us"/>
|
||||
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=accent_ogonek:ą:ę:į:ų|accent_caron:č:š:ž|accent_dot_above:ė|accent_macron:ū|€"/>
|
||||
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_macron:ā:ē:ī:ū|accent_caron:č:š:ž|accent_ogonek:ķ:ļ:ņ|accent_cedille:ģ|€"/>
|
||||
<subtype android:label="%s" android:languageTag="lt" android:imeSubtypeLocale="lt_LT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lt,extra_keys=accent_ogonek:ą:ę:į:ų@s|accent_caron:č:š:ž@f|accent_dot_above:ė@s|accent_macron:ū@o|€"/>
|
||||
<subtype android:label="%s" android:languageTag="lv" android:imeSubtypeLocale="lv_LV" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_lv,extra_keys=accent_macron:ā:ē:ī:ū@o|accent_caron:č:š:ž@f|accent_ogonek:ķ:ļ:ņ@s|accent_cedille:ģ@c|€"/>
|
||||
<subtype android:label="%s" android:languageTag="mn" android:imeSubtypeLocale="mn_MN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_fcuzhen_mn,extra_keys=ү|ө"/>
|
||||
<subtype android:label="%s" android:languageTag="mr" android:imeSubtypeLocale="mr_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
|
||||
<subtype android:label="%s" android:languageTag="mt" android:imeSubtypeLocale="mt_MT" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_mt,extra_keys=accent_grave:à:è:ì:ò:ù|accent_dot_above:ċ:ż:ġ|ħ"/>
|
||||
<subtype android:label="%s" android:languageTag="ne" android:imeSubtypeLocale="ne_NE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=devanagari,default_layout=deva_inscript,extra_keys=₹"/>
|
||||
<subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_fr,extra_keys=accent_grave:è|accent_aigu:á:é:í:ó:ú:ý:j́|accent_circonflexe:ê|accent_cedille:ç|accent_trema|€"/>
|
||||
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_no,extra_keys=€|æ|å|ø|accent_aigu:é:ó|accent_grave:è:ò:ù|accent_circonflexe:ê:ô"/>
|
||||
<subtype android:label="%s" android:languageTag="nl-BE" android:imeSubtypeLocale="nl_BE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_azerty_be,extra_keys=accent_grave:è@f|accent_aigu:á:é:í:ó:ú:ý:j́@d|accent_circonflexe:ê@f|accent_cedille:ç@c|accent_trema@u|€"/>
|
||||
<subtype android:label="%s" android:languageTag="no" android:imeSubtypeLocale="no_NO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_us,extra_keys=€|æ@a|å@a|ø@o|accent_aigu:é:ó@d|accent_grave:è:ò:ù@f|accent_circonflexe:ê:ô@f"/>
|
||||
<subtype android:label="%s" android:languageTag="pl" android:imeSubtypeLocale="pl_PL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pl"/>
|
||||
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,extra_keys=accent_aigu:á:é:í:ó:ú|accent_cedille:ç|accent_circonflexe:â:ê:ô|accent_grave:à:ò|accent_tilde:ã:õ|€|ª|º"/>
|
||||
<subtype android:label="%s" android:languageTag="pt" android:imeSubtypeLocale="pt_BR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_pt,extra_keys=accent_aigu:á:é:í:ó:ú@d|accent_cedille:ç@c|accent_circonflexe:â:ê:ô@f|accent_grave:à:ò@f|accent_tilde:ã:õ@n|€|ª|º"/>
|
||||
<subtype android:label="%s" android:languageTag="ro" android:imeSubtypeLocale="ro_RO" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_ro,extra_keys=ă|â|î|ș|ț|€|$"/>
|
||||
<subtype android:label="%s" android:languageTag="ru" android:imeSubtypeLocale="ru_RU" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_jcuken_ru"/>
|
||||
<subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sk,extra_keys=accent_caron:ě:ř:ž:š:č:ň:ď:ľ:ť|accent_ring:ů|accent_circonflexe:ô|accent_trema:ä:ü:ö|accent_aigu:á:é:í:ó:ú:ŕ:ś:ĺ:ý"/>
|
||||
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_se,extra_keys=accent_aigu:á|accent_trema:ä:ö|accent_ring:å|€"/>
|
||||
<subtype android:label="%s" android:languageTag="sk" android:imeSubtypeLocale="sk_SK" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sk,extra_keys=accent_caron:ě:ř:ž:š:č:ň:ď:ľ:ť@f|accent_ring:ů@s|accent_circonflexe:ô@f|accent_trema:ä:ü:ö@u|accent_aigu:á:é:í:ó:ú:ŕ:ś:ĺ:ý@d"/>
|
||||
<subtype android:label="%s" android:languageTag="sq" android:imeSubtypeLocale="sq_AL" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwertz_sq"/>
|
||||
<subtype android:label="%s" android:languageTag="sr" android:imeSubtypeLocale="sr_" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=cyrl_lynyertz_sr"/>
|
||||
<subtype android:label="%s" android:languageTag="sv" android:imeSubtypeLocale="sv_SE" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_se,extra_keys=accent_aigu:á@d|accent_trema:ä:ö@o|accent_ring:å@s|€"/>
|
||||
<subtype android:label="%s" android:languageTag="ta" android:imeSubtypeLocale="ta_IN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=tamil,default_layout=tamil_default"/>
|
||||
<subtype android:label="%s" android:languageTag="tly" android:imeSubtypeLocale="tly_AZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tly,extra_keys=á|ú|â|ê|ı|š|ž"/>
|
||||
<subtype android:label="%s" android:languageTag="tly" android:imeSubtypeLocale="tly_IR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="default_layout=arab_hamvaj_tly"/>
|
||||
<subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tr,extra_keys=accent_cedille:ç:ş|accent_trema:ö:ü|accent_circonflexe:â:î:û|₺|ı|ğ"/>
|
||||
<subtype android:label="%s" android:languageTag="tr" android:imeSubtypeLocale="tr_TR" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_tr,extra_keys=accent_cedille:ç:ş@c|accent_trema:ö:ü@u|accent_circonflexe:â:î:û@f|₺|ı|ğ"/>
|
||||
<subtype android:label="%s" android:languageTag="uk" android:imeSubtypeLocale="uk_UA" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=cyrillic,default_layout=cyrl_jcuken_uk,extra_keys=ґ|є|і|ї|₴"/>
|
||||
<subtype android:label="%s" android:languageTag="uz" android:imeSubtypeLocale="uz_UZ" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_uz,extra_keys=ʻ|ʼ"/>
|
||||
<subtype android:label="%s" android:languageTag="vi" android:imeSubtypeLocale="vi_VN" android:imeSubtypeMode="keyboard" android:isAsciiCapable="true" android:imeSubtypeExtraValue="script=latin,default_layout=latn_qwerty_vi"/>
|
||||
</input-method>
|
||||
|
@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<row height="0.75">
|
||||
<key key0="1"/>
|
||||
<key key0="2"/>
|
||||
<key key0="3"/>
|
||||
<key key0="4"/>
|
||||
<key key0="5"/>
|
||||
<key key0="6"/>
|
||||
<key key0="7"/>
|
||||
<key key0="8"/>
|
||||
<key key0="9"/>
|
||||
<key key0="0"/>
|
||||
<key key0="1" se="!"/>
|
||||
<key key0="2" se="@"/>
|
||||
<key key0="3" se="#"/>
|
||||
<key key0="4" se="$"/>
|
||||
<key key0="5" se="%"/>
|
||||
<key key0="6" sw="^"/>
|
||||
<key key0="7" sw="&"/>
|
||||
<key key0="8" sw="*"/>
|
||||
<key key0="9" sw="("/>
|
||||
<key key0="0" sw=")"/>
|
||||
</row>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<keyboard bottom_row="false">
|
||||
<row>
|
||||
<key width="0.75" key0="esc" key2="~" key4="!"/>
|
||||
<key width="0.75" key0="loc esc" key2="~" key4="!"/>
|
||||
<key width="0.75" key0="(" key2="[" key4="{"/>
|
||||
<key key0="7" key1="<" key2=">"/>
|
||||
<key key0="8" key2="∞"/>
|
||||
@ -10,7 +10,7 @@
|
||||
<key width="0.75" key0="/" key1="%" key3="÷"/>
|
||||
</row>
|
||||
<row>
|
||||
<key width="0.75" key0="tab" key2="|" key4="\\"/>
|
||||
<key width="0.75" key0="loc tab" key2="|" key4="\\"/>
|
||||
<key width="0.75" key0=")" key2="]" key4="}"/>
|
||||
<key key0="4" key1="box" key3="arrows"/>
|
||||
<key key0="5" key7="up" key6="right" key5="left" key8="down"/>
|
||||
@ -28,7 +28,7 @@
|
||||
</row>
|
||||
<row height="0.95">
|
||||
<key width="1.5" key0="switch_text" key2="ctrl"/>
|
||||
<key width="1.5" key0="0" key3="f11_placeholder" key4="f12_placeholder"/>
|
||||
<key width="1.5" key0="0"/>
|
||||
<key width="0.75" key0="." key1=":" key2="," key3=";"/>
|
||||
<key width="0.75" key0="space" key1=""" key2="'" key3="loc compose" key4="_"/>
|
||||
<key width="1.5" key0="enter" key1="±" key2="action" key3="="/>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<key shift="1.0" key0="4" indication="GHI"/>
|
||||
<key key0="5" indication="JKL"/>
|
||||
<key key0="6" indication="MNO"/>
|
||||
<key key0="(" key2="=" key3=":" key4="-"/>
|
||||
<key key0="(" key1="paste" key2="=" key3=":" key4="-"/>
|
||||
</row>
|
||||
<row>
|
||||
<key shift="1.0" key0="7" indication="PQRS"/>
|
||||
|
@ -14,8 +14,10 @@
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_typing">
|
||||
<ListPreference android:key="swipe_dist" android:title="@string/pref_swipe_dist_title" android:summary="@string/pref_swipe_dist_summary" android:defaultValue="15" android:entries="@array/pref_swipe_dist_entries" android:entryValues="@array/pref_swipe_dist_values"/>
|
||||
<ListPreference android:key="circle_sensitivity" android:title="@string/pref_circle_sensitivity_title" android:summary="%s" android:defaultValue="2" android:entries="@array/pref_circle_sensitivity_entries" android:entryValues="@array/pref_circle_sensitivity_values"/>
|
||||
<juloo.keyboard2.prefs.IntSlideBarPreference android:key="longpress_timeout" android:title="@string/pref_long_timeout_title" android:summary="%sms" android:defaultValue="600" min="50" max="2000"/>
|
||||
<juloo.keyboard2.prefs.IntSlideBarPreference android:key="longpress_interval" android:title="@string/pref_long_interval_title" android:summary="%sms" android:defaultValue="25" min="5" max="100"/>
|
||||
<CheckBoxPreference android:key="keyrepeat_enabled" android:title="@string/pref_keyrepeat_enabled" android:defaultValue="true"/>
|
||||
<juloo.keyboard2.prefs.IntSlideBarPreference android:key="longpress_interval" android:dependency="keyrepeat_enabled" android:title="@string/pref_long_interval_title" android:summary="%sms" android:defaultValue="25" min="5" max="100"/>
|
||||
<CheckBoxPreference android:key="lock_double_tap" android:title="@string/pref_lock_double_tap_title" android:summary="@string/pref_lock_double_tap_summary" android:defaultValue="false"/>
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory android:title="@string/pref_category_behavior">
|
||||
@ -43,7 +45,7 @@
|
||||
<juloo.keyboard2.prefs.IntSlideBarPreference android:key="horizontal_margin_portrait" android:title="@string/pref_portrait" android:summary="%sdp" android:defaultValue="3" min="0" max="30"/>
|
||||
<juloo.keyboard2.prefs.IntSlideBarPreference android:key="horizontal_margin_landscape" android:title="@string/pref_landscape" android:summary="%sdp" android:defaultValue="28" min="0" max="200"/>
|
||||
</PreferenceScreen>
|
||||
<juloo.keyboard2.prefs.SlideBarPreference android:key="character_size" android:title="@string/pref_character_size_title" android:summary="@string/pref_character_size_summary" android:defaultValue="1.0" min="0.75" max="1.5"/>
|
||||
<juloo.keyboard2.prefs.SlideBarPreference android:key="character_size" android:title="@string/pref_character_size_title" android:summary="@string/pref_character_size_summary" android:defaultValue="1.15" min="0.75" max="1.5"/>
|
||||
<juloo.keyboard2.prefs.SlideBarPreference android:key="key_vertical_margin" android:title="@string/pref_key_vertical_space" android:summary="%s%%" android:defaultValue="1.5" min="0" max="5"/>
|
||||
<juloo.keyboard2.prefs.SlideBarPreference android:key="key_horizontal_margin" android:title="@string/pref_key_horizontal_space" android:summary="%s%%" android:defaultValue="2" min="0" max="5"/>
|
||||
<CheckBoxPreference android:key="border_config" android:title="@string/pref_border_config_title" android:defaultValue="false"/>
|
||||
|
43
shell.nix
43
shell.nix
@ -9,25 +9,60 @@ let
|
||||
|
||||
android = pkgs.androidenv.composeAndroidPackages {
|
||||
buildToolsVersions = [ build_tools_version ];
|
||||
platformVersions = [ "33" ];
|
||||
platformVersions = [ "34" ];
|
||||
abiVersions = [ "armeabi-v7a" ];
|
||||
inherit repoJson;
|
||||
};
|
||||
|
||||
# Ensure we have the needed system images
|
||||
repoJson = pkgs.fetchurl {
|
||||
url =
|
||||
"https://raw.githubusercontent.com/NixOS/nixpkgs/ebc7402410a3ce2d25622137c190d4ab83945c10/pkgs/development/mobile/androidenv/repo.json";
|
||||
hash = "sha256-4/0FMyxM+7d66qfhlY3A10RIe6j6VrW8DIilH2eQyzc=";
|
||||
};
|
||||
|
||||
emulators = let
|
||||
mk_emulator = { platformVersion, device ? "pixel_6", abiVersion ? "x86_64", systemImageType ? "default" }:
|
||||
pkgs.androidenv.emulateApp rec {
|
||||
name = "emulator_api${platformVersion}";
|
||||
inherit platformVersion abiVersion systemImageType;
|
||||
androidAvdFlags = "--device ${device}";
|
||||
sdkExtraArgs = { inherit repoJson; };
|
||||
};
|
||||
# Allow to install several emulators in the same environment
|
||||
link_emulator = version_name: args: {
|
||||
name = "bin/emulate_android_${version_name}";
|
||||
path = "${mk_emulator args}/bin/run-test-emulator";
|
||||
};
|
||||
in pkgs.linkFarm "emulator" [
|
||||
(link_emulator "5" { platformVersion = "21"; })
|
||||
# (link_emulator "14" { platformVersion = "34"; })
|
||||
# There's no 'default' image for Android 15
|
||||
(link_emulator "15" { platformVersion = "35"; systemImageType = "google_apis"; })
|
||||
];
|
||||
|
||||
ANDROID_SDK_ROOT = "${android.androidsdk}/libexec/android-sdk";
|
||||
|
||||
gradle = pkgs.gradle.override { java = jdk; };
|
||||
# Without this option, aapt2 fails to run with a permissions error.
|
||||
gradle_wrapped = pkgs.runCommandLocal "gradle-wrapped" {
|
||||
nativeBuildInputs = with pkgs; [ makeBinaryWrapper ];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
ln -s ${pkgs.gradle}/bin/gradle $out/bin/gradle
|
||||
ln -s ${gradle}/bin/gradle $out/bin/gradle
|
||||
wrapProgram $out/bin/gradle \
|
||||
--add-flags "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${build_tools_version}/aapt2"
|
||||
'';
|
||||
|
||||
in pkgs.mkShell {
|
||||
buildInputs =
|
||||
[ pkgs.findutils pkgs.fontforge jdk android.androidsdk gradle_wrapped ];
|
||||
buildInputs = [
|
||||
pkgs.findutils
|
||||
pkgs.fontforge
|
||||
jdk
|
||||
android.androidsdk
|
||||
gradle_wrapped
|
||||
emulators
|
||||
];
|
||||
JAVA_HOME = jdk.home;
|
||||
inherit ANDROID_SDK_ROOT;
|
||||
}
|
||||
|
@ -3,6 +3,8 @@
|
||||
The `compose.py` program parses the compose sequences found in this directory
|
||||
and generates `srcs/juloo.keyboard2/ComposeKeyData.java`.
|
||||
|
||||
## `en_US_UTF_8_Compose.pre`
|
||||
## `compose/en_US_UTF_8_Compose.pre`
|
||||
|
||||
This file is copied from the `xorg` project. Copyright applies.
|
||||
|
||||
## `compose/extra.json`
|
||||
|
60
srcs/compose/accent_aigu.json
Normal file
60
srcs/compose/accent_aigu.json
Normal file
@ -0,0 +1,60 @@
|
||||
{
|
||||
// latin
|
||||
"a": "á",
|
||||
"c": "ć",
|
||||
"e": "é",
|
||||
"g": "ǵ",
|
||||
"i": "í",
|
||||
"k": "ḱ",
|
||||
"l": "ĺ",
|
||||
"m": "ḿ",
|
||||
"n": "ń",
|
||||
"o": "ó",
|
||||
"p": "ṕ",
|
||||
"r": "ŕ",
|
||||
"s": "ś",
|
||||
"u": "ú",
|
||||
"w": "ẃ",
|
||||
"y": "ý",
|
||||
"z": "ź",
|
||||
// extended latin (multiple diacritics)
|
||||
"â": "ấ",
|
||||
"ă": "ắ",
|
||||
"å": "ǻ",
|
||||
"æ": "ǽ",
|
||||
"ç": "ḉ",
|
||||
"ê": "ế",
|
||||
"ē": "ḗ",
|
||||
"ï": "ḯ",
|
||||
"ô": "ố",
|
||||
"ơ": "ớ",
|
||||
"õ": "ṍ",
|
||||
"ō": "ṓ",
|
||||
"ø": "ǿ",
|
||||
"ṡ": "ṥ",
|
||||
"ü": "ǘ",
|
||||
"ư": "ứ",
|
||||
"ũ": "ṹ",
|
||||
// greek
|
||||
"α": "ά",
|
||||
"ε": "έ",
|
||||
"η": "ή",
|
||||
"ι": "ί",
|
||||
"ο": "ό",
|
||||
"υ": "ύ",
|
||||
// cyrillic
|
||||
"к": "ќ",
|
||||
"г": "ѓ",
|
||||
// combining character
|
||||
"ą": "ą\u0301",
|
||||
"j": "j\u0301",
|
||||
"у": "у\u0301",
|
||||
"е": "е\u0301",
|
||||
"а": "а\u0301",
|
||||
"о": "о\u0301",
|
||||
"и": "и\u0301",
|
||||
"ы": "ы\u0301",
|
||||
"э": "э\u0301",
|
||||
"ю": "ю\u0301",
|
||||
"я": "я\u0301"
|
||||
}
|
13
srcs/compose/accent_arrows.json
Normal file
13
srcs/compose/accent_arrows.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"0": "↔",
|
||||
"1": "↙",
|
||||
"2": "↓",
|
||||
"3": "↘",
|
||||
"4": "←",
|
||||
"5": "↕",
|
||||
"6": "→",
|
||||
"7": "↖",
|
||||
"8": "↑",
|
||||
"9": "↗",
|
||||
".": "↵"
|
||||
}
|
30
srcs/compose/accent_bar.json
Normal file
30
srcs/compose/accent_bar.json
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
// latin
|
||||
"2": "ƻ",
|
||||
"b": "ƀ",
|
||||
"c": "ꞓ",
|
||||
"d": "đ",
|
||||
"f": "ꞙ",
|
||||
"g": "ǥ",
|
||||
"h": "ħ",
|
||||
"i": "ɨ",
|
||||
"j": "ɉ",
|
||||
"k": "ꝁ",
|
||||
"l": "ƚ",
|
||||
"o": "ɵ",
|
||||
"p": "ᵽ",
|
||||
"q": "ꝗ",
|
||||
"r": "ɍ",
|
||||
"t": "ŧ",
|
||||
"u": "ʉ",
|
||||
"y": "ɏ",
|
||||
"z": "ƶ",
|
||||
// extended latin
|
||||
"ȷ": "ɟ",
|
||||
// cyrillic
|
||||
"о": "ө",
|
||||
"ӧ": "ӫ",
|
||||
"ү": "ұ",
|
||||
"ь": "ҍ",
|
||||
"х": "ӿ"
|
||||
}
|
13
srcs/compose/accent_box.json
Normal file
13
srcs/compose/accent_box.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"1": "└",
|
||||
"2": "┴",
|
||||
"3": "┘",
|
||||
"4": "├",
|
||||
"5": "┼",
|
||||
"6": "┤",
|
||||
"7": "┌",
|
||||
"8": "┬",
|
||||
"9": "┐",
|
||||
"0": "─",
|
||||
".": "│"
|
||||
}
|
33
srcs/compose/accent_caron.json
Normal file
33
srcs/compose/accent_caron.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ǎ",
|
||||
"c": "č",
|
||||
"d": "ď",
|
||||
"e": "ě",
|
||||
"g": "ǧ",
|
||||
"h": "ȟ",
|
||||
"i": "ǐ",
|
||||
"j": "ǰ", // no uppercase
|
||||
"k": "ǩ",
|
||||
"l": "ľ",
|
||||
"n": "ň",
|
||||
"o": "ǒ",
|
||||
"r": "ř",
|
||||
"s": "š",
|
||||
"t": "ť",
|
||||
"u": "ǔ",
|
||||
"z": "ž",
|
||||
// extended latin
|
||||
"ṡ": "ṧ",
|
||||
"ü": "ǚ",
|
||||
"ʒ": "ǯ",
|
||||
// combining character
|
||||
"в": "в\u030C",
|
||||
"г": "г\u030C",
|
||||
"ғ": "ғ\u030C",
|
||||
"д": "д\u030C",
|
||||
"з": "з\u030C",
|
||||
"р": "р\u030C",
|
||||
"т": "т\u030C",
|
||||
"х": "х\u030C"
|
||||
}
|
17
srcs/compose/accent_cedille.json
Normal file
17
srcs/compose/accent_cedille.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
// latin
|
||||
"c": "ç",
|
||||
"d": "ḑ",
|
||||
"e": "ȩ",
|
||||
"g": "ģ",
|
||||
"h": "ḩ",
|
||||
"k": "ķ",
|
||||
"l": "ļ",
|
||||
"n": "ņ",
|
||||
"r": "ŗ",
|
||||
"s": "ş",
|
||||
"t": "ţ",
|
||||
// extended latin
|
||||
"ć": "ḉ",
|
||||
"ĕ": "ḝ"
|
||||
}
|
41
srcs/compose/accent_circonflexe.json
Normal file
41
srcs/compose/accent_circonflexe.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"+": "⨣",
|
||||
"≈": "⩯",
|
||||
// latin
|
||||
"a": "â",
|
||||
"c": "ĉ",
|
||||
"e": "ê",
|
||||
"g": "ĝ",
|
||||
"h": "ĥ",
|
||||
"i": "î",
|
||||
"j": "ĵ",
|
||||
"o": "ô",
|
||||
"ŝ": "ŝ",
|
||||
"u": "û",
|
||||
"w": "ŵ",
|
||||
"x": "x̂",
|
||||
"y": "ŷ",
|
||||
"z": "ẑ",
|
||||
// extended latin
|
||||
"á": "ấ",
|
||||
"à": "ầ",
|
||||
"ã": "ẫ",
|
||||
"ạ": "ậ",
|
||||
"ả": "ẩ",
|
||||
"é": "ế",
|
||||
"è": "ề",
|
||||
"ẽ": "ễ",
|
||||
"ẹ": "ệ",
|
||||
"ẻ": "ể",
|
||||
"ó": "ố",
|
||||
"ò": "ồ",
|
||||
"ơ": "ổ",
|
||||
"õ": "ỗ",
|
||||
"ọ": "ộ",
|
||||
// combining characters
|
||||
"а": "а\u0302",
|
||||
"е": "е\u0302",
|
||||
"и": "и\u0302",
|
||||
"о": "о\u0302",
|
||||
"у": "у\u0302"
|
||||
}
|
56
srcs/compose/accent_dot_above.json
Normal file
56
srcs/compose/accent_dot_above.json
Normal file
@ -0,0 +1,56 @@
|
||||
{
|
||||
"a": "ȧ",
|
||||
"b": "ḃ",
|
||||
"c": "ċ",
|
||||
"d": "ḋ",
|
||||
"e": "ė",
|
||||
"f": "ḟ",
|
||||
"g": "ġ",
|
||||
"h": "ḣ",
|
||||
"m": "ṁ",
|
||||
"n": "ṅ",
|
||||
"o": "ȯ",
|
||||
"p": "ṗ",
|
||||
"r": "ṙ",
|
||||
"s": "ṡ",
|
||||
"t": "ṫ",
|
||||
"w": "ẇ",
|
||||
"x": "ẋ",
|
||||
"y": "ẏ",
|
||||
"z": "ż",
|
||||
// remove dot since i and j already have one
|
||||
"i": "ı",
|
||||
"j": "ȷ",
|
||||
// extended latin
|
||||
"ā": "ǡ",
|
||||
"ō": "ȱ",
|
||||
"ś": "ṥ",
|
||||
"ṣ": "ṩ",
|
||||
"š": "ṧ",
|
||||
"ſ": "ẛ",
|
||||
// combining character
|
||||
"k": "k\u0307",
|
||||
"l": "l\u0307",
|
||||
"q": "q\u0307",
|
||||
"u": "u\u0307",
|
||||
"v": "v\u0307",
|
||||
"0": "0\u0307",
|
||||
"1": "1\u0307",
|
||||
"2": "2\u0307",
|
||||
"3": "3\u0307",
|
||||
"4": "4\u0307",
|
||||
"5": "5\u0307",
|
||||
"6": "6\u0307",
|
||||
"7": "7\u0307",
|
||||
"8": "8\u0307",
|
||||
"9": "9\u0307",
|
||||
// math
|
||||
"∈": "⋵",
|
||||
"⨯": "⨰",
|
||||
"∧": "⩑",
|
||||
"∨": "⩒",
|
||||
"≡": "⩧",
|
||||
"~": "⩪",
|
||||
"⊆": "⫃",
|
||||
"⊇": "⫄"
|
||||
}
|
34
srcs/compose/accent_dot_below.json
Normal file
34
srcs/compose/accent_dot_below.json
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ạ",
|
||||
"b": "ḅ",
|
||||
"d": "ḍ",
|
||||
"e": "ẹ",
|
||||
"h": "ḥ",
|
||||
"i": "ị",
|
||||
"k": "ḳ",
|
||||
"l": "ḷ",
|
||||
"m": "ṃ",
|
||||
"n": "ṇ",
|
||||
"o": "ọ",
|
||||
"r": "ṛ",
|
||||
"s": "ṣ",
|
||||
"t": "ṭ",
|
||||
"u": "ụ",
|
||||
"v": "ṿ",
|
||||
"w": "ẉ",
|
||||
"y": "ỵ",
|
||||
"z": "ẓ",
|
||||
// extended latin
|
||||
"ă": "ặ",
|
||||
"â": "ậ",
|
||||
"ê": "ệ",
|
||||
"ô": "ộ",
|
||||
"ơ": "ợ",
|
||||
"ṡ": "ṩ",
|
||||
"ư": "ự",
|
||||
// math
|
||||
"-": "⨪",
|
||||
"+": "⨥",
|
||||
"=": "⩦"
|
||||
}
|
14
srcs/compose/accent_double_aigu.json
Normal file
14
srcs/compose/accent_double_aigu.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
" ": "˝",
|
||||
// latin
|
||||
"o": "ő",
|
||||
"u": "ű",
|
||||
// cyrillic
|
||||
"у": "ӳ",
|
||||
// combining character
|
||||
"a": "a\u030b",
|
||||
"e": "e\u030b",
|
||||
"i": "i\u030b",
|
||||
"m": "m\u030b",
|
||||
"y": "y\u030b"
|
||||
}
|
17
srcs/compose/accent_double_grave.json
Normal file
17
srcs/compose/accent_double_grave.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ȁ",
|
||||
"e": "ȅ",
|
||||
"i": "ȉ",
|
||||
"o": "ȍ",
|
||||
"r": "ȑ",
|
||||
"u": "ȕ",
|
||||
//cyrillic
|
||||
"ѵ": "ѷ",
|
||||
"а": "а\u030f",
|
||||
"е": "е\u030f",
|
||||
"и": "и\u030f",
|
||||
"о": "о\u030f",
|
||||
"р": "р\u030f",
|
||||
"у": "у\u030f"
|
||||
}
|
38
srcs/compose/accent_grave.json
Normal file
38
srcs/compose/accent_grave.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
// latin
|
||||
"a": "à",
|
||||
"e": "è",
|
||||
"i": "ì",
|
||||
"n": "ǹ",
|
||||
"o": "ò",
|
||||
"u": "ù",
|
||||
"w": "ẁ",
|
||||
"y": "ỳ",
|
||||
// extended latin
|
||||
"â": "ầ",
|
||||
"ă": "ằ",
|
||||
"ê": "ề",
|
||||
"ē": "ḕ",
|
||||
"ơ": "ờ",
|
||||
"ô": "ồ",
|
||||
"ō": "ṑ",
|
||||
"ü": "ǜ",
|
||||
"ư": "ừ",
|
||||
// greek (technically not a grave, but a varia)
|
||||
"α": "ὰ",
|
||||
"ε": "ὲ",
|
||||
"η": "ὴ",
|
||||
"ι": "ὶ",
|
||||
"ο": "ὸ",
|
||||
"υ": "ὺ",
|
||||
"ω": "ὼ",
|
||||
// there is more like ἒ, ᾣ, etc
|
||||
// cyrillic
|
||||
"е": "ѐ",
|
||||
"и": "ѝ",
|
||||
// combining character
|
||||
"ɔ": "ɔ\u0300",
|
||||
"s": "s\u0300",
|
||||
"ʌ": "ʌ\u0300",
|
||||
"z": "z\u0300"
|
||||
}
|
14
srcs/compose/accent_hook_above.json
Normal file
14
srcs/compose/accent_hook_above.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"a": "ả",
|
||||
"ă": "ẳ",
|
||||
"â": "ẩ",
|
||||
"e": "ẻ",
|
||||
"ê": "ể",
|
||||
"i": "ỉ",
|
||||
"o": "ỏ",
|
||||
"ô": "ổ",
|
||||
"ơ": "ở",
|
||||
"u": "ủ",
|
||||
"ư": "ử",
|
||||
"y": "ỷ"
|
||||
}
|
14
srcs/compose/accent_horn.json
Normal file
14
srcs/compose/accent_horn.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"o": "ơ",
|
||||
"ó": "ớ",
|
||||
"ò": "ờ",
|
||||
"ỏ": "ở",
|
||||
"õ": "ỡ",
|
||||
"ọ": "ợ",
|
||||
"u": "ư",
|
||||
"ú": "ứ",
|
||||
"ù": "ừ",
|
||||
"ủ": "ử",
|
||||
"ũ": "ữ",
|
||||
"ụ": "ự"
|
||||
}
|
35
srcs/compose/accent_macron.json
Normal file
35
srcs/compose/accent_macron.json
Normal file
@ -0,0 +1,35 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ā",
|
||||
"e": "ē",
|
||||
"g": "ḡ",
|
||||
"i": "ī",
|
||||
"o": "ō",
|
||||
"u": "ū",
|
||||
"y": "ȳ",
|
||||
// extended latin
|
||||
"æ": "ǣ",
|
||||
"ä": "ǟ",
|
||||
"ȧ": "ǡ",
|
||||
"è": "ḕ",
|
||||
"é": "ḗ",
|
||||
"ḷ": "ḹ",
|
||||
"ṛ": "ṝ",
|
||||
"ö": "ȫ",
|
||||
"ȯ": "ȱ",
|
||||
"ǫ": "ǭ",
|
||||
"õ": "ȭ",
|
||||
"ò": "ṑ",
|
||||
"ó": "ṓ",
|
||||
"ü": "ǖ", // there is also ṻ
|
||||
// cyrillic
|
||||
"и": "ӣ",
|
||||
"у": "ӯ",
|
||||
// greek
|
||||
"α": "ᾱ",
|
||||
"ι": "ῑ",
|
||||
"υ": "ῡ",
|
||||
// combining characters
|
||||
"l": "l\u0304",
|
||||
"r": "r\u0304"
|
||||
}
|
10
srcs/compose/accent_ogonek.json
Normal file
10
srcs/compose/accent_ogonek.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ą",
|
||||
"e": "ę",
|
||||
"i": "į",
|
||||
"o": "ǫ",
|
||||
"u": "ų",
|
||||
// extended latin
|
||||
"ō": "ǭ"
|
||||
}
|
14
srcs/compose/accent_ordinal.json
Normal file
14
srcs/compose/accent_ordinal.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"a": "ª",
|
||||
"o": "º",
|
||||
"1": "ª",
|
||||
"2": "º",
|
||||
"3": "ⁿ",
|
||||
"4": "ᵈ",
|
||||
"5": "ᵉ",
|
||||
"6": "ʳ",
|
||||
"7": "ˢ",
|
||||
"8": "ᵗ",
|
||||
"9": "ʰ",
|
||||
"*": "°"
|
||||
}
|
11
srcs/compose/accent_ring.json
Normal file
11
srcs/compose/accent_ring.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
// latin
|
||||
"a": "å",
|
||||
"u": "ů",
|
||||
"w": "ẘ", // no uppercase
|
||||
"y": "ẙ", // no uppercase
|
||||
// extended latin
|
||||
"á": "ǻ",
|
||||
// extra
|
||||
"~": "⸛"
|
||||
}
|
18
srcs/compose/accent_slash.json
Normal file
18
srcs/compose/accent_slash.json
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"a": "ⱥ",
|
||||
"b": "␢",
|
||||
"c": "ȼ",
|
||||
"e": "ɇ",
|
||||
"g": "ꞡ",
|
||||
"k": "ꝃ",
|
||||
"l": "ł",
|
||||
"n": "ꞥ",
|
||||
"o": "ø",
|
||||
"ó": "ǿ",
|
||||
"ɔ": "ꬿ",
|
||||
"r": "ꞧ",
|
||||
"s": "ꞩ",
|
||||
"t": "ⱦ",
|
||||
"u": "ꞹ",
|
||||
"v": "ꝟ"
|
||||
}
|
45
srcs/compose/accent_subscript.json
Normal file
45
srcs/compose/accent_subscript.json
Normal file
@ -0,0 +1,45 @@
|
||||
{
|
||||
// arabic numbers
|
||||
"0": "₀",
|
||||
"1": "₁",
|
||||
"2": "₂",
|
||||
"3": "₃",
|
||||
"4": "₄",
|
||||
"5": "₅",
|
||||
"6": "₆",
|
||||
"7": "₇",
|
||||
"8": "₈",
|
||||
"9": "₉",
|
||||
// math operators
|
||||
"+": "₊",
|
||||
"-": "₋",
|
||||
"=": "₌",
|
||||
"(": "₍",
|
||||
")": "₎",
|
||||
// latin
|
||||
"a": "ₐ",
|
||||
"e": "ₑ",
|
||||
"h": "ₕ",
|
||||
"i": "ᵢ",
|
||||
"j": "ⱼ",
|
||||
"k": "ₖ",
|
||||
"l": "ₗ",
|
||||
"m": "ₘ",
|
||||
"n": "ₙ",
|
||||
"o": "ₒ",
|
||||
"p": "ₚ",
|
||||
"r": "ᵣ",
|
||||
"s": "ₛ",
|
||||
"t": "ₜ",
|
||||
"u": "ᵤ",
|
||||
"v": "ᵥ",
|
||||
"x": "ₓ",
|
||||
// extended latin
|
||||
"ə": "ₔ",
|
||||
// greek
|
||||
"β": "ᵦ",
|
||||
"γ": "ᵧ",
|
||||
"ρ": "ᵨ",
|
||||
"φ": "ᵩ",
|
||||
"χ": "ᵪ"
|
||||
}
|
93
srcs/compose/accent_superscript.json
Normal file
93
srcs/compose/accent_superscript.json
Normal file
@ -0,0 +1,93 @@
|
||||
{
|
||||
// numbers
|
||||
"0": "⁰",
|
||||
"1": "¹",
|
||||
"2": "²",
|
||||
"3": "³",
|
||||
"4": "⁴",
|
||||
"5": "⁵",
|
||||
"6": "⁶",
|
||||
"7": "⁷",
|
||||
"8": "⁸",
|
||||
"9": "⁹",
|
||||
// math operators
|
||||
"+": "⁺",
|
||||
"-": "⁻",
|
||||
"=": "⁼",
|
||||
"(": "⁽",
|
||||
")": "⁾",
|
||||
// latin
|
||||
"n": "ⁿ",
|
||||
|
||||
// since there are no more "superscript" characters,
|
||||
// we substitute with "modifier letter small"s which looks the same
|
||||
// latin
|
||||
"a": "ᵃ",
|
||||
"b": "ᵇ",
|
||||
"c": "ᶜ",
|
||||
"d": "ᵈ",
|
||||
"e": "ᵉ",
|
||||
"f": "ᶠ",
|
||||
"g": "ᵍ",
|
||||
"h": "ʰ",
|
||||
"i": "ⁱ",
|
||||
"j": "ʲ",
|
||||
"k": "ᵏ",
|
||||
"l": "ˡ",
|
||||
// see above for n
|
||||
"m": "ᵐ",
|
||||
"o": "ᵒ",
|
||||
"p": "ᵖ",
|
||||
"q": "ꟴ", // there is no proper lowercase superscript q
|
||||
"r": "ʳ",
|
||||
"s": "ˢ",
|
||||
"t": "ᵗ",
|
||||
"u": "ᵘ",
|
||||
"v": "ᵛ",
|
||||
"w": "ʷ",
|
||||
"x": "ˣ",
|
||||
"y": "ʸ",
|
||||
"z": "ᶻ",
|
||||
// extended latin
|
||||
"ɐ": "ᵄ",
|
||||
"ᴂ": "ᵆ",
|
||||
"ɕ": "ᶝ",
|
||||
"ə": "ᵊ",
|
||||
"ɛ": "ᵋ",
|
||||
"ɜ": "ᶟ", // turned open e, ↓ not the same
|
||||
"ᴈ": "ᵌ", // reversed open e
|
||||
"ɥ": "ᶣ",
|
||||
"ɦ": "ʱ",
|
||||
"ᴉ": "ᵎ",
|
||||
"ɨ": "ᶤ",
|
||||
"ɟ": "ᶡ",
|
||||
"ɱ": "ᶬ",
|
||||
"ɯ": "ᵚ",
|
||||
"ɰ": "ᶭ",
|
||||
"ŋ": "ᵑ",
|
||||
"ᴝ": "ᵙ",
|
||||
"ɵ": "ᶱ",
|
||||
"œ": "ꟹ",
|
||||
"ɔ": "ᵓ",
|
||||
"ɹ": "ʴ",
|
||||
"ɻ": "ʵ",
|
||||
"ʁ": "ʶ",
|
||||
"ʂ": "ᶳ",
|
||||
"ʉ": "ᶶ",
|
||||
"ʃ": "ᶴ",
|
||||
"ʒ": "ᶾ",
|
||||
"ʍ": "ꭩ",
|
||||
// greek
|
||||
"ɒ": "ᶛ",
|
||||
"β": "ᵝ",
|
||||
"ɣ": "ˠ",
|
||||
"δ": "ᵟ",
|
||||
"φ": "ᵠ",
|
||||
"χ": "ᵡ",
|
||||
"ι": "ᶥ",
|
||||
"ʊ": "ᶷ",
|
||||
"ʌ": "ᶺ",
|
||||
"θ": "ᶿ",
|
||||
// cyrillic
|
||||
"ө": "ᶱ"
|
||||
}
|
21
srcs/compose/accent_tilde.json
Normal file
21
srcs/compose/accent_tilde.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
// latin
|
||||
"a": "ã",
|
||||
"e": "ẽ",
|
||||
"i": "ĩ",
|
||||
"n": "ñ",
|
||||
"o": "õ",
|
||||
"u": "ũ",
|
||||
"v": "ṽ",
|
||||
"y": "ỹ",
|
||||
// extended latin
|
||||
"ă": "ẵ",
|
||||
"â": "ẫ",
|
||||
"ê": "ễ",
|
||||
"ơ": "ỡ",
|
||||
"ō": "ȭ",
|
||||
"ó": "ṍ",
|
||||
"ö": "ṏ",
|
||||
"ư": "ữ",
|
||||
"ú": "ṹ"
|
||||
}
|
54
srcs/compose/accent_trema.json
Normal file
54
srcs/compose/accent_trema.json
Normal file
@ -0,0 +1,54 @@
|
||||
{
|
||||
// fun
|
||||
"~": "⍨",
|
||||
"*": "⍣",
|
||||
"∇": "⍢",
|
||||
"°": "⍤",
|
||||
// latin
|
||||
"a": "ä",
|
||||
"e": "ë",
|
||||
"h": "ḧ",
|
||||
"i": "ï",
|
||||
"o": "ö",
|
||||
"t": "ẗ",
|
||||
"u": "ü",
|
||||
"w": "ẅ",
|
||||
"x": "ẍ",
|
||||
"y": "ÿ",
|
||||
// extended latin
|
||||
"ā": "ǟ",
|
||||
"ō": "ȫ",
|
||||
"õ": "ṏ",
|
||||
"í": "ḯ",
|
||||
"ū": "ǖ", // there is also ṻ
|
||||
"ú": "ǘ",
|
||||
"ù": "ǜ",
|
||||
"ǔ": "ǚ",
|
||||
// greek
|
||||
"ι": "ϊ",
|
||||
"υ": "ϋ",
|
||||
"ὺ": "ῢ",
|
||||
"ύ": "ΰ",
|
||||
"ῦ": "ῧ",
|
||||
"ϒ": "ϔ",
|
||||
// cyrillic
|
||||
"а": "ӓ",
|
||||
"ә": "ӛ",
|
||||
"ж": "ӝ",
|
||||
"з": "ӟ",
|
||||
"и": "ӥ",
|
||||
"о": "ӧ",
|
||||
"ө": "ӫ",
|
||||
"э": "ӭ",
|
||||
"у": "ӱ",
|
||||
"ч": "ӵ",
|
||||
"ы": "ӹ",
|
||||
// combining character
|
||||
"c": "c\u0308",
|
||||
"j": "j\u0308",
|
||||
"k": "k\u0308",
|
||||
"l": "l\u0308",
|
||||
"m": "m\u0308",
|
||||
"n": "n\u0308",
|
||||
"s": "s\u0308"
|
||||
}
|
@ -1,28 +1,29 @@
|
||||
import textwrap, sys, re, string, json
|
||||
import textwrap, sys, re, string, json, os
|
||||
from array import array
|
||||
|
||||
# Names not defined in Compose.pre
|
||||
xkb_char_extra_names = {
|
||||
"space": " ",
|
||||
"minus": "-",
|
||||
"asterisk": "*",
|
||||
"colon": ":",
|
||||
"equal": "=",
|
||||
"exclam": "!",
|
||||
"grave": "`",
|
||||
"parenleft": "(",
|
||||
"parenright": ")",
|
||||
"percent": "%",
|
||||
"period": ".",
|
||||
"plus": "+",
|
||||
"question": "?",
|
||||
"semicolon": ";",
|
||||
"underscore": "_",
|
||||
}
|
||||
# Compile compose sequences from Xorg's format or from JSON files into an
|
||||
# efficient state machine.
|
||||
# See [ComposeKey.java] for the interpreter.
|
||||
#
|
||||
# Takes input files as arguments and generate a Java file.
|
||||
# The initial state for each input is generated as a constant named after the
|
||||
# input file.
|
||||
|
||||
# Parse symbol names from keysymdef.h. Many compose sequences in
|
||||
# en_US_UTF_8_Compose.pre reference theses. For example, all the sequences on
|
||||
# the Greek, Cyrillic and Hebrew scripts need these symbols.
|
||||
def parse_keysymdef_h(fname):
|
||||
with open(fname, "r") as inp:
|
||||
keysym_re = re.compile(r'^#define XK_(\S+)\s+\S+\s*/\*.U\+([0-9a-fA-F]+)\s')
|
||||
for line in inp:
|
||||
m = re.match(keysym_re, line)
|
||||
if m != None:
|
||||
yield (m.group(1), chr(int(m.group(2), 16)))
|
||||
|
||||
dropped_sequences = 0
|
||||
|
||||
# Parse XKB's Compose.pre files
|
||||
def parse_sequences_file_xkb(fname):
|
||||
def parse_sequences_file_xkb(fname, xkb_char_extra_names):
|
||||
# Parse a line of the form:
|
||||
# <Multi_key> <minus> <space> : "~" asciitilde # TILDE
|
||||
# Sequences not starting with <Multi_key> are ignored.
|
||||
@ -47,16 +48,21 @@ def parse_sequences_file_xkb(fname):
|
||||
return def_, result
|
||||
char_names = { **xkb_char_extra_names }
|
||||
# Interpret character names of the form "U0000" or using [char_names].
|
||||
def parse_seq_char(c):
|
||||
uchar, named_char = c
|
||||
def parse_seq_char(sc):
|
||||
uchar, named_char = sc
|
||||
if uchar != "":
|
||||
return chr(int(uchar, 16))
|
||||
# else is a named char
|
||||
if len(named_char) == 1:
|
||||
return named_char
|
||||
if not named_char in char_names:
|
||||
raise Exception("Unknown char: " + named_char)
|
||||
return char_names[named_char]
|
||||
c = chr(int(uchar, 16))
|
||||
elif len(named_char) == 1:
|
||||
c = named_char
|
||||
else:
|
||||
if not named_char in char_names:
|
||||
raise Exception("Unknown char: " + named_char)
|
||||
c = char_names[named_char]
|
||||
# The state machine can't represent sequence characters that do not fit
|
||||
# in a 16-bit char.
|
||||
if len(c) > 1 or ord(c[0]) > 65535:
|
||||
raise Exception("Char out of range: " + r)
|
||||
return c
|
||||
# Interpret the left hand side of a sequence.
|
||||
def parse_seq_chars(def_):
|
||||
return list(map(parse_seq_char, re.findall(char_re, def_)))
|
||||
@ -64,11 +70,6 @@ def parse_sequences_file_xkb(fname):
|
||||
def parse_seq_result(r):
|
||||
if len(r) == 2 and r[0] == '\\':
|
||||
return r[1]
|
||||
# The state machine can't represent characters that do not fit in a
|
||||
# 16-bit char. This breaks some sequences that output letters with
|
||||
# combined diacritics or emojis.
|
||||
if len(r) > 1 or ord(r[0]) > 65535:
|
||||
raise Exception("Char out of range: " + r)
|
||||
return r
|
||||
# Populate [char_names] with the information present in the file.
|
||||
with open(fname, "r") as inp:
|
||||
@ -89,47 +90,89 @@ def parse_sequences_file_xkb(fname):
|
||||
seqs.append(s)
|
||||
return seqs
|
||||
|
||||
# Basic support for comments in json files. Reads a file
|
||||
def strip_cstyle_comments(inp):
|
||||
def strip_line(line):
|
||||
i = line.find("//")
|
||||
return line[:i] + "\n" if i >= 0 else line
|
||||
return "".join(map(strip_line, inp))
|
||||
|
||||
# Parse from a json file containing a dictionary sequence → result string.
|
||||
def parse_sequences_file_json(fname):
|
||||
with open(fname, "r") as inp:
|
||||
seqs = json.load(inp)
|
||||
return list(seqs.items())
|
||||
def tree_to_seqs(tree, prefix):
|
||||
for c, r in tree.items():
|
||||
if isinstance(r, str):
|
||||
yield prefix + [c], r
|
||||
else:
|
||||
yield from tree_to_seqs(r, prefix + [c])
|
||||
try:
|
||||
with open(fname, "r") as inp:
|
||||
tree = json.loads(strip_cstyle_comments(inp))
|
||||
return list(tree_to_seqs(tree, []))
|
||||
except Exception as e:
|
||||
print("Failed parsing '%s': %s" % (fname, str(e)), file=sys.stderr)
|
||||
|
||||
# Format of the sequences file is determined by its extension
|
||||
def parse_sequences_file(fname):
|
||||
def parse_sequences_file(fname, xkb_char_extra_names={}):
|
||||
if fname.endswith(".pre"):
|
||||
return parse_sequences_file_xkb(fname)
|
||||
return parse_sequences_file_xkb(fname, xkb_char_extra_names)
|
||||
if fname.endswith(".json"):
|
||||
return parse_sequences_file_json(fname)
|
||||
raise Exception(fname + ": Unsupported format")
|
||||
|
||||
# A sequence directory can contain several sequence files as well as
|
||||
# 'keysymdef.h'.
|
||||
def parse_sequences_dir(dname):
|
||||
compose_files = []
|
||||
xkb_char_extra_names = {}
|
||||
# Parse keysymdef.h first if present
|
||||
for fbasename in os.listdir(dname):
|
||||
fname = os.path.join(dname, fbasename)
|
||||
if fbasename == "keysymdef.h":
|
||||
xkb_char_extra_names = dict(parse_keysymdef_h(fname))
|
||||
else:
|
||||
compose_files.append(fname)
|
||||
sequences = []
|
||||
for fname in compose_files:
|
||||
sequences.extend(parse_sequences_file(fname, xkb_char_extra_names))
|
||||
return sequences
|
||||
|
||||
# Turn a list of sequences into a trie.
|
||||
def add_sequences_to_trie(seqs, trie):
|
||||
def add_seq_to_trie(t_, seq, result):
|
||||
global dropped_sequences
|
||||
def add_seq_to_trie(seq, result):
|
||||
t_ = trie
|
||||
i = 0
|
||||
while i < len(seq) - 1:
|
||||
c = seq[i]
|
||||
if c not in t_:
|
||||
t_[c] = {}
|
||||
if isinstance(t_[c], str):
|
||||
global dropped_sequences
|
||||
dropped_sequences += 1
|
||||
print("Sequence collide: '%s = %s' '%s = %s'" % (
|
||||
seq[:i+1], t_[c], seq, result),
|
||||
file=sys.stderr)
|
||||
return
|
||||
t_ = t_[c]
|
||||
i += 1
|
||||
c = seq[i]
|
||||
for c in seq[:-1]:
|
||||
t_ = t_.setdefault(c, {})
|
||||
if isinstance(t_, str):
|
||||
return False
|
||||
c = seq[-1]
|
||||
if c in t_:
|
||||
return False
|
||||
t_[c] = result
|
||||
return True
|
||||
def existing_sequence_to_str(seq): # Used in error message
|
||||
i = 0
|
||||
t_ = trie
|
||||
while i < len(seq):
|
||||
if seq[i] not in t_: break # No collision ?
|
||||
t_ = t_[seq[i]]
|
||||
i += 1
|
||||
if isinstance(t_, str): break
|
||||
return "".join(seq[:i]) + " = " + str(t_)
|
||||
for seq, result in seqs:
|
||||
add_seq_to_trie(trie, seq, result)
|
||||
if not add_seq_to_trie(seq, result):
|
||||
dropped_sequences += 1
|
||||
print("Sequence collide: '%s' and '%s = %s'" % (
|
||||
existing_sequence_to_str(seq),
|
||||
"".join(seq), result), file=sys.stderr)
|
||||
|
||||
# Compile the trie into a state machine.
|
||||
def make_automata(tree_root):
|
||||
def make_automata(tries):
|
||||
previous_leafs = {} # Deduplicate leafs
|
||||
states = []
|
||||
def add_tree(t):
|
||||
this_node_index = len(states)
|
||||
# Index and size of the new node
|
||||
i = len(states)
|
||||
s = len(t.keys())
|
||||
@ -141,19 +184,43 @@ def make_automata(tree_root):
|
||||
states.append((None, None))
|
||||
# Add nested nodes and fill the current node
|
||||
for c in sorted(t.keys()):
|
||||
node_i = len(states)
|
||||
add_node(t[c])
|
||||
states[i] = (c, node_i)
|
||||
states[i] = (c, add_node(t[c]))
|
||||
i += 1
|
||||
return this_node_index
|
||||
def add_leaf(c):
|
||||
states.append((c, 1))
|
||||
if c in previous_leafs:
|
||||
return previous_leafs[c]
|
||||
this_node_index = len(states)
|
||||
previous_leafs[c] = this_node_index
|
||||
# There are two encoding for leafs: character final state for 15-bit
|
||||
# characters and string final state for the rest.
|
||||
if len(c) > 1 or ord(c[0]) > 32767: # String final state
|
||||
# A ':' can be added to the result of a sequence to force a string
|
||||
# final state. For example, to go through KeyValue lookup.
|
||||
if c.startswith(":"): c = c[1:]
|
||||
javachars = array('H', c.encode("UTF-16-LE"))
|
||||
states.append((-1, len(javachars) + 1))
|
||||
for c in javachars:
|
||||
states.append((c, 0))
|
||||
else: # Character final state
|
||||
states.append((c, 1))
|
||||
return this_node_index
|
||||
def add_node(n):
|
||||
if type(n) == str:
|
||||
add_leaf(n)
|
||||
return add_leaf(n)
|
||||
else:
|
||||
add_tree(n)
|
||||
add_tree(tree_root)
|
||||
return states
|
||||
return add_tree(n)
|
||||
states.append((1, 1)) # Add an empty state at the beginning.
|
||||
entry_states = { n: add_tree(root) for n, root in tries.items() }
|
||||
return entry_states, states
|
||||
|
||||
# Debug
|
||||
def print_automata(automata):
|
||||
i = 0
|
||||
for (s, e) in automata:
|
||||
s = "%#06x" % s if isinstance(s, int) else '"%s"' % str(s)
|
||||
print("%3d %8s %d" % (i, s, e), file=sys.stderr)
|
||||
i += 1
|
||||
|
||||
def batched(ar, n):
|
||||
i = 0
|
||||
@ -165,10 +232,11 @@ def batched(ar, n):
|
||||
|
||||
# Print the state machine compiled by make_automata into java code that can be
|
||||
# used by [ComposeKeyData.java].
|
||||
def gen_java(machine):
|
||||
def gen_java(entry_states, machine):
|
||||
chars_map = {
|
||||
# These characters cannot be used in unicode form as Java's parser
|
||||
# unescape unicode sequences before parsing.
|
||||
-1: "\\uFFFF",
|
||||
"\"": "\\\"",
|
||||
"\\": "\\\\",
|
||||
"\n": "\\n",
|
||||
@ -189,6 +257,9 @@ def gen_java(machine):
|
||||
def gen_array(array):
|
||||
chars = list(map(char_repr, array))
|
||||
return "\" +\n \"".join(map(lambda b: "".join(b), batched(chars, 72)))
|
||||
def gen_entry_state(s):
|
||||
name, state = s
|
||||
return " public static final int %s = %d;" % (name, state)
|
||||
print("""package juloo.keyboard2;
|
||||
|
||||
/** This file is generated, see [srcs/compose/compile.py]. */
|
||||
@ -200,18 +271,26 @@ public final class ComposeKeyData
|
||||
|
||||
public static final char[] edges =
|
||||
("%s").toCharArray();
|
||||
|
||||
%s
|
||||
}""" % (
|
||||
# Break the edges array every few characters using string concatenation.
|
||||
gen_array(map(lambda s: s[0], machine)),
|
||||
gen_array(map(lambda s: s[1], machine)),
|
||||
"\n".join(map(gen_entry_state, entry_states.items())),
|
||||
))
|
||||
|
||||
total_sequences = 0
|
||||
trie = {}
|
||||
for fname in sys.argv[1:]:
|
||||
sequences = parse_sequences_file(fname)
|
||||
add_sequences_to_trie(sequences, trie)
|
||||
tries = {} # Orderred dict
|
||||
for fname in sorted(sys.argv[1:]):
|
||||
tname, _ = os.path.splitext(os.path.basename(fname))
|
||||
if os.path.isdir(fname):
|
||||
sequences = parse_sequences_dir(fname)
|
||||
else:
|
||||
sequences = parse_sequences_file(fname)
|
||||
add_sequences_to_trie(sequences, tries.setdefault(tname, {}))
|
||||
total_sequences += len(sequences)
|
||||
automata = make_automata(trie)
|
||||
gen_java(automata)
|
||||
entry_states, automata = make_automata(tries)
|
||||
gen_java(entry_states, automata)
|
||||
print("Compiled %d sequences into %d states. Dropped %d sequences." % (total_sequences, len(automata), dropped_sequences), file=sys.stderr)
|
||||
# print_automata(automata)
|
||||
|
149
srcs/compose/compose/arabic.json
Normal file
149
srcs/compose/compose/arabic.json
Normal file
@ -0,0 +1,149 @@
|
||||
{
|
||||
"ا": {
|
||||
"ا": "combining_alef_above",
|
||||
"ع": "أ",
|
||||
"و": "ۉ",
|
||||
"ي": "ؽ",
|
||||
"ی": "ؽ",
|
||||
"۷": "combining_alef_below",
|
||||
"٧": "combining_alef_below"
|
||||
},
|
||||
"ت": {
|
||||
"د": "ط",
|
||||
"ر": "ڑ",
|
||||
"ش": "ث",
|
||||
"ن": "ٹ"
|
||||
},
|
||||
"ج": {
|
||||
"ش": "چ"
|
||||
},
|
||||
"ح": {
|
||||
"ح": "combining_sukun"
|
||||
},
|
||||
"د": {
|
||||
"ت": "ڈ",
|
||||
"ز": "ذ",
|
||||
"ت": "ڑ",
|
||||
"۷": "ڕ"
|
||||
},
|
||||
"س": {
|
||||
"ش": "ص"
|
||||
},
|
||||
"ش": {
|
||||
"ت": "ث"
|
||||
},
|
||||
"ع": {
|
||||
"ا": "إ",
|
||||
"ه": "ۀ",
|
||||
"و": "ؤ",
|
||||
"ي": "ئ",
|
||||
"ی": "ئ",
|
||||
"۷": "combining_hamza_below",
|
||||
"۸": "combining_hamza_above",
|
||||
"٧": "combining_hamza_below",
|
||||
"٨": "combining_hamza_above"
|
||||
},
|
||||
"غ": {
|
||||
"ك": "گ",
|
||||
"ک": "گ"
|
||||
},
|
||||
"ف": {
|
||||
"و": "ڡ"
|
||||
},
|
||||
"ق": {
|
||||
"و": "ۊ"
|
||||
},
|
||||
"ل": {
|
||||
"ل": "combining_shaddah",
|
||||
"۷": "ڵ",
|
||||
"٧": "ڵ"
|
||||
},
|
||||
"ن": {
|
||||
"ت": "ٹ",
|
||||
"ه": "combining_fathatan",
|
||||
"و": "combining_dammatan",
|
||||
"ی": "combining_kasratan",
|
||||
"ي": "combining_kasratan"
|
||||
},
|
||||
"ه": {
|
||||
" ": "ە",
|
||||
"ت": "ة",
|
||||
"ع": "ۀ",
|
||||
"ن": "combining_fathatan",
|
||||
"ه": "combining_fatha",
|
||||
"و": "ۆ",
|
||||
"ي": "ێ",
|
||||
"ی": "ێ"
|
||||
},
|
||||
"و": {
|
||||
"ث": "ۋ",
|
||||
"ع": "ؤ",
|
||||
"ف": "ڡ",
|
||||
"ن": "combining_dammatan",
|
||||
"و": "combining_dammah",
|
||||
"۷": "ۆ",
|
||||
"۸": "ۉ",
|
||||
"۸": "ۉ",
|
||||
"٧": "ۆ",
|
||||
"٨": "ۉ",
|
||||
"٨": "ۉ"
|
||||
},
|
||||
"ي": {
|
||||
" ": "ے",
|
||||
"ا": "ى",
|
||||
"ع": "ئ",
|
||||
"ي": "combining_kasra",
|
||||
"۷": "ێ",
|
||||
"۸": "ؽ",
|
||||
"ن": "combining_kasratan",
|
||||
"٧": "ێ",
|
||||
"٨": "ؽ"
|
||||
},
|
||||
"ی": {
|
||||
" ": "ے",
|
||||
"ا": "ى",
|
||||
"ع": "ئ",
|
||||
"ن": "combining_kasratan",
|
||||
"ی": "combining_kasra",
|
||||
"۷": "ێ",
|
||||
"۸": "ؽ",
|
||||
"٧": "ێ",
|
||||
"٨": "ؽ"
|
||||
},
|
||||
"۷": {
|
||||
"ا": "combining_alef_below",
|
||||
"ر": "ڕ",
|
||||
"ع": "combining_hamza_below",
|
||||
"ل": "ڵ",
|
||||
"و": "ۆ",
|
||||
"ي": "ێ",
|
||||
"ی": "ێ",
|
||||
"۷": "combining_arabic_v"
|
||||
},
|
||||
"۸": {
|
||||
"ع": "combining_hamza_above",
|
||||
"و": "ۉ",
|
||||
"و": "ۉ",
|
||||
"ي": "ؽ",
|
||||
"ی": "ؽ",
|
||||
"۸": "combining_arabic_inverted_v"
|
||||
},
|
||||
"٧": {
|
||||
"ا": "combining_alef_below",
|
||||
"ر": "ڕ",
|
||||
"ع": "combining_hamza_below",
|
||||
"ل": "ڵ",
|
||||
"و": "ۆ",
|
||||
"ي": "ێ",
|
||||
"٧": "combining_arabic_v",
|
||||
"ی": "ێ"
|
||||
},
|
||||
"٨": {
|
||||
"ع": "combining_hamza_above",
|
||||
"و": "ۉ",
|
||||
"و": "ۉ",
|
||||
"ي": "ؽ",
|
||||
"٨": "combining_arabic_inverted_v",
|
||||
"ی": "ؽ"
|
||||
}
|
||||
}
|
165
srcs/compose/compose/cyrillic.json
Normal file
165
srcs/compose/compose/cyrillic.json
Normal file
@ -0,0 +1,165 @@
|
||||
{
|
||||
",": {
|
||||
"г": "ӻ",
|
||||
"к": "ӄ",
|
||||
"л": "ԓ",
|
||||
"н": "ӈ",
|
||||
"х": "ӽ",
|
||||
"ѧ": "ӊ"
|
||||
},
|
||||
".": {
|
||||
"г": "ӷ",
|
||||
"ж": "җ",
|
||||
"й": "ҋ",
|
||||
"к": "қ",
|
||||
"л": "ԯ",
|
||||
"м": "ӎ",
|
||||
"н": "ӊ",
|
||||
"х": "ҳ",
|
||||
"ч": "ҷ",
|
||||
"і": "ї"
|
||||
},
|
||||
"а": {
|
||||
"е": "ѣ",
|
||||
"у": "ѡ",
|
||||
"ч": "combining_aigu",
|
||||
"ы": "ѣ",
|
||||
"ь": "ꙙ",
|
||||
"ꙋ": "ꙍ",
|
||||
"ꙑ": "ѣ"
|
||||
},
|
||||
"б": {
|
||||
"ч": "combining_slavonic_psili"
|
||||
},
|
||||
"г": {
|
||||
",": "ӻ",
|
||||
".": "ӷ",
|
||||
"й": "ғ",
|
||||
"к": "ґ",
|
||||
"х": "ҁ",
|
||||
"ј": "ғ"
|
||||
},
|
||||
"д": {
|
||||
"е": "ꙉ",
|
||||
"ж": "џ",
|
||||
"з": "ꙃ",
|
||||
"й": "ꙉ",
|
||||
"ј": "ꙉ",
|
||||
"ѥ": "ђ"
|
||||
},
|
||||
"е": {
|
||||
"ч": "combining_trema"
|
||||
},
|
||||
"ж": {
|
||||
".": "җ"
|
||||
},
|
||||
"з": {
|
||||
"ф": "ҙ"
|
||||
},
|
||||
"и": {
|
||||
"и": "ӣ",
|
||||
"у": "ѵ"
|
||||
},
|
||||
"й": {
|
||||
".": "ҋ",
|
||||
"ч": "combining_breve"
|
||||
},
|
||||
"к": {
|
||||
",": "ӄ",
|
||||
".": "қ",
|
||||
"г": "ґ",
|
||||
"с": "ѯ",
|
||||
"х": "ҁ",
|
||||
"ш": "ѯ"
|
||||
},
|
||||
"л": {
|
||||
",": "ԓ",
|
||||
".": "ԯ",
|
||||
"ь": "љ"
|
||||
},
|
||||
"м": {
|
||||
".": "ӎ"
|
||||
},
|
||||
"н": {
|
||||
",": "ӈ",
|
||||
"·": "ԩ",
|
||||
"ч": "combining_titlo",
|
||||
"ь": "њ"
|
||||
},
|
||||
"о": {
|
||||
"т": "ѿ",
|
||||
"у": "ѹ",
|
||||
"ч": "combining_inverted_breve"
|
||||
},
|
||||
"п": {
|
||||
"с": "ѱ"
|
||||
},
|
||||
"т": {
|
||||
"й": "ћ",
|
||||
"ф": "ѳ",
|
||||
"ј": "ћ"
|
||||
},
|
||||
"у": {
|
||||
"и": "ѵ",
|
||||
"й": "ў",
|
||||
"у": "ӯ",
|
||||
"ч": "combining_pokrytie",
|
||||
"і": "ѵ",
|
||||
"ј": "ў"
|
||||
},
|
||||
"х": {
|
||||
",": "ӽ",
|
||||
".": "ҳ",
|
||||
"ч": "combining_slavonic_dasia"
|
||||
},
|
||||
"ч": {
|
||||
".": "ҷ",
|
||||
"а": "combining_aigu",
|
||||
"б": "combining_slavonic_psili",
|
||||
"е": "combining_trema",
|
||||
"й": "combining_breve",
|
||||
"н": "combining_titlo",
|
||||
"о": "combining_inverted_breve",
|
||||
"у": "combining_pokrytie",
|
||||
"х": "combining_slavonic_dasia",
|
||||
"ч": "combining_payerok",
|
||||
"ч": "combining_payerok",
|
||||
"ъ": "combining_vertical_tilde",
|
||||
"ю": "combining_grave",
|
||||
"ј": "combining_breve",
|
||||
"ѧ": "combining_vzmet"
|
||||
},
|
||||
"ш": {
|
||||
"т": "щ"
|
||||
},
|
||||
"ъ": {
|
||||
"ч": "combining_vertical_tilde"
|
||||
},
|
||||
"ю": {
|
||||
"а": "ꙓ",
|
||||
"е": "ё",
|
||||
"м": "ѭ",
|
||||
"н": "ѩ",
|
||||
"ч": "combining_grave"
|
||||
},
|
||||
"я": {
|
||||
"ь": "ꙝ"
|
||||
},
|
||||
"і": {
|
||||
"\"": "ї",
|
||||
".": "ї",
|
||||
"у": "ѵ",
|
||||
"і": "ӣ"
|
||||
},
|
||||
"ј": {
|
||||
"а": "ꙗ",
|
||||
"ч": "combining_breve",
|
||||
"ѣ": "ꙝ"
|
||||
},
|
||||
"ѡ": {
|
||||
"т": "ѿ"
|
||||
},
|
||||
"ѧ": {
|
||||
"ч": "combining_vzmet"
|
||||
}
|
||||
}
|
@ -4016,7 +4016,7 @@ XCOMM Mathematical Operators
|
||||
<Multi_key> <U2225> <slash> : "∦" U2226 # NOT PARALLEL TO
|
||||
<Multi_key> <U223C> <slash> : "≁" U2241 # NOT TILDE
|
||||
<Multi_key> <U2243> <slash> : "≄" U2244 # NOT ASYMPTOTICALLY EQUAL TO
|
||||
<Multi_key> <approximate> <slash> : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
|
||||
XCOMM <Multi_key> <approximate> <slash> : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
|
||||
<Multi_key> <U2248> <slash> : "≉" U2249 # NOT ALMOST EQUAL TO
|
||||
<Multi_key> <slash> <equal> : "≠" U2260 # NOT EQUAL TO
|
||||
<Multi_key> <equal> <slash> : "≠" U2260 # NOT EQUAL TO
|
11
srcs/compose/compose/extra.json
Normal file
11
srcs/compose/compose/extra.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"V": {
|
||||
"s": "Š",
|
||||
"c": "Č",
|
||||
"z": "Ž"
|
||||
},
|
||||
"\\": {
|
||||
"n": "\\n",
|
||||
"t": "\\t"
|
||||
}
|
||||
}
|
2037
srcs/compose/compose/keysymdef.h
Normal file
2037
srcs/compose/compose/keysymdef.h
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user