//+------------------------------------------------------------------+ //| JsonDefines.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/" #property strict #ifndef JSONPARSERBYLEO_SRC_JSONDEFINES_MQH #define JSONPARSERBYLEO_SRC_JSONDEFINES_MQH //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- Neceistamos la tabla hex #ifndef TSNTABLE_USE_HEX_TABLE #define TSNTABLE_USE_HEX_TABLE #endif // TSNTABLE_USE_HEX_TABLE //--- Neceistamos la tabla de hexponentes #ifndef TSNTABLE_USE_POWEXP_TABLE #define TSNTABLE_USE_POWEXP_TABLE #endif // TSNTABLE_USE_POWEXP_TABLE //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #include "..\\..\\TsnTables\\Src\\Tables.mqh" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ namespace TSN { //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ //--- #define TSN_JSON_CTX_IN_VALUE (-1) #define TSN_JSON_CTX_IN_ARR (0) #define TSN_JSON_CTX_IN_OBJ (1) //--- #define TSN_JSON_BIT_START_ENDTYPE (8) //--- #define TSN_JSON_BIT_START_NUM_C (32) #define TSN_JSON_BIT_END_T (32) //--- #define TSN_JSON_BIT_STR_START_END (32) #define TSN_JSON_BIT_STR_START_HASH (32) //--- #define TSN_JSON_INITIAL_RESERVE_CINTA (256) //--- enum ENUM_JSON_VTYPE { JSON_VTYPE_INTEGER=0, JSON_VTYPE_REAL, JSON_VTYPE_BOOLEAN, // 2 JSON_VTYPE_STRING, JSON_VTYPE_NULL, JSON_VTYPE_ARR, JSON_VTYPE_OBJ, JSON_VTYPE_KEY }; //--- enum ENUM_TSN_JSON_TOKEN { TSN_JSON_TOK_NUMBER = 0, 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_FIN_KEY, TSN_JSON_TOK_KEY, // Se crea TSN_JSON_TOK_INVALID, }; //--- #define TSN_JSON_F_NUMBER (1) #define TSN_JSON_F_STRING (2) #define TSN_JSON_F_BTRUE (4) #define TSN_JSON_F_BFALSE (8) #define TSN_JSON_F_NULL (16) #define TSN_JSON_F_COMMA (32) #define TSN_JSON_F_FIN_KEY (64) #define TSN_JSON_F_FIN_COR (128) #define TSN_JSON_F_FIN_LLAVE (256) #define TSN_JSON_F_S (0) //--- Combinaciones // and (1 | 2 | 4 | 8 | 16 | ) #define TSN_JSON_F_ALL_VALUES (31) //--- #define TSN_JSON_NUM_TOKS (13) //--- const int g_json_to_f[TSN_JSON_NUM_TOKS] { TSN_JSON_F_NUMBER, TSN_JSON_F_STRING, TSN_JSON_F_BTRUE, TSN_JSON_F_BFALSE, TSN_JSON_F_NULL, TSN_JSON_F_COMMA, TSN_JSON_F_S, TSN_JSON_F_S, TSN_JSON_F_FIN_LLAVE, TSN_JSON_F_FIN_COR, TSN_JSON_F_FIN_KEY, TSN_JSON_F_S, // Aunque nunca se usara.. TSN_JSON_F_S }; //--- const int g_json_expected[2][TSN_JSON_NUM_TOKS] = { //--- In Arr { TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_NUMBER TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_STRING TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_BOOL_TRUE TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_BOOL_FALSE TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_NULL TSN_JSON_F_ALL_VALUES, // TSN_JSON_TOK_COMMA TSN_JSON_F_STRING | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_LLAVE_INI TSN_JSON_F_ALL_VALUES | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_COR_INI TSN_JSON_F_COMMA| TSN_JSON_F_FIN_COR | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_LLAVE_END TSN_JSON_F_COMMA| TSN_JSON_F_FIN_COR | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_COR_END 0, // TSN_JSON_TOK_FIN_KEY (Invalido en este contexto de array) 0, // TSN_JSON_TOK_KEY invaido 0 // TSN_JSON_TOK_INVALID }, //---In Obj { TSN_JSON_F_COMMA | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_NUMBER TSN_JSON_F_COMMA | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_STRING TSN_JSON_F_COMMA | TSN_JSON_F_FIN_LLAVE , // TSN_JSON_TOK_BOOL_TRUE TSN_JSON_F_COMMA | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_BOOL_FALSE TSN_JSON_F_COMMA | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_NULL TSN_JSON_F_STRING, // TSN_JSON_TOK_COMMA TSN_JSON_F_STRING | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_LLAVE_INI TSN_JSON_F_ALL_VALUES | TSN_JSON_F_FIN_COR, // TSN_JSON_TOK_COR_INI TSN_JSON_F_COMMA | TSN_JSON_F_FIN_COR | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_LLAVE_END TSN_JSON_F_COMMA| TSN_JSON_F_FIN_COR | TSN_JSON_F_FIN_LLAVE, // TSN_JSON_TOK_COR_END TSN_JSON_F_ALL_VALUES, // TSN_JSON_TOK_FIN_KEY TSN_JSON_F_FIN_KEY, // TSN_JSON_TOK_KEY luego de eso esperamos un fin de key 0 // TSN_JSON_TOK_INVALID } }; //--- enum ENUM_TSN_JSON_LAST_ERR { //--- TSN_JSON_NOT_ERR, TSN_JSON_ERR_INVALID_CHAR_COMMA_IN_CTX_NO_OBJ_ARR, TSN_JSON_ERR_MALFORDMED_JSON, TSN_JSON_ERR_INVALID_CHAR, TSN_JSON_ERR_MALFORMED_TRUE, TSN_JSON_ERR_MALFORMED_FALSE, TSN_JSON_ERR_MALFORMED_NULL, TSN_JSON_ERR_STRING_NOT_CLOSED, TSN_JSON_ERR_INVALID_STATE, TSN_JSON_ERR_JSON_NOT_FINISH, TSN_JSON_ERR_EXPECTED_OBJ_ARR, TSN_JSON_ERR_OVERFLOW_IN_CINTA_RESIZE, }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ #define JSON_TABLESIZE_TOKENS 92 #define JSON_MAX_VALUE_C 125 const uchar g_table_json_tokens[JSON_TABLESIZE_TOKENS] = { 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, // 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_FIN_KEY, // 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 - } }; } //+------------------------------------------------------------------+ #endif // JSONPARSERBYLEO_SRC_JSONDEFINES_MQH