При вводе автоматически заменять определенные символы другими (например, греческие гласные в верхнем регистре с ударением)

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

В идеале я бы набрал какой-то текст, и, если используемая мной клавиатура настроена на это, он заменял бы его по мере ввода или после автозаполнения слова. К сожалению, я не нашел ни одного приложения для клавиатуры, которое позволяет это сделать.

Второй способ сделать это — завершить ввод в любом текстовом поле, выделить весь напечатанный текст, поделиться или скопировать и вставить в другое приложение, которое выполнит замену, а затем вставить замененный текст обратно в текстовое поле. Это кажется наиболее реалистичным решением для поиска, и я мог бы подумать о том, чтобы написать его самостоятельно. Я решил проверить более элегантное или существующее решение, прежде чем рассматривать это.

Основная цель этого состоит в том, чтобы приспособить любого, кто печатает на греческом языке и хочет использовать функцию автозаполнения клавиатуры, в частности, для отправки SMS в кодировке GSM-ASCII и, таким образом, иметь возможность использовать 160 символов в одном SMS.

Все клавиатуры, которые я пробовал (Go Keyboard, Swype, Swiftkey, стандартная ICS, Samsung), обнаруживают одну и ту же проблему, а именно заглавные версии слов в их греческих словарях неправильно включают ударение на гласных. Вероятно, это происходит из-за того, что словари включают только версии слов в нижнем регистре, автоматически переводя их в верхний регистр по запросу, чтобы сэкономить место в хранилище или избежать того, что они воспринимают как дублирование.

К сожалению, хотя строчные греческие гласные могут нести ударение, прописные не должны этого делать. Что еще более важно, 7-битная кодировка GSM-ASCII для передачи SMS, которая позволяет использовать 160 символов в одном SMS, включает только прописные греческие символы без диакритических знаков (но не строчные). Как только будет введена одна строчная буква или прописная буква с акцентом, SMS должно быть отправлено с использованием кодировки UCS-2, которая является 16-битной и ограничивает нас до 70 символов в SMS.

Список персонажей и их замен таков:

Ά => Α
Έ => Ε
Ή => Η
Ί => Ι
Ό => Ο
Ύ => Υ
Ώ => Ω

Кто-нибудь знает, как это сделать в существующем приложении или в каком-то макросе с функцией замены строки?

Извините за длинный вопрос, если вы зашли так далеко. Я подумал, что важно указать предысторию, которая привела к этому ограничению. Заранее спасибо.

На самом деле 160-символьные SMS принимают только прописные греческие символы, которые не похожи на латинские (ΓΔΘΛΞΠΣΦΨΩ). Итак, дело не в удалении акцента; вам нужно преобразовать в соответствующую латинскую заглавную букву.

Ответы (2)

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

Я заглянул в Tasker, и через пару часов мне удалось получить грубое, но эффективное решение, используя его быстрое создание диалогов (Scenes) с полем ввода и одной кнопкой. Я вставляю акцентированный текст в поле ввода, нажимаю кнопку, и он удаляет все акценты, копирует в буфер обмена и уничтожает сцену. Для простоты использования я запускаю его из ярлыка Task Cut, который можно добавить на любой домашний экран или, что еще лучше, с портала Swipepad .

Таким образом, грубый и промежуточный раствор выглядит следующим образом:

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

К сожалению, это не бесплатно, так как для этого требуется платное приложение Tasker. Будем надеяться, что клавиатура или, по крайней мере, приложения для SMS позволят использовать эту функциональность, или, что еще лучше, кто-то напишет эквивалент в родном приложении для Android.

Я включаю ниже XML-код Tasker, который вы можете использовать для импорта этого в Tasker, если вы сочтете это полезным. Ниже я включаю другую версию, которая при нажатии кнопки извлекается из буфера обмена, не требуя от пользователя вставки текста. Однако для этого требуется root.

<TaskerData sr="" dvi="1" tv="1.3.1m">
<Scene sr="sceneRemove Accents From Greek Uppercase Vowels">
<cdate>1350679378737</cdate>
<edate>1350725381426</edate>
<gridSize>18</gridSize>
<heightLand>-1</heightLand>
<heightPort>362</heightPort>
<nme>Remove Accents From Greek Uppercase Vowels</nme>
<widthLand>-1</widthLand>
<widthPort>384</widthPort>
<EditTextElement sr="elements0">
<flags>4</flags>
<geom>20,20,343,214,-1,-1,-1,-1</geom>
<valueselectedTask>45</valueselectedTask>
<Str sr="arg0" ve="3">TxtUserInput</Str>
<Str sr="arg1" ve="3"/>
<Int sr="arg2" val="16"/>
<Int sr="arg3" val="100"/>
<Str sr="arg4" ve="3">#FF000000</Str>
<Int sr="arg5" val="0"/>
<Int sr="arg6" val="0"/>
<RectElement sr="background">
<flags>4</flags>
<geom>-1,-1,-1,-1,-1,-1,-1,-1</geom>
<Str sr="arg0" ve="3"/>
<Int sr="arg1" val="0"/>
<Str sr="arg2" ve="3">#77333333</Str>
<Str sr="arg3" ve="3">#77333333</Str>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3">#FF000000</Str>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</RectElement>
</EditTextElement>
<ButtonElement sr="elements1">
<clickTask>44</clickTask>
<flags>4</flags>
<geom>50,243,288,105,-1,-1,-1,-1</geom>
<Str sr="arg0" ve="3">BtnSubmittedText</Str>
<Str sr="arg1" ve="3">Remove accents and copy to clipboard</Str>
<Int sr="arg2" val="16"/>
<Int sr="arg3" val="100"/>
<Str sr="arg4" ve="3">#FF000000</Str>
<Int sr="arg5" val="0"/>
<Img sr="arg6" ve="2"/>
</ButtonElement>
</Scene>
<Task sr="task44">
<cdate>1350679493963</cdate>
<edate>1350679493963</edate>
<id>44</id>
<Action sr="act0" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">%TxtUserInput</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act1" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ά</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Α</Str>
</Action>
<Action sr="act10" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TxtResult</Str>
<Str sr="arg1" ve="3">%TempUserInput</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act11" ve="3">
<code>105</code>
<label>Copied to clipboard</label>
<Str sr="arg0" ve="3">%TxtResult</Str>
<Int sr="arg1" val="0"/>
</Action>
<Action sr="act12" ve="3">
<code>49</code>
<Str sr="arg0" ve="3">Remove Accents From Greek Uppercase Vowels</Str>
</Action>
<Action sr="act2" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Έ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ε</Str>
</Action>
<Action sr="act3" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ή</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Η</Str>
</Action>
<Action sr="act4" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ί</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ι</Str>
</Action>
<Action sr="act5" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ϊ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ι</Str>
</Action>
<Action sr="act6" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ό</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ο</Str>
</Action>
<Action sr="act7" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ύ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Υ</Str>
</Action>
<Action sr="act8" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ϋ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Υ</Str>
</Action>
<Action sr="act9" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ώ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ω</Str>
</Action>
</Task>
<Task sr="task45">
<cdate>1350723583443</cdate>
<edate>1350723583443</edate>
<id>45</id>
<Action sr="act0" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TxtUserInput</Str>
<Str sr="arg1" ve="3">%new_val</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
</Task>
</TaskerData>

Ниже сохранен 1 шаг (вставка в сцену), но требуется root:

<TaskerData sr="" dvi="1" tv="1.3.1m">
<Scene sr="sceneRemove (ROOT) Accents From Greek Uppercase Vowels">
<cdate>1350679378737</cdate>
<edate>1350727181786</edate>
<gridSize>18</gridSize>
<heightLand>-1</heightLand>
<heightPort>362</heightPort>
<nme>Remove (ROOT) Accents From Greek Uppercase Vowels</nme>
<widthLand>-1</widthLand>
<widthPort>384</widthPort>
<EditTextElement sr="elements0">
<flags>4</flags>
<geom>20,20,343,214,-1,-1,-1,-1</geom>
<valueselectedTask>46</valueselectedTask>
<Str sr="arg0" ve="3">TxtUserInput</Str>
<Str sr="arg1" ve="3"/>
<Int sr="arg2" val="16"/>
<Int sr="arg3" val="100"/>
<Str sr="arg4" ve="3">#FF000000</Str>
<Int sr="arg5" val="0"/>
<Int sr="arg6" val="0"/>
<RectElement sr="background">
<flags>4</flags>
<geom>-1,-1,-1,-1,-1,-1,-1,-1</geom>
<Str sr="arg0" ve="3"/>
<Int sr="arg1" val="0"/>
<Str sr="arg2" ve="3">#77333333</Str>
<Str sr="arg3" ve="3">#77333333</Str>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3">#FF000000</Str>
<Int sr="arg6" val="0"/>
<Int sr="arg7" val="0"/>
</RectElement>
</EditTextElement>
<ButtonElement sr="elements1">
<clickTask>47</clickTask>
<flags>4</flags>
<geom>50,243,288,105,-1,-1,-1,-1</geom>
<Str sr="arg0" ve="3">BtnSubmittedText</Str>
<Str sr="arg1" ve="3">Remove accents and copy to clipboard</Str>
<Int sr="arg2" val="16"/>
<Int sr="arg3" val="100"/>
<Str sr="arg4" ve="3">#FF000000</Str>
<Int sr="arg5" val="0"/>
<Img sr="arg6" ve="2"/>
</ButtonElement>
</Scene>
<Task sr="task46">
<cdate>1350723583443</cdate>
<edate>1350723583443</edate>
<id>46</id>
<Action sr="act0" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TxtUserInput</Str>
<Str sr="arg1" ve="3">%new_val</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
</Task>
<Task sr="task47">
<cdate>1350679493963</cdate>
<edate>1350679493963</edate>
<id>47</id>
<Action sr="act0" ve="3">
<code>51</code>
<Str sr="arg0" ve="3">Remove (ROOT) Accents From Greek Uppercase Vowels</Str>
<Str sr="arg1" ve="3">TxtUserInput</Str>
<Int sr="arg2" val="0"/>
<Str sr="arg3" ve="3">%CLIP</Str>
</Action>
<Action sr="act1" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">%TxtUserInput</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act10" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ώ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ω</Str>
</Action>
<Action sr="act11" ve="3">
<code>547</code>
<Str sr="arg0" ve="3">%TxtResult</Str>
<Str sr="arg1" ve="3">%TempUserInput</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
</Action>
<Action sr="act12" ve="3">
<code>105</code>
<label>Copied to clipboard</label>
<Str sr="arg0" ve="3">%TxtResult</Str>
<Int sr="arg1" val="0"/>
</Action>
<Action sr="act13" ve="3">
<code>49</code>
<Str sr="arg0" ve="3">Remove (ROOT) Accents From Greek Uppercase Vowels</Str>
</Action>
<Action sr="act2" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ά</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Α</Str>
</Action>
<Action sr="act3" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Έ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ε</Str>
</Action>
<Action sr="act4" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ί</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ι</Str>
</Action>
<Action sr="act5" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ϊ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ι</Str>
</Action>
<Action sr="act6" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ή</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Η</Str>
</Action>
<Action sr="act7" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ό</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Ο</Str>
</Action>
<Action sr="act8" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ύ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Υ</Str>
</Action>
<Action sr="act9" ve="3">
<code>598</code>
<Str sr="arg0" ve="3">%TempUserInput</Str>
<Str sr="arg1" ve="3">Ϋ</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
<Str sr="arg5" ve="3"/>
<Int sr="arg6" val="1"/>
<Str sr="arg7" ve="3">Υ</Str>
</Action>
</Task>
</TaskerData>

Для полноты картины: пробовали ли вы использовать клавиатуру MessagEase ? Я ничего не знаю о его греческих функциях, но, судя по его английским функциям, он, скорее всего, позволит вам напечатать то, что вы хотите, с первого раза.