@flumens/bigu
Version:
British Isles GridRef Utils
66 lines (54 loc) • 1.58 kB
JavaScript
import GridRefParser from './GridRefParser';
import GridRefParserCI from './CI';
import GridRefParserGB from './GB';
import GridRefParserIE from './IE';
/**
* returns a GridRefParser (GB, IE or CI-specific parser) or false
* crudely tries to determine the country by trying each country in turn
*
* @param {string} rawGridRef
* @return GridRefParser|FALSE
*/
GridRefParser.factory = function (rawGridRef) {
var parser;
var cleanRef = rawGridRef.replace(/\s+/g, '').toUpperCase();
if (!cleanRef) {
return false;
}
// if canonical ref form then be more efficient
if (/^[A-Z]{1,2}\d{2}(?:[A-Z]|[NS][EW]|(?:\d{2}){0,4})?$/.test(cleanRef)) {
// have simple well-formed grid ref
if (/^.\d/.test(cleanRef)) {
parser = new GridRefParserIE();
} else {
if (cleanRef.charAt(0) === 'W') {
parser = new GridRefParserCI();
} else {
parser = new GridRefParserGB();
}
}
parser.parse_well_formed(cleanRef);
return (parser.length && !parser.error) ? parser : false;
} else {
parser = new GridRefParserGB();
parser.parse(cleanRef);
if (parser.length && !parser.error) {
return parser;
}
if (cleanRef.charAt(0) === 'W') {
parser = new GridRefParserCI();
parser.parse(cleanRef);
if (parser.length && !parser.error) {
return parser;
}
} else {
parser = new GridRefParserIE();
parser.parse(cleanRef);
if (parser.length && !parser.error) {
return parser;
}
}
}
return false;
};
export default GridRefParser;