From ecac6a77f8954269b76ecbf5c6fa7f5fda65242f Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sun, 9 Jun 2024 11:10:20 +0200 Subject: [PATCH] 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. --- srcs/compose/compile.py | 35 +++++++++++++++++------ srcs/juloo.keyboard2/ComposeKeyData.java | Bin 73274 -> 73338 bytes srcs/juloo.keyboard2/KeyValue.java | 2 +- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/srcs/compose/compile.py b/srcs/compose/compile.py index 14dc410..74fee79 100644 --- a/srcs/compose/compile.py +++ b/srcs/compose/compile.py @@ -1,6 +1,14 @@ import textwrap, sys, re, string, json, os from array import array +# 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. @@ -122,7 +130,7 @@ def add_sequences_to_trie(seqs, trie): add_seq_to_trie(trie, seq, result) # Compile the trie into a state machine. -def make_automata(tree_root): +def make_automata(tries): states = [] def add_tree(t): # Index and size of the new node @@ -155,8 +163,12 @@ def make_automata(tree_root): add_leaf(n) else: add_tree(n) - add_tree(tree_root) - return states + states.append((1, 1)) # Add an empty state at the beginning. + entry_states = {} + for tname, tree_root in tries.items(): + entry_states[tname] = len(states) + add_tree(tree_root) + return entry_states, states # Debug def print_automata(automata): @@ -176,7 +188,7 @@ 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. @@ -201,6 +213,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]. */ @@ -212,19 +227,23 @@ 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 = {} +tries = {} # Orderred dict for fname in sys.argv[1:]: + tname, _ = os.path.splitext(os.path.basename(fname)) sequences = parse_sequences_file(fname) - add_sequences_to_trie(sequences, trie) + 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) diff --git a/srcs/juloo.keyboard2/ComposeKeyData.java b/srcs/juloo.keyboard2/ComposeKeyData.java index 9bb420a9cf522c5333bd322b51edbce3cf29fbb6..443b3ce76f274feeff270c5b3a6ab9af8b3c4389 100644 GIT binary patch delta 17324 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 delta 17609 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 Jn0Niye*rNUGa~>1 diff --git a/srcs/juloo.keyboard2/KeyValue.java b/srcs/juloo.keyboard2/KeyValue.java index bb83623..1635bab 100644 --- a/srcs/juloo.keyboard2/KeyValue.java +++ b/srcs/juloo.keyboard2/KeyValue.java @@ -565,7 +565,7 @@ public final class KeyValue implements Comparable case "autofill": return editingKey("auto", Editing.AUTOFILL); /* The compose key */ - case "compose": return makeComposePending(0xE016, 0, FLAG_SECONDARY | FLAG_SMALLER_FONT | FLAG_SPECIAL); + case "compose": return makeComposePending(0xE016, ComposeKeyData.en_US_UTF_8_Compose, FLAG_SECONDARY | FLAG_SMALLER_FONT | FLAG_SPECIAL); /* Placeholder keys */ case "removed": return placeholderKey(Placeholder.REMOVED);