Техническое примечание TN2056

Устанавливаемые раскладки клавиатуры

Mac OS X 10.2 добавляет возможность установить новую раскладку клавиатуры путем помещения файла или пакета в стандартной папке.

Также теперь возможно определить клавиатуру Unicode через текстовый файл XML. Эти клавиатуры имеют тот же набор возможностей как 'uchr' клавиатуры ресурса определили в документе «Поддержку Ввода Unicode». Фактически, XML-файл переводится в формат uchr и затем обрабатывается точно таким же образом.

Установка
Поддерживаемые форматы данных клавиатуры
DTD XML
Структура XML-файла
Полный пример мертвой клавиши
Ссылки
История версии документа

Установка

Раскладки клавиатуры могут быть установлены в одном из следующих расположений:

/Library/Keyboard Layouts/  ~/Library/Keyboard Layouts/  /Network/Library/Keyboard Layouts/

Ресурсы в /Library/ совместно используются среди всех пользователей на данной машине. Ресурсы в ~/Library/ видимы только тому пользователю. Ресурсы в /Network/Library/ совместно используются среди всех пользователей в сети.

Клавиатуры имеют Идентификационные номера, однозначно определяющие их; они не показаны конечному пользователю. Если система обнаружит две или больше клавиатуры с тем же Идентификационным номером, то она перенумерует клавиатуры по мере необходимости для устранения конфликта.

После установки новой клавиатуры пользователь должен выйти из системы и затем войти в систему снова для предоставления доступа к клавиатуре доступной.

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

