2222#include "mapcoder.h"
2323#include "internal_data.h"
2424#include "internal_iso3166_data.h"
25+ #include "internal_territory_names_english.h"
2526
2627#ifndef NO_SUPPORT_ALPHABETS
2728
29+ #include "internal_territory_alphabets.h"
2830#include "internal_territory_names_local.h"
31+ #include "internal_alphabet_recognizer.h"
2932
3033#endif
3134
@@ -1915,7 +1918,6 @@ static UWORD asc2lan[_ALPHABET_MAX][36] = { // A-Z equivalents for ascii charact
19151918//
19161919///////////////////////////////////////////////////////////////////////////////////////////////
19171920
1918- #include "internal_alphabet_recognizer.h"
19191921
19201922// Returns romanised version of character, or question mark in not recognized
19211923static char getRomanVersionOf (UWORD w ) {
@@ -2391,25 +2393,27 @@ static int fullmc_statemachine[24][6] = {
23912393 // 7 prefix.L === get 2nd postfix! det: prefix.LL | vowel: prefix.LA
23922394 {ERR_INVALID_MAPCODE_FORMAT , ERR_UNEXPECTED_DOT , 8 , 9 , ERR_MAPCODE_INCOMPLETE , ERR_UNEXPECTED_HYPHEN },
23932395 // 8 prefix.LL === get 3d postfix! white:trail | det: prefix.LLL | vowel: prefix.LLA | zero:done | hyphen: mc-
2394- {22 | 128 , ERR_UNEXPECTED_DOT , 9 , 9 , STATE_GO |
2395- 128 ,
2396- 11 |
2397- 256 },
2396+ {22 | 128 , ERR_UNEXPECTED_DOT , 9 , 9 , STATE_GO |
2397+ 128 ,
2398+ 11 |
2399+ 256 },
23982400 // 9 prefix.LLL or prefix.[L[L]]A === white:trail | det/vow:full mc | zero:done | hyphen:mc-
23992401 {22 |
2400- 128 , ERR_UNEXPECTED_DOT , 10 , 10 , STATE_GO |
2401- 128 , 11 |
2402- 256 },
2402+ 128 , ERR_UNEXPECTED_DOT , 10 , 10 , STATE_GO |
2403+ 128 , 11 |
2404+ 256 },
24032405 //10 prefix.LLLL or prefix.AL or prefix.LAL === white:trail | zero:done | hyphen:mc-
24042406 {22 |
2405- 128 , ERR_UNEXPECTED_DOT , ERR_INVALID_MAPCODE_FORMAT , ERR_INVALID_VOWEL , STATE_GO |
2406- 128 , 11 |
2407- 256 },
2407+ 128 , ERR_UNEXPECTED_DOT , ERR_INVALID_MAPCODE_FORMAT , ERR_INVALID_VOWEL , STATE_GO |
2408+ 128 , 11 |
2409+ 256 },
24082410
24092411 //11 mc- === MUST get first precision detter
24102412 {ERR_EXTENSION_INVALID_LENGTH , ERR_UNEXPECTED_DOT , 12 , ERR_EXTENSION_INVALID_CHARACTER , ERR_MAPCODE_INCOMPLETE , ERR_UNEXPECTED_HYPHEN },
24112413 //12 mc-L* === Keep reading precision detters | white=trail | zero=done
2412- {22 | 512 , ERR_UNEXPECTED_DOT , 12 | 32 , ERR_EXTENSION_INVALID_CHARACTER , STATE_GO | 512 , ERR_UNEXPECTED_HYPHEN },
2414+ {22 | 512 , ERR_UNEXPECTED_DOT , 12 | 32 , ERR_EXTENSION_INVALID_CHARACTER ,
2415+ STATE_GO |
2416+ 512 , ERR_UNEXPECTED_HYPHEN },
24132417
24142418 //13 TA === white:waitprefix | det: TAT | vowel:TAA | hyphen:TC-
24152419 {18 |
@@ -2436,7 +2440,7 @@ static int fullmc_statemachine[24][6] = {
24362440 {ERR_DOT_MISSING , 6 , 4 , ERR_INVALID_VOWEL , ERR_DOT_MISSING , ERR_UNEXPECTED_HYPHEN },
24372441
24382442 //22 trailing === skip whitespace until end of string
2439- {22 , ERR_UNEXPECTED_DOT , ERR_TRAILING_CHARACTERS , ERR_TRAILING_CHARACTERS , STATE_GO , ERR_UNEXPECTED_HYPHEN },
2443+ {22 , ERR_UNEXPECTED_DOT , ERR_TRAILING_CHARACTERS , ERR_TRAILING_CHARACTERS , STATE_GO , ERR_UNEXPECTED_HYPHEN },
24402444
24412445 //23 TTA/TAT/TAA === space:TC waitprefix | hyphen:TC-
24422446 {18 |
@@ -2450,7 +2454,7 @@ enum MapcodeError parseMapcodeString(MapcodeElements *mapcodeElements, const cha
24502454 enum Territory territory ) {
24512455 const char * a = asciiString ;
24522456 int extensionLength = 0 ;
2453- char * cleanPtr = 0 ;
2457+ char * cleanPtr = NULL ;
24542458 int nondigits = 0 , vowels = 0 ;
24552459 int state = (containsTerritory ? 0 : 18 ); // initial state
24562460 ASSERT (asciiString );
@@ -2726,11 +2730,10 @@ enum Territory getTerritoryCode(const char *territoryISO, enum Territory optiona
27262730}
27272731
27282732// PUBLIC - decode string into lat,lon; returns negative in case of error
2729- enum MapcodeError decodeMapcodeToLatLon (
2730- double * latDeg ,
2731- double * lonDeg ,
2732- const char * mapcode ,
2733- enum Territory territory ) {
2733+ enum MapcodeError decodeMapcodeToLatLon (double * latDeg ,
2734+ double * lonDeg ,
2735+ const char * mapcode ,
2736+ enum Territory territory ) {
27342737 if ((latDeg == NULL ) || (lonDeg == NULL ) || (mapcode == NULL )) {
27352738 return ERR_BAD_ARGUMENTS ;
27362739 } else {
@@ -2805,7 +2808,6 @@ encodeLatLonToMapcodes(Mapcodes *mapcodes, double latDeg, double lonDeg, enum Te
28052808//
28062809///////////////////////////////////////////////////////////////////////////////////////////////
28072810
2808- #include "internal_territory_alphabets.h"
28092811
28102812// PUBLIC - returns most common alphabets for territory, NULL if error
28112813const TerritoryAlphabets * getAlphabetsForTerritory (enum Territory territory ) {
@@ -2945,60 +2947,57 @@ enum Alphabet recognizeAlphabetUtf8(const char *utf8) {
29452947//
29462948///////////////////////////////////////////////////////////////////////////////////////////////
29472949
2948- #include "internal_territory_names_english.h"
29492950
2950- static int getFullTerritoryName_internal (char * territoryName , enum Territory territory , int alternative , int alphabet , const char * namelist []) {
2951- int nrNames = 0 ;
2952- if (territoryName && namelist && alternative >= 0 && _TERRITORY_MIN < territory && territory < _TERRITORY_MAX ) {
2953- const char * s = namelist [INDEX_OF_TERRITORY (territory )];
2954- const char * pipePtr ;
2955- int i ;
2951+ static int getFullTerritoryName_internal (
2952+ char * territoryName ,
2953+ enum Territory territory ,
2954+ int alternative , int alphabet ,
2955+ const char * namelist []) {
29562956
2957- // Count number of alternatives to return.
2958- for ( i = ( int ) strlen ( s ) - 1 ; i >= 0 ; -- i ) {
2959- if ( s [ i ] == '|' ) {
2960- ++ nrNames ;
2961- }
2962- }
2963- for (;;) {
2964- pipePtr = strstr (s , "|" );
2957+ if (! territoryName || ! namelist || alternative < 0 ||
2958+ territory <= _TERRITORY_MIN || territory >= _TERRITORY_MAX ) {
2959+ return 0 ;
2960+ }
2961+ const char * s = namelist [ INDEX_OF_TERRITORY ( territory )];
2962+ const char * pipePtr ;
2963+ for (;;) {
2964+ pipePtr = strstr (s , "|" );
29652965
29662966#ifndef NO_SUPPORT_ALPHABETS
2967- if (alphabet > _ALPHABET_MIN ) {
2968- if (pipePtr ) {
2969- lengthCopy (territoryName , s , (int ) (pipePtr - s ), MAX_TERRITORY_FULLNAME_LENGTH );
2970- } else {
2971- ASSERT (strlen (s ) <= MAX_TERRITORY_FULLNAME_LENGTH );
2972- strcpy (territoryName , s );
2973- }
2974- if ((enum Alphabet ) alphabet != recognizeAlphabetUtf8 (territoryName )) { // filter out
2975- if (!pipePtr ) { // this is the last string!
2976- break ;
2977- }
2978- s = pipePtr + 1 ;
2979- continue ;
2967+ if (alphabet >= 0 ) {
2968+ if (pipePtr ) {
2969+ lengthCopy (territoryName , s , (int ) (pipePtr - s ), MAX_TERRITORY_FULLNAME_LEN );
2970+ } else {
2971+ ASSERT (strlen (s ) <= MAX_TERRITORY_FULLNAME_LEN );
2972+ strcpy (territoryName , s );
2973+ }
2974+ if ((enum Alphabet ) alphabet != recognizeAlphabetUtf8 (territoryName )) { // filter out
2975+ if (!pipePtr ) { // this is the last string!
2976+ return 0 ;
29802977 }
2978+ s = pipePtr + 1 ;
2979+ continue ;
29812980 }
2981+ }
29822982#endif
29832983
2984- if (!pipePtr ) { // this is the last string!
2985- if (alternative ) { // not what we want?
2986- break ;
2987- }
2988- ASSERT (strlen (s ) <= MAX_TERRITORY_FULLNAME_LENGTH );
2989- strcpy (territoryName , s ); // no bracket, return it all
2984+ if (!pipePtr ) { // this is the last string!
2985+ if (alternative ) { // not what we want?
2986+ return 0 ;
2987+ }
2988+ ASSERT (strlen (s ) <= MAX_TERRITORY_FULLNAME_LEN );
2989+ strcpy (territoryName , s ); // no bracket, return it all
2990+ return 1 ;
2991+ } else {
2992+ if (!alternative ) { // what we want?
29902993 break ;
2991- } else {
2992- if (!alternative ) { // what we want?
2993- break ;
2994- }
2995- alternative -- ;
2996- s = pipePtr + 2 ;
29972994 }
2995+ alternative -- ;
2996+ s = pipePtr + 2 ;
29982997 }
2999- lengthCopy (territoryName , s , (int ) (pipePtr - s ), MAX_TERRITORY_FULLNAME_LENGTH );
30002998 }
3001- return nrNames ;
2999+ lengthCopy (territoryName , s , (int ) (pipePtr - s ), MAX_TERRITORY_FULLNAME_LEN );
3000+ return 1 ;
30023001}
30033002
30043003int getFullTerritoryNameEnglish (char * territoryName , enum Territory territory , int alternative ) {
@@ -3007,7 +3006,6 @@ int getFullTerritoryNameEnglish(char *territoryName, enum Territory territory, i
30073006
30083007#ifndef NO_SUPPORT_ALPHABETS
30093008
3010-
30113009int getFullTerritoryNameLocal (char * territoryName , enum Territory territory , int alternative , enum Alphabet alphabet ) {
30123010 return getFullTerritoryName_internal (territoryName , territory , alternative , (int ) alphabet , localname_utf8 );
30133011}
0 commit comments