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

Диакритика с помощью автозамен

Автор Квас, октября 4, 2010, 17:12

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

Квас

В ходе экспериментов с AutoHotkey (myst‐у в очередной раз спасибо за наводку) пришла в голову мысль сделать список автозамен для расстановки диакритических знаков (латиница). Выношу на суд публики.

Ввод диакритики стилизован под ТеХовские команды и насколько возможно следует LaTeXовскому стандарту. Также добавил команды для ввода некоторых символов (в том числе пунктуационных) и пробелов.

Для получения некоторых символов требуется довольно много нажатий на клавиши, поэтому этот скрипт малопригоден для набора большого количества текста на языках с богатой диакритикой. Мне кажется, что для отдельных языков лучше писать самостоятельные скриптики с небольшим числом простых автозамен (например, как моё opusculum для древнеанглийского: Latina).

Примеры (здесь и далее знак подчёркивания обозначает пробел): \'a даёт á, \k a даёт ą, \th_ даёт þ, \qquad_ даёт такой пробел: а a, --- (три дефиса) даёт em‐dash, \euro_ даёт €.

Правила именования команд таковы.

1. Имя неакцентной команды начинается с \ и заканчивается пробелом. Желательно использование имён, распространённых в LaTeX.

Пока есть такие неакцентные:
а) \ae_ æ; \AE_ Æ; \oe_ œ; \OE_ Œ (далее заглавные образуются аналогично); \th_ þ; \dh_ ð; \ng_ ŋ; \dj_ đ; \o_ ø.
б) \pounds_; \S_ §; \P_ ¶; \copyright; кое‐какие стрелки из математического режима LaTeXа (\leftarrow_ и пр.). Из головы добавил \euro_, \yogh_, \ezh_.

2. Акцентные команды делятся на две группы. Первые содержат один небуквенный символ: \` гравис, \' акут, \^ циркумфлекс,\~ тильда, \: диерезис, \= макрон, \. точка; вторые состоят из буквенного символа: \u бреве, \v чарка, \c седилья, \k ogonek: ą, \H венгерский «долгий умлаут», \r ring: å. Первые набираются без пробела (как и все безбуквенные команды), вторые — с пробелом между командой и буквой.

2б. Над буквами, заданными командами, можно ставить акценты, но второй \ превращается в /: \'/ae даёт ǽ.

3. Есть такие автозамены, которые соответствуют ТеХовским специальным символам и лигатурам, иногда они немного отличаются (часто замыкаются пробелом). Они встречаются в пунктуации.

Пунктуация и пробелы:
--_ en‐dash (NB замыкающий пробел)
--- em-dash
`_ , '_  одинарные кавычки (NB замыкающий пробел)
Закрывающая одинарная кавычка используется также в качестве апострофа.
\lqq_, \rqq_ двойные кавычки
\flqq_, \frqq_ ёлочки, они же задаются лигатурами <<, >>
\glqq_, \grqq_ лапки
\dots_ многоточие
\hyph дефис (моё обозначение)
\??_, \?!_, \!?_, \??_ (таких команд в ТеХе быть не может)
~_ неразрывный пробел (NB замыкающий пробел)
\, тонкий пробел (без замыкающего пробела, как у небуквенных команд)
\enquad_, \quad_, \qquad_ разные пробелы.

Кое‐какие символы: \S_, \P_, \copyright_ — как в ТеХе. Вот некоторые невозможные в ТеХе команды:
\%%_ промилле
\%%%_ 0,1 промилле
\12_, \14_, \34_ — дроби

Я присоединяю скрипт (.ahk) и скомпилированный скрипт. Скомпилированный можно просто запустить. Он обнаружит себя значком H в панели уведомлений. С помощью контекстного меню его можно выключить или заблокировать (suspend hotkeys). Скрипт — текстовый файл (там есть даже кое‐какие комментарии); его можно открыть в любом редакторе (поддерживающем юникод) или запустить с помощью AutoHotkey_L.

Может конфликтовать с модифицированными вручную раскладками.

Если интересно, вот сайт AutoHotkey: http://www.autohotkey.com/, а юникод понимает AutoHotkey_L, которым я и пользуюсь: http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Может быть, кто‐нибудь и на TeX подсядет. :)
(wiki/ru) LaTeX
Пишите письма! :)

Квас

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

Ванько

Offtop
Цитата: Квас от октября  4, 2010, 17:12
Может быть, кто‐нибудь и на TeX подсядет.

Это слишком жёстко для непрограммеров, нам подавай наглядность. Я даже к вики-разметке не могу привыкнуть — бесит. :)
Lingvoforum has ruined my life.
-------------------------
ЛФ — это вообще к лингвистике мало имеет отношение. © RawonaM

