Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Греческая раскладка (AHK)

Автор Квас, ноября 8, 2010, 01:08

0 Пользователи и 1 гость просматривают эту тему.

Квас

Черновой вариант греческой раскладки. Нужно потестить и обсудить!

Достаточно иметь файл .exe. Запускаете его, и раскладка отображается в панели уведомлений (H на зелёном фоне). После запуска раскладки её можно включать / выключать с помощью нуля на цифровой клавиатуре. Завершить работу с ней можно через контекстное меню.

Клавиши делятся на три группы: буквы, модификаторы и прочие.

Нажатие на букву даёт букву.

Каждый модификатор отвечает за один диакритический знак. К диакритическим знакам относятся знаки ударений, придыханий, подписная иота, знаки долготы. (В таблице символов я обнаружил заглавные буквы с символом, похожим на подписную иоту — PROSGEGRAMMENI. Я не знаю, зачем они нужны, но именно эти буквы создаёт модификатор из прописных.) Нажатие на модификатор изменяет предшествующую букву. Порядок нажатия неважен. Второе (не обязательно подряд) нажатие на один модификатор убирает соответствующий диакритический знак. Если модификатор не применим к введённой букве, то он ничего не делает.

Нажатие на любую из прочих клавиш (и на кнопки мыши) прерывает действие модификаторов. Исключение: нажатие на Shift, Ctrl, Alt (без других клавиш) не имеет никакого эффекта.

Строчная сигма вводится как концевая. Если за ней нажимается клавиша с буквой, то концевая сигма заменяется на обычную.

Пока предлагается такая раскладка:
<лёгкое придыхание><густое придыхание>ΥΚΕΝΓΞΨΖΧ<подписная йота>
ΦΙΒΑΠΡΟΛΔ ./, ;/<трема>
<апостроф>ΘΣΜΗΤΩ <акут>/<тонос><гравис>/<макрон><циркумфлекс>/<бреве>

Точку вверху строки не нашёл почему‐то в таблице символов. :donno:

Над дизайном раскладок надо подумать отдельно. По идее скрипт позволяет вводить и монотонический, и политонический текст, но для организации удобного ввода лучше иметь отдельные раскладки для древне‐ и новогреческого. Раскидать буквы по клавишам любым способом сравнительно несложно, потому что ядро скрипта не затрагивается.

Пока не понимает капслок. Также было бы интересно сделать преобразование чисел, записанных арабскими цифрами, в записанные греческими.

Можно и иконку посодержательней, да рисовать не умею.

Как это работает (для тех, кто знаком с AutoHotkey)

Естественно, AutoHotkey_L

Есть глобальные переменные Letter, хранящую код последней буквы (эта переменная может быть пустой) и переменные Aspiration, Accent, Iota, Trema, Length, хранящие коды понятно чего. Работа с кодами производится через числовые константы (хотя можно было бы и просто со строками). Также есть переменная LastSigma.

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

В начале переменная Letter пуста, остальные равны 0.

При нажатии буквы переменная Letter запоминает эту букву, переменные‐диакритики обнуляются, буква печатается. Предварительно, если LastSigma = true, BackSpace‐ом убирается предыдущая концевая сигма и ставится обычная. Если введена строчная сигма, то LastSigma принимает значение true, иначе — false.

При нажатии модификатора специальная функция меняет значение этого модификатора для буквы. Эти функции и содержат в себе «интеллектуальность» работы с диакритикой. Пока реализованы следующие правила:
 ненулевая аспирация обнуляет долготу и обнуляет акцент, если это тонос;
 на эпсилон и омикрон циркумфлекс не действует;
 тонос обнуляет аспирацию и иоту;
 ненулевой акцент обнуляет длину;
 иота и трема действуют только на те гласные, с которыми они сочетаются;
 ненулевая длина обнуляет аспирацию, акцент, иоту, трему.
Здесь «не действует» означает, что функция просто игнорирует те или иные буквы. Сама функция меняет значения переменных. После того как переменные принимают новые значения, имеющаяся буква убирается BackSpace‐ом и печатается буква с новыми диакритиками.

Нажатие прочих клавиш кроме своего обычного эффекта делает переменную Letter пустой, а LastSigma принимает false.
Пишите письма! :)

Bhudh

