mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 03:25:49 +01:00
Adds marked, [0x] refs, and hex numbers to SDQL
This commit is contained in:
@@ -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++
|
||||
|
||||
Reference in New Issue
Block a user