diff options
Diffstat (limited to 'src/nodejs/parse.js')
-rw-r--r-- | src/nodejs/parse.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/nodejs/parse.js b/src/nodejs/parse.js new file mode 100644 index 0000000..0338954 --- /dev/null +++ b/src/nodejs/parse.js @@ -0,0 +1,48 @@ +exports.urlToXpathObj = function urlToXpathObj(url){ + + // FIXMEresult.shift(): more validaiton + // filter stars in keys + // filter no enough arguments + + var parseKeyList = function(string){ + result = /(.+)(:?\|(.+))/.exec(string); + result.shift(); + return result; + } + + var parseBboxList = function(string){ + + result = /(.+)(:?,(.+)){3}/.exec(string); + + if(result.length != 4){ + throw "error"; + } + + result.shift(); + + return { + 'left' : result[0], + 'bottom' : result[1], + 'right' : result[2], + 'top' : result[3] + } + } + + var xp = {}; + + result = /\/(*|node|way|relation)(:?\[(.*)=(.*)\])*/.exec(url); + + xp.object=result[1]; + + for(i=2;i<=result.length;i++){ + if(result[i]==="bbox"){ + xp.bbox = parseBboxValues(result[i+1]); + } else { + xp.tag ={}; + xp.tag.keys = parseKeyList(result[i]); + xp.tag.values = parseKeyList(result[i+1]); + } + i++; + } +} + |