Bhudh

Цитата: Квас\??_, \?!_, \!?_, \??_
Я в Punto почти так же сделал, только _ вместо \.
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

lehoslav

Wenn mit mir und denn noch drey Personen es vorbey ist in unserem Dorf, alsdann wird wohl niemand recht wissen, wie ein Hund auf Wendisch genannt wirdt.

Квас

Цитата: Bhudh от октября  4, 2010, 20:22
Я в Punto почти так же сделал, только _ вместо \.

Может быть, я покажусь не к месту мелочным, но это два нажатия вместо одного. :green:
Пишите письма! :)

Квас

В следующей версии планируется:
 - постановка акцентов над буквами, заданными командами, с помощью обычных команд: \'\ae даёт ǽ;
 - автозамена на вводe `  и ' на открывающую и закрывающую кавычки, а ` `  и '' — на двойные кавычки (будут созданы специальные команды для получения этих ненужных знаков);
 - командные последовательности будут оканчиваться не только пробелом, но и другими небуквенными знаками (а также после Enter и Tab); видимо, в связи с этим придётся отказаться от команд, несовместимых с ТеХом;
 - есть искушение погрешить против ТеХа и назначить тире на два дефиса;
 - интерфейс: скрипт будет блокироваться и разблокироваться с помощью горячих клавиш.

Ещё хочется символов добавить. В юникоде есть символ в виде руки, указывающей пальцем (привлечение внимания)?
Пишите письма! :)

Bhudh

Цитироватьесть искушение погрешить против ТеХа и назначить тире на два дефиса;
:yes: У меня и на 2 и на 3.
Хотя подумываю на 2 поставить figure|n-dash...
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Yitzik

Квас, спасибо. Это интересно. Надо затестить. А вы не пробовали сделать раскладку для какого-нибудь нелатинского письма, напр. армянского? А то я пока что не врубился, как большой и маленькой букве разные значения присвоить.
Paran Quenya ar quetin Esperanto!

Esvan


Offtop





Квас

Цитата: Yitzik от октября  5, 2010, 11:19
А вы не пробовали сделать раскладку для какого-нибудь нелатинского письма, напр. армянского? А то я пока что не врубился, как большой и маленькой букве разные значения присвоить.

Я не пробовал, потому что, во‐первых, у меня слабое представление о нелатинских письменностях. Но принципиальных сложностей нет, можно обсудить. Времени на это уходит немного (тем же AHK сделал некоторую автоматизацию для извлечения юникодовских кодов). Если речь об армянском письме, то мне надо просто разобраться с раскладкой.

Нужно будет добавить сочетания клавиш для активации / дезактивации раскладки. Это можно сделать в том же скрипте, а можно сделать второй управляющий.

Автозамены с заглавными буквами делаются как и со строчными, например,

:*?С:А::
SendInput{U+xxxx}
Return

Здесь указаны опции:
* заменяет сразу, не дожидаясь ending character;
? позволяет делать замену внутри слова;
С — чувствительность к регистру.
Можно написать директиву
#Hotkey *?C
которая будет применять указанные опции ко всем hotstring‐ам, записанным ниже неё.

Если скрипт должен сам активировать и дезактивировать горячие строки, то, наверно, команды посложнее будут.

Цитата: Esvan от октября  5, 2010, 11:58
Извините, но я не понял, а зачем это всё вообще?

Это ещё один способ вводить с клавиатуры много‐много символов. Альтернатива модифицированию раскладок или добавлению новых раскладок.

Цитата: Esvan от октября  5, 2010, 11:58
Можно ссылку на тему, где обсуждалось?

Где обсуждалось что?
Пишите письма! :)

Esvan

Цитата: Квас от октября  5, 2010, 14:00
Цитата: Esvan от октября  5, 2010, 11:58
Извините, но я не понял, а зачем это всё вообще?
Это ещё один способ вводить с клавиатуры много‐много символов. Альтернатива модифицированию раскладок или добавлению новых раскладок.

Понятно.


Цитата: Квас от октября  5, 2010, 14:00
Цитата: Esvan от октября  5, 2010, 11:58
Можно ссылку на тему, где обсуждалось?
Где обсуждалось что?
Ну мне так показалось, что эта тема - продолжение другой, "теоретической".
Спасибо. Вопрос закрыт.

Квас

Раскладку надо всё же делать с помощью горячих клавиш, а не автозамен, потому что она не должна зависеть от текущего языка. Я уже сделал модель армянской, в которой пока только одна буква, но зато понимает шифт и капс, а также включается и выключается горячими клавишами. Раскладка из википедии:
(wiki/ru) Раскладка_клавиатуры
Пишите письма! :)

Квас

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

Yitzik

Цитата: Квас от октября  5, 2010, 14:00
Автозамены с заглавными буквами делаются как и со строчными, например,
Код: [Выделить]:*?С:А::
SendInput{U+xxxx}
Return
Здесь указаны опции:
* заменяет сразу, не дожидаясь ending character;
? позволяет делать замену внутри слова;
С — чувствительность к регистру.
Можно написать директиву
#Hotkey *?C
которая будет применять указанные опции ко всем hotstring‐ам, записанным ниже неё.
Спасибо. Еще не тестил, но видимо это оно.

Цитата: Квас от октября  5, 2010, 21:11
Какая лучше?
Говорил со студенткой из Армении. Вторая (на еанк.нет) однозначно более распространенная. Кстати, стандардтные под Винду - отстой.
Paran Quenya ar quetin Esperanto!

Квас

Цитата: Yitzik от октября  5, 2010, 22:26
Вторая (на еанк.нет) однозначно более распространенная.

Значит, её и сделаем.
Пишите письма! :)

Квас

Прилагаю черновой вариант. Буквы расставлены все, шифт и капс они понимают. Вы посмотрите, не перепутал ли я чего. Особенно беспокоят буквы, которые на 6 (строчную в таблице символов не обнаружил, а заглавная похожа на находящуюся на U). Сравнивал эти две картинки:
http://www.eanc.net/images/imp/ru/help/virtual_keyboard/gallery/main.gif
http://www.kayfot.com/ARMENIA/Keyboard_ARM.png

И ещё хотелось бы выяснить, что там с пунктуацией: какая используется и где располагается. В таблице символов нашёл armenian full stop U+0589 и armenian hyphen U+058A.

Пока что раскладка не может сама деактивироваться, надо вручную делать suspend. Зато выключается по Win + F3. Вообще, мысль такая: она загружается, при этом использующийся язык (неважно какой) не меняется, а затем её можно включать и выключать сочетаниями клавиш. Так что если с армянским часто работать, можно и в автозагрузку, она ничему мешать не будет.
Пишите письма! :)

Yitzik

Спасибки. У меня щас перегрузка: хожу на лекции с жутко простуженным горлом. Поэтому на что-то активное типа протестить клаву сил уже не хватает. Мне, конечно, интереснее было бы понять, как эта прога работает, и написать самому.

Пунктуация там радикально неевропейская. При случае опишу отдельно (бли нэдэр).
Paran Quenya ar quetin Esperanto!

Квас

Цитата: Yitzik от октября  6, 2010, 21:50
У меня щас перегрузка: хожу на лекции с жутко простуженным горлом.

Сочувствую!

Когда будет время — можем пообщаться на эту тему. У AHK большие возможности, которые осваивать и осваивать. Но написать раскладку в принципе просто, трудоёмкость заключается в нахождении кучи кодов в юникоде. Не мешает вспомогательный скриптик.
Пишите письма! :)

Тайльнемер

Цитата: Квас от октября  6, 2010, 22:05
трудоёмкость заключается в нахождении кучи кодов в юникоде
Что это означает?

Yitzik

Paran Quenya ar quetin Esperanto!

mnashe

Цитата: Квас от октября  4, 2010, 17:12
а юникод понимает AutoHotkey_L, которым я и пользуюсь
Ах, вот оно что! А я всё думал, как же его этому научить.
Так что придётся мне у себя стандартный AutoHotkey заменить на AutoHotkey_L...
Цитата: Yitzik от октября  7, 2010, 10:29
Ващето есть таблицы с кодами.
Вот таблички, которые я для себя делал:
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

Квас

Цитата: Тайльнемер от октября  7, 2010, 06:57
Цитата: Квас от Вчера в 23:05
Цитироватьтрудоёмкость заключается в нахождении кучи кодов в юникоде
Что это означает?

В таблице символов найти символ, посмотреть его код, перенести в программу, проверить, и это в цикле. Нудно.
Пишите письма! :)

Квас

Цитата: mnashe от октября  7, 2010, 12:25
Так что придётся мне у себя стандартный AutoHotkey заменить на AutoHotkey_L...

Может быть, стоит их оба держать. Вчера обнаружил, что AHK_L не работает со строками автозамены, в которых есть кириллица. Пытаюсь провентилировать этот вопрос.
Пишите письма! :)

mnashe

Цитата: Квас от октября  7, 2010, 12:33
Может быть, стоит их оба держать. Вчера обнаружил, что AHK_L не работает со строками автозамены, в которых есть кириллица. Пытаюсь провентилировать этот вопрос.
Так наверно её надо в UTF-8 набирать, нет?
Адепт единственного числа и безродового склонения
שָׁלוֹם עֲלֵיכֶם!

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

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

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

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

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