Язык страницы:

Input Method Engine

IME - это способ набора текстов на иероглифических языках и языках (китайский, корейский), использующих сложные правила формирования букв (лакота).

Для пользователя

IME может работать в 2 режимах

  1. формирования окна с подсказками (для иероглифических языков)
  2. прямое формирование символа (слоговая корейская азбука, лакотская раскладки, акцентированные символы)

Пример работы с окном подсказки

В данном примере мы наберём «здравствуй» по-китайски: ni hao

При вводе любого символа, с котогоро может начинаться иероглиф, всплывает окно с наиболее возможными вариантами, отсортированными по частоте использования (буква n)

Следующий символ уточняет целевой иероглиф (ni)

При нажатии на цифру, подставляется иероглиф с выбранным номером. При нажатии Enter или вводе любого символа, который не может уточнить текущий иероглиф выбирается вариант под номером 1 - самый часто используемый и начинается формирование нового иероглифа (nih).

Далее - уточняем значение (niha и nihao)

Нажимаем Enter или 1 и завершаем ввод иероглифа

В результате получаем 你好, т.е. «здравствуй»

Для программиста

Реализация IME в виртуальной клавиатуре возложена на сторонние скрипты, реализующие логику трансформации базовых символов - в основном букв латинского и кириллического алфавитов - в созвучные им символы целевого языка. Для нужд IME зарезервировано пространоство VirtualKeyboard.Lang, где можно располагать необходимые данные и методы. Стандартная схема именования такова: VirtualKeyboard.Lang.<language_code>. В этом пространстве данные и методы адресуются только пользовательским скриптом, или прямым указанием метода в описании обработчика IME.

VirtualKeyboard.Langs.CN = new function () {
    var self = this;
    self.INPArr = [];
    /**
     *  Callback to process keyboard input in the current IME style
     *
     *  @see VirtualKeyboard.processChar
     *  @param {String} chr current input char
     *  @param {String} buf actual processing buffer
     *  @return {Array} new buffer contents and length
     *  @scope protected
     */
    self.processChar = function (chr, buf) {
        var num, str, arr
        if (chr=='\u0008') { // backspace
            if (buf && (str=buf.slice(0,-1))) {
                VirtualKeyboard.IME.show(self.INPArr[str] || []);
                return [str,str.length]
            } else {
                VirtualKeyboard.IME.hide()
                return ['',0] //total delete; some other cases
            }
        } else { //non backspace
            str=buf+chr
            arr = self.INPArr[str] || []
            if (arr.length) { // miao
                VirtualKeyboard.IME.show((typeof arr =='string')? self.INPArr[str]=arr.split('') : arr)
                return [str, str.length]
            } else if(VirtualKeyboard.IME.getSuggestions().length) { // not a part of a syllable
                if (isFinite(num=parseInt(chr))) { // miao3
                    str = VirtualKeyboard.IME.getChar(num);
                    if (!str) { //miao9 - no such variant
                        return[buf,buf.length]
                    } else {
                        VirtualKeyboard.IME.hide();
                        return[str,0]
                    }
                } else if ((arr = self.INPArr[chr] || []).length) { //nih
                    str=VirtualKeyboard.IME.getSuggestions()[0]
                    VirtualKeyboard.IME.setSuggestions((typeof arr =='string')? self.INPArr[str]=arr.split('') : arr)
                    return [str+chr,1]
                } else { // ni,
                    str=VirtualKeyboard.IME.getSuggestions()[0]
                    VirtualKeyboard.IME.hide()
                    return [str+(chr.charCodeAt()==10? '': chr),0]
                }
            }
        }
        return [buf+chr,0] //non-chinese talk
    }
};

Данный код располагается в файле setup/in/addons/CN.js и является общим для всей группы китайских языков (zh-CN).

Вторая часть IME располагается в каталоге setup/in/addons/callbacks и должна иметь одинаковое имя с файлом раскладки. Например, chinese-simplified.js для раскладки chinese-simplified.klc. В этом файле может содержаться либо одна строчка с именем функции, которая будет вызываться при обработке кнопок

