Mahou
Mahou copied to clipboard
Как это сделать (транслитерация)?
- Хочу транслитерировать букву "е" в начале слова или после гласных как "ye", в остальных случаях как "e". Это я мог сделать через TSDict.txt. Но не польностю:
е| ye ае|aye уе|uye ое|oye ие|iye яе|yaye ёе|yoye юе|yuye
Все это работает. Но если слова с "е" в начале абзаца, переводится как "e". Как её транслитерировать как "ye"?
Например: Если едешь в Екатеринбург, сообщи мне. Сейчас транслитеруется так: Esli yedesh v Yekaterinburg, soobshi mne. Можно ли так сделать: Yesli yedesh v Yekaterinburg, soobshi mne.
- Ну, вообще можно использовать подстановочные знаки (regular expression)? Если да, тогда такие трудности легко решать. Вот, буквы Ш, Ч на нашем латинском алфавите в заглавном регистре пишется как "Sh", "Ch". Но если все слова в верхном регистре надо писать как "SH", "CH". И это касаятся буквам Я, Ё, Е, Ю. Это правило можно добавить через TSDict.txt или другим способом?
Например: Шавкат поедет в Россию - в Екатеринбург, а потом в Чехию - в Прагу. Сейчас транслитеруется так (все в норме): Shavkat poyedet v Rossiyu - v Yekaterinburg, a potom v Chexiyu - v Pragu. В верхном регистре: ШАВКАТ ПОЕДЕТ В РОССИЮ - В ЕКАТЕРИНБУРГ, А ПОТОМ В ЧЕХИЮ - В ПРАГУ. Сейчас транслитеруется так: ShAVKAT POYEDET V ROSSIYu - V YeKATERINBURG, A POTOM V ChEXIYu - V PRAGU. Можно ли так сделать: SHAVKAT POYEDET V ROSSIYU - V YEKATERINBURG, A POTOM V CHEXIYU - V PRAGU.
Хелп, плиз.
Извиняюсь, что много задаю вопросы.
@yuklov Да тут нужно будет "усовершенствовать" транслитерацию. Сейчас замена только "символы" на "символы", может добавить еще файл для замен по regex?
может добавить еще файл для замен по regex?
@BladeMight
Если использовать regex,
- Можно на программу добавить новая функция , которая транслитерует файл, например, ворд файл.
- Через функциональный файл как TSDict.txt, например, RegEX.txt можно добавить новая функция, которая работает по принципу подстановочных знаков.
- По моему, если возможно, лучше добавить возможность использовать regex прямо на файл TSDict.txt.
Пример
Е| Ye
АЕ|AYE
УЕ|UYE
ОЕ|OYE
ИЕ|IYE
ЯЕ|YAYE
ЁЕ|YOYE
ЮЕ|YUYE
Вышеуказанную правилу сделал раньше в макросе libreoffice так:
"([ [:space:]\tАИОУЎЕЭЪЬ])Е" ==== "YE$1" (заглавные гласные+Е = YE)
"^Е([:upper:])" ==== "YE$1" (В начале слова или абзаца Е + заглавные буквы = YE)
"^Е" - "([ [:space:]\tаиоуўеэъь])е" ==== "Ye" (это когда абзац или слова начинается с заглавной "Е" и после неё есть гласные)
C regex будет очень удобно. Например, на TSDict.txt пишу:
^Е|Ye
^е|ye
Всё! Во всех словах, это буква в начале слова переводится как "Ye" и "ye". Надеюсь, можно добавить эту возможность.
Все эти сказанные - предложения, чтобы расширить функционал и возможности программы.
И ещё одна проблема у меня. С буквой "Ъ" и "ъ". Оба транслитерирую как "ʼ" (модификатор буквы апостроф). На латиницу нормально переводится, но обратно сделается "ошибка".
Пример: Маъруза МАЪРУЗА
после траслитерации: Maʼruza MAʼRUZA
Обратная транслитерация: Маъруза МАъРУЗА
Если поменяю
ъ|ʼ
Ъ|’
на
Ъ|’
ъ|ʼ
будет так: МаЪруза МАЪРУЗА
Что делать?
Сейчас доделаю "замены по regex" в TSDict.txt
, и потом можно будет использовать что-то вроде этого:
Добавил поддержку regex в TSDict.txt в e4797c3, синтаксис такой:
s/что/на что/|s/что(обратная)/на что(операция)/
или если обратная операция не требуется:
s/что/на что/|
"s" в начале и 3 "/"(unescaped) обязательны для каждой строчки! И так, при словаре:
TSDict.txt (нажми тут чтобы развернуть)
Ъ|ʼ
ъ|ʼ
s/\bе/Ye/|s/\bYe/е/
s/\bЕ/YE/|s/\bYE/Е/
s/(?<=[A-Z])ʼ(?=[A-Z])/Ъ/|
s/(?<=[a-z])ʼ(?=[a-z])/ъ/|
Щ|SCH
щ|sch
Ч|CH
Ш|SH
Ё|JO
ВВ|W
Є|EH
ю|yu
я|ya
є|eh
Ж|ZH
ч|ch
ш|sh
Й|JJ
ж|zh
Э|EH
Ю|YU
й|jj
Я|YA
ё|jo
э|eh
вв|w
кь|q
КЬ|Q
|ь
№|#
А|A
Б|B
В|V
Г|G
Д|D
Е|E
З|Z
И|I
К|K
Л|L
М|M
Н|N
О|O
П|P
Р|R
С|S
Т|T
У|U
Ф|F
Х|H
Ц|C
а|a
б|b
в|v
г|g
д|d
з|z
и|i
к|k
л|l
м|m
н|n
о|o
п|p
р|r
с|s
у|u
ф|f
х|h
ц|c
Ы|Y
Ь|J
е|e
т|t
ы|y
Mahou <e4797c3
> заменяет:
Если едешь в Екатеринбург, сообщи мне.
На:
YEsli Yedesh v YEkaterinburg, soobschi mne.
И обратно:
Если едеш в Екатеринбург, сообщи мне.
И еще примеры:
Маъруза
=> Maʼruza
=> Маъруза
МАЪРУЗА
=> MAʼRUZA
=> МАЪРУЗА
@yuklov Пока что могут быть баги, если что заметишь - пиши.
Порядок правил в TSDict.txt очень важен, иначе будет что-то вроде того что ты писал:
Если поменяю
ъ|ʼ Ъ|’
на
Ъ|’ ъ|ʼ
будет так:
МаЪруза МАЪРУЗА
Объясняю:
когда ъ|ʼ
была выше, Ъ|’
тогда первый символ ’
заменялся на ъ
(т.е. ту что выше), а та что ниже уже "не видит" символ ’
т.к. та что выше уже его заменила.
@yuklov Пока что могут быть баги, если что заметишь - пиши.
Код под себя настроил:
s/\bе/ye/|s/\bye/е/
s/\bЕ/Ye/|s/\bYe/Е/
s/(?<=[A-Z])ʼ(?=[A-Z])/Ъ/|
s/(?<=[a-z])ʼ(?=[a-z])/ъ/|
Если едеш в Екатеринбург, сообщи мне. ЕКАТЕРИНБУРГ
Yesli yedesh v Yekaterinburg, soobshʻi mne. YeKATERINBURG
Но что делать, чтобы ЕКАТЕРИНБУРГ, КАТАЕВ переводился так: YEKATERINBURG, KATAYEV
Какой RegExp использовать? Коды (например, s/\bе/ye/|s/\bye/е/) вставил в https://regex101.com/. Но там ошибка показывает. Говорить, только \be вставить можно.
Если есть правила RegExp, изучив я буду настроить под себя.
Попробовал этот код, но не сработал:
s/\(?=[АИОУЎЕЭЪЬ])Е/YE/|s/(?=[АИОУЎЕЭЪЬ])YE/Е/
Наконец-то нашёл, по моему:
s/(?<=[А-Я])Ч(?=[А-Я])/CH/|s/(?<=[A-Z])CH(?=[A-Z])/Ч/
s/(?<=[АИОУЎЕЭЪЬ])Е/YE/|s/(?=[AIOUOʻYEEʼ])YE/Е/
s/(?=[АИОУЎЕЭЪЬ])Е/YE/|s/(?=[АИОУЎЕЭЪЬ])YE/Е/
Хм а в \(?=
зачем \
перед: (
?
(?=...)
= позитивный просмотр вперед, а похоже нужно назад (?<=...)
. Или если всё же вперед, то поставь его после Е
.
Но что делать, чтобы ЕКАТЕРИНБУРГ, КАТАЕВ переводился так: YEKATERINBURG, KATAYEV
Тогда нужно два regex, одно для всё слово с большой буквы, Другое для не всё слово с большой буквы:
((^|\b)|[А-ДЖ-ЯЁ]*)Е(?=[А-ДЕЖ-ЯЁ]+|($|\b)) (Ловит букву Е, если всё слово В ВЕРХНЕМ РЕГИСТРЕ)
Нашел ошибку в парсинге TSDict.txt, при | больше 1 разбивка была не правильной, в latest-commit 3f8c7bf - исправил, теперь в latest-commit можно:
s/((^|\b)|[А-ДЖ-ЯЁ]*)Е(?=[А-ДЕЖ-ЯЁ]+|($|\b))/$1YE/|s/((^|\b)|[A-DF-XZ]*)YE(?=[A-Z]+|($|\b))/$1Е/
Так же я писал:
Порядок правил в TSDict.txt очень важен
Но в итоге у стандартного Dictionary как оказалось - не сохраняется порядок, так что в c9224c1, я его заменил на DICT
, в нём 100% сохраняется порядок правил. и теперь заменяет как я внизу и написал.
Заменяет:
YEKATYERINA
=> ЕКАТЕРИНА
=> YEKATYERINA
Yekatyerina
=> Екатерина
=> Yekatyerina
Екатирина
=> Ekatirina
=> Екатирина
КАТАЕВ
=> KATAYEV
=> КАТАЕВ
ЕЕЕЕЕЕЕЕЕ
=> YEYEYEYEYEYEYEYEYE
=> ЕЕЕЕЕЕЕЕЕ
еЕеЕееЕЕЕеееЕЕ
=> yeYeyeYeyeyeYEYEYeyeyeyeYEYE
=> еЕеЕееЕЕЕеееЕЕ
При словаре:
TSDict.txt
Ъ|ʼ
ъ|ʼ
s/((^|\b)|[А-ДЖ-ЯЁ]*)Е(?=[А-ДЕЖ-ЯЁ]+|($|\b))/$1YE/|s/((^|\b)|[A-DF-XZ]*)YE(?=[A-Z]+|($|\b))/$1Е/
Е|Ye
е|ye
s/(?<=[A-Z])ʼ(?=[A-Z])/Ъ/|
s/(?<=[a-z])ʼ(?=[a-z])/ъ/|
Щ|SCH
щ|sch
Ч|CH
Ш|SH
Ж|JO
ВВ|W
Є|EH
ю|yu
я|ya
є|eh
Ж|ZH
ч|ch
ш|sh
Й|JJ
ж|zh
Э|EH
Ю|YU
й|jj
Я|YA
Ж|jo
э|eh
вв|w
кь|q
КЬ|Q
|ь
№|#
А|A
Б|B
В|V
Г|G
Д|D
З|Z
И|I
К|K
Л|L
М|M
Н|N
О|O
П|P
Р|R
С|S
Т|T
У|U
Ф|F
Х|H
Ц|C
а|a
б|b
в|v
г|g
д|d
з|z
и|i
к|k
л|l
м|m
н|n
о|o
п|p
р|r
с|s
у|u
ф|f
х|h
ц|c
Ы|Y
Ь|J
т|t
ы|y
s/(?<=[А-Я])Ч(?=[А-Я])/CH/|s/(?<=[A-Z])CH(?=[A-Z])/Ч/
Неплохо, только (?<=...)
Positive Lookbehind должен быть фиксированной длинны, так что проверить все ли буквы в слове с большой буквы - не получится. В таких случаях лучше всего пользоваться либо группами, или только (?=...)
.
(теперь благодаря DICT) Порядок в правилах имеет большое значение на результат(и точно сохраняется!):
s/((^|\b)|[А-ДЖ-ЯЁ])Е(?=[А-ДЖ-ЯЁ]+|(^|\b))/$1YE/|s/((^|\b)|[A-DF-XZ])YE(?=[A-DF-XZ]+|(^|\b))/$1Е/ Е|Ye е|ye
Т.е. сначала проверяет регулярное выражение, потом обычные замены.
В a2f08a1 добавил важное исправление, теперь 1 повторяющийся символ тоже работает: (отредактировал пост выше)
В общем осталось только "проверять" и "придумывать" правила....
Вчера до обновления сделал такие правила и заставил 😅 работать программу как я хотел:
s/ЪЕ/YE/|
s/ъе/ye/|
s/ъЕ/YE/|
Ъ|ʼ
ъ|ʼ
s/(?<=[A-Z])ʼ(?=[A-Z])/Ъ/|
s/(?<=[a-z])ʼ(?=[a-z])/ъ/|
Ў|Oʻ
ў|oʻ
s/(?<=[^ЎЁЮЯЕАИОУЭЪЬ])Ц/S/|
s/Ч(?=[А-ЯЎҚҒҲ ])/CH/|s/CH(?=[OʻGʻA-Z ])/Ч/
s/(?<=[А-ЯЎҚҒҲ])Ч/CH/|s(?
```<=[OʻGʻA-Z])CH/Ч/
s/Ш(?=[А-ЯЎҚҒҲ ])/SH/|s/SH(?=[OʻGʻA-Z ])/Ш/
s/(?<=[А-ЯЎҚҒҲ])Ш/SH/|s(?<=[OʻGʻA-Z])SH/Ш/
s/(?<=[ЎЁЮЯЕАИОУЭЪЬ])Е/YE/|s/(?=[OʻYOYUYAYEAIOUE])YE/Е/
s/\bЕ/Ye/|s/\bYe/Е/
s/Ye(?=[A-ZА-ЯЎҚҒҲ])/YE/|
s/\bЁ/Yo/|s/\bYo/Ё/
s/Ё(?=[A-ZА-ЯЎҚҒҲ ])/YO/|s/YO(?=[OʻGʻA-Z ])/Ё/
s/(?<=[A-ZА-ЯЎҚҒҲ])Ё/YO/|s(?<=[OʻGʻA-Z])YO/Ё/
s/(?<=[A-ZЎЁЮЯЕАИОУЭЪЬ])Ё/YO/|s/(?=[OʻYOYUYAYEAIOUE])YO/Ё/
s/Yo(?=[A-ZА-ЯЎҚҒҲ])/YO/|
s/Ю(?=[A-ZА-ЯЎҚҒҲ ])/YU/|s/YU(?=[OʻGʻA-Z ])/Ю/
s/(?<=[A-ZА-ЯЎҚҒҲ])Ю/YU/|s(?<=[OʻGʻA-Z])YU/Ю/
s/(?<=[ЎЁЮЯЕАИОУЭЪЬ])Ю/YU/|s/(?=[OʻYOYUYAYEAIOUE])YU/Ю/
s/Я(?=[A-ZА-ЯЎҚҒҲ ])/YA/|s/YA(?=[OʻGʻA-Z ])/Я/
s/(?<=[A-ZА-ЯЎҚҒҲ])Я/YA/|s(?<=[OʻGʻA-Z])YA/Я/
s/(?<=[ЎЁЮЯЕАИОУЭЪЬ])Я/YA/|s/(?=[OʻYOYUYAYEAIOUE])YA/Я/
s/\bе/ye/|s/\bye/е/
s/(?<=[^ўёюяеаиоуэъь])ц/s/|
s/(?<=[ўёюяеаиоуэъь])е/ye/|s/(?=[oʻyoyuyayeaioue])ye/е/
Ғ|Gʻ
ғ|gʻ
...
...
қ|q
ҳ|h
Ь|
ь|
s/\bTS/S/|
s/\bts/s/|
s/OʻYo/OʻYO/|
s/OʻYu/OʻYU/|
s/OʻYa/OʻYA/|
Теперь заново делаю по новому правилу. По моему в моем коде много лишнего.
(?=[OʻYOYUYAYEAIOUE])
Думаю такие правила будут "ловить" только 1 символ, тебе нужно наверно что-то вроде этого: ([Oʻ]|Y?[AOUEI])
s/(?=[OʻYOYUYAYEAIOUE])YE/Е/
Твои правила не проверяют "то что после" YE
?
По моему в моем коде много лишнего
Да... много....
s/(?<=[^ЎЁЮЯЕАИОУЭЪЬ])Ц/S/|
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
s/((^|\b)|[^ЎЁЮЯЕАИОУЭЪЬ])Е/$1E/|s/((^|\b)|[^OʻYOYUYAYEAIOUE])E/$1Е/
s/((^|\b)|[ўёюяеаиоуэъь])е/$1ye/|s/((^|\b)|[oʻyoyuyayeaioue])ye/$1е/
s/((^|\b)|[^ўёюяеаиоуэъь])е/$1e/|s/((^|\b)|[^oʻyoyuyayeaioue])e/$1е/
s/((^|\b)|[А-ЯЎҚҒҲ])Ч(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1CH/|s/((^|\b)|[OʻGʻA-Z])CH(?=[OʻGʻA-Z]+|(^|\b))/$1Ч/
Я убрал мой код, и поставил этот код. После этого получился такой результат (пока правила только на буквы Е, Ч, Ц.
Екатеринбург Катаев ЕКАТЕРИНБУРГ КАТАЕВ қаер буер кетса => Yekaterinburg Katayev YEKATERINBURG KATAYEV qayer buyer ketsa => Йекатеринбург Катаев ЕКАТЕРИНБУРГ КАТАЕВ қаер буер кетса
В начале слова заглавная Е переводится в обратом пути как Йе. Нужен был Е. Что-то неверно?
Или добавить отдельно:
s/\bЕ/Ye/|s/\bYe/Е/
Думаю такие правила будут "ловить" только 1 символ, тебе нужно наверно что-то вроде этого: ([Oʻ]|Y?[AOUEI])
Вчера работал (?<=[OʻYOYUYAYEAIOUE]).
s/(?<=[ЎЁЮЯЕАИОУЭЪЬ])Е/YE/|s/(?<=[OʻYOYUYAYEAIOUE])YE/Е/
Это правила для того, что если перед Е есть заглавные гласные тогда переводится как YE.
Или есть другой легкий способ?
Здесь ʻ не английский апостроф, этот символ не делить слово. Английские ‘ и ’ делит слова.
В начале слова заглавная Е переводится в обратом пути как Йе. Нужен был Е. Что-то неверно?
Порядок правил в словаре, в общем наличие Й|Y
e|е
перед правилом regex.
В начале слова заглавная Е переводится в обратом пути как Йе. Нужен был Е. Что-то неверно?
Порядок правил в словаре, в общем наличие
Й|Y
e|е
перед правилом regex.
Нет Й|Y
e|е
после regex.
После
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
s/((^|\b)|[^ЎЁЮЯЕАИОУЭЪЬ])Е/$1E/|s/((^|\b)|[^OʻYOYUYAYEAIOUE])E/$1Е/
добавил:
s/\bЕ/Ye/|s/\bYe/Е/
Теперь правильно переводится.
Нет Й|Y e|е после regex.
Значит отсутствие: Е|Ye
перед ними.
s/\bЕ/Ye/|s/\bYe/Е/
Тут используется \b
в начале поэтому будет работать только для "начала слов"+Е/Ye, если тебе такого не надо тогда просто:
Е|Ye
после(или до) regex, но перед(обязательно!) Y|Й
и e|е
Значит отсутствие: Е|Ye.
Теперь видел и знал:
E меня был.
Е|E.
Это раньше писал, тогда не было это правило:
s/((^|\b)|[^ЎЁЮЯЕАИОУЭЪЬ])Е/$1E/|s/((^|\b)|[^OʻYOYUYAYEAIOUE])E/$1Е/
Теперь добавил так:
Е|Ye.
Перезапустил прог, но "ошибка" повторяется.
Поставил так, праямо после regex:
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
s/((^|\b)|[^ЎЁЮЯЕАИОУЭЪЬ])Е/$1E/|s/((^|\b)|[^OʻYOYUYAYEAIOUE])E/$1Е/
Е|Ye
но перед:
s/((^|\b)|[ўёюяеаиоуэъь])е/$1ye/|s/((^|\b)|[oʻyoyuyayeaioue])ye/$1е/
s/((^|\b)|[^ўёюяеаиоуэъь])е/$1e/|s/((^|\b)|[^oʻyoyuyayeaioue])e/$1е/
Теперь переводится как **YEkaterinburg**.
[^ЎЁЮЯЕАИОУЭЪЬ]
- НЕ правильно! Как это определит являются ли все символы что не
ЎЁЮЯЕАИОУЭЪЬ
в верхнем регистре? По сути там может быть любой символ кроме них...
Скажи "словами" как тебе надо и дай символы которые хочешь заменить, и я тебе объясню.
[^ЎЁЮЯЕАИОУЭЪЬ]
* НЕ правильно! Как это определит являются ли все символы что не `ЎЁЮЯЕАИОУЭЪЬ` в верхнем регистре? По сути там может быть любой символ кроме них...
Если перед Е не гласные, тогда переводить надо как "E". Например: ДЕКАН => DEKAN СЕМЕСТР=>SEMESTR
Какой regex использовать?
Если перед Е не гласные, тогда переводить надо как "E"
Нужно "выбрать" их всех(или их границы) в []
, пример: [Б-ДЖЗК-НП-ТФ-Щ]
, (удобная таблица юникода: foxtools)
Какой regex использовать?
примерно так: s/([Б-ДЖЗК-НП-ТФ-Щ])Е/$1E/
для первой части
Скажи "словами" как тебе надо и дай символы которые хочешь заменить, и я тебе объясню.
Е Если Е перед гласными (ЎЁЮЯЕАИОУЭЪЬ - гласные и ьъ), тогда надо переводит как YE. В нижнем регистре как ye.
Ц
s/(?<=[^ЎЁЮЯЕАИОУЭЪЬ])Ц/s/|
s/(?<=[^ўёюяеаиоуэъь])ц/s/|
...
Ц|TS
ц|ts
Если перед Ц есть гласные, тогда надо переводить как TS (ц=>ts). В остальных случаюх как S (s). Но это буква встречается только в заимствованных словах. По этому обратная транслитерация опасно: все слова, у которых есть TS (ts) переводится как Ц (ц). Этого не надо. На языке очень много слов, у которых TS (ts) нужно переводить как ТС (тс). Так, не сделал обратную транслитерацию.
ЛИЦЕЙ => LITSEY => ЛИТСЕЙ (ну, терплю) лицей => litsey => литсей (ну, и этому терплю)
Ч, Ш Если перед и после Ч ест буквы в верхном регистре, тогда надо переводить как СH.
Если заглавный Ч в начале предложения или в средение, тогда надо переводить как Ch.
Что с Чаком Норрисом? Chto s Chakom Norrisom?
По моему, с Ч, Ш я справлялся.
s/((^|\b)|[А-ЯЎҚҒҲ])Ч(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1CH/|s/((^|\b)|[OʻGʻA-Z])CH(?=[OʻGʻA-Z]+|(^|\b))/$1Ч/
Ч|Ch
ч|ch
Нормально переводится.
Какой regex использовать?
примерно так:
s/([Б-ДЖЗК-НП-ТФ-Щ])Е/$1E/
для первой части
Да понял, согласные указать надо. Если
[^ЎЁЮЯЕАИОУЭЪЬ]
другие символы кроме букв тоже входить в состав.
[^ЎЁЮЯЕАИОУЭЪЬ]
* НЕ правильно! Как это определит являются ли все символы что не `ЎЁЮЯЕАИОУЭЪЬ` в верхнем регистре? По сути там может быть любой символ кроме них...
Дааа....
И все буквы в нижнем регистре входил в состав.
Если сделал как [^ЎЁЮЯЕАИОУЭЪЬўёюяеаиоуэъь]
, было бы работал.
Поставил
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])Е/$1E/|s/|[GʻB-DF-HJ-NP-TV-Z])E/$1Е/
транслитерация и горячие клавиши перестал работать.
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])Е/$1E/|s/|[GʻB-DF-HJ-NP-TV-Z])E/$1Е/
и
s/((^|\b)|[Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])Е/$1E/|s/((^|\b)|[GʻB-DF-HJ-NP-TV-Z])E/$1Е/
и даже 😁 s/((^|\b)|[^ЎЁЮЯЕАИОУЭЪЬўёюяеаиоуэъь])Е/$1E/|s/((^|\b)|[^OʻYOYUYAYEAIOUEoʻyoyuyayeaioue])E/$1Е/ не работал.
И с Э тоже проблема, в обратном переводе во всех случаях переводиться как Е и е. (На латиницу переводится нормально)
Эркин Хемингуей элим Эркин => Erkin Xeminguyey elim Erkin => Еркин Хемингуей елим Еркин
Если сделал как
[^ЎЁЮЯЕАИОУЭЪЬўёюяеаиоуэъь]
, было бы работал.
И это тогда тоже будет ловится 花
, нужно ЯВНО указывать что должно быть.
транслитерация и горячие клавиши перестал работать.
Значит ошибка в regex. regex101 говорит что во второй части ты пропусти (
в начале.
Нужно сделать чтобы не "убивались" гор. клавиши.
Нужно сделать чтобы не "убивались" гор. клавиши.
Сделал в 2ecf16c, теперь если включено журналироваие действий
(если не включено то просто ошибка в regex игнорируется, и гор. клавиши не "убиваются"), то в лог файл будет писаться такая строчка если произошла ошибка в regex:
06:01:01.336 [E]: [RegexRP] > Regex replace FAILED, error in regex: ?<=[ЎЁЮЯЕАИОУЭЪЬ])Е error message: parsing "?<=[ЎЁЮЯЕАИОУЭЪЬ])Е" - Quantifier {x,y} following nothing.
По моему, с Ч, Ш я справлялся
Похоже ты уже понимаешь что к чему. :eye: _ :eye:
По моему, с Ч, Ш я справлялся
Похоже ты уже понимаешь что к чему. 👁 _ 👁
Да, уж... чуствую себя как программист 😎. Ну я дилетант в этой сфере. По этому у меня многие пути.
Ну, вот, наконец, сделал код. Все в норме, проста Ц в начале слова переводитья как Ts и TS. Как сделать, чтобы в начале слова Ц переводился как S. В обратном Ц. Если трудно, обратный не нужан
Вот, мой код:
s/(?<=[A-Z])ʼ(?=[A-Z])/Ъ/|
s/(?<=[a-z])ʼ(?=[a-z])/ъ/|
s/Е([а-яўқғҳ])/Ye$1/|s/Ye([oʻgʻa-z])/Е$1/
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])Е/$1E/|s/([GʻB-DF-HJ-NP-TV-Z])E/$1Е/
s/((^|\b)|[ўёюяеаиоуэъь])е/$1ye/|s/((^|\b)|[oʻyoyuyayeaioue])ye/$1е/
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])е/$1e/|s/([GʻB-DF-HJ-NP-TV-Z])e/$1е/
s/([б-джзк-нп-тф-щқғҳ])е/$1e/|s/([gʻb-df-hj-np-tv-z])e/$1е/
s/((^|\b)|[А-ЯЎҚҒҲ])Ч(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1CH/|s/((^|\b)|[OʻGʻA-Z])CH(?=[OʻGʻA-Z]+|(^|\b))/$1Ч/
s/((^|\b)|[А-ЯЎҚҒҲ])Ш(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1SH/|s/((^|\b)|[OʻGʻA-Z])SH(?=[OʻGʻA-Z]+|(^|\b))/$1Ш/
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Ц/$1TS/|
s/((^|\b)|[ўёюяеаиоуэъь])ц/$1ts/|
s/Ц([А-ЯЎҚҒҲOʻGʻA-Zа-яўқғҳoʻgʻa-z])/S$1/|
s/((^|\b)|[Б-ДЖЗК-НП-ТФ-ЩҚҒҲGʻB-DF-HJ-NP-TV-Z])Ц(?=[Б-ДЖЗК-НП-ТФ-ЩҚҒҲGʻB-DF-HJ-NP-TV-Z]+|(^|\b))/$1S/|
s/((^|\b)|[б-джзк-нп-тф-щқғҳ])ц(?=[б-джзк-нп-тф-щқғҳ]+|(^|\B))/$1s/|
При этом убрал
Ц|TS
ц|ts
и
Е|Ye
е|ye
С буквой Е пока все в норме.
По моему, все, закончил! Вот мой конечный код:
s/Е([а-яўқғҳ])/Ye$1/|s/Ye([oʻgʻa-z])/Е$1/
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])Е/$1E/|s/([GʻB-DF-HJ-NP-TV-Z])E/$1Е/
s/((^|\b)|[ўёюяеаиоуэъь])е/$1ye/|s/((^|\b)|[oʻyoyuyayeaioue])ye/$1е/
s/([Б-ДЖЗК-НП-ТФ-ЩҚҒҲ])е/$1e/|s/([GʻB-DF-HJ-NP-TV-Z])e/$1е/
s/([б-джзк-нп-тф-щқғҳ])е/$1e/|s/([gʻb-df-hj-np-tv-z])e/$1е/
s/((^|\b)|[А-ЯЎҚҒҲ])Ч(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1CH/|s/((^|\b)|[OʻGʻA-Z])CH(?=[OʻGʻA-Z]+|(^|\b))/$1Ч/
s/((^|\b)|[А-ЯЎҚҒҲ])Ш(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1SH/|s/((^|\b)|[OʻGʻA-Z])SH(?=[OʻGʻA-Z]+|(^|\b))/$1Ш/
s/([ЎЁЮЯЕАИОУЭЪЬ])Ц/$1TS/|
s/([ўёюяеаиоуэъь])ц/$1ts/|
s/((^|\b))Ц/S/|
s/((^|\b))ц/s/|
s/((^|\b)|[Б-ДЖЗК-НП-ТФ-ЩҚҒҲGʻB-DF-HJ-NP-TV-Z])Ц(?=[Б-ДЖЗК-НП-ТФ-ЩҚҒҲGʻB-DF-HJ-NP-TV-Z]+|(^|\b))/$1S/|
s/((^|\b)|[б-джзк-нп-тф-щқғҳ])ц(?=[б-джзк-нп-тф-щқғҳ]+|(^|\B))/$1s/|
Все в норме?
Кстати, после последного обновления при конвертации или траслитерации выделенного текста замена раскладки перестал работать. При конвертации последного слово раскладка меняется.
Или сначала был таким?
после последного обновления при конвертации или траслитерации выделенного текста замена раскладки перестал работать
Ты про это?
т.е. "чтобы менялась раскладка после конвертации выделенного".
Или про LayoutReplaces.txt
?
Все в норме?
Похоже что да. Но насчёт(и похожих):
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
Может здесь тебе так же нужна проверка на слова после Е
? Т.е. добавить (?=[А-Я]+|(^|\b))
после? чтобы проверить "является ли всё после с "ВЕРХНИМ регистром"?
Еще насчёт(повторы в []
):
[OʻYOYUYAYEAIOUE]
Все символы в []
считаются отдельно(по одному), и в []
(без +,*,{} после) берется только один любой из них, поэтому повторяющиеся символы не нужны: [OʻYOYUYAYEAIOUE]
и [ʻAIOUE]
- это одно и то же, тебе же нужно проверить на "более 1 символа", т.е. сделать можно сделать так:
(Y[OUAE]|[ʻAIOUE])
(r101).
т.е. сделать можно сделать так: (Y[OUAE]|[ʻAIOUE])
Я в шоке! 😮
Это логично и удобно.
т.е. "чтобы менялась раскладка после конвертации выделенного".
Да, функция уже была на программе. Просто вчера очень много работал и устал. Поэтому мне казался так. Сорри.
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[OʻYOYUYAYEAIOUE])YE/$1Е/
Может здесь тебе так же нужна проверка на слова после Е? Т.е. добавить (?=[А-Я]+|(^|\b)) после? чтобы проверить "является ли всё после с "ВЕРХНИМ регистром"?
По моему не нужна. Если перед Е есть гласные в ВЕРХНОМ РЕГИСТРЕ, значить все буквы на слове в ВЕРХНОМ. Последующие буквы проверить не нужно.
1. s/Е([а-яўқғҳ])/Ye$1/|s/Ye([oʻgʻa-z])/Е$1/
2. s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[Y[OUAE]|[ʻAIOUE])YE/$1Е/
Правильно ли мой код?
-
Для того, чтобы переводить заглавный Е как Ye и обратно. Екатеринбург => Yekaterinburg => Екатеринбург
-
Для того, чтобы Е с буквами в верхном регистре преводился как YE и обратно Е.
Или лучше сделать 2 как:
s/[ЎЁЮЯЕАИОУЭЪЬ])Е(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1YE$2/
Код (?=[А-ЯЎҚҒҲ]+|(^|\b))
должен означать не обязательность, а вероятность. Если после Е буквы в верхном регистре, должен работать правило. Если нет (например, САДИО МАНЕ, МОНЕ, ТОЛЕ => SADIO MANE, MONE, TOLE), то и тогда должен работат это правило.
Или так надо делать:
s/[ЎЁЮЯЕАИОУЭЪЬ])Е|(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1YE$2/
Здесь добавил | перед (?=[А-ЯЎҚҒҲ]+|(^|\b))
Но после этого Ye как Йе, YE как ЙЕ (в обратном). Что делать?
в
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[Y[OUAE]|[ʻAIOUE])YE/$1Е/
тут ((^|\b)|[Y[OUAE]|[ʻAIOUE])
где [Y[OUAE]|[ʻAIOUE]
должно быть в круглых скобках, почему у тебя в квадратных? Нужно было вот так:
s/((^|\b)|(Y[OUAE]|[ʻAIOUE]))YE/$1Е/
Т.е. в (Y[OUAE]|[ʻAIOUE])
будет соответствовать либо Y[OUAE]
(что является Y
и любая буква из []
после неё) или [ʻAIOUE]
(что является просто любая буква из []
)
или вот так: s/((^|\b)|(Y?[OUAE]|[ʻI]))YE/$1Е/
где (Y?[OUAE]|[ʻI])
значит: Y
(или нет) и любой символ из []
, или любой символ из []
(второй там где [ʻI]
(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1YE$2/
(?=...)
positive lookahead/lookbehind не ловится в группу(в этом их суть, они просто проверяют нет
(или отсутствует ли если вместо =
использовать !
, т.е. (?=...)
=> (?!...)
, (?>=)
=> (?>!)
)
ли там
(вперед для (?=...)
и назад для (?>=)
) того что в них)
, его не нужно добавлять в замену в виде $2
(и т.д.).
Ye([oʻgʻa-z])
вижу опять повторы: o
и g
уже есть в границе a-z
, и еще дважды ʻ
, может тебе нужно чтобы oʻ
или gʻ
соответствовали? Тогда так: Ye([oʻgʻa-z])
Но после этого Ye как Йе, YE как ЙЕ (в обратном). Что делать?
в
s/((^|\b)|[ЎЁЮЯЕАИОУЭЪЬ])Е/$1YE/|s/((^|\b)|[Y[OUAE]|[ʻAIOUE])YE/$1Е/
тут
((^|\b)|[Y[OUAE]|[ʻAIOUE])
где[Y[OUAE]|[ʻAIOUE]
должно быть в круглых скобках, почему у тебя в квадратных? Нужно было вот так:s/((^|\b)|(Y[OUAE]|[ʻAIOUE]))YE/$1Е/
Т.е. в
(Y[OUAE]|[ʻAIOUE])
будет соответствовать либоY[OUAE]
(что являетсяY
и любая буква из[]
после неё) или[ʻAIOUE]
(что является просто любая буква из[]
)или вот так:
s/((^|\b)|(Y?[OUAE]|[ʻI]))YE/$1Е/
где(Y?[OUAE]|[ʻI])
значит:Y
(или нет) и любой символ из[]
, или любой символ из[]
(второй там где[ʻI]
(?=[А-ЯЎҚҒҲ]+|(^|\b))/$1YE$2/
(?=...)
positive lookahead/lookbehind не ловится в группу(в этом их суть, они просто проверяют нет (или отсутствует ли если вместо=
использовать!
, т.е.(?=...)
=>(?!...)
,(?>=)
=>(?>!)
) ли там (вперед для(?=...)
и назад для(?>=)
) того что в них) , его не нужно добавлять в замену в виде$2
(и т.д.).Ye([oʻgʻa-z])
вижу опять повторы:
o
иg
уже есть в границеa-z
, и еще дваждыʻ
, может тебе нужно чтобыoʻ
илиgʻ
соответствовали? Тогда так: Ye([oʻgʻa-z])
Спасибо большое!
Ye([oʻgʻa-z])
Сделал
Ye([ʻa-z])
и
s/((^|\b)|(Y[OUAE]|[ʻAIOUE]))YE/$1Е/
и
s/((^|\b)|[ʻA-Z])YU(?=[ʻA-Z]+|(^|\b))/$1Ю/
s/((^|\b)|[ʻA-Z])SH(?=[ʻA-Z]+|(^|\b))/$1Ш/
пока все работает нормально.
Рад что всё получилось объяснить.
Вот одно положение (но не по теме)
Если выделяю слова (или предложение) с Shift+стрелки, тогда все в норме. Но если выделяю с Ctrl+A после абзаца добовляются новые пустые абзацы. Тоест ^p.
Это когда после слова (предложение, текст) ест один пустой абзац (пуста строка) - ^p. После транслитерации один ^p становится ^p^p^p^p. Как много повторится транслитерация так и умножается ^p.
Это не очень критичный. Но все таки...
Рад что всё получилось объяснить.
Благодарю. Спасибо большое.
Теперь Mahou - мой единственный переключатель. Раньше пользовался Пунтой и Карамбой одновременно. Один закрыл недостаток другого. Но оба не удовлетворили моим требованиям.
Mahou рекомендую и другим.
Если выделяю слова (или предложение) с Shift+стрелки, тогда все в норме. Но если выделяю с Ctrl+A после абзаца добовляются новые пустые абзацы. Тоест ^p.
Ты про строки? Если да, то они не "множатся":
P.S. В Notepad++ они "могут быть видимыми", я их включил чтобы показать,
CR LF
(на чёрном фоне).
Или ты о чем-то другом? Если да, в какой программе?
в какой программе?
Наверно Word?
В какой программе можно записать экранные действия. Я тоже показал бы. На ворде.
На ноутпад +++ все в норме. Я тоже тестировал. MS Word нужно тестировать.
в какой программе?
Наверно Word?
Да
Ну не знаю, нужно проверять в самом Word, это символ параграфа "видимый"?
Ну не знаю, нужно проверять в самом Word, это символ параграфа "видимый"?
Символ параграфа включил и записал процесс:
Слова выделены с Ctrl+A.
А ты можешь всё что в буфере обмена(после конвертации) сохранить в файл и отправить мне?
А ты можешь всё что в буфере обмена(после конвертации) сохранить в файл и отправить мне?
Если я правильно понял, вот файл, с которым я тестировал конвертации:
Символ параграфа включил и записал процесс
Знаешь, сейчас проверил у себя(всё таки пришлось установить word...) оказывается что: Пустая строка в конце в Word добавляется автоматически…
, т.к. Mahou вводит новые линии как клавишу Enter
, происходит такое:
действия Mahou после транслитерации:
- Вводит строку
Ўқғҳ vfnz
как текст, нажимаетEnter
- Вводит строку
Ckjdj
как текст, нажимаетEnter
- Вводит строку
Ўқғҳ
как текст, нажимаетEnter
А Word, сам добавляет в конец еще один символ новой строки.
Я сделал небольшое исправление для случаев когда это происходит в Word, в f69745b , можно проверять в latest-commit.
Это исправление не идеально, если выделить текст(только в WORD) с несколькими пустыми линиями подряд в конце выделения и не в конец файла(т.е. не включая конец файла), то Mahou может их "съесть", так что в Ctrl+A работает нормально но лучше стараться в Word не выделять текст который который заканчивается несколькими пустыми линиями и не является концом файла. Как-то так.
Символ параграфа включил и записал процесс
Знаешь, сейчас проверил у себя(всё таки пришлось установить word...) оказывается что:
Пустая строка в конце в Word добавляется автоматически…
, т.к. Mahou вводит новые линии как клавишуEnter
, происходит такое:действия Mahou после транслитерации:
1. Вводит строку `Ўқғҳ vfnz` как текст, нажимает `Enter` 2. Вводит строку `Ckjdj` как текст, нажимает `Enter` 3. Вводит строку `Ўқғҳ` как текст, нажимает `Enter`
А Word, сам добавляет в конец еще один символ новой строки.
Я сделал небольшое исправление для случаев когда это происходит в Word, в f69745b , можно проверять в latest-commit.
Здравствуйте. Да, попробовал Libreoffice. Там не добавляется новые строки. Это проблема ворда. А после обновления нормально.
Mahou их "съел"
Но в Libreoffice процесс кодировки очень медленно. Даже еще очень. Можеть, эта проблема Либре. Там копи-паст тоже очень медленно работает. По моему, медленность от этого. Mahou сначала "копирует" текст в буфер, после этого конвертирует. По этому скорость падает.
Это исправление не идеально, если выделить текст(только в WORD) с несколькими пустыми линиями подряд в конце выделения и не в конец файла(т.е. не включая конец файла), то Mahou может их "съесть", так что в Ctrl+A работает нормально но лучше стараться в Word не выделять текст который который заканчивается несколькими пустыми линиями и не является концом файла. Как-то так.
ОК. Так делаю.
Вот еще одно положение связанным с транслитерацией.
Как сделать чтобы дефис в начале строки конвертировался как тире+пробел. Это для того, чтобы исправить пунктуационную ошибку текста.
Например: -Это ты? - сказал Андрей. -Да, это я, - ответил Иван.
Нужно такое:
– Это ты? - сказал Андрей. – Да, это я, - ответил Иван.
https://regex101.com/r/ZV6C27/3
Сделал код для "дефис на тире":
s/—/–/|
s/^-/$1– /|
s/ -/ – /|
s/- / – /|
s/ / /|
Сработал все, кроме s/^-/– /|
. Для этого попробовал и другие варианты:
s/^-/$1– /|
s/(^)-/$1– /|
Или лучше сделать пунктуационные исправления через сниппеты?
Или лучше сделать пунктуационные исправления через сниппеты?
Мда, у сниппетов другая функция. Это перевод при наборе. Этой функции у меня другие задачи 😂. И задач много.
https://regex101.com/r/ZV6C27/3
Зачем ловить "начало строки"? Оно всегда будет пустое, почитай страничку, ссылку которой я привел ниже.
s/^-/$1– /|
Зачем тебе $1
когда у тебя не пойманных групп(в ()
, рекомендую почитать: wikibooks/regex)? Просто убери $1
: s/^-/– /|
и все будет работать
Или лучше сделать пунктуационные исправления через сниппеты?
В сниппетах кстати(с недавних пор) тоже можно использовать regex, пример:
->regex/^-$/
====>– <====
после -> regex/
и обязательно в конце /
.
Но сниппеты работают "по слову", а не "по линии" так что этот сниппет будет просто заменять любой 1 написанный -
на –
. Для таких случаев лучше использовать что-то вроде такого:
->--
====>c<====
Т.е. заменять 2 -
на –
.
Просто убери
$1
:s/^-/– /|
и все будет работать
Я это тестировал. Сработал только на первом строке:
-Кто говорил? -Я говорил. -Я так и думал. 👇 – Kto govoril? -YA govoril. -YA tak i dumal. 👇 – Кто говорил? -Я говорил. -Я так и думал.
->regex/^-$/ ====>– <====
Эта сработает только тогда, когда после "-" добавлю один пробел. При
-Текст начинается. -Что начинатается?
не сработает у меня.
не сработает у меня
Тут нужно, что-то такое:
->regex/^-(.*?)(?!.* )$/
====>– $1<====
(?!.* )
- необходимый кусок, чтобы не срабатывало на "двойных сниппетах"(сниппетах из двух слов соединенных пробелом). как и ^
с $
.
-Текст
=> – Текст
Я это тестировал. Сработал только на первом строке
Ах, да Mahou считает всё выделение за одну строку, нужно будет добавить правила разбивки на линии...
->regex/^-(.*?)(?!.* )$/ ====>– $1<====
Добавил этот код в сниппет.
Результат:
– Первая
Первая строка норм. Но после второй проблема. Например, если на второй строке пишу что-то, скажем "-Второя" такрой результат (первая и вторая соединяются + необъяснимые комбинации)
– Первая – В– Второя -Третя
После что-то напишу передние строки и символы автоматически удаляются.
хм, а ты уверен что сниппет правильно стоит:
хм, а ты уверен что сниппет правильно стоит:
Здесть тестировал на ноутпад и ворде.
s/^-(.?)(?!. )$/– $1|
Этот код вставил в TSDict.txt. Там тоже не сработал. Или что-то не так в коде?
А ты сравни:
->regex/^-(.*?)(?!.* )$/
s/^-(.?)(?!. )$/– $1|
*
отсутствуют.
Здесть тестировал на ноутпад и ворде
Скорее всего у тебя развёртывание стоит на , в Notepad++ эта клавиша так же подверждает автодополнение. Но здесь есть еще кое-что сейчас проверю...Tab
а не на Space
Скинь мне свои настройки(Mahou.ini) или отладочную информацию из вкладки "О..."
*
отсутствуют. 😲s/^-(.*?)(?!.* )$/– $1/|
Вах! После этого сработал!
Скинь мне свои настройки(Mahou.ini) или отладочную информацию из вкладки "О..."
MAHOU DEBUG INFO
Environment info
- Mahou 2.9.0.1-dev
- OS = [Microsoft Windows NT 6.2.9200.0]
- x64 = [True]
- .Net = [4.0.30319.42000]
All installed layouts
Uzbek Latin Keyboard by Hamza (v2.0)(4039115843) Узбекская (кириллица)(138610755) США(67699721) Русская(68748313)
Mahou.ini
[FirstStart]
First=False
[Functions]
AutoStartAsAdmin=False
TrayIconVisible=True
ConvertSelectionLayoutSwitching=False
ReSelect=True
RePress=False
AddOneSpaceToLastWord=True
AddOneEnterToLastWord=False
ConvertSelectionLayoutSwitchingPlus=False
ScrollTip=False
StartupUpdatesCheck=True
SilentUpdate=True
Logging=False
CapsLockTimer=False
TrayFlags=False
BlockMahouHotkeysWithCtrl=False
SymbolIgnoreModeEnabled=false
MCDServerSupport=False
OneLayoutWholeWord=True
GuessKeyCodeFix=False
AppDataConfigs=False
RemapCapslockAsF18=False
UseJKL=True
ReadOnlyNA=False
WriteInputHistoryHourly=false
WriteInputHistoryByDate=false
WriteInputHistory=False
WriteInputHistoryBackSpaceType=0
TrayText=False
[Layouts]
SwitchBetweenLayouts=True
OneLayout=False
EmulateLayoutSwitch=False
EmulateLayoutSwitchType=Alt+Shift
ChangeToSpecificLayoutByKey=True
MainLayout1=Узбекская (кириллица)(138610755)
MainLayout2=Uzbek Latin Keyboard by Hamza (v2.0)(4039115843)
SpecificKey1=3
SpecificKey2=0
SpecificKey3=0
SpecificKey4=0
SpecificLayout1=Переключать между раскладками
SpecificLayout2=Переключать между раскладками
SpecificLayout3=
SpecificLayout4=
SpecificKeysType=0
SpecificKeySets=set_0
QWERTZfix=False
[PersistentLayout]
OnlyOnWindowChange=False
ChangeOnlyOnce=False
ActivateForLayout1=False
ActivateForLayout2=False
Layout1CheckInterval=50
Layout2CheckInterval=50
Layout1Processes=devenv.exe wdexpress.exe
Layout2Processes=notepad++.exe winword.exe
[Appearence]
DisplayLangTooltipForMouse=False
DisplayLangTooltipForMouseOnChange=False
DisplayLangTooltipForCaret=False
DisplayLangTooltipForCaretOnChange=False
DifferentColorsForLayouts=False
MouseLTAlways=False
Language=Русский
Layout1ForeColor=#000000
Layout1BackColor=#FFFFFF
Layout1TransparentBackColor=False
Layout1Font=Georgia; 8pt
Layout1Height=14
Layout1Width=26
Layout1PositionX=8
Layout1PositionY=0
Layout2ForeColor=#000000
Layout2BackColor=#FFFFFF
Layout2TransparentBackColor=False
Layout2Font=Georgia; 8pt
Layout2Height=14
Layout2Width=26
Layout2PositionX=8
Layout2PositionY=0
MouseLTForeColor=#000000
MouseLTBackColor=#FFFFFF
MouseLTFont=Georgia; 8pt
MouseLTHeight=14
MouseLTWidth=26
MouseLTPositionX=8
MouseLTPositionY=0
CaretLTForeColor=#000000
CaretLTBackColor=#FFFFFF
MouseLTTransparentBackColor=False
CaretLTTransparentBackColor=False
CaretLTFont=Georgia; 8pt
CaretLTHeight=14
CaretLTWidth=26
CaretLTPositionX=8
CaretLTPositionY=12
MCDS_Pos_X=58
MCDS_Pos_Y=13
MCDS_Top=60
MCDS_Bottom=45
MouseLTUseFlags=False
CaretLTUseFlags=False
Layout1LTText=
Layout2LTText=
MouseLTUpperArrow=False
CaretLTUpperArrow=False
WindowsMessages=True
[Timings]
DelayAfterBackspaces=100
UseDelayAfterBackspaces=False
LangTooltipForMouseRefreshRate=25
LangTooltipForCaretRefreshRate=25
DoubleHotkey2ndPressWait=350
FlagsInTrayRefreshRate=100
ScrollLockStateRefreshRate=100
CapsLockDisableRefreshRate=100
SelectedTextGetMoreTries=False
SelectedTextGetMoreTriesCount=5
ExcludedPrograms=LA.exe SomeProg.exe
UsePasteInCS=False
ExcludeCaretLD=false
ChangeLayoutInExcluded=True
LangTooltipForMouseSkipMessages=5
[Snippets]
SnippetsEnabled=True
SpaceAfter=True
SwitchToGuessLayout=False
SnippetExpandKey=Space
[AutoSwitch]
Enabled=False
SpaceAfter=True
SwitchToGuessLayout=False
DownloadInZip=True
[Hotkeys]
ToggleMainWindow_Enabled=True
ToggleMainWindow_Double=False
ToggleMainWindow_Modifiers=Win + Control + Shift + Alt
ToggleMainWindow_Key=45
ConvertLastWord_Enabled=True
ConvertLastWord_Double=True
ConvertLastWord_Modifiers=Shift
ConvertLastWord_Key=0
ConvertSelectedText_Enabled=True
ConvertSelectedText_Double=True
ConvertSelectedText_Modifiers=Shift
ConvertSelectedText_Key=0
ConvertLastLine_Enabled=True
ConvertLastLine_Double=False
ConvertLastLine_Modifiers=Shift
ConvertLastLine_Key=19
ConvertLastWords_Enabled=True
ConvertLastWords_Double=False
ConvertLastWords_Modifiers=Shift
ConvertLastWords_Key=122
ToggleSymbolIgnoreMode_Enabled=True
ToggleSymbolIgnoreMode_Double=False
ToggleSymbolIgnoreMode_Modifiers=Shift + Control
ToggleSymbolIgnoreMode_Key=122
SelectedTextToTitleCase_Enabled=True
SelectedTextToTitleCase_Double=False
SelectedTextToTitleCase_Modifiers=Win + None
SelectedTextToTitleCase_Key=45
SelectedTextToRandomCase_Enabled=False
SelectedTextToRandomCase_Double=True
SelectedTextToRandomCase_Modifiers=Alt
SelectedTextToRandomCase_Key=0
SelectedTextToSwapCase_Enabled=True
SelectedTextToSwapCase_Double=False
SelectedTextToSwapCase_Modifiers=Alt
SelectedTextToSwapCase_Key=45
SelectedTextTransliteration_Enabled=True
SelectedTextTransliteration_Double=False
SelectedTextTransliteration_Modifiers=None
SelectedTextTransliteration_Key=45
SelectedToUpper_Enabled=False
SelectedToUpper_Double=False
SelectedToUpper_Modifiers=Win +
SelectedToUpper_Key=90
SelectedToLower_Enabled=False
SelectedToLower_Double=False
SelectedToLower_Modifiers=Win
SelectedToLower_Key=88
ExitMahou_Enabled=True
ExitMahou_Double=False
ExitMahou_Modifiers=Win + Control + Shift + Alt
ExitMahou_Key=123
RestartMahou_Enabled=True
RestartMahou_Modifiers=Shift + Alt
RestartMahou_Key=33
ToggleLangPanel_Enabled=True
ToggleLangPanel_Double=False
ToggleLangPanel_Modifiers=Shift
ToggleLangPanel_Key=120
ShowSelectionTranslate_Enabled=False
ShowSelectionTranslate_Double=True
ShowSelectionTranslate_Modifiers=Alt
ShowSelectionTranslate_Key=0
ToggleMahou_Enabled=True
ToggleMahou_Double=False
ToggleMahou_Modifiers=Win + Shift
ToggleMahou_Key=112
CycleCase_Enabled=True
CycleCase_Double=False
CycleCase_Modifiers=Win + None
CycleCase_Key=114
[LangPanel]
Display=False
Transparency=90
RefreshRate=25
Position=X0 Y0
ForeColor=#000000
BackColor=#FFFFFF
Font=Microsoft Sans Serif; 8,25pt
BorderColor=#8B5FFF
BorderAeroColor=True
UpperArrow=True
[Updates]
Delay=5
Channel=LatestCommit(Beta)
LatestCommit=f69745b
[Sounds]
CustomSound2=
UseCustomSound2=False
OnLayoutSwitch2=True
OnConvertLast2=False
OnSnippets2=True
OnAutoSwitch2=False
CustomSound=
UseCustomSound=False
OnLayoutSwitch=False
OnConvertLast=True
OnSnippets=False
OnAutoSwitch=True
Enabled=False
[TranslatePanel]
LanguageSets=set_1/auto/ru|set_2/auto/en
BG=#FFFFFF
BorderC=#F1F100
FG=#8B5FFF
Transparency=90
BorderAero=False
OnDoubleClick=False
UseNA=True
UseGS=False
Enabled=False
TitleFont=Segoe UI; 12pt
TextFont=Microsoft Sans Serif; 8,25pt
[Sync]
BLast=
RLast=
RBools=1|1|1|1|0
BBools=1|1|1|1|0
[Hidden]
__selection=false
CycleCaseReset=false
CycleCaseOrder=TULSR
LibreCtrlAltShiftV=false
</details>
</details>
А, понял правильный regex будет: ->regex/^-(?!.* )(.*?)$/
, нужно было проверку на пробел (?!.* )
ставить до ловли всего что после, произошло как раз то о чём я писал:
(?!.* )
- необходимый кусок, чтобы не срабатывало на "двойных сниппетах"(сниппетах из двух слов соединенных пробелом). как и^
с$
.
см.: https://regex101.com/r/PQFDxs/1
в Mahou есть такая возможность "двойные сниппеты", т.е. по 2 последним словам, например:
->так то
====>так-то<====
Поэтому при использовании regex в сниппетах нужно проверять двойной ли сниппет, наличием пробела, или нет.
->regex/^-(?!.* )(.*?)$/
Да! После этого сработал! Но это когда пробел. Если нажму Enter не сработает. Как изменить код, чтобы сработал с Интером?
(Если трудно, не объясни. Я уж много спросил)
Но это когда пробел
Ну так сниппеты "срабатывают" только по Space/Tab, если настроена клавиша развёртывания.
Но это когда пробел
Ну так сниппеты "срабатывают" только по Space/Tab, если настроена клавиша развёртывания.
Понял.
Это снова я.
При работе с Mahou новые идеи приходятся. Да, я пытаюсь их реализовать сам, но иногда (или часто 😂) возникают трудности. Сейчас как раз такое время.
Ну, хотел перевести знак " как “ и ”. Кавычки хотел сделать "правильном" при наборе. Да, в текстовых редакторах такая функция есть. Но в браузерах, в Телеграм и т.п. кавычки набираю с помощью нескольких клавиш.
Вот такой текст, например: "Это текст". Хочу при наборе превратить его в: “Это текст”.
Для этого сделал код в сниппетах:
->regex/(^|\s)"(\w|[а-яўқғҳА-ЯЎҚҒҲ])/
====>$1“$2<====
->regex/(\w|[а-яўқғҳА-ЯЎҚҒҲ"])"(\s)/
====>$1”$2<====
Но не сработал. Хотя, здесь сработал: https://regex101.com/r/ZV6C27/5 https://regex101.com/r/PQFDxs/2
Куда-то * поставить нужно? Чтобы сработал сразу как в предыдущий раз?
Ну, хотел перевести знак " как “ и ”. Кавычки хотел сделать "правильном" при наборе. Да, в текстовых редакторах такая функция есть. Но в браузерах, в Телеграм и т.п. кавычки набираю с помощью нескольких клавиш.
"Это текст". => “Это текст”.
Если ты будешь это делать с помощью сниппетов, то будет работать только для 2 слов, потому как для сниппетов максимум 2 слова, так что
Я думаю что тебе больше подойдёт функция __selection()
в сниппетах, в Mahou есть скрытая функция __selection
ее сначала нужно вручную включить в Mahou.ini
(поставить __selection=true
в группе [Hidden]
, Mahou должен быть закрыт!) После её можно использовать вот так:
Делаешь такой сниппет:
->"""
====>“__selection()“<====
Теперь выделяй любой текст, Пример
поверх него пиши сниппет """
и нажимай пробел, получиться: “Пример“
, если функция не включена в Mahou.ini
результат будет такой: ““
, гифка:
Ну, хотел перевести знак " как “ и ”. Кавычки хотел сделать "правильном" при наборе. Да, в текстовых редакторах такая функция есть. Но в браузерах, в Телеграм и т.п. кавычки набираю с помощью нескольких клавиш.
"Это текст". => “Это текст”.
Если ты будешь это делать с помощью сниппетов, то будет работать только для 2 слов, потому как для сниппетов максимум 2 слова, так что
Я думаю что тебе больше подойдёт функция
__selection()
в сниппетах, в Mahou есть скрытая функция__selection
ее сначала нужно вручную включить вMahou.ini
(поставить__selection=true
в группе[Hidden]
, Mahou должен быть закрыт!) После её можно использовать вот так: Делаешь такой сниппет:->""" ====>“__selection()“<====
Теперь выделяй любой текст,
Пример
поверх него пиши сниппет"""
и нажимай пробел, получиться:“Пример“
, если функция не включена вMahou.ini
результат будет такой:““
, гифка:
Сделал все, как сказано здесь. Но результат был такой:
““
Как будь-то функция не включена.
Ну, этот способ более трудно. По моему, пока лучше использовать клавиши:
alt+0147 => “
alt+0148 => ”
->regex/(^|\s)"(\w|[а-яўқғҳА-ЯЎҚҒҲ])/
====>$1“$2<====
->regex/(\w|[а-яўқғҳА-ЯЎҚҒҲ"])"(\s)/
====>$1”$2<====
https://regex101.com/r/ZV6C27/5 https://regex101.com/r/PQFDxs/2
А эти можно использовать каким-то способом?
Пока нашёл такой способ:
->regex/^"(?!.* )(.*?)$/
====>“$1<====
->regex/^(?!.* )(.*?)"$/
====>$1”<====
Все в норме, но только если слово в кавычках одно, второй кавычка на заменяется:
“Книга" (последний " остался не изменённым)
“Книга и тетрадь” (все в норме)
Как будь-то функция не включена.
Открой Mahou.ini
в notepad++, найди [Hidden]
, снизу найди __selection=false
и поставь на __selection=true
, и тогда заработает, и потом в Mahou нажми "Применить"!
Все в норме, но только если слово в кавычках одно, второй кавычка на заменяется
Тебе нужно еще одно правило:
->regex/^"(?!.* )(.*?)"$/
====>“$1“<====
И нужно поставить их в таком порядке:
->regex/^"(?!.* )(.*?)"$/
====>“$1“<====
->regex/^"(?!.* )(.*?)$/
====>“$1<====
->regex/^(?!.* )(.*?)"$/
Ну, этот способ более трудно
Разве? Просто выделяешь текст который хочешь "заключить” в кавычки, поверх него пишешь “сниппет“ (в котором есть __selection()
) и он заменяет выделенный текст на заключенный в кавычках.
Разве? Просто выделяешь текст который хочешь "заключить” в кавычки, поверх него пишешь “сниппет“ (в котором есть
__selection()
) и он заменяет выделенный текст на заключенный в кавычках.
Это я о наборе говорил. При наборе лучше набирать без остановки.
->regex/^"(?!.* )(.?)"$/ ====>“$1“<==== ->regex/^"(?!. )(.?)$/ ====>“$1<==== ->regex/^(?!. )(.*?)"$/
Подледной строки здесь нету, да? Мне поставить нужно ли это:
====>$1”<====
UPD. Поставил, работает.
Открой
Mahou.ini
в notepad++, найди[Hidden]
, снизу найди__selection=false
и поставь на__selection=true
, и тогда заработает, и потом в Mahou нажми "Применить"!
Я точно так делал. Почему-то не сработал. Перед изменением Mahou.ini закрывал программу полностью. Сохранил Mahou.ini с __selection=true, потом запусил программу. А результат был “”
без текста.
Для меня
->regex/^"(?!.* )(.?)"$/ ====>“$1”<==== ->regex/^"(?!. )(.?)$/ ====>“$1<==== ->regex/^(?!. )(.*?)"$/ ====>$1”<====
лучший способ. Сработает отлично. Спасибо большое.
лучший способ
Ну раз так, тогда пожалуйста.
__selection=true
Это лучше убрать, если не используешь.
Это лучше убрать, если не используешь.
ОК.
Насчёт:
А результат был “” без текста.
А ты выделял текст и писал поверх него сниппет и Space, так ведь?
Пользуюсь моментом, задаю вопрос. Пока ты здесь 😂.
Вот код:
->regex/^-(?!.* )(.*?)$/
====>–$1<====
->regex/^(?!.* )(.*?)-$/
====>$1–<====
Сработает, превращает - на –. Но есть такие моменты: –Это диалог. –Разве это диалог? –Да.
После – нужно поставить один пробел.
Сначала это сделал с помощью – $1
. Но тогда два пробела добавляются, когда тире внутри предложение. Например:
– Эта диалог? – спросил он.
Здесь перед словом спросил
2 пробела. Как делать чтобы начальный дефис
кодировался как тире+пробел
, дефис с пробелом внутри предложения
превратился пробел+тире+пробел
.
Сейчас в сниппетах вышеуказанный код. Но этот код после начального тире и после слова, когда перед дефисом нет пробела (например, код– это поэзия, нужно это: код – это поэзия), не поставить пробел.
Если ли лечение?
Если ли лечение?
Вот такой:
->regex/^-\s(.*?)$/
====>–$1<====
Но он не будет работать вместе с этими двумя:
->regex/^-(?!.* )(.*?)$/
====>–$1<====
->regex/^(?!.* )(.*?)-$/
====>$1–<====
P.S. #260 читал?
P.S. #260 читал?
Сейчас читаю и занимаюсь “программированием” 🙃.