function Query (query_str = '') { // Strip trailing variables query_str = query_str.indexOf('&$+') > -1 ? query_str.replace('&$+', '').trim() : query_str this.string = query_str this.module = query_str.split(' ')[0] var parts = query_str.split(' ').splice(1) this.raw = parts.join(' ') this.methods = {} this.routes = {} this.last = query_str.indexOf(' ') > -1 ? query_str.split(' ')[query_str.split(' ').length - 1] : query_str this.last_char = query_str.trim().substr(query_str.trim().length - 1, 1) for (part_id in parts) { var part = parts[part_id] // Method if (part.indexOf(':') > -1) { var key = part.indexOf(':') > -1 ? part.split(':')[0] : 'any' var value = part.indexOf(':') > -1 ? part.split(':')[1] : part this.methods[key] = parse_parameters(value) } // Port else if (part.indexOf('->') > -1) { var key = part.indexOf('->') > -1 ? part.split('->')[0] : 'any' var value = part.indexOf('->') > -1 ? part.split('->')[1] : part this.routes[key] = value } } function parse_parameters (param_str) { // Modifier if (param_str.indexOf('>>') > -1) { return parse_modifier(param_str) } else { if (param_str.indexOf('&') > -1) { return parse_sequence(param_str) } else { return parse_unit(param_str) } } return param_str } function parse_modifier (mod_str) { var h = {} var parts = mod_str.split('>>') if (parts[0].indexOf('&') > -1) { h.from = parse_sequence(parts[0]) } else { h.from = parse_unit(parts[0]) } if (parts[1].indexOf('&') > -1) { h.to = parse_sequence(parts[1]) } else { h.to = parse_unit(parts[1]) } return h } function parse_sequence (seq_str) { var a = [] var parts = seq_str.split('&') for (part_id in parts) { var part = parts[part_id] a.push(parse_unit(part)) } return a } function parse_unit (unit_str) { // Arc if (unit_str.indexOf('@') == 0) { unit_str = unit_str.substr(1, unit_str.length - 1) var clockwise = unit_str.indexOf('>') == 0 unit_str = unit_str.substr(1, unit_str.length - 1) return { x: parseInt(unit_str.split(',')[0]), y: parseInt(unit_str.split(',')[1]), clockwise: clockwise } } if (unit_str.indexOf('.') > -1 && unit_str.indexOf('/') > -1) { return unit_str } // Rect if (unit_str.indexOf('|') > -1 && unit_str.indexOf(',') > -1 && unit_str.indexOf('x') > -1) { return Object.assign(parse_unit(unit_str.split('|')[0]), parse_unit(unit_str.split('|')[1])) } // Pos if (unit_str.indexOf(',') > -1) { return { x: parseInt(unit_str.split(',')[0]), y: parseInt(unit_str.split(',')[1]) } } // Size if (unit_str.indexOf('x') > -1 && !isNaN(unit_str.split('x')[0]) && !isNaN(unit_str.split('x')[1])) { return { width: parseInt(unit_str.split('x')[0]), height: parseInt(unit_str.split('x')[1]) } } // Float if (unit_str.indexOf('.') > -1) { return parseFloat(unit_str) } // Any return unit_str } }