Skip to content

Commit 5e89a54

Browse files
Minor changes
1 parent f91db78 commit 5e89a54

File tree

5 files changed

+77
-76
lines changed

5 files changed

+77
-76
lines changed

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,6 @@ public String toString() {
138138
class Decoder {
139139
private static final Logger LOG = LoggerFactory.getLogger(Decoder.class);
140140

141-
private static final char GREEK_CAPITAL_ALPHA = 'Α';
142-
143141
private Decoder() {
144142
// Prevent instantiation.
145143
}
@@ -223,9 +221,7 @@ static Point decode(@Nonnull final String argMapcode,
223221
i, extrapostfix);
224222

225223
// first of all, make sure the zone fits the country
226-
if (!mapcodeZone.isEmpty() && (territory != Territory.AAA)) {
227-
mapcodeZone = mapcodeZone.restrictZoneTo(Data.getBoundaries(upto));
228-
}
224+
mapcodeZone = mapcodeZone.restrictZoneTo(Data.getBoundaries(upto));
229225

230226
if (Data.isRestricted(i) && !mapcodeZone.isEmpty()) {
231227
int nrZoneOverlaps = 0;
@@ -291,9 +287,8 @@ static Point decode(@Nonnull final String argMapcode,
291287
}
292288
}
293289

294-
if (territory != Territory.AAA) {
295-
mapcodeZone = mapcodeZone.restrictZoneTo(Data.getBoundaries(upto));
296-
}
290+
mapcodeZone = mapcodeZone.restrictZoneTo(Data.getBoundaries(upto));
291+
297292
final Point result = mapcodeZone.midPoint().wrap();
298293

299294
LOG.trace("decode: result=({}, {})",
@@ -343,7 +338,7 @@ public Unicode2Ascii(final char min, final char max, @Nonnull final String conve
343338
private static final char MISSCODE = '?';
344339

345340
private final static char[][] ASCII2LANGUAGE = {
346-
// Character: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
341+
// Character: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
347342
/* Roman */ {'\u0041', '\u0042', '\u0043', '\u0044', '\u0045', '\u0046', '\u0047', '\u0048', '\u0049', '\u004a', '\u004b', '\u004c', '\u004d', '\u004e', '\u004f', '\u0050', '\u0051', '\u0052', '\u0053', '\u0054', '\u0055', '\u0056', '\u0057', '\u0058', '\u0059', '\u005a', '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037', '\u0038', '\u0039'}, // Roman
348343
/* Greek */ {'\u0391', '\u0392', '\u039e', '\u0394', MISSCODE, '\u0395', '\u0393', '\u0397', '\u0399', '\u03a0', '\u039a', '\u039b', '\u039c', '\u039d', '\u039f', '\u03a1', '\u0398', '\u03a8', '\u03a3', '\u03a4', MISSCODE, '\u03a6', '\u03a9', '\u03a7', '\u03a5', '\u0396', '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037', '\u0038', '\u0039'}, // Greek
349344
/* Cyrillic */ {'\u0410', '\u0412', '\u0421', '\u0414', '\u0415', '\u0416', '\u0413', '\u041d', '\u0418', '\u041f', '\u041a', '\u041b', '\u041c', '\u0417', '\u041e', '\u0420', '\u0424', '\u042f', '\u0426', '\u0422', '\u042d', '\u0427', '\u0428', '\u0425', '\u0423', '\u0411', '\u0030', '\u0031', '\u0032', '\u0033', '\u0034', '\u0035', '\u0036', '\u0037', '\u0038', '\u0039'}, // Cyrillic
@@ -772,6 +767,7 @@ static String decodeUTF16(final String mapcode) {
772767
result = asciiBuf.toString();
773768

774769
// Repack if this was a Greek 'alpha' code. This will have been converted to a regular 'A' after one iteration.
770+
final char GREEK_CAPITAL_ALPHA = '\u0391';
775771
if (mapcode.startsWith(String.valueOf(GREEK_CAPITAL_ALPHA))) {
776772
final String unpacked = aeuUnpack(result);
777773
if (unpacked.isEmpty()) {

src/main/java/com/mapcode/Encoder.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,20 +62,18 @@ private static List<Mapcode> encode(final double argLatDeg, final double argLonD
6262
LOG.trace("encode: latDeg={}, lonDeg={}, territory={}, limitToOneResult={}",
6363
argLatDeg, argLonDeg, (territory == null) ? null : territory.name(), limitToOneResult);
6464

65-
final int ccode_earth = Territory.AAA.getNumber();
66-
6765
final Point pointToEncode = Point.fromDeg(argLatDeg, argLonDeg);
6866

6967
final List<Mapcode> results = new ArrayList<Mapcode>();
7068

7169
int lastbasesubareaID = -1;
7270

7371
final int firstNr = (territory != null) ? territory.getNumber() : 0;
74-
final int lastNr = (territory != null) ? territory.getNumber() : ccode_earth;
72+
final int lastNr = (territory != null) ? territory.getNumber() : Territory.AAA.getNumber();
7573
for (int ccode = firstNr; ccode <= lastNr; ccode++ ) {
7674

7775
final int upto = DataAccess.dataLastRecord(ccode);
78-
if ((ccode != ccode_earth) && !Data.getBoundaries(upto).containsPoint(pointToEncode)) {
76+
if (!Data.getBoundaries(upto).containsPoint(pointToEncode)) {
7977
continue;
8078
}
8179
final int from = DataAccess.dataFirstRecord(ccode);
@@ -413,6 +411,7 @@ private static String encodeNameless(final Point pointToEncode, final int index,
413411
return result;
414412
}
415413

414+
// add vowels to prevent all-digit mapcodes
416415
static String aeuPack(final String argStr, final boolean argShort) {
417416
String str = argStr;
418417
int dotpos = -9;
@@ -436,12 +435,11 @@ static String aeuPack(final String argStr, final boolean argShort) {
436435
}
437436

438437
if ((rlen - 2) > dotpos) {
439-
// does r have a dot, AND at least 2 chars
440-
// after the dot?
441-
if (argShort) {
438+
// does r have a dot, AND at least 2 chars after the dot?
439+
if (argShort) { // use A only
442440
final int v = ((((int) str.charAt(0)) - 48) * 100) + ((((int) str.charAt(rlen - 2)) - 48) * 10) + (((int) str.charAt(rlen - 1)) - 48);
443441
return 'A' + str.substring(1, rlen - 2) + ENCODE_CHARS[v / 32] + ENCODE_CHARS[v % 32] + rest;
444-
} else {
442+
} else { // use A, E and U
445443
final int v = (((((int) str.charAt(rlen - 2)) - 48) * 10) + ((int) str.charAt(rlen - 1))) - 48;
446444
str = str.substring(0, rlen - 2) + ENCODE_CHARS[31 + (v / 34)] + ENCODE_CHARS[v % 34];
447445
}

src/test/java/com/mapcode/AlphabetTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,18 @@ public void testConvertToAlphabet() throws Exception {
3636
convertCodeInAlphabet("\u0397\u03a0.\u03982-\u03a62", Territory.GRC, Alphabet.GREEK, 2);
3737
convertCodeInAlphabet("GRC \u0397\u03a0.\u03982-\u03a62", Territory.GRC, Alphabet.GREEK, 2);
3838

39-
final String code = "26.53UK";
40-
final String codeGreek = Mapcode.convertStringToAlphabet(code, Alphabet.GREEK);
41-
final String codeAscii = Mapcode.convertStringToPlainAscii(codeGreek);
39+
String code = "26.53UK";
40+
String codeGreek = Mapcode.convertStringToAlphabet(code, Alphabet.GREEK);
41+
String codeAscii = Mapcode.convertStringToPlainAscii(codeGreek);
4242
LOG.info("code = {}, codeGreek = {}, codeAscii = {}", code, codeGreek, codeAscii);
4343
assertEquals(code, codeAscii);
44+
45+
code = "000.EU";
46+
codeGreek = Mapcode.convertStringToAlphabet(code, Alphabet.GREEK);
47+
codeAscii = Mapcode.convertStringToPlainAscii(codeGreek);
48+
LOG.info("code = {}, codeGreek = {}, codeAscii = {}", code, codeGreek, codeAscii);
49+
assertEquals(codeGreek, "\u0391\u0030\u0030.23");
50+
assertEquals(code, codeAscii);
4451
}
4552

4653
@Test

src/test/java/com/mapcode/EncoderTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,10 +226,10 @@ public void encodeToShortest4() throws Exception {
226226
@Test
227227
public void legalArguments() {
228228
LOG.info("legalArguments");
229-
MapcodeCodec.encode(-90, 0);
230-
MapcodeCodec.encode(90, 0);
231-
MapcodeCodec.encode(0, -180);
232-
MapcodeCodec.encode(0, 180);
229+
assertEquals(MapcodeCodec.encode(-90, 0).size(), 2); // ATA and AAA
230+
assertEquals(MapcodeCodec.encode(-60, 0).size(), 2); // ATA and AAA
231+
assertEquals(MapcodeCodec.encode(90, 0).size(), 1); // AAA only
232+
assertEquals(MapcodeCodec.encode(0, -180),MapcodeCodec.encode(0, 180));
233233
assertEquals(MapcodeCodec.encode(-91, 0), MapcodeCodec.encode(-90, 0));
234234
assertEquals(MapcodeCodec.encode(91, 0), MapcodeCodec.encode(90, 0));
235235
assertEquals(MapcodeCodec.encode(0, -181), MapcodeCodec.encode(0, 179));

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

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,26 @@ public class MapcodeTest {
3030
public void checkValidPrecisionFormats() {
3131
LOG.info("checkValidPrecisionFormats");
3232

33-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("A1.B1"));
34-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("a1.B1"));
33+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("P1.B1"));
34+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("p1.B1"));
3535
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("00.01"));
36-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AAA.01"));
37-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AAA.BBB"));
38-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AAAA.BBB"));
39-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AAAA.BBBB"));
40-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AAAAA.BBBB"));
41-
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("AA.AA-0"));
42-
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("AA.AA-01"));
43-
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("AA.AA-A"));
44-
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("AA.AA-AA"));
45-
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("AA.AA-Y"));
46-
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("AA.AA-1Y"));
47-
assertEquals(PrecisionFormat.PRECISION_3, Mapcode.getPrecisionFormat("AA.AA-321"));
48-
assertEquals(PrecisionFormat.PRECISION_4, Mapcode.getPrecisionFormat("AA.AA-21PQ"));
49-
assertEquals(PrecisionFormat.PRECISION_5, Mapcode.getPrecisionFormat("AA.AA-321PQ"));
50-
assertEquals(PrecisionFormat.PRECISION_6, Mapcode.getPrecisionFormat("AA.AA-321PQR"));
51-
assertEquals(PrecisionFormat.PRECISION_7, Mapcode.getPrecisionFormat("AA.AA-4321PRS"));
52-
assertEquals(PrecisionFormat.PRECISION_8, Mapcode.getPrecisionFormat("AA.AA-4321PQRS"));
36+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PPP.01"));
37+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PPP.BBB"));
38+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PPPP.BBB"));
39+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PPPP.BBBB"));
40+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PPPPP.BBBB"));
41+
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("PP.PP-0"));
42+
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("PP.PP-01"));
43+
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("PP.PP-P"));
44+
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("PP.PP-PP"));
45+
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("PP.PP-Y"));
46+
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("PP.PP-1Y"));
47+
assertEquals(PrecisionFormat.PRECISION_3, Mapcode.getPrecisionFormat("PP.PP-321"));
48+
assertEquals(PrecisionFormat.PRECISION_4, Mapcode.getPrecisionFormat("PP.PP-21PQ"));
49+
assertEquals(PrecisionFormat.PRECISION_5, Mapcode.getPrecisionFormat("PP.PP-321PQ"));
50+
assertEquals(PrecisionFormat.PRECISION_6, Mapcode.getPrecisionFormat("PP.PP-321PQR"));
51+
assertEquals(PrecisionFormat.PRECISION_7, Mapcode.getPrecisionFormat("PP.PP-4321PRS"));
52+
assertEquals(PrecisionFormat.PRECISION_8, Mapcode.getPrecisionFormat("PP.PP-4321PQRS"));
5353

5454
// Mapcode may contain correctly formatted (possible incorrect) territory code.
5555
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("NLD XX.XX"));
@@ -69,13 +69,13 @@ public void checkInvalidPrecisionFormats() {
6969
assertFalse(Mapcode.isValidMapcodeFormat("US IN XX.XX"));
7070

7171
// Incorrect (nunber of) characters.
72-
assertFalse(Mapcode.isValidMapcodeFormat("A"));
73-
assertFalse(Mapcode.isValidMapcodeFormat("AB"));
74-
assertFalse(Mapcode.isValidMapcodeFormat("AB."));
75-
assertFalse(Mapcode.isValidMapcodeFormat(".A"));
76-
assertFalse(Mapcode.isValidMapcodeFormat(".AB"));
77-
assertFalse(Mapcode.isValidMapcodeFormat("A.B"));
78-
assertFalse(Mapcode.isValidMapcodeFormat("a.B"));
72+
assertFalse(Mapcode.isValidMapcodeFormat("P"));
73+
assertFalse(Mapcode.isValidMapcodeFormat("PQ"));
74+
assertFalse(Mapcode.isValidMapcodeFormat("PQ."));
75+
assertFalse(Mapcode.isValidMapcodeFormat(".P"));
76+
assertFalse(Mapcode.isValidMapcodeFormat(".PQ"));
77+
assertFalse(Mapcode.isValidMapcodeFormat("P.Q"));
78+
assertFalse(Mapcode.isValidMapcodeFormat("p.Q"));
7979
assertFalse(Mapcode.isValidMapcodeFormat("0.1"));
8080
assertFalse(Mapcode.isValidMapcodeFormat("0.1"));
8181
assertFalse(Mapcode.isValidMapcodeFormat("00.1"));
@@ -85,38 +85,38 @@ public void checkInvalidPrecisionFormats() {
8585
assertFalse(Mapcode.isValidMapcodeFormat("00.01.00"));
8686
assertFalse(Mapcode.isValidMapcodeFormat("00.01-"));
8787
assertFalse(Mapcode.isValidMapcodeFormat("00.01-"));
88-
assertFalse(Mapcode.isValidMapcodeFormat("AAAAAA.BBBB"));
89-
assertFalse(Mapcode.isValidMapcodeFormat("AAAAA.BBBBB"));
90-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-Z"));
91-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-1Z"));
92-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-12Z"));
93-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-123Z"));
94-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-1234Z"));
95-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-12345Z"));
96-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-123456Z"));
97-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-1234567Z"));
98-
assertFalse(Mapcode.isValidMapcodeFormat("AA.AA-123456789")); // more than 8 eAtension characters!
99-
assertFalse(Mapcode.isValidMapcodeFormat("A.AAA"));
100-
assertFalse(Mapcode.isValidMapcodeFormat("AAA.A"));
101-
assertFalse(Mapcode.isValidMapcodeFormat("A.AAA-1"));
102-
assertFalse(Mapcode.isValidMapcodeFormat("AAA.A-1"));
103-
assertFalse(Mapcode.isValidMapcodeFormat("A.AAA-12"));
104-
assertFalse(Mapcode.isValidMapcodeFormat("AAA.A-12"));
88+
assertFalse(Mapcode.isValidMapcodeFormat("PPPPPP.QQQQ"));
89+
assertFalse(Mapcode.isValidMapcodeFormat("PPPPP.QQQQQ"));
90+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-Z"));
91+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-1Z"));
92+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-12Z"));
93+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-123Z"));
94+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-1234Z"));
95+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-12345Z"));
96+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-123456Z"));
97+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-1234567Z"));
98+
assertFalse(Mapcode.isValidMapcodeFormat("PP.PP-123456789")); // more than 8 ePtension characters!
99+
assertFalse(Mapcode.isValidMapcodeFormat("P.PPP"));
100+
assertFalse(Mapcode.isValidMapcodeFormat("PPP.P"));
101+
assertFalse(Mapcode.isValidMapcodeFormat("P.PPP-1"));
102+
assertFalse(Mapcode.isValidMapcodeFormat("PPP.P-1"));
103+
assertFalse(Mapcode.isValidMapcodeFormat("P.PPP-12"));
104+
assertFalse(Mapcode.isValidMapcodeFormat("PPP.P-12"));
105105
}
106106

107107
@Test
108108
public void checkPrecisionFormat1() {
109109
LOG.info("checkPrecisionFormat1");
110110

111-
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("AA.BB"));
112-
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("AA.BB-1"));
113-
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("AA.BB-12"));
114-
assertEquals(PrecisionFormat.PRECISION_3, Mapcode.getPrecisionFormat("AA.BB-123"));
115-
assertEquals(PrecisionFormat.PRECISION_4, Mapcode.getPrecisionFormat("AA.BB-1234"));
116-
assertEquals(PrecisionFormat.PRECISION_5, Mapcode.getPrecisionFormat("AA.BB-12345"));
117-
assertEquals(PrecisionFormat.PRECISION_6, Mapcode.getPrecisionFormat("AA.BB-123456"));
118-
assertEquals(PrecisionFormat.PRECISION_7, Mapcode.getPrecisionFormat("AA.BB-1234567"));
119-
assertEquals(PrecisionFormat.PRECISION_8, Mapcode.getPrecisionFormat("AA.BB-12345678"));
111+
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("PP.QQ"));
112+
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("PP.QQ-1"));
113+
assertEquals(PrecisionFormat.PRECISION_2, Mapcode.getPrecisionFormat("PP.QQ-12"));
114+
assertEquals(PrecisionFormat.PRECISION_3, Mapcode.getPrecisionFormat("PP.QQ-123"));
115+
assertEquals(PrecisionFormat.PRECISION_4, Mapcode.getPrecisionFormat("PP.QQ-1234"));
116+
assertEquals(PrecisionFormat.PRECISION_5, Mapcode.getPrecisionFormat("PP.QQ-12345"));
117+
assertEquals(PrecisionFormat.PRECISION_6, Mapcode.getPrecisionFormat("PP.QQ-123456"));
118+
assertEquals(PrecisionFormat.PRECISION_7, Mapcode.getPrecisionFormat("PP.QQ-1234567"));
119+
assertEquals(PrecisionFormat.PRECISION_8, Mapcode.getPrecisionFormat("PP.QQ-12345678"));
120120

121121
assertEquals(PrecisionFormat.PRECISION_0, Mapcode.getPrecisionFormat("\u0e9a\u0e97\u0e84 \u0eab\u0ea7\u0e84.\u0ea73\u0eaa"));
122122
assertEquals(PrecisionFormat.PRECISION_1, Mapcode.getPrecisionFormat("\u0f40\u0f64\u0f4c \u0f535\u0f41\u0f42.5\u0f629-\u0f40"));

0 commit comments

Comments
 (0)