Перейти к содержанию, на следующую или предыдущую страницу.


Разработка дополнительных методов ввода

Описания методов ввода СОЛУНИ (иначе называемых раскладками) содержатся в стандартных файлах реестра OpenOffice.org (они имеют формат xml и расширение xcu). Информация из этих файлов добавляется в реестр OpenOffice.org всякий раз, когда Вы устанавливаете СОЛУНЬ с помощью утилиты unopkg или средства управления расширениями OpenOffice.org. Впоследствии эта информация легко может быть извлечена при помощи стандартных методов работы с реестром, предусмотренных в API OpenOffice.org. Таким образом, чтобы дополнить СОЛУНЬ новыми методами ввода, Вам необходимо написать собственный файл .xcu по образцу уже имеющихся в дистрибутиве (они находятся в каталоге «InputMethods»), упаковать их вместе с СОЛУНЬЮ, после чего заново установить ее. Если у Вас нет опыта работы с форматом .xcu, обратитесь к руководству разработчика OpenOffice.org.

Каждое описание метода ввода должно соответствовать правилам, заданным в файле InputMethods.xcs. Некоторые из этих правил разъясняются ниже.

Формат описания методов ввода

Поскольку описания методов ввода СОЛУНИ представляют собой стандартные файлы .xcu, они должны содержать корневой элемент oor:component-data со следующими атрибутами:

xmlns:oor="http://openoffice.org/2001/registry" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
oor:name="InputMethods" 
oor:package="org.openoffice.comp.thessalonica"

Параметры oor:name и oor:package означают, что информация из данного файла должна быть помещена в файл реестра OpenOffice.org под названием InputMethods.xcu, после чего к ней можно бужет обращаться по адресу org.openoffice.comp.thessalonica.InputMethods/.

У узла oor:component-data имеется только один потомок, под названием Root. Тот, в свою очередь, может иметь несколько дочерних узлов, каждый из которых содержит описание определенного метода ввода. Рекомендуется помещать каждое такое описание в отдельный файл, хотя при инсталляции пакета OpenOffice.org соединит их все вместе.

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

string Title

Этим свойством задается отображаемое имя для данного метода ввода, предназначенное для пользовательского интерфейса.

string ImageID

Это свойство позволяет задать графический файл, который будет отображаться на панели инструментов СОЛУНИ в то время, как данный метод ввода активен (впрочем, эта возможность не работает в OpenOffice.org 2.1). Имейте в виду, что здесь следует вписывать не URL, который бы указывал непосредственно на файл изображения, а некий идентификатор, соответствующий одному из вхождений раздела Images в файле Addons.xcu (этот файл находится в корневом каталоге пакета СОЛУНЬ и содержит описание различных элементов пользовательского интерфейса, которые должны устанавливаться вместе с пакетом). Таким образом, если Вы создадите новый значок для вашего метода ввода, вам придется редактировать не только файл ее описания, но и Addons.xcu. Конечно, Вы можете также сопоставить Вашему методу ввода один из предопределенных графических файлов (их идентификаторы имеют вид comp.thessalonica.*Image, где вместо символа * следует подставить название системы письменности). Имейте в виду, что необязательно иметь отдельную картинку для каждой раскладки: нет ничего страшного, если несколько методов ввода, разработанных для одной и той же системы письменности (например, греческой) будут использовать одно и то же общее изображение.

boolean ComplexScript

Этим свойством определяется, предназначен ли данный метод ввода для одной из «сложных» систем письменности (к таковым причисляются, в частности, алфавиты с направлением письма справа налево, такие как еврейский и арабский). Данное свойство необходимо потому, что OpenOffice.org использует отдельные наборы показателей форматирования для «западных», «сложных» и «азиатских» систем письменности. По этой причине СОЛУНИ необходима информация о том, следует ли ей устанавливать «западное» или «сложное» форматирование при переключении на каждый конкретный метод ввода.

(node) Format

Этот узел содержит список показателей форматирования, а именно Family (шрифтовое семейство), Bold (полужирный), Italic (курсив), Size (кегль) и Language) (язык), которые будут использоваться по умолчанию при активизации данного метода ввода (обратите внимание, что эти показатели могут соответствовать либо «западному» форматированию, либо форматированию для сложных систем письменности, в зависимости от значения, присвоенного параметру ComplexScript). Конечно, свойствам Bold, Italic и Size в большинстве случаев будет необходимо и достаточно присвоить умолчательное значение (No changes), а вот выбор правильных значений для показателей шрифта и языка может оказаться весьма важным, хотя эти настройки в любом случае могут быть изменены пользователем через диалог управления клавиатурой. При этом необходимо помнить, что:

