//+------------------------------------------------------------------+ //| JsonDefines.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/ | //+------------------------------------------------------------------+ #ifndef TSNPARSERIN_CPP_DLL #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/" #property strict #endif // TSNPARSERIN_CPP_DLL #ifndef JSONPARSERBYLEO_SRC_JSONCORE_JSONDEFINES_MQH #define JSONPARSERBYLEO_SRC_JSONCORE_JSONDEFINES_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Siempre #include "..\\..\\..\\TsnTables\\Src\\Misce.mqh" #include "..\\..\\..\\TsnTables\\Src\\ParsersBasic.mqh" //---- #ifndef TSNPARSERIN_CPP_DLL // para bit tricks #include // tabla para conversiones de ext #include "..\\Tables\\Table.mqh" // main base (dom base) #include // utildiades foramtes de errores, etc #include // unescap escpae backend #include // dom backend #include #else // TSNPARSERIN_CPP_DLL #include #endif // TSNPARSERIN_CPP_DLL //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| Estructura base | //+------------------------------------------------------------------+ struct CJsonNode; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #ifndef JSONPARSERBYLEO_MAX_STACK #define JSONPARSERBYLEO_MAX_STACK (256) #endif // JSONPARSERBYLEO_MAX_STACK //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define JSONPBL_MAKESTRING(RAW, I, LEN, STR) CBSFLUnescape::MakeString(RAW, I, LEN, STR) //+------------------------------------------------------------------+ //| Defines | //+------------------------------------------------------------------+ //--- Extensiones extra (naming) #define TSN_JSON_EXT_JSONTC ("jsontc") //--- enum ENUM_JSON_VTYPE { JSON_VTYPE_ARR, JSON_VTYPE_OBJ, JSON_VTYPE_UINTEGER, JSON_VTYPE_INTEGER, JSON_VTYPE_REAL, JSON_VTYPE_BOOLEAN, JSON_VTYPE_STRING, JSON_VTYPE_NULL, JSON_VTYPE_KEY, //--- JSON_VTYPE_TOTAL, }; //--- enum ENUM_TSN_JSON_TOKEN { TSN_JSON_TOK_NUMBER_NEG = 0, TSN_JSON_TOK_NUMBER, TSN_JSON_TOK_STRING, TSN_JSON_TOK_BOOL_TRUE, TSN_JSON_TOK_BOOL_FALSE, TSN_JSON_TOK_NULL, TSN_JSON_TOK_COMMA, TSN_JSON_TOK_LLAVE_INI, TSN_JSON_TOK_COR_INI, TSN_JSON_TOK_LLAVE_END, TSN_JSON_TOK_COR_END, TSN_JSON_TOK_KEY, TSN_JSON_TOK_INVALID, //--- TSN_JSON_TOK_SAX_NO_NEXT_KEY, TSN_JSON_TOK_SAX_COR_INI, TSN_JSON_TOK_SAX_LLAVE_INI, TSN_JSON_TOK_SAX_FIND_KEY, TSN_JSON_TOK_SAX_COM_KEY, TSN_JSON_TOK_SAX_DBL, TSN_JSON_TOK_SAX_DOS_PUNTOS, TSN_JSON_TOK_SAX_SLOW_PATH_FIND }; //--- #define TSN_JSON_F_NUMBER_N (1) #define TSN_JSON_F_NUMBER (2) #define TSN_JSON_F_STRING (4) #define TSN_JSON_F_BTRUE (8) #define TSN_JSON_F_BFALSE (16) #define TSN_JSON_F_NULL (32) #define TSN_JSON_F_COMMA (64) #define TSN_JSON_F_INI_LLAVE (128) #define TSN_JSON_F_INI_COR (256) #define TSN_JSON_F_FIN_LLAVE (512) #define TSN_JSON_F_FIN_COR (1024) #define TSN_JSON_F_KEY (2048) // igual nadies da con el #define TSN_JSON_F_S (4096) //--- T: // obj=1 // arr=0 #define TSN_JSON_MAKE_STATE(T) ((1u << (TSN_JSON_TOK_COR_END - (T))) | TSN_JSON_F_COMMA) //--- Combinaciones // and (1 | 2 | 4 | 8 | 16 | ) #define TSN_JSON_F_ALL_VALUES (TSN_JSON_F_NUMBER_N|TSN_JSON_F_NUMBER|TSN_JSON_F_STRING|TSN_JSON_F_BTRUE|TSN_JSON_F_BFALSE|TSN_JSON_F_NULL) //--- #define TSN_JSON_NUM_TOKS (12) //--- #define TSN_JSON_F_ALL_I_VAL (TSN_JSON_F_ALL_VALUES | TSN_JSON_F_INI_COR | TSN_JSON_F_INI_LLAVE) // caso espeical dado qeu en [ ahiu mismo en caso de cor no solo se busca espeicos si no qeu tmaibne en teoria todo sasi que se le agrega (fincor]) // como token que podria. #define TSN_JSON_F_VAL_COR (TSN_JSON_F_ALL_VALUES | TSN_JSON_F_FIN_COR | TSN_JSON_F_INI_COR | TSN_JSON_F_INI_LLAVE) //--- enum ENUM_TSN_JSON_LAST_ERR { //--- TSN_JSON_NOT_ERR = 0, TSN_JSON_ERR_INVALID_EXT_FILE, TSN_JSON_ERR_INVALID_CHAR, // TSN_JSON_ERR_MALFORMED_LEN_SUP_AFTER_VAL, TSN_JSON_ERR_MALFORDMED_JSON_AFTER_VAL, TSN_JSON_ERR_MALFORDMED_JSON_AFTER_COR_INI, TSN_JSON_ERR_MALFORDMED_JSON_AFTER_LLAVE_INI, TSN_JSON_ERR_MALFORDMED_JSON_FIND_VAL, TSN_JSON_ERR_MALFODERD_KEY_EXPECTED_DOS_PUNTOS, TSN_JSON_ERR_MALFOMED_LEN_SUPERADO, TSN_JSON_ERR_JSON_NOT_FINISH, //--- TSN_JSON_ERR_LEADING_ZEROS, TSN_JSON_ERR_EXPECTED_NUMBER_AFECTER_EXP, TSN_JSON_ERR_EXPECTED_NUMBER_AFECTER_DECIMALP, //--- TSN_JSON_ERR_MALFORMED_TRUE, TSN_JSON_ERR_MALFORMED_FALSE, TSN_JSON_ERR_MALFORMED_NULL, //--- TSN_JSON_ERR_IN_MATERIALIZE_STRING_PARSE_ERR, //--- TSN_JSON_ERR_NOT_STRUCUTURAL_CHARS_FOUND, //--- TSN_JSON_ERR_INVALID_STATE_IN_PARSE_DOUBLE_E }; #define TSN_JSON_CTX_IN_OBJ (TSN_JSON_F_FIN_LLAVE|TSN_JSON_F_COMMA) #define TSN_JSON_CTX_IN_ARR (TSN_JSON_F_FIN_COR|TSN_JSON_F_COMMA) //+------------------------------------------------------------------+ //| Tabla de valores | //+------------------------------------------------------------------+ const uint8_t g_table_json_tokens[256] = { TSN_JSON_TOK_INVALID, // 0 TSN_JSON_TOK_INVALID, // 1 TSN_JSON_TOK_INVALID, // 2 TSN_JSON_TOK_INVALID, // 3 TSN_JSON_TOK_INVALID, // 4 TSN_JSON_TOK_INVALID, // 5 TSN_JSON_TOK_INVALID, // 6 TSN_JSON_TOK_INVALID, // 7 TSN_JSON_TOK_INVALID, // 8 TSN_JSON_TOK_INVALID, // 9 TSN_JSON_TOK_INVALID, // 10 TSN_JSON_TOK_INVALID, // 11 TSN_JSON_TOK_INVALID, // 12 TSN_JSON_TOK_INVALID, // 13 TSN_JSON_TOK_INVALID, // 14 TSN_JSON_TOK_INVALID, // 15 TSN_JSON_TOK_INVALID, // 16 TSN_JSON_TOK_INVALID, // 17 TSN_JSON_TOK_INVALID, // 18 TSN_JSON_TOK_INVALID, // 19 TSN_JSON_TOK_INVALID, // 20 TSN_JSON_TOK_INVALID, // 21 TSN_JSON_TOK_INVALID, // 22 TSN_JSON_TOK_INVALID, // 23 TSN_JSON_TOK_INVALID, // 24 TSN_JSON_TOK_INVALID, // 25 TSN_JSON_TOK_INVALID, // 26 TSN_JSON_TOK_INVALID, // 27 TSN_JSON_TOK_INVALID, // 28 TSN_JSON_TOK_INVALID, // 29 TSN_JSON_TOK_INVALID, // 30 TSN_JSON_TOK_INVALID, // 31 TSN_JSON_TOK_INVALID, // 32 TSN_JSON_TOK_INVALID, // 33 TSN_JSON_TOK_STRING, // 34 - " TSN_JSON_TOK_INVALID, // 35 - # TSN_JSON_TOK_INVALID, // 36 - $ TSN_JSON_TOK_INVALID, // 37 - % TSN_JSON_TOK_INVALID, // 38 - & TSN_JSON_TOK_INVALID, // 39 - ' TSN_JSON_TOK_INVALID, // 40 - ( TSN_JSON_TOK_INVALID, // 41 - ) TSN_JSON_TOK_INVALID, // 42 - * TSN_JSON_TOK_INVALID, // 43 - + TSN_JSON_TOK_COMMA, // 44 - , TSN_JSON_TOK_NUMBER_NEG, // 45 - TSN_JSON_TOK_INVALID, // 46 - . TSN_JSON_TOK_INVALID, // 47 - / TSN_JSON_TOK_NUMBER, // 48 - 0 TSN_JSON_TOK_NUMBER, // 49 - 1 TSN_JSON_TOK_NUMBER, // 50 - 2 TSN_JSON_TOK_NUMBER, // 51 - 3 TSN_JSON_TOK_NUMBER, // 52 - 4 TSN_JSON_TOK_NUMBER, // 53 - 5 TSN_JSON_TOK_NUMBER, // 54 - 6 TSN_JSON_TOK_NUMBER, // 55 - 7 TSN_JSON_TOK_NUMBER, // 56 - 8 TSN_JSON_TOK_NUMBER, // 57 - 9 TSN_JSON_TOK_INVALID, // 58 - : TSN_JSON_TOK_INVALID, // 59 - ; TSN_JSON_TOK_INVALID, // 60 - TSN_JSON_TOK_INVALID, // 61 - = TSN_JSON_TOK_INVALID, // 62 - > TSN_JSON_TOK_INVALID, // 63 - ? TSN_JSON_TOK_INVALID, // 64 - @ TSN_JSON_TOK_INVALID, // 65 - A TSN_JSON_TOK_INVALID, // 66 - B TSN_JSON_TOK_INVALID, // 67 - C TSN_JSON_TOK_INVALID, // 68 - D TSN_JSON_TOK_INVALID, // 69 - E TSN_JSON_TOK_INVALID, // 70 - F TSN_JSON_TOK_INVALID, // 71 - G TSN_JSON_TOK_INVALID, // 72 - H TSN_JSON_TOK_INVALID, // 73 - I TSN_JSON_TOK_INVALID, // 74 - J TSN_JSON_TOK_INVALID, // 75 - K TSN_JSON_TOK_INVALID, // 76 - L TSN_JSON_TOK_INVALID, // 77 - M TSN_JSON_TOK_INVALID, // 78 - N TSN_JSON_TOK_INVALID, // 79 - O TSN_JSON_TOK_INVALID, // 80 - P TSN_JSON_TOK_INVALID, // 81 - Q TSN_JSON_TOK_INVALID, // 82 - R TSN_JSON_TOK_INVALID, // 83 - S TSN_JSON_TOK_INVALID, // 84 - T TSN_JSON_TOK_INVALID, // 85 - U TSN_JSON_TOK_INVALID, // 86 - V TSN_JSON_TOK_INVALID, // 87 - W TSN_JSON_TOK_INVALID, // 88 - X TSN_JSON_TOK_INVALID, // 89 - Y TSN_JSON_TOK_INVALID, // 90 - Z TSN_JSON_TOK_COR_INI, // 91 - [ TSN_JSON_TOK_INVALID, // 92 - TSN_JSON_TOK_COR_END, // 93 - ] TSN_JSON_TOK_INVALID, // 94 - ^ TSN_JSON_TOK_INVALID, // 95 - _ TSN_JSON_TOK_INVALID, // 96 - ` TSN_JSON_TOK_INVALID, // 97 - a TSN_JSON_TOK_INVALID, // 98 - b TSN_JSON_TOK_INVALID, // 99 - c TSN_JSON_TOK_INVALID, // 100 - d TSN_JSON_TOK_INVALID, // 101 - e TSN_JSON_TOK_BOOL_FALSE, // 102 - f TSN_JSON_TOK_INVALID, // 103 - g TSN_JSON_TOK_INVALID, // 104 - h TSN_JSON_TOK_INVALID, // 105 - i TSN_JSON_TOK_INVALID, // 106 - j TSN_JSON_TOK_INVALID, // 107 - k TSN_JSON_TOK_INVALID, // 108 - l TSN_JSON_TOK_INVALID, // 109 - m TSN_JSON_TOK_NULL, // 110 - n TSN_JSON_TOK_INVALID, // 111 - o TSN_JSON_TOK_INVALID, // 112 - p TSN_JSON_TOK_INVALID, // 113 - q TSN_JSON_TOK_INVALID, // 114 - r TSN_JSON_TOK_INVALID, // 115 - s TSN_JSON_TOK_BOOL_TRUE, // 116 - t TSN_JSON_TOK_INVALID, // 117 - u TSN_JSON_TOK_INVALID, // 118 - v TSN_JSON_TOK_INVALID, // 119 - w TSN_JSON_TOK_INVALID, // 120 - x TSN_JSON_TOK_INVALID, // 121 - y TSN_JSON_TOK_INVALID, // 122 - z TSN_JSON_TOK_LLAVE_INI, // 123 - { TSN_JSON_TOK_INVALID, // 124 - | TSN_JSON_TOK_LLAVE_END, // 125 - } TSN_JSON_TOK_INVALID, // 126 - ~ TSN_JSON_TOK_INVALID, // 127 TSN_JSON_TOK_INVALID, // 128 TSN_JSON_TOK_INVALID, // 129 TSN_JSON_TOK_INVALID, // 130 TSN_JSON_TOK_INVALID, // 131 TSN_JSON_TOK_INVALID, // 132 TSN_JSON_TOK_INVALID, // 133 TSN_JSON_TOK_INVALID, // 134 TSN_JSON_TOK_INVALID, // 135 TSN_JSON_TOK_INVALID, // 136 TSN_JSON_TOK_INVALID, // 137 TSN_JSON_TOK_INVALID, // 138 TSN_JSON_TOK_INVALID, // 139 TSN_JSON_TOK_INVALID, // 140 TSN_JSON_TOK_INVALID, // 141 TSN_JSON_TOK_INVALID, // 142 TSN_JSON_TOK_INVALID, // 143 TSN_JSON_TOK_INVALID, // 144 TSN_JSON_TOK_INVALID, // 145 TSN_JSON_TOK_INVALID, // 146 TSN_JSON_TOK_INVALID, // 147 TSN_JSON_TOK_INVALID, // 148 TSN_JSON_TOK_INVALID, // 149 TSN_JSON_TOK_INVALID, // 150 TSN_JSON_TOK_INVALID, // 151 TSN_JSON_TOK_INVALID, // 152 TSN_JSON_TOK_INVALID, // 153 TSN_JSON_TOK_INVALID, // 154 TSN_JSON_TOK_INVALID, // 155 TSN_JSON_TOK_INVALID, // 156 TSN_JSON_TOK_INVALID, // 157 TSN_JSON_TOK_INVALID, // 158 TSN_JSON_TOK_INVALID, // 159 TSN_JSON_TOK_INVALID, // 160 TSN_JSON_TOK_INVALID, // 161 TSN_JSON_TOK_INVALID, // 162 TSN_JSON_TOK_INVALID, // 163 TSN_JSON_TOK_INVALID, // 164 TSN_JSON_TOK_INVALID, // 165 TSN_JSON_TOK_INVALID, // 166 TSN_JSON_TOK_INVALID, // 167 TSN_JSON_TOK_INVALID, // 168 TSN_JSON_TOK_INVALID, // 169 TSN_JSON_TOK_INVALID, // 170 TSN_JSON_TOK_INVALID, // 171 TSN_JSON_TOK_INVALID, // 172 TSN_JSON_TOK_INVALID, // 173 TSN_JSON_TOK_INVALID, // 174 TSN_JSON_TOK_INVALID, // 175 TSN_JSON_TOK_INVALID, // 176 TSN_JSON_TOK_INVALID, // 177 TSN_JSON_TOK_INVALID, // 178 TSN_JSON_TOK_INVALID, // 179 TSN_JSON_TOK_INVALID, // 180 TSN_JSON_TOK_INVALID, // 181 TSN_JSON_TOK_INVALID, // 182 TSN_JSON_TOK_INVALID, // 183 TSN_JSON_TOK_INVALID, // 184 TSN_JSON_TOK_INVALID, // 185 TSN_JSON_TOK_INVALID, // 186 TSN_JSON_TOK_INVALID, // 187 TSN_JSON_TOK_INVALID, // 188 TSN_JSON_TOK_INVALID, // 189 TSN_JSON_TOK_INVALID, // 190 TSN_JSON_TOK_INVALID, // 191 TSN_JSON_TOK_INVALID, // 192 TSN_JSON_TOK_INVALID, // 193 TSN_JSON_TOK_INVALID, // 194 TSN_JSON_TOK_INVALID, // 195 TSN_JSON_TOK_INVALID, // 196 TSN_JSON_TOK_INVALID, // 197 TSN_JSON_TOK_INVALID, // 198 TSN_JSON_TOK_INVALID, // 199 TSN_JSON_TOK_INVALID, // 200 TSN_JSON_TOK_INVALID, // 201 TSN_JSON_TOK_INVALID, // 202 TSN_JSON_TOK_INVALID, // 203 TSN_JSON_TOK_INVALID, // 204 TSN_JSON_TOK_INVALID, // 205 TSN_JSON_TOK_INVALID, // 206 TSN_JSON_TOK_INVALID, // 207 TSN_JSON_TOK_INVALID, // 208 TSN_JSON_TOK_INVALID, // 209 TSN_JSON_TOK_INVALID, // 210 TSN_JSON_TOK_INVALID, // 211 TSN_JSON_TOK_INVALID, // 212 TSN_JSON_TOK_INVALID, // 213 TSN_JSON_TOK_INVALID, // 214 TSN_JSON_TOK_INVALID, // 215 TSN_JSON_TOK_INVALID, // 216 TSN_JSON_TOK_INVALID, // 217 TSN_JSON_TOK_INVALID, // 218 TSN_JSON_TOK_INVALID, // 219 TSN_JSON_TOK_INVALID, // 220 TSN_JSON_TOK_INVALID, // 221 TSN_JSON_TOK_INVALID, // 222 TSN_JSON_TOK_INVALID, // 223 TSN_JSON_TOK_INVALID, // 224 TSN_JSON_TOK_INVALID, // 225 TSN_JSON_TOK_INVALID, // 226 TSN_JSON_TOK_INVALID, // 227 TSN_JSON_TOK_INVALID, // 228 TSN_JSON_TOK_INVALID, // 229 TSN_JSON_TOK_INVALID, // 230 TSN_JSON_TOK_INVALID, // 231 TSN_JSON_TOK_INVALID, // 232 TSN_JSON_TOK_INVALID, // 233 TSN_JSON_TOK_INVALID, // 234 TSN_JSON_TOK_INVALID, // 235 TSN_JSON_TOK_INVALID, // 236 TSN_JSON_TOK_INVALID, // 237 TSN_JSON_TOK_INVALID, // 238 TSN_JSON_TOK_INVALID, // 239 TSN_JSON_TOK_INVALID, // 240 TSN_JSON_TOK_INVALID, // 241 TSN_JSON_TOK_INVALID, // 242 TSN_JSON_TOK_INVALID, // 243 TSN_JSON_TOK_INVALID, // 244 TSN_JSON_TOK_INVALID, // 245 TSN_JSON_TOK_INVALID, // 246 TSN_JSON_TOK_INVALID, // 247 TSN_JSON_TOK_INVALID, // 248 TSN_JSON_TOK_INVALID, // 249 TSN_JSON_TOK_INVALID, // 250 TSN_JSON_TOK_INVALID, // 251 TSN_JSON_TOK_INVALID, // 252 TSN_JSON_TOK_INVALID, // 253 TSN_JSON_TOK_INVALID, // 254 TSN_JSON_TOK_INVALID // 255 }; //--- #define TSNJSON_VAL_TRUE ((uint)'r' | (uint)'u' << 8 | (uint)'e' << 16) #define TSNJSON_VAL_NULL ((uint)'u' | (uint)'l' << 8 | (uint)'l' << 16) #define TSNJSON_VAL_FALSE ((uint)'a' | (uint)'l' << 8 | (uint)'s' << 16 | (uint)'e' << 24) //--- f version (Cpp) #define TSNJSON_VAL_TRUE_F ((uint)'t' | (uint)'r' << 8 | (uint)'u' << 16 | (uint)'e' << 24) #define TSNJSON_VAL_NULL_F ((uint)'n' | (uint)'u' << 8 | (uint)'l' << 16 | (uint)'l' << 24) } //+------------------------------------------------------------------+ #endif // JSONPARSERBYLEO_SRC_JSONCORE_JSONDEFINES_MQH