PureBasic
TextCorrection
Назначение
Исправляет текст набранный в неверной раскладке клавиатуры.
Взаимосвязанные
TextCorrection (Windows) (рекомендуется)Работа с программой
Исправление текста набранного в неправильной раскладке клавиатуры, случайно нажатым капслоком и др.
При стабильной эмуляции горячих клавиш достаточно выполнить только 2 пункт.
Язык определяется автоматически по последней букве. Если последний символ цифра (или другой, но не буква), то берётся предыдущий символ, до тех пор пока не встретиться буква, которая проверяется в каком наборе она находится (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-мя символами, поэтому невозможно позиционировать символ по позиции в строке, вместо этого используется позиция по блоку разделённому пробелами от рядом стоящих. Возможно это будет изменено на автоматическое определение способа позиционирования для использования сложных транслитераций близких к звуковому транслированию и без возможности обратной транслитерации.
Преобразование регистра выполняется стандартными функциями и подразумевает только верхний и нижний регистр для букв, т.е. исправление между цифрами и символами !№@#$%^&*() не производится.