From 286bd8b6f17beb77829c7fabcb8e7b1c48b734e3 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sat, 14 Nov 2020 15:37:02 +0100 Subject: render: Add Klavaro keyboard file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #8, although Klavaro’s support for diacritics seems to be lacking right now. --- gen.sh | 7 +++++++ lulua/data/report/index.html | 4 ++++ lulua/render.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/gen.sh b/gen.sh index f02a89c..47d01ea 100755 --- a/gen.sh +++ b/gen.sh @@ -120,6 +120,9 @@ rule zipR rule render-winkbd command = lulua-render -l ar-lulua winkbd \$out +rule render-klavaro + command = lulua-render -l ar-lulua klavaro \$out + rule ninjaC command = ninja -C \$dir @@ -141,6 +144,10 @@ build \$reportdir/fonts/IBMPlexSansArabic-Thin.woff2: cp \$fontdir/IBMPlexSansAr # build osmconvert build \$osmconvert: configure-make 3rdparty/osmctools +# Klavaro keyboard +build \$reportdir/lulua_ar.kbd: render-klavaro || \$reportdir + layout = ${l} + # windows drivers build \$tempdir/winkbd: mkdir lulua/data/winkbd EOF diff --git a/lulua/data/report/index.html b/lulua/data/report/index.html index cae6024..9aa06fd 100644 --- a/lulua/data/report/index.html +++ b/lulua/data/report/index.html @@ -96,6 +96,10 @@ Arabic for AnySoftKeyboard
Linux
Run: xmodmap ar-lulua.xmodmap
+
Klavaro
+
A touch typing tutor. Copy the custom + keyboard to ~/.config/klavaro/ (Linux), select + Keyboard → (Custom), then lulua_ar.
diff --git a/lulua/render.py b/lulua/render.py index 08bc9bc..41a6bd5 100644 --- a/lulua/render.py +++ b/lulua/render.py @@ -551,6 +551,35 @@ def renderKeylayout (args): fd.write (decl) fd.write (ET.tostring (docroot, encoding='utf-8')) +def renderKlavaro (args): + keyboard = defaultKeyboards[args.keyboard] + layout = defaultLayouts[args.layout].specialize (keyboard) + + layers = [[], []] + + for l, r in keyboard: + # exclude special buttons + buttons = list (filter (lambda x: isinstance (x, LetterButton), chain (l, r))) + if not buttons: + continue + + for btn in buttons: + # cannot process multiple characters per button, thus find a + # composed version (NFC) if possible + buttonText = [unicodedata.normalize ('NFC', x) if x is not None else '' for x in layout.getButtonText (btn)] + + # only two layers supported + for i in (0, 1): + # empty buttons must be spaces + layers[i].append (buttonText[i] or ' ') + for i in (0, 1): + layers[i].append ('\n') + + with open (args.output, 'w') as fd: + for l in layers: + fd.write (''.join (l).strip ('\n')) + fd.write ('\n') + def yamlload (s): try: with open (s) as fd: @@ -587,6 +616,8 @@ def render (): sp.set_defaults (func=renderWinKbd) sp = subparsers.add_parser('keylayout') sp.set_defaults (func=renderKeylayout) + sp = subparsers.add_parser('klavaro') + sp.set_defaults (func=renderKlavaro) parser.add_argument('output', metavar='FILE', help='Output file') logging.basicConfig (level=logging.INFO) -- cgit v1.2.3