Миранда. Yet another транслит-плагин.

Тема в разделе "WASM.PROJECTS", создана пользователем l_inc, 2 окт 2010.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Собственно, это, наверное, последняя возможность, которая мне требовалась в миранде (ну ещё плюс баги не помешало бы прибрать). А т.к. существующие аж два плагина меня не удовлетворили, пришлось написать что-то своё.

    Плагин имеет пару особенностей:
    1) Настраиваемые маппинги траслитерации (вплоть до китайско-вьетнамского... наверное :)) с двумя предопределёнными наборами.
    2) Возможность пословарного конвертирования (word-by-word conversion).

    В общем, предлагаю потестировать. Если через некоторое время не наберётся <del>миллионный отстук</del> пара багов, то выложу исходники (если, конечно, они кому-то нужны). В противном случае исправлю баги и тоже выложу.

    Маппинги (и прочее) настраиваются в Message Sessions -> Message Converter. Замена текста сообщения производится согласно приоритетам маппинга. На данный момент <del>у кого длиннее, тот и прав</del> более длинное исходное буквосочетание имеет больший приоритет (будет заменено раньше других), а буквосочетания равной длины заменяются в порядке их появления в исходной строке.

    Например, имеются маппинги:
    м -> m ; я -> ya ; т -> t ; ы -> y ; й -> y
    А также:
    мя -> m'a ; ый -> iy
    Т.к. последние два маппинга имеют бОльшую длину, при конвертировании слова "мятый" сначала будут заменены они (промежуточный результат: "m'aтiy"), а потом то, что останется: "m'atiy".

    Второй пример. Нужно преобразовать слово d'ujiy. Имеются маппинги:
    d -> д ; ' -> ь ; u -> у ; j -> ж ; i -> и ; y -> й
    А кроме того:
    d'u -> дю ; iy -> ый ; ji -> жи
    Самое длинное буквосочетание — d'u. Оно будет заменено первым. Далее применяются "iy -> ый" и "ji -> жи". Т.к. буквосочетание ji встречается в слове "дюjiy" раньше, сначала будет заменено оно: "дюжиy", после чего "iy -> ый" остаётся не удел. И уже потом будет выполнена замена "y -> й": "дюжий".

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

    Пока что прикладываю только dll в архиве. Помимо багрепортов принимаются также предложения (в частности по улучшению маппингов). :)

    ADDED_1:
    В общем, начну сам. Исходный вариант плагина неверно обрабатывал слово, находящееся сразу за переходом на новую строку, в режиме word-by-word conversion. Причина заключается в том, что в захардкоженый список разделителей слов (его нельзя редактировать, и он не отображается в настройках) был добавлен символ \r, но там не было символа \n. Из-за чего символ \n считался частью слова и заменялся в процессе конвертации.
    Изменённый вариант выкладываю вместо старого.
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Как и обещал, выкладываю исходники (хоть они, похоже, и не нужны никому). С прошлого раза сделана пара малозаметных косметических изменений и подправлено несколько незначительных багов. Будет время, попробую узнать, как всё это дело переправить на оффсайт.
    ADDED_1:
    Забыл закрыть хэндл файла в случае, если файл оказывался невалидным. И убрал зависимости исходников от своих локальных путей.
    Исправленный вариант приложен.
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Ну и скомпилированный вариант тоже не помешает (в стартовом посте на этот раз не трогаю).
    ADDED_1:
    Перекомпилировал исходники предыдущего поста с учётом изменений.
     
  4. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Если кратко: Плагин -- нужный, интересный. Могу помочь в тестировании. Хотелось бы видеть свежие билды. На текущий момент планируется ли развитие?
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexeyS
    А что там развивать? Он уже делает всё, что мне от него нужно. :)

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

    Если Вы под Вашей конфигурацией обнаружите неестественное поведение (что там под scriver, srmm и прочими альтернативами происходит, не знаю... тестировать было лень :)), постараюсь исправить.

    Ну и наконец, если у Вас будет желание собрать какой-нибудь полезный маппинг (например, для латино-китайской транслитерации), you are welcome to share it: для этого есть возможность экспорта настроек в файл.
     
  6. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    На оффсайте к сожалению не видел. Спасибо за ссылку.

    Ну пожеланий конечно может быть масса. Например интеграция с хистори, опции типа как в ChangeKeyboardLayout итд.
    Но поскольку плагин писался для себя (ну и в целом меня тоже устраивает) не буду пока развивать тему. Спасибо.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexeyS
    Какого рода интеграция? Показывать оба варианта (до и после) или возможность конверсии прямо в истории?
    В общем, была мысль, но я посчитал эти возможности только overhead'ом, т.к. пользователю будет проще прочитать транслит, чем конвертировать сообщение в истории.

    Какие именно? Если опустить различия в назначениях плагинов, в ChangeKeyboardLayout реально меньше настроек, чем в Message Converter. Просто там они размазаны по всему окошку options: например, верхняя половина области настроек выполняет практически те же функции (и ИМХО даже менее удобно), что у меня поле Hotkey в комбинации с выбором группы настроек.
    Если речь о Popup-настройках для окошка лога, то я посчитал работу с Popup также излишней по вышеуказанной причине.
     
  8. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Вывод всплывающего окна или MessageBox'а с результатом и кнопкой копирования в буфер. Ну собственно почему не реализовано прочитал ниже.

    Небольшой дефект:
    В транслит в режиме выделеного слова, после транслита прыгает выделение, как правило становится выделенным 1 символ перед бывшим выделением, но в целом хаотично.

    Если возможно назначать горячую клавишу с транслита в кирилицу и наобород на одну клавишу.
    Насчёт внешнего вида настроек, согласен спорно (при обоих располажениях есть +/-). :)
    Мне в ченж лайауте нравились нарисованые кнопки (более наглядно), хотя без них быстрее ввести нужную комбинацию.
    Настроек здесь согласен, больше. А в целом функционал перекрывает ченж и думаю мог бы заменить его.
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexeyS
    Этого не должно происходить. Вы точно качали плагин не из первого поста этой темы? Потому что я недвусмысленно указал на то, что там содержатся баги, но тем не менее, судя по количеству скачиваний, оттуда продолжают качать.

    Тут не помешало бы уточнить. Операция конвертации сохраняет undo stack текстового поля. Вы хотите, чтобы при повторном нажатии на ту же горячую клавишу я просто возвращал предыдущий текст?

    Или Вы хотите, чтобы можно было связывать маппинги, как взаимнообратные? Тут есть несколько сложностей:
    Во-первых, текущие предопределённые маппинги не являются взаимнообратными. Полностью взаимнообратными их сделать нельзя по лингвистическим причинам. Хотя если у Вас получится разумная комбинация взаимнообратных маппингов транслитерации, я сделаю их предопределёнными.
    Во-вторых, если на несколько маппингов назначена одна и та же клавиша, то неясно, какой именно из них применять при нажатии: детект по текущему набору символов сделать не получится, т.к. плагин реализует более общую функциональность, чем просто транслитерация между кириллицей и латиницей.

    Лично я ChangeKeyboardLayout использую только для чтения чужих сообщений, присланных в неверной раскладке (то, что я сам наберу в неверной раскладке, практически невозможно :)). Message Converter такого функционала не предоставляет, поэтому я не считаю, что его функционал перекрывает ChangeKeyboardLayout.
    Наверное, всё-таки подумаю насчёт popup'ов с кнопкой копирования. Для транслитерирующих маппингов в этом смысла мало, но вот для каких-то альтернативных вполне может сгодиться.
     
  10. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Использую ТранслитА (http://translita.appspot.com). Работает вообще везде. Единственно, подпилил файлик конфигурации, подстроив несколько кодировок под себя.
     
  11. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Доброго дня. Извиняюсь за задержку с ответом.

    Проверял на версии с оффсайта.

    Код (Text):
    1. Тут не помешало бы уточнить. Операция конвертации сохраняет undo stack текстового поля. Вы хотите, чтобы при повторном нажатии на ту же горячую клавишу я просто возвращал предыдущий текст?
    Думаю это хорошая идея. Но вообще я имел в виду переключение в обе стороны по одной клавише, даже если результат будет не взаимнообратным, например как Qip по клавише Ctrl-T.

    Нет я не имел в виду делать взаимнообратными, хотя идея неплохая и в целом возможно я предложу возможно кто-то ещё, разумный мапинг, в любом случае это не связано с девелопментом.

    На мой взгляд довольно легко. Предположим у нас есть 2 мапинга на которые назначена 1-на клавиша. Предположим латиница и кирилица. И у нас есть текст для конвертации. Сравнивая символы для конвертации (или первый символ для скорости) с символами мапинга мы можем прийти к выводу к какому мапингу принадлежит текст и конвертировать в противоположный. Возможно при этом запоминать последнее направление конвертации и переключать в противоположную если не производилось редактирование текста.

    Если забить мапинги соответствующие лайаутам то соответственно получим ChangeKeyboardLayout.

    Гдето-так. Спасибо за плагин.
     
  12. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Если не ошаюсь PuntoSwitcher еще более расширенно поддерживает подобный функционал. Для меня интересна реализация именно как плагин для Миранды.
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexeyS
    Тогда не могли бы Вы дать точный текст и более точно описать способ, которым конвертируете? Удобнее всего было бы, наверное, два минискриншота: до конвертирования и после.

    Проблема в том, что по тексту далеко не всегда можно уверенно определить, какой из маппингов лучше применить. Например, я пересылаю следующий текст человеку, который не принимает кириллицу: "CodeBlocks — самая отстойная IDE". Как определить, конвертировать этот текст в латиницу или в кириллицу? Т.е. придётся применять какую-то ненадёжную эвристику. Но это ещё полбеды. А что получится при обратном конвертировании этого текста в кириллицу?
    И это ещё для простого случая кириллица-латиница. А если пользователь просто поназначал замену русских слов другими русскими? Причём сделал несколько таких маппингов: один назвал "подруга", а другой "ген.дир". Не дай Бог плагин угадает не ту раскладку. С другой стороны, это, конечно, уже его проблемы, что он назначил одну и ту же комбинацию на эти маппинги...

    В общем, может что и придумаю, но в любом случае любые апгрейды буду делать не раньше Нового Года, т.к. сейчас перегружен учёбой.
     
  14. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Хорошо. Подосвобожусь вышлю. Наверно завтра.

    Либо по первому слову (букве), либо каждую букву отдельно. И посмотреть как работают аналоги. Qip в первую очередь, PuntoSwitcher, ТранслитА..... И с учётом них скорректировать логику.

    Я думаю можно написать наиболее используемые use case'ы и по ним уже придумать что делать.

    Хорошо. В общем держим связь. Я думаю даже если не будет практического применения, просто интересно поразвивать будет данный плагин.
    Если что в плане потестить или дописать какой функционал могу помочь. В целом просто работы хватает и самому всё писать лениво :)
    А так что-то гдето помочь, могу, и интересно.
     
  15. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Дня доброго.

    Как и обещал, размещаю багу со скриншотами.

    Воспроизведение:
    1. Напечатать два слова в кирилице (в латинице аналогично).
    2. Выделить второе слово.
    [​IMG]
    3. Нажать сочетание клавиш "Из латиницы в кирилицу" ("Из кирилицы в латиницу" для латиницы).

    Фактический результат:
    1. Выделение сместилось.
    [​IMG]

    Ожидаемый результат:
    1. Выделение должно остаться прежним.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AlexeyS
    Так бы и сказали, что выделение меняется, если первый символ исходного выделения не подвергается конвертации. :)

    В общем, спасибо. Баг исправлен. Исправленный вариант пока больше никуда кроме этого поста не кладу.
    Как надумаю что-нибудь насчёт дополнительных возможностей плагина, отправлю на офсайт сразу с инкрементированной версией.
     
  17. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Договорились. Спасибо.
     
  18. AlexeyS

    AlexeyS New Member

    Публикаций:
    0
    Регистрация:
    1 ноя 2010
    Сообщения:
    9
    Дня доброго.

    Появился ещё плагин с подобным функционалом (автор не я и с ним не знаком).
    Возможно будет интересно посмотреть или объединить усилия.
    Качать здесь: http://www.miranda-vi.org/link/3650/switch-layout-or-transliterate-unicode-unicode-aware/plugins
    Исходники здесь: http://mataes.googlecode.com/svn/Miranda/Plugins/TranslitSwitcher (Автор: Mataes)
    P.S. Собственного окна настроек там нет. Настройка клавиш в тонкой настройке - горячих главишах.
    P.P.S. Там же реализовано циклическое переключение транслитерации по одной клавише, тоже может будет интересно.
     
  19. teaman

    teaman New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2011
    Сообщения:
    2
    А можно сделать конвертацию входящих сообщений для определённого юзера? и для каждого из них настраивать конвертер (ну это уже далёкое будущее), потому что когда люди пишут латиницей, её не всегда удобно читать.
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    teaman
    А пусть люди плагин ставят, чтобы конвертировалось на их стороне. :) Шутка, конечно.
    Возможность полезная; думаю, сделаю. Но често говоря, сейчас времени совсем нет, а это не баг исправить: для такой модификации пара дней понадобится. Надеюсь, в марте время появится. К сведению принял.