Javanese Script Easy Keyboard - Nulisa Aksara Jawa

# Table of Content

1. Nulisa Aksara Jawa keyboard shortcuts
2. Typing tests and input samples
3. Usage Notes
4. Development Notes
5. Change History

## Welcome! ꧁ꦱꦸꦒꦼꦁꦫ‌ꦮꦸꦃ‌ꦲꦶꦁꦤꦸꦭꦶꦱ꧀ꦱ‌ꦄꦏ꧀ꦱꦫꦗꦮ꧂

Thank you for using this keyboard. This keyboard aim to simplify the writing of Javanese script (I will write it as Js for the rest of the document). Nowadays Javanese speakers do not write (nor type) much in this script anymore, largely because the writing system has been supplanted by Latin script.

The current Js keyboard layouts that exist in the world require people to memorize an arbitrary placement of characters (for example the default Javanese keyboard layout in Win 10), since there are more than 26 letters/characters in Js.

This keyboard aim to simplify that by requiring user to memorize only very small amount of placement, and user can type naturally just like they type in Latin script. The users are only required, at minimal, to remember that the letter 'x' is mapped to 'ě' (pěpět) or schwa sound (IPA: /ə/).

Technically, this is achieved by making the software to be smart enough to look the characters typed previously (look-back algorithm) to accomplish this seamlessly.

If you have never tried my web-based Js transliterator, of which this is based from, I suggest you can give it a try here: is.gd/nulisa (url link shortener to my Github page)

How does it work?
Well, to simply put it, if you want to write "aku", just type "a-k-u" and it will give you ꦲꦏꦸ. You don't need to know which button to press for ꦲ, ꦏ‌, or ꦸ. It would work for 95% of the time.
The best part about it? It's language independent (as long as they're 26-letters-Latin based). It means, you can type in any language, e.g. Indonesian, or even English. For example: "rumah", just type "r-u-m-a-h" to get ꦫꦸꦩꦃ, or "far", just type "f-a-r" to get ꦥ꦳ꦂ.

But... you still need to know how the Js work to be able to get the correct output. Js is phonetic-based writing. It means that you write what you hear, not what is written (in Latin). For example, if I want to write my name, "Benny", I need to first visualize how the it sounds (if you familiar with IPA, think of it as broad-transcription IPA), so I get either "/be-ni/" or "/ben-ni/". Now I would say that both are correct, but I prefer the second one, so I'm typing it as "b-e-n-n-i" to get ꦧꦺꦟꦶ. And this cannot be solved in the software level, because the software couldn't have any idea how a word sounds.

What about the space bar? Js is a scriptio continua script; it doesn't have any space between words. In fact, adding a space between words would make the sentence look bad (it broke the pasangans, among others). Therefore, that long space bar in the bottom of you keyboard is largely unused (what a waste of space :p). If you type space, nothing would happen. But what if you want to force a space? There are two alternatives: regular space, type Ctrl+Space, zero-width space (ZWS), type ` (on the left of number 1 on most keyboard layouts).

With this approach, I believe Nulisa Aksara Jawa is the easiest and most fun way to type Javanese script!

Surakarta, International Mother's Tongue Day 2020,

Benny Lin

## Nulisa Aksara Jawa keyboard shortcuts

ToC: Welcome! | Nulisa Aksara Jawa keyboard shortcuts | Typing tests and input samples | Usage Notes | Development Notes | Change History

The keyboard layout is designed with Indonesian qwerty keyboard layout (equal to American/US-basic layout) as the logic basis. Therefore, even though theoritically it could also work for other keyboard layout (British, German, DVORAK, etc), but no test have been done on those layouts. If you use non-Indonesian keyboard, I would love to hear your feedback!

Please refer to this combination table for the intended output. Don't rely on the On-Screen keyboard, as it has many limitations. If the pressed button doesn't produce the same result as below, please contact the author.

If you type the key on the left, followed by key on top, you'll get the following characters.

→ | a | b | c | d | e | f | g | h | i | j | k | l | m
| ꦲ | ꦧ꧀ | ꦕ꧀ | ꦢ꧀ | ꦲꦺ | ꦥ꦳꧀ | ꦒ꧀ | ꦃ | ꦲꦶ | ꦗ꧀ | ꦏ꧀ | ꦭ꧀ | ꦩ꧀
꧀+ |  | ꧀ꦧ꧀ | ꧀ꦕ꧀ | ꧀ꦢ꧀ | ꦺ | ꧀ꦥ꦳꧀ | ꧀ꦒ꧀ | ꧀ | ꦶ | ꧀ꦗ꧀ | ꧀ꦏ꧀ | ꧀ꦭ꧀ | ꧀ꦩ꧀
→ | n | o | p | q | r | s | t | u | v | w | x=ě | y | z
| ꦤ꧀ | ꦲꦺꦴ | ꦥ꧀ | ꧀ | ꦂ | ꦱ꧀ | ꦠ꧀ | ꦲꦸ | ꦮ꦳꧀ | ꦮ꧀ | ꦲꦼ | ꦪ꧀ | ꦗ꦳꧀
꧀+ | ꧀ꦤ꧀ | ꦺꦴ | ꧀ꦥ꧀ | ꧀ | ꧀ | ꧀ꦱ꧀ | ꧀ꦠ꧀ | ꦸ | ꧀ꦮ꦳꧀ | ꧀ꦮ꧀ | ꦼ | ꧀ꦪ꧀ | ꧀ꦗ꦳꧀

If you type the key on the top, followed by key on left, you'll get the following characters.

#### Aksara Nglegena & Sandhangan

