Оригинал фото: pxhere.com/ru/photo/1600961
Обычную часть раскладки я описывал в предыдущей статье. А сейчас расскажу о возможностях, которые превращают раскладку в типографскую: пробелы, тире, кавычки, апострофы, диакритические знаки.
Конечно, подобные раскладки — не новость, и я сначала посмотрел, что уже было разработано до меня. А также прошёлся по национальным раскладкам европейских языков и самим языкам, чтобы узнать, какие у них есть диакритические знаки и нестандартные буквы. Какие применяются кавычки, тире и апострофы. Пришлось также основательно прошерстить таблицу символов Unicode и прочитать текстовую часть стандарта.
Дело осложнялось тем, что клавиатура мне нужна не только для набора текстов, но и для программирования, и для работы в приложениях, требующих использования горячих клавиш.
Поэтому требования получались противоречивые. Одна и та же кнопка должна уметь:
- выдавать разные символы, в зависимости от текущей языковой раскладки
- выдавать один и тот же символ (чаще всего, не соответствующий клавише) независимо от раскладки
- выдавать правильные сочетания (соответствующие клавише) с Alt, Ctrl, Shift, Win
Не говоря уже о том, что в обычных текстах и в текстах программ знаки препинания встречаются с разной частотой. И невозможно расположить их оптимально сразу для всех вариантов использования. Так что пришлось много пробовать и неоднократно переделывать.
Пробелы
Большинству людей достаточно одного пробела — того, который находится на самой большой клавише. Некоторые слышали о пробеле неразрывном. И мало кто догадывается, что пробелов, вообще-то, много.
Чтобы проще было в них разобраться, я сделал табличку (красным цветом — неразрывные варианты).
Шпация — типографский пробельный материал. Его максимальная ширина равна высоте кегля. Это т. н. кегельная или круглая шпация. Относительно неё измеряют ширину шпаций меньшего размера. Круглая также называется «Em space», полукруглая «En space». Хотя ширина букв «M» и «N» обычно немного меньше.
Название в Unicode [ширина в шпациях] | Код | Комбинация клавиш (используются левые Alt/Ctrl/Shift/Win) |
---|---|---|
Парные пробелы (обычный и неразрывный такой же ширины) |
||
Пробел / Space [1/5-1/2 (типично 1/4-1/3)] | U+0020 | Space |
Неразрывный пробел / No-Break Space | U+00A0 | Alt+Space |
Тонкий пробел / Thin space [1/5 (реже 1/6)] | U+2009 | Shift+Space |
Узкий неразрывный пробел / Narrow No-Break Space | U+202F | Alt+Shift+Space |
Пробел нулевой ширины / Zero Width Space | U+200B | Ctrl+Space |
Соединитель слов / Word Joiner | U+2060 | Alt+Ctrl+Space |
Непарный пробел |
||
Самый тонкий пробел / Hair Space [1/10-1/16] | U+200A | Shift+Ctrl+Space |
Специальные виды пробелов |
||
Пробел, равный по ширине цифрам / Figure Space | U+2007 | Alt+Win+Space |
Пунктуационный пробел / Punctuation Space | U+2008 | Ctrl+Win+Space |
Средний математический пробел / Medium Mathematical Space | U+205F | Shift+Win+Space |
Иконка, символизирующая пробел / Open Box /␣ | U+2423 | Alt+Ctrl+Win+Space |
Выглядит таблица страшновато, но основные комбинации запомнить несложно: Alt — неразрывный, Shift — тонкий, Сtrl — нулевой ширины. Shift+Ctrl — промежуточный между тонким и нулевым. Сперва нажимаются модификаторы, затем — пробел.
Возможно, такой вариант будет понятней:
Модификаторы | Ничего | Shift (тонкий) | Ctrl (нулевой) |
---|---|---|---|
Ничего | Space | Thin space | Zero Width Space |
Alt (неразрывный) | No-Break Space | Narrow No-break Space | Word Joiner |
Если хотите узнать, какой пробел когда применять — под спойлером есть несколько ссылок для подробного изучения.
О пробелах
Вот краткая версия:
- неразрывный — после предлогов и союзов; после частицы «не»; перед частицами «бы», «ли», «же»; между числами и единицами измерений (16 кг); после географических сокращений (г. Киев, р. Днепр)
- тонкий — после тире
- узкий неразрывный — в инициалах (Н.Д. Леонтович); внутри сокращений (т. д.); перед тире; разделитель разрядов (12 564 456 байт)
- нулевой ширины — показывает места, в которых можно разрывать строку, не добавляя знак переноса (например, вот здесь он стоит после слешей: Alt/Ctrl/Shift/Win); для предотвращения автоматической замены комбинаций символов ( «:)» не будет преобразовано в ?, если вставить этот пробел между символами); для предотвращения автосоздания ссылок и ников (@sukhe и sukhe, google.com и google.com)
- соединитель слов — нулевой ширины, запрещает разрыв строки в этом месте
- самый тонкий — тонкая подгонка для лучшего отображения текста
- цифровой пробел — при наборе таблиц из цифр (по ширине равен цифре)
- пунктуационный — в таблицах для разделения разрядов (по ширине как точка)
- математический — в формулах: ( α + β )
Кроме вышеуказанных в юникоде есть пробелы, пришедшие прямо из типографского дела. Их я тоже добавил:
CapsLock+1 — Em Space (равен ширине шпации, «круглая шпация»)
CapsLock+2 — En Space (½ шпации, «полукруглая шпация»)
CapsLock+3 — Three-Per-Em Space (⅓ шпации, «третная»)
CapsLock+4 — Four-Per-Em Space (¼ шпации, «четвертная»)
CapsLock+6 — Six-Per-Em Space (⅙ шпации, «шестерная» )
Дефис, минус, тире
С дефисом та же проблема, что и с пробелом: на клавиатуре есть только одна кнопка с подходящим символом (горизонтальной чёрточкой в середине строки). Поэтому её используют в качестве дефиса, минуса и тире (в юникоде он прямо так и называется: «дефис-минус»).
К этому все уже давно привыкли, да и вариантов не было — в ASCII нет отдельного символа для тире. Зато в Unicode он есть! И даже не один.
Название в Unicode | Код | Комбинация клавиш |
---|---|---|
Дефис-минус / Hyphen-Minus | U+002D | — или CapsLock+p или p в режиме NumLock On |
Длинное тире / Em Dash | U+2014 | Space+g |
Среднее тире / En Dash | U+2013 | Space+y |
Two-Em Dash / Двойное тире | U+2E3A | Space+Alt+y |
Three-Em Dash / Тройное тире | U+2E3B | Space+Ctrl+y |
Неразрывный дефис / Non-Breaking Hyphen | U+2011 | Space+t |
Нижнее подчёркивание / Low line | U+005F | _ (Shift+-) или Space+e |
Цифровое тире / Figure dash | U+2012 | Space+Alt+r |
Мягкий перенос / Soft Hyphen | U+00AD | Space+Alt+t |
Horizontal Bar / Горизонтальная линия | U+2015 | Space+Shift+y |
Дефис / Hyphen | U+2010 | никто (?) его не использует |
Дефис маркер списка / Hyphen Bullet | U+2043 | Space+Ctrl+b |
Минус / Minus Sign | U+2212 | RWin+c |
Вот так расположены на клавиатуре пробелы и дефисы-тире-минусы (голубой цвет — на слое Caps, розовый — RWin, остальное — Space):
Если хотите разобраться, когда какую чёрточку применять — под спойлером ссылки для чтения.
Вкратце:
- длинное тире — тире в украинском/русском языках
- среднее тире — в английском (и в укр/рус для диапазонов 1939 –1945)
- двойное тире — заменяет отсутствующую часть слова или всё слово (Mr. J⸺n)
- тройное тире — в списках книг заменяет полностью имя автора (т. е. означет «тот же автор»)
- неразрывный дефис — чтобы не разрывались сочетания «как‑то», «во‑первых» и т. п.
- горизонтальная линия — перед началом прямой речи в английском языке
- нижнее подчёркивание — это обычное подчёркивание (зачем там слово «нижнее»?)
- цифровое тире — употребляется с цифрами (например, в номерах телефонов: 123‒45‒67)
- мягкий перенос — вставляют в длинные слова в тех местах, где можно делать перенос; такой знак переноса будет отображаться только если слово находится в конце строки и не вмещается в неё. Это похоже на пробел нулевой ширины, только с пробелом при разрыве слова не отображается знак переноса. К сожалению, мягкий перенос не все программы правильно понимают. Иногда он обрабатывается как обычный дефис, и тогда слово выглядит вот так: «пе‑ре‑нос»
- дефис маркер списка — прямо в этом списке маркер в виде чёрного кружка, а мог бы быть такой: «⁃» (но на Хабре его нельзя поменять)
О дефисах
Несколько слов о минусе. Он специально сделан так, чтобы соответствовать по стилю остальным знакам арифметических операций. Смотрите, как это выглядит:
Здесь идут по порядку: дефис-минус, среднее тире, длинное тире, цифровое тире, а после знака равно — минус. Заметьте, что у знаков ’равно’, ’минус’, ’плюс’ и ’деление’ одинаковая ширина.
Теперь о длинном тире. По правилам нашей типографики он отбивается от текста тонкими шпациями. Поэтому у меня при нажатии тире вводятся сразу три символа: узкий неразрывный пробел, длинное тире, тонкий пробел. Если вы хотите, чтобы вводился один только пробел — это можно настроить (переменная EmDashWithSpace в скрипте или комбинация CapsLock+Alt+y для оперативного переключения).
Кавычки
Вариантов кавычек очень много. Нет смысла перечислять их все.
С практической точки зрения достаточно иметь английский, немецкий и французский варианты.
В украинском, испанском, португальском и итальянском языках используется комбинация французских и английских кавычек. В русском — французских и немецких.
Впрочем, во многих языках допускается использование альтернативных комбинаций кавычек.
Название в Unicode | Код | Вид | Комбинация клавиш |
---|---|---|---|
Открывающая левая кавычка «ёлочка» / Left Pointing Double Angle Quotation Mark | U+00AB | « | Space+Shift+a |
Закрывающая правая кавычка «ёлочка» / Right Pointing Double Angle Quotation Mark | U+00BB | » | Space+Shift+s |
Одинарная открывающая (левая) французская угловая кавычка / Single Left-Pointing Angle Quotation Mark | U+2039 | ‹ | Space+Shift+q |
Одинарная закрывающая (правая) французская угловая кавычка / Single Right-Pointing Angle Quotation Mark | U+203A | › | Space+Shift+w |
Нижняя одинарная открывающая кавычка / Single Low-9 Quotation Mark | U+201A | ‘ | Space+Shift+e |
Открывающая одинарная кавычка / Left Single Quotation Mark | U+2018 | ‘ | Space+Shift+r |
Закрывающая одинарная кавычка / Right Single Quotation Mark | U+2019 | ’ | Space+Shift+t |
Закрывающая двойная кавычка / Left Double Quotation Mark | U+201C | “ | Space+Shift+f |
Правая двойная кавычка / Right Double Quotation Mark | U+201D | ” | Space+Shift+g |
Нижняя двойная открывающая кавычка / Double Low-9 Quotation Mark | U+201E | „ | Space+Shift+d |
Апостроф (одинарная кавычка) / Apostrophe | U+0027 | ‘ | ‘ |
Двойная кавычка (универсальная) / Quotation Mark | U+0022 | “ | “ (Shift+’) |
Нагляднее будет показать расположение прямо на клавиатуре. Вот все кавычки вместе:
А вот с раскладкой по языкам. Зелёным цветом отмечены наружные кавычки (первичные, primary), голубым — внутренние (вторичные, secondary).
Вместо настоящих кавычек часто используют знак апострофа и универсальную двойную кавычку. Просто потому, что они есть на клавиатуре. Почему бы и нет, если это сообщение в мессенджере или комментарий в коде. Но в статьях и книгах хотелось бы видеть правильные кавычки.
Апостроф и прочие чёрточки
В юникоде есть несколько вариантов апострофа.
Самый употребляемый – «Apostrophe» (U+0027), который находится рядом с Enter. Его часто называют «одинарная кавычка». Или машинописный апостроф, ASCII апостроф, прямой апостроф. А также «programmer’s apostrophe», т.к. он используется в языках программирования.
Почему у него столько названий? Потому, что с его помощью изображали все варианты вертикальных чёрточек, располагающихся в верхней части строки: апостроф, ударение, одинарные кавычки, знак штриха и пр. На пишущих машинках (и в 7-битной кодировке ASCII) просто не было другого варианта.
Точнее, был ещё машинописный обратный апостроф (он же знак побочного ударения, grave accent), который находится на самой левой кнопке в верхнем ряду. Но он настолько бесполезен, что чаще всего применяется в качестве экранирующего символа.
В общем, прямой апостроф лучше использовать только при программировании. А в обычных текстах применять более подходящие варианты.
Для основных языков таких вариантов два:
- апостроф как знак препинания (т.е. разделяет слово на части — don’t, she’s)
- апостроф как буква (является частью слова и не разделяет его на части — об’єм, в'їзд, п’ять)
В первом случае нужно использовать символ «Right Single Quotation Mark» (U+2019), во втором — «Modifier Letter Apostrophe» (U+02BC).
Да, символ 2019 — это не только правая кавычка в английском, но и апостроф во всех (?) рассматриваемых здесь языках.
Для многих будет неожиданностью, что апостроф может служить в качестве буквы. А т. к. U+02BC считается буквой, его можно употреблять в названиях доменов на украинском языке (в отличие от U+2019).
Символ U+02BC называется также «типографский прямой апостроф». Что наводит на мысль о существовании апострофа «непрямого». И такой действительно есть: типографский перевёрнутый апостроф (U+02BB). Он используется, например, в узбекском языке.
Машинописный апостроф заменял также символ «штрих». Этот символ применяется в математике для обозначения производных, для обозначение угловых минут и для обозначения единицы длины «фут». На английском этот символ называется «Prime» и имеет код 2032. Есть также «Double prime» (U+2033) — двойная производная, угловые секунды и дюймы. Тройной штрих используется гораздо реже, а четверной мне вообще никогда не попадался.
Ещё одна широко известная чёрточка — знак ударéния. Его я опишу в следующем разделе.
Название в Unicode | Код | Вид | Клавиша |
---|---|---|---|
Апостроф (одинарная кавычка) / Apostrophe | U+0027 | ‘ | ‘ |
Двойная кавычка (универсальная) / Quotation Mark | U+0022 | “ | “ (Shift+’) |
Апостроф / Grave Accent | U+0060 | ` | ` |
Закрывающая одинарная кавычка / Right Single Quotation Mark | U+2019 | ’ | Space+Shift+t |
Модификатор буквы апостроф / Modifier Letter Apostrophe | U+02BC | ʼ | Space+` |
Модификатор буквы перевернутая запятая / Modifier Letter Turned Comma | U+02BB | ʻ | Space+Shift+` |
Штрих / Prime | U+2032 | ′ | Space+Alt+x |
Двойной штрих / Double Prime | U+2033 | ″ | Space+Alt+c |
Тройной штрих / Triple Prime | U+2034 | ‴ | Space+Alt+v |
Знак повтора / Ditto mark | U+3003 | 〃 | Space+Alt+d |
Знак повтора применяется в перечислениях, где много незначительно отличающихся строк. Т. е. по назначению он напоминает тройное тире. Например:
Сетевой фильтр, 5 розеток 1,8 м
″ ″ , ″ 3,0 м
″ ″ , 6 розеток 1,8 м
В русском языке знак повтора обычно обрамляется по сторонам горизонтальными линиями: «⸺〃⸺». У меня это поведение по умолчанию. Но в скрипте можно изменить настройку, чтобы выводился только знак повтора. Можно также переключать это поведение по нажатию CapsLock+Ctrl+y.
На практике люди часто «не заморачиваются», и ставят вместо Ditto mark всё, что хоть как‑то на него похоже: два апострофа подряд (‘‘ — U+0027), универсальную двойную кавычку (“ — U+0022), закрывающую двойную кавычку (” — U+201D). В некоторых языках вместо ditto mark используют ”»” или ”„”.
Диакритические знаки
В украинском и русском языках букв с диакритическими знаками немного: «й», «і», «ї», «ё». Что позволяет без проблем выделить им отдельные клавиши. Но если посмотреть список латинских букв с диакритикой, можно увидеть, что там полторы сотни строк для одной только буквы «A»! Это больше, чем кнопок на клавиатуре.
Неудивительно, что давно придуман обходной вариант: буквы и диакритические знаки вводятся отдельно и комбинируются программным способом. Для этого часто применяется «механизм мёртвых клавиш». Его смысл состоит в том, что перед вводом нужного символа нажимается так называемая «мёртвая клавиша», которая сама по себе не отображает на экране никакого знака, а только модифицирует последующий символ.
В UNIX-подобных системах для реализации такого поведения используется клавиша Compose. Работает это следующим образом: нажимается Compose, затем клавиша, отвечающая, например, за акут (на экране при этом ничего не отображается), затем буква А — появляется Á. Или Compose, затем клавиша, на которую назначен диерезис, затем О — получается Ö.
В Windows такого нет, поэтому приходится эмулировать. По умолчанию в качестве клавиши Compose я использую клавишу «Menu» (между правыми Win и Ctrl). Но это можно перенастроить (см. главу «Настройка под себя» в конце следующей статьи).
Есть и другой способ ввода, когда диакритические знаки вводятся после нужного символа. У меня это тоже поддерживается (см. ниже).
Диакритические знаки в юникоде имеются в трёх вариантах: комбинируемые с другими символами, обычные некомбинируемые (знаки пунктуации) и некомбинируемые, считающиеся буквами (modifier letter).
Мне нужны (и далее описываются) только комбинируемые с буквами знаки. Так что перед их названиями в таблице мысленно добавьте «Combining» — для краткости я это слово пропустил.
Указанная в таблице клавиша — это клавиша, которая нажимается после Compose, перед символом, к которому будет применён диакритический знак.
Пример | Код | Клавиша | Название Unicode / прочие названия | Примеры языков / описание |
---|---|---|---|---|
à, è, s̀, z̀ | 0300 | ` | Grave Accent / Гравис (тяжёлое ударение) | голландский, норвежский, шведский |
á, é, ć, ń | 0301 | ‘ | Acute Accent / Акут (лёгкое ударение) | чешский, португальский, словацкий |
â, ê, î, ô | 0302 | 6 | Circumflex Accent / Циркумфлекс (облегчённое ударение) | турецкий, румынский, валлийский |
ã, ẽ, ñ, õ | 0303 | ~ | Tilde / Тильда | эстонский, португальский, баскский |
ā, ē, ī, ō | 0304 | - | Macron / Макрон | латышский, литовский |
ă, ĕ, ĭ, ŏ | 0306 | u | Breve / Бреве (бревис, кратка) | румынский, турецкий |
ḃ, ċ, ġ, ż | 0307 | . | Dot Above / Надстрочная точка | литовский, польский, турецкий |
ä, ï, ö, ü | 0308 | : | Diaeresis / Надстрочное двоеточие (умляут, диэрезис) | немецкий, финский, албанский |
å, e̊, g̊, q̊ | 030A | o | Ring Above / Надстрочный кружок | чешский, норвежский, датский |
ő, ű, Ő, Ű | 030B | “ | Double Acute Accent / Двойной акут (венгерский умляут) | венгерский |
Ď, Ť, č, ž | 030С | v | Caron / Карон (птичка над буквой), гачек, háček | сербский, хорватский, боснийский |
ď, ť, ľ, Ľ | 0315 | V | Comma Above Right / Запятая сверху справа, кличка, малый гачек | чешский, словацкий |
ņ, ŗ, ş, ţ | 0326 | , | Comma Below / Подстрочная запятая | латышский, румынский |
ç, ȩ ,m̧, ş | 0327 | c | Cedilla / Cедиль | албанский, каталонский, крымскотатарский |
ą, ę, į, ų | 0328 | ; | Ogonek / Огонэк (c-образный хвостик) | польский, литовский |
ạ, ṛ, ṭ, Ḷ | 0323 | Shift + . | Combining Dot Below / Комбинируемая подстрочная точка | сицилийский, астурийский |
Ơ, ơ, Ư | 031B | h | Combining Horn / Комбинируемый рожок (quốc ngữ) | вьетнамский, джарайский |
Ả, ẻ, Ỏ, ỷ | 0309 | H | Combining Hook Above / Комбинируемый хвостик сверху (dấu hỏi) | вьетнамский |
Ŋ, ŋ | 0321 | j | Combining Palatalized Hook Below / Комбинируемый подстрочный палатальный (нёбный) крючок | саамские языки |
ΐ, ΰ | 0344 | W | Combining Greek Dialytika Tonos / Комбинируемая греческая dialytika (растворяющая) тона | греческий |
Диакритические знаки, которые не всегда комбинируются правильно |
||||
đ, ħ, Ð, ƀ | 0335 | = | Short Stroke Overlay / Короткое горизонтальное перечёркивание | хорватский, джарайский, саамские |
Ħ | 0336 | Shift + = | Long Stroke Overlay / Длинное горизонтальное перечёркивание | мальтийский |
Ł, ł, ð | 0337 | / | Short Solidus Overlay / Короткое диагональное перечёркивание | польский, фарерский |
Ø, ø | 0338 | Shift + / | Long Solidus Overlay / Длинное диагональное перечёркивание | норвежский, датский |
Прочее | ||||
o̅e̅a̅ | 0305 | Alt+- | Combining Overline / Комбинируемое надчёркивание черта над знаком на всю ширину символа | |
o̲e̲a̲ | 0332 | Ctrl+- | Combining Low Line / Комбинируемая низкая линия черта под знаком на всю ширину символа | |
o̿e̿a̿ | 033F | Alt+= | Combining Double Overline / Комбинируемое двойное надчёркивание | |
o̳e̳a̳ | 0333 | Ctrl+= | Combining Double Low Line / Комбинируемая двойная низкая линия | |
a̱, e̱, i̱, o̱ | 0331 | Shift+- | Combining Macron Below / Комбинируемое подчёркивание | |
þ, ʒ, Ə | \ | Ввод редких букв | описано в следующей главе |
|
??, ?? | r | Ввод «Regional Indicator Symbol Letter» | см. «Варианты начертания» в следующей статье |
|
? ? ? | m | Математические буквы и цифры / варианты начертания | ―〃― |
|
❤️ ⚪ ? | g Alt+g Shift+g Ctrl+g | Геометрические фигуры (цветные сердечки, кружочки, квадраты) | cм. «Дингбаты, эмодзи» в следующей статье |
Символ U+0315 используется вместо обычного гачека U+030C только с указанными 4-мя буквами (они высокие, обычный гачек с ними плохо комбинируется). U+0315 не считается отдельным знаком. При вводе букв с гачеком в зависимости от буквы автоматически подставляется U+0315 или U+030С.
Расположение диакритических знаков на клавиатуре:
В нижней части таблицы есть несколько диакритических знаков, которые не всегда комбинируются с буквами правильно. С другими знаками тоже иногда бывают проблемы, но с этими просто беда.
Пример:
Не вдаваясь в подробности, это происходит потому, что в шрифтах не указаны привязки оверлейной диакритики к буквам. Разработчиков шрифтов можно понять: какое-нибудь косое перечёркивание применяется только с буквой О, и она уже есть в шрифте готовая. Зачем напрягаться?
Бывает, что и в других местах не напрягаются:
Причём, происходит это только при комбинировании. А при вставке готовых символов всё отображается как надо. Это значит, что выход есть: нужно подменять комбинацию символа и диакритического знака на имеющийся в юникоде готовый символ, отрисованный уже сразу с диакритикой.
Понятно, что готовые символы есть не для всех комбинаций и не во всех шрифтах. Но для большинства распространённых сочетаний такое работает.
Поэтому в скрипте я перехватываю диакритический знак и символ, а вместо них вставляю готовый символ с диакритическим знаком, который ищу в заранее составленном массиве. Если не нашлось — отправляю, как есть. Такая подстановка — поведение по умолчанию, которое можно изменить в настройках (или переключить с помощью Win+Compose).
Такая необходимость может возникнуть, если вам нужно вводить русские символы с диакритическими знаками (например, показывать знак ударения над буквами).
Дело в том, что клавиатура отсылает не символы, а скан‑коды. И готовый символ с диакритикой ищется по скан-коду. Независимо от того, какая в данный момент включена раскладка клавиатуры. То есть, при работающем режиме подстановки и включенной русской раскладке вместо ожидаемого кириллического «у́» вы получите латинскую «é». Правда, иногда оно сработает как надо, например, «а́» (т. к. в массиве нет замены для комбинации « ́ » и «f»). Но я бы на это не рассчитывал.
Кстати, видите знак « ́ » в предыдущем абзаце? Если вам нужен отдельный диакритический знак (не над буквой), его можно получить, просто скомбинировав с пробелом.
Следующий момент. Существуют символы с несколькими диакритическими знаками. Чтобы их можно было вводить, предусмотрен режим “Диакритические знаки после символов” (переключается в настройках или по Shift+Compose).
В этом режиме вводится символ, а после него добавляется столько диакритических знаков, сколько нужно. Например, вот у этой буквы 15 диакритических знаков (разумеется, ни в одном языке такого нет, просто для примера):
Также, в этом режиме можно вытворять странное. Помните примечание под таблицей, что кличка автоматически подставляется вместо гачека с 4-мя высокими буквами? А что, если нам всё-таки нужно показать с этими буквами именно гачек?
Это можно сделать, вставив между буквой и диакритическим знаком такую штуку, как «Combining grapheme joiner» (CGJ, U+034F, комбинация Compose → Shift+Backspace). В этом случае гачек не будет автоматически заменён на кличку. Смотрите:
Заодно здесь видно, почему с этими буквами используется именно кличка, а не гачек — оно действительно выглядит ужасно.
Существует ещё один символ, который предназначен для борьбы с самоуправством программ автоматической обработки текста — «Zero-Width Non-Joiner» (ZWNJ, U+200C, Compose →Ctrl+Backspace). В основном он используется в языках, не основанных на латинице — персидский, бенгальский, непальский. Но и в латинице его иногда применяют, если нежелательна склейка букв в лигатуру. Чтобы стало понятней, приведу искусственный пример на русском. Например, вводим слово «металлоемкий», а редактор преобразовывает это в «металлœмкий». Что неправильно, т.к. в один символ объединились буквы из двух частей составного слова. Теперь тут даже перенос не поставишь. Вот в этом случае и пригодится ZWNJ.
В главе про эмодзи (следующая статья) будет описан ещё один «родственник» этих невидимых символов — «Zero Width Joiner».
Возвращаясь к диакритическим знакам, нужно отметить, что последовательность их ввода имеет значение. Каждый последующий знак применяется к уже имеющемуся составному символу. Проще говоря — располагается дальше от буквы:
Ниже под спойлером таблица со списком языков, ввод на которых возможен с помощью моей раскладки. В ней указаны языки на основе латиницы и список используемых в них нестандартных (отсутствующих в латинском) букв, букв с диакритическими знаками, диграфов и лигатур (о них будет следующая глава).
Список языков
Язык | Страны | Дополнительные символы |
---|---|---|
Азербайджанский | Азербайджан | Ç ç, Ə ə, Ğ ğ, I ı, İ i, Ö ö, Ş ş, Ü ü |
Албанский | Албания | Ç ç, Dh dh, Ë ë, Gj gj, Ll ll, Nj nj, Rr rr, Sh sh, Th th, Xh xh, Zh zh |
Английский | Великобритания, Ирландия, Мальта | в заимствованных словах |
Астурийский | Испания | Ḷḷ ḷḷ |
Баскский | Испания | dd, ll, ñ, rr, ts, tt, tx, tz |
Боснийский (латин) | Босния и Герцеговина | Đ đ, Ž ž, Lj lj, Nj nj, Ć ć, Č č, Dž dž, Š š |
Бретонский | Франция | â, ê, î, ô, û, ù, ü, ñ |
Валлийский | Великобритания | Ch ch, Dd dd, Ff ff, Ng ng, Ll ll, Ph ph, Rh rh, Th th гласные с акутом, грависом, циркумфлексом, диерезисом |
Венгерский | Венгрия | Á á, Cs cs, Dz dz, Dzs dzs, É é, Gy gy, Í í, Ly ly, Ny ny, Ó ó, Ö ö, Ő ő, Sz sz, Ty ty, Ú ú, Ü ü, Ű ű, Zs zs |
Вьетнамский | Вьетнам, Камбоджа, Лаос, Таиланд | Ă ă, Â â, Đ đ, Ê ê, Ô ô, Ơ ơ, Ư ư |
Гагаузский | Молдова, Украина | Ä ä, Ç ç, Ê ê, I ı, İ i, Ö ö, Ş ş, Ţ ţ, Ü ü |
Галисийский | Испания | ch, gu, ll, ñ, nh, rr, ü |
Датский | Дания, Фареры, Гренландия, Исландия | Æ æ, Ø ø, Å å |
Джарайский | Вьетнам, Камбоджа | Ă ă, Â â, Ƀ ƀ, Č č, Đ đ, Ĕ ĕ, Ê ê, Ê̆ ê̆, Ĭ ĭ, Dj dj, Ñ ñ, Ng ng, Ŏ ŏ, Ô ô, Ô̆ ô̆, Ơ ơ, Ơ̆ ơ̆, Ŭ ŭ, Ư ư, Ư̆ ư̆ |
Зулусский | ЮАР | лишних букв и знаков нет |
Индонезийский | Индонезия | лишних букв и знаков нет |
Исландский | Исландия | Á á, Ð ð, É é, Í í, Ó ó, Ú ú, Ý ý, Þ þ, Æ æ, Ö ö |
Итальянский | Италия, Швейцария, Сан-Марино, Ватикан | à, è, é, ì, í, î, ò, ó, ù, ú |
Ирландский | Ирландия, Великобритания | гласные могут быть с акутом |
Испанский (кастильский) | Испания, Андорра | Ñ ñ, Ch ch, Ll ll, Qu qu, Gu gu, rr, Á á, É é, Í í, Ó ó, Ú ú, Ý ý, Üü |
Казахский (латин) | Казахстан | Á á, Ǵ ǵ, I ı, Ń ń, Ó ó, Ú ú, Ý ý, Sh sh, Ch ch |
Карельский | Финляндия, Россия | Č č, Š š, Ž ž, Ä ä, Ö ö |
Каталанский | Испания, Андорра | à, ç, dj, é, è, gu, ig, í, ï, ll, ŀl, ny, ó, ò, qu, rr, ss, tg, tj, tx, ú, ü, ix |
Крымскотатарский | Украина | Ç ç, Ğ ğ, I I, İ I, Ñ ñ, Ö ö, Ş ş, Ü ü |
Латинский | Ватикан | лишних букв нет |
Латышский | Латвия | Ā ā, Č č, Ē ē, Ģ ģ, Ī ī, Ķ ķ, Ļ ļ, Ņ ņ, Š š, Ū ū, Ž ž |
Литовский | Литва | Ą ą, Č č, Ę ę Ė ė, Į į, Š š, Ų ų, Ū ū, Ž ž |
Люксембургский | Люксембург | é, ä, ë |
Мальтийский | Мальта | Ċ ċ, Ġ ġ, GĦ għ, Ħ ħ, IE ie, Ż ż |
Немецкий | Австрия, Бельгия, Германия, Лихтенштейн, Люксембург, Швейцария | Ä ä, Ö ö, ẞ ß, Ü ü |
Нидерландский | Нидерланды, Бельгия | IJ ij, диерезис и акут |
Норвежский | Норвегия | Æ æ, Ø ø, Å å |
Окситанский | Франция, Испания | Á á, À à, Ç ç, È è, É é, Í í, Ï ï, Ó ó, Ò ò, Ú ú, Ü ü, n⸱h, s⸱h |
Польский | Польша | Ą ą, Ć ć, Ę ę, Ł ł, Ń ń, Ó ó, Ś ś, Ź ź, Ż ż, Ch, Cz, Dz, Dź, Dż, Rz, Sz, Szcz, Ść, Śc, Źdź, Źdz, Żdż, Ƶ ƶ |
Португальский | Португалия | Á á, Â â, Ã ã, À à, Ç ç, É é, Ê ê, Í í, Ó ó, Ô ô, Õ õ, Ú ú |
Романшский | Швейцария 0,6% населения | tg |
Румынский | Румыния | Ă ă, Â â, Î î, Ș ș, Ț ț |
Саамские языки | Норвегия, Швеция, Финляндия | Á á, Â â, Ä ä, Å å, Æ æ, Č č, Đ đ, Ǧ ǧ, Ǥ ǥ, Ï ï, Ǩ ǩ, Ŋ ŋ, Ö ö, Õ õ, Ø ø, Š š, Ŧ ŧ, Ü ü, Ž ž, Ʒ ʒ, Ǯ ǯ |
Сербский (латин) | Сербия, Босния и Герцеговина | Ć ć, Č č, Đ đ, Dž dž, Lj lj, Nj nj, Š š, Ž ž |
Силезский | Польша, Чехия | Ã ã, Ć ć, Ł ł, Ń ń, Ŏ ŏ, Ō ō, Ô ô, Õ õ, Ś ś, Ź ź, Ż ż |
Сицилийский | Италия | À à, Â â, Ç, ç, Ḍ ḍ, È è, Ê ê, Ë ë, Ġ ġ, ḥ, Ì ì, Í í, Î î, Ï ï, Ṅ ṅ, Ò ò, Ô ô, ṛ, Š š, ṭ, Ù ù, Ú ú, Û û, Ż ż |
Словацкий | Словакия | Á á, Ä ä, Č č, Ď ď, Dz dz, Dž dž, É é, Ch ch, Í í, Ĺ ĺ, Ľ ľ, Ň ň, Ó ó, Ô ô, Ŕ ŕ, Š š, Ť ť, Ú ú, Ý ý, Ž ž |
Словенский | Словения | Č č, Dž dž, Lj lj, Nj nj, Š š, Ž ž |
Татарский (латин) | Татарстан | Ä ä, Ç ç, Ğ ğ, I ı, İ I, Ñ ñ, Ö ö, Ş ş, Ü ü |
Турецкий | Турция, Кипр | Ç ç, Ğ ğ, I I, İ I, Ö ö, Ş ş, Ü ü, Â â, Î î, Û û |
Туркменский | Туркмения | Ç ç, Ä ä, Ž ž, Ň ň, Ö ö, Ş ş, Ü ü, Ý ý |
Узбекский (латин) | Узбекистан | Oʻ oʻ, Gʻ gʻ, Sh sh, Ch ch, Ng ng |
Фарерский | Фареры | Á á, Ð ð, Í í, Ó ó, Ú ú, Ý ý, Æ æ, Ø ø |
Финский | Финляндия | Å å, Ä ä, Ö ö, Š š, Ž ž |
Фризский | Нидерланды | Â â, Ê ê, É é, Ô ô, Û û, Ú ú, IJ, CH, NG, SJ, ZJ |
Хорватский | Хорватия, Босния и Герцеговина | Č č, Ć ć, Dž dž, Đ đ, Lj lj, Nj nj, Š š, Ž ž |
Черногорский (латин) | Черногория | Č č, Ć ć, Dž dž, Ð đ, Lj lj, Nj nj, Š š, Ś ś, Ž ž, Ź ź |
Чешский | Чехия | Á á, Č č, Ď ď, Dz dz, Dž dž, É é, Ě ě, Ch ch, Í í, Ň ň, Ó ó, Ř ř, Š š, Ť ť, Ú ú, Ů ů, Ý ý, Ž ž |
Шотландский | Великобритания | сh, bh, fh, гласные с грависом |
Эсперанто | международный | Ĉ ĉ, ͏Ĝ ĝ, Ĥ ĥ, Ĵ ĵ, Ŝ ŝ, Ŭ ŭ |
Эстонский | Эстония | Š š, Ž ž, Õ õ, Ä ä, Ö ö, Ü ü |
Разумеется, я не знаю все эти полсотни языков, так что в таблице могут быть неточности. И ведь это ещё не все языки! Сюда можно смело вписывать африкаанс, суахили, тсвана, руанда, сесото и множество других языков, основанных на латинице. Я просто не стал лезть в эти африканские дебри.
Некоторые указанные в таблице языки имеют как латинский, так и кириллический варианты алфавита (помечены как «латин»).
Обратите внимание на буквы Đ/đ и Ð/ð. Первая используется в сербохорватском и саамских языках, вторая — в фарерском. Хотя заглавные буквы выглядят одинаково, у них разные коды. Вводятся они тоже по разному: первая через Short Stroke Overlay (клавиша «=»), вторая — через Short Solidus Overlay (клавиша «/»).
Диграфы, лигатуры и редкие буквы
Вы, вероятно, привыкли, что в каждой клетке кроссворда пишется только одна буква. А что вы скажете, если увидите там «Dž»?
Надеюсь, вы скажете, что это диграф. Т. е. составной письменный знак из двух частей. В русском языке такой тоже есть — буква «Ы».
На самом деле, диграфы не всегда считаются отдельными буквами. Чаще это просто устойчивое сочетание букв для обозначения каких-то звуков.
Особенность диграфов — они не разрываются при переносе на другую строку; если имя начинается с диграфа, в инициалы попадают оба символа; если предложение начинается с диграфа, в верхнем регистре пишутся обе буквы. Впрочем, это не универсальные правила для всех языков и всех диграфов.
Зато некоторые диграфы употребляются настолько часто, что удостоились отдельных символов в таблице Unicode. В моём скрипте они тоже есть.
Дальнейшее развитие диграфов — лигатуры. Здесь исходные символы уже полностью слились в один знак. Самые известные примеры — амперсанд (&) и дубль-вэ (w), но они и так есть на любой клавиатуре. А вот Æ, Œ и ß есть на клавиатурах только тех языков, где эти буквы используются.
Но и там нет стилистических лигатур ſt, st, ffl.
Кроме лигатур и диграфов я добавил также возможность ввода редких букв — торн (Þþ), шва (Əə), эт (Ðð) и пр.
Вот в этой табличке перечислено, что у меня есть. Вообще, лигатур в юникоде гораздо больше, но не все из них реально используются. Поэтому я их не добавлял.
Список диграфов, лигатур и редких букв
Знак | Код | Комбинация клавиш (после Compose) |
---|---|---|
Æ | U+00C6 | A→e или \→A |
æ | U+00E6 | a→e или \→a |
Œ | U+0152 | O→e или \→E |
œ | U+0153 | o→e или \→e |
ff | U+FB00 | f→f |
fl | U+FB02 | f→l |
fi | U+FB01 | f→i |
ſt | U+FB05 | f→t |
ffi | U+FB03 | f→f→i |
ffl | U+FB04 | f→f→l |
st | U+FB06 | s→t |
ʦ | U+02A6 | t→s |
IJ | U+0132 | I→J |
ij | U+0133 | i→j |
LJ | U+01C7 | L→J |
Lj | U+01C8 | L→j |
lj | U+01C9 | l→j |
Ŀ | U+013F | L→. или \→L |
ŀ | U+0140 | l→. или \→l |
Ỻ | U+1EFA | L→l |
ỻ | U+1EFB | l→l |
NJ | U+01CA | N→J |
Nj | U+01CB | N→j |
nj | U+01CC | n→j |
DZ | U+01F1 | D→Z |
Dz | U+01F2 | D→z |
dz | U+01F3 | d→z |
DŽ | U+01C4 | D→v→Z или X→Z |
Dž | U+01C5 | D→v→z или X→z |
dž | U+01C6 | x→v→z или x→z |
Ø | U+00D8 | \→O или /→O |
ø | U+00F8 | \→o или /→o |
ẞ | U+1E9E | \→B |
ß | U+00DF | \→b |
Ð | U+00D0 | \→D или /→D |
ð | U+00F0 | \→d или /→d |
Þ | U+00DE | \→T |
þ | U+00FE | \→t |
Ə | U+018F | \→^ (\→Shift+6) |
͏ə | U+0259 | \→6 |
Ǽ | U+01FC | ‘→A→e |
ǽ | U+01FD | ‘→a→e |
Ǣ | U+01E2 | -→A→e |
ǣ | U+01E3 | -→a→e |
Ǿ | U+01FE | ‘→/→O |
ǿ | U+01FF | ‘→/→o |
Ʒ | U+01B7 | \→Z |
ʒ | U+0292 | \→z |
Ǯ | U+01EE | v→Ctrl+z (просто v→z даст ž) |
ǯ | U+01EF | v→Alt+z |
Для ввода диграфов и триграфов после Compose просто нажимаются нужные буквы. Но здесь есть одна особенность, о которой сто́ит упомянуть. Есть диграф ff, а есть триграфы ffi и ffl. После того, как будет нажато две буквы «f», диграф не отобразится. Скрипт будет ждать следующую букву. Если это будет i или l — напечатается триграф. Что‑то другое — диграф и введённый после него символ. Такая же ситуация с Á/ Ǽ и Ā/Ǣ.
Для диграфов DŽ/Dž/dž предусмотрен также более короткий вариант ввода — с помощью «x».
А для некоторых букв есть и ещё один способ. Слева на слое Tab специально оставлено пустое место для пользовательских символов. Чтобы вы могли туда добавить то, что чаще всего используете (например, какую‑нибудь «ö»).
В скрипте эти символы прописываются в разделе «Private Use Area» (конец файла «Tab_pressed_layer.ahk»).
Пока вы туда ничего не добавили, я заполнил это место вот так:
В каталанском есть буквы с точками сбоку: «Ŀ» и «ŀ ». Этa точка — интерпункт (средняя точка, U+00B7 middle dot). Для неё нет диакритического знака. Но её можно ввести отдельно после букв (Space+Ctrl+d). Или использовать сразу готовые буквы с точками, как показано в таблице выше. В окситанском тоже имеются сочетания с интерпунктом (n⸱h, s⸱h), но для них готовых символов в юникоде нет.
И, раз уж речь зашла о точках. В тюркских алфавитах есть буквы «ı» и «İ». Обратитие внимание: здесь в верхнем регистре точка есть, а в нижнем нет. Вводятся такие буквы с помощью Compose+. (диакритический знак Dot Above).
Кириллица
Я видел несколько вариантов универсальных кириллических раскладок, которые подходят для всех языков, основанных на кириллице. К сожалению, у этих раскладок есть большой недостаток: кому‑то придётся переучиваться, т. к. в разных языках разные раскладки. И это особенно обидно, учитывая, что бо́льшая часть букв во всех языках повторяется.
Поэтому я решил пойти другим путём: пусть каждый использует свою привычную кириллическую раскладку. А недостающие буквы берёт с отдельного слоя, куда вынесены все буквы, отсутствующие хотя бы в одном языке.
У меня получился вот такой слой:
Чтобы набрать одну букву с этого слоя, надо предварительно нажать Space+CapsLock. Для длительного переключения на слой и обратно — Space+Shift+CapsLock.
К сожалению, у некоторых букв оказалось слишком много вариантов и пришлось переносить их на «второй уровень» (обозначены красным). Такие буквы для нижнего регистра нажимаются с Alt, для верхнего — с Alt+Shift.
Можно было назначить их на свободные клавиши, но я старался располагать буквы с учётом лёгкости запоминания. Так, чтобы было похоже по звучанию на английскую букву этой клавиши. Или по внешнему виду на букву/цифру/знак. Именно поэтому на «)» находится Э, а рядом, на «(» — её зеркальное отражение, украинская Є. Впрочем, традиционное расположение Э (клавиша «’») оказалось ничем не занято, поэтому туда я её тоже добавил.
Полагаю, что для местной аудитории наиболее актуальны украинские, белорусские и русские буквы. Вот я их отметил:
А вот и список поддерживаемых языков
Язык | Страны | Дополнительные символы |
---|---|---|
Белорусский | Беларусь | Дж дж, Дз дз, Ё ё, І і, Ў ў, Ы ы, Э э |
Болгарский | Болгария | лишних букв нет |
Боснийский | Босния и Герцеговина | Ђ ђ, Ј ј, Љ љ, Њ њ, Ћ ћ, Џ џ |
Казахский (кирил) | Казахстан | Ә ә, Ғ ғ, Қ қ, Ң ң, Ө ө, Ұ ұ, Ү ү, Һ һ, І і |
Киргизский | Киргизия | Ң ң, Ө ө, Ү ү |
Македонский | Северная Македония | Ѓ ѓ, ͏ Ѕ ѕ, Ј ј, Љ љ, Њ њ, Ќ ќ, Џ џ |
Молдавский | Молдова | Ӂ ӂ, Ы ы |
Монгольский | Монголия | Ө ө, Ү ү |
Осетинский | Россия | Ӕ ӕ, Гъ гъ, Дж дж, Дз дз, Ё ё, Къ къ, Пъ пъ, Тъ тъ, Хъ хъ, Цъ цъ, Чъ чъ, Ъ ъ Ы ы, Э э |
Русинский | Украина, Словакия, Польша | Ґ ґ, Є є, Ё ё, І і, Ї ї, Ы ы, Ю ю, Я я, Ь ь, Ъ ъ |
Русский | Россия, Беларусь | Ё ё, Ы ы, Ъ ъ, Э э |
Сербский (кирил) | Сербия, Черногория | Ђ ђ Ј ј Љ љ Њ њ Ћ ћ Џ џ |
Таджикский | Таджикистан | Ғ ғ, Ё ё, Ӣ ӣ, Қ қ, Ӯ ӯ, Ҳ ҳ, Ҷ ҷ |
Татарский (кирил) | Татарстан | Ә ә, Ё ё, Җ җ, Ң ң, Ө ө, Ү ү, Һ һ, Ъ ъ, Ы ы, Э э, Ю ю, Я я |
Узбекский (кирил) | Узбекистан | Ғ ғ, Ҳ ҳ, Қ қ, Ў ў, Ъ ъ |
Украинский | Украина | Ґ ґ, І і, Ї ї, Є є |
Цыганский | exUSSR | Ґ ґ, Ё ё, Ғ ғ, Кх кх, Пх пх, Рр рр, Тх тх, Ы ы, Э э, Ю ю, Я я |
Цыганский | Сербия | Ђ ђ, Ј ј, Кх кх, Љ љ, Њ њ, Пх пх, Рр рр, Тх тх, Ћ ћ, Ћх ћх, Чх чх, Џ џ, Ъ ъ |
Черногорский (кирил) | Черногория | Ђ ђ, З́ з́, Ј ј, Љ љ, Њ њ, С́ с́, Ћ ћ, Џ џ |
В некоторых кириллических языках есть буква «шва» (Ә). Внешне она такая же, как и латинская, но имеет другой код и вводится на слое с кириллицей. Буква Ӕ в осетинском тоже не такая, как Æ в латинице.
Языки, у которых есть и латинский вариант алфавита, помечены как «кирил».
Греческий алфавит
В технических текстах иногда попадаются греческие буквы. И приходится открывать Character Map, чтобы найти эту букву и вставить. Чтобы не тратить попусту время, я добавил в раскладку несколько самых ходовых букв. А когда оказалось, что нужно ещё — просто взял и подключил целиком все греческие буквы отдельным слоем. Расположены они на тех же самых местах, что и в греческой раскладке. Для ввода одной греческой буквы нужно предварительно нажать Space+Tab (Space+Ѕhift+Tab для длительного переключения на слой и обратно).
Если посмотреть в таблицу юникода, там есть много диакритических знаков для греческого. Но, насколько я понимаю, большинство из них — для древнегреческого. А в современном языке используются только три: « ̈ », « ́ » и « ̈́ ». Первые два вводятся как обычные диерезис и акут, а третий («диалитика») расположен на том же месте, что и в греческой раскладке — в верхнем регистре клавиши w. Нижний регистр там уже занят буквой «ς».
Интересный момент: в греческом языке акут с заглавными буквами отображается не сверху, а слева от буквы. Например, вот пара латинских и пара греческих букв с акутом: Á H́, Ά Ή.
У некоторых греческих букв есть альтернативный вариант написания (выделен синим цветом). В этом случае буква в нижнем регистре вводится с Alt, в верхнем — c Alt+Shift.
Чтобы место на слое зря не пропадало, я добавил сюда ещё и римские цифры (голубые кнопки). Причём, основной регистр для римских цифр (без Shift) — верхний. Т. к. он чаще используется.
Добавил также все 13 знаков зодиака, имеющихся в юникоде.
И циферблаты. Alt — Ч:00 минут, Alt+Shift — Ч:30 минут. Т.е. 2:30 — это Alt+Shift+2 (?).
На этом с языками я закончил. Давайте посмотрим, что получилось в итоге.
Вот здесь есть табличка, в которой перечислены 99,7% самых распространённых в интернете языков. На моей раскладке можно использовать 90% (все перечисленные на основе латиницы и кириллицы, плюс греческий). Остальные 9,7% — это иероглифические языки, персидский, тайский, хинди, иврит, арабский. В оставшихся 0,3% тоже есть поддерживаемые языки: норвежский, латышский, боснийский, казахский, белорусский и пр.
На сегодня всё. Как говорят на ТВ: «не переключайте канал». Третья статья серии уже готова, будет опубликована через несколько дней.
Ссылка на гитхаб
Ссылка на следующую статью