Merge commit '7621e2f8dec938cf48181c8b10afc9b01f444e68' into beta

This commit is contained in:
Ilya Laktyushin
2025-12-06 02:17:48 +04:00
commit 8344b97e03
28070 changed files with 7995182 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
objc_library(
name = "libphonenumber",
enable_modules = True,
module_name = "libphonenumber",
srcs = glob([
"Sources/*.m",
"Sources/*.h",
]),
hdrs = glob([
"PublicHeaders/**/*.h",
]),
includes = [
"PublicHeaders",
],
sdk_frameworks = [
"Foundation",
],
copts = [
"-Werror",
],
visibility = [
"//visibility:public",
],
)
+32
View File
@@ -0,0 +1,32 @@
// swift-tools-version:5.5
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "libphonenumber",
platforms: [.macOS(.v10_13)],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "libphonenumber",
targets: ["libphonenumber"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "libphonenumber",
dependencies: [],
path: ".",
exclude: ["BUILD"],
publicHeadersPath: "PublicHeaders",
cSettings: [
.headerSearchPath("PublicHeaders")
]),
]
)
@@ -0,0 +1,38 @@
//
// NBAsYouTypeFormatter.h
// libPhoneNumber
//
// Created by ishtar on 13. 2. 25..
//
#import <Foundation/Foundation.h>
@class NBAsYouTypeFormatter;
@interface NBAsYouTypeFormatter : NSObject
- (id)initWithRegionCode:(NSString *)regionCode;
- (id)initWithRegionCodeForTest:(NSString *)regionCode;
- (id)initWithRegionCode:(NSString *)regionCode bundle:(NSBundle *)bundle;
- (id)initWithRegionCodeForTest:(NSString *)regionCode bundle:(NSBundle *)bundle;
- (NSString *)inputString:(NSString *)string;
- (NSString *)inputStringAndRememberPosition:(NSString *)string;
- (NSString *)inputDigit:(NSString*)nextChar;
- (NSString *)inputDigitAndRememberPosition:(NSString*)nextChar;
- (NSString *)removeLastDigit;
- (NSString *)removeLastDigitAndRememberPosition;
- (NSInteger)getRememberedPosition;
- (void)clear;
@property (nonatomic, assign, readonly) BOOL isSuccessfulFormatting;
@property (nonatomic, strong, readonly) NSString *regionPrefix;
@end
@@ -0,0 +1,25 @@
//
// NBPhoneNumber.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
#import <libphonenumber/NBPhoneNumberDefines.h>
@interface NBPhoneNumber : NSObject <NSCopying, NSCoding>
// from phonemetadata.pb.js
/* 1 */ @property (nonatomic, strong, readwrite) NSNumber *countryCode;
/* 2 */ @property (nonatomic, strong, readwrite) NSNumber *nationalNumber;
/* 3 */ @property (nonatomic, strong, readwrite) NSString *extension;
/* 4 */ @property (nonatomic, assign, readwrite) BOOL italianLeadingZero;
/* 5 */ @property (nonatomic, strong, readwrite) NSString *rawInput;
/* 6 */ @property (nonatomic, strong, readwrite) NSNumber *countryCodeSource;
/* 7 */ @property (nonatomic, strong, readwrite) NSString *preferredDomesticCarrierCode;
- (void)clearCountryCodeSource;
- (NBECountryCodeSource)getCountryCodeSourceOrDefault;
@end
@@ -0,0 +1,88 @@
//
// NBPhoneNumberDefines.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
#ifndef libPhoneNumber_NBPhoneNumberDefines_h
#define libPhoneNumber_NBPhoneNumberDefines_h
#define NB_YES [NSNumber numberWithBool:YES]
#define NB_NO [NSNumber numberWithBool:NO]
#pragma mark - Enum -
typedef NS_ENUM(NSInteger, NBEPhoneNumberFormat) {
NBEPhoneNumberFormatE164 = 0,
NBEPhoneNumberFormatINTERNATIONAL = 1,
NBEPhoneNumberFormatNATIONAL = 2,
NBEPhoneNumberFormatRFC3966 = 3
};
typedef NS_ENUM(NSInteger, NBEPhoneNumberType) {
NBEPhoneNumberTypeFIXED_LINE = 0,
NBEPhoneNumberTypeMOBILE = 1,
// In some regions (e.g. the USA), it is impossible to distinguish between
// fixed-line and mobile numbers by looking at the phone number itself.
NBEPhoneNumberTypeFIXED_LINE_OR_MOBILE = 2,
// Freephone lines
NBEPhoneNumberTypeTOLL_FREE = 3,
NBEPhoneNumberTypePREMIUM_RATE = 4,
// The cost of this call is shared between the caller and the recipient, and
// is hence typically less than PREMIUM_RATE calls. See
// http://en.wikipedia.org/wiki/Shared_Cost_Service for more information.
NBEPhoneNumberTypeSHARED_COST = 5,
// Voice over IP numbers. This includes TSoIP (Telephony Service over IP).
NBEPhoneNumberTypeVOIP = 6,
// A personal number is associated with a particular person, and may be routed
// to either a MOBILE or FIXED_LINE number. Some more information can be found
// here = http://en.wikipedia.org/wiki/Personal_Numbers
NBEPhoneNumberTypePERSONAL_NUMBER = 7,
NBEPhoneNumberTypePAGER = 8,
// Used for 'Universal Access Numbers' or 'Company Numbers'. They may be
// further routed to specific offices, but allow one number to be used for a
// company.
NBEPhoneNumberTypeUAN = 9,
// Used for 'Voice Mail Access Numbers'.
NBEPhoneNumberTypeVOICEMAIL = 10,
// A phone number is of type UNKNOWN when it does not fit any of the known
// patterns for a specific region.
NBEPhoneNumberTypeUNKNOWN = -1
};
typedef NS_ENUM(NSInteger, NBEMatchType) {
NBEMatchTypeNOT_A_NUMBER = 0,
NBEMatchTypeNO_MATCH = 1,
NBEMatchTypeSHORT_NSN_MATCH = 2,
NBEMatchTypeNSN_MATCH = 3,
NBEMatchTypeEXACT_MATCH = 4
};
typedef NS_ENUM(NSInteger, NBEValidationResult) {
NBEValidationResultUNKNOWN = 0,
NBEValidationResultIS_POSSIBLE = 1,
NBEValidationResultINVALID_COUNTRY_CODE = 2,
NBEValidationResultTOO_SHORT = 3,
NBEValidationResultTOO_LONG = 4
};
typedef NS_ENUM(NSInteger, NBECountryCodeSource) {
NBECountryCodeSourceFROM_NUMBER_WITH_PLUS_SIGN = 1,
NBECountryCodeSourceFROM_NUMBER_WITH_IDD = 5,
NBECountryCodeSourceFROM_NUMBER_WITHOUT_PLUS_SIGN = 10,
NBECountryCodeSourceFROM_DEFAULT_COUNTRY = 20
};
extern NSString * const NB_UNKNOWN_REGION;
extern NSString * const NB_NON_BREAKING_SPACE;
extern NSString * const NB_PLUS_CHARS;
extern NSString * const NB_VALID_DIGITS_STRING;
extern NSString * const NB_REGION_CODE_FOR_NON_GEO_ENTITY;
#endif
@@ -0,0 +1,103 @@
//
// NBPhoneNumberUtil.h
// libPhoneNumber
//
// Created by tabby on 2015. 2. 8..
// Copyright (c) 2015년 ohtalk.me. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <libphonenumber/NBPhoneNumberDefines.h>
@class NBPhoneMetaData, NBPhoneNumber;
@interface NBPhoneNumberUtil : NSObject
+ (NBPhoneNumberUtil*)sharedInstance;
// regular expressions
- (NSArray*)matchesByRegex:(NSString*)sourceString regex:(NSString*)pattern;
- (NSArray*)matchedStringByRegex:(NSString*)sourceString regex:(NSString*)pattern;
- (NSString*)replaceStringByRegex:(NSString*)sourceString regex:(NSString*)pattern withTemplate:(NSString*)templateString;
- (int)stringPositionByRegex:(NSString*)sourceString regex:(NSString*)pattern;
// libPhoneNumber Util functions
- (NSString*)convertAlphaCharactersInNumber:(NSString*)number;
- (NSString*)normalizePhoneNumber:(NSString*)phoneNumber;
- (NSString*)normalizeDigitsOnly:(NSString*)number;
- (BOOL)isNumberGeographical:(NBPhoneNumber*)phoneNumber;
- (NSString*)extractPossibleNumber:(NSString*)phoneNumber;
- (NSNumber*)extractCountryCode:(NSString*)fullNumber nationalNumber:(NSString**)nationalNumber;
#if TARGET_OS_IPHONE && !TARGET_OS_WATCH
- (NSString *)countryCodeByCarrier;
#endif
- (NSString*)getNddPrefixForRegion:(NSString*)regionCode stripNonDigits:(BOOL)stripNonDigits;
- (NSString*)getNationalSignificantNumber:(NBPhoneNumber*)phoneNumber;
- (NSArray *)getSupportedRegions;
- (NBEPhoneNumberType)getNumberType:(NBPhoneNumber*)phoneNumber;
- (NSNumber*)getCountryCodeForRegion:(NSString*)regionCode;
- (NSString*)getRegionCodeForCountryCode:(NSNumber*)countryCallingCode;
- (NSArray*)getRegionCodesForCountryCode:(NSNumber*)countryCallingCode;
- (NSString*)getRegionCodeForNumber:(NBPhoneNumber*)phoneNumber;
- (NBPhoneNumber*)getExampleNumber:(NSString*)regionCode error:(NSError**)error;
- (NBPhoneNumber*)getExampleNumberForType:(NSString*)regionCode type:(NBEPhoneNumberType)type error:(NSError**)error;
- (NBPhoneNumber*)getExampleNumberForNonGeoEntity:(NSNumber*)countryCallingCode error:(NSError**)error;
- (BOOL)canBeInternationallyDialled:(NBPhoneNumber*)number error:(NSError**)error;
- (BOOL)truncateTooLongNumber:(NBPhoneNumber*)number;
- (BOOL)isValidNumber:(NBPhoneNumber*)number;
- (BOOL)isViablePhoneNumber:(NSString*)phoneNumber;
- (BOOL)isAlphaNumber:(NSString*)number;
- (BOOL)isValidNumberForRegion:(NBPhoneNumber*)number regionCode:(NSString*)regionCode;
- (BOOL)isNANPACountry:(NSString*)regionCode;
- (BOOL)isLeadingZeroPossible:(NSNumber*)countryCallingCode;
- (NBEValidationResult)isPossibleNumberWithReason:(NBPhoneNumber*)number error:(NSError**)error;
- (BOOL)isPossibleNumber:(NBPhoneNumber*)number;
- (BOOL)isPossibleNumber:(NBPhoneNumber*)number error:(NSError**)error;
- (BOOL)isPossibleNumberString:(NSString*)number regionDialingFrom:(NSString*)regionDialingFrom error:(NSError**)error;
- (NBEMatchType)isNumberMatch:(id)firstNumberIn second:(id)secondNumberIn error:(NSError**)error;
- (int)getLengthOfGeographicalAreaCode:(NBPhoneNumber*)phoneNumber error:(NSError**)error;
- (int)getLengthOfNationalDestinationCode:(NBPhoneNumber*)phoneNumber error:(NSError**)error;
- (BOOL)maybeStripNationalPrefixAndCarrierCode:(NSString**)numberStr metadata:(NBPhoneMetaData*)metadata carrierCode:(NSString**)carrierCode;
- (NBECountryCodeSource)maybeStripInternationalPrefixAndNormalize:(NSString**)numberStr possibleIddPrefix:(NSString*)possibleIddPrefix;
- (NSNumber*)maybeExtractCountryCode:(NSString*)number metadata:(NBPhoneMetaData*)defaultRegionMetadata
nationalNumber:(NSString**)nationalNumber keepRawInput:(BOOL)keepRawInput
phoneNumber:(NBPhoneNumber**)phoneNumber error:(NSError**)error;
- (NBPhoneNumber*)parse:(NSString*)numberToParse defaultRegion:(NSString*)defaultRegion error:(NSError**)error;
- (NBPhoneNumber*)parseAndKeepRawInput:(NSString*)numberToParse defaultRegion:(NSString*)defaultRegion error:(NSError**)error;
- (NBPhoneNumber*)parseWithPhoneCarrierRegion:(NSString*)numberToParse error:(NSError**)error;
- (NSString*)format:(NBPhoneNumber*)phoneNumber numberFormat:(NBEPhoneNumberFormat)numberFormat error:(NSError**)error;
- (NSString*)formatByPattern:(NBPhoneNumber*)number numberFormat:(NBEPhoneNumberFormat)numberFormat userDefinedFormats:(NSArray*)userDefinedFormats error:(NSError**)error;
- (NSString*)formatNumberForMobileDialing:(NBPhoneNumber*)number regionCallingFrom:(NSString*)regionCallingFrom withFormatting:(BOOL)withFormatting error:(NSError**)error;
- (NSString*)formatOutOfCountryCallingNumber:(NBPhoneNumber*)number regionCallingFrom:(NSString*)regionCallingFrom error:(NSError**)error;
- (NSString*)formatOutOfCountryKeepingAlphaChars:(NBPhoneNumber*)number regionCallingFrom:(NSString*)regionCallingFrom error:(NSError**)error;
- (NSString*)formatNationalNumberWithCarrierCode:(NBPhoneNumber*)number carrierCode:(NSString*)carrierCode error:(NSError**)error;
- (NSString*)formatInOriginalFormat:(NBPhoneNumber*)number regionCallingFrom:(NSString*)regionCallingFrom error:(NSError**)error;
- (NSString*)formatNationalNumberWithPreferredCarrierCode:(NBPhoneNumber*)number fallbackCarrierCode:(NSString*)fallbackCarrierCode error:(NSError**)error;
- (BOOL)formattingRuleHasFirstGroupOnly:(NSString*)nationalPrefixFormattingRule;
@property (nonatomic, strong, readonly) NSDictionary *DIGIT_MAPPINGS;
@property (nonatomic, strong, readonly) NSBundle *libPhoneBundle;
@end
@@ -0,0 +1,15 @@
#if TARGET_OS_IOS
#import <UIKit/UIKit.h>
#else
#import <AppKit/AppKit.h>
#endif
//! Project version number for libphonenumber_iOS.
FOUNDATION_EXPORT double libphonenumber_iOSVersionNumber;
//! Project version string for libphonenumber_iOS.
FOUNDATION_EXPORT const unsigned char libphonenumber_iOSVersionString[];
#import <libphonenumber/NBPhoneNumberDefines.h>
#import <libphonenumber/NBPhoneNumber.h>
#import <libphonenumber/NBPhoneNumberUtil.h>
#import <libphonenumber/NBAsYouTypeFormatter.h>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,764 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import <Foundation/Foundation.h>
#import "NBPhoneMetaData.h"
@interface NBPhoneMetadataIM : NBPhoneMetaData
@end
@interface NBPhoneMetadataHR : NBPhoneMetaData
@end
@interface NBPhoneMetadataGW : NBPhoneMetaData
@end
@interface NBPhoneMetadataIN : NBPhoneMetaData
@end
@interface NBPhoneMetadataKE : NBPhoneMetaData
@end
@interface NBPhoneMetadataLA : NBPhoneMetaData
@end
@interface NBPhoneMetadataIO : NBPhoneMetaData
@end
@interface NBPhoneMetadataHT : NBPhoneMetaData
@end
@interface NBPhoneMetadataGY : NBPhoneMetaData
@end
@interface NBPhoneMetadataLB : NBPhoneMetaData
@end
@interface NBPhoneMetadataKG : NBPhoneMetaData
@end
@interface NBPhoneMetadataHU : NBPhoneMetaData
@end
@interface NBPhoneMetadataLC : NBPhoneMetaData
@end
@interface NBPhoneMetadataIQ : NBPhoneMetaData
@end
@interface NBPhoneMetadataKH : NBPhoneMetaData
@end
@interface NBPhoneMetadataJM : NBPhoneMetaData
@end
@interface NBPhoneMetadataIR : NBPhoneMetaData
@end
@interface NBPhoneMetadataKI : NBPhoneMetaData
@end
@interface NBPhoneMetadataIS : NBPhoneMetaData
@end
@interface NBPhoneMetadataMA : NBPhoneMetaData
@end
@interface NBPhoneMetadataJO : NBPhoneMetaData
@end
@interface NBPhoneMetadataIT : NBPhoneMetaData
@end
@interface NBPhoneMetadataJP : NBPhoneMetaData
@end
@interface NBPhoneMetadataMC : NBPhoneMetaData
@end
@interface NBPhoneMetadataKM : NBPhoneMetaData
@end
@interface NBPhoneMetadataMD : NBPhoneMetaData
@end
@interface NBPhoneMetadataLI : NBPhoneMetaData
@end
@interface NBPhoneMetadata881 : NBPhoneMetaData
@end
@interface NBPhoneMetadataKN : NBPhoneMetaData
@end
@interface NBPhoneMetadataME : NBPhoneMetaData
@end
@interface NBPhoneMetadataNA : NBPhoneMetaData
@end
@interface NBPhoneMetadataMF : NBPhoneMetaData
@end
@interface NBPhoneMetadataLK : NBPhoneMetaData
@end
@interface NBPhoneMetadata882 : NBPhoneMetaData
@end
@interface NBPhoneMetadataKP : NBPhoneMetaData
@end
@interface NBPhoneMetadataMG : NBPhoneMetaData
@end
@interface NBPhoneMetadataNC : NBPhoneMetaData
@end
@interface NBPhoneMetadataMH : NBPhoneMetaData
@end
@interface NBPhoneMetadata883 : NBPhoneMetaData
@end
@interface NBPhoneMetadataKR : NBPhoneMetaData
@end
@interface NBPhoneMetadataNE : NBPhoneMetaData
@end
@interface NBPhoneMetadataNF : NBPhoneMetaData
@end
@interface NBPhoneMetadataMK : NBPhoneMetaData
@end
@interface NBPhoneMetadataNG : NBPhoneMetaData
@end
@interface NBPhoneMetadataML : NBPhoneMetaData
@end
@interface NBPhoneMetadataMM : NBPhoneMetaData
@end
@interface NBPhoneMetadataLR : NBPhoneMetaData
@end
@interface NBPhoneMetadataNI : NBPhoneMetaData
@end
@interface NBPhoneMetadataKW : NBPhoneMetaData
@end
@interface NBPhoneMetadataMN : NBPhoneMetaData
@end
@interface NBPhoneMetadataLS : NBPhoneMetaData
@end
@interface NBPhoneMetadataPA : NBPhoneMetaData
@end
@interface NBPhoneMetadataMO : NBPhoneMetaData
@end
@interface NBPhoneMetadataLT : NBPhoneMetaData
@end
@interface NBPhoneMetadataKY : NBPhoneMetaData
@end
@interface NBPhoneMetadataMP : NBPhoneMetaData
@end
@interface NBPhoneMetadataLU : NBPhoneMetaData
@end
@interface NBPhoneMetadataNL : NBPhoneMetaData
@end
@interface NBPhoneMetadataKZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataMQ : NBPhoneMetaData
@end
@interface NBPhoneMetadata888 : NBPhoneMetaData
@end
@interface NBPhoneMetadataLV : NBPhoneMetaData
@end
@interface NBPhoneMetadataMR : NBPhoneMetaData
@end
@interface NBPhoneMetadataPE : NBPhoneMetaData
@end
@interface NBPhoneMetadataMS : NBPhoneMetaData
@end
@interface NBPhoneMetadataQA : NBPhoneMetaData
@end
@interface NBPhoneMetadataNO : NBPhoneMetaData
@end
@interface NBPhoneMetadataPF : NBPhoneMetaData
@end
@interface NBPhoneMetadataMT : NBPhoneMetaData
@end
@interface NBPhoneMetadataLY : NBPhoneMetaData
@end
@interface NBPhoneMetadataNP : NBPhoneMetaData
@end
@interface NBPhoneMetadataPG : NBPhoneMetaData
@end
@interface NBPhoneMetadataMU : NBPhoneMetaData
@end
@interface NBPhoneMetadataPH : NBPhoneMetaData
@end
@interface NBPhoneMetadataMV : NBPhoneMetaData
@end
@interface NBPhoneMetadataOM : NBPhoneMetaData
@end
@interface NBPhoneMetadataNR : NBPhoneMetaData
@end
@interface NBPhoneMetadataMW : NBPhoneMetaData
@end
@interface NBPhoneMetadataMX : NBPhoneMetaData
@end
@interface NBPhoneMetadataPK : NBPhoneMetaData
@end
@interface NBPhoneMetadataMY : NBPhoneMetaData
@end
@interface NBPhoneMetadataNU : NBPhoneMetaData
@end
@interface NBPhoneMetadataPL : NBPhoneMetaData
@end
@interface NBPhoneMetadataMZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataPM : NBPhoneMetaData
@end
@interface NBPhoneMetadataRE : NBPhoneMetaData
@end
@interface NBPhoneMetadataSA : NBPhoneMetaData
@end
@interface NBPhoneMetadataSB : NBPhoneMetaData
@end
@interface NBPhoneMetadataNZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataSC : NBPhoneMetaData
@end
@interface NBPhoneMetadataSD : NBPhoneMetaData
@end
@interface NBPhoneMetadataPR : NBPhoneMetaData
@end
@interface NBPhoneMetadataSE : NBPhoneMetaData
@end
@interface NBPhoneMetadataPS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTA : NBPhoneMetaData
@end
@interface NBPhoneMetadataPT : NBPhoneMetaData
@end
@interface NBPhoneMetadataSG : NBPhoneMetaData
@end
@interface NBPhoneMetadataTC : NBPhoneMetaData
@end
@interface NBPhoneMetadataSH : NBPhoneMetaData
@end
@interface NBPhoneMetadataTD : NBPhoneMetaData
@end
@interface NBPhoneMetadataSI : NBPhoneMetaData
@end
@interface NBPhoneMetadataPW : NBPhoneMetaData
@end
@interface NBPhoneMetadataSJ : NBPhoneMetaData
@end
@interface NBPhoneMetadataUA : NBPhoneMetaData
@end
@interface NBPhoneMetadataRO : NBPhoneMetaData
@end
@interface NBPhoneMetadataSK : NBPhoneMetaData
@end
@interface NBPhoneMetadataPY : NBPhoneMetaData
@end
@interface NBPhoneMetadataTG : NBPhoneMetaData
@end
@interface NBPhoneMetadataSL : NBPhoneMetaData
@end
@interface NBPhoneMetadataTH : NBPhoneMetaData
@end
@interface NBPhoneMetadataSM : NBPhoneMetaData
@end
@interface NBPhoneMetadataSN : NBPhoneMetaData
@end
@interface NBPhoneMetadataRS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTJ : NBPhoneMetaData
@end
@interface NBPhoneMetadataVA : NBPhoneMetaData
@end
@interface NBPhoneMetadataSO : NBPhoneMetaData
@end
@interface NBPhoneMetadataTK : NBPhoneMetaData
@end
@interface NBPhoneMetadataUG : NBPhoneMetaData
@end
@interface NBPhoneMetadataRU : NBPhoneMetaData
@end
@interface NBPhoneMetadataTL : NBPhoneMetaData
@end
@interface NBPhoneMetadataVC : NBPhoneMetaData
@end
@interface NBPhoneMetadata870 : NBPhoneMetaData
@end
@interface NBPhoneMetadataTM : NBPhoneMetaData
@end
@interface NBPhoneMetadataSR : NBPhoneMetaData
@end
@interface NBPhoneMetadataRW : NBPhoneMetaData
@end
@interface NBPhoneMetadataTN : NBPhoneMetaData
@end
@interface NBPhoneMetadataVE : NBPhoneMetaData
@end
@interface NBPhoneMetadataSS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTO : NBPhoneMetaData
@end
@interface NBPhoneMetadataST : NBPhoneMetaData
@end
@interface NBPhoneMetadataVG : NBPhoneMetaData
@end
@interface NBPhoneMetadataSV : NBPhoneMetaData
@end
@interface NBPhoneMetadataTR : NBPhoneMetaData
@end
@interface NBPhoneMetadataVI : NBPhoneMetaData
@end
@interface NBPhoneMetadataSX : NBPhoneMetaData
@end
@interface NBPhoneMetadataWF : NBPhoneMetaData
@end
@interface NBPhoneMetadataTT : NBPhoneMetaData
@end
@interface NBPhoneMetadataSY : NBPhoneMetaData
@end
@interface NBPhoneMetadataSZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataTV : NBPhoneMetaData
@end
@interface NBPhoneMetadataTW : NBPhoneMetaData
@end
@interface NBPhoneMetadataVN : NBPhoneMetaData
@end
@interface NBPhoneMetadataUS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTZ : NBPhoneMetaData
@end
@interface NBPhoneMetadata878 : NBPhoneMetaData
@end
@interface NBPhoneMetadataYE : NBPhoneMetaData
@end
@interface NBPhoneMetadataZA : NBPhoneMetaData
@end
@interface NBPhoneMetadataUY : NBPhoneMetaData
@end
@interface NBPhoneMetadataVU : NBPhoneMetaData
@end
@interface NBPhoneMetadataUZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataWS : NBPhoneMetaData
@end
@interface NBPhoneMetadata979 : NBPhoneMetaData
@end
@interface NBPhoneMetadataZM : NBPhoneMetaData
@end
@interface NBPhoneMetadataAC : NBPhoneMetaData
@end
@interface NBPhoneMetadataAD : NBPhoneMetaData
@end
@interface NBPhoneMetadataYT : NBPhoneMetaData
@end
@interface NBPhoneMetadataAE : NBPhoneMetaData
@end
@interface NBPhoneMetadataBA : NBPhoneMetaData
@end
@interface NBPhoneMetadataAF : NBPhoneMetaData
@end
@interface NBPhoneMetadataBB : NBPhoneMetaData
@end
@interface NBPhoneMetadataAG : NBPhoneMetaData
@end
@interface NBPhoneMetadataBD : NBPhoneMetaData
@end
@interface NBPhoneMetadataAI : NBPhoneMetaData
@end
@interface NBPhoneMetadataBE : NBPhoneMetaData
@end
@interface NBPhoneMetadataCA : NBPhoneMetaData
@end
@interface NBPhoneMetadataBF : NBPhoneMetaData
@end
@interface NBPhoneMetadataBG : NBPhoneMetaData
@end
@interface NBPhoneMetadataZW : NBPhoneMetaData
@end
@interface NBPhoneMetadataAL : NBPhoneMetaData
@end
@interface NBPhoneMetadataCC : NBPhoneMetaData
@end
@interface NBPhoneMetadataBH : NBPhoneMetaData
@end
@interface NBPhoneMetadataAM : NBPhoneMetaData
@end
@interface NBPhoneMetadataCD : NBPhoneMetaData
@end
@interface NBPhoneMetadataBI : NBPhoneMetaData
@end
@interface NBPhoneMetadataBJ : NBPhoneMetaData
@end
@interface NBPhoneMetadataAO : NBPhoneMetaData
@end
@interface NBPhoneMetadataCF : NBPhoneMetaData
@end
@interface NBPhoneMetadataCG : NBPhoneMetaData
@end
@interface NBPhoneMetadataBL : NBPhoneMetaData
@end
@interface NBPhoneMetadata800 : NBPhoneMetaData
@end
@interface NBPhoneMetadataCH : NBPhoneMetaData
@end
@interface NBPhoneMetadataBM : NBPhoneMetaData
@end
@interface NBPhoneMetadataAR : NBPhoneMetaData
@end
@interface NBPhoneMetadataCI : NBPhoneMetaData
@end
@interface NBPhoneMetadataBN : NBPhoneMetaData
@end
@interface NBPhoneMetadataDE : NBPhoneMetaData
@end
@interface NBPhoneMetadataAS : NBPhoneMetaData
@end
@interface NBPhoneMetadataBO : NBPhoneMetaData
@end
@interface NBPhoneMetadataAT : NBPhoneMetaData
@end
@interface NBPhoneMetadataCK : NBPhoneMetaData
@end
@interface NBPhoneMetadataAU : NBPhoneMetaData
@end
@interface NBPhoneMetadataCL : NBPhoneMetaData
@end
@interface NBPhoneMetadataEC : NBPhoneMetaData
@end
@interface NBPhoneMetadataBQ : NBPhoneMetaData
@end
@interface NBPhoneMetadataCM : NBPhoneMetaData
@end
@interface NBPhoneMetadataBR : NBPhoneMetaData
@end
@interface NBPhoneMetadataAW : NBPhoneMetaData
@end
@interface NBPhoneMetadataCN : NBPhoneMetaData
@end
@interface NBPhoneMetadataEE : NBPhoneMetaData
@end
@interface NBPhoneMetadataBS : NBPhoneMetaData
@end
@interface NBPhoneMetadataDJ : NBPhoneMetaData
@end
@interface NBPhoneMetadataAX : NBPhoneMetaData
@end
@interface NBPhoneMetadataCO : NBPhoneMetaData
@end
@interface NBPhoneMetadataBT : NBPhoneMetaData
@end
@interface NBPhoneMetadataDK : NBPhoneMetaData
@end
@interface NBPhoneMetadataEG : NBPhoneMetaData
@end
@interface NBPhoneMetadataAZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataEH : NBPhoneMetaData
@end
@interface NBPhoneMetadataDM : NBPhoneMetaData
@end
@interface NBPhoneMetadataCR : NBPhoneMetaData
@end
@interface NBPhoneMetadataBW : NBPhoneMetaData
@end
@interface NBPhoneMetadataGA : NBPhoneMetaData
@end
@interface NBPhoneMetadataDO : NBPhoneMetaData
@end
@interface NBPhoneMetadataBY : NBPhoneMetaData
@end
@interface NBPhoneMetadataGB : NBPhoneMetaData
@end
@interface NBPhoneMetadataCU : NBPhoneMetaData
@end
@interface NBPhoneMetadataBZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataCV : NBPhoneMetaData
@end
@interface NBPhoneMetadata808 : NBPhoneMetaData
@end
@interface NBPhoneMetadataGD : NBPhoneMetaData
@end
@interface NBPhoneMetadataFI : NBPhoneMetaData
@end
@interface NBPhoneMetadataCW : NBPhoneMetaData
@end
@interface NBPhoneMetadataGE : NBPhoneMetaData
@end
@interface NBPhoneMetadataFJ : NBPhoneMetaData
@end
@interface NBPhoneMetadataCX : NBPhoneMetaData
@end
@interface NBPhoneMetadataGF : NBPhoneMetaData
@end
@interface NBPhoneMetadataFK : NBPhoneMetaData
@end
@interface NBPhoneMetadataCY : NBPhoneMetaData
@end
@interface NBPhoneMetadataGG : NBPhoneMetaData
@end
@interface NBPhoneMetadataCZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataGH : NBPhoneMetaData
@end
@interface NBPhoneMetadataFM : NBPhoneMetaData
@end
@interface NBPhoneMetadataER : NBPhoneMetaData
@end
@interface NBPhoneMetadataGI : NBPhoneMetaData
@end
@interface NBPhoneMetadataES : NBPhoneMetaData
@end
@interface NBPhoneMetadataFO : NBPhoneMetaData
@end
@interface NBPhoneMetadataET : NBPhoneMetaData
@end
@interface NBPhoneMetadataGL : NBPhoneMetaData
@end
@interface NBPhoneMetadataDZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataGM : NBPhoneMetaData
@end
@interface NBPhoneMetadataID : NBPhoneMetaData
@end
@interface NBPhoneMetadataFR : NBPhoneMetaData
@end
@interface NBPhoneMetadataGN : NBPhoneMetaData
@end
@interface NBPhoneMetadataIE : NBPhoneMetaData
@end
@interface NBPhoneMetadataHK : NBPhoneMetaData
@end
@interface NBPhoneMetadataGP : NBPhoneMetaData
@end
@interface NBPhoneMetadataGQ : NBPhoneMetaData
@end
@interface NBPhoneMetadataGR : NBPhoneMetaData
@end
@interface NBPhoneMetadataHN : NBPhoneMetaData
@end
@interface NBPhoneMetadataJE : NBPhoneMetaData
@end
@interface NBPhoneMetadataGT : NBPhoneMetaData
@end
@interface NBPhoneMetadataGU : NBPhoneMetaData
@end
@interface NBPhoneMetadataIL : NBPhoneMetaData
@end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import <Foundation/Foundation.h>
@interface NBMetadataCoreMapper : NSObject
+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key;
@end
@@ -0,0 +1,914 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import "NBMetadataCoreMapper.h"
@implementation NBMetadataCoreMapper
static NSMutableDictionary *kMapCCode2CN;
+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
kMapCCode2CN = [[NSMutableDictionary alloc] init];
NSMutableArray *countryCode356Array = [[NSMutableArray alloc] init];
[countryCode356Array addObject:@"MT"];
[kMapCCode2CN setObject:countryCode356Array forKey:@"356"];
NSMutableArray *countryCode53Array = [[NSMutableArray alloc] init];
[countryCode53Array addObject:@"CU"];
[kMapCCode2CN setObject:countryCode53Array forKey:@"53"];
NSMutableArray *countryCode381Array = [[NSMutableArray alloc] init];
[countryCode381Array addObject:@"RS"];
[kMapCCode2CN setObject:countryCode381Array forKey:@"381"];
NSMutableArray *countryCode373Array = [[NSMutableArray alloc] init];
[countryCode373Array addObject:@"MD"];
[kMapCCode2CN setObject:countryCode373Array forKey:@"373"];
NSMutableArray *countryCode508Array = [[NSMutableArray alloc] init];
[countryCode508Array addObject:@"PM"];
[kMapCCode2CN setObject:countryCode508Array forKey:@"508"];
NSMutableArray *countryCode509Array = [[NSMutableArray alloc] init];
[countryCode509Array addObject:@"HT"];
[kMapCCode2CN setObject:countryCode509Array forKey:@"509"];
NSMutableArray *countryCode54Array = [[NSMutableArray alloc] init];
[countryCode54Array addObject:@"AR"];
[kMapCCode2CN setObject:countryCode54Array forKey:@"54"];
NSMutableArray *countryCode800Array = [[NSMutableArray alloc] init];
[countryCode800Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode800Array forKey:@"800"];
NSMutableArray *countryCode268Array = [[NSMutableArray alloc] init];
[countryCode268Array addObject:@"SZ"];
[kMapCCode2CN setObject:countryCode268Array forKey:@"268"];
NSMutableArray *countryCode357Array = [[NSMutableArray alloc] init];
[countryCode357Array addObject:@"CY"];
[kMapCCode2CN setObject:countryCode357Array forKey:@"357"];
NSMutableArray *countryCode382Array = [[NSMutableArray alloc] init];
[countryCode382Array addObject:@"ME"];
[kMapCCode2CN setObject:countryCode382Array forKey:@"382"];
NSMutableArray *countryCode55Array = [[NSMutableArray alloc] init];
[countryCode55Array addObject:@"BR"];
[kMapCCode2CN setObject:countryCode55Array forKey:@"55"];
NSMutableArray *countryCode374Array = [[NSMutableArray alloc] init];
[countryCode374Array addObject:@"AM"];
[kMapCCode2CN setObject:countryCode374Array forKey:@"374"];
NSMutableArray *countryCode56Array = [[NSMutableArray alloc] init];
[countryCode56Array addObject:@"CL"];
[kMapCCode2CN setObject:countryCode56Array forKey:@"56"];
NSMutableArray *countryCode81Array = [[NSMutableArray alloc] init];
[countryCode81Array addObject:@"JP"];
[kMapCCode2CN setObject:countryCode81Array forKey:@"81"];
NSMutableArray *countryCode269Array = [[NSMutableArray alloc] init];
[countryCode269Array addObject:@"KM"];
[kMapCCode2CN setObject:countryCode269Array forKey:@"269"];
NSMutableArray *countryCode358Array = [[NSMutableArray alloc] init];
[countryCode358Array addObject:@"FI"];
[countryCode358Array addObject:@"AX"];
[kMapCCode2CN setObject:countryCode358Array forKey:@"358"];
NSMutableArray *countryCode57Array = [[NSMutableArray alloc] init];
[countryCode57Array addObject:@"CO"];
[kMapCCode2CN setObject:countryCode57Array forKey:@"57"];
NSMutableArray *countryCode82Array = [[NSMutableArray alloc] init];
[countryCode82Array addObject:@"KR"];
[kMapCCode2CN setObject:countryCode82Array forKey:@"82"];
NSMutableArray *countryCode375Array = [[NSMutableArray alloc] init];
[countryCode375Array addObject:@"BY"];
[kMapCCode2CN setObject:countryCode375Array forKey:@"375"];
NSMutableArray *countryCode58Array = [[NSMutableArray alloc] init];
[countryCode58Array addObject:@"VE"];
[kMapCCode2CN setObject:countryCode58Array forKey:@"58"];
NSMutableArray *countryCode359Array = [[NSMutableArray alloc] init];
[countryCode359Array addObject:@"BG"];
[kMapCCode2CN setObject:countryCode359Array forKey:@"359"];
NSMutableArray *countryCode376Array = [[NSMutableArray alloc] init];
[countryCode376Array addObject:@"AD"];
[kMapCCode2CN setObject:countryCode376Array forKey:@"376"];
NSMutableArray *countryCode84Array = [[NSMutableArray alloc] init];
[countryCode84Array addObject:@"VN"];
[kMapCCode2CN setObject:countryCode84Array forKey:@"84"];
NSMutableArray *countryCode385Array = [[NSMutableArray alloc] init];
[countryCode385Array addObject:@"HR"];
[kMapCCode2CN setObject:countryCode385Array forKey:@"385"];
NSMutableArray *countryCode377Array = [[NSMutableArray alloc] init];
[countryCode377Array addObject:@"MC"];
[kMapCCode2CN setObject:countryCode377Array forKey:@"377"];
NSMutableArray *countryCode86Array = [[NSMutableArray alloc] init];
[countryCode86Array addObject:@"CN"];
[kMapCCode2CN setObject:countryCode86Array forKey:@"86"];
NSMutableArray *countryCode297Array = [[NSMutableArray alloc] init];
[countryCode297Array addObject:@"AW"];
[kMapCCode2CN setObject:countryCode297Array forKey:@"297"];
NSMutableArray *countryCode386Array = [[NSMutableArray alloc] init];
[countryCode386Array addObject:@"SI"];
[kMapCCode2CN setObject:countryCode386Array forKey:@"386"];
NSMutableArray *countryCode378Array = [[NSMutableArray alloc] init];
[countryCode378Array addObject:@"SM"];
[kMapCCode2CN setObject:countryCode378Array forKey:@"378"];
NSMutableArray *countryCode670Array = [[NSMutableArray alloc] init];
[countryCode670Array addObject:@"TL"];
[kMapCCode2CN setObject:countryCode670Array forKey:@"670"];
NSMutableArray *countryCode298Array = [[NSMutableArray alloc] init];
[countryCode298Array addObject:@"FO"];
[kMapCCode2CN setObject:countryCode298Array forKey:@"298"];
NSMutableArray *countryCode387Array = [[NSMutableArray alloc] init];
[countryCode387Array addObject:@"BA"];
[kMapCCode2CN setObject:countryCode387Array forKey:@"387"];
NSMutableArray *countryCode590Array = [[NSMutableArray alloc] init];
[countryCode590Array addObject:@"GP"];
[countryCode590Array addObject:@"BL"];
[countryCode590Array addObject:@"MF"];
[kMapCCode2CN setObject:countryCode590Array forKey:@"590"];
NSMutableArray *countryCode299Array = [[NSMutableArray alloc] init];
[countryCode299Array addObject:@"GL"];
[kMapCCode2CN setObject:countryCode299Array forKey:@"299"];
NSMutableArray *countryCode591Array = [[NSMutableArray alloc] init];
[countryCode591Array addObject:@"BO"];
[kMapCCode2CN setObject:countryCode591Array forKey:@"591"];
NSMutableArray *countryCode680Array = [[NSMutableArray alloc] init];
[countryCode680Array addObject:@"PW"];
[kMapCCode2CN setObject:countryCode680Array forKey:@"680"];
NSMutableArray *countryCode808Array = [[NSMutableArray alloc] init];
[countryCode808Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode808Array forKey:@"808"];
NSMutableArray *countryCode672Array = [[NSMutableArray alloc] init];
[countryCode672Array addObject:@"NF"];
[kMapCCode2CN setObject:countryCode672Array forKey:@"672"];
NSMutableArray *countryCode850Array = [[NSMutableArray alloc] init];
[countryCode850Array addObject:@"KP"];
[kMapCCode2CN setObject:countryCode850Array forKey:@"850"];
NSMutableArray *countryCode389Array = [[NSMutableArray alloc] init];
[countryCode389Array addObject:@"MK"];
[kMapCCode2CN setObject:countryCode389Array forKey:@"389"];
NSMutableArray *countryCode592Array = [[NSMutableArray alloc] init];
[countryCode592Array addObject:@"GY"];
[kMapCCode2CN setObject:countryCode592Array forKey:@"592"];
NSMutableArray *countryCode681Array = [[NSMutableArray alloc] init];
[countryCode681Array addObject:@"WF"];
[kMapCCode2CN setObject:countryCode681Array forKey:@"681"];
NSMutableArray *countryCode673Array = [[NSMutableArray alloc] init];
[countryCode673Array addObject:@"BN"];
[kMapCCode2CN setObject:countryCode673Array forKey:@"673"];
NSMutableArray *countryCode690Array = [[NSMutableArray alloc] init];
[countryCode690Array addObject:@"TK"];
[kMapCCode2CN setObject:countryCode690Array forKey:@"690"];
NSMutableArray *countryCode593Array = [[NSMutableArray alloc] init];
[countryCode593Array addObject:@"EC"];
[kMapCCode2CN setObject:countryCode593Array forKey:@"593"];
NSMutableArray *countryCode682Array = [[NSMutableArray alloc] init];
[countryCode682Array addObject:@"CK"];
[kMapCCode2CN setObject:countryCode682Array forKey:@"682"];
NSMutableArray *countryCode674Array = [[NSMutableArray alloc] init];
[countryCode674Array addObject:@"NR"];
[kMapCCode2CN setObject:countryCode674Array forKey:@"674"];
NSMutableArray *countryCode852Array = [[NSMutableArray alloc] init];
[countryCode852Array addObject:@"HK"];
[kMapCCode2CN setObject:countryCode852Array forKey:@"852"];
NSMutableArray *countryCode691Array = [[NSMutableArray alloc] init];
[countryCode691Array addObject:@"FM"];
[kMapCCode2CN setObject:countryCode691Array forKey:@"691"];
NSMutableArray *countryCode594Array = [[NSMutableArray alloc] init];
[countryCode594Array addObject:@"GF"];
[kMapCCode2CN setObject:countryCode594Array forKey:@"594"];
NSMutableArray *countryCode683Array = [[NSMutableArray alloc] init];
[countryCode683Array addObject:@"NU"];
[kMapCCode2CN setObject:countryCode683Array forKey:@"683"];
NSMutableArray *countryCode675Array = [[NSMutableArray alloc] init];
[countryCode675Array addObject:@"PG"];
[kMapCCode2CN setObject:countryCode675Array forKey:@"675"];
NSMutableArray *countryCode30Array = [[NSMutableArray alloc] init];
[countryCode30Array addObject:@"GR"];
[kMapCCode2CN setObject:countryCode30Array forKey:@"30"];
NSMutableArray *countryCode853Array = [[NSMutableArray alloc] init];
[countryCode853Array addObject:@"MO"];
[kMapCCode2CN setObject:countryCode853Array forKey:@"853"];
NSMutableArray *countryCode692Array = [[NSMutableArray alloc] init];
[countryCode692Array addObject:@"MH"];
[kMapCCode2CN setObject:countryCode692Array forKey:@"692"];
NSMutableArray *countryCode595Array = [[NSMutableArray alloc] init];
[countryCode595Array addObject:@"PY"];
[kMapCCode2CN setObject:countryCode595Array forKey:@"595"];
NSMutableArray *countryCode31Array = [[NSMutableArray alloc] init];
[countryCode31Array addObject:@"NL"];
[kMapCCode2CN setObject:countryCode31Array forKey:@"31"];
NSMutableArray *countryCode870Array = [[NSMutableArray alloc] init];
[countryCode870Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode870Array forKey:@"870"];
NSMutableArray *countryCode676Array = [[NSMutableArray alloc] init];
[countryCode676Array addObject:@"TO"];
[kMapCCode2CN setObject:countryCode676Array forKey:@"676"];
NSMutableArray *countryCode32Array = [[NSMutableArray alloc] init];
[countryCode32Array addObject:@"BE"];
[kMapCCode2CN setObject:countryCode32Array forKey:@"32"];
NSMutableArray *countryCode596Array = [[NSMutableArray alloc] init];
[countryCode596Array addObject:@"MQ"];
[kMapCCode2CN setObject:countryCode596Array forKey:@"596"];
NSMutableArray *countryCode685Array = [[NSMutableArray alloc] init];
[countryCode685Array addObject:@"WS"];
[kMapCCode2CN setObject:countryCode685Array forKey:@"685"];
NSMutableArray *countryCode33Array = [[NSMutableArray alloc] init];
[countryCode33Array addObject:@"FR"];
[kMapCCode2CN setObject:countryCode33Array forKey:@"33"];
NSMutableArray *countryCode960Array = [[NSMutableArray alloc] init];
[countryCode960Array addObject:@"MV"];
[kMapCCode2CN setObject:countryCode960Array forKey:@"960"];
NSMutableArray *countryCode677Array = [[NSMutableArray alloc] init];
[countryCode677Array addObject:@"SB"];
[kMapCCode2CN setObject:countryCode677Array forKey:@"677"];
NSMutableArray *countryCode855Array = [[NSMutableArray alloc] init];
[countryCode855Array addObject:@"KH"];
[kMapCCode2CN setObject:countryCode855Array forKey:@"855"];
NSMutableArray *countryCode34Array = [[NSMutableArray alloc] init];
[countryCode34Array addObject:@"ES"];
[kMapCCode2CN setObject:countryCode34Array forKey:@"34"];
NSMutableArray *countryCode880Array = [[NSMutableArray alloc] init];
[countryCode880Array addObject:@"BD"];
[kMapCCode2CN setObject:countryCode880Array forKey:@"880"];
NSMutableArray *countryCode597Array = [[NSMutableArray alloc] init];
[countryCode597Array addObject:@"SR"];
[kMapCCode2CN setObject:countryCode597Array forKey:@"597"];
NSMutableArray *countryCode686Array = [[NSMutableArray alloc] init];
[countryCode686Array addObject:@"KI"];
[kMapCCode2CN setObject:countryCode686Array forKey:@"686"];
NSMutableArray *countryCode961Array = [[NSMutableArray alloc] init];
[countryCode961Array addObject:@"LB"];
[kMapCCode2CN setObject:countryCode961Array forKey:@"961"];
NSMutableArray *countryCode60Array = [[NSMutableArray alloc] init];
[countryCode60Array addObject:@"MY"];
[kMapCCode2CN setObject:countryCode60Array forKey:@"60"];
NSMutableArray *countryCode678Array = [[NSMutableArray alloc] init];
[countryCode678Array addObject:@"VU"];
[kMapCCode2CN setObject:countryCode678Array forKey:@"678"];
NSMutableArray *countryCode856Array = [[NSMutableArray alloc] init];
[countryCode856Array addObject:@"LA"];
[kMapCCode2CN setObject:countryCode856Array forKey:@"856"];
NSMutableArray *countryCode881Array = [[NSMutableArray alloc] init];
[countryCode881Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode881Array forKey:@"881"];
NSMutableArray *countryCode36Array = [[NSMutableArray alloc] init];
[countryCode36Array addObject:@"HU"];
[kMapCCode2CN setObject:countryCode36Array forKey:@"36"];
NSMutableArray *countryCode61Array = [[NSMutableArray alloc] init];
[countryCode61Array addObject:@"AU"];
[countryCode61Array addObject:@"CC"];
[countryCode61Array addObject:@"CX"];
[kMapCCode2CN setObject:countryCode61Array forKey:@"61"];
NSMutableArray *countryCode598Array = [[NSMutableArray alloc] init];
[countryCode598Array addObject:@"UY"];
[kMapCCode2CN setObject:countryCode598Array forKey:@"598"];
NSMutableArray *countryCode687Array = [[NSMutableArray alloc] init];
[countryCode687Array addObject:@"NC"];
[kMapCCode2CN setObject:countryCode687Array forKey:@"687"];
NSMutableArray *countryCode962Array = [[NSMutableArray alloc] init];
[countryCode962Array addObject:@"JO"];
[kMapCCode2CN setObject:countryCode962Array forKey:@"962"];
NSMutableArray *countryCode62Array = [[NSMutableArray alloc] init];
[countryCode62Array addObject:@"ID"];
[kMapCCode2CN setObject:countryCode62Array forKey:@"62"];
NSMutableArray *countryCode679Array = [[NSMutableArray alloc] init];
[countryCode679Array addObject:@"FJ"];
[kMapCCode2CN setObject:countryCode679Array forKey:@"679"];
NSMutableArray *countryCode882Array = [[NSMutableArray alloc] init];
[countryCode882Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode882Array forKey:@"882"];
NSMutableArray *countryCode970Array = [[NSMutableArray alloc] init];
[countryCode970Array addObject:@"PS"];
[kMapCCode2CN setObject:countryCode970Array forKey:@"970"];
NSMutableArray *countryCode971Array = [[NSMutableArray alloc] init];
[countryCode971Array addObject:@"AE"];
[kMapCCode2CN setObject:countryCode971Array forKey:@"971"];
NSMutableArray *countryCode63Array = [[NSMutableArray alloc] init];
[countryCode63Array addObject:@"PH"];
[kMapCCode2CN setObject:countryCode63Array forKey:@"63"];
NSMutableArray *countryCode599Array = [[NSMutableArray alloc] init];
[countryCode599Array addObject:@"CW"];
[countryCode599Array addObject:@"BQ"];
[kMapCCode2CN setObject:countryCode599Array forKey:@"599"];
NSMutableArray *countryCode688Array = [[NSMutableArray alloc] init];
[countryCode688Array addObject:@"TV"];
[kMapCCode2CN setObject:countryCode688Array forKey:@"688"];
NSMutableArray *countryCode963Array = [[NSMutableArray alloc] init];
[countryCode963Array addObject:@"SY"];
[kMapCCode2CN setObject:countryCode963Array forKey:@"963"];
NSMutableArray *countryCode39Array = [[NSMutableArray alloc] init];
[countryCode39Array addObject:@"IT"];
[countryCode39Array addObject:@"VA"];
[kMapCCode2CN setObject:countryCode39Array forKey:@"39"];
NSMutableArray *countryCode64Array = [[NSMutableArray alloc] init];
[countryCode64Array addObject:@"NZ"];
[kMapCCode2CN setObject:countryCode64Array forKey:@"64"];
NSMutableArray *countryCode883Array = [[NSMutableArray alloc] init];
[countryCode883Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode883Array forKey:@"883"];
NSMutableArray *countryCode972Array = [[NSMutableArray alloc] init];
[countryCode972Array addObject:@"IL"];
[kMapCCode2CN setObject:countryCode972Array forKey:@"972"];
NSMutableArray *countryCode65Array = [[NSMutableArray alloc] init];
[countryCode65Array addObject:@"SG"];
[kMapCCode2CN setObject:countryCode65Array forKey:@"65"];
NSMutableArray *countryCode90Array = [[NSMutableArray alloc] init];
[countryCode90Array addObject:@"TR"];
[kMapCCode2CN setObject:countryCode90Array forKey:@"90"];
NSMutableArray *countryCode689Array = [[NSMutableArray alloc] init];
[countryCode689Array addObject:@"PF"];
[kMapCCode2CN setObject:countryCode689Array forKey:@"689"];
NSMutableArray *countryCode964Array = [[NSMutableArray alloc] init];
[countryCode964Array addObject:@"IQ"];
[kMapCCode2CN setObject:countryCode964Array forKey:@"964"];
NSMutableArray *countryCode1Array = [[NSMutableArray alloc] init];
[countryCode1Array addObject:@"US"];
[countryCode1Array addObject:@"AG"];
[countryCode1Array addObject:@"AI"];
[countryCode1Array addObject:@"AS"];
[countryCode1Array addObject:@"BB"];
[countryCode1Array addObject:@"BM"];
[countryCode1Array addObject:@"BS"];
[countryCode1Array addObject:@"CA"];
[countryCode1Array addObject:@"DM"];
[countryCode1Array addObject:@"DO"];
[countryCode1Array addObject:@"GD"];
[countryCode1Array addObject:@"GU"];
[countryCode1Array addObject:@"JM"];
[countryCode1Array addObject:@"KN"];
[countryCode1Array addObject:@"KY"];
[countryCode1Array addObject:@"LC"];
[countryCode1Array addObject:@"MP"];
[countryCode1Array addObject:@"MS"];
[countryCode1Array addObject:@"PR"];
[countryCode1Array addObject:@"SX"];
[countryCode1Array addObject:@"TC"];
[countryCode1Array addObject:@"TT"];
[countryCode1Array addObject:@"VC"];
[countryCode1Array addObject:@"VG"];
[countryCode1Array addObject:@"VI"];
[kMapCCode2CN setObject:countryCode1Array forKey:@"1"];
NSMutableArray *countryCode66Array = [[NSMutableArray alloc] init];
[countryCode66Array addObject:@"TH"];
[kMapCCode2CN setObject:countryCode66Array forKey:@"66"];
NSMutableArray *countryCode91Array = [[NSMutableArray alloc] init];
[countryCode91Array addObject:@"IN"];
[kMapCCode2CN setObject:countryCode91Array forKey:@"91"];
NSMutableArray *countryCode973Array = [[NSMutableArray alloc] init];
[countryCode973Array addObject:@"BH"];
[kMapCCode2CN setObject:countryCode973Array forKey:@"973"];
NSMutableArray *countryCode965Array = [[NSMutableArray alloc] init];
[countryCode965Array addObject:@"KW"];
[kMapCCode2CN setObject:countryCode965Array forKey:@"965"];
NSMutableArray *countryCode92Array = [[NSMutableArray alloc] init];
[countryCode92Array addObject:@"PK"];
[kMapCCode2CN setObject:countryCode92Array forKey:@"92"];
NSMutableArray *countryCode93Array = [[NSMutableArray alloc] init];
[countryCode93Array addObject:@"AF"];
[kMapCCode2CN setObject:countryCode93Array forKey:@"93"];
NSMutableArray *countryCode974Array = [[NSMutableArray alloc] init];
[countryCode974Array addObject:@"QA"];
[kMapCCode2CN setObject:countryCode974Array forKey:@"974"];
NSMutableArray *countryCode966Array = [[NSMutableArray alloc] init];
[countryCode966Array addObject:@"SA"];
[kMapCCode2CN setObject:countryCode966Array forKey:@"966"];
NSMutableArray *countryCode94Array = [[NSMutableArray alloc] init];
[countryCode94Array addObject:@"LK"];
[kMapCCode2CN setObject:countryCode94Array forKey:@"94"];
NSMutableArray *countryCode7Array = [[NSMutableArray alloc] init];
[countryCode7Array addObject:@"RU"];
[countryCode7Array addObject:@"KZ"];
[kMapCCode2CN setObject:countryCode7Array forKey:@"7"];
NSMutableArray *countryCode886Array = [[NSMutableArray alloc] init];
[countryCode886Array addObject:@"TW"];
[kMapCCode2CN setObject:countryCode886Array forKey:@"886"];
NSMutableArray *countryCode95Array = [[NSMutableArray alloc] init];
[countryCode95Array addObject:@"MM"];
[kMapCCode2CN setObject:countryCode95Array forKey:@"95"];
NSMutableArray *countryCode878Array = [[NSMutableArray alloc] init];
[countryCode878Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode878Array forKey:@"878"];
NSMutableArray *countryCode967Array = [[NSMutableArray alloc] init];
[countryCode967Array addObject:@"YE"];
[kMapCCode2CN setObject:countryCode967Array forKey:@"967"];
NSMutableArray *countryCode975Array = [[NSMutableArray alloc] init];
[countryCode975Array addObject:@"BT"];
[kMapCCode2CN setObject:countryCode975Array forKey:@"975"];
NSMutableArray *countryCode992Array = [[NSMutableArray alloc] init];
[countryCode992Array addObject:@"TJ"];
[kMapCCode2CN setObject:countryCode992Array forKey:@"992"];
NSMutableArray *countryCode976Array = [[NSMutableArray alloc] init];
[countryCode976Array addObject:@"MN"];
[kMapCCode2CN setObject:countryCode976Array forKey:@"976"];
NSMutableArray *countryCode968Array = [[NSMutableArray alloc] init];
[countryCode968Array addObject:@"OM"];
[kMapCCode2CN setObject:countryCode968Array forKey:@"968"];
NSMutableArray *countryCode993Array = [[NSMutableArray alloc] init];
[countryCode993Array addObject:@"TM"];
[kMapCCode2CN setObject:countryCode993Array forKey:@"993"];
NSMutableArray *countryCode98Array = [[NSMutableArray alloc] init];
[countryCode98Array addObject:@"IR"];
[kMapCCode2CN setObject:countryCode98Array forKey:@"98"];
NSMutableArray *countryCode888Array = [[NSMutableArray alloc] init];
[countryCode888Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode888Array forKey:@"888"];
NSMutableArray *countryCode977Array = [[NSMutableArray alloc] init];
[countryCode977Array addObject:@"NP"];
[kMapCCode2CN setObject:countryCode977Array forKey:@"977"];
NSMutableArray *countryCode994Array = [[NSMutableArray alloc] init];
[countryCode994Array addObject:@"AZ"];
[kMapCCode2CN setObject:countryCode994Array forKey:@"994"];
NSMutableArray *countryCode995Array = [[NSMutableArray alloc] init];
[countryCode995Array addObject:@"GE"];
[kMapCCode2CN setObject:countryCode995Array forKey:@"995"];
NSMutableArray *countryCode979Array = [[NSMutableArray alloc] init];
[countryCode979Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode979Array forKey:@"979"];
NSMutableArray *countryCode996Array = [[NSMutableArray alloc] init];
[countryCode996Array addObject:@"KG"];
[kMapCCode2CN setObject:countryCode996Array forKey:@"996"];
NSMutableArray *countryCode998Array = [[NSMutableArray alloc] init];
[countryCode998Array addObject:@"UZ"];
[kMapCCode2CN setObject:countryCode998Array forKey:@"998"];
NSMutableArray *countryCode40Array = [[NSMutableArray alloc] init];
[countryCode40Array addObject:@"RO"];
[kMapCCode2CN setObject:countryCode40Array forKey:@"40"];
NSMutableArray *countryCode41Array = [[NSMutableArray alloc] init];
[countryCode41Array addObject:@"CH"];
[kMapCCode2CN setObject:countryCode41Array forKey:@"41"];
NSMutableArray *countryCode43Array = [[NSMutableArray alloc] init];
[countryCode43Array addObject:@"AT"];
[kMapCCode2CN setObject:countryCode43Array forKey:@"43"];
NSMutableArray *countryCode44Array = [[NSMutableArray alloc] init];
[countryCode44Array addObject:@"GB"];
[countryCode44Array addObject:@"GG"];
[countryCode44Array addObject:@"IM"];
[countryCode44Array addObject:@"JE"];
[kMapCCode2CN setObject:countryCode44Array forKey:@"44"];
NSMutableArray *countryCode211Array = [[NSMutableArray alloc] init];
[countryCode211Array addObject:@"SS"];
[kMapCCode2CN setObject:countryCode211Array forKey:@"211"];
NSMutableArray *countryCode45Array = [[NSMutableArray alloc] init];
[countryCode45Array addObject:@"DK"];
[kMapCCode2CN setObject:countryCode45Array forKey:@"45"];
NSMutableArray *countryCode220Array = [[NSMutableArray alloc] init];
[countryCode220Array addObject:@"GM"];
[kMapCCode2CN setObject:countryCode220Array forKey:@"220"];
NSMutableArray *countryCode212Array = [[NSMutableArray alloc] init];
[countryCode212Array addObject:@"MA"];
[countryCode212Array addObject:@"EH"];
[kMapCCode2CN setObject:countryCode212Array forKey:@"212"];
NSMutableArray *countryCode46Array = [[NSMutableArray alloc] init];
[countryCode46Array addObject:@"SE"];
[kMapCCode2CN setObject:countryCode46Array forKey:@"46"];
NSMutableArray *countryCode47Array = [[NSMutableArray alloc] init];
[countryCode47Array addObject:@"NO"];
[countryCode47Array addObject:@"SJ"];
[kMapCCode2CN setObject:countryCode47Array forKey:@"47"];
NSMutableArray *countryCode221Array = [[NSMutableArray alloc] init];
[countryCode221Array addObject:@"SN"];
[kMapCCode2CN setObject:countryCode221Array forKey:@"221"];
NSMutableArray *countryCode213Array = [[NSMutableArray alloc] init];
[countryCode213Array addObject:@"DZ"];
[kMapCCode2CN setObject:countryCode213Array forKey:@"213"];
NSMutableArray *countryCode48Array = [[NSMutableArray alloc] init];
[countryCode48Array addObject:@"PL"];
[kMapCCode2CN setObject:countryCode48Array forKey:@"48"];
NSMutableArray *countryCode230Array = [[NSMutableArray alloc] init];
[countryCode230Array addObject:@"MU"];
[kMapCCode2CN setObject:countryCode230Array forKey:@"230"];
NSMutableArray *countryCode222Array = [[NSMutableArray alloc] init];
[countryCode222Array addObject:@"MR"];
[kMapCCode2CN setObject:countryCode222Array forKey:@"222"];
NSMutableArray *countryCode49Array = [[NSMutableArray alloc] init];
[countryCode49Array addObject:@"DE"];
[kMapCCode2CN setObject:countryCode49Array forKey:@"49"];
NSMutableArray *countryCode231Array = [[NSMutableArray alloc] init];
[countryCode231Array addObject:@"LR"];
[kMapCCode2CN setObject:countryCode231Array forKey:@"231"];
NSMutableArray *countryCode223Array = [[NSMutableArray alloc] init];
[countryCode223Array addObject:@"ML"];
[kMapCCode2CN setObject:countryCode223Array forKey:@"223"];
NSMutableArray *countryCode240Array = [[NSMutableArray alloc] init];
[countryCode240Array addObject:@"GQ"];
[kMapCCode2CN setObject:countryCode240Array forKey:@"240"];
NSMutableArray *countryCode232Array = [[NSMutableArray alloc] init];
[countryCode232Array addObject:@"SL"];
[kMapCCode2CN setObject:countryCode232Array forKey:@"232"];
NSMutableArray *countryCode224Array = [[NSMutableArray alloc] init];
[countryCode224Array addObject:@"GN"];
[kMapCCode2CN setObject:countryCode224Array forKey:@"224"];
NSMutableArray *countryCode216Array = [[NSMutableArray alloc] init];
[countryCode216Array addObject:@"TN"];
[kMapCCode2CN setObject:countryCode216Array forKey:@"216"];
NSMutableArray *countryCode241Array = [[NSMutableArray alloc] init];
[countryCode241Array addObject:@"GA"];
[kMapCCode2CN setObject:countryCode241Array forKey:@"241"];
NSMutableArray *countryCode233Array = [[NSMutableArray alloc] init];
[countryCode233Array addObject:@"GH"];
[kMapCCode2CN setObject:countryCode233Array forKey:@"233"];
NSMutableArray *countryCode225Array = [[NSMutableArray alloc] init];
[countryCode225Array addObject:@"CI"];
[kMapCCode2CN setObject:countryCode225Array forKey:@"225"];
NSMutableArray *countryCode250Array = [[NSMutableArray alloc] init];
[countryCode250Array addObject:@"RW"];
[kMapCCode2CN setObject:countryCode250Array forKey:@"250"];
NSMutableArray *countryCode500Array = [[NSMutableArray alloc] init];
[countryCode500Array addObject:@"FK"];
[kMapCCode2CN setObject:countryCode500Array forKey:@"500"];
NSMutableArray *countryCode242Array = [[NSMutableArray alloc] init];
[countryCode242Array addObject:@"CG"];
[kMapCCode2CN setObject:countryCode242Array forKey:@"242"];
NSMutableArray *countryCode420Array = [[NSMutableArray alloc] init];
[countryCode420Array addObject:@"CZ"];
[kMapCCode2CN setObject:countryCode420Array forKey:@"420"];
NSMutableArray *countryCode234Array = [[NSMutableArray alloc] init];
[countryCode234Array addObject:@"NG"];
[kMapCCode2CN setObject:countryCode234Array forKey:@"234"];
NSMutableArray *countryCode226Array = [[NSMutableArray alloc] init];
[countryCode226Array addObject:@"BF"];
[kMapCCode2CN setObject:countryCode226Array forKey:@"226"];
NSMutableArray *countryCode251Array = [[NSMutableArray alloc] init];
[countryCode251Array addObject:@"ET"];
[kMapCCode2CN setObject:countryCode251Array forKey:@"251"];
NSMutableArray *countryCode501Array = [[NSMutableArray alloc] init];
[countryCode501Array addObject:@"BZ"];
[kMapCCode2CN setObject:countryCode501Array forKey:@"501"];
NSMutableArray *countryCode218Array = [[NSMutableArray alloc] init];
[countryCode218Array addObject:@"LY"];
[kMapCCode2CN setObject:countryCode218Array forKey:@"218"];
NSMutableArray *countryCode243Array = [[NSMutableArray alloc] init];
[countryCode243Array addObject:@"CD"];
[kMapCCode2CN setObject:countryCode243Array forKey:@"243"];
NSMutableArray *countryCode421Array = [[NSMutableArray alloc] init];
[countryCode421Array addObject:@"SK"];
[kMapCCode2CN setObject:countryCode421Array forKey:@"421"];
NSMutableArray *countryCode235Array = [[NSMutableArray alloc] init];
[countryCode235Array addObject:@"TD"];
[kMapCCode2CN setObject:countryCode235Array forKey:@"235"];
NSMutableArray *countryCode260Array = [[NSMutableArray alloc] init];
[countryCode260Array addObject:@"ZM"];
[kMapCCode2CN setObject:countryCode260Array forKey:@"260"];
NSMutableArray *countryCode227Array = [[NSMutableArray alloc] init];
[countryCode227Array addObject:@"NE"];
[kMapCCode2CN setObject:countryCode227Array forKey:@"227"];
NSMutableArray *countryCode252Array = [[NSMutableArray alloc] init];
[countryCode252Array addObject:@"SO"];
[kMapCCode2CN setObject:countryCode252Array forKey:@"252"];
NSMutableArray *countryCode502Array = [[NSMutableArray alloc] init];
[countryCode502Array addObject:@"GT"];
[kMapCCode2CN setObject:countryCode502Array forKey:@"502"];
NSMutableArray *countryCode244Array = [[NSMutableArray alloc] init];
[countryCode244Array addObject:@"AO"];
[kMapCCode2CN setObject:countryCode244Array forKey:@"244"];
NSMutableArray *countryCode236Array = [[NSMutableArray alloc] init];
[countryCode236Array addObject:@"CF"];
[kMapCCode2CN setObject:countryCode236Array forKey:@"236"];
NSMutableArray *countryCode261Array = [[NSMutableArray alloc] init];
[countryCode261Array addObject:@"MG"];
[kMapCCode2CN setObject:countryCode261Array forKey:@"261"];
NSMutableArray *countryCode350Array = [[NSMutableArray alloc] init];
[countryCode350Array addObject:@"GI"];
[kMapCCode2CN setObject:countryCode350Array forKey:@"350"];
NSMutableArray *countryCode228Array = [[NSMutableArray alloc] init];
[countryCode228Array addObject:@"TG"];
[kMapCCode2CN setObject:countryCode228Array forKey:@"228"];
NSMutableArray *countryCode253Array = [[NSMutableArray alloc] init];
[countryCode253Array addObject:@"DJ"];
[kMapCCode2CN setObject:countryCode253Array forKey:@"253"];
NSMutableArray *countryCode503Array = [[NSMutableArray alloc] init];
[countryCode503Array addObject:@"SV"];
[kMapCCode2CN setObject:countryCode503Array forKey:@"503"];
NSMutableArray *countryCode245Array = [[NSMutableArray alloc] init];
[countryCode245Array addObject:@"GW"];
[kMapCCode2CN setObject:countryCode245Array forKey:@"245"];
NSMutableArray *countryCode423Array = [[NSMutableArray alloc] init];
[countryCode423Array addObject:@"LI"];
[kMapCCode2CN setObject:countryCode423Array forKey:@"423"];
NSMutableArray *countryCode237Array = [[NSMutableArray alloc] init];
[countryCode237Array addObject:@"CM"];
[kMapCCode2CN setObject:countryCode237Array forKey:@"237"];
NSMutableArray *countryCode262Array = [[NSMutableArray alloc] init];
[countryCode262Array addObject:@"RE"];
[countryCode262Array addObject:@"YT"];
[kMapCCode2CN setObject:countryCode262Array forKey:@"262"];
NSMutableArray *countryCode351Array = [[NSMutableArray alloc] init];
[countryCode351Array addObject:@"PT"];
[kMapCCode2CN setObject:countryCode351Array forKey:@"351"];
NSMutableArray *countryCode229Array = [[NSMutableArray alloc] init];
[countryCode229Array addObject:@"BJ"];
[kMapCCode2CN setObject:countryCode229Array forKey:@"229"];
NSMutableArray *countryCode254Array = [[NSMutableArray alloc] init];
[countryCode254Array addObject:@"KE"];
[kMapCCode2CN setObject:countryCode254Array forKey:@"254"];
NSMutableArray *countryCode504Array = [[NSMutableArray alloc] init];
[countryCode504Array addObject:@"HN"];
[kMapCCode2CN setObject:countryCode504Array forKey:@"504"];
NSMutableArray *countryCode246Array = [[NSMutableArray alloc] init];
[countryCode246Array addObject:@"IO"];
[kMapCCode2CN setObject:countryCode246Array forKey:@"246"];
NSMutableArray *countryCode20Array = [[NSMutableArray alloc] init];
[countryCode20Array addObject:@"EG"];
[kMapCCode2CN setObject:countryCode20Array forKey:@"20"];
NSMutableArray *countryCode238Array = [[NSMutableArray alloc] init];
[countryCode238Array addObject:@"CV"];
[kMapCCode2CN setObject:countryCode238Array forKey:@"238"];
NSMutableArray *countryCode263Array = [[NSMutableArray alloc] init];
[countryCode263Array addObject:@"ZW"];
[kMapCCode2CN setObject:countryCode263Array forKey:@"263"];
NSMutableArray *countryCode352Array = [[NSMutableArray alloc] init];
[countryCode352Array addObject:@"LU"];
[kMapCCode2CN setObject:countryCode352Array forKey:@"352"];
NSMutableArray *countryCode255Array = [[NSMutableArray alloc] init];
[countryCode255Array addObject:@"TZ"];
[kMapCCode2CN setObject:countryCode255Array forKey:@"255"];
NSMutableArray *countryCode505Array = [[NSMutableArray alloc] init];
[countryCode505Array addObject:@"NI"];
[kMapCCode2CN setObject:countryCode505Array forKey:@"505"];
NSMutableArray *countryCode247Array = [[NSMutableArray alloc] init];
[countryCode247Array addObject:@"AC"];
[kMapCCode2CN setObject:countryCode247Array forKey:@"247"];
NSMutableArray *countryCode239Array = [[NSMutableArray alloc] init];
[countryCode239Array addObject:@"ST"];
[kMapCCode2CN setObject:countryCode239Array forKey:@"239"];
NSMutableArray *countryCode264Array = [[NSMutableArray alloc] init];
[countryCode264Array addObject:@"NA"];
[kMapCCode2CN setObject:countryCode264Array forKey:@"264"];
NSMutableArray *countryCode353Array = [[NSMutableArray alloc] init];
[countryCode353Array addObject:@"IE"];
[kMapCCode2CN setObject:countryCode353Array forKey:@"353"];
NSMutableArray *countryCode256Array = [[NSMutableArray alloc] init];
[countryCode256Array addObject:@"UG"];
[kMapCCode2CN setObject:countryCode256Array forKey:@"256"];
NSMutableArray *countryCode370Array = [[NSMutableArray alloc] init];
[countryCode370Array addObject:@"LT"];
[kMapCCode2CN setObject:countryCode370Array forKey:@"370"];
NSMutableArray *countryCode506Array = [[NSMutableArray alloc] init];
[countryCode506Array addObject:@"CR"];
[kMapCCode2CN setObject:countryCode506Array forKey:@"506"];
NSMutableArray *countryCode248Array = [[NSMutableArray alloc] init];
[countryCode248Array addObject:@"SC"];
[kMapCCode2CN setObject:countryCode248Array forKey:@"248"];
NSMutableArray *countryCode265Array = [[NSMutableArray alloc] init];
[countryCode265Array addObject:@"MW"];
[kMapCCode2CN setObject:countryCode265Array forKey:@"265"];
NSMutableArray *countryCode290Array = [[NSMutableArray alloc] init];
[countryCode290Array addObject:@"SH"];
[countryCode290Array addObject:@"TA"];
[kMapCCode2CN setObject:countryCode290Array forKey:@"290"];
NSMutableArray *countryCode354Array = [[NSMutableArray alloc] init];
[countryCode354Array addObject:@"IS"];
[kMapCCode2CN setObject:countryCode354Array forKey:@"354"];
NSMutableArray *countryCode257Array = [[NSMutableArray alloc] init];
[countryCode257Array addObject:@"BI"];
[kMapCCode2CN setObject:countryCode257Array forKey:@"257"];
NSMutableArray *countryCode371Array = [[NSMutableArray alloc] init];
[countryCode371Array addObject:@"LV"];
[kMapCCode2CN setObject:countryCode371Array forKey:@"371"];
NSMutableArray *countryCode507Array = [[NSMutableArray alloc] init];
[countryCode507Array addObject:@"PA"];
[kMapCCode2CN setObject:countryCode507Array forKey:@"507"];
NSMutableArray *countryCode249Array = [[NSMutableArray alloc] init];
[countryCode249Array addObject:@"SD"];
[kMapCCode2CN setObject:countryCode249Array forKey:@"249"];
NSMutableArray *countryCode266Array = [[NSMutableArray alloc] init];
[countryCode266Array addObject:@"LS"];
[kMapCCode2CN setObject:countryCode266Array forKey:@"266"];
NSMutableArray *countryCode51Array = [[NSMutableArray alloc] init];
[countryCode51Array addObject:@"PE"];
[kMapCCode2CN setObject:countryCode51Array forKey:@"51"];
NSMutableArray *countryCode291Array = [[NSMutableArray alloc] init];
[countryCode291Array addObject:@"ER"];
[kMapCCode2CN setObject:countryCode291Array forKey:@"291"];
NSMutableArray *countryCode258Array = [[NSMutableArray alloc] init];
[countryCode258Array addObject:@"MZ"];
[kMapCCode2CN setObject:countryCode258Array forKey:@"258"];
NSMutableArray *countryCode355Array = [[NSMutableArray alloc] init];
[countryCode355Array addObject:@"AL"];
[kMapCCode2CN setObject:countryCode355Array forKey:@"355"];
NSMutableArray *countryCode372Array = [[NSMutableArray alloc] init];
[countryCode372Array addObject:@"EE"];
[kMapCCode2CN setObject:countryCode372Array forKey:@"372"];
NSMutableArray *countryCode27Array = [[NSMutableArray alloc] init];
[countryCode27Array addObject:@"ZA"];
[kMapCCode2CN setObject:countryCode27Array forKey:@"27"];
NSMutableArray *countryCode52Array = [[NSMutableArray alloc] init];
[countryCode52Array addObject:@"MX"];
[kMapCCode2CN setObject:countryCode52Array forKey:@"52"];
NSMutableArray *countryCode380Array = [[NSMutableArray alloc] init];
[countryCode380Array addObject:@"UA"];
[kMapCCode2CN setObject:countryCode380Array forKey:@"380"];
NSMutableArray *countryCode267Array = [[NSMutableArray alloc] init];
[countryCode267Array addObject:@"BW"];
[kMapCCode2CN setObject:countryCode267Array forKey:@"267"];
});
return [kMapCCode2CN objectForKey:key];
}
@end
@@ -0,0 +1,98 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import <Foundation/Foundation.h>
#import "NBPhoneMetaData.h"
@interface NBPhoneMetadataTestAD : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestBR : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestAU : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestBB : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestAE : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestCX : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestBS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestDE : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestKR : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestNZ : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestPL : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestSE : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestCA : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestAO : NBPhoneMetaData
@end
@interface NBPhoneMetadataTest800 : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestYT : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestFR : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestGG : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestHU : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestSG : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestJP : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestCC : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestMX : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestUS : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestIT : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestAR : NBPhoneMetaData
@end
@interface NBPhoneMetadataTest979 : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestGB : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestBY : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestCN : NBPhoneMetaData
@end
@interface NBPhoneMetadataTestRE : NBPhoneMetaData
@end
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,10 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import <Foundation/Foundation.h>
@interface NBMetadataCoreTestMapper : NSObject
+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key;
@end
@@ -0,0 +1,122 @@
// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)
#import "NBMetadataCoreTestMapper.h"
@implementation NBMetadataCoreTestMapper
static NSMutableDictionary *kMapCCode2CN;
+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
kMapCCode2CN = [[NSMutableDictionary alloc] init];
NSMutableArray *countryCode971Array = [[NSMutableArray alloc] init];
[countryCode971Array addObject:@"AE"];
[kMapCCode2CN setObject:countryCode971Array forKey:@"971"];
NSMutableArray *countryCode55Array = [[NSMutableArray alloc] init];
[countryCode55Array addObject:@"BR"];
[kMapCCode2CN setObject:countryCode55Array forKey:@"55"];
NSMutableArray *countryCode48Array = [[NSMutableArray alloc] init];
[countryCode48Array addObject:@"PL"];
[kMapCCode2CN setObject:countryCode48Array forKey:@"48"];
NSMutableArray *countryCode33Array = [[NSMutableArray alloc] init];
[countryCode33Array addObject:@"FR"];
[kMapCCode2CN setObject:countryCode33Array forKey:@"33"];
NSMutableArray *countryCode49Array = [[NSMutableArray alloc] init];
[countryCode49Array addObject:@"DE"];
[kMapCCode2CN setObject:countryCode49Array forKey:@"49"];
NSMutableArray *countryCode86Array = [[NSMutableArray alloc] init];
[countryCode86Array addObject:@"CN"];
[kMapCCode2CN setObject:countryCode86Array forKey:@"86"];
NSMutableArray *countryCode64Array = [[NSMutableArray alloc] init];
[countryCode64Array addObject:@"NZ"];
[kMapCCode2CN setObject:countryCode64Array forKey:@"64"];
NSMutableArray *countryCode800Array = [[NSMutableArray alloc] init];
[countryCode800Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode800Array forKey:@"800"];
NSMutableArray *countryCode1Array = [[NSMutableArray alloc] init];
[countryCode1Array addObject:@"US"];
[countryCode1Array addObject:@"BB"];
[countryCode1Array addObject:@"BS"];
[countryCode1Array addObject:@"CA"];
[kMapCCode2CN setObject:countryCode1Array forKey:@"1"];
NSMutableArray *countryCode65Array = [[NSMutableArray alloc] init];
[countryCode65Array addObject:@"SG"];
[kMapCCode2CN setObject:countryCode65Array forKey:@"65"];
NSMutableArray *countryCode36Array = [[NSMutableArray alloc] init];
[countryCode36Array addObject:@"HU"];
[kMapCCode2CN setObject:countryCode36Array forKey:@"36"];
NSMutableArray *countryCode244Array = [[NSMutableArray alloc] init];
[countryCode244Array addObject:@"AO"];
[kMapCCode2CN setObject:countryCode244Array forKey:@"244"];
NSMutableArray *countryCode375Array = [[NSMutableArray alloc] init];
[countryCode375Array addObject:@"BY"];
[kMapCCode2CN setObject:countryCode375Array forKey:@"375"];
NSMutableArray *countryCode44Array = [[NSMutableArray alloc] init];
[countryCode44Array addObject:@"GB"];
[countryCode44Array addObject:@"GG"];
[kMapCCode2CN setObject:countryCode44Array forKey:@"44"];
NSMutableArray *countryCode81Array = [[NSMutableArray alloc] init];
[countryCode81Array addObject:@"JP"];
[kMapCCode2CN setObject:countryCode81Array forKey:@"81"];
NSMutableArray *countryCode52Array = [[NSMutableArray alloc] init];
[countryCode52Array addObject:@"MX"];
[kMapCCode2CN setObject:countryCode52Array forKey:@"52"];
NSMutableArray *countryCode82Array = [[NSMutableArray alloc] init];
[countryCode82Array addObject:@"KR"];
[kMapCCode2CN setObject:countryCode82Array forKey:@"82"];
NSMutableArray *countryCode376Array = [[NSMutableArray alloc] init];
[countryCode376Array addObject:@"AD"];
[kMapCCode2CN setObject:countryCode376Array forKey:@"376"];
NSMutableArray *countryCode979Array = [[NSMutableArray alloc] init];
[countryCode979Array addObject:@"001"];
[kMapCCode2CN setObject:countryCode979Array forKey:@"979"];
NSMutableArray *countryCode46Array = [[NSMutableArray alloc] init];
[countryCode46Array addObject:@"SE"];
[kMapCCode2CN setObject:countryCode46Array forKey:@"46"];
NSMutableArray *countryCode39Array = [[NSMutableArray alloc] init];
[countryCode39Array addObject:@"IT"];
[kMapCCode2CN setObject:countryCode39Array forKey:@"39"];
NSMutableArray *countryCode61Array = [[NSMutableArray alloc] init];
[countryCode61Array addObject:@"AU"];
[countryCode61Array addObject:@"CC"];
[countryCode61Array addObject:@"CX"];
[kMapCCode2CN setObject:countryCode61Array forKey:@"61"];
NSMutableArray *countryCode54Array = [[NSMutableArray alloc] init];
[countryCode54Array addObject:@"AR"];
[kMapCCode2CN setObject:countryCode54Array forKey:@"54"];
NSMutableArray *countryCode262Array = [[NSMutableArray alloc] init];
[countryCode262Array addObject:@"RE"];
[countryCode262Array addObject:@"YT"];
[kMapCCode2CN setObject:countryCode262Array forKey:@"262"];
});
return [kMapCCode2CN objectForKey:key];
}
@end
@@ -0,0 +1,32 @@
//
// NBMetadataHelper.h
// libPhoneNumber
//
// Created by tabby on 2015. 2. 8..
// Copyright (c) 2015년 ohtalk.me. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <libphonenumber/NBPhoneNumberDefines.h>
@class NBPhoneMetaData;
@interface NBMetadataHelper : NSObject
+ (BOOL)hasValue:(NSString *)string;
- (NSDictionary *)CCode2CNMap;
- (NSArray *)getAllMetadata;
- (NBPhoneMetaData *)getMetadataForNonGeographicalRegion:(NSNumber *)countryCallingCode;
- (NBPhoneMetaData *)getMetadataForRegion:(NSString *)regionCode;
- (NSArray *)regionCodeFromCountryCode:(NSNumber *)countryCodeNumber;
- (NSString *)countryCodeFromRegionCode:(NSString *)regionCode;
- (NSString *)stringByTrimming:(NSString *)aString;
- (NSString *)normalizeNonBreakingSpace:(NSString *)aString;
@end
@@ -0,0 +1,273 @@
//
// NBMetadataHelper.m
// libPhoneNumber
//
// Created by tabby on 2015. 2. 8..
// Copyright (c) 2015년 ohtalk.me. All rights reserved.
//
#import "NBMetadataHelper.h"
#import "NBPhoneMetaData.h"
#import "NBMetadataCore.h"
#if TESTING==1
#define NB_CLASS_PREFIX @"NBPhoneMetadataTest"
#import "NBMetadataCoreTest.h"
#import "NBMetadataCoreTestMapper.h"
#else
#define NB_CLASS_PREFIX @"NBPhoneMetadata"
#import "NBMetadataCore.h"
#import "NBMetadataCoreMapper.h"
#endif
@interface NBMetadataHelper ()
// Cached metadata
@property(nonatomic, strong) NBPhoneMetaData *cachedMetaData;
@property(nonatomic, strong) NSString *cachedMetaDataKey;
@end
@implementation NBMetadataHelper
/*
Terminologies
- Country Number (CN) = Country code for i18n calling
- Country Code (CC) : ISO country codes (2 chars)
Ref. site (countrycode.org)
*/
static NSMutableDictionary *kMapCCode2CN = nil;
/**
* initialization meta-meta variables
*/
- (void)initializeHelper
{
if (!NBPhoneMetadataAM.class) // force linkage of NBMetadataCore.m
return;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
kMapCCode2CN = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"1", @"US", @"1", @"AG", @"1", @"AI", @"1", @"AS", @"1", @"BB", @"1", @"BM", @"1", @"BS", @"1", @"CA", @"1", @"DM", @"1", @"DO",
@"1", @"GD", @"1", @"GU", @"1", @"JM", @"1", @"KN", @"1", @"KY", @"1", @"LC", @"1", @"MP", @"1", @"MS", @"1", @"PR", @"1", @"SX",
@"1", @"TC", @"1", @"TT", @"1", @"VC", @"1", @"VG", @"1", @"VI", @"7", @"RU", @"7", @"KZ",
@"20", @"EG", @"27", @"ZA",
@"30", @"GR", @"31", @"NL", @"32", @"BE", @"33", @"FR", @"34", @"ES", @"36", @"HU", @"39", @"IT",
@"40", @"RO", @"41", @"CH", @"43", @"AT", @"44", @"GB", @"44", @"GG", @"44", @"IM", @"44", @"JE", @"45", @"DK", @"46", @"SE", @"47", @"NO", @"47", @"SJ", @"48", @"PL", @"49", @"DE",
@"51", @"PE", @"52", @"MX", @"53", @"CU", @"54", @"AR", @"55", @"BR", @"56", @"CL", @"57", @"CO", @"58", @"VE",
@"60", @"MY", @"61", @"AU", @"61", @"CC", @"61", @"CX", @"62", @"ID", @"63", @"PH", @"64", @"NZ", @"65", @"SG", @"66", @"TH",
@"81", @"JP", @"82", @"KR", @"84", @"VN", @"86", @"CN",
@"90", @"TR", @"91", @"IN", @"92", @"PK", @"93", @"AF", @"94", @"LK", @"95", @"MM", @"98", @"IR",
@"211", @"SS", @"212", @"MA", @"212", @"EH", @"213", @"DZ", @"216", @"TN", @"218", @"LY",
@"220", @"GM", @"221", @"SN", @"222", @"MR", @"223", @"ML", @"224", @"GN", @"225", @"CI", @"226", @"BF", @"227", @"NE", @"228", @"TG", @"229", @"BJ",
@"230", @"MU", @"231", @"LR", @"232", @"SL", @"233", @"GH", @"234", @"NG", @"235", @"TD", @"236", @"CF", @"237", @"CM", @"238", @"CV", @"239", @"ST",
@"240", @"GQ", @"241", @"GA", @"242", @"CG", @"243", @"CD", @"244", @"AO", @"245", @"GW", @"246", @"IO", @"247", @"AC", @"248", @"SC", @"249", @"SD",
@"250", @"RW", @"251", @"ET", @"252", @"SO", @"253", @"DJ", @"254", @"KE", @"255", @"TZ", @"256", @"UG", @"257", @"BI", @"258", @"MZ",
@"260", @"ZM", @"261", @"MG", @"262", @"RE", @"262", @"YT", @"263", @"ZW", @"264", @"NA", @"265", @"MW", @"266", @"LS", @"267", @"BW", @"268", @"SZ", @"269", @"KM",
@"290", @"SH", @"291", @"ER", @"297", @"AW", @"298", @"FO", @"299", @"GL",
@"350", @"GI", @"351", @"PT", @"352", @"LU", @"353", @"IE", @"354", @"IS", @"355", @"AL", @"356", @"MT", @"357", @"CY", @"358", @"FI",@"358", @"AX", @"359", @"BG",
@"370", @"LT", @"371", @"LV", @"372", @"EE", @"373", @"MD", @"374", @"AM", @"375", @"BY", @"376", @"AD", @"377", @"MC", @"378", @"SM", @"379", @"VA",
@"380", @"UA", @"381", @"RS", @"382", @"ME", @"385", @"HR", @"386", @"SI", @"387", @"BA", @"389", @"MK",
@"420", @"CZ", @"421", @"SK", @"423", @"LI",
@"500", @"FK", @"501", @"BZ", @"502", @"GT", @"503", @"SV", @"504", @"HN", @"505", @"NI", @"506", @"CR", @"507", @"PA", @"508", @"PM", @"509", @"HT",
@"590", @"GP", @"590", @"BL", @"590", @"MF", @"591", @"BO", @"592", @"GY", @"593", @"EC", @"594", @"GF", @"595", @"PY", @"596", @"MQ", @"597", @"SR", @"598", @"UY", @"599", @"CW", @"599", @"BQ",
@"670", @"TL", @"672", @"NF", @"673", @"BN", @"674", @"NR", @"675", @"PG", @"676", @"TO", @"677", @"SB", @"678", @"VU", @"679", @"FJ",
@"680", @"PW", @"681", @"WF", @"682", @"CK", @"683", @"NU", @"685", @"WS", @"686", @"KI", @"687", @"NC", @"688", @"TV", @"689", @"PF",
@"690", @"TK", @"691", @"FM", @"692", @"MH",
@"800", @"001", @"808", @"001",
@"850", @"KP", @"852", @"HK", @"853", @"MO", @"855", @"KH", @"856", @"LA",
@"870", @"001", @"878", @"001",
@"880", @"BD", @"881", @"001", @"882", @"001", @"883", @"001", @"886", @"TW", @"888", @"001",
@"960", @"MV", @"961", @"LB", @"962", @"JO", @"963", @"SY", @"964", @"IQ", @"965", @"KW", @"966", @"SA", @"967", @"YE", @"968", @"OM",
@"970", @"PS", @"971", @"AE", @"972", @"IL", @"973", @"BH", @"974", @"QA", @"975", @"BT", @"976", @"MN", @"977", @"NP", @"979", @"001",
@"992", @"TJ", @"993", @"TM", @"994", @"AZ", @"995", @"GE", @"996", @"KG", @"998", @"UZ",
nil];
});
}
- (NSDictionary *)CCode2CNMap{
if (!kMapCCode2CN){
[self initializeHelper];
}
return kMapCCode2CN;
}
- (void)clearHelper
{
if (kMapCCode2CN) {
[kMapCCode2CN removeAllObjects];
kMapCCode2CN = nil;
}
}
- (NSArray*)getAllMetadata
{
NSArray *countryCodes = [NSLocale ISOCountryCodes];
NSMutableArray *resultMetadata = [[NSMutableArray alloc] init];
for (NSString *countryCode in countryCodes) {
id countryDictionaryInstance = [NSDictionary dictionaryWithObject:countryCode forKey:NSLocaleCountryCode];
NSString *identifier = [NSLocale localeIdentifierFromComponents:countryDictionaryInstance];
NSString *country = [[NSLocale currentLocale] displayNameForKey:NSLocaleIdentifier value:identifier];
NSMutableDictionary *countryMeta = [[NSMutableDictionary alloc] init];
if (country) {
[countryMeta setObject:country forKey:@"name"];
}
if (countryCode) {
[countryMeta setObject:countryCode forKey:@"code"];
}
NBPhoneMetaData *metaData = [self getMetadataForRegion:countryCode];
if (metaData) {
[countryMeta setObject:metaData forKey:@"metadata"];
}
[resultMetadata addObject:countryMeta];
}
return resultMetadata;
}
- (NSArray *)regionCodeFromCountryCode:(NSNumber *)countryCodeNumber
{
[self initializeHelper];
id res = nil;
#if TESTING==1
res = [NBMetadataCoreTestMapper ISOCodeFromCallingNumber:[countryCodeNumber stringValue]];
#else
res = [NBMetadataCoreMapper ISOCodeFromCallingNumber:[countryCodeNumber stringValue]];
#endif
if (res && [res isKindOfClass:[NSArray class]] && [((NSArray*)res) count] > 0) {
return res;
}
return nil;
}
- (NSString *)countryCodeFromRegionCode:(NSString* )regionCode
{
[self initializeHelper];
id res = [kMapCCode2CN objectForKey:regionCode];
if (res) {
return res;
}
return nil;
}
- (NSString *)stringByTrimming:(NSString *)aString
{
if (aString == nil || aString.length <= 0) return aString;
aString = [self normalizeNonBreakingSpace:aString];
NSString *aRes = @"";
NSArray *newlines = [aString componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
for (NSString *line in newlines) {
NSString *performedString = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
if (performedString.length > 0) {
aRes = [aRes stringByAppendingString:performedString];
}
}
if (newlines.count <= 0) {
return aString;
}
return aRes;
}
- (NSString *)normalizeNonBreakingSpace:(NSString *)aString
{
return [aString stringByReplacingOccurrencesOfString:NB_NON_BREAKING_SPACE withString:@" "];
}
/**
* Returns the metadata for the given region code or {@code nil} if the region
* code is invalid or unknown.
*
* @param {?string} regionCode
* @return {i18n.phonenumbers.PhoneMetadata}
*/
- (NBPhoneMetaData *)getMetadataForRegion:(NSString *)regionCode
{
[self initializeHelper];
if ([NBMetadataHelper hasValue:regionCode] == NO) {
return nil;
}
regionCode = [regionCode uppercaseString];
if (_cachedMetaDataKey && [_cachedMetaDataKey isEqualToString:regionCode]) {
return _cachedMetaData;
}
NSString *className = [NSString stringWithFormat:@"%@%@", NB_CLASS_PREFIX, regionCode];
Class metaClass = NSClassFromString(className);
if (metaClass) {
NBPhoneMetaData *metadata = [[metaClass alloc] init];
_cachedMetaData = metadata;
_cachedMetaDataKey = regionCode;
return metadata;
}
return nil;
}
/**
* @param {number} countryCallingCode
* @return {i18n.phonenumbers.PhoneMetadata}
*/
- (NBPhoneMetaData *)getMetadataForNonGeographicalRegion:(NSNumber *)countryCallingCode
{
NSString *countryCallingCodeStr = [NSString stringWithFormat:@"%@", countryCallingCode];
return [self getMetadataForRegion:countryCallingCodeStr];
}
#pragma mark - Regular expression Utilities -
+ (BOOL)hasValue:(NSString*)string
{
static dispatch_once_t onceToken;
static NSCharacterSet *whitespaceCharSet = nil;
dispatch_once(&onceToken, ^{
NSMutableCharacterSet *spaceCharSet = [NSMutableCharacterSet characterSetWithCharactersInString:NB_NON_BREAKING_SPACE];
[spaceCharSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
whitespaceCharSet = spaceCharSet;
});
if (string == nil || [string stringByTrimmingCharactersInSet:whitespaceCharSet].length <= 0) {
return NO;
}
return YES;
}
@end
+22
View File
@@ -0,0 +1,22 @@
//
// NBPhoneNumberFormat.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
@interface NBNumberFormat : NSObject
// from phonemetadata.pb.js
/* 1 */ @property (nonatomic, strong) NSString *pattern;
/* 2 */ @property (nonatomic, strong) NSString *format;
/* 3 */ @property (nonatomic, strong) NSMutableArray *leadingDigitsPatterns;
/* 4 */ @property (nonatomic, strong) NSString *nationalPrefixFormattingRule;
/* 6 */ @property (nonatomic, assign) BOOL nationalPrefixOptionalWhenFormatting;
/* 5 */ @property (nonatomic, strong) NSString *domesticCarrierCodeFormattingRule;
- (id)initWithPattern:(NSString *)pattern withFormat:(NSString *)format withLeadingDigitsPatterns:(NSMutableArray *)leadingDigitsPatterns withNationalPrefixFormattingRule:(NSString *)nationalPrefixFormattingRule whenFormatting:(BOOL)nationalPrefixOptionalWhenFormatting withDomesticCarrierCodeFormattingRule:(NSString *)domesticCarrierCodeFormattingRule;
@end
+97
View File
@@ -0,0 +1,97 @@
//
// NBPhoneNumberFormat.m
// libPhoneNumber
//
//
#import "NBNumberFormat.h"
@implementation NBNumberFormat
- (id)initWithPattern:(NSString *)pattern withFormat:(NSString *)format withLeadingDigitsPatterns:(NSMutableArray *)leadingDigitsPatterns withNationalPrefixFormattingRule:(NSString *)nationalPrefixFormattingRule whenFormatting:(BOOL)nationalPrefixOptionalWhenFormatting withDomesticCarrierCodeFormattingRule:(NSString *)domesticCarrierCodeFormattingRule
{
self = [self init];
_pattern = pattern;
_format = format;
_leadingDigitsPatterns = leadingDigitsPatterns;
_nationalPrefixFormattingRule = nationalPrefixFormattingRule;
_nationalPrefixOptionalWhenFormatting = nationalPrefixOptionalWhenFormatting;
_domesticCarrierCodeFormattingRule = domesticCarrierCodeFormattingRule;
return self;
}
- (id)init
{
self = [super init];
if (self) {
self.nationalPrefixOptionalWhenFormatting = NO;
self.leadingDigitsPatterns = [[NSMutableArray alloc] init];
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"[pattern:%@, format:%@, leadingDigitsPattern:%@, nationalPrefixFormattingRule:%@, nationalPrefixOptionalWhenFormatting:%@, domesticCarrierCodeFormattingRule:%@]",
self.pattern, self.format, self.leadingDigitsPatterns, self.nationalPrefixFormattingRule, self.nationalPrefixOptionalWhenFormatting?@"Y":@"N", self.domesticCarrierCodeFormattingRule];
}
- (id)copyWithZone:(NSZone *)zone
{
NBNumberFormat *phoneFormatCopy = [[NBNumberFormat allocWithZone:zone] init];
/*
1 @property (nonatomic, strong, readwrite) NSString *pattern;
2 @property (nonatomic, strong, readwrite) NSString *format;
3 @property (nonatomic, strong, readwrite) NSString *leadingDigitsPattern;
4 @property (nonatomic, strong, readwrite) NSString *nationalPrefixFormattingRule;
6 @property (nonatomic, assign, readwrite) BOOL nationalPrefixOptionalWhenFormatting;
5 @property (nonatomic, strong, readwrite) NSString *domesticCarrierCodeFormattingRule;
*/
phoneFormatCopy.pattern = [self.pattern copy];
phoneFormatCopy.format = [self.format copy];
phoneFormatCopy.leadingDigitsPatterns = [self.leadingDigitsPatterns copy];
phoneFormatCopy.nationalPrefixFormattingRule = [self.nationalPrefixFormattingRule copy];
phoneFormatCopy.nationalPrefixOptionalWhenFormatting = self.nationalPrefixOptionalWhenFormatting;
phoneFormatCopy.domesticCarrierCodeFormattingRule = [self.domesticCarrierCodeFormattingRule copy];
return phoneFormatCopy;
}
- (id)initWithCoder:(NSCoder*)coder
{
if (self = [super init]) {
self.pattern = [coder decodeObjectForKey:@"pattern"];
self.format = [coder decodeObjectForKey:@"format"];
self.leadingDigitsPatterns = [coder decodeObjectForKey:@"leadingDigitsPatterns"];
self.nationalPrefixFormattingRule = [coder decodeObjectForKey:@"nationalPrefixFormattingRule"];
self.nationalPrefixOptionalWhenFormatting = [[coder decodeObjectForKey:@"nationalPrefixOptionalWhenFormatting"] boolValue];
self.domesticCarrierCodeFormattingRule = [coder decodeObjectForKey:@"domesticCarrierCodeFormattingRule"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.pattern forKey:@"pattern"];
[coder encodeObject:self.format forKey:@"format"];
[coder encodeObject:self.leadingDigitsPatterns forKey:@"leadingDigitsPatterns"];
[coder encodeObject:self.nationalPrefixFormattingRule forKey:@"nationalPrefixFormattingRule"];
[coder encodeObject:[NSNumber numberWithBool:self.nationalPrefixOptionalWhenFormatting] forKey:@"nationalPrefixOptionalWhenFormatting"];
[coder encodeObject:self.domesticCarrierCodeFormattingRule forKey:@"domesticCarrierCodeFormattingRule"];
}
@end
+43
View File
@@ -0,0 +1,43 @@
//
// M2PhoneMetaData.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
@class NBPhoneNumberDesc, NBNumberFormat;
@interface NBPhoneMetaData : NSObject
// from phonemetadata.pb.js
/* 1 */ @property (nonatomic, strong) NBPhoneNumberDesc *generalDesc;
/* 2 */ @property (nonatomic, strong) NBPhoneNumberDesc *fixedLine;
/* 3 */ @property (nonatomic, strong) NBPhoneNumberDesc *mobile;
/* 4 */ @property (nonatomic, strong) NBPhoneNumberDesc *tollFree;
/* 5 */ @property (nonatomic, strong) NBPhoneNumberDesc *premiumRate;
/* 6 */ @property (nonatomic, strong) NBPhoneNumberDesc *sharedCost;
/* 7 */ @property (nonatomic, strong) NBPhoneNumberDesc *personalNumber;
/* 8 */ @property (nonatomic, strong) NBPhoneNumberDesc *voip;
/* 21 */ @property (nonatomic, strong) NBPhoneNumberDesc *pager;
/* 25 */ @property (nonatomic, strong) NBPhoneNumberDesc *uan;
/* 27 */ @property (nonatomic, strong) NBPhoneNumberDesc *emergency;
/* 28 */ @property (nonatomic, strong) NBPhoneNumberDesc *voicemail;
/* 24 */ @property (nonatomic, strong) NBPhoneNumberDesc *noInternationalDialling;
/* 9 */ @property (nonatomic, strong) NSString *codeID;
/* 10 */ @property (nonatomic, strong) NSNumber *countryCode;
/* 11 */ @property (nonatomic, strong) NSString *internationalPrefix;
/* 17 */ @property (nonatomic, strong) NSString *preferredInternationalPrefix;
/* 12 */ @property (nonatomic, strong) NSString *nationalPrefix;
/* 13 */ @property (nonatomic, strong) NSString *preferredExtnPrefix;
/* 15 */ @property (nonatomic, strong) NSString *nationalPrefixForParsing;
/* 16 */ @property (nonatomic, strong) NSString *nationalPrefixTransformRule;
/* 18 */ @property (nonatomic, assign) BOOL sameMobileAndFixedLinePattern;
/* 19 */ @property (nonatomic, strong) NSMutableArray *numberFormats;
/* 20 */ @property (nonatomic, strong) NSMutableArray *intlNumberFormats;
/* 22 */ @property (nonatomic, assign) BOOL mainCountryForCode;
/* 23 */ @property (nonatomic, strong) NSString *leadingDigits;
/* 26 */ @property (nonatomic, assign) BOOL leadingZeroPossible;
@end
+105
View File
@@ -0,0 +1,105 @@
//
// NBPhoneMetaData.m
// libPhoneNumber
//
//
#import "NBPhoneMetaData.h"
#import "NBPhoneNumberDesc.h"
#import "NBNumberFormat.h"
@implementation NBPhoneMetaData
- (id)init
{
self = [super init];
if (self) {
_numberFormats = [[NSMutableArray alloc] init];
_intlNumberFormats = [[NSMutableArray alloc] init];
_leadingZeroPossible = NO;
_mainCountryForCode = NO;
}
return self;
}
- (NSString *)description
{
return [NSString stringWithFormat:@"* codeID[%@] countryCode[%@] generalDesc[%@] fixedLine[%@] mobile[%@] tollFree[%@] premiumRate[%@] sharedCost[%@] personalNumber[%@] voip[%@] pager[%@] uan[%@] emergency[%@] voicemail[%@] noInternationalDialling[%@] internationalPrefix[%@] preferredInternationalPrefix[%@] nationalPrefix[%@] preferredExtnPrefix[%@] nationalPrefixForParsing[%@] nationalPrefixTransformRule[%@] sameMobileAndFixedLinePattern[%@] numberFormats[%@] intlNumberFormats[%@] mainCountryForCode[%@] leadingDigits[%@] leadingZeroPossible[%@]",
_codeID, _countryCode, _generalDesc, _fixedLine, _mobile, _tollFree, _premiumRate, _sharedCost, _personalNumber, _voip, _pager, _uan, _emergency, _voicemail, _noInternationalDialling, _internationalPrefix, _preferredInternationalPrefix, _nationalPrefix, _preferredExtnPrefix, _nationalPrefixForParsing, _nationalPrefixTransformRule, _sameMobileAndFixedLinePattern?@"Y":@"N", _numberFormats, _intlNumberFormats, _mainCountryForCode?@"Y":@"N", _leadingDigits, _leadingZeroPossible?@"Y":@"N"];
}
- (id)initWithCoder:(NSCoder*)coder
{
if (self = [super init]) {
_generalDesc = [coder decodeObjectForKey:@"generalDesc"];
_fixedLine = [coder decodeObjectForKey:@"fixedLine"];
_mobile = [coder decodeObjectForKey:@"mobile"];
_tollFree = [coder decodeObjectForKey:@"tollFree"];
_premiumRate = [coder decodeObjectForKey:@"premiumRate"];
_sharedCost = [coder decodeObjectForKey:@"sharedCost"];
_personalNumber = [coder decodeObjectForKey:@"personalNumber"];
_voip = [coder decodeObjectForKey:@"voip"];
_pager = [coder decodeObjectForKey:@"pager"];
_uan = [coder decodeObjectForKey:@"uan"];
_emergency = [coder decodeObjectForKey:@"emergency"];
_voicemail = [coder decodeObjectForKey:@"voicemail"];
_noInternationalDialling = [coder decodeObjectForKey:@"noInternationalDialling"];
_codeID = [coder decodeObjectForKey:@"codeID"];
_countryCode = [coder decodeObjectForKey:@"countryCode"];
_internationalPrefix = [coder decodeObjectForKey:@"internationalPrefix"];
_preferredInternationalPrefix = [coder decodeObjectForKey:@"preferredInternationalPrefix"];
_nationalPrefix = [coder decodeObjectForKey:@"nationalPrefix"];
_preferredExtnPrefix = [coder decodeObjectForKey:@"preferredExtnPrefix"];
_nationalPrefixForParsing = [coder decodeObjectForKey:@"nationalPrefixForParsing"];
_nationalPrefixTransformRule = [coder decodeObjectForKey:@"nationalPrefixTransformRule"];
_sameMobileAndFixedLinePattern = [[coder decodeObjectForKey:@"sameMobileAndFixedLinePattern"] boolValue];
_numberFormats = [coder decodeObjectForKey:@"numberFormats"];
_intlNumberFormats = [coder decodeObjectForKey:@"intlNumberFormats"];
_mainCountryForCode = [[coder decodeObjectForKey:@"mainCountryForCode"] boolValue];
_leadingDigits = [coder decodeObjectForKey:@"leadingDigits"];
_leadingZeroPossible = [[coder decodeObjectForKey:@"leadingZeroPossible"] boolValue];
}
return self;
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:_generalDesc forKey:@"generalDesc"];
[coder encodeObject:_fixedLine forKey:@"fixedLine"];
[coder encodeObject:_mobile forKey:@"mobile"];
[coder encodeObject:_tollFree forKey:@"tollFree"];
[coder encodeObject:_premiumRate forKey:@"premiumRate"];
[coder encodeObject:_sharedCost forKey:@"sharedCost"];
[coder encodeObject:_personalNumber forKey:@"personalNumber"];
[coder encodeObject:_voip forKey:@"voip"];
[coder encodeObject:_pager forKey:@"pager"];
[coder encodeObject:_uan forKey:@"uan"];
[coder encodeObject:_emergency forKey:@"emergency"];
[coder encodeObject:_voicemail forKey:@"voicemail"];
[coder encodeObject:_noInternationalDialling forKey:@"noInternationalDialling"];
[coder encodeObject:_codeID forKey:@"codeID"];
[coder encodeObject:_countryCode forKey:@"countryCode"];
[coder encodeObject:_internationalPrefix forKey:@"internationalPrefix"];
[coder encodeObject:_preferredInternationalPrefix forKey:@"preferredInternationalPrefix"];
[coder encodeObject:_nationalPrefix forKey:@"nationalPrefix"];
[coder encodeObject:_preferredExtnPrefix forKey:@"preferredExtnPrefix"];
[coder encodeObject:_nationalPrefixForParsing forKey:@"nationalPrefixForParsing"];
[coder encodeObject:_nationalPrefixTransformRule forKey:@"nationalPrefixTransformRule"];
[coder encodeObject:[NSNumber numberWithBool:_sameMobileAndFixedLinePattern] forKey:@"sameMobileAndFixedLinePattern"];
[coder encodeObject:_numberFormats forKey:@"numberFormats"];
[coder encodeObject:_intlNumberFormats forKey:@"intlNumberFormats"];
[coder encodeObject:[NSNumber numberWithBool:_mainCountryForCode] forKey:@"mainCountryForCode"];
[coder encodeObject:_leadingDigits forKey:@"leadingDigits"];
[coder encodeObject:[NSNumber numberWithBool:_leadingZeroPossible] forKey:@"leadingZeroPossible"];
}
@end
@@ -0,0 +1,14 @@
//
// NBPhoneMetaDataGenerator.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
@interface NBPhoneMetaDataGenerator : NSObject
- (void)generateMetadataClasses;
@end
@@ -0,0 +1,403 @@
//
// NBPhoneMetaDataGenerator.m
// libPhoneNumber
//
//
#import "NBPhoneMetaDataGenerator.h"
#import "NBPhoneMetaData.h"
@interface NSArray (NBAdditions)
- (id)customSafeObjectAtIndex:(NSUInteger)index;
@end
#define kNBSRCDirectoryName @"src"
#define INDENT_TAB @" "
#define STR_VAL(val) [self stringForSourceCode:val]
#define NUM_VAL(val) [self numberForSourceCode:val]
NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
@implementation NBPhoneMetaDataGenerator
- (id)init
{
self = [super init];
if (self)
{
}
return self;
}
- (void)generateMetadataClasses
{
NSDictionary *realMetadata = [self generateMetaData];
NSDictionary *testMetadata = [self generateMetaDataWithTest];
@try {
NSURL *dataPathURL= [NSURL fileURLWithPath: [self getSRCDirectoryPath]];
NSError *error = nil;
BOOL success = [dataPathURL setResourceValue: @YES forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [dataPathURL lastPathComponent], error);
}
if (![[NSFileManager defaultManager] fileExistsAtPath:[dataPathURL path]]) {
BOOL sucess = [[NSFileManager defaultManager] createDirectoryAtURL:dataPathURL withIntermediateDirectories:NO attributes:nil error:&error];
if(!sucess) {
NSLog(@"[%@] ERROR: attempting to write create MyFolder directory", [self class]);
}
}
NSDictionary *mappedRealData = [self mappingObject:realMetadata];
NSDictionary *mappedTestData = [self mappingObject:testMetadata];
[self createClassWithDictionary:mappedRealData name:@"NBMetadataCore" isTestData:NO];
[self createClassWithDictionary:mappedTestData name:@"NBMetadataCoreTest" isTestData:YES];
} @catch (NSException *exception) {
NSLog(@"Error for creating metadata classes : %@", exception.reason);
}
}
- (void)createClassWithDictionary:(NSDictionary*)data name:(NSString*)name isTestData:(BOOL)isTest
{
NSString *dataPath = [self getSRCDirectoryPath];
NSString *codeStringHeader = [self generateSourceCodeWith:data name:name type:0 isTestData:isTest];
NSString *codeStringSource = [self generateSourceCodeWith:data name:name type:1 isTestData:isTest];
NSString *headerFilePath = [NSString stringWithFormat:@"%@/%@.h", dataPath, name];
NSString *sourceFilePath = [NSString stringWithFormat:@"%@/%@.m", dataPath, name];
NSData *dataToWrite = [codeStringHeader dataUsingEncoding:NSUTF8StringEncoding];
BOOL successCreate = [[NSFileManager defaultManager] createFileAtPath:headerFilePath contents:dataToWrite attributes:nil];
dataToWrite = [codeStringSource dataUsingEncoding:NSUTF8StringEncoding];
successCreate = successCreate && [[NSFileManager defaultManager] createFileAtPath:sourceFilePath contents:dataToWrite attributes:nil];
NSString *codeMapStringHeader = [self generateMappingSourceCodeWith:data name:name type:0 isTestData:isTest];
NSString *codeMapStringSource = [self generateMappingSourceCodeWith:data name:name type:1 isTestData:isTest];
NSString *headerMapFilePath = [NSString stringWithFormat:@"%@/%@Mapper.h", dataPath, name];
NSString *sourceMapFilePath = [NSString stringWithFormat:@"%@/%@Mapper.m", dataPath, name];
NSData *mapToWrite = [codeMapStringHeader dataUsingEncoding:NSUTF8StringEncoding];
BOOL successMapCreate = [[NSFileManager defaultManager] createFileAtPath:headerMapFilePath contents:mapToWrite attributes:nil];
mapToWrite = [codeMapStringSource dataUsingEncoding:NSUTF8StringEncoding];
successMapCreate = successMapCreate && [[NSFileManager defaultManager] createFileAtPath:sourceMapFilePath contents:mapToWrite attributes:nil];
NSLog(@"Create [%@] file to...\n%@", successCreate && successMapCreate?@"success":@"fail", dataPath);
}
- (NSDictionary *)mappingObject:(NSDictionary *)parsedJSONData {
NSMutableDictionary *resMedata = [[NSMutableDictionary alloc] init];
NSDictionary *countryCodeToRegionCodeMap = [parsedJSONData objectForKey:@"countryCodeToRegionCodeMap"];
NSDictionary *countryToMetadata = [parsedJSONData objectForKey:@"countryToMetadata"];
NSLog(@"- countryCodeToRegionCodeMap count [%zu]", (unsigned long)[countryCodeToRegionCodeMap count]);
NSLog(@"- countryToMetadata count [%zu]", (unsigned long)[countryToMetadata count]);
[resMedata setObject:countryCodeToRegionCodeMap forKey:@"countryCodeToRegionCodeMap"];
[resMedata setObject:countryToMetadata forKey:@"countryToMetadata"];
return resMedata;
}
- (NSString *)genRandStringLength:(int)len
{
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random() % [letters length]]];
}
return randomString;
}
- (NSString*)indentTab:(int)depth
{
NSMutableString *resTab = [[NSMutableString alloc] initWithString:@""];
for (int i=0; i<depth; i++)
{
[resTab appendString:INDENT_TAB];
}
return resTab;
}
- (NSString *)getSRCDirectoryPath {
NSString *documentsDirectory = [self documentsDirectory];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"src"];
return dataPath;
}
- (NSString *)documentsDirectory
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
return [paths objectAtIndex:0];
}
- (NSDictionary *)generateMetaData
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"PhoneNumberMetaData" ofType:@"json"];
return [self parseJSON:filePath];
}
- (NSDictionary *)generateMetaDataWithTest
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"PhoneNumberMetaDataForTesting" ofType:@"json"];
return [self parseJSON:filePath];
}
- (NSDictionary *)parseJSON:(NSString*)filePath
{
NSDictionary *jsonRes = nil;
@try {
NSData *jsonData = [NSData dataWithContentsOfFile:filePath];
NSError *error = nil;
jsonRes = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
}
@catch (NSException *exception) {
NSLog(@"Error : %@", exception.reason);
}
return jsonRes;
}
- (NSString *)generateSourceCodeWith:(NSDictionary*)data name:(NSString*)name type:(int)type isTestData:(BOOL)isTest
{
NSString *classPrefix = isTest ? @"NBPhoneMetadataTest" : @"NBPhoneMetadata";
NSMutableString *contents = [[NSMutableString alloc] init];
[contents appendString:@"// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)\n\n"];
NSDictionary *metadata = [data objectForKey:@"countryToMetadata"];
if (type == 0) {
NSArray *allKeys = metadata.allKeys;
[contents appendString:@"#import <Foundation/Foundation.h>\n"];
[contents appendString:@"#import \"NBPhoneMetaData.h\"\n\n"];
for (NSString *key in allKeys) {
NSString *className = [NSString stringWithFormat:@"%@%@", classPrefix, key];
[contents appendFormat:@"@interface %@ : NBPhoneMetaData\n", className];
[contents appendString:@"@end\n\n"];
}
} else if (type == 1) {
NSArray *allKeys = metadata.allKeys;
[contents appendFormat:@"#import \"%@.h\"\n", name];
[contents appendString:@"#import \"NBPhoneNumberDefines.h\"\n"];
[contents appendString:@"#import \"NBPhoneNumberDesc.h\"\n\n"];
[contents appendString:@"#import \"NBNumberFormat.h\"\n\n"];
for (NSString *key in allKeys) {
NSArray *currentMetadata = [metadata objectForKey:key];
NSString *className = [NSString stringWithFormat:@"%@%@", classPrefix, key];
[contents appendFormat:@"@implementation %@\n", className];
[contents appendString:@"- (id)init\n"];
[contents appendString:@"{\n"];
[contents appendString:@" self = [super init];\n"];
[contents appendString:@" if (self) {\n"];
/* 1 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:1] name:@"self.generalDesc"]];
/* 2 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:2] name:@"self.fixedLine"]];
/* 3 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:3] name:@"self.mobile"]];
/* 4 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:4] name:@"self.tollFree"]];
/* 5 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:5] name:@"self.premiumRate"]];
/* 6 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:6] name:@"self.sharedCost"]];
/* 7 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:7] name:@"self.personalNumber"]];
/* 8 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:8] name:@"self.voip"]];
/* 21 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:21] name:@"self.pager"]];
/* 25 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:25] name:@"self.uan"]];
/* 27 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:27] name:@"self.emergency"]];
/* 28 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:28] name:@"self.voicemail"]];
/* 24 */ [contents appendString:[self phoneNumberDescWithData:[currentMetadata customSafeObjectAtIndex:24] name:@"self.noInternationalDialling"]];
/* 9 */ [contents appendFormat:@" self.codeID = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:9])];
/* 10 */ [contents appendFormat:@" self.countryCode = %@;\n", NUM_VAL([currentMetadata customSafeObjectAtIndex:10])];
/* 11 */ [contents appendFormat:@" self.internationalPrefix = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:11])];
/* 17 */ [contents appendFormat:@" self.preferredInternationalPrefix = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:17])];
/* 12 */ [contents appendFormat:@" self.nationalPrefix = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:12])];
/* 13 */ [contents appendFormat:@" self.preferredExtnPrefix = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:13])];
/* 15 */ [contents appendFormat:@" self.nationalPrefixForParsing = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:15])];
/* 16 */ [contents appendFormat:@" self.nationalPrefixTransformRule = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:16])];
/* 18 */ [contents appendFormat:@" self.sameMobileAndFixedLinePattern = %@;\n", [[currentMetadata customSafeObjectAtIndex:18] boolValue] ? @"YES":@"NO"];
/* 19 */ [contents appendString:[self phoneNumberFormatArrayWithData:[currentMetadata customSafeObjectAtIndex:19] name:@"self.numberFormats"]]; // NBNumberFormat array
/* 20 */ [contents appendString:[self phoneNumberFormatArrayWithData:[currentMetadata customSafeObjectAtIndex:20] name:@"self.intlNumberFormats"]]; // NBNumberFormat array
/* 22 */ [contents appendFormat:@" self.mainCountryForCode = %@;\n", [[currentMetadata customSafeObjectAtIndex:22] boolValue] ? @"YES":@"NO"];
/* 23 */ [contents appendFormat:@" self.leadingDigits = %@;\n", STR_VAL([currentMetadata customSafeObjectAtIndex:23])];
/* 26 */ [contents appendFormat:@" self.leadingZeroPossible = %@;\n", [[currentMetadata customSafeObjectAtIndex:26] boolValue] ? @"YES":@"NO"];
[contents appendString:@" }\n"];
[contents appendString:@" return self;\n"];
[contents appendString:@"}\n"];
[contents appendString:@"@end\n\n"];
}
}
return contents;
}
- (NSString *)generateMappingSourceCodeWith:(NSDictionary*)data name:(NSString*)name type:(int)type isTestData:(BOOL)isTest
{
NSMutableString *contents = [[NSMutableString alloc] init];
NSDictionary *mapCN2CCode = [data objectForKey:@"countryCodeToRegionCodeMap"];
NSArray *allCallingCodeKey = mapCN2CCode.allKeys;
[contents appendString:@"// DO NOT EDIT (This file was auto-generated from NBPhoneMetaDataGenerator)\n\n"];
if (type == 0) {
[contents appendString:@"#import <Foundation/Foundation.h>\n\n"];
[contents appendFormat:@"@interface %@Mapper : NSObject\n\n", name];
[contents appendString:@"+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key;\n\n"];
[contents appendString:@"@end\n\n"];
} else if (type == 1) {
[contents appendFormat:@"#import \"%@Mapper.h\"\n\n", name];
[contents appendFormat:@"@implementation %@Mapper\n\n", name];
[contents appendString:@"static NSMutableDictionary *kMapCCode2CN;\n\n"];
[contents appendString:@"+ (NSArray *)ISOCodeFromCallingNumber:(NSString *)key\n"];
[contents appendString:@"{\n"];
[contents appendString:@" static dispatch_once_t onceToken;\n"];
[contents appendString:@" dispatch_once(&onceToken, ^{\n"];
[contents appendString:@" kMapCCode2CN = [[NSMutableDictionary alloc] init];\n"];
for (NSString *callingKey in allCallingCodeKey) {
NSArray *countryCodeArray = [mapCN2CCode objectForKey:callingKey];
[contents appendString:@"\n"];
[contents appendFormat:@" NSMutableArray *countryCode%@Array = [[NSMutableArray alloc] init];\n", callingKey];
for (NSString *code in countryCodeArray) {
[contents appendFormat:@" [countryCode%@Array addObject:%@];\n", callingKey, STR_VAL(code)];
}
[contents appendFormat:@" [kMapCCode2CN setObject:countryCode%@Array forKey:%@];\n", callingKey, STR_VAL(callingKey)];
}
[contents appendString:@" });\n"];
[contents appendString:@" return [kMapCCode2CN objectForKey:key];\n"];
[contents appendString:@"}\n\n"];
[contents appendString:@"@end\n\n"];
}
return contents;
}
- (NSString *)stringForSourceCode:(id)value
{
if (value && [value isKindOfClass:[NSString class]]) {
value = [value stringByReplacingOccurrencesOfString:@"\\d" withString:@"\\\\d"];
return [NSString stringWithFormat:@"@\"%@\"", value];
}
return @"nil";
}
- (NSString *)numberForSourceCode:(id)value
{
if (value && [value isKindOfClass:[NSNumber class]]) {
return [NSString stringWithFormat:@"[NSNumber numberWithInteger:%@]", value];
}
return @"nil";
}
- (NSString *)phoneNumberDescWithData:(id)value name:(NSString *)varName
{
NSMutableString *contents = [[NSMutableString alloc] init];
NSString *initSentance = [self phoneNumberDescWithData:value];
[contents appendFormat:@" %@ = %@;\n", varName, initSentance];
return contents;
}
- (NSString *)phoneNumberDescWithData:(id)value
{
NSString *initSentance = [NSString stringWithFormat:@"[[NBPhoneNumberDesc alloc] initWithNationalNumberPattern:%@ withPossibleNumberPattern:%@ withExample:%@]",
STR_VAL([value customSafeObjectAtIndex:2]), STR_VAL([value customSafeObjectAtIndex:3]), STR_VAL([value customSafeObjectAtIndex:6])];
return initSentance;
}
- (NSString *)phoneNumberFormatWithData:(id)value name:(NSString *)varName
{
NSMutableString *contents = [[NSMutableString alloc] init];
NSString *cleanName = [[varName stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"self" withString:@""];
NSString *arrayName = [NSString stringWithFormat:@"%@_patternArray", cleanName];
if (value != nil && [value isKindOfClass:[NSArray class]]) {
/* 1 */ NSString *pattern = [value customSafeObjectAtIndex:1];
/* 2 */ NSString *format = [value customSafeObjectAtIndex:2];
/* 4 */ NSString *nationalPrefixFormattingRule = [value customSafeObjectAtIndex:4];
/* 6 */ BOOL nationalPrefixOptionalWhenFormatting = [[value customSafeObjectAtIndex:6] boolValue];
/* 5 */ NSString *domesticCarrierCodeFormattingRule = [value customSafeObjectAtIndex:5];
[contents appendFormat:@"\n NSMutableArray *%@ = [[NSMutableArray alloc] init];\n", arrayName];
/* 3 */ id tmpData = [value customSafeObjectAtIndex:3];
if (tmpData != nil && [tmpData isKindOfClass:[NSArray class]]) {
for (id numFormat in tmpData) {
if ([numFormat isKindOfClass:[NSString class]]) {
[contents appendFormat:@" [%@ addObject:%@];\n", arrayName, STR_VAL(numFormat)];
} else {
[contents appendFormat:@" [%@ addObject:%@];\n", arrayName, STR_VAL([numFormat stringValue])];
}
}
}
NSString *initSentance = [NSString stringWithFormat:@" NBNumberFormat *%@ = [[NBNumberFormat alloc] initWithPattern:%@ withFormat:%@ withLeadingDigitsPatterns:%@ withNationalPrefixFormattingRule:%@ whenFormatting:%@ withDomesticCarrierCodeFormattingRule:%@];\n",
varName, STR_VAL(pattern), STR_VAL(format), arrayName, STR_VAL(nationalPrefixFormattingRule),
nationalPrefixOptionalWhenFormatting ? @"YES":@"NO", STR_VAL(domesticCarrierCodeFormattingRule)];
[contents appendString:initSentance];
}
return contents;
}
- (NSString *)phoneNumberFormatArrayWithData:(id)value name:(NSString *)varName
{
NSMutableString *contents = [[NSMutableString alloc] init];
NSString *cleanName = [[varName stringByReplacingOccurrencesOfString:@"." withString:@""] stringByReplacingOccurrencesOfString:@"self" withString:@""];
NSString *arrayName = [NSString stringWithFormat:@"%@_FormatArray", cleanName];
[contents appendFormat:@"\n NSMutableArray *%@ = [[NSMutableArray alloc] init];\n", arrayName];
NSInteger index = 0;
for (id data in value) {
NSString *tmpVarName = [NSString stringWithFormat:@"%@%@", cleanName, @(index++)];
NSString *initSentance = [self phoneNumberFormatWithData:data name:tmpVarName];
[contents appendString:initSentance];
[contents appendFormat:@" [%@ addObject:%@];\n", arrayName, tmpVarName];
}
[contents appendFormat:@" %@ = %@;\n", varName, arrayName];
return contents;
}
@end
+119
View File
@@ -0,0 +1,119 @@
//
// NBPhoneNumber.m
// libPhoneNumber
//
//
#import <libphonenumber/NBPhoneNumber.h>
#import <libphonenumber/NBPhoneNumberDefines.h>
@implementation NBPhoneNumber
- (id)init
{
self = [super init];
if (self) {
self.countryCodeSource = nil;
self.italianLeadingZero = NO;
self.nationalNumber = @-1;
self.countryCode = @-1;
}
return self;
}
- (void)clearCountryCodeSource
{
[self setCountryCodeSource:nil];
}
- (NBECountryCodeSource)getCountryCodeSourceOrDefault
{
if (!self.countryCodeSource) {
return NBECountryCodeSourceFROM_NUMBER_WITH_PLUS_SIGN;
}
return [self.countryCodeSource integerValue];
}
- (BOOL)isEqualToObject:(NBPhoneNumber*)otherObj
{
return [self isEqual:otherObj];
}
- (NSUInteger)hash
{
NSData *selfObject = [NSKeyedArchiver archivedDataWithRootObject:self requiringSecureCoding:false error:nil];
return [selfObject hash];
}
- (BOOL)isEqual:(id)object
{
if (![object isKindOfClass:[NBPhoneNumber class]]) {
return NO;
}
NBPhoneNumber *other = object;
return ([self.countryCode isEqualToNumber:other.countryCode]) && ([self.nationalNumber isEqualToNumber:other.nationalNumber]) &&
(self.italianLeadingZero == other.italianLeadingZero) &&
((self.extension == nil && other.extension == nil) || [self.extension isEqualToString:other.extension]);
}
- (id)copyWithZone:(NSZone *)zone
{
NBPhoneNumber *phoneNumberCopy = [[NBPhoneNumber allocWithZone:zone] init];
phoneNumberCopy.countryCode = [self.countryCode copy];
phoneNumberCopy.nationalNumber = [self.nationalNumber copy];
phoneNumberCopy.extension = [self.extension copy];
phoneNumberCopy.italianLeadingZero = self.italianLeadingZero;
phoneNumberCopy.rawInput = [self.rawInput copy];
phoneNumberCopy.countryCodeSource = [self.countryCodeSource copy];
phoneNumberCopy.preferredDomesticCarrierCode = [self.preferredDomesticCarrierCode copy];
return phoneNumberCopy;
}
- (id)initWithCoder:(NSCoder*)coder
{
if (self = [super init]) {
self.countryCode = [coder decodeObjectForKey:@"countryCode"];
self.nationalNumber = [coder decodeObjectForKey:@"nationalNumber"];
self.extension = [coder decodeObjectForKey:@"extension"];
self.italianLeadingZero = [[coder decodeObjectForKey:@"italianLeadingZero"] boolValue];
self.rawInput = [coder decodeObjectForKey:@"rawInput"];
self.countryCodeSource = [coder decodeObjectForKey:@"countryCodeSource"];
self.preferredDomesticCarrierCode = [coder decodeObjectForKey:@"preferredDomesticCarrierCode"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.countryCode forKey:@"countryCode"];
[coder encodeObject:self.nationalNumber forKey:@"nationalNumber"];
[coder encodeObject:self.extension forKey:@"extension"];
[coder encodeObject:[NSNumber numberWithBool:self.italianLeadingZero] forKey:@"italianLeadingZero"];
[coder encodeObject:self.rawInput forKey:@"rawInput"];
[coder encodeObject:self.countryCodeSource forKey:@"countryCodeSource"];
[coder encodeObject:self.preferredDomesticCarrierCode forKey:@"preferredDomesticCarrierCode"];
}
- (NSString *)description
{
return [NSString stringWithFormat:@" - countryCode[%@], nationalNumber[%@], extension[%@], italianLeadingZero[%@], rawInput[%@] countryCodeSource[%@] preferredDomesticCarrierCode[%@]", self.countryCode, self.nationalNumber, self.extension, self.italianLeadingZero?@"Y":@"N", self.rawInput, self.countryCodeSource, self.preferredDomesticCarrierCode];
}
@end
@@ -0,0 +1,7 @@
#import <libphonenumber/NBPhoneNumberDefines.h>
NSString * const NB_UNKNOWN_REGION = @"ZZ";
NSString * const NB_NON_BREAKING_SPACE = @"\u00a0";
NSString * const NB_PLUS_CHARS = @"+";
NSString * const NB_VALID_DIGITS_STRING = @"0-9-9٠-٩۰-۹";
NSString * const NB_REGION_CODE_FOR_NON_GEO_ENTITY = @"001";
+19
View File
@@ -0,0 +1,19 @@
//
// NBPhoneNumberDesc.h
// libPhoneNumber
//
//
#import <Foundation/Foundation.h>
@interface NBPhoneNumberDesc : NSObject
// from phonemetadata.pb.js
/* 2 */ @property (nonatomic, strong, readwrite) NSString *nationalNumberPattern;
/* 3 */ @property (nonatomic, strong, readwrite) NSString *possibleNumberPattern;
/* 6 */ @property (nonatomic, strong, readwrite) NSString *exampleNumber;
- (id)initWithNationalNumberPattern:(NSString *)nnp withPossibleNumberPattern:(NSString *)pnp withExample:(NSString *)exp;
@end
+107
View File
@@ -0,0 +1,107 @@
//
// NBPhoneNumberDesc.m
// libPhoneNumber
//
//
#import "NBPhoneNumberDesc.h"
@interface NSArray (NBAdditions)
- (id)customSafeObjectAtIndex:(NSUInteger)index;
@end
@implementation NBPhoneNumberDesc
- (id)initWithData:(id)data
{
NSString *nnp = nil;
NSString *pnp = nil;
NSString *exp = nil;
if (data != nil && [data isKindOfClass:[NSArray class]]) {
/* 2 */ nnp = [data customSafeObjectAtIndex:2];
/* 3 */ pnp = [data customSafeObjectAtIndex:3];
/* 6 */ exp = [data customSafeObjectAtIndex:6];
}
return [self initWithNationalNumberPattern:nnp withPossibleNumberPattern:pnp withExample:exp];
}
- (id)initWithNationalNumberPattern:(NSString *)nnp withPossibleNumberPattern:(NSString *)pnp withExample:(NSString *)exp
{
self = [self init];
if (self) {
self.nationalNumberPattern = nnp;
self.possibleNumberPattern = pnp;
self.exampleNumber = exp;
}
return self;
}
- (id)init
{
self = [super init];
if (self) {
}
return self;
}
- (id)initWithCoder:(NSCoder*)coder
{
if (self = [super init]) {
self.nationalNumberPattern = [coder decodeObjectForKey:@"nationalNumberPattern"];
self.possibleNumberPattern = [coder decodeObjectForKey:@"possibleNumberPattern"];
self.exampleNumber = [coder decodeObjectForKey:@"exampleNumber"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeObject:self.nationalNumberPattern forKey:@"nationalNumberPattern"];
[coder encodeObject:self.possibleNumberPattern forKey:@"possibleNumberPattern"];
[coder encodeObject:self.exampleNumber forKey:@"exampleNumber"];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"nationalNumberPattern[%@] possibleNumberPattern[%@] exampleNumber[%@]",
self.nationalNumberPattern, self.possibleNumberPattern, self.exampleNumber];
}
- (id)copyWithZone:(NSZone *)zone
{
NBPhoneNumberDesc *phoneDescCopy = [[NBPhoneNumberDesc allocWithZone:zone] init];
phoneDescCopy.nationalNumberPattern = [self.nationalNumberPattern copy];
phoneDescCopy.possibleNumberPattern = [self.possibleNumberPattern copy];
phoneDescCopy.exampleNumber = [self.exampleNumber copy];
return phoneDescCopy;
}
- (BOOL)isEqual:(id)object
{
if ([object isKindOfClass:[NBPhoneNumberDesc class]] == NO) {
return NO;
}
NBPhoneNumberDesc *other = object;
return [self.nationalNumberPattern isEqual:other.nationalNumberPattern] &&
[self.possibleNumberPattern isEqual:other.possibleNumberPattern] &&
[self.exampleNumber isEqual:other.exampleNumber];
}
@end
File diff suppressed because it is too large Load Diff