Цитата: КвасВ таблице символов я обнаружил заглавные буквы с символом, похожим на подписную иоту — PROSGEGRAMMENI.
Это не подписная, а приписная йота, просто не все шрифты это понимают.
В Юникоде вообще не стали разделять для прописных приписные и подписные варианты написания, вот фонт-макеры и изгаляются как хотят... :(

Цитата: КвасΥΚΕΝΓΞΨΖΧ
:=
А вот Ψ я бы на место Ц поставил...
Вопрос: А где архаика? Где лунные сигмы и эпсилоны? Где диакритика в чистом виде, без комбиниҥа?‥

Цитата: КвасТочку вверху строки не нашёл почему‐то в таблице символов.
U+0387 GREEK ANO TELEIA : ·
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Квас

Цитата: Bhudh от ноября  8, 2010, 22:57
Это не подписная, а приписная йота, просто не все шрифты это понимают.

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

Цитата: Bhudh от ноября  8, 2010, 22:57
В Юникоде вообще не стали разделять для прописных приписные и подписные

А разве бывают подписные у заглавных букв?

Цитата: Bhudh от ноября  8, 2010, 22:57
U+0387 GREEK ANO TELEIA : ·

Чёрт! Я подумал на неё, но она отображалась в середине строки. Кстати, я прозевал вопросительный знак: у меня просто точка с запятой.


Цитата: Bhudh от ноября  8, 2010, 22:57
Вопрос: А где архаика? Где лунные сигмы и эпсилоны? Где диакритика в чистом виде, без комбиниҥа?‥

А они нужны при наборе текста? Я этими вещами вообще не владею. В принципе, верхний ряд свободен, но диакритики слишком много.

Есть идеи по поводу размещения? И этих символов, и вообще. Например, если пси передвинуть, что что на его место? Кстати, расположением диакритики у себя я не очень доволен.

Можно раскладку под qwerty сделать и вообще что угодно. Отдельные для древне‐ и новогреческого — обязательно!

Ещё мне в Ассимиле понравилось, что бета внутри слова выглядит как ϐ. Однако по логике β и ϐ должны быть глифами одной буквы. А так ещё и голову ломать, в каких шрифтах есть ϐ, и поиск не будет работать.
Пишите письма! :)

Квас

Цитата: Bhudh от ноября  8, 2010, 22:57
Где диакритика в чистом виде, без комбиниҥа?‥

Кстати, у меня никакого комбиниҥа: только цельные юникодины! Неплохо бы комбинируемые акут и гравис, чтобы можно было ставить ударение над буквами с макроном и бреве.
Пишите письма! :)

Bhudh

Цитата: КвасА разве бывают приписные у заглавных букв?
Так по идее только они и бывают... Подписные — это уже от экономии что ли сделано... Хотя во многих шрифтах подписана... :donno:

Цитата: Квасесли пси передвинуть, что что на его место?
На Щ-то? Сампи или коппу. А если архаику с обычными мешать не хочется, можно омегу передвинуть.

Цитата: Кваспо логике β и ϐ должны быть глифами одной буквы
:what: Это ж символ! Тогда что ж, α/ɑ/⍺, δ/ẟ, θ/ϑ, π/ϖ, φ/ϕ тоже «глифами одной буквы» считать?
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Квас

Цитата: Bhudh от ноября  8, 2010, 23:38
На Щ-то? Сампи или коппу. А если архаику с обычными мешать не хочется, можно омегу передвинуть.
Щ удобно набирать! Зачем хорошую клавишу загромождать символами, которые не употребляются в тексте. Если передвинуть омегу, то что на её место? Пятнашки. :) В общем, надо думать.

Цитата: Bhudh от ноября  8, 2010, 23:38
Цитата: Квас
Цитироватьпо логике β и ϐ должны быть глифами одной буквы
:what: Это ж символ! Тогда что ж, α/ɑ/⍺ δ/ẟ, θ/ϑ, π/ϖ, φ/ϕ тоже «глифами одной буквы» считать?
Есть одна буква бета в двух вариантах, и в соответствии с греческими типографскими традициями хвостатая употребляется в начале слова. Разницей между хвостатой и бесхвостой должен шрифт ведать. А вводить круглую в юникод отдельным символом — такая же глупость, как лигатуры типа fi. Хотя может быть, я неправ.

