Keyboard Support

Contact and Search

Keyman.com Homepage

Header bottom

Keyman.com

On this page

Khmer Angkor

Overview

This documentation is adapted from three sources: ‘How to Type Khmer Unicode,’ ‘the Unicode Standard, Version 10.0.0’ and a paper authored by the Keyman team entitled ‘Spoof-Vulnerable Rendering in Khmer Unicode Implementation’ presented at Asia Conference on Information System in 2017.  Customizations have been made by the Keyman team. A layer is added to both desktop and touch layout in order to dedicate to the Khmer divination lore and Khmer lunar dates.

Khmer Angkor Keyboard Layouts

Desktop Layout –Windows/macOS

Touch Layout –Android/iOS

There is no Shift key nor subscript sign in the touch layout to switch between layouts. Strange, right? Yes, maybe, but it is not easy to reach for the “Shift” key one-handedly. More keys are embedded in each key—press and hold for a second or so to see more available keys. For example, to get subscript “្រ, or ”, press and hold on key “” for a short while, then more keys would appear, and then you may choose “្រ”. You may notice that on the Khmer Angkor keyboard for desktop, these four characters are on key R”; which is why they are all packed into this one key hidden in the long press.

While using the touch keyboard, one has to be aware of the location of each key. This may take a while to get used to, but it would be easier, once passed the learning curve, than pressing “Shift” each time to get addition characters and pressing “ each time to get a subscript.

Default layout

 

Numeric layout

 

Divination Lore and Khmer Lunar Dates layout

 

Khmer Character Categories and Keystrokes for Desktop

Consonants

Consonant

Keystroke

 

Consonant

Keystroke

[U+1780]

K

[U+1790]

F

[U+1781]

X

[U+1791]

Shift T

[U+1782]

Shift K

[U+1792]

Shift F

[U+1783]

Shift X

[U+1793]

N

[U+1784]

G

[U+1794]

B

[U+1785]

C

[U+1795]

P

[U+1786]

Q

[U+1796]

Shift B

[U+1787]

Shift C

[U+1797]

Shift P

[U+1788]

Shift Q

[U+1798]

M

[U+1789]

Shift J

[U+1799]

Y

[U+178A]

D

[U+179A]

R

[U+178B]

Z

[U+179B]

L

[U+178C]

Shift D

[U+179C]

V

[U+178D]

Shift Z

[U+179F]

S

[U+178E]

Shift N

[U+17A0]

H

[U+178F]

T

[U+17A1]

Shift L

 

 

[U+17A2]

Shift G

 

Dependent Vowels

Dependent Vowel

Keystroke

 

Dependent Vowel

Keystroke

[U+17B6]

A

[U+17C0]

[

[U+17B7]

I

[U+17C1]

E

[U+17B8]

Shift I

[U+17C2]

Shift E

[U+17B9]

W

[U+17C3]

Shift S

[U+17BA]

Shift W

[U+17C4]

O

[U+17BB]

U

[U+17C5]

Shift O

[U+17BC]

Shift U

ុំ [U+17BB][U+17C6]

,

[U+17BD]

Shift Y

ាំ [U+17B6][U+17C6]

Shift A

[U+17BE]

;

ុះ [U+17BB][U+17C7]

Shift ,

[U+17BF]

Shift [

េះ [U+17C1][U+17C7]

Shift V

 

 

ោះ [U+17C4][U+17C7]

Shift ;

 

Signs

Sign

Keystroke

[U+17C6]

Shift M

[U+17C7]

Shift H

[U+17C8][1]

AltGr ’

 

Independent Vowels

Independent Vowel

Keystroke

 

Independent Vowel

Keystroke

[U+17A5]

-

[U+17AD]

Shift \

[U+17A6]

AltGr I

[U+17AE]

\

[U+17A7]

Shift ]

[U+17AF]

AltGr E

[U+17A9]

AltGr [

[U+17B0]

AltGr P

[U+17AA]

]

[U+17B1]

AltGr O

[U+17AB]

AltGr R

[U+17B2]

=

[U+17AC]

Shift R

[U+17B3]

AltGr ]

Diacritics

Diacritics

Keystroke

 

Diacritics

Keystroke

[U+17C9]

Shift ’

[U+17CF]

Shift 8

[U+17CA]

/

[U+17D0]

Shift 7

[U+17CB]

[U+17CE]

AltGr =

[U+17CC]

Shift -

[U+17D3]

AltGr M

[U+17CD]

Shift 6

[U+17D2]

J

Native Punctuations

Native Punct.

Keystroke

 

Native Punct.

Keystroke

[U+17D4]

.

[U+17D9]

AltGr 6

[U+17D5]

Shift .

[U+17DA]

AltGr 7

[U+17D6]

AltGr ;

[U+17D7]

Shift 2

 

Latin Punctuations

Latin Punct.

Keystroke

 

Latin Punct.

Keystroke

! [U+0021]

Shift 1

« [U+00AB]

`

? [U+003F]

Shift ?

» [U+00BB]

Shift `

[U+0022]

Shift 3

- [U+002D]

AltGr S

. [U+002E]

AltGr .

