/
githubmirror
/
vgstation13
Обзор
Документация
Войти
/
githubmirror
/
vgstation13
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
Bleeding-Edge
code/modules/scripting/Options.dm
121 строка
4 KB
Exxion
Fixes all problems detected by SpacemanDMM (#35291)
01 ноя 2023, 04:39
Не верифицирован
01 ноя 2023, 04:39
2ba3079
Код
Авторство
О чём код?
/* File: Options */ // Ascii values of characters /var/const/ascii_A = 65 /var/const/ascii_Z = 90 /var/const/ascii_a = 97 /var/const/ascii_z = 122 /var/const/ascii_DOLLAR = 36 // $ /var/const/ascii_ZERO = 48 /var/const/ascii_NINE = 57 /var/const/ascii_UNDERSCORE = 95 // _ /* Class: n_scriptOptions */ /datum/n_scriptOptions/proc/CanStartID(char) //returns true if the character can start a variable, function, or keyword name (by default letters or an underscore) if(!isnum(char)) char = text2ascii(char) return (char in ascii_A to ascii_Z) || (char in ascii_a to ascii_z) || char == ascii_UNDERSCORE || char == ascii_DOLLAR /datum/n_scriptOptions/proc/IsValidIDChar(char) //returns true if the character can be in the body of a variable, function, or keyword name (by default letters, numbers, and underscore) if(!isnum(char)) char = text2ascii(char) return CanStartID(char) || IsDigit(char) /datum/n_scriptOptions/proc/IsDigit(char) if(!isnum(char)) char = text2ascii(char) return char in ascii_ZERO to ascii_NINE /datum/n_scriptOptions/proc/IsValidID(id) //returns true if all the characters in the string are okay to be in an identifier name if(!CanStartID(id)) //don't need to grab first char in id, since text2ascii does it automatically return 0 if(length(id) == 1) return 1 for(var/i=2 to length(id)) if(!IsValidIDChar(copytext(id, i, i + 1))) return 0 return 1 /* Class: nS_Options An implementation of <n_scriptOptions> for the n_Script language. */ /datum/n_scriptOptions/nS_Options var/list/symbols = list( "(", ")", "\[", "]", ";", ",", "{", "}" ) //scanner - Characters that can be in symbols /* Var: keywords An associative list used by the parser to parse keywords. Indices are strings which will trigger the keyword when parsed and the associated values are <nS_Keyword> types of which the <n_Keyword.Parse()> proc will be called. */ var/list/keywords = list( "if" = /datum/n_Keyword/nS_Keyword/kwIf, "else" = /datum/n_Keyword/nS_Keyword/kwElse, "elseif" = /datum/n_Keyword/nS_Keyword/kwElseIf, "while" = /datum/n_Keyword/nS_Keyword/kwWhile, "break" = /datum/n_Keyword/nS_Keyword/kwBreak, "continue" = /datum/n_Keyword/nS_Keyword/kwContinue, "return" = /datum/n_Keyword/nS_Keyword/kwReturn, "def" = /datum/n_Keyword/nS_Keyword/kwDef ) var/list/assign_operators = list( "=" = null, "&=" = "&", "|=" = "|", "`=" = "`", "+=" = "+", "-=" = "-", "*=" = "*", "/=" = "/", "^=" = "^", "%=" = "%" ) var/list/unary_operators = list( "!" = /datum/node/expression/operation/unary/LogicalNot, "~" = /datum/node/expression/operation/unary/BitwiseNot, "-" = /datum/node/expression/operation/unary/Minus ) var/list/binary_operators = list( "==" = /datum/node/expression/operation/binary/Equal, "!=" = /datum/node/expression/operation/binary/NotEqual, ">" = /datum/node/expression/operation/binary/Greater, "<" = /datum/node/expression/operation/binary/Less, ">=" = /datum/node/expression/operation/binary/GreaterOrEqual, "<=" = /datum/node/expression/operation/binary/LessOrEqual, "&&" = /datum/node/expression/operation/binary/LogicalAnd, "||" = /datum/node/expression/operation/binary/LogicalOr, "&" = /datum/node/expression/operation/binary/BitwiseAnd, "|" = /datum/node/expression/operation/binary/BitwiseOr, "`" = /datum/node/expression/operation/binary/BitwiseXor, "+" = /datum/node/expression/operation/binary/Add, "-" = /datum/node/expression/operation/binary/Subtract, "*" = /datum/node/expression/operation/binary/Multiply, "/" = /datum/node/expression/operation/binary/Divide, "^" = /datum/node/expression/operation/binary/Power, "%" = /datum/node/expression/operation/binary/Modulo ) /datum/n_scriptOptions/nS_Options/New() . = ..() for(var/O in assign_operators + binary_operators + unary_operators) if(!symbols.Find(O)) symbols += O