А какие правила задают использование вариантов α/ɑ/⍺ δ/ẟ, θ/ϑ, π/ϖ, φ/ϕ, я не знаю. Точнее, в наше время, наверно, никаких. По мне это просто на разные шрифты похоже.

Пишите письма! :)

Bhudh

Цитата: КвасЕсли передвинуть омегу, то что на её место? Пятнашки.
Так я специально предложил буквы с краёв.
По краю обычно диакритики и располагаются.

Кстати, в словаре Дворецкого внутренняя раскладка такая:
Цитировать
θωερτψυιοπ[]\
ασδφγηςκλ;'
ζχξςβνμ,./

ΘΩΕΡΤΨΥΙΟΠ{}|
ΑΣΔΦΓΗςΚΛ:"
ΖΧΞςΒΝΜ<>?
То есть кое-чем от стандартной отличается, хотя тоже по QWERTY сделана.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Квас

Установлю завтра Дворецкого и погляжу, что у него. Мне непонятно, где диакритика. Две концевые сигмы — многовато. :green: Может быть, ου и ει на них поставить...  :-\

В принципе, на Персее тоже есть своя транслитерация. Мне только не нравится, когда акценты и придыхания ставят двумя нажатиями: клавиш и так навалом.

А современную надо сделать по современной. Нашёл эту:
(wiki/en) Keyboard_layout#Greek
Но мёртвые клавиши у меня не предусмотрены. Хотя можно и их сделать. А так мне больше нравится, когда буква сначала ставится, а потом изменяется. Мы же не на машинках печатаем.

Включение/выключение по Numpad0 — это, конечно, свежо и оригинально, но не настаиваю. Если увеличить число рабочих файлов до двух, то можно сделать включение по одному сочетанию клавиш, а выключение — по другому. Но у меня фантазия отказывается работать.  :donno:
Пишите письма! :)

Bhudh

Цитата: КвасМне непонятно, где диакритика.
Здесь:
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Квас

Мелочи: добавлена · (пока апостроф с шифтом), точка с запятой заменена на вопрос. Включение/выключение по NumpadDot.

Существенно: добавлено преобразование арабских цифр в греческие.

Инструкция. На цифровой клавиатуре набирается целое число от 1 до 999999 и на цифровой клавиатуре нажимается Enter для получения числа, записанного строчными буквами, и Shift + Enter для получения числа, записанного прописными буквами.

Механизм. Есть функция
GreekNumber(ArabicNumber, Capital)
конвертирующая целые числа в греческую запись (Capital = 1, если требуется запись прописными буквами, и = 0, если строчными). При нажатии на цифровые клавиши цифровой клавиатуры составляется число, которое будет передано этой функции, а также подсчитывается число знаков, подлежащих удалению. Нажатие на любую другую клавишу или щелчок мыши обнуляет оба значения.

Значки для цифр надо будет в верхний ряд засунуть, чтобы можно было и непосредственно вводить.
Пишите письма! :)

O

Квас, вы это программируете с нуля или делаете в каком-то редакторе раскладок?
gdy padła granica, pękły więzień bramy,
w ten dzień wyzwolenia: siedemnasty września

Квас

Цитата: O от января 26, 2011, 20:50
Квас, вы это программируете с нуля или делаете в каком-то редакторе раскладок?
С нуля.

(Хотя не написать ли редактор раскладок для AHK? :-\)

Собственно, политонический греческий — особый случай. Мне он в жизни и не нужен, интересно было придумать и реализовать хороший алгоритм.
Пишите письма! :)

O

Цитата: Квас от января 26, 2011, 20:58
Цитата: O от января 26, 2011, 20:50
Квас, вы это программируете с нуля или делаете в каком-то редакторе раскладок?
С нуля.
(Хотя не написать ли редактор раскладок для AHK? :-\)
Собственно, политонический греческий — особый случай. Мне он в жизни и не нужен, интересно было придумать и реализовать хороший алгоритм.
Только что прочитал про AHK. «С нуля» — я имел в виду WinAPI, на крайняк, .NET  :smoke:
gdy padła granica, pękły więzień bramy,
w ten dzień wyzwolenia: siedemnasty września

Квас

Цитата: O от января 26, 2011, 21:02
«С нуля» — я имел в виду WinAPI, на крайняк, .NET
Господь с вами! :)
Пишите письма! :)

 

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр