PureBasic


TextCorrection

Назначение

Исправляет текст набранный в неверной раскладке клавиатуры.

Взаимосвязанные

TextCorrection (Windows) (рекомендуется)
TextCorrection (Windows) (тестируется)

Работа с программой


Назначение

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

  1. Исправление набранного в неправильной раскладке клавиатуры
  2. Исправление регистра (переключение вверх/вниз и красная строка)
  3. Замена аббревиатур.
  4. Транслитерация

Использование

При стабильной эмуляции горячих клавиш достаточно выполнить только 2 пункт.

  1. Выделить текст, строку, фразу (Ctrl+Shift+Left или Shift+Home).
  2. Вызвать горячую клавишу для преобразования.
  3. Вставить результат из буфера обмена (Ctrl+V).

Настройка


Исправление раскладки

Язык определяется автоматически по последней букве. Если последний символ цифра (или другой, но не буква), то берётся предыдущий символ, до тех пор пока не встретиться буква, которая проверяется в каком наборе она находится (DetectLang1 и DetectLang2) и конечно же она преобразуется в нижний регистр, поэтому регистр не имеет значения. Если в выделенном находятся 2 языка, то они преобразуются к одному языку, то есть не инвертируется.

В ini в параметрах lang1 и lang2 находятся символы замены. Вы можете задать другие языки (украинский, греческий и т.д.), главное чтобы символы находящиеся на одной позиции от начала совпадали на клавиатуре, например 2- символ в обоих параметрах "w" и "ц" и на клавиатуре они располагаются на одной клавише, соответственно при преобразовании "w" будет заменено на "ц" и наоборот. То есть можно использовать любые языки. Кстати, если понадобится преобразовывать между 3-мя языками (англ. укр. русс), то вы можете задействовать транслитерацию.


Инвертирование раскладки

Тоже что предыдущее, но не используется как критерий последний язык ввода, вместо этого буквы одного набора заменяются буквами другого набора. Так как разные языки обычно могут встретится когда введено несколько слов, то этот функционал удобен в связке с выделением строки, то есть параметры "-i -s" задают автовыделение строки с инвертированием раскладки. Для выделения строки используется эмуляция горячей клавиши Shift+Home.

Пока этот режим неинтернационален, так как введена коррекция для знаков :;?,.<> если после символа идёт англ. буква, то они обрабатываются индивидуально с учётом что это русские буквы в английской раскладке. В дальнейшем либо будет добавлен флаг отключающий эти возможности для использования других языков, либо наоборот будет введена возможность вручную задать эти символы для возможности использовать в любых языках, например comma=32 (запятая=32), где 32 это позиция символа, который будет вставлен взамен, или более универсальней find=":;?,.<>", replace="57 23 69 32 33 67 68".


Аббревиатуры

Это функционал позволяет писать упрощённые слова, например "винда", а потом заменять его на "Windows", причём если вы занимаетесь программированием или веб дизайном, то можете использовать вставку целых программных кодов, например введя "гуи" можно заменить на многостроковую конструкцию. Для этого скопируйте программный код в новый документ в текстовом редакторе, замените перенос строки LF на тильду "~" и получится текст в одной строке. Добавляете эту строку в replace.ini, используя формат "гуи=строка", без кавычек и пробелов вокруг символа "=" или в конце строки, так как эти пробелы будут использоваться. Теперь подмена будет работать, тильда "~" будет заменяться на перенос строки LF и будет вставлена оригинальная конструкция, такая как она была в коде. То есть для HTML кодинга можно написать "таблица" и вставить взамен готовый шаблон таблицы. То есть применяется в любом языке.

Поиск происходит следующим образом, ищется "перенос_строки+выделенное_слово+=" если найдено, то от этой позиции ищется перенос строки LF и текст между позициями будет вставлен в буфер обмена для последующей вставки в замен выделенного. И конечно же будет произведена замена "~" на "LF" перед вставкой в буфер обмена. Если возникнет вопрос, на счёт тильды, что она может использоваться в коде как спецсимвол, то для этого в ini существует настройка CRLF=~ (см text-correction.ini), можно использовать комбинацию нескольких символов, вероятность которых мала в тексте, например ~%#&!^


Транслитерация

См. параметры TranslitLang1 и TranslitLang2 в text-correction.ini. На данный момент TranslitLang1 имеет символы через пробела, а TranslitLang2 слитно, это связано что один язык имеет меньше символов и недостающие приходится задавать 2-мя символами, поэтому невозможно позиционировать символ по позиции в строке, вместо этого используется позиция по блоку разделённому пробелами от рядом стоящих. Возможно это будет изменено на автоматическое определение способа позиционирования для использования сложных транслитераций близких к звуковому транслированию и без возможности обратной транслитерации.


Преобразование регистра

Преобразование регистра выполняется стандартными функциями и подразумевает только верхний и нижний регистр для букв, т.е. исправление между цифрами и символами !№@#$%^&*() не производится.


Алгоритм авто-выделение текста.

  1. Очищается буфер обмена. Эмулируется горячая клавиша ctrl+c. Происходит копирование в буфер обмена.
  2. Если буфер обмена пуст, то предполагается, что текст не был заранее выделен и эмулируется горячая клавиша ctrl+shift+Left для выделения текста слева от курсора. Текст будет получен с помощью xsel.
  3. Текст обрабатывается взависимости от выбранного режима.
  4. Если итоговый текст отличается от начального, то эмулируется горячая клавиша ctrl+v для вставки взамен выделенного. А если не отличается, то эмулируется горячая клавиша Right (стрелка вправо), чтобы снять выделение и продолжить ввод текста.
Это поможет понять процесс и подстроится по времени и выбору горячих клавиш. Желательно, чтобы горячие клавиши вызова использовали ctrl, так как эмуляция происходит даже в тот момент, когда клавиша ctrl нажата, это заметно по попытке нажать ctrl+z для отмены действия, при этом клавиша "z" вводится, и нужно отпустить ctrl и снова нажать для получения эффекта. Если использовать shift или alt без ctrl, то возможна ситуация, что эмуляция будет происходить при нажатой клавише alt и вызовет например ctrl+alt+c, вместо ctrl+c.

Регистрация горячих клавиш.

Установите и используйте утилиту xbindkeys и GUI к нему.



Описание параметров ini-файла



rus=1 - ; коррекция для русского языка
select=1 - ; автоматическое выделение справа от курсора
paste=1 - ; автоматическая вставка взамен выделенного
strsel=xdotool key ctrl+shift+0xff51 - ; команда эмулирует ctrl+shift+left, чтобы выделить слово слева от курсора
strsel2=xdotool key shift+0xff50 - ; команда эмулирует shift+home, чтобы выделить строку слева от курсора
strpaste=xdotool key ctrl+v - ; команда эмулирует ctrl+v для вставки из буфера обмена
strcopy=xdotool key ctrl+c - ; команда эмулирует ctrl+c для копирования выделенного в буфер обмена
lang1=`qwertyuiop[]asdfghjkl;'zxcvbnm,./~QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?@#$^& - ; набор первого языка (английский) для замены
lang2=ёйцукенгшщзхъфывапролджэячсмитьбю.ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,"№;:? - ; набор второго языка (ваш родной) для замены
DetectLang1=qwertyuiopasdfghjklzxcvbnm@#$^& - ; набор первого языка (английский) для определения языка
DetectLang2=ёйцукенгшщзхъфывапролджэячсмитьбю№ - ; набор второго языка (ваш родной) для определения языка
TranslitLang1=SHC shc YO yo ZH zh Y' y' KH kh CH ch TC tc SH sh E' e' YU yu YA ya A a B b V v G g D d E e Z z I i K k L l M m N n O o P p R r S s T t U u F f `` ` Y y '' ' - ; набор первого языка (английский) для транслитерации
TranslitLang2=ЩщЁёЖжЙйХхЧчЦцШшЭэЮюЯяАаБбВвГгДдЕеЗзИиКкЛлМмНнОоПпРрСсТтУуФфЬьЫыЪъ - ; набор второго языка (ваш родной) для транслитерации
CRLF=~ - ; символ переноса строки во фрагментах замены аббревиатур