[FOray-commit] SF.net SVN: foray:[14944] trunk/foray/foray-common/sr c
Modular XSL-FO Implementation for Java.
Status: Alpha
Brought to you by:
victormote
|
From: <vic...@us...> - 2026-07-29 14:13:08
|
Revision: 14944
http://sourceforge.net/p/foray/code/14944
Author: victormote
Date: 2026-07-29 14:13:05 +0000 (Wed, 29 Jul 2026)
Log Message:
-----------
Allow 4-character language codes.
Modified Paths:
--------------
trunk/foray/foray-common/src/main/java/org/foray/common/i18n/Language4a.java
trunk/foray/foray-common/src/test/java/org/foray/common/i18n/Language4aTests.java
Modified: trunk/foray/foray-common/src/main/java/org/foray/common/i18n/Language4a.java
===================================================================
--- trunk/foray/foray-common/src/main/java/org/foray/common/i18n/Language4a.java 2026-07-29 10:22:22 UTC (rev 14943)
+++ trunk/foray/foray-common/src/main/java/org/foray/common/i18n/Language4a.java 2026-07-29 14:13:05 UTC (rev 14944)
@@ -109,13 +109,16 @@
/** The length, in chars, of the 3-character code. */
private static final int PATTERN_3CHAR_LENGTH = 3;
+ /** The length, in chars, of the 4-character code. */
+ private static final int PATTERN_4CHAR_LENGTH = 4;
+
/** Regular expression pattern for matching a 2-character code. BCP 47 specifies that the language code is
* case-insensitive. */
private static final Pattern PATTERN_2CHAR = Pattern.compile("[A-Za-z]{2}");
- /** Regular expression pattern for matching a 3-character code. BCP 47 specifies that the language code is
- * case-insensitive. */
- private static final Pattern PATTERN_3CHAR = Pattern.compile("[A-Za-z]{3}");
+ /** Regular expression pattern for matching a 3-character or 4-character ISO 639 code. BCP 47 specifies that the
+ * language code is case-insensitive. */
+ private static final Pattern PATTERN_3_OR_4CHAR = Pattern.compile("[A-Za-z]{3,4}");
/** The initial capacity of the data structures. */
private static final int INITIAL_CAPACITY = 600;
@@ -276,6 +279,8 @@
Script4a.GREEK));
Language4a.register(new Language4a("elx", null, "Elamite", "élamite", null));
Language4a.register(new Language4a("eng", "en", "English", "anglais", Script4a.LATIN));
+ /* The "emen" language code was part of the since-withdrawn ISO 639-6 proposed standard. */
+ Language4a.register(new Language4a("emen", null, "Early Modern English", "[unknown]", Script4a.LATIN));
Language4a.register(new Language4a("enm", null, "English, Middle(1100-1500)", "anglais moyen(1100-1500)",
null));
Language4a.register(new Language4a("epo", "eo", "Esperanto", "espéranto", null));
@@ -729,8 +734,8 @@
*/
public Language4a(final String alpha3Code, final String alpha2Code, final String englishName,
final String frenchName, final Script4a defaultScript) {
- if (! matches3CharacterPattern(alpha3Code)) {
- final String template = "Alpha 3 code expected pattern: " + PATTERN_3CHAR.toString() + ", actual: %s";
+ if (! matches3or4CharacterPattern(alpha3Code)) {
+ final String template = "Alpha 3 code expected pattern: " + PATTERN_3_OR_4CHAR.toString() + ", actual: %s";
throw new IllegalArgumentException(String.format(template, alpha3Code));
}
/* Alpha 2 code can be null. */
@@ -889,19 +894,19 @@
}
/**
- * Indicates whether a given string fits the pattern of a 3-character language code.
+ * Indicates whether a given string fits the pattern of a 3-character or 4-character language code.
* This does NOT validate the language code, but only indicates that the pattern fits.
* This is useful when parsing a string like "eng-USA-Latn" by helping to distinguish which part of the string could
* be a valid language code.
* @param testString The string to be tested, e.g. "eng" or "rus".
- * @return True if and only if {@code testString} fits the pattern of a 3-character language code, i.e. that it
- * consists of exactly two lowercase characters from the Latin alphabet.
+ * @return True if and only if {@code testString} fits the pattern of a 3-character or 4-character language code,
+ * i.e. that it consists of exactly three or four lowercase characters from the Latin alphabet.
*/
- public static boolean matches3CharacterPattern(final CharSequence testString) {
+ public static boolean matches3or4CharacterPattern(final CharSequence testString) {
if (testString == null) {
return false;
}
- final Matcher matcher = PATTERN_3CHAR.matcher(testString);
+ final Matcher matcher = PATTERN_3_OR_4CHAR.matcher(testString);
return matcher.matches();
}
@@ -920,7 +925,8 @@
}
switch (testString.length()) {
case PATTERN_2CHAR_LENGTH: return matches2CharacterPattern(testString);
- case PATTERN_3CHAR_LENGTH: return matches3CharacterPattern(testString);
+ case PATTERN_3CHAR_LENGTH: return matches3or4CharacterPattern(testString);
+ case PATTERN_4CHAR_LENGTH: return matches3or4CharacterPattern(testString);
default: return false;
}
}
Modified: trunk/foray/foray-common/src/test/java/org/foray/common/i18n/Language4aTests.java
===================================================================
--- trunk/foray/foray-common/src/test/java/org/foray/common/i18n/Language4aTests.java 2026-07-29 10:22:22 UTC (rev 14943)
+++ trunk/foray/foray-common/src/test/java/org/foray/common/i18n/Language4aTests.java 2026-07-29 14:13:05 UTC (rev 14944)
@@ -86,13 +86,16 @@
@Test
public void matches3CharacterPatternTests() {
/* String should match. */
- assertThat(Language4a.matches3CharacterPattern("aaa")).isTrue();
+ assertThat(Language4a.matches3or4CharacterPattern("aaa")).isTrue();
+ /* String should match. */
+ assertThat(Language4a.matches3or4CharacterPattern("aaaa")).isTrue();
+
/* String too long. */
- assertThat(Language4a.matches3CharacterPattern("aaaa")).isFalse();
+ assertThat(Language4a.matches3or4CharacterPattern("aaaaa")).isFalse();
/* String too short. */
- assertThat(Language4a.matches3CharacterPattern("aa")).isFalse();
+ assertThat(Language4a.matches3or4CharacterPattern("aa")).isFalse();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|