From 617b3e618babd0c40ea50951a7945c6d328dca33 Mon Sep 17 00:00:00 2001 From: sspanak Date: Tue, 15 Apr 2025 15:12:36 +0300 Subject: [PATCH] improved automatic space rules --- .../tt9/ime/modes/helpers/AutoSpace.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java index 305345fe..81956a92 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/modes/helpers/AutoSpace.java @@ -12,12 +12,14 @@ import io.github.sspanak.tt9.util.Text; import io.github.sspanak.tt9.util.chars.Characters; public class AutoSpace { - private static final Set PRECEDING_SPACE_PUNCTUATION = Set.of('(', '«', '„'); - private static final Set PRECEDING_SPACE_FRENCH_PUNCTUATION = Set.of(';', ':', '!', '?', '»'); - private static final Set TRAILING_SPACE_PUNCTUATION = Set.of(';', '!', '?', ')', '%', '»', '؟', '“', Characters.GR_QUESTION_MARK.charAt(0)); + private static final Set PRECEDING_SPACE_CHARS = Set.of('(', '«', '„'); + private static final Set PRECEDING_SPACE_CHARS_FRENCH = Set.of(';', ':', '!', '?', '»'); + private static final Set TRAILING_SPACE_CHARS = Set.of(';', '!', '?', ')', '%', '»', '،', Characters.AR_QUESTION_MARK.charAt(0), '“', Characters.GR_QUESTION_MARK.charAt(0)); + private static final Set TRAILING_SPACE_POST_DIGIT_CHARS = Set.of(':', '.', ','); + private static final Set PADDING_SPACE_CHARS = Set.of('-', '/'); - private static final Set NO_PRECEDING_SPACE_PUNCTUATION = Set.of('.', ',', ')', '\'', '@', '“', '؟', Characters.GR_QUESTION_MARK.charAt(0)); - private static final Set NOT_FRENCH_NO_PRECEDING_SPACE_PUNCTUATION = Set.of(';', ':', '!', '?', '»'); + private static final Set NO_PRECEDING_SPACE_CHARS = Set.of('.', ',', ')', '\'', '“', Characters.AR_QUESTION_MARK.charAt(0), Characters.GR_QUESTION_MARK.charAt(0)); + private static final Set NO_PRECEDING_SPACE_CHARS_NOT_FRENCH = Set.of(';', ':', '!', '?', '»'); private Language language; private final SettingsStore settings; @@ -98,8 +100,8 @@ public class AutoSpace { return Character.isAlphabetic(penultimateChar) && ( - PRECEDING_SPACE_PUNCTUATION.contains(previousChar) - || (isLanguageFrench && PRECEDING_SPACE_FRENCH_PUNCTUATION.contains(previousChar)) + PRECEDING_SPACE_CHARS.contains(previousChar) + || (isLanguageFrench && PRECEDING_SPACE_CHARS_FRENCH.contains(previousChar)) ); } @@ -118,13 +120,10 @@ public class AutoSpace { && !Text.nextIsPunctuation(nextChars.toString()) && !nextChars.startsWithNumber() && ( - TRAILING_SPACE_PUNCTUATION.contains(previousChar) + TRAILING_SPACE_CHARS.contains(previousChar) || (isLanguageFrench && previousChar == '«') - || (penultimateChar == ' ' && previousChar == '-') - || (penultimateChar == ' ' && previousChar == '/') - || (!Character.isDigit(penultimateChar) && previousChar == ':') - || (!Character.isDigit(penultimateChar) && previousChar == '.') - || (!Character.isDigit(penultimateChar) && previousChar == ',') + || (penultimateChar == ' ' && PADDING_SPACE_CHARS.contains(previousChar)) + || (!Character.isDigit(penultimateChar) && TRAILING_SPACE_POST_DIGIT_CHARS.contains(previousChar)) || ( Character.isDigit(penultimateChar) && Characters.isCurrency(language, String.valueOf(previousChar)) ) @@ -170,8 +169,8 @@ public class AutoSpace { !Character.isWhitespace(prePenultimateChar) && Character.isWhitespace(penultimateChar) && ( - NO_PRECEDING_SPACE_PUNCTUATION.contains(previousChar) - || (!isLanguageFrench && NOT_FRENCH_NO_PRECEDING_SPACE_PUNCTUATION.contains(previousChar)) + NO_PRECEDING_SPACE_CHARS.contains(previousChar) + || (!isLanguageFrench && NO_PRECEDING_SPACE_CHARS_NOT_FRENCH.contains(previousChar)) ); } }