: [U+003A]

AltGr G

, [U+002C]

AltGr ,

[U+2018]

AltGr H

; [U+003B]

AltGr N

[U+2019]

AltGr J

# [U+0023]

AltGr C

 

& [U+0026]

AltGr V

 

Currencies

[U+17DB]

Shift 4

 

Khmer Numerals

Khmer Numeral

Keystroke

 

Khmer Numeral

Keystroke

[U+17E1]

1

[U+17E6]

6

[U+17E2]

2

[U+17E7]

7

[U+17E3]

3

[U+17E8]

8

[U+17E4]

4

[U+17E9]

9

[U+17E5]

5

[U+17E0]

0

 

            Divination Lore

Divination Lore

Keystroke

 

Divination Lore

Keystroke

[U+17F1]

AltGr Shift 1

[U+17F6]

AltGr Shift 6

[U+17F2]

AltGr Shift 2

[U+17F7]

AltGr Shift 7

[U+17F3]

AltGr Shift 3

[U+17F8]

AltGr Shift 8

[U+17F4]

AltGr Shift 4

[U+17F9]

AltGr Shift 9

[U+17F5]

AltGr Shift 5

[U+17F0]

AltGr Shift 0

            Khmer Lunar Dates

Khmer Lunar Date

Keystroke

 

Khmer Lunar Date

Keystroke

[U+19E0]

AltGr Shift Q

[U+19F0]

AltGr Shift G

[U+19E1]

AltGr Shift W

[U+19F1]

AltGr Shift H

[U+19E2]

AltGr Shift E

[U+19F2]

AltGr Shift J

[U+19E3]

AltGr Shift R

[U+19F3]

AltGr Shift K

[U+19E4]

AltGr Shift T

[U+19F4]

AltGr Shift L

[U+19E5]

AltGr Shift Y

[U+19F5]

AltGr Shift ;

[U+19E6]

AltGr Shift U

[U+19F6]

AltGr Shift ’

[U+19E7]

AltGr Shift I

[U+19F7]

AltGr Shift Z

[U+19E8]

AltGr Shift O

[U+19F8]

AltGr Shift X

[U+19E9]

AltGr Shift P

[U+19F9]

AltGr Shift C

[U+19EA]

AltGr Shift [

[U+19FA]

AltGr Shift V

[U+19EB]

AltGr Shift ]

[U+19FB]

AltGr Shift B

[U+19EC]

AltGr Shift A

[U+19FC]

AltGr Shift N

[U+19ED]

AltGr Shift S

[U+19FD]

AltGr Shift M

[U+19EE]

AltGr Shift D

[U+19FE]

AltGr Shift ,

[U+19EF]

AltGr Shift F

᧿ [U+19FF]

AltGr Shift .

Discouraged/Obsolete characters

Character

Keystroke

[U+17D8]

AltGr L

[U+17A8]

AltGr T

[U+17DC]

AltGr Q

[2] [U+17D1]

AltGr 3

[U+17D3]

AltGr M

            Characters used in minority languages

Other Character

Keystroke

[U+179D]

AltGr K

[U+179E]

AltGr B

[U+17DD]

AltGr W

            Joiners and Spaces

Key name

Keystroke

Zero-width non-joiner [U+200C]

AltGr + 1

Zero-width joiner [U+200D]

AltGr + ‘

Zero-width space [U+200B]

Spacebar

White space [U+0020]

Shift + Spacebar or Press spacebar twice

No break space [U+00A0]

AltGr + Spacebar

 

Typing in Khmer

Khmer Angkor keyboard adopted the key arrangement from that of Khmer NiDA keyboard. More functionalities have been added to it to assist in typing (i.e. reduce inconsistency in character sequences). Regardless of how the user may type, a well-formed word will be produced. Please note that only issues identified are covered. For how to install the Khmer Angkor keyboard, please click here for the instructions.

You can simply use Khmer Angkor as you would for any NiDA based keyboard. You may type a word in an order of how it is spelled, not how it appears to be, especially when the vowel is to the left of the consonant. For example, to type the word “តែ” which means ‘tea’, one should type the consonant first and then the vowel (i.e. press key “T” and then “Shift E”).

The order of characters is:

                Consonant + Subscript(s) + Consonant Shifter + Vowel + Diacritic

Silent Auto-correction

There are eight cases of invisible typos that Khmer Angkor keyboard automatically corrects. They could not be detected with the naked eye; and the rendering engines may render them all the same on the screen. The auto-correction involves reordering and/or transducing of certain in correct characters to the correct ones in a split second.

            Subscript + Vowel

When a subscript and a vowel occur together, the vowel has to come after the subscript. For instance, “ខ្មែរ and ខែ្មរ look the same, but they are encoded differently.

1.        ខ្មែរ = ខ ្ម ែ    (correct)

2.        ខែ្មរ = ខ ែ ្ម    (incorrect)

Thanks to the context dependent rules, Khmer Angkor keyboard is able to output the second typing sequence the same as that of the first one.

            Subscript + ្រ [U+17D2] [U+179A]

