Генерация символов, отсутствующих на стандартной клавиатуреНа этой странице описан способ генерации произвольных символов с использованием механизма макросов в программах Notepad++ и OpenOffice. Notepad++После долгих поисков еще простой, но функционально достаточной программы для обработки текстовых файлов, я остановился на Notepad++ (http://notepad-plus.sourceforge.net/). Эта программа обладает некоторыми возможностями для расширения функциональности, в том числе с помощью макросов. Для тех, кто пишет тексты, содержащие символы разных кодировок, может оказаться важной и возможность создания текстовых файлов в формате UTF-8 или Unicode-16. Такой файл, оставаясь сугубо текстовым, то есть не содержа элементов форматирования (кроме стандартных: абзац и табулятор), может одновременно использовать символы разных кодовых страниц, например, кириллицу и умлауты. Причем и те и те будут правильно отображаться. Макросы создаются с помощью команд, находящихся в меню «Macro». Процесс записи макроса носит интуитивный характер. Имя макроса и – факультативно – комбинация «горячих» клавиш отображаются в нижней части списка команд меню. Макросы записываются в файл «shortcuts.xml», который может быть отредактирован вручную. Структуру макроса лучше всего пояснить на примере. Макрос для вставки знака параграфа (номера строк добавлены здесь):
(1) <Macro name="paragraph" Ctrl="no" Alt="no" Shift="no" Key="0"> В строчке (1) можно/нужно указать имя макроса (name=""), в том виде, как оно будет отображаться в меню, а также активировать клавиши, используемые в комбинации: Ctrl, Alt, Shift. Key="" содержит номер знаковой клавиши, используемой для вызова макроса. При Key="0" комбинация «горячих» клавиш не назначается и выбор данной команды может производиться исключительно через меню. Допустимые номера в Key="" (как минимум отчасти) совпадают с десятичными номерами символов в ASCII. Так номера 48..57 соответствуют клавишам с цифрами 0..9; 65..90 – буквам A..Z. Выбранная вами комбинация, однако, не будет активирована, если такая комбинация уже используется самой программой. Например, если комбинация Ctrl+P закреплена для позиции меню Print, то вставки знака параграфа с ее помощью будет невозможна. Переназначение «горячих» клавиш можно произвести в «Settings-> Shortcut Mapper...». В строчке (2) нас интересует код символа, содержащийся в sParam="§". В данном случае это «A7»(шестнадцатерично) или «167»(десятично), что соответствует в кодировке ISO 8859-1 и Windows знаку параграфа «§». Таким образом можно вставлять символы с номерами 0..255 (00..FF). Однако значение символов с номерами 128..255 может зависеть от выбранной кодовой страницы; для знака параграфа и некоторых других, это, однако, в большинстве случаев значения не имеет, а вот для кириллицы или умлаутов совсем напротив.
Для того, чтобы отображать умлауты с русской ОС (без дополнительной перенастройки) или наоборот, а также для одновременного отображения символов разных алфавитов необходимо многобайтовое кодирование, то есть вставка нескольких байт вместо одного. В системе UTF-8 символы с номерами 0..127 остаются однобайтовыми, их коды совпадают с кодами ASCII. Символы, которые в ANSI оказываются во второй половине (128..255), кодируются двумя байтами. Сюда попадает кириллица и специфические символы национальных европейских алфавитов (немецкий, французский, испанский и т.д.). Подробнее про UTF-8 можно посмотреть, например: http://en.wikipedia.org/wiki/UTF-8 (англоязычные версии статей отличаются большей полнотой). Для написания макросов вручную полезна информация о кодах UTF-8: Например, мы хотим генерировать с помощью комбинации Alt+C знак французского алфавита «ç» (ц седиль строчная). В строке (1) мы указываем отображаемое имя макроса, ставим Alt="yes", и номер клавиши Key="67". Не забываем отключить комбинацию Alt+C, если она уже используется программой. Далее мы ищем по таблицам описание нужного знака и находим следующее:
Нас интересует столбик UTF-8, содержащий значение «C3 A7». Первое число «C3» должно быть вставлено в команде (2), а второе число – «A7» – в команде (3). Итого получаем:
(1) <Macro name="c cedille: UTF-8" Ctrl="no" Alt="yes" Shift="no" Key="67"> Для того, чтобы седиль и умлауты действительно отображались, в меню Format должно быть выбрано UTF-8 (или аналогичное, если вы знаете, почему). Пример файла «shortcuts.xml», содержащего команды для генерации знака параграфа, франко-русских кавычек (все три в кодировке ANSI) и специфических знаков немецкого алфавита (UTF-8). OpenOfficeOpenOffice (http://www.openoffice.org/) является бесплатной и в чем-то даже лучшей альтернативой пока еще самому распространенному редактору текстов. Для расширения функциональности в OpenOfficе может использоваться механизм макросов на основе встроенного варианта языка BASIC – StarBASIC. На практике первый макрос лучше записать с использованием команды «Tools-> Macros->Record Macro». Действия, которые необходимо записать, состоят в выборе команды «Insert->Special Character->[вставка нужного знака]». Полученный макрос будет выглядеть примерно так (номера строк добавлены здесь):
(1) sub a_uml_gross Сгенерированный макрос имеет смысл чуть изменить («Tools-> Macros-> Organize Macros-> OpenOffice.org Basic-> Edit»), а именно убрать или закоментировать строчки (14) и (15), иначе символы будут вставляться с использованием указанного там шрифта. Записывать другие макросы вручную необязательно, достаточно скопировать полученный, изменив в строчке (13) вставляемый символ. Каждый макрос должен, естественно, получить свое уникальное имя, строчка (1). После этого макросам для их вызова могут быть присвоены комбинации «горячих» клавиш либо кнопки тулбаров, в том числе созданных пользователем («Tools-> Customize-> Keyboard/Toolbars»; в диалоге Keyboard список макросов расположен в окне Category, позиция OpenOffice.org Macros; если у вас не установлен JRE и выдается соответствующее сообщение об ошибке, то несколько нажатий на кнопку OK месседж-бокса позволяет преодолеть это препятствие).
| |||||||||||||||||||||||