Ввод символов Unicode

Недавно я собрался встроить какой-нибудь типограф в свой блог. Захотелось писать fine text с классными тире, кавычками-«ёлочками» да правильными пробелами по случаю. Ещё прикалывает «висячая» пунктуация, о которой с такой любовью писал Арт. Лебедев в § 120 своего «Ководства», но это уже фетиш, на который не всегда есть время. Расставить все эти знаки в контексте веб-страниц можно по разному. Я, однако, выйду за рамки WWW, рассмотрев TeX, Emacs, XML, Firefox и X.org.

Юникод

Современный мир подарил нам стандарт Unicode, который позволяет использовать единобразную кодировку для всех языков мира. Среди символов Unicode, помимо букв и знаков из любых современных и исторических видов письменности, есть и разнообразная пунктуация и непечатаемые символы (есть, например, тетраграммы из «Книги Перемен»). И хотя современные программные средства по разному обрабатывают и отображают эти знаки (а иногда и вовсе не поддерживают Юникод), всё же окончательная поддержка Юникода везде неотвратима (хотя и существуют проблемы с принятием Юникода в ряде культур, например, Японии).

В частности, в секции «General Punctuation» в списке символов Unicode определяются и все мыслимые и немыслимые кавычки, различные пробелы, знаки табуляции, переноса и прочая, и прочая, и прочая.

Например, интересен символ «мягкого» переноса — «soft hyphen» aka «SHY» (то есть, «скромный»). Он предназначен для обозначения места, где можно разорвать слово при отображении и поставить знак переноса. Он весьма посредственно поддерживается браузерами. Для больших славных текстов его можно использовать (для быстрых записей в блог расставлять мягкие переносы — слишком).

А ещё в секции «Mathematical symbols» описано множество математических символов. ∀ε>0: ∃ω: ω×ε=1337.

Способы ввода «красивых символов»

Реальность же такова, что без дополнительных усилий с клавиатуры из всего типографического юникодного блаженства можно ввести лишь знаки дюйма " (в Юникоде в секции «ASCII punctuation» этот знак определяется как «neutral (vertical) quotation mark»), апостроф ’ и значок акцента ` aka «backtick». Это всё машинописное наследие.

TeX

Справедливости ради стоит отметить, что в TeX уже несколько десятков лет есть отличные отточенные шрифты, немыслимые возможности для создания красивых формул, ну и красивые кавычки, тире и всё такое. С его помощью очень удобно создавать прекрасные тексты для бумаги. Пишите диссертации, доклады и письма в TeX! Современный XeTeX позволяет использовать разнообразные символы Unicode в документах напрямую, были бы нужные глифы в шрифте; в обычном LaTeX, к примеру, нужно добавлять в преамбулу \usepackage[utf8x]{inputenc}.

Windows

В Виндоус исторически можно зажимать Alt и вводить цифровой код символа. Только помнить цифровые коды всех интересующих символов — тупо, немнемонично и лишняя нагрузка на мöзг. В современых операционных системах также есть разнообразные «Таблицы символов», только их очень долго использовать.

XML

В XML (а следовательно и в XHTML) можно использовать мнемоничные XML-сущности типа λ для греческой „λ“ или — для длинного m-тире „—“. Они покрывают значительное количество интересных Unicode-символов. Только вот код с их использованием очень плохо читается.

Лучше сразу вводить Юникодные символы.

Emacs

Есть условия для этого в Emacs, где ввод, например, C-x 8 < даёт кавычку-ёлочку « (общая схема такова: C-x 8 [мнемоника], хотя можно и на что-то более удобное биндинг переопределить). В nxml-mode подсвечиваются неразрывные пробелы, условно показываются места «мягких» переносов:

nxml-mode

Подробнее о вводе Unicode-символов в Emacs можно прочитать на домашней странице Xah Lee.

Инструменты для WWW

Но набирать текст в Emacs и копировать его в браузер не хотелось, а в w3m, для которого у Emacs есть интерфейс, я постоянно не сижу.

Нынче модны встраиваемые в CMS автоматические типографы. Я рассматривал «Типограф» Лебедева, Jevix, Devanagari, но что-то ни один не устроил. То настройки не те, то с Markdown не дружит. Да и вообще, отложенная и автоматизированная обработка меня не устраивала. Когда у меня в тексте записи приведён исходный код с обычными знаками " — типографы бессовестно «облагораживают» их, превращая в «красивые» кавычки. Единственное, для чего мне хотелось бы их использовать — для расстановки неразрывных пробелов вокруг вспомогательных частей речи (предлогов, союзов, частиц) в тексте. Делать это руками — некошерно.