↓ | a | b | c | d | e | f | g | h | i | j | k | l | m
+a | ꦲꦴ | ꦧ | ꦕ | ꦢ | ꦲꦺꦪ | ꦥ꦳ | ꦒ | ꦲ | ꦲꦶꦪ | ꦗ | ꦏ | ꦭ | ꦩ
+e | ꦲꦲꦺ | ꦧꦺ | ꦕꦺ | ꦢꦺ | ꦲꦺꦲꦺ | ꦥ꦳ꦺ | ꦒꦺ | ꦲꦺ | ꦲꦶꦪꦺ | ꦗꦺ | ꦏꦺ | ꦭꦺ | ꦩꦺ
+i | ꦲꦻ | ꦧꦶ | ꦕꦶ | ꦢꦶ | ꦲꦺꦪꦶ | ꦥ꦳ꦶ | ꦒꦶ | ꦲꦶ | ꦲꦷ | ꦗꦶ | ꦏꦶ | ꦭꦶ | ꦩꦶ
+o | ꦲꦲꦺꦴ | ꦧꦺꦴ | ꦕꦺꦴ | ꦢꦺꦴ | ꦲꦺꦪꦺꦴ | ꦥ꦳ꦺꦴ | ꦒꦺꦴ | ꦲꦺꦴ | ꦲꦶꦪꦺꦴ | ꦗꦺꦴ | ꦏꦺꦴ | ꦭꦺꦴ | ꦩꦺꦴ
+u | ꦲꦻꦴ | ꦧꦸ | ꦕꦸ | ꦢꦸ | ꦲꦺꦵ | ꦥ꦳ꦸ | ꦒꦸ | ꦲꦸ | ꦲꦶꦪꦸ | ꦗꦸ | ꦏꦸ | ꦭꦸ | ꦩꦸ
+x=ě | ꦲꦲꦼ | ꦧꦼ | ꦕꦼ | ꦢꦼ | ꦲꦺꦲꦼ | ꦥ꦳ꦼ | ꦒꦼ | ꦲꦼ | ꦲꦶꦪꦼ | ꦗꦼ | ꦏꦼ | ꦊ | ꦩꦼ
+h | ꦲꦃ | ꦨ꧀ | ꦖ꧀ | ꦝ꧀ | ꦲꦺꦃ | ꦥ꦳꧀ꦃ | ꦓ꧀ | ꦃꦲ꧀ | ꦲꦶꦃ | ꦙ꧀ | ꦑ꧀ | ꦭ꧀ꦃ | ꦩ꧀ꦃ
+r | ꦲꦂ | ꦧꦿ꧀ | ꦕꦿ꧀ | ꦢꦿ꧀ | ꦲꦺꦂ | ꦥ꦳ꦿ꧀ | ꦒꦿ꧀ | ꦲꦿ꧀ | ꦲꦶꦂ | ꦗꦿ꧀ | ꦏꦿ꧀ | ꦭꦿ꧀ | ꦩꦿ꧀
+y | ꦲꦪ꧀ | ꦧꦾ꧀ | ꦕꦾ꧀ | ꦢꦾ꧀ | ꦲꦺꦪ꧀ | ꦥ꦳ꦾ꧀ | ꦒꦾ꧀ | ꦲꦾ꧀ | ꦲꦶꦪ꧀ | ꦗꦾ꧀ | ꦏꦾ꧀ | ꦭꦾ꧀ | ꦩꦾ꧀
↓ | n | o | p | q | r | s | t | u | v | w | x=ě | y | z
+a | ꦤ | ꦲꦺꦴꦮ | ꦥ |  | ꦫ | ꦱ | ꦠ | ꦲꦸꦮ | ꦮ꦳ | ꦮ | ꦲꦼꦲ | ꦪ | ꦗ꦳
+e | ꦤꦺ | ꦲꦺꦴꦮꦺ | ꦥꦺ | ꦺ | ꦫꦺ | ꦱꦺ | ꦠꦺ | ꦲꦸꦮꦺ | ꦮ꦳ꦺ | ꦮꦺ | ꦲꦼꦲꦺ | ꦪꦺ | ꦗ꦳ꦺ
+i | ꦤꦶ | ꦲꦺꦴꦮꦶ | ꦥꦶ | ꦶ | ꦫꦶ | ꦱꦶ | ꦠꦶ | ꦲꦸꦮꦶ | ꦮ꦳ꦶ | ꦮꦶ | ꦲꦼꦲꦶ | ꦪꦶ | ꦗ꦳ꦶ
+o | ꦤꦺꦴ | ꦲꦺꦴꦲꦺꦴ | ꦥꦺꦴ | ꦺꦴ | ꦫꦺꦴ | ꦱꦺꦴ | ꦠꦺꦴ | ꦲꦸꦮꦺꦴ | ꦮ꦳ꦺꦴ | ꦮꦺꦴ | ꦲꦼꦲꦺꦴ | ꦪꦺꦴ | ꦗ꦳ꦺꦴ
+u | ꦤꦸ | ꦲꦺꦴꦮꦸ | ꦥꦸ | ꦸ | ꦫꦸ | ꦱꦸ | ꦠꦸ | ꦲꦹ | ꦮ꦳ꦸ | ꦮꦸ | ꦲꦼꦲꦸ | ꦪꦸ | ꦗ꦳ꦸ
+x=ě | ꦤꦼ | ꦲꦺꦴꦮꦼ | ꦥꦼ | ꦼ | ꦉ | ꦱꦼ | ꦠꦼ | ꦲꦸꦮꦼ | ꦮ꦳ꦼ | ꦮꦼ | ꦲꦼꦲꦼ | ꦪꦼ | ꦗ꦳ꦼ
+h | ꦟ꧀ | ꦲꦺꦴꦃ | ꦦ꧀ | ꧀ꦃ | ꦂꦲ꧀ | ꦯ꧀ | ꦛ꧀ | ꦲꦸꦃ | ꦮ꦳꧀ꦃ | ꦮ꧀ꦃ | ꦲꦼꦃ | ꦪ꧀ꦃ | ꦗ꦳꧀ꦃ
+r | ꦤꦿ꧀ | ꦲꦺꦴꦂ | ꦥꦿ꧀ | ꧀ꦂ | ꦂꦫ꧀ | ꦱꦿ꧀ | ꦠꦿ꧀ | ꦲꦸꦂ | ꦮ꦳ꦿ꧀ | ꦮꦿ꧀ | ꦲꦼꦂ | ꦪꦿ꧀ | ꦗ꦳ꦿ꧀
+y | ꦚ꧀ | ꦲꦺꦴꦪ꧀ | ꦥꦾ꧀ | ꧀ꦪ꧀ | ꦂꦪ꧀ | ꦱꦾ꧀ | ꦠꦾ꧀ | ꦲꦸꦪ꧀ | ꦮ꦳ꦾ꧀ | ꦮꦾ꧀ | ꦲꦼꦪ꧀ | ꦪꦾ꧀ | ꦗ꦳ꦾ꧀

#### Aksara Swara and Murda

→ | A | B | C | D | E | F | G | H | I | J | K | L | M
| ꦄ | ꦨ꧀ | ꦖ꧀ | ꦣ꧀ | ꦌ | ꦥ꦳꧀ | ꦓ꧀ | ꦃ | ꦆ | ꦙ꧀ | ꦑ꧀ | ꦭ꧀ | ꦩ꧀
꧀+ | ꧀ꦄ | ꧀ꦨ꧀ | ꧀ꦖ꧀ | ꧀ꦣ꧀ | ꧀ꦌ | ꧀ꦥ꦳꧀ | ꧀ꦓ꧀ | ꧀ | ꧀ꦆ | ꧀ꦙ꧀ | ꧀ꦑ꧀ | ꧀ꦭ꧀ | ꧀ꦩ꧀
→ | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
| ꦟ꧀ | ꦎ | ꦦ꧀ | ꦐ꧀ | ꦂ | ꦯ꧀ | ꦡ꧀ | ꦈ | ꦮ꦳꧀ | ꦮ꧀ | ꦄꦼ | ꦁ | ꦰ꧀
꧀+ | ꧀ꦟ꧀ | ꧀ꦎ | ꧀ꦦ꧀ | ꧀ꦐ꧀ | ꧀ | ꧀ꦯ꧀ | ꧀ꦡ꧀ | ꧀ꦈ | ꧀ꦮ꦳꧀ | ꧀ꦮ꧀ | ꧀ꦄꦼ | ꧀ | ꧀ꦰ꧀