(node) Rules

Этот узел наиболее важен: здесь должен быть помещен набор правил, согласно которым будут восприниматься сигналы, поступающие с клавиатуры. Синтаксис описания этих правил рассматривается ниже.

Каждое такое правило соответствует одному символу, производимому клавиатурой, который может быть перехвачен СОЛУНЬЮ. Поскольку доступ к узлам правил осуществляется по имени, каждый из них должен иметь уникальное имя, однозначно соответствующее определенному символу Юникода. Поэтому естественным решением был выбор для этих узлов схемы именования, основанной на Adobe glyph list. Однако AGL содержит слишком много имен символов, так что их было бы сложно учесть в сравнительно небольшой программе. По этой причине было решено использовать слегка упрощенную схему, при которой только к символам ASCII можно обращаться по их стандартным именам, в то время как доступ ко всем остальным символам осуществляется по их индексам Unicode с префиксом «uni» (например, «uni0410», «uni1F00»).

Обратите внимание, что в настоящее время не существует ограничений, из-за которых следовало бы оформлять метод ввода таким образом, чтобы он работал поверх стандартной американской (или иной латинской) клавиатуры. Проблема 22546, упоминавшаяся в прежних версиях этого руководства, была успешно разрешена в OpenOffice.org 2.0, так что теперь любые символы Unicode могут быть перехвачены OpenOffice.org и должным образом обработаны СОЛУНЬЮ.

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

string String

Юникодовая строка, которая должна быть вставлена в документ вместо перехваченного СОЛУНЬЮ символа.

string Comment

Всего лишь комментарий, который, подобно любому другому комментарию, призван сделать xml файл более читабельным. Если свойство String содержит единственный символ Unicode, в комментарий естественно поместить полное имя этого символа.

(node) After

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

Таким образом, когда пользователь нажимает определенную клавишу, СОЛУНЬ вначале проверяет, какой символ эта клавиша производит, и задано ли для него какое-либо правило. Если такое правило обнаружено, проверяется наличие в нем блока After. При наличии такого блока СОЛУНЬ выясняет также, какой символ предшествует точке ввода. Если обнаружится, что для этого символа имеется правило в блоке After, символ заменяется строкой, заданной в параметре String этого правила. В противном случае в документ вставляется строка String, заданная в правиле верхнего уровня. Имейте в виду, что каждое правило, заданное в блоке After, может в свою очередь иметь свой собственный набор правил After, и так далее. Таким образом обеспечивается возможность выбрать текст для вставки в документ в зависимости от того, какая именно строка предшествует точке ввода, независимо от ее длины.

Чтобы продемонстрировать использование набора правил After, рассмотрим следующий пример из описания метода ввода GreekBabel:

<node oor:name="quotesingle" oor:op="replace">
   <prop oor:name="String" oor:type="xs:string">
      <value>´</value>
   </prop>
   <prop oor:name="Comment" oor:type="xs:string">
      <value>GREEK OXIA</value>
   </prop>
   <node oor:name="After">
      <node oor:name="uni1FBF" oor:op="replace">
         <prop oor:name="String" oor:type="xs:string">
            <value>῎</value>
         </prop>
         <prop oor:name="Comment" oor:type="xs:string">
            <value>GREEK PSILI AND OXIA</value>
         </prop>
      </node>
      <node oor:name="uni1FFE" oor:op="replace">
         <prop oor:name="String" oor:type="xs:string">
            <value>῞</value>
         </prop>
         <prop oor:name="Comment" oor:type="xs:string">
            <value>GREEK DASIA AND OXIA</value>
         </prop>
      </node>
      <node oor:name="uni00A8" oor:op="replace">
         <prop oor:name="String" oor:type="xs:string">
            <value>΅</value>
         </prop>
         <prop oor:name="Comment" oor:type="xs:string">
            <value>GREEK DIERESIS AND OXIA</value>
         </prop>
      </node>
   </node>
</node>

Согласно этим правилам, когда пользователь нажимает клавишу ['] после густого или тонкого придыхания либо диэрезы, предыдущий символ заменяется сочетанием придыхания или диэрезы с острым ударением. В противном случае (после любого другого символа) острое ударение вставляется в документ само по себе.


Перейти к содержанию, на следующую или предыдущую страницу.