Skip to content

لُؤْلُؤَة هي لوحة مفاتيح

License

Notifications You must be signed in to change notification settings

PromyLOPh/lulua

Repository files navigation

لؤلؤة

Ergonomic Arabic Keyboard layout. See website for details.

Creating layouts

Although optimized for the Arabic language it should be possible to create layouts for other (non-RTL) languages as well. Here’s how to proceed: First, create a data file my-layout.yaml that contains all key to character mappings the new layout should have. Look at lulua/data/layouts for examples. Then create statistics for your corpus. For plain-text files use:

cat corpus.txt \
    | lulua-write my-layout.yaml file text \
    | lulua-analyze combine \
    > stats.pickle

Now you can optimize your layout using:

lulua-optimize -n 30000 --triad-limit=30000 -r -l my-layout.yaml \
    < stats.pickle \
    > evolved.yaml

To get a pretty picture (SVG) of your layout render it:

lulua-render -l evolved.yaml svg evolved.svg

It is highly recommended to use PyPy 3 instead of CPython and a powerful machine with lots of RAM (at least 16 GB).

Building documentation

This essentially means building the website and reproducing my results. You’ll need to obtain the corpora from me, which are not public due to copyright issues. Also the following software is required:

  • Python/PyPy 3
  • Ninja (for the build process)
  • GNU autotools and a host C compiler (for 3rdparty/osmctools)
  • GNU bash and zip (for makezip.sh)
  • librsvg (rsvg-convert is used to create PDF’s from SVG images)
  • MinGW (to compile the Windows keyboard driver)

Then simply run

./gen.sh > build.ninja && ninja

to run the analysis and create pretty pictures as well as statistics in _build/report.

Acknowledgements

This software is using an extended version of carpalx by Martin Krzywinski for optimizing layouts.