Adds marked, [0x] refs, and hex numbers to SDQL

This commit is contained in:
Tastyfish
2016-03-20 22:13:57 -04:00
parent 1c3a8b5263
commit a18cb8c21f
2 changed files with 28 additions and 3 deletions
+15 -1
View File
@@ -367,6 +367,20 @@
v = object
else if(expression[start] == "usr")
v = usr
else if(expression[start] == "marked")
if(usr.client && usr.client.holder && usr.client.holder.marked_datum)
v = usr.client.holder.marked_datum
else
return null
else if(expression[start] == "\[" && start < expression.len)
if(lowertext(copytext(expression[start + 1], 1, 3)) != "0x")
usr << "<span class='danger'>Invalid ref syntax: [expression[start + 1]]</span>"
return null
v = locate("\[[expression[start + 1]]\]")
if(!v)
usr << "<span class='danger'>Invalid ref: [expression[start + 1]]</span>"
return null
start++
else
return null
@@ -378,7 +392,7 @@
/proc/SDQL2_tokenize(query_text)
var/list/whitespace = list(" ", "\n", "\t")
var/list/single = list("(", ")", ",", "+", "-", ".", ";")
var/list/single = list("(", ")", ",", "+", "-", ".", ";", "\[", "\]")
var/list/multi = list(
"=" = list("", "="),
"<" = list("", "=", ">"),
@@ -25,7 +25,7 @@
//
// assignments : assignment, [',' assignments]
// assignment : <variable name> '=' expression
// variable : <variable name> | <variable name> '.' variable
// variable : <variable name> | <variable name> '.' variable | '[' <hex number> ']' | '[' <hex number> ']' '.' variable
//
// bool_expression : expression comparitor expression [bool_operator bool_expression]
// expression : ( unary_expression | '(' expression ')' | value ) [binary_operator expression]
@@ -336,6 +336,13 @@
variable(i, list/node)
var/list/L = list(token(i))
node[++node.len] = L
if(token(i) == "\[")
L += token(i + 1)
i += 2
if(token(i) != "\]")
parse_error("Missing \] at end of reference.")
if(token(i + 1) == ".")
L += "."
@@ -519,7 +526,11 @@
if(token(i) == "null")
node += "null"
i++
else if(lowertext(copytext(token(i), 1, 3)) == "0x" && isnum(hex2num(copytext(token(i), 3))))
node += hex2num(copytext(token(i), 3))
i++
else if(isnum(text2num(token(i))))
node += text2num(token(i))
i++