Существует несколько различных форматов, поддерживающихся:

  1. Чемодан Клавиатуры старого стиля (файл ресурсов)

    Keyboard.rsrc (файл ресурсов, содержащий KCHR, uchr, itlk, kcns, kcs#, kcs4, kcs8 ресурсы)

    Название клавиатуры происходит от имени ресурса KCHR/uchr, и не может быть локализован. Используемое кодирование является кодированием сценария, которому клавиатура принадлежит, или UTF-8 для клавиатур Unicode (отрицательный IDs). Файл ресурсов может иметь одну или более клавиатур в нем. Ресурсы могут быть или в ветви ресурсов или в ветви данных (не оба); расширение файла должно быть .rsrc.

    Значки могут быть в kcns формате ресурса, который является новым для Mac OS X и совпадает с icns форматом значка, или в более старом kcs#/kcs4/kcs8 формат, используемый на Mac OS 9. Если никакие ресурсы значка не будут присутствовать, то клавиатура будет иметь универсальный значок в меню ввода и в Международных Предпочтениях.

    Для использования Mac OS 9 чемоданов клавиатуры добавьте расширение файла .rsrc.

  2. Локализованный пакет чемодана клавиатуры

     Roman.bundle/
            Contents/
                Info.plist
                Resources/
                    MyLayouts.rsrc
                    English.lproj/
                        InfoPlist.strings
                version.plist
     InfoPlist.strings file contents:         "U.S." = "U.S.";         "Australian" = "Australian";         "Austrian" = "Austrian";         ...

    Info.plist и version.plist файлы следуют стандартным соглашениям пакета. Идентификатор пакета должен принять форму com.apple.keyboardlayout.name.

    MyLayouts.rsrc файл (который может иметь любое имя, но должен иметь расширение .rsrc) содержит наборы KCHR, uchr, itlk, kcns, kcs#, kcs4, и kcs8 ресурсы.

    Файл ресурсов может иметь одну или более клавиатур в нем; значки что касается формата 1. Имена раскладки клавиатуры могут быть локализованы через InfoPlist.strings файл в различном .lproj папки. Нелокализованный ключ (левая сторона) совпадет с именем ресурса клавиатуры в Unicode, а не его собственном кодировании. Например, римлянин KCHR ресурс имел бы свое имя ресурса в Макрочеловеке, но ключ InfoPlist.strings файл должен быть эквивалентным Unicode.

    Этот формат поддерживает ресурсы в ветви данных только.

  3. Определение клавиатуры XML

    Это должно быть допустимым текстовым XML-файлом после спецификации позже в этом документе и должно иметь расширение .keylayout. Как обсуждено ниже, имя всегда находится в Unicode, но это не может быть локализовано.

    Mykeyboard.keylayout

    После установки клавиатура XML станет доступной в области Input Menu Международных Предпочтений, если ни с какими ошибками не встретились в компиляции его. Если будет ошибка в файле, то сообщение об ошибке будет записано в console.log, снабженный префиксом «uchr XML компилятор». Если ошибка является синтаксической ошибкой XML, строка в файле, где ошибка произошла, дана. Обычно, только первая ошибка, с которой встречаются, диагностирована, и парсинг прерывается.

    С тех пор console.log когда Вы выходите из системы и входите в систему, чтобы видеть сообщения об ошибках, вынудить клавиатуру скомпилировать путем открытия International Preferences и переключения на область Input Menu, стирается. Если дата модификации каталога изменилась, запуск приложения и ввода также вынудит все клавиатуры скомпилировать. Если клавиатура не появляется в Международных Предпочтениях, можно тогда зарегистрироваться console.log для сообщений об ошибках. Чтобы вынудить дату модификации на каталоге измениться, можно использовать Unix touch команда.

    Клавиатуры в этом формате могут иметь дополнительный связанный файл значка в стандарте icns формат; это имеет то же имя как файл клавиатуры с расширением .icns:

    Mykeyboard.icns

    Если этот файл будет отсутствовать, то клавиатура будет иметь универсальный значок в меню ввода и в Международных Предпочтениях.

  4. Локализованный пакет клавиатуры XML

     MyKeyboards.bundle/
            Contents/
                Info.plist
                Resources/
                    MyKeyboard1.keylayout
                    MyKeyboard1.icns
                    MyKeyboard2.keylayout
                    MyKeyboard2.icns
                    English.lproj/
                        InfoPlist.strings
                    version.plist
     InfoPlist.strings file contents:         "MyKeyboard1" = "MyKeyboard1";         "MyKeyboard2" = "MyKeyboard2";

    Этот формат поддержки локализовал имена для клавиатур XML. Пакет может содержать многократные XML-файлы, заканчивающиеся в .keylayout. Локализация что касается формата 2 выше. .icns файл является дополнительным для каждой клавиатуры; если это отсутствует, клавиатура имеет универсальный значок в меню ввода и в Международных Предпочтениях.

Остальная часть этого документа обсуждает новый формат данных клавиатуры XML.

DTD XML

Клавиатуры XML должны следовать за DTD XML (Определение типа документа) ниже:

<!-- Overall structure -->
<!ELEMENT keyboard (layouts+, modifierMap+, keyMapSet+, actions*, terminators*)>
<!ATTLIST keyboard group NMTOKEN #REQUIRED >
<!ATTLIST keyboard id NMTOKEN #REQUIRED >
<!ATTLIST keyboard name CDATA #REQUIRED >
<!ATTLIST keyboard maxout NMTOKEN #IMPLIED >

<!-- Hardware layout elements -->
<!ELEMENT layouts (layout+) >
<!ELEMENT layout EMPTY >
<!ATTLIST layout first NMTOKEN #REQUIRED >
<!ATTLIST layout last NMTOKEN #REQUIRED >
<!ATTLIST layout modifiers IDREF #REQUIRED >
<!ATTLIST layout mapSet IDREF #REQUIRED >

<!-- Modifier descriptions -->
<!ELEMENT modifierMap (keyMapSelect+) >
<!ATTLIST modifierMap id ID #REQUIRED >
<!ATTLIST modifierMap defaultIndex NMTOKEN #REQUIRED >

<!ELEMENT keyMapSelect (modifier+) >
<!ATTLIST keyMapSelect mapIndex NMTOKEN #REQUIRED >

<!ELEMENT modifier EMPTY >
<!ATTLIST modifier keys CDATA #REQUIRED >

<!-- Keyboard mapping -->
<!ELEMENT keyMapSet (keyMap+) >
<!ATTLIST keyMapSet id ID #REQUIRED >

<!ELEMENT keyMap (key+) >
<!ATTLIST keyMap index NMTOKEN #REQUIRED >
<!ATTLIST keyMap baseMapSet IDREF #IMPLIED >
<!ATTLIST keyMap baseIndex NMTOKEN #IMPLIED >

<!ELEMENT key (action*) >
<!ATTLIST key code NMTOKEN #REQUIRED >
<!ATTLIST key output CDATA #IMPLIED >
<!ATTLIST key action IDREF #IMPLIED >

<!-- Actions (state records) -->
<!ELEMENT actions (action+) >
<!ELEMENT action (when+) >
<!ATTLIST action id ID #IMPLIED >

<!ELEMENT when EMPTY >
<!ATTLIST when state NMTOKEN #REQUIRED >
<!ATTLIST when through NMTOKEN #IMPLIED >
<!ATTLIST when output CDATA #IMPLIED >
<!ATTLIST when multiplier NMTOKEN #IMPLIED >
<!ATTLIST when next NMTOKEN #IMPLIED >

<!-- Terminators -->
<!ELEMENT terminators (when+) >

Структура XML-файла

Описание раскладки клавиатуры является стандартным XML-файлом, и так следует за спецификацией XML. Кодирование текстового файла должно быть Unicode, или UTF-8 или UTF-16. Это - хорошая идея иметь обоих xml и DOCTYPE директивы в начале файла, для ясной идентификации его:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE keyboard SYSTEM "file://localhost/System/Library/DTDs/KeyboardLayout.dtd">

<клавиатура> Элемент

Высокоуровневый элемент <keyboard>. <keyboard> имеет следующие атрибуты, все из которых требуются:

Табличные 1  атрибуты элемента клавиатуры

группа

Раздел меню клавиатуры, в котором должно появиться это расположение. Прямо сейчас это - код сценария. Клавиатуры Unicode имеют код сценария 126.

ID

Уникальный идентификатор для клавиатуры. Прямо сейчас это является числовым, и должно соответствовать пакет сценария, указанный в «группе». Клавиатуры Unicode имеют отрицательный IDs. Если этот ID столкнется с той из другой клавиатуры, то система присвоит новый ID. Посмотрите дальнейшее обсуждение ниже.

имя

Имя клавиатуры, для появления в Меню Клавиатуры. Это находится в любом кодировании самого файла клавиатуры, находится в (например, UTF-8 или UTF-16), не кодирование, соответствующее сценарию клавиатуры. Обратите внимание на то, что это имя не может быть локализовано, но возможно локализовать имена клавиатур с помощью механизма пакета.

Следующий атрибут является дополнительным:

maxout

Максимальное количество значений UTF-16, которые могут быть сгенерированы от одного нажатия клавиши.

Элемент клавиатуры должен содержать точно один <layouts> элемент, один или больше <modifierMap> элементы, один или больше <keyMapSet> элементы, дополнительное <actions> элемент и дополнительное <terminators> элемент.

Клавиатуры Unicode (uchr или XML) могут быть разделены на два класса. Первые являются связанными с определенным кодом сценария Mac OS. Эти клавиатуры должны обычно только генерировать строки Unicode, которые могут быть преобразованы в кодирование, связанное со сценарием. Сценарии (и связанные коды) поддерживаемый в Mac OS X римские (0), японский язык (1), Упрощенный китайский (25), Традиционные китайцы (2), корейский язык (3), Кириллица (7), и житель Центральной Европы (29); нет никаких планов поддерживать любые другие сценарии. Этот тип клавиатуры доступен и Unicode и не-Unicode (WorldScript) приложения.

Для клавиатуры, связанной со сценарием возможно генерировать строки Unicode, которые не могут быть преобразованы в связанное кодирование. Это имеет недостаток, что такие строки заставят вопросительные знаки (?) появляться в приложениях не-Unicode. Например, японский метод ввода Kotoeri может генерировать любой символ Unicode, но символы вне Макджэпэнезе только поддерживаются в приложениях Unicode.

Второй класс клавиатур генерирует символы Unicode, не связанные с любым из упомянутых выше сценариев. Такие клавиатуры только доступны приложениям Unicode и имеют отрицательные значения идентификаторов. Они должны быть присвоены группе 126.

Хорошее эмпирическое правило в решении, связать ли клавиатуру с кодом сценария или не - соответствует ли «типичный» текст, введенный с клавиатурой, полностью в кодировке символов сценария. Лучше быть консервативным, поскольку пользователи испытают затруднения при понимании, почему они добираются? в их приложениях WorldScript.

<разметки> Элемент

<layouts> элемент не имеет никаких атрибутов и содержит один или больше <layout> элементы. Коллективно, эти элементы определяют который <modifierMap> и <keyMapSet> элементы управляют отображением ключей для определенных аппаратных клавиатур.

<layout> элемент, который является физически первыми средствами управления отображение клавиатур, IDs которых не содержится в диапазоне IDs ни для кого <layout> элемент.

Apple отобразит новые аппаратные средства клавиатуры IDs на один из существующих, таким образом, будет обычно достаточно скопировать и вставить все <layouts> элемент от существующей раскладки клавиатуры.

<расположение> Элемент

<layout> элемент является пустым элементом (т.е. он не имеет никаких подэлементов и записан в пустой форме: <layout />). Это определяет который <modifierMap> и <keyMapSet> использовать для определенного диапазона аппаратной клавиатуры IDs. Это имеет следующие атрибуты, все из которых требуются:

Табличные 2  атрибуты элемента макета

сначала

Аппаратными средствами ID первого типа клавиатуры управляет этот элемент.

в последний раз

Аппаратными средствами ID последнего типа клавиатуры управляет этот элемент

модификаторы

Идентификатор <modifierMap> элемента для использования для этого диапазона аппаратных типов клавиатуры.

mapSet

Идентификатор <mapSet> элемента для использования для этого диапазона аппаратных типов клавиатуры.

Пример:

<layouts>
 <layout first="0" last="17" modifiers="commonModifiers" mapSet="ANSI" />
 <layout first="18" last="18" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="21" last="23" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="30" last="30" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="194" last="194" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="197" last="197" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="200" last="201" modifiers="commonModifiers" mapSet="JIS" />
 <layout first="206" last="207" modifiers="commonModifiers" mapSet="JIS" />
</layouts>

<modifierMap> Элемент

<modifierMap> элемент определяет отображение комбинаций модифицирующей клавиши к <keyMap> табличные числа. Элемент содержит один или больше <keyMapSelect> элементы, каждый из которых соответствуют тому <keyMap> таблица.

Существует два требуемых атрибута:

Таблица 3  Требуемые атрибуты modifierMap

ID

Произвольная строка, используемая для идентификации этого <modifierMap> в другом месте (в настоящее время, только в <расположение> элемент). Этот идентификатор должен быть уникальным через все <modifierMap> элементы.

defaultIndex

Табличное число для использования для комбинаций модифицирующей клавиши, явно не указанных никаким <модификатор> элемент в <modifierMap>.

<keyMapSelect> Элемент

Этот элемент определяет набор (ы) модифицирующих клавиш, заставляющих определенную ключевую таблицу отображения быть выбранной. Это содержит один или больше <modifier> элементы, каждый из которых указывает modifer сочетания клавиш. Каждая запись в таблице отображения модификатора, соответствующей одну из указанных комбинаций модифицирующей клавиши, заполнена в этим табличным числом. <keyMapSelect> элементы обрабатываются в последовательности, поэтому если два или больше <keyMapSelect> элементы указывают ту же комбинацию (и) модифицирующих клавиш, более поздние перезапишут более ранние.

Существует тот требуемый атрибут:

Таблица 4  Требуемый атрибут keyMapSelect

mapIndex

Табличное число, запускающееся от 0, на которых комбинациях модифицирующей клавиши, указанных <модификатором> должны быть отображены элементы в этом <keyMapSelect> элементе. Табличные числа должны быть непрерывными и компактными, поскольку конкретная реализация использует массив.

<модификатор> Элемент

Этот элемент указывает один или несколько наборов комбинаций модифицирующей клавиши, которые должны отобразиться на табличное число, указанное во включении <keyMapSelect> элемент. Этот элемент пуст в смысле XML (это записано как <modifier />). Существует тот требуемый атрибут:

Таблица 5  Требуемый атрибут элемента модификатора

ключи

Строка, указывающая одну или более комбинаций модифицирующих клавиш. Строка состоит из один или больше следующих, разделенных пробелом: сдвиг - ключевой сдвиг вправо сдвига влево - ключ сдвига вправо anyShift - Соответствия любой левая или правая опция клавиши Shift - левая функциональная клавиша rightOption - правильная функциональная клавиша anyOption - Соответствия любой левое или правое управление функциональной клавишей - левая Клавиша CTRL rightControl - правильная Клавиша CTRL anyControl - Любая команда Клавиши CTRL - прописные буквы Командной клавиши - клавиша Caps Lock

Присутствие слова означает, что должен быть нажат соответствующий модификатор. Отсутствие слова означает, что не должен быть нажат соответствующий модификатор. Слово, сопровождаемое ? указывает, что состояние модификатора не важно (это может быть или нажато или не нажато). Например, command? средние значения, что этот элемент модификатора выбирает комбинации модифицирующей клавиши с командной клавишей, или нажатой или не нажатый (т.е. состояние командной клавиши не важно).

«Любой» модификатор соответствует комбинации модифицирующей клавиши, где или или оба из левых и правых ключей нажимаются. Например,"anyShift«будет соответствовать комбинации модифицирующей клавиши, где ключ сдвига влево, ключ сдвига вправо, или оба нажимаются; это не будет соответствовать комбинации, где ни один не нажимается».anyShift?» будет соответствовать все комбинации модифицирующих клавиш, где или или обе из клавиш Shift или нажимаются или нет.

Обратите внимание на то, что много аппаратных клавиатур не имеют обеих левых и правых версий модифицирующей клавиши. Является обычно самым безопасным указать modifers с точки зрения «любых» вариантов (anyShift, anyOption, anyControl).

<modifier keys="anyShift? anyOption caps?" />

Эта спецификация будет соответствовать все комбинации модифицирующей клавиши, где или левая или правая функциональная клавиша нажимается (или оба нажимаются), и командная клавиша и левые и правые Клавиши CTRL не нажимаются. Состояние Регистровых клавиш с фиксацией и клавиш Caps Lock не важно.

<modifier keys="caps" /> <modifier keys="command" />

Эта спецификация будет соответствовать все комбинации модифицирующей клавиши, где или клавиша Caps Lock снижается без других модификаторов, или командная клавиша снижается без других модификаторов.

<modifier keys="" /> <modifier keys="anyShift command caps?" > <modifier keys="anyShift? command caps" />

Эта спецификация будет соответствовать комбинации модифицирующей клавиши где

  • Никакие модифицирующие клавиши не снижаются

  • Любая клавиша Shift и командная клавиша снижаются, и управление и опция закончились.

  • Клавиша Caps Lock и командная клавиша снижаются, и управление и опция закончились.

<keyMapSet> Элемент

Этот элемент собирает ряд таблиц, использующихся для отображения от нажатий клавиш до результатов. Обычно существует набор того для каждого класса аппаратной клавиатуры. Так как клавиатура ISO, используемая в Европе, может быть обработана с тем же расположением как клавиатура ANSI, используемая в США, оставляющих ANSI и JIS (используемыми в Японии) как два класса, которые должны быть обработаны.

Этот элемент содержит один или больше <keyMap> элементы, каждый из которых указывает определенное отображение от кодов виртуальной клавиши до результатов. Обычно будет одна такая таблица для каждой соответствующей комбинации модифицирующих клавиш.

Существует тот требуемый атрибут:

Таблица 6  Требуемый keyMapSet атрибут элемента

ID

Строка, служащая идентификатором для этого keyMapSet, когда ссылается откуда-либо в XML-файле. Этот идентификатор должен быть уникальным через все keyMapSet элементы.

<контурная карта> Элемент

Этот элемент указывает определенное отображение от кодов виртуальной клавиши до результатов. Это содержит один или больше <key> элементы, указывающие, что сделать, когда получен определенный код виртуальной клавиши. Размер получающейся таблицы отображения определяется самым большим кодом виртуальной клавиши, указанным любой таблицей в keyMapSet; неуказанные записи заполнены нулевыми результатами (они ничего не делают, другими словами). Существует требуемый тот и два дополнительных атрибута:

Таблица 7  Требуемые атрибуты элемента контурной карты

индекс

Табличное число. На это ссылаются от <keyMapSelect> элемента.

baseMapSet

Идентификатор основного набора карты, содержащего <контурная карта>, элементом которой этот элемент является модификацией. <ключевые> записи в элементе тока переопределяют записи от указанной основы <контурная карта> элемент. Виртуальная клавиша кодирует не переопределенный, копируются с основного элемента. Если этот атрибут присутствует тогда, атрибут baseIndex должен также присутствовать.

baseIndex

Табличное число <контурная карта> элемент в <keyMapSet> указано baseMapSet. <ключевые> записи в элементе тока переопределяют записи от указанной основы <контурная карта> элемент. Виртуальная клавиша кодирует не переопределенный, копируются с основного элемента. Если этот атрибут присутствует тогда, атрибут baseMapSet должен также присутствовать.

Обычно baseMapSet и baseIndex используются для обеспечения переопределений для своего рода аппаратной клавиатуры. Самое частое использование должно обеспечить различия между раскладкой клавиатуры ANSI и раскладкой клавиатуры JIS, например:

<keyMapSet id="JIS">     <keyMap index="0" baseMapSet="ANSI" baseIndex="0">     (overrides of ANSI layout for JIS keyboards)

<ключевой> Элемент

Этот элемент указывает, что сделать, когда получен определенный код виртуальной клавиши. Элемент может быть пустым или непустым; если действие указано встроенное, это только непусто.

Следующий атрибут требуется:

Таблица 8  Требуемый атрибут основного элемента

код

Десятичное число кода виртуальной клавиши, который отображает этот <ключевой> элемент. Это число должно быть уникальным через все <ключевые> элементы в детали <контурная карта> элемент. (Вы не можете отобразить тот же ключ в двух различных путях.)

Это предназначается, что в некоторый момент именованные сущности будут доступны для указания кодов клавиши, но это еще не реализовано.

<key> элемент принимает одни из трех различных форм:

  1. <key code="virtualkeycode" output="string" />

    Когда данный код виртуальной клавиши получен, указанная строка значений UTF-16 безусловно выводится. Строка должна иметь по крайней мере одну кодовую точку UTF-16 и может содержать любой символ, законный в значении атрибута XML. Буквенные символы не ограничиваются ASCII, и так как XML-файлы самостоятельно кодируются в Unicode, много символов могут быть введены непосредственно.

    Скалярные значения Unicode могут быть указаны с помощью объекта цифрового символа XML, или в десятичном или в шестнадцатеричном. Скалярные значения Unicode вне Плоскости 0 указаны единственным объектом цифрового символа, не два; это преобразовывается в два значения UTF-16 (суррогатная пара). Символы, которые недопустимы в XML ( < и ", и значения управления C0 среди других), должен быть указан через объект цифрового символа. Именованные сущности не поддерживаются.

    Пример:

    <key code="0" output="“Wow!&#8594;&#x2000B;”" />

    Когда виртуальная клавиша 0 («a» на раскладке клавиатуры США) поражена, строка Unicode, этот <ключевой> элемент указывает это:

    “Wow!

    сопровождаемый U+2192 RIGHTWARDS ARROW сопровождаемый U+2000B (плоскость 2 идеограммы, представленные суррогатной парой) сопровождаемый

    ”

    выводится. Вся строка UTF-16 в шестнадцатеричном числе:

    201C 0057 006F 0077 0021 2192 D840 DC0B 201D
  2. <key code="virtualkeycode" action="name" />

    Когда данный код виртуальной клавиши получен, именованное действие выполняется. Действия указаны через <actions> элемент; посмотрите ниже.

  3. <key code="virtualkeycode">     <action>         (an anonymous action)     </action> </key>

    Когда данный код виртуальной клавиши получен, сингл <action> элемент в <key> элемент выполняется. Результат совпадает с если <action> элемент был указан в <actions> элемент и именуемый по имени как во второй форме, выше. Обратите внимание на то, что на анонимные действия, указанные таким образом, не может сослаться кратное число <keyMap> таблицы, кроме через механизм копирования (baseMapSet и baseIndex).

<действия> Элемент

<actions> элемент является дополнительным. Может быть самое большее один на XML-документ. Это содержит один или больше <action> элементы, указывая назвали действия, которые могут именоваться от <key> элементы.

<действие> Элемент

<action> элемент указывает ряд действий для взятия на основе текущего состояния конечного автомата. Это указано один или больше <when> элементы, каждый из которых указывает одно или более состояний и действие для взятия, когда действие выполняется и соответствия текущего состояния. Существует один атрибут:

Табличный 9  атрибут элемента действия

ID

Произвольная строка, идентифицирующая это действие. Это должно быть уникально через весь <действие> элементы.

Атрибут ID должен присутствовать если <action> происходит в <actions> элемент, и не должен присутствовать если <action> внутри a <key> элемент.

<когда> Элемент

Когда конечный автомат находится в состоянии particlar или наборе состояний, этот элемент указывает определенный результат. Существует несколько вариантов этого элемента; все пусты. Атрибуты:

Таблица 10  , когда элемент приписывает

состояние

Требуемый. Это указывает состояние, в котором должен быть конечный автомат для <когда> элемент для применения. Состояние может быть произвольной строкой, десятичным числом или специальной строкой «ни один», указав основное (начальное) состояние. Если <когда> элемент указывает диапазон, это - начало диапазона, когда это должно быть число. <Когда> указание элемента утверждают, «ни один» не должен быть первым во включении <действие>.

через

Дополнительный. <Когда> элемент указывает диапазон состояний, а не единственного состояния. Должно быть десятичное число. Если опущено, единственное состояние указано.

затем

Дополнительный. Если настоящее, указывает следующее состояние для ввода. Если то <когда> элемент указывает диапазон, должно быть десятичным числом. Значения по умолчанию, чтобы не утвердить ни один (т.е. возвратиться к значению по умолчанию, базируйте состояние).

вывод

Дополнительный. Если настоящее, строка для испускания. Если то <когда> элемент указывает диапазон, должно быть единственной кодовой точкой UTF-16. Значения по умолчанию ни к какому выводу.

множитель

Дополнительный. Десятичное число между 1 и 255. <Когда> элемент должен указать диапазон. Различие между состоянием ввода и запуском диапазона (указанный атрибутом состояния) умножается на это число, затем добавило к следующему числу состояния и/или значению вывода UTF-16.

Компилятор автоматически присвоит числа именованным состояниям; на числа состояния можно также сослаться непосредственно. Числа, присвоенные компилятором именованным состояниям, будут больше, чем какое-либо число, на которое ссылаются непосредственно, таким образом, названный состояниями и пронумерованными состояниями будут всегда отличны. Если самое высокое число состояния, на которое ссылаются непосредственно, является достаточно большим, что существует недостаточно допустимых чисел состояния, оставленных присваиваться к именованным состояниям, ошибка происходит.

Лучше думать о <when> элемент с точки зрения двух отличных форм:

  1. <when state="id" [next="id"] [output="string"] />

    Эта форма указывает дополнительное следующее состояние и дополнительную выводимую строку. Один из них должен присутствовать. Это - безусловно самая частая форма.

    Посмотрите пример после описания <terminators> элемент для лучше понимания этой формы.

  2. <when state="first" [through="last"] [multiplier="number"] [output="char"] [next="next"] />

    Эта форма указывает, что, когда состояние ввода между (содержащим) первым и последним, что следующее состояние должно быть (вводит сначала) *multiplier+next, и/или выходной символ должен быть (введите сначала), *multiplier+char.

    Эта форма используется для клавиатур, генерирующих большой спектр символов с последовательными значениями. Примеры включают Шестнадцатеричную клавиатуру Unicode или клавиатуру, генерирующую корейский хангул.

    См. «Ввод Unicode Поддержки» и Шестнадцатеричный XML-файл раскладки клавиатуры Unicode для лучше понимания этой формы.

<разделители> Элемент

Этот элемент является дополнительным, и может появиться самое большее один раз в файле. Это содержит серию <when> элементы, указывающие, что сделать, когда никакое действие не соответствует текущее состояние. Каждый <when> элемент может указать только единственное состояние и выводимую строку. Следующее состояние не может быть указано. Если существует нет <when> элемент для определенного состояния, значение по умолчанию должно возвратиться к основному состоянию (по умолчанию).

Полный пример мертвой клавиши

Вот выборка от раскладки клавиатуры, показывающей, как указать комбинацию мертвой клавиши, обрабатывающую e острый (é). Это принимает раскладку клавиатуры США.

В <keyMap> для несмещенной клавиатуры мы имеем:

<key code="14" action="e" />

Это указывает, что, когда код клавиши 14 получен, мы принимаем названные меры "e".

В <keyMap> для функциональной клавиши мы имеем:

<key code="14" action="acute" />

Это указывает, что, когда код клавиши 14 получен с удерживаемой функциональной клавишей, мы принимаем названные меры "acute".

<actions>
    <action id="acute">
        <when state="none" next="acute" />
    </action>
    <action id="e">
        <when state="none" output="e" />
        <when state="acute" output="é" />
    </action>
</actions>
<terminators>
    <when state="acute" output="´" />
</terminators>

Если e вводится один, мы добираемся e. Если опция-e вводится сопровождаемая e, мы добираемся é. Если опция-e вводится сопровождаемая каким-либо другим ключом, мы добираемся ´ один, сопровождаемый тем, что генерирует тот второй ключ.

Обратите внимание на то, что мы также, возможно, указали действия через:

Несмещенный:

<key code="14">     <action>         <when state="none" output="e" />         <when state="acute" output="é" />     </action> </key>

Функциональная клавиша:

<key code="14">     <action>         <when state="none" next="acute" />     </action> </key>

Если те же действия должны появиться больше чем в одном месте, Однако этот подход может стать громоздким. Сбор всех действий в одном месте может помочь сделать файл более читаемым, также.

Полный пример раскладки клавиатуры был бы слишком долог для этих технических замечаний. Посмотрите Шестнадцатеричную Входную клавиатуру Unicode и другие клавиатуры в /System/Library/Keyboard\ Layouts/Unicode.bundle/Contents/Resources/ для полных примеров.

Ссылки



История версии документа


ДатаПримечания
02.10.2009

Исправленная неработающая ссылка, обновленная для отражения изменений в системных раскладках клавиатуры в 10,5

27.09.2002

Новый документ, объясняющий, как определить клавиатуру Unicode через текстовый файл XML.