Skip to content

Commit a0dd207

Browse files
committed
Fixed alphabet for territory
1 parent da5c8be commit a0dd207

File tree

5 files changed

+17
-8
lines changed

5 files changed

+17
-8
lines changed

src/main/java/com/mapcode/Decoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -645,15 +645,15 @@ static String decodeUTF16(final String mapcode) {
645645
return result;
646646
}
647647

648-
static String encodeUTF16(final String mapcode, int alphabetCode) {
648+
static String encodeUTF16(final String mapcode, int alphabetCode) throws IllegalArgumentException {
649649
final String mapcodeToEncode;
650650
if (ASCII2LANGUAGE[alphabetCode][4] == 0x003f) {
651651

652652
// Alphabet does not contain 'E'.
653653
if (mapcode.matches("^.*[EU].*")) {
654654
final String unpacked = aeuUnpack(mapcode);
655655
if (unpacked.isEmpty()) {
656-
throw new AssertionError("encodeToAlphabetCode: cannot encode '" + mapcode +
656+
throw new IllegalArgumentException("encodeToAlphabetCode: cannot encode '" + mapcode +
657657
"' to alphabet " + alphabetCode + ' ' + Alphabet.fromCode(alphabetCode));
658658
}
659659
mapcodeToEncode = Encoder.aeuPack(unpacked, true);

src/main/java/com/mapcode/Mapcode.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ public static FormatType fromPrecision(final int precision) {
309309
public static FormatType getMapcodeFormatType(@Nonnull final String mapcode) throws IllegalArgumentException {
310310

311311
// First, decode to ASCII.
312-
final String decodedMapcode = convertStringToPlainAscii(mapcode.toUpperCase());
312+
final String decodedMapcode = convertStringToPlainAscii(mapcode).toUpperCase();
313313

314314
// Syntax needs to be OK.
315315
if (!PATTERN_MAPCODE.matcher(decodedMapcode).matches()) {
@@ -392,7 +392,8 @@ static String convertStringToPlainAscii(@Nonnull final String string) {
392392
* @param string Any string.
393393
* @param alphabet Alphabet to convert to, may contain Unicode characters.
394394
* @return Converted mapcode.
395-
* @throws IllegalArgumentException Thrown if mapcode has incorrect syntax.
395+
* @throws IllegalArgumentException Thrown if string has incorrect syntax or if the string cannot be encoded in
396+
* the specified alphabet.
396397
*/
397398
@Nonnull
398399
static String convertStringToAlphabet(@Nonnull final String string, @Nullable final Alphabet alphabet) throws IllegalArgumentException {

src/main/java/com/mapcode/MapcodeCodec.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public static Point decode(
244244
checkNonnull("mapcode", mapcode);
245245

246246
// Clean up mapcode.
247-
String mapcodeClean = Mapcode.convertStringToPlainAscii(mapcode.trim().toUpperCase());
247+
String mapcodeClean = Mapcode.convertStringToPlainAscii(mapcode.trim()).toUpperCase();
248248

249249
// Determine territory from mapcode.
250250
final Territory territory;

src/main/java/com/mapcode/Territory.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -722,7 +722,7 @@ public enum NameFormat {
722722
*
723723
* @param format Format to be used.
724724
* @param alphabet Alphabet. May be null.
725-
* @return Mapcode
725+
* @return Mapcode.
726726
*/
727727
@Nonnull
728728
public String toNameFormat(@Nonnull final NameFormat format, @Nullable final Alphabet alphabet) {
@@ -738,7 +738,14 @@ public String toNameFormat(@Nonnull final NameFormat format, @Nullable final Alp
738738
}
739739
}
740740
}
741-
return (alphabet != null) ? Mapcode.convertStringToAlphabet(result, alphabet) : result;
741+
if (alphabet != null) {
742+
try {
743+
result = Mapcode.convertStringToAlphabet(result, alphabet);
744+
} catch (final IllegalArgumentException ignored) {
745+
// Simply return result if translation to alphabet fails.
746+
}
747+
}
748+
return result;
742749
}
743750

744751
@Nonnull
@@ -862,7 +869,7 @@ private Territory(
862869
private static Territory createFromString(
863870
@Nonnull final String numericOrAlpha,
864871
@Nullable final ParentTerritory parentTerritory) throws UnknownTerritoryException {
865-
final String trimmed = Mapcode.convertStringToPlainAscii(numericOrAlpha.trim().replace('_', '-').toUpperCase());
872+
final String trimmed = Mapcode.convertStringToPlainAscii(numericOrAlpha.trim().replace('_', '-')).toUpperCase();
866873

867874
// First, try as numeric code.
868875
try {

src/test/java/com/mapcode/MapcodeTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public void checkConvertToAscii() {
114114
assertEquals("36228.92UW-TK", Mapcode.convertStringToPlainAscii("36228.92UW-TK"));
115115

116116
// Check unicode characters.
117+
assertEquals("GRC", Mapcode.convertStringToPlainAscii("\u0393\u03a8\u039e"));
117118
assertEquals("KM.8K", Mapcode.convertStringToPlainAscii("\u30c1\u30ca.8\u30c1"));
118119
assertEquals("HJ.Q2-Z", Mapcode.convertStringToPlainAscii("\u0397\u03a0.\u03982-\u0411"));
119120
}

0 commit comments

Comments
 (0)