According to the spelling rule, in a sequence of two subscript and one of which is ្រ [U+17D2] [U+179A], the ្រ [U+17D2] [U+179A] should come after another subscript.

·         កញ្ជ្រឹល = ក ញ ្ជ ្រ ឹ ល   (correct)

·         កញ្រ្ជឹល = ក ញ ្រ ្ជ ឹ ល   (incorrect)

As you can see the two-character sequences yield the same visual output on the screen. Once again, Khmer Angkor will be able to automatically swap the sequence of the second to the first; so that the output would be both looked and encoded correctly and consistently.

            Subscript + Consonant Shifter + Vowel

This is a case whereby the character sequence is vague in the Unicode Standard. Unicode Standard 4.0 and later have the consonant shifter come between the consonant and the subscript while Unicode Standard 3.0 has it after the subscript. Khmer Angkor conforms to Unicode 3.0 and it is taken as the standard sequence. If one typed a consonant shifter before a subscript, the order would be switched silently.

     ៉ ្យ ា ង Þ ្យ ៉ ា ង

            Consonant Shifter + Vowel

Consonant shifters should be typed before a vowel. (See the same in the section above)

            Vowel with Nikahit [U+17C6]

Nikahit is considered as a sign in the Unicode Standard. However its function is more like that of a vowel. It is usually combined with another vowel, i.e. [U+17BB] [U+17B6], and it should always be typed after these vowels.

           ំ ុ       Þ ុ ំ
     
ំ ា      Þ ា ំ

            Vowel [U+17C4] and Vowel [U+17BE]

These two vowels could be mistakenly typed by adding [U+17B6] and [U+17C1] respectively to [U+17C1]. Given this sequence, Khmer Angkor would transform them to [U+17C4] and [U+17BE], the correct vowel encodings.

            Visually Identical Subscript

Two subscripts look exactly the same, but they are encoded with different Unicode code points, ្ដ [U+17D2][U+178A] and ្ត [U+17D2][U+178F]. According to the spelling rule, it governs that the first should come after [U+178E] and the latter should come after [U+1793].

Vowel Rotation

Since no two-vowel sequence is allowed, once one is typed after another, the vowel would switch to the one typed last. For example, if the current character is vowel [U+17B6], and then [U+17C2] is typed, the final output would be [U+17C2], not [U+17B6].

                NOTE: The vowel rotation would not be triggered in the following cases:

·         If the first vowel is [U+17C1] and the second is [U+17B8]or vice versa, then the switch would not happen, but the output would be [U+17BE] instead.

·         If the first vowel is [U+17C1] and the second is [U+17B8] or vice versa, then the switch would not happen, but the output would be [U+17C4] instead.

·         If the first vowel is on the above vowels[3] and the second is [U+17BB] or vice versa, then the switch would not happen, but the output would be the corresponding consonant shifter instead. For examples: a sequence of ស ី ុ or ស ុ ី would be automated as ស៊ី (ស ៊ ី); ម ី ុ or ម ុ ី would be automated as ម៉ី (ម ៉ ី).

·         When [U+17BB] is typed after ាំ, it will be transformed to a consonant shifter corresponding with the consonant before ាំ before which the shifter will be placed. For example,

o   សាំ + ុ   Þ ស៊ាំ (ស ៊ ាំ) and

o   មាំ + ុ    Þ ម៉ាំ (ម ៉ ាំ).

·         When or is typed after , the order will be reversed. For example,

o   + + ុ       Þ កុំ (ក ុ ំ) and

o   + + ា      Þ កាំ (ក ា ំ).

 

Beep / Constraints

·         No two consecutive vowels in a syllable.

·         No Bantoc is allowed after a vowel, a pseudo vowel[4], a consonant shifter or a subscript.

·         No two consecutive subscript signs () are allowed.

·         No two consecutive consonant shifters are allowed.

 

Mistyped Characters

No

Mistyped as …

Transformed to …

1

ទ្ប (ទ ្ប)

2

ប្ញ (ប ្ញ)

3

ឫុ (ប ្ញ ុ)

4

ឭា (ឭ ា)

5

ឮា (ឮ ា)

6

ព្ញ (ព ្ញ)

7

ឭុ (ព ្ញ ុ)

8

ព្ឋ (ព ្ឋ)

 

9

ឧិ (ឧ ិ)

10

ឧ៌ (ឧ ៌)

 

11

ឧ៍ (ឧ ៍)

  

12

ដ្ធ (ដ ្ធ)

 ដ្ឋ

13

ទ្ឋ (ទ ្ឋ

 ទ្ធ

 



[1] It is actually not a vowel, but it behaves like one. To some, this is a diacritics.

[2] Note the different between this character and [U+17CA].

[3] [U+17B7], [U+17B8], [U+17B9], [U+17BA], [U+17BE], and ាំ [U+17B6] [U+17C6] are considered as superscript vowels or above vowels.

[4] Three characters play a role similar to that of vowels, thus they are called ‘pseudo vowel’.
They are: [U+17C6], [U+17C7], and [U+17C8].

Click here to download the English Version or Khmer Version in PDF format.

Fonts

To get Khmer fonts, you may visit one of the three sources below:

More Information

All Documentation Versions