aboutsummaryrefslogtreecommitdiffstats
path: root/src/nodejs/parse.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/nodejs/parse.js')
-rw-r--r--src/nodejs/parse.js48
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++;
+ }
+}
+