Кроме того, хотелось использовать правильные символы не только на страницах своего сайта, но и вообще over the Net.

Короче, стал искать что-то ручное, но удобное.

abcTajpu

И нашёл: расширение abcTajpu для Firefox. Предназначено для многоязыкового ввода в браузере. Изначально предоставляет что-то вроде встроенной таблицы символов в отдельном окне и в контекстных меню. Но самое удобное в нём — возможность использования мнемоничных сочетаний символов для ввода нестандартных знаков, сходно с Emacs, по общей схеме [мнемоника] [INS] ([INS] — кнопка «Insert», можно поменять на другую), например:

  • a:[INS] даёт ä
  • l[INS] даёт λ
  • –[INS] даёт — (m-тире)

Встроенные биндинги (их список есть на домашней странице проекта) уже достаточно удобны и аналогичны тем, что приняты в LaTeX для ввода тире и кавычек. И вообще такая схема ввода нестандартных символов очень удобна. По работе напоминает механизм аббревиатур в Emacs.

Есть также сокращения ALT-F2 для быстрого добавления различных диакритических знаков.

Более того, всё это легко дополняется своими сочетаниями (например, ББ для », чтобы не переключать раскладку при наборе русским).

Короче, abcTajpu для Firefox — славное подспорье. Плюс в том, что работает везде, где есть Firefox (впрочем, с Emacs ситуация такая же).

Compose Key

Самое лучшее средство обнаружилось под носом. Я не сразу наткнулся на него, однако это в итоге оказалось наилучшим решением. X.org позволяет вводить различные Юникодные символы, используя клавишу «Compose» (обычно она назначается на одну из кнопок «Windows») и, опять же, простые мнемоники: нажимается сначала Compose, потом вводится соответствующее сокращение, например:

  • [CMP] > > даст »

  • [CMP] + - даст ±

  • [CMP] O C [CMP] O R даст © ®

  • [CMP] p ! [CMP] s o даст ¶ §

  • [CMP] - - - даст — (m-тире)

  • [CMP] [пробел] [пробел] даст неразрывный пробел

  • 1 [CMP] : - 2 [CMP] ^ 2 = [CMP] 1 4 даст 1÷2²=¼

Полный список Compose-сокращений лежит в файлах используемой системной локали; у меня он находится в /usr/share/X11/locale/ru_RU.UTF-8/Compose. Большой: около 5600 строк, по одной на каждое сочетание (для многих символов есть по нескольку сочетаний). В целом, все сочетания «разумные» и вводить удобно.

Список доступных сокращений можно пополнить, дописав свои желаемые сочетания в файл ~/.XCompose:

include "/usr/share/X11/locale/en_US.UTF-8/Compose"

<Multi_key> <slash> <equal>     : "≠" U2260 # NOT EQUAL TO
<Multi_key> <equal> <slash>     : "≠" U2260 # NOT EQUAL TO
<Multi_key> <apostrophe> <apostrophe> : "́" U0301 # COMBINING ACUTE ACCENT
<Multi_key> <minus> <greater> : "→" U2192 # RIGHTWARDS ARROW
<Multi_key> <less> <minus> : "←" U2190 # LEFTWARDS ARROW
<Multi_key> <equal> <greater> : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW

Включается клавиша Compose следующим образом:: в /etc/X11/xorg.conf нужно отыскать секцию "Input Device", отвечающую настройкам клавиатуры, и в значении опции XkbOptions дописать compose:lwin (вместо lwin можно использовать и другие кнопки типа ralt и т. д.). У меня вся строка приняла вид:

Option "XkbOptions" "grp:caps_toggle,grp_led:caps,compose:ralt"

В сервере X.org начиная с версии 1.5 конфигурирование устройств ввода осуществляется через .fdi-файл системы HAL, в котором соответствующая строчка запишется следующим образом:

<merge key="input.x11_options.XkbOptions" type="strlist">grp:caps_toggle</merge>
<append key="input.x11_options.XkbOptions" type="strlist">grp_led:caps</append>
<append key="input.x11_options.XkbOptions" type="strlist">compose:ralt</append>

Подробности см. в статье по этому поводу.

Этого может не хватить для полноценной работы Compose в Gtk-приложениях: Gtk+ по умолчанию использует свой метод ввода; чтобы использовался стандартный иксовый метод, нужно установить переменную окружения GTK_IM_MODULE в значение xim (X Input Method); в Gentoo можно сделать это в одном из файлов в /etc/env.d:

$ sudo echo "GTK_IM_MODULE=xim" >> /etc/env.d/50gtk2

И в Gtk-шных прогах заработают все Compose-сочетания.

Я надеюсь, у вас установлены Юникодные шрифты.

git.md