# Keyman

To use this language, use the class "language-keyman".

## Comments

    c This is a comment

## Strings, numbers and characters

    "'this' is a string"
    'and so is "this"'
    U+0041 d65 x41   c these are all the letter A

## Prefixes and Virtual Keys

    c Match RAlt+E on desktops, Ctrl+Alt+E on web because L/R Alt not consistently supported in browsers.
    $KeymanOnly: + [RALT K_E] > "€"
    $KeymanWeb: + [CTRL ALT K_E] > "€"

## Example Code

    c =====================Begin Identity Section===================================================
    c
    c Mnemonic input method for Amharic script on US-QWERTY
    c keyboards for Keyman version 7.1, compliant with Unicode 4.1 and later.
    c

    store(&VERSION) '9.0'
    store(&Name) "Amharic"
    c store(&MnemonicLayout) "1"
    store(&CapsAlwaysOff) "1"
    store(&Copyright) "Creative Commons Attribution 3.0"
    store(&Message) "This is an Amharic language mnemonic input method for Ethiopic script that requires Unicode 4.1 support."
    store(&WINDOWSLANGUAGES) 'x045E x045E'
    store(&LANGUAGE) 'x045E'
    store(&EthnologueCode) "amh"
    store(&VISUALKEYBOARD) 'gff-amh-7.kvk'
    store(&KMW_EMBEDCSS) 'gff-amh-7.css'
    HOTKEY "^%A"
    c
    c =====================End Identity Section=====================================================

    c =====================Begin Data Section=======================================================

    c ---------------------Maps for Numbers---------------------------------------------------------
    store(ArabOnes) '23456789'
    store(ones)     '፪፫፬፭፮፯፰፱'
    store(tens)     '፳፴፵፶፷፸፹፺'
    store(arabNumbers) '123456789'
    store(ethNumbers) '፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼'
    store(arabNumbersWithZero) '0123456789'
    store(ColonOrComma) ':,'
    store(ethWordspaceOrComma) '፡፣'
    c ---------------------End Numbers--------------------------------------------------------------

    c =====================End Data Section=========================================================

    c =====================Begin Functional Section=================================================
    c
    store(&LAYOUTFILE) 'gff-amh-7_layout.js'
    store(&BITMAP) 'amharic.bmp'
    store(&TARGETS) 'any windows'
    begin Unicode > use(main)
    group(main) using keys

    c ---------------------Input of Numbers---------------------------------------------------------

    c Special Rule for Arabic Numerals
    c
    c The following attempts to auto-correct the use of Ethiopic wordspace and
    c Ethiopic comma within an Arabic numeral context.  Ethiopic wordspace gets
    c used erroneously in time formats and Ethiopic commas as an order of thousands
    c delimiter. The correction context is not known until numerals appear on _both_
    c sides of the punctuation.
    c
      any(arabNumbersWithZero) any(ethWordspaceOrComma) + any(arabNumbers) > index(arabNumbersWithZero,1) index(ColonOrComma,2) index(arabNumbers,3)

    c Ethiopic Numerals

      "'" + '1' > '፩'
      "'" + any(ArabOnes) > index(ones,2)

    c special cases for multiples of one
      '፩'  + '0' > '፲'
      '፲'  + '0' > '፻'
      '፻'  + '0' > '፲፻'
      '፲፻' + '0' > '፼'
      '፼'  + '0' > '፲፼'
      '፲፼' + '0' > '፻፼'
      '፻፼'  + '0' > '፲፻፼'
      '፲፻፼' + '0' > '፼፼'
      '፼፼' + '0' > context beep  c do not go any higher, we could beep here

    c upto the order of 100 million
      any(ones)     + '0' > index(tens,1)
      any(tens)     + '0' > index(ones,1) '፻'  c Hundreds
      any(ones)  '፻ '+ '0' > index(tens,1) '፻'  c Thousands
      any(tens)  '፻' + '0' > index(ones,1) '፼'  c Ten Thousands
      any(ones)  '፼' + '0' > index(tens,1) '፼'  c Hundred Thousands
      any(tens)  '፼' + '0' > index(ones,1) '፻፼' c Millions
      any(ones) '፻፼' + '0' > index(tens,1) '፻፼' c Ten Millions
      any(tens) '፻፼' + '0' > index(ones,1) '፼፼' c Hundred Millions

    c enhance this later, look for something that can copy a match over
      any(ethNumbers) + any(arabNumbers) > index(ethNumbers,1)  index(ethNumbers,2)
    c ---------------------End Input of Numbers-----------------------------------------------------

    c =====================End Functional Section===================================================