import { Lexer } from "../text/lexer/Lexer"; import { LexerMatcher } from "../text/lexer/LexerMatcher"; import { LexerMatcherLibrary } from "../text/lexer/LexerMatcherLibrary"; import { RegExpUtility } from "../text/RegExpUtitlity"; import { MultiString } from "./MultiString"; export class Country { name:MultiString; flag:string; } export class Countries { static _countryMap:Map; static _lexer:Lexer; static _createLexerAndMap() { if ( Countries._lexer != null ) { return; } let lexer = new Lexer(); let countryMap = new Map(); Countries.list.forEach( ( c )=> { lexer.addMatcher( new LexerMatcher( c.name.en, RegExpUtility.createMatcher( c.name.en ) ) ); countryMap.set( c.name.en, c ); } ); lexer.addMatcher( LexerMatcherLibrary.BREAK_MATCHER ); lexer.addMatcher( LexerMatcherLibrary.ANY_SYMBOL_MATCHER ); this._lexer = lexer; this._countryMap = countryMap; } static get lexer() { this._createLexerAndMap(); return this._lexer; } static get countryNameMap() { this._createLexerAndMap(); return this._countryMap; } static list:Country[] = [ { name:{ en: "Sweden", de: "Schweden" }, flag: "๐Ÿ‡ธ๐Ÿ‡ช" }, { name:{ en: "South Africa", de: "Sรผdafrika" }, flag: "๐Ÿ‡ฟ๐Ÿ‡ฆ" }, { name:{ en: "Netherlands", de: "Niederlande" }, flag: "๐Ÿ‡ณ๐Ÿ‡ฑ" }, { name:{ en: "Portugal", de: "Portugal" }, flag: "๐Ÿ‡ต๐Ÿ‡น" }, { name:{ en: "France", de: "Frankreich" }, flag: "๐Ÿ‡ซ๐Ÿ‡ท" }, { name:{ en: "Jamaica", de: "Jamaika" }, flag: "๐Ÿ‡ฏ๐Ÿ‡ฒ" }, { name:{ en: "Italy", de: "Italien" }, flag: "๐Ÿ‡ฎ๐Ÿ‡น" }, { name:{ en: "Argentina", de: "Argentinien" }, flag: "๐Ÿ‡ฆ๐Ÿ‡ท" }, { name:{ en: "Germany", de: "Deutschland" }, flag: "๐Ÿ‡ฉ๐Ÿ‡ช" }, { name:{ en: "Morocco", de: "Marokko" }, flag: "๐Ÿ‡ฒ๐Ÿ‡ฆ" }, { name:{ en: "Brasil", de: "Brasilien" }, flag: "๐Ÿ‡ง๐Ÿ‡ท" }, { name:{ en: "Panama", de: "Panama" }, flag: "๐Ÿ‡ต๐Ÿ‡ฆ" }, { name:{ en: "Colombia", de: "Kolumbien" }, flag: "๐Ÿ‡จ๐Ÿ‡ด" }, { name:{ en: "South Korea", de: "Sรผdkorea" }, flag: "๐Ÿ‡ฐ๐Ÿ‡ท" }, { name:{ en: "New Zealand", de: "Neuseeland" }, flag: "๐Ÿ‡ณ๐Ÿ‡ฟ" }, { name:{ en: "Swiss", de: "Schweiz" }, flag: "๐Ÿ‡จ๐Ÿ‡ญ" }, { name:{ en: "Norway", de: "Norwegen" }, flag: "๐Ÿ‡ณ๐Ÿ‡ด" }, { name:{ en: "Japan", de: "Japan" }, flag: "๐Ÿ‡ฏ๐Ÿ‡ต" }, { name:{ en: "Costa Rica", de: "Costa Rica" }, flag: "๐Ÿ‡จ๐Ÿ‡ท" }, { name:{ en: "Spain", de: "Spanien" }, flag: "๐Ÿ‡ช๐Ÿ‡ธ" }, { name:{ en: "Zambia", de: "Sambia" }, flag: "๐Ÿ‡ฟ๐Ÿ‡ฒ" }, { name:{ en: "Canada", de: "Kanada" }, flag: "๐Ÿ‡จ๐Ÿ‡ฆ" }, { name:{ en: "Ireland", de: "Irland" }, flag: "๐Ÿ‡ฎ๐Ÿ‡ช" }, { name:{ en: "USA", de: "USA" }, flag: "๐Ÿ‡บ๐Ÿ‡ธ" }, { name:{ en: "Vietnam", de: "Vietnam" }, flag: "๐Ÿ‡ป๐Ÿ‡ณ" }, { name:{ en: "Australia", de: "Australien" }, flag: "๐Ÿ‡ฆ๐Ÿ‡บ" }, { name:{ en: "Nigeria", de: "Nigerien" }, flag: "๐Ÿ‡ณ๐Ÿ‡ฌ" }, { name:{ en: "England", de: "England" }, flag: "๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ" }, { name:{ en: "Denmark", de: "Dรคnemark" }, flag: "๐Ÿ‡ฉ๐Ÿ‡ฐ" }, { name:{ en: "China", de: "China" }, flag: "๐Ÿ‡จ๐Ÿ‡ณ" }, { name:{ en: "Haiti", de: "Haiti" }, flag: "๐Ÿ‡ญ๐Ÿ‡น" }, { name:{ en: "Philippines", de: "Philippinen" }, flag: "๐Ÿ‡ต๐Ÿ‡ญ" } ] }