#### Punctuation and symbols

→ | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | [ | ] | \ | ; | ' | , | . | /
| ZWJ[1] | ꧑ | ꧒ | ꧓ | ꧔ | ꧕ | ꧖ | ꧗ | ꧘ | ꧙ | ꧐ | ꦀ | ꧏ | ꧌ | ꧍ | ꧊ | ꧃ | ꧄ | ꧈ | ꧉ | ꧅
| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ | + | { | } | | | : | " | < | > | ?
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
shift+ | ꦳ | ꦉ | ꦊ | ꦔ | ꦚ | ꦛ | ꦝ | ꦽ | ꦾ | ꦿ | ꦘ | ꦜ | ꦘ | ꧁ | ꧂ | ꧋ | ꧇ | ꧆ | ꧞ | ꧟ | [2]
alt+ |  | ꦳ | ꦴ | ꦵ | ꦷ | ꦹ | ꦻ | ꦽ | ꦾ | ꦿ | ꦼ |  |  |  |  |  |  |  |  |  |
(ketik) | ? | ?? | ?x3 | ?x4 | ?x5 | ?x6 |  |  |  |  |  |  |  |  |  |  |  |  |  |

[1] ZWJ = Zero-Width Joiner

[2] The question mark sign (?) is a switcher (rotation). Type it multiple times to go through the 5 long vowels (sandhangan)

Hidden features. They're still in testing mode, and may change in the future.

- SHIFT+SPACE: Normal space
- CTRL+SPACE: Normal space

#### How to write down:

This is the inverse table of the tables above. You can get the output displayed on the top row (white) by typing the letters on the lower row (grey). There might be more than one way to type a character.

These are based on the complete list of Javanese Unicode block. So this table shows that you are able to write any Javanese character using this keyboard.

ꦄ | ꦅ | ꦆ | ꦇ | ꦈ | ꦉ | ꦊ | ꦋ | ꦌ | ꦍ | ꦎ | ꦏ | ꦐ | ꦑ | ꦒ | ꦓ | ꦔ
A | II | I | Ii | O | rx | lx | lxu | E | Ai | O | ka | Qa | Ka | ga | Ga | nga
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
|  |  |  |  | ! | @ |  |  |  |  |  |  | kha |  | gha | #
ꦕ | ꦖ | ꦗ | ꦘ | ꦙ | ꦚ | ꦛ | ꦜ | ꦝ | ꦞ | ꦟ | ꦠ | ꦡ | ꦢ | ꦣ | ꦤ |
ca | Ca | ja | jnya | Ja | nya | tha | Tha | dha | Dha | Na | ta | Ta | da | Da | na |
| cha |  | ) | jha | $ | % | ) | ^ | + |  |  |  |  |  |  |
ꦥ | ꦦ | ꦧ | ꦨ | ꦩ | ꦪ | ꦫ | ꦬ | ꦭ | ꦮ | ꦯ | ꦰ | ꦱ | ꦲ | ꦲ꦳ |  |
pa | Pa | ba | Ba | ma | ya | ra | RRa | la | wa | Sa | Za | sa | ha | ẖa~ |  |
|  | pha |  | bha |  |  |  |  |  |  | sha |  |  | ẖa? |  |
ꦁ | ꦂ | ꦃ | ꦳ | ꦴ | ꦵ | ꦶ | ꦷ | ꦸ | ꦹ | ꦺ | ꦻ | ꦼ | ꦽ | ꦾ | ꦿ | ꧀
ng | r | h | ALT+1 or ~ | ALT+2 or ?? | ALT+3 or ?x3 | qi | ALT+4 or ?x4 | qu | ALT+5 or ?x5 | qe | ALT+6 or ?x6 | qx or ) | ALT+7 or & | ALT+8 or * | ALT+9 or ( | q
ꦥꦁ | ꦥꦂ | ꦥꦃ | ꦥ꦳ | ꦥꦴ | ꦥꦵ | ꦥꦶ | ꦥꦷ | ꦥꦸ | ꦥꦹ | ꦥꦺ | ꦥꦻ | ꦥꦼ | ꦥꦽ | ꦥꦾ | ꦥꦿ | ꦥ꧀
pang | par | pah | fa | paa | * | pi | pii | pu | puu | pe | pai | px | prx | pya | pra | p
ꦀ | ꧁ | ꧂ | ꧃ | ꧄ | ꧅ | ꧆ | ꧇ | ꧈ | ꧉ | ꧊ | ꧋ | ꧌ | ꧍ | ꧏ | ꧞ | ꧟
- | { | } | ; | ' | / | " | : | , | . | \ | | | [ | ] | = | < | >
ꦎꦀ | ꧐ | ꧑ | ꧒ | ꧓ | ꧔ | ꧕ | ꧖ | ꧗ | ꧘ | ꧙
O- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

- To type ꦥ+ꦵ (tolong), type 'pa' then ALT+3, or 'p???' (3x question marks)
- To type ꦫꦼ, type 'ra' then ALT+0, or 'raqx'
- To type ꦭꦼ, type 'la' then ALT+0, or 'qx', left arrow, 'l', 'backspace' (a little bit complex)
- To type ꦎꦴꦀ auṁ, type 'Au' then ALT+2, or 'Au', space, '-', left arrow, backspace
- To type ꦉꦴ (long ꦉ), type 'rxu'

## Typing tests and input samples

ToC: Welcome! | Nulisa Aksara Jawa keyboard shortcuts | Typing tests and input samples | Usage Notes | Development Notes | Change History

These are some sample text and how you can achive the output. These are the intended input and output. If you tried them and they mismatch, please inform the author.

If you have a better example, I would also like to know, so I can add them here.

These are mostly in modern Javanese language. But I also include some example of old Javanese. For non-Javanese language, theoretically they can also be typed, phonetically, using the keyboard.

Latin | jer basuki mawa béa
--- | ---
Aksara | ꦗꦼꦂꦧꦱꦸꦏꦶꦩꦮꦧꦺꦪ
Karakter | ꦗ+ꦼ+ꦂ+ꦧ+ꦱ+ꦸ+ꦏ+ꦶ+ꦩ+ꦮ+ꦧ+ꦺ+ꦪ
Input | [j] [x] [r] [ba] [s] [u] [k] [i] [ma] [wa] [b] [e] [a]
Latin | lambé biru kecu
Aksara | ꦭꦩ꧀ꦧꦺꦧꦶꦫꦸꦏꦼꦕꦸ
Karakter | ꦭ+ꦩ+꧀+ꦧ+ꦺ+ꦧ+ꦶ+ꦫ+ꦸ+ꦏ+ꦼ+ꦕ+ꦸ
Input | [la] [m] [b] [e] [b] [i] [r] [u] [k] [x] [c] [u]
Latin | flamboyan wungu
Aksara | ꦥ꦳꧀ꦭꦩ꧀ꦧꦺꦴꦪꦤ꧀ꦮꦸꦔꦸ
Karakter | ꦥ+꦳+꧀+ꦭ+ꦩ+꧀+ꦧ+ꦺ+ꦴ+ꦪ+ꦤ+꧀+ꦮ+ꦸ+ꦔ+ꦸ
Input | [f] [la] [m] [b] [o] [ya] [n] [w] [u] [ng] [u]
Latin | mangan krupuk lan klepon
Aksara | ꦩꦔꦤ꧀ꦏꦿꦸꦥꦸꦏ꧀ꦭꦤ꧀‌ꦏ꧀ꦊꦥꦺꦴꦤ꧀
Karakter | ꦩ+ꦔ+ꦤ+꧀+ꦏ+ꦿ+ꦸ+ꦥ+ꦸ+ꦏ+꧀+ꦭ+ꦤ+꧀+‌+ꦏ+꧀+ꦊ+ꦥ+ꦺ+ꦴ+ꦤ+꧀
Input | [ma] [nga] [n] [k] [r] [u] [p] [u] [k] [la] [n] [k] [l] [x] [p] [o] [n]
Latin | cumplung kecemplung jumbleng
Aksara | ꦕꦸꦩ꧀‌ꦥ꧀ꦭꦸꦁꦏꦼꦕꦼꦩ꧀‌ꦥ꧀ꦭꦸꦁꦗꦸꦩ꧀‌ꦧ꧀ꦊꦁ
Karakter | ꦕ+ꦸ+ꦩ+꧀+‌+ꦥ+꧀+ꦭ+ꦸ+ꦁ+ꦏ+ꦼ+ꦕ+ꦼ+ꦩ+꧀+‌+ꦥ+꧀+ꦭ+ꦸ+ꦁ+ꦗ+ꦸ+ꦩ+꧀+‌+ꦧ+꧀+ꦊ+ꦁ
Input | [c] [u] [m] [p] [l] [u] [ng] [k] [x] [c] [x] [m] [p] [l] [u] [ng] [j] [u] [m] [b] [l] [x] [ng]
Latin | konferènsi Asia Afrika
Aksara | ꦏꦺꦴꦤ꧀ꦥ꦳ꦼꦫꦺꦤ꧀ꦱꦶꦪꦱꦶꦪꦃꦄꦥ꦳ꦿꦶꦏꦃ
Karakter | ꦏ+ꦺ+ꦴ+ꦤ+꧀+ꦥ+꦳+ꦼ+ꦫ+ꦺ+ꦤ+꧀+ꦱ+ꦶ+ꦪ+ꦱ+ꦶ+ꦪ+ꦃ+ꦄ+ꦥ+꦳+ꦿ+ꦶ+ꦏ+ꦃ
Input | [k] [o] [n] [f] [x] [r] [e] [n] [s] [i] [A] [s] [i] [a] [h] [A] [f] [r] [i] [ka] [h]
Latin | Sumantri liwat kreteg
Aksara | ꦱꦸꦩꦤ꧀ꦠꦿꦶꦭꦶꦮꦠ꧀ꦏꦽꦠꦼꦒ꧀
Karakter | ꦱ+ꦸ+ꦩ+ꦤ+꧀+ꦠ+ꦿ+ꦶ+ꦭ+ꦶ+ꦮ+ꦠ+꧀+ꦏ+ꦽ+ꦠ+ꦼ+ꦒ+꧀
Input | [s] [u] [ma] [n] [t] [r] [i] [l] [i] [wa] [t] [k] [rx] [t] [x] [g]
Latin | isor bréngos nyakil mrongos
Aksara | ꦲꦶꦱꦺꦴꦂꦧꦿꦺꦔꦺꦴꦱ꧀ꦚꦏꦶꦭ꧀ꦩꦿꦺꦴꦔꦺꦴꦱ꧀
Karakter | ꦲ+ꦶ+ꦱ+ꦺ+ꦴ+ꦂ+ꦧ+ꦿ+ꦺ+ꦔ+ꦺ+ꦴ+ꦱ+꧀+ꦚ+ꦏ+ꦶ+ꦭ+꧀+ꦩ+ꦿ+ꦺ+ꦴ+ꦔ+ꦺ+ꦴ+ꦱ+꧀
Input | [i] [s] [o] [r] [b] [r] [e] [ng] [o] [s] [nya] [k] [i] [l] [m] [r] [o] [ng] [o] [s]
Latin | waiḍūryyāmaranīla
Aksara | ꦮꦻꦝꦹꦂꦪꦾꦴꦩꦫꦤꦷꦭ
Karakter | ꦮ+ꦻ+ꦝ+ꦹ+ꦂ+ꦪ+ꦾ+ꦴ+ꦩ+ꦫ+ꦤ+ꦷ+ꦭ
Input | [wa] [i] [dh] [u] [u] [r] [y] [ya] [a] [ma] [ra] [n] [i] [i] [la]
Latin | narāryya kṛṣṇān laku
Aksara | ꦤꦫꦴꦂꦪꦾꦏꦽꦰ꧀ꦟꦴꦤ꧀ꦭꦏꦸ
Karakter | ꦤ+ꦫ+ꦴ+ꦂ+ꦪ+ꦾ+ꦏ+ꦽ+ꦰ+꧀+ꦟ+ꦲ+ꦤ+꧀+ꦭ+ꦏ+ꦸ
Input | [na] [ra] [a] [r] [y] [ya] [k] [rx] [Z] [Na] [a] [n] [la] [k] [u]
Latin | sākṣāt sěkar ning suji
Aksara | ꦱꦴꦏ꧀ꦰꦴꦠ꧀ꦱꦼꦏꦂꦤꦶꦁꦱꦸꦗꦶ
Karakter | ꦱ+ꦴ+ꦏ+꧀+ꦰ+ꦲ+ꦠ+꧀+ꦱ+ꦼ+ꦏ+ꦂ+ꦤ+ꦶ+ꦁ+ꦱ+ꦸ+ꦗ+ꦶ
Input | [sa] [a] [k] [Za] [a] [t] [s] [x] [ka] [r] [n] [i] [ng] [s] [u] [j] [i]
Latin | jalesveva jayamahe
Aksara | ꦗꦭꦺꦱ꧀ꦮꦺꦮꦗꦪꦩꦲꦺ
Karakter | ꦗ+ꦭ+ꦺ+ꦱ+꧀+ꦮ+ꦺ+ꦮ+ꦗ+ꦪ+ꦩ+ꦲ+ꦺ
Input | [ja] [l] [e] [s] [w] [e] [wa] [ja] [ya] [ma] [h] [e]
Latin | vṛkṣau gacchāmi ca phalāni labhe
Aksara | ꦮꦽꦏ꧀ꦰꦻꦴꦒꦕ꧀ꦖꦩꦶꦕꦦꦭꦴꦤꦶꦭꦨꦺ
Karakter | ꦮ+ꦽ+ꦏ+꧀+ꦰ+‌ꦻꦴ+ꦒ+ꦕ+꧀+ꦖ+ꦩ+ꦶ+ꦕ+ꦦ+ꦭ+ꦴ+ꦤ+ꦶ+ꦭ+ꦨ+ꦺ
Input | [w] [rx] [k] [Za] [u] [ga] [c] [cha] [m] [i] [ca] [pha] [la] [a] [n] [i] [la] [bh] [e]
Latin | bhinneka tunggal ika
Aksara | ꦨꦶꦟꦺꦏꦠꦸꦁꦒꦭ꧀ꦆꦏ
Karakter | ꦨ+ꦶ+ꦟ+ꦺ+ꦏ+ꦠ+ꦸ+ꦁ+ꦒ+ꦭ+꧀+ꦆ+ꦏ
Input | [bh] [i] [nn] [e] [ka] [t] [u] [ng] [ga] [l] [I] [ka]

#### 2.1 Alternate / variant / multiple combinations

Most of the problems can be solved with a space, then after you get the form that you want, delete the space.

- To type 'pasangan ra' (if you don't want 'cakra'), for example in the phrase 'anak raja', type 'anak' as usual, then hard space (SHIFT+SPACE or CTRL+SPACE), then type 'raja' as usual, then remove the space. The same if you want to type 'pasangan ya', (and not 'pengkal'), for example in the phrase 'anak yuyu'. See also akrab (p.3)

  Latin | anak raja (son of king)
  --- | ---
  Aksara (wrong) | ꦲꦤꦏꦿꦗ /ana kraja/
  Aksara (right) | ꦲꦤꦏ꧀ꦫꦗ
  Input | [a] [na] [k] [ ] [ra] [ja] (then delete the [ ])
  Latin | anak remaja (teenager)
  Aksara (wrong) | ꦲꦤꦏꦽꦩꦗ /ana kremaja/
  Aksara (right) | ꦲꦤꦏ꧀ꦉꦩꦗ
  Input | [a] [na] [k] [ ] [re] [ma] [ja] (then delete the [ ])
  Latin | anak yuyu (baby crab)
  Aksara (wrong) | ꦲꦤꦏꦾꦸꦪꦸ /ana kyuyu/
  Aksara (right) | ꦲꦤꦏ꧀ꦪꦸꦪꦸ
  Input | [a] [na] [k] [ ] [y] [u] [y] [u] (then delete the [ ])

- The same if you don't want to type the murda, you can use the same trick.

  Latin | anak ayam (chick)
  --- | ---
  Aksara (wrong) | ꦲꦤꦏꦪꦩ꧀ /ana kayam/ ꦲꦤꦑꦪꦩ꧀ /ana khayam/
  Aksara (right) | ꦲꦤꦏ꧀ꦲꦪꦩ꧀ (anak ayam)
  Input | [a] [na] [k] [ ] [a] [ya] [m] (then delete the [ ])
  Latin | hak-hak (rights)
  Aksara (wrong) | ꦲꦑꦏ꧀ /a khak/
  Aksara (right) | ꦲ꦳ꦏ꧀ꦲ꦳ꦏ꧀ (hak hak)
  Input | [ha] [~] [k] [ ] [ha] [~] [k] (then delete the [ ])
  Latin | latihan nyanyi (practice singing)
  Aksara (wrong) | ꦭꦠꦶꦲꦟꦾꦚꦶ /latihann yanyi/
  Aksara (right) | ꦭꦠꦶꦲꦤ꧀ꦚꦚꦶ
  Input | [la] [t] [i] [ha] [n] [ ] [nya] [ny] [i] (then delete the [ ])

- Or, if you want to separate 'n' with 'y', to not form 'ny' (nya). Sundanese also type 'nya' ꦚ as 'na'+'pengkal' ꦤꦾ

  Latin | mangan yuyu (eating crab)
  --- | ---
  Aksara (wrong) | ꦩꦔꦚꦸꦪꦸ /manga nyuyu/
  Aksara (right) | ꦩꦔꦤ꧀ꦪꦸꦪꦸ
  Input | [ma] [nga] [n] [ ] [y] [u] [y] [u] (then delete the [ ])
  Latin | nyanyi (sing)
  Javanese | ꦚꦚꦶ
  Sundanese | ꦤꦾꦤꦾꦶ
  Input | [na] [(] [na] [(] [q] [i]

- Or, if you don't want the final 'r', 'h', 'ng' to form 'sesigeg' ('layar', 'wignyan', 'cecak'). Compare also dir-ya vs di-rya (p.3)

  Latin | pulo Ryukyu (Ryukyu Island)
  --- | ---
  Aksara (wrong) | ꦥꦸꦭꦺꦴꦂꦪꦸꦏꦾꦸ /pulor yuku/
  Aksara (right) | ꦥꦸꦭꦺꦴꦫꦾꦸꦏꦾꦸ
  Input | [p] [u] [l] [o] [ ] [r] [y] [u] [k] [y] [u] (then delete the [ ])

  (or the opposite)

  Latin | Duryyodhana (a character in Mahabharata)
  --- | ---
  Aksara (wrong) | ꦢꦸꦫꦾ꧀ꦪꦺꦴꦝꦤ *
  Aksara (right) | ꦢꦸꦂ‌ꦪꦾꦺꦴꦝꦤ
  Input | (type as usual) [d] [u] [r] [y] [y] [o] [dha] [na]

  * you should never get this result with Nulisa keyboard
- If you want to form 'cakra' + 'pepet' instead of 'cakra keret', 'ra' + 'pepet' instead of 'pa cerek', and 'la' + 'pepet' instead of 'nga lelet'.

  Latin | (I cannot think of a justified example, so don't do this)
  --- | ---
  With cakra keret (normal) | ꦏꦽꦩꦼꦱ꧀ (kremes)
  With cakra+pepet (abnormal) | ꦏꦿꦼꦩꦼꦱ꧀ (kremes)
  Input | [k] [r] backspace [ ] [qx] [m] [x] [s] (then delete the [ ])
  With cakra keret (normal) | ꦊꦩꦃ (lemah)
  With cakra+pepet (abnormal) | ꦭꦼꦩꦃ (lemah)
  Input | [la] [ ] [qx] [ma] [h] (then delete the [ ])
  With cakra keret (normal) | ꦉꦒ (rega)
  With cakra+pepet (abnormal) | ꦫꦼꦒ (rega)
  Input | [ra] [ ] [qx] [ga] (then delete the [ ])

#### 2.2 Ambiguity

Some combination may result in (visual) ambiguity. Currently the computer know how to read it (because the character codes/order is different), but the human may not. Fortunately the practical usage of these examples are pretty low.

- Ambiguity with "cecak telu".

  [k] [~] [q] [ja] | ꦏ꦳꧀ꦗ = ꦏ ꦳ ꧀ ꦗ
  [k] [za] | ꦏ꧀ꦗ꦳ = ꦏ ꧀ ꦗ ꦳

- "pasangan na + pengkal" and "pasangan nya".

  [k] [n] [*] | ꦏ꧀ꦤꦾ = ꦏ ꧀ ꦤ‌ ꦾ
  [k] [nya] | ꦏ꧀ꦚ = ꦏ ꧀ ꦚ

- Ambiguity between numbers and 'nglegena'. Ambiguity mostly resolved by wrapping the numbers in "꧇" or "꧈"

  [1] [2] [3] [6] [7] [8] [9] [0] | ꧑ ꧒ ꧓ ꧖ ꧗ ꧘ ꧙ ꧐
  [ga] [lx] [ngya] [E] [la] [Pa] [ya] [<]/["] | ꦒ ꦊ ꦔꦾ ꦌ ꦭ ꦦ ꦪ ꧞ ꧆

#### 2.3 Notes on typing Js like a pro 😎

Remember:

1. Js is abugida; it has inherent vowel.
2. Js is phonetic; you type what you hear, not what you read.
3. Wrap the numbers in "꧇" or "꧈" to avoid ambiguity.

So, the second point usually is the crucial one.

- If you have a word, as much as possible, find the root-word, and if it's a derivative word (word + suffix/prefix/affix), then if necessary, some consonant need to be 'doubled'. For example

  Latin | nulisa (='nulis' + '-a')
  --- | ---
  Aksara (👎) | ꦤꦸꦭꦶꦱ /nu li sa/ = amateur
  Aksara (👍) | ꦤꦸꦭꦶꦱ꧀ꦱ /nu lis sa/ = pro 😎
  Input | [n] [u] [l] [i] [s] [s] [a]

  While this is not strictly right or wrong issue, the 👎 one should be avoided in writing Js.

## Usage Notes

ToC: Welcome! | Nulisa Aksara Jawa keyboard shortcuts | Typing tests and input samples | Usage Notes | Development Notes | Change History

How to use the keyboard (for user), or read the codes (for developer)

- Adeg-adeg (sentence openings). Type the pipe symbol (|) to get 'adeg-adeg' ꧋. Type \ to get ꧊. 'Rerenggan kiwa/tengen' ꧁ and ꧂ can be typed using { and }.
- Nglegena. This is the basic 20 letters (consonantal syllables), and also the 16 murda letters and mahaprana letters. They can stand alone by themselves, and by default assigned the voice of 'a' /ɔ/.
- Sandhangan (vowels). This is the basic 4 vowels ('wulu', 'suku', 'taling', 'pepet'), and 6 long vowels (including 'tarung', see double vowels). They cannot stand alone by themselves, and must be joined by a nglegena. Also for the sake of category, I would include here the 8 'aksara swara' vowels (A/E/I/O/U/Ai/Ii/II), even though these vowels can stand by themselves, without nglegena. To type standalone sandhangan
  - 'qe' - 'taling' ꦺ
  - 'qi' - 'wulu' ꦶ
  - 'qo' - 'taling tarung' ꦺꦴ
  - 'qu' - 'suku' ꦸ
  - 'qx' - 'pepet' ꦼ
- Letters. When you type a letter, if it's a vowel (a/e/i/o/u/x), then you get the character 'ha' with the appropriate 'sandhangan' immediately (one-to-two mapping, or in the case of 'o', one-to-three). If you type a consonant, you will get the 'nglegena' form with the pangkon attached (one-to-two, or one-to-three in the cases of 'f','v','z').
- X-Q rule. Typing 'x' will give you ('ha'+)'pepet'. Typing 'q' will give you 'pangkon'. These are the only arbitrary placement that you need to memorize. It just happened to fit nicely in QWERTY keyboard, because X and Q are unused letters (while 'f', 'v', and 'z', even though not found in native Javanese language, they are 'aksara rekan', and frequently used in words borrowed from Indonesian)
- Pangkon (virama). So, why the 'nglegena' was attached with 'pangkon' by default? Well, it's because if you just type a consonant, it could be anywhere, in the start, middle, or end of a syllable. If it's in the start, you just need to add a vowel, and the pangkon will be replaced by the appropriate 'sandhangan' (minus the 'ha', they're not needed anymore), if it's in the middle, it will transform to 'wyanjana', if it's 'r' or 'y'. If it's in the end, it would transform to 'sesigeg' if it's 'r', 'h', or 'ng'
  - Rule 1: Pangkon + Vowel will remove the 'pangkon' and add a 'sandhangan' where appropriate.
  - Rule 2: Pangkon + Consonant will turn the consonant into 'pasangan', followed by another 'pangkon'
  - Rule 3: Pangkon + Consonant + Pangkon + Consonant will put a Zero-Width Joiner after first pangkon, so that it won't try to form a double subscript glyphs.
- Sesigeg (final consonants). If you type an 'r', an 'h', or an 'n'-followed-by-'g', you will get a 'sesigeg' ('layar', 'wignyan', or 'cecak'). If it is immediately followed by a 'wyanjana' and/or a vowel, they will transform to 'ra', 'ha', and 'nga' automatically (+ applicable 'sandhangan'), because 'layar', 'wignyan', or 'cecak' are basically 'ra pangkon', 'ha pangkon', and 'nga pangkon'. So all rules regarding 'pangkon' + 'letter' would apply to them as well. To type them independently, you can use:
  - 'R' - 'layar'
  - 'H' - 'wignyan'
  - 'Y' - 'cecak'
- Double consonants. If you type these two/three letters in sequence, you would get different character (replacing the first one)
  - 'ny' - 'nya pangkon' ꦚ꧀ (replacing 'na pangkon' ꦤ꧀)
  - 'ng' - 'cecak' ꦁ (see sesigeg)
  - 'nn' - 'na murda' ꦟ꧀
  - 'th' - 'tha pangkon' ꦛ꧀ (replacing 'ta pangkon' ꦠ꧀)
  - 'dh' - 'dha pangkon' ꦝ꧀ (replacing 'da pangkon' ꦢ꧀)
  - 'nj' - 'nya pangkon ja pangkon' ꦚ꧀ꦗ꧀ (nasal sound)
  - 'nc' - 'nya pangkon ca pangkon' ꦚ꧀ꦕ꧀ (nasal sound)
- Double vowels. If you type these two/three letters in sequence, you would get different character (replacing the first one)
  - 'aa' - 'tarung' ꦴ
  - 'ai' - 'dirga mure' ꦻ
  - 'au' - 'dirga mure + tarung' ꦻꦴ
  - 'ii' - 'wulu melik' ꦷ
  - 'i'/'e' + any other vowel - instead of 'ha' in the middle, you get 'ya'
  - 'uu' - 'suku mendhut' ꦹ
  - 'u'/'o' + any other vowel - instead of 'ha' in the middle, you get 'wa'
- Wyanjana (medial consonants). If you type a consonant followed by an 'r' or a 'y', you will get 'wyanjana' ('cakra' or 'pengkal'), followed by a 'pangkon'*. You need to type a vowel afterwards, lest you would have an invalid 'wyanjana'+'pangkon' combination. If you type a consonant followed by an 'r' followed by an 'x', you will get a 'cakra keret' instead of 'cakra + pepet'. To type them independently, you can use:
  - '&' (SHIFT+7) or (ALT+7) - 'cakra keret'
  - '(' (SHIFT+8) or (ALT+8) - 'pengkal'
  - ')' (SHIFT+9) or (ALT+9) - 'cakra'
  - *Now, I know it's highly unusual to see 'wyanjana' with 'pangkon', but I decided for the sake of code brevity. Otherwise I have to make separate rules for 'wyanjana'. Instead, since they ends with 'pangkon', all the rules for 'pangkon' also applies for them. In one way, it makes sense, because if you only type 'br' for example, it doesn't have a vowel yet. If you leave it like that, of course it's wrong. Only after you type a vowel would the 'pangkon' get replaced by applicable 'sandhangan'
- Rekan. They're supplementing the letters that aren't found in Javanese language, namely 'f/v/z'. Some sources equate 'f' and 'v' as 'pa + cecak telu', while some others differentiate them. I subscribe to the second group: 'f' as 'pa + cecak telu'(+'pangkon') and 'v' as 'wa + cecak telu'(+'pangkon'). 'z' is 'ja + cecak telu'(+'pangkon'). Writing 'f/v/z' would also ends with 'pangkon'. For other rekan that uses 'cecak telu':
  - ꦒ꦳ GA + CECAK TELU = غ (γa).
  - ꦗ꦳ JA + CECAK TELU = ز (za) and for Indonesian 'za'.
  - ꦢ꦳ DA + CECAK TELU = ذ (dza).
  - ꦥ꦳ PA + CECAK TELU = ف (fa) and for Indonesian 'fa'.
  - ꦮ꦳ WA + CECAK TELU = ڤ (va) and for Indonesian 'va'.
  - ꦔ꦳ NGA + CECAK TELU = ع ('a).
  - ꦱ꦳ SA + CECAK TELU = ش (ša).
  - ꦲ꦳ HA + CECAK TELU = ح (ḥa) and for Indonesian 'ha'.
  For these letters there are no shortcuts, you have to be creative, and found a way to write it your own with the available means. For example, to type 'dza', you can type 'da'+'~' (tilde), 'dzi' = 'da'+'~'+'q'+' i'.
  For Chinese 'rekan', I couldn't find any reliable source regarding their history, list, and usage (pronounciation), only from Wikipedia, and they're archaic/not proper pinyin/mandarin and not suitable for modern usage. I'm not listing them here for now, because I'm planning to build a systematic index of every Chinese syllable and their Js counterpart (Indeks:Pinyin-Aksara Jawa).
- Murda and Mahaprana. I store them in the capital Latin consonant letters, but it doesn't necessarily mean they're Javanese capital letter, it's just for convenience and mnemonic. Their number is only 10 single-letter Murda ('KGCJTDNPBS') and 3 multi-letters Murda. Below are some double consonant combinations for murda letters.
  - 'Th' - 'tta mahaprana pangkon' ꦜ꧀ (replacing 'Ta pangkon' ꦡ꧀)
  - 'Dh' - 'dda mahaprana pangkon' ꦞ꧀ (replacing 'Da pangkon' ꦣ꧀)
  - 'jny' - 'nya murda pangkon' ꦘ꧀
  - the 10 murda above can also be written by typing the 10 corresponding nglegena with 'h'. So 'kh' = "K", 'gh' = 'G', etc. Except 'dh' and 'th'.
  The other 10 capital Latin consonant letters (QZHRY) and (FVMLW) doesn't store 'murda' letters. I used Q for 'Ka Sasak', Z for 'Sa Mahaprana' (to differentiate from S, 'Sa Murda'), and H, R, Y for 'wyanjana'. If you typed a murda it will also attached by 'pangkon' and the above 'pangkon' rules apply. (FVMLW) are currently unused. The six capital Latin vowel letters and x (AEIOUX) are used for 'aksara swara' (see sandhangan above). Some special 'aksara swara' (long vowels):
  - 'Aa' - 'A tarung' ꦄꦴ (long-A)
  - 'Ai' - 'Ai' ꦍ e.g. ꦍꦱ꧀ꦭꦤ꧀ꦝꦶꦪ /Aislandhiya/
  - 'Au' - 'O tarung' ꦎꦴ e.g. ꦎꦴꦱ꧀ꦠꦿꦭꦶꦪ /Oostraliya/
  - 'Ii' - 'Ii' ꦇ (long-I)
  - 'II' - 'I Kawi' ꦅ
  - (The 'I' and 'Long I' history is messed up between Old Javanese/Kawi, and Modern Javanese. Read in Wikipedia or ask me if you want to know)
  - 'Uu' - 'U tarung' ꦈꦴ (long-U)
  - 'Oo' - 'O tarung' = 'Au' ꦎꦴ (long-O)
- Special letters. 'Aksara ganten'
  - 'rx' - 'pa cerek' ꦉ (replacing 'ra pepet' ꦫꦼ)
  - 'lx' - 'nga lelet' ꦊ
  - 'RR' - 'ra agung + pangkon' ꦬ꧀
- Numbers. For numbers, you just typed it normally. The only difference with normal numbers is that Javanese numbers are always enclosed/surrounded by 'pada pangkat' ꧇ (looks like a semicolon) by typing a semicolon ':'. Rule:
  - when a non-number followed by number, it's separated by 'pada pangkat'
  - when a number followed by non-number, it's separated by 'pada pangkat' as well
  - if the number is in the beginning, it's started with 'pada pangkat'
  - if a number is at the end, followed by period ('pada lungsi')
  - a number will be ended with 'pada pangkat' before the 'pada lungsi' automatically, except if it's at the very end, and there's no more character to follow, then you have to manually close the 'pada pangkat' by typing semicolon ':'.
- Special characters. See the visual mapping of the keyboard for reference, or the table above. They might move in the future. I'm trying to make it as intuitive as possible. Some special combinations:
  - ꧅꧉ꦧ꧀ꦖ꧉꧅or ꧅ꦧ꧀ꦖ꧅or ꧅ꦧ꧀ꦕ꧅ 'purwapada' - to introduce a poem.
    It can be typed as such: '/.bcha./' or '/bcha/' or '/bCa/' or '/bca/'
  - ꧅꧉ꦟ꧀ꦢꦿ꧉꧅or ꧅ꦟ꧀ꦢꦿ꧅ 'madyapada' - to indicates a new song within a poem.
    It can be typed as such: '/.Ndra./' or '/Ndra/'
  - ꧅꧉ꦆ꧉꧅or ꧅ꦆ꧅ 'wasanapada' - to end a poem.
    It can be typed as such: '/.I./' or '/I/'
  - ꧋꧆꧋ 'pada guru'/'pada bab'/'uger-uger' - to introduce a letter (legacy).
    It can be typed as such: '|"|'
  - ꧉꧆꧉ or ꧉ ꧆ ꧉ 'pada pancak' - to end a letter (legacy).
    It can be typed as such: '.".'
- Invalid combinations. I have tried to reduce the possibility of invalid combinations as minimal as possible.
  - Combination of a 'pangkon', 'sesigeg', 'wyanjana', 'panyangga' and themselves is not allowed (eg. q+q)
  - Combination of a 'number' and number's 'pada pangkat', and a 'pangkon', 'sesigeg', 'wyanjana', 'panyangga' is not allowed. (But the reverse is allowed)
  - Combination of a 'pada pangkat' and another 'pada pangkat' is not allowed

## Development Notes

ToC: Welcome! | Nulisa Aksara Jawa keyboard shortcuts | Typing tests and input samples | Usage Notes | Development Notes | Change History

Version 1.0

- I started with importing the logic behind my other project: Nulisa Aksara Jawa - Javanese Transliteration and reading the documentation of Keyman. I was able to do the bare minimum coding to make the keyboard able to type the most common combinations in just one day.
- The purpose of the keyboard remain the same with my previous projects: to make typing Js as naturally as possible using regular QWERTY keyboard (US English), with minimal memorizing of arbitrary positions. I've managed to reduce it into just 2: X and Q, both keys are not used in Js. X is for 'pepet' (schwa) vowel, while Q is for 'pangkon' (virama) vowel-killer. With this spirit, one can easily type (10-fingers typing) 60 or 70 WPM of Js.
- The target user (other than myself), are students, teachers, scholars, hobbyist, and other people who wanted to learn Js through typing. Hopefully through typing with this keyboard, people will learn the rules and the combinations that they can't get from reading books or writing by hand themselves.
- What this keyboard won't do is to teach the consonant duplication rule. Basically if a root word that ends with a consonant get a suffix, then the last consonant should be written double (with 'pasangan' or 'sesigeg'). To do this automatically would require a dictionary lookup method. This keyboard assume the typist would know the rule and double the consonant accordingly. What if they don't do it? Well, it would be pronounced incorrectly, because Js is a phonetic writing system (such as IPA)

A month later

- As I started reading more on the documentation, I was able to simplify most of the code, and also cover more rare glyph combinations, such as 'jnya'.
- I've run checks on the common keyboard tongue-twister, all documented in the section above. As well as mad the help page, and this welcome page.
- Made some features (options) using CTRL key. For full explanation, see section about Hidden Features above.

2020: Version 1.0

- I finished this and on time before 21 Feb - International Mother's Tongue Day. So let's dedicate this code to IMTD.

#### Structure of Javanese syllables

An orthographic syllable in Javanese can be described as {C{?} Q} C{?} {{R}Y} {V{A}} {Z}, where: C is a consonant, ? is a cecak telu, Q is a pangkon, R/Y is a cakra/pengkal, V is a vowel sign, A is a tarung (long vowel mark), and Z is one of the syllable-final consonants. Ref

The initial consonant cluster could be from 1-4 consonants (nggr-/nggl- is the longest), either in one word/syllable (nggrambyang) or multiwords/syllables (sanggrahan/wong grapyak).

The final consonant cluster is limited to the 20 basic sound, thus, the longest one is -ng. Foreign/loan words, however, may stretch it further. The result is consonant stacking.

The combination of 2 final consonants and 4 initial consonants may produce 6 consonants. For example 'seneng nggrambyang' ꦱꦼꦤꦼꦁꦔ꧀ꦒꦿꦩ꧀ꦧꦾꦁ. Foreign words may have more than 6.

R.S. Wihananto's theoretical combination: ꦙ JA MAHAPRANA + ꦳ CECAK TELU + ꦿ CAKRA + ꦾ PENGKAL + ꦽ KERET + ꦴ TARUNG + ꦀ PANYANGGA = ꦙ꦳ꦿꦾꦽꦴꦀ (depends on your font, maybe it failed to form into one. Tuladha Jejeg able to combine them all.)

## Change History

ToC: Welcome! | Nulisa Aksara Jawa keyboard shortcuts | Typing tests and input samples | Usage Notes | Development Notes | Change History

1.1: Develop touch layout for Android/mobile keyboard. Removed Tuladha Jejeg because it doesn't work in Keyman App (graphite?) Expand documentation (w/ screenshot, etc). Add supported languages: id: jv, kaw, mad, sas, su, osi, tes

1.02: Changing the .kmn file, put a name for every character, for greater readibility of the code and possible development for other Indonesian scripts in the future.

1.01: Adding web version, android version, mobile/tablet version (touch screen layout)

2020-02-21: Version 1.0 (desktop version) is published. Happy International Mother's Tongue Day!

2019-01-28: Adding documentation, help file, welcome file, fix bugs, more Sundanese support, rekan support, code simplification with store()s, less comments, harder to read, but shorter code

1.0: Initial release - 2019-01-24

License and copyrights:

This keyboard is developed by Benny Lin using Keyman software. It is available for free to use from Github and elsewhere. If you make modification, please credit Benny Lin and Keyman software. You can find him in his Github, Wikipedia, or Telegram, all under the name @bennylin