VirtualKeyboard.Langs.JP.processChar

либо объект со структурой вида

{'load' : function () { 
    /* опциональный метод, вызываемый в момент загрузки раскладки */
 }
,'activate' : function () {
    /* опциональный метод, вызываемый при выборе раскладки пользователем */
 }
,'charProcessor' : function (chr, buf) {
    /* обязательное поле либо 
       1) ссылка на функцию обработки вводимых символов вида
          VirtualKeyboard.Langs.CN.processChar
       2) код функции обработки символов (пример ниже)
    */
 }
}

Пример функции обработки вводимых символов

function(chr, buf){
    if (chr=='\u0008') { // backspace
        if (buf.length) {
            return [buf.slice(0,-1),buf.length-1]
        } 
    } else if(/[^A-z']/.test(chr)){
        return VirtualKeyboard.Langs.LA.remap[buf+chr] || [buf+chr, 0]
    } else { //non backspace
        return VirtualKeyboard.Langs.LA.remap[buf+chr] || [buf+chr, 1]
    }
}

  • Закладки и социальные сети
  • Сохранить "Input Method Engine" на del.icio.us
  • Сохранить "Input Method Engine" на Digg
  • Сохранить "Input Method Engine" на Furl
  • Сохранить "Input Method Engine" на Reddit
  • Сохранить "Input Method Engine" на Ask
  • Сохранить "Input Method Engine" на BlinkList
  • Сохранить "Input Method Engine" на blogmarks
  • Сохранить "Input Method Engine" на Google
  • Сохранить "Input Method Engine" на Ma.gnolia
  • Сохранить "Input Method Engine" на Netscape
  • Сохранить "Input Method Engine" на ppnow
  • Сохранить "Input Method Engine" на Rojo
  • Сохранить "Input Method Engine" на Shadows
  • Сохранить "Input Method Engine" на Simpy
  • Сохранить "Input Method Engine" на Socializer
  • Сохранить "Input Method Engine" на Spurl
  • Сохранить "Input Method Engine" на StumbleUpon
  • Сохранить "Input Method Engine" на Tailrank
  • Сохранить "Input Method Engine" на Technorati
  • Сохранить "Input Method Engine" на Live Bookmarks
  • Сохранить "Input Method Engine" на Wists
  • Сохранить "Input Method Engine" на Yahoo! Myweb
  • Сохранить "Input Method Engine" на BobrDobr
  • Сохранить "Input Method Engine" на Memori
  • Сохранить "Input Method Engine" на Faves
  • Сохранить "Input Method Engine" на Favorites
  • Сохранить "Input Method Engine" на Facebook
  • Сохранить "Input Method Engine" на Newsvine
  • Сохранить "Input Method Engine" на Yahoo! Bookmarks
  • Сохранить "Input Method Engine" на Twitter
  • Сохранить "Input Method Engine" на myAOL
  • Сохранить "Input Method Engine" на Slashdot
  • Сохранить "Input Method Engine" на Fark
  • Сохранить "Input Method Engine" на RawSugar
  • Сохранить "Input Method Engine" на LinkaGoGo
  • Сохранить "Input Method Engine" на Mister Wong
  • Сохранить "Input Method Engine" на Wink
  • Сохранить "Input Method Engine" на BackFlip
  • Сохранить "Input Method Engine" на Diigo
  • Сохранить "Input Method Engine" на Segnalo
  • Сохранить "Input Method Engine" на Netvouz
  • Сохранить "Input Method Engine" на DropJack
  • Сохранить "Input Method Engine" на Feed Me Links
  • Сохранить "Input Method Engine" на funP
  • Сохранить "Input Method Engine" на HEMiDEMi
projects/virtualkeyboard/ime.txt · Последние изменения: 2008/02/23 14:52 От Ilya Lebedev
GNU Free Documentation License 1.2 www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0