blob: 871e94a8f33c395bf875ef52209c07836db3a3c3 [file] [log] [blame]
{
function collect() {
var ret = {};
var len = arguments.length;
for (var i=0; i<len; i++) {
for (var p in arguments[i]) {
if (arguments[i].hasOwnProperty(p)) {
ret[p] = arguments[i][p];
}
}
}
return ret;
}
}
start =
top
top
= "state" "(" p:params ")" { return { state: p } }
/ "selector" "(" p:params ")" { return { selector: p } }
/ "state=" v:value { return { state: v } }
/ "selector=" v:value { return { selector: v } }
params
= k1: key_value_pair k2:("," key_value_pair)*
{
var f = k1;
for( var i = 0; i < k2.length; i++ ) {
f = collect(f, k2[i][1])
}
return f;
}
key_value_pair
= "refinedBy=selector(" p:params ")"
{
return { refinedBy: p }
}
/ "refinedBy=state(" p:params ")"
{
return { refinedBy: p }
}
/ "startSelector=selector(" p:params ")"
{
return { startSelector: p };
}
/ "endSelector=selector(" p:params ")"
{
return { endSelector: p };
}
/ key:key "=" value:value
{
var f = {};
var num = Number(value);
f[key] = isNaN(num) ? decodeURIComponent(value): num;
return f;
}
key
= atom
value
= atom
atom
= chars:validchar+ { return chars.join(""); }
validchar
= [a-zA-Z0-9\<\>\/\[\]\:%+@.\-!\$\&\;*_]