1
0
Fork 0

removed the mandatoty character restrictions when reordering the punctuation for non-European languages

This commit is contained in:
sspanak 2025-05-09 16:40:39 +03:00 committed by Dimo Karaivanov
parent eaa8444ca8
commit dc21957a1c
17 changed files with 34 additions and 7 deletions

View file

@ -8,7 +8,7 @@ public class LanguageKind {
public static boolean isArabicBased(Language language) { return isArabic(language) || isFarsi(language); }
public static boolean isCJK(Language language) { return isChinese(language) || isJapanese(language) || isKorean(language); }
public static boolean isCyrillic(Language language) { return language != null && language.getKeyCharacters(2).contains("а"); }
public static boolean isLatinBased(Language language) { return language != null && language.getKeyCharacters(2).contains("a"); }
public static boolean isLatinBased(Language language) { return language != null && language.getKeyCharacters(2).contains("a") && !language.isTranscribed(); }
public static boolean isRTL(Language language) { return isArabic(language) || isFarsi(language) || isHebrew(language); }
public static boolean isArabic(Language language) { return language != null && language.getId() == 502337; }

View file

@ -6,6 +6,7 @@ import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import io.github.sspanak.tt9.R;
import io.github.sspanak.tt9.preferences.settings.SettingsStore;
public class PreferenceSentencePunctuationList extends AbstractPreferenceCharList {
@ -40,10 +41,15 @@ public class PreferenceSentencePunctuationList extends AbstractPreferenceCharLis
@Override
protected String validateMandatoryChars() {
return super.validateMandatoryChars(SettingsStore.MANDATORY_PUNCTUATION);
return super.validateMandatoryChars(getSettings().getMandatoryPunctuation(language));
}
public boolean validateCurrentChars() {
if (currentChars.isEmpty()) {
setError(getContext().getString(R.string.punctuation_order_cannot_be_empty));
return false;
}
String forbiddenCharsError = validateForbiddenChars();
String mandatoryCharsError = validateMandatoryChars();

View file

@ -29,12 +29,14 @@ public class PreferenceSpecialCharList extends AbstractPreferenceCharList {
@Override
protected char[] getForbiddenChars() {
if (forbiddenChars == null) {
forbiddenChars = new char[SettingsStore.MANDATORY_PUNCTUATION.length + SettingsStore.FORBIDDEN_SPECIAL_CHARS.length];
for (char i = 0; i < SettingsStore.MANDATORY_PUNCTUATION.length; i++) {
forbiddenChars[i] = SettingsStore.MANDATORY_PUNCTUATION[i];
char[] mandatoryChars = getSettings().getMandatoryPunctuation(language);
forbiddenChars = new char[mandatoryChars.length + SettingsStore.FORBIDDEN_SPECIAL_CHARS.length];
for (char i = 0; i < mandatoryChars.length; i++) {
forbiddenChars[i] = mandatoryChars[i];
}
for (char i = 0; i < SettingsStore.FORBIDDEN_SPECIAL_CHARS.length; i++) {
forbiddenChars[i + SettingsStore.MANDATORY_PUNCTUATION.length] = SettingsStore.FORBIDDEN_SPECIAL_CHARS[i];
forbiddenChars[i + mandatoryChars.length] = SettingsStore.FORBIDDEN_SPECIAL_CHARS[i];
}
}

View file

@ -7,12 +7,13 @@ import androidx.annotation.NonNull;
import java.util.ArrayList;
import io.github.sspanak.tt9.languages.Language;
import io.github.sspanak.tt9.languages.LanguageKind;
import io.github.sspanak.tt9.util.chars.Characters;
class SettingsPunctuation extends SettingsInput {
private final static String KEY_PREFIX_PUNCTUATION = "pref_punctuation_";
private final static String KEY_PREFIX_SPECIAL = "pref_special_chars_";
public final static char[] MANDATORY_PUNCTUATION = new char[] {'\'', '"', '-'};
private final static char[] MANDATORY_EU_PUNCTUATION = new char[] {'\'', '"', '-'};
public final static char[] FORBIDDEN_SPECIAL_CHARS = new char[] {' ', '\n', '\t'};
@ -21,6 +22,11 @@ class SettingsPunctuation extends SettingsInput {
}
public char[] getMandatoryPunctuation(Language language) {
return LanguageKind.isCyrillic(language) || LanguageKind.isLatinBased(language) ? MANDATORY_EU_PUNCTUATION : new char[0];
}
public void savePunctuation(@NonNull Language language, @NonNull String punctuation) {
prefsEditor.putString(KEY_PREFIX_PUNCTUATION + language.getId(), punctuation);
prefsEditor.apply();

View file

@ -197,6 +197,7 @@
<string name="pref_backspace_acceleration_summary">Изтривай цели думи при задържане или плъзване на Backspace. (Не работи в някои приложения.)</string>
<string name="pref_category_punctuation_order">Ред на пунктуацията</string>
<string name="language_popup_title">Изберете език</string>
<string name="punctuation_order_cannot_be_empty">Списъкът не може да бъде празен.</string>
<string name="punctuation_order_mandatory_char_missing">Липсва задължителен символ:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Липсват задължителни символи:%1$s</string>
<string name="punctuation_order_save_error">Неуспешно запазване на реда на знаците.</string>

View file

@ -185,6 +185,7 @@
<string name="pref_backspace_acceleration_summary">Ganze Wörter löschen, indem Sie die Rücktaste gedrückt halten oder wischen. (Nicht in allen Apps unterstützt)</string>
<string name="pref_category_punctuation_order">Interpunktionsreihenfolge</string>
<string name="language_popup_title">Sprache auswählen</string>
<string name="punctuation_order_cannot_be_empty">Die Liste darf nicht leer sein.</string>
<string name="punctuation_order_mandatory_char_missing">Fehlendes erforderliches Zeichen:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Fehlende erforderliche Zeichen:%1$s</string>
<string name="punctuation_order_save_error">Zeichenreihenfolge konnte nicht gespeichert werden.</string>

View file

@ -196,6 +196,7 @@
<string name="pref_backspace_acceleration_summary">Borrar palabras completas manteniendo pulsado o deslizando Retroceso. (No compatible con algunas aplicaciones)</string>
<string name="pref_category_punctuation_order">Orden de puntuación</string>
<string name="language_popup_title">Seleccionar idioma</string>
<string name="punctuation_order_cannot_be_empty">La lista no puede estar vacía.</string>
<string name="punctuation_order_mandatory_char_missing">Falta carácter obligatorio:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Faltan caracteres obligatorios:%1$s</string>
<string name="punctuation_order_save_error">Error al guardar el orden de los caracteres.</string>

View file

@ -194,6 +194,7 @@
<string name="pref_backspace_acceleration_summary">Effacer des mots entiers en maintenant ou en glissant sur Retour arrière. (Non pris en charge dans certaines applications)</string>
<string name="pref_category_punctuation_order">Ordre de ponctuation</string>
<string name="language_popup_title">Sélectionner la langue</string>
<string name="punctuation_order_cannot_be_empty">La liste ne peut pas être vide.</string>
<string name="punctuation_order_mandatory_char_missing">Caractère obligatoire manquant :%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Caractères obligatoires manquants :%1$s</string>
<string name="punctuation_order_save_error">Échec de lenregistrement de lordre des caractères.</string>

View file

@ -183,6 +183,7 @@
<string name="pref_backspace_acceleration_summary">Cancellare intere parole tenendo premuto o scorrendo Backspace. (Non supportato in alcune app)</string>
<string name="pref_category_punctuation_order">Ordine di punteggiatura</string>
<string name="language_popup_title">Seleziona la lingua</string>
<string name="punctuation_order_cannot_be_empty">L\'elenco non può essere vuoto.</string>
<string name="punctuation_order_mandatory_char_missing">Carattere obbligatorio mancante:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Caratteri obbligatori mancanti:%1$s</string>
<string name="punctuation_order_save_error">Salvataggio dellordine dei caratteri non riuscito.</string>

View file

@ -197,6 +197,7 @@
<string name="pref_backspace_acceleration_summary">למחוק מילים שלמות על ידי החזקת Backspace או החלקה עליו. (לא נתמך בחלק מהאפליקציות)</string>
<string name="pref_category_punctuation_order">סדר סימני פיסוק</string>
<string name="language_popup_title">בחר שפה</string>
<string name="punctuation_order_cannot_be_empty">הרשימה לא יכולה להיות ריקה.</string>
<string name="punctuation_order_mandatory_char_missing">תו חובה חסר: %1$s</string>
<string name="punctuation_order_mandatory_chars_missing">תווי חובה חסרים:%1$s</string>
<string name="punctuation_order_save_error">שמירת סדר התווים נכשלה.</string>

View file

@ -205,6 +205,7 @@
<string name="pref_backspace_acceleration_summary">Ištrinti visus žodžius laikant arba perbraukiant Backspace. (Nepalaikoma kai kuriose programėlėse)</string>
<string name="pref_category_punctuation_order">Skyrybos ženklų tvarka</string>
<string name="language_popup_title">Pasirinkite kalbą</string>
<string name="punctuation_order_cannot_be_empty">Sąrašas negali būti tuščias.</string>
<string name="punctuation_order_mandatory_char_missing">Trūksta privalomo simbolio:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Trūksta privalomų simbolių:%1$s</string>
<string name="punctuation_order_save_error">Nepavyko išsaugoti simbolių tvarkos.</string>

View file

@ -185,6 +185,7 @@
<string name="pref_backspace_acceleration_summary">Hele woorden wissen door Backspace ingedrukt te houden of te vegen. (Niet ondersteund in sommige apps)</string>
<string name="pref_category_punctuation_order">Interpunctievolgorde</string>
<string name="language_popup_title">Selecteer taal</string>
<string name="punctuation_order_cannot_be_empty">De lijst mag niet leeg zijn.</string>
<string name="punctuation_order_mandatory_char_missing">Ontbrekend verplicht teken:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Ontbrekende verplichte tekens:%1$s</string>
<string name="punctuation_order_save_error">Opslaan van de tekenvolgorde mislukt.</string>

View file

@ -198,6 +198,7 @@
<string name="pref_backspace_acceleration_summary">Apagar palavras inteiras mantendo pressionado ou deslizando o Backspace. (Não suportado em alguns aplicativos)</string>
<string name="pref_category_punctuation_order">Ordem de pontuação</string>
<string name="language_popup_title">Selecione o idioma</string>
<string name="punctuation_order_cannot_be_empty">A lista não pode estar vazia.</string>
<string name="punctuation_order_mandatory_char_missing">Caractere obrigatório ausente:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Caracteres obrigatórios ausentes:%1$s</string>
<string name="punctuation_order_save_error">Falha ao salvar a ordem dos caracteres.</string>

View file

@ -196,6 +196,7 @@
<string name="pref_backspace_acceleration_summary">Стереть целые слова, удерживая или проведя по клавише Backspace. (Не поддерживается в некоторых приложениях)</string>
<string name="pref_category_punctuation_order">Порядок пунктуации</string>
<string name="language_popup_title">Выберите язык</string>
<string name="punctuation_order_cannot_be_empty">Список не может быть пустым.</string>
<string name="punctuation_order_mandatory_char_missing">Отсутствует обязательный символ:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Отсутствуют обязательные символы:%1$s</string>
<string name="punctuation_order_save_error">е удалось сохранить порядок символов.</string>

View file

@ -198,6 +198,7 @@
<string name="pref_backspace_acceleration_summary">Geri tuşunu basılı tutarak veya kaydırarak tüm kelimeleri sil. (Bazı uygulamalarda desteklenmez)</string>
<string name="pref_category_punctuation_order">Noktalama sırası</string>
<string name="language_popup_title">Dil Seçin</string>
<string name="punctuation_order_cannot_be_empty">Liste boş olamaz.</string>
<string name="punctuation_order_mandatory_char_missing">Zorunlu karakter eksik:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Zorunlu karakterler eksik:%1$s</string>
<string name="punctuation_order_save_error">Karakter sırası kaydedilemedi.</string>

View file

@ -207,6 +207,7 @@
<string name="pref_backspace_acceleration_summary">Видалити цілі слова, утримуючи або провівши клавішею Backspace. (Не підтримується в деяких додатках)</string>
<string name="pref_category_punctuation_order">Порядок пунктуації</string>
<string name="language_popup_title">Виберіть мову</string>
<string name="punctuation_order_cannot_be_empty">Список не може бути порожнім.</string>
<string name="punctuation_order_mandatory_char_missing">Відсутній обов’язковий символ:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Відсутні обов’язкові символи:%1$s</string>
<string name="punctuation_order_save_error">Не вдалося зберегти порядок символів.</string>

View file

@ -205,6 +205,7 @@
<string name="language_popup_title">Select Language</string>
<string name="punctuation_order_cannot_be_empty">The list can not be empty.</string>
<string name="punctuation_order_mandatory_char_missing">Missing mandatory character:%1$s</string>
<string name="punctuation_order_mandatory_chars_missing">Missing mandatory characters:%1$s</string>
<string name="punctuation_order_forbidden_char">Forbidden character:%1$s</string>