41 Commits
Author SHA1 Message Date
Jules Aguillon c0a4bca8e2 Fix compose-space sequences not working (#1352)
* Add tests

* Fix compose-space sequences not working

KeyModifier didn't pass editing keys to ComposeKey.

* Cleanup test code

* Show the nbsp symbol when typing compose-space-space
2026-07-04 23:04:34 +02:00
Jules Aguillon c6774196ea Add more symbols to superscript and small_caps (#1198)
* Add more symbols to accent_syperscript
* Add all uppercase and lowercase variants to accent_small_caps
* Use ʁ instead of ᴚ in accent_small_caps
2026-04-18 16:18:13 +02:00
Jules Aguillon 833b4a2154 Better suggestion with diacritics (#1223)
* Update cdict

* scripts/subst_of_compose.py: Compute substitutions

from compose mappings. They are used when building dictionaries.

* Add substitutions compose data

* Better suggestion with diacritics

This improves the suggestions for words that contain diacritics and
uppercase letters.

This works by stripping diacritics both when building the dictionaries
(using word aliases added in cdict: https://github.com/Julow/cdict/pull/3)
and during lookup. Cdict then takes care of resolving the correct word.

The substitutions are generated using mappings from `fn`, `shift` and
all the `accent_*` modifiers into srcs/compose/substitutions.json
This can be updated easily when more mappings are added.
2026-04-10 19:08:23 +02:00
dzaima 164c8732c0 Add missing alphabet + ~ compose sequences (#1194) 2026-02-25 23:55:31 +01:00
Jules Aguillon c669a755a6 Add the small capital letters dead key (#1156)
* Add the small capital letters dead key

It can be added to the keyboard from the settings or into custom layouts
as `accent_small_caps`.

Add all the symbols listed on https://en.wikipedia.org/wiki/Small_caps
2026-01-18 21:57:17 +01:00
Jules Aguillon ac498d4ee9 Update ComposeKeyData.java
Missing from previous commit.
2025-11-01 23:24:34 +01:00
Harry-Ais0 fad74bb123 Add compose sequences for ꜩ Ꜩ (#1058) 2025-07-22 22:02:55 +02:00
Anastázius Kaejatídarján 43dd3a2818 Added Majuscules to the Cyrillic Compose Sequences (#1042)
* add majuscules to compose
* add tse to compose
* added reverse ya FN to modernize it FROM the older form
* fix accent FN and add reverse arabic-heh FN
* little improvements and additions
* QoL improvements for Kurdish Sorani
2025-07-19 17:54:57 +02:00
Jules Aguillon 42fa47459c Promote ComposeKeyData.java 2025-07-02 00:30:58 +02:00
tenextractor 536b8d1f67 Add icelandic layout (#999) 2025-05-25 16:44:50 +02:00
Jules Aguillon a7312054b5 compose: Add compose+A+e as compose+A+E and many others
compile.py is changed to report when compose+Upper+Upper exists but
compse+Upper+Lower do not.

With these findings, many sequences are added.
2025-05-16 00:59:35 +02:00
Jules Aguillon d6dfb5c18c Add compose sequences for n͠g, N͠g and g̃ 2025-04-19 15:10:07 +02:00
dzaima 2b978dd2e0 APL and BQN layouts (#899)
* Add compact BQN layout

* Add compact APL layout
2025-02-28 00:47:49 +01:00
Jules Aguillon ca25cc55f6 Apply compose sequences to String keys
This is mostly useful for characters that do not fit on a single 16-bit
char.
Shift sequences for 𝕨𝕩𝕗𝕘𝕤 are added for illustration.
2025-02-23 18:00:44 +01:00
Jules Aguillon 12d9e5eaf8 Update Shift mappings for math symbols
Shift is the "not" version of some math operators.
∋ is added to the math layout.
2024-12-29 11:29:58 +01:00
Jagadeeshan S 78974b7453 Tamil layout: Shift and fn changes (#853)
Signed-off-by: Jagadeeshan S <jagadeeshanmsj@gmail.com>
2024-12-29 10:48:43 +01:00
Jagadeeshan S ae50ff2a5c Added tamil layout (#833)
Signed-off-by: Jagadeeshan S <jagadeeshan.s@addverb.com>
2024-12-19 01:05:36 +01:00
Jules Aguillonandnpnpatidar bd2170e04b Add Modern Hindi and Sanskrit shift layer
Co-authored-by: npnpatidar <7de6dkm1@duck.com>
2024-12-19 00:52:22 +01:00
Jules Aguillon 4a429357ef compose: Fix parsing of long sequences from json files
Sequences longer than two characters were not read correctly from json
files, creating conflicts and causing dropped sequences.

The detection of collision in sequences is also improved. Two colliding
sequences are removed.
2024-12-19 00:34:24 +01:00
Jules Aguillon e4a49d5256 Move numpad script maps to the compose system
This removes the Map_char interface, which required a lot of boilerplate
to use.
2024-12-11 11:24:50 +01:00
Zitrone 4eb1f8bd9e Add double grave accent (#779) 2024-12-07 13:16:43 +01:00
Jules Aguillon 30fb50d912 Fix typos in cyrillic compose sequences 2024-12-05 22:47:19 +01:00
Jules AguillonandAnastázius Kaejatídarján de6ee1858b Arabic diacritics (#807)
Add arabic combining diacritics and make them accessible via Fn and Compose combos.

Co-authored-by: Anastázius Kaejatídarján <32847759+anaskaejdar@users.noreply.github.com>
2024-12-05 00:00:51 +01:00
Jules Aguillon 354c0a6f1c compose: Add digits to accent_dot_above 2024-11-16 12:23:25 +01:00
Jules AguillonandAnastazius Kaejatidarjan c4a88e4d5b Update compose sequences for Cyrillic
Mainly add sequences for the combining diacritics.

Co-authored-by: Anastazius Kaejatidarjan <zdarian@asu.edu>
2024-10-05 11:39:11 +02:00
Zitrone 6fae23a432 compose/accent_*.json: improvements (more accents) (#770)
compose/accent_*.json: improve/complete implementation
compose/shift.json: uppercase for superscript letters & characters without preapplied uppercase versions
2024-10-05 11:06:24 +02:00
Jules Aguillon 9f0cf15d2e Add Fn layer and Compose sequences for Cyrillic 2024-09-29 22:47:57 +02:00
Jules Aguillon b61e9db21e compose: Deduplicate end states
Make compose sequences ending in the same character to share the ending
state.
This reduce the compiled compose key data size from 33kB to 27kB.
2024-09-14 15:13:04 +02:00
Jules Aguillon a8e331c322 Define the Shift modifier using the compose mechanism 2024-09-10 22:50:39 +02:00
Jules Aguillon b600332595 Define the Fn modifier using the compose mechanism
This removes 100Kb from the app.
2024-09-10 22:43:40 +02:00
Jules Aguillon c57ae83bfa Compose sequences can end in internal key names
This adds the '\n' and '\t' sequences to showcase the new feature.
2024-09-10 22:16:49 +02:00
Adrian 105a5a2f33 Added supported key for avoiding the pain of auto-caps (#725) 2024-07-27 12:27:05 +02:00
Jules Aguillon 35f35b27be Update ComposeKeyData
Outdated since 6c786f2
2024-07-25 23:23:53 +02:00
Jules Aguillon 2696f42144 Allow extending the compose key (#713)
This allows adding more compose sequences without modifying
en_US_UTF_8_Compose.pre.

This is done by grouping sequences files that should be merged together
into a directory. This also allows moving keysymdef.h into that
directory.
2024-07-21 23:37:07 +02:00
Jules Aguillon 91ace060bc Move diacritics mapping to the compose state machine
This replaces the switch cases in KeyModifier.java with JSON files, one
for each diacritic.

The number of states increases from 6727 to 7377. The apk size slightly
decreases (around 3kb).
2024-06-09 11:53:17 +02:00
Jules Aguillon ecac6a77f8 compose: Compile several starting states
Sequences from several files are no longer merged but compiled to
separate starting states.

The plan is to use that to represent the diacritics.
2024-06-09 11:52:17 +02:00
Jules Aguillon a886f6eede compose: Fix misbehaving due to encoding errors
Encoding errors in the compose data compiler due to:
- 'UTF-16' adds a BOM, use 'UTF-16-LE' instead
- 'str.encode' returns a byte array, use 'array' to have a 16-bit char
  array.
2024-06-09 10:35:38 +02:00
Jules Aguillon cf1aaa3bdf Add compose sequences for Greek, Cyrillic, Hebrew and more
Parse key names from keysymdef.h, which is distributed with Xorg. The
Greek, Cyrillic and Hebrew sequences referenced these keysyms.

This increases the number of sequences from 2043 to 2668.
2024-05-29 15:56:08 +02:00
Jules Aguillon 39b3f50aa3 Allow compose sequence ending with more symbols
Change the compose state machine definition to allow final states that
are wider than 16-bits.

This increases the number of sequences that can be used from
en_US_UTF_8_Compose.pre from 2013 to 2043 (of 3201).
2024-05-29 15:02:08 +02:00
Jules Aguillon 63e7ac2e94 compose: Add X11 compose sequences
compile.py implements a parser for X11's Compose.pre files. A lot of
code is necessary to interpret character names but thanksfully, the name
of most characters is contained in the file.

The state machine is compiled into two char arrays which unfortunately
requires an expensive initialisation and allocation.
2024-02-17 23:28:31 +01:00
Jules Aguillon 8c29073260 Compose key
The COMPOSE_PENDING modifier indicate whether a compose sequence is in
progress. The new key of kind Compose_pending sets the current state of
the sequence.

The compose sequences are compiled into a state machine by a python
script into a compact encoding.

The state of the pending compose is determined by the index of a state.
2024-02-17 23:28:31 +01:00