JsonParserByLeo/Src/JsonCore/JsonUE.mqh
Nique_372 Nique_372 049554f01e
2026-10-27 10:51:55 -05:00
367 lines
15 KiB
MQL5
This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//+------------------------------------------------------------------+
//| JsonUE.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_JSONCORE_JSONUET_MQH
#define JSONPARSERBYLEO_SRC_JSONCORE_JSONUET_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
// unescap escpae backend
#include <TSN\\BSFL\\UE.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
namespace TSN
{
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class JsonUET
{
public:
JsonUET(void) {}
~JsonUET(void) {}
//--- Tablas unescape escape
// unescape
static const uchar s_unescape_table[256];
// escape
static const uchar s_escape_table[256];
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
const uchar JsonUET::s_unescape_table[256] =
{
// char idx ascii
//--- WS \ Invalid
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//---
'"', // 0 0x22 \" = "
0xFF, // 1 0x23 #
0xFF, // 2 0x24 $
0xFF, // 3 0x25 %
0xFF, // 4 0x26 &
0xFF, // 5 0x27 ' \' = '
0xFF, // 6 0x28 (
0xFF, // 7 0x29 )
0xFF, // 8 0x2A *
0xFF, // 9 0x2B +
0xFF, // 10 0x2C ,
0xFF, // 11 0x2D -
0xFF, // 12 0x2E .
'/', // 13 0x2F / \/ = /
0xFF, // 14 0x30
0xFF, // 15 0x31 1
0xFF, // 16 0x32 2
0xFF, // 17 0x33 3
0xFF, // 18 0x34 4
0xFF, // 19 0x35 5
0xFF, // 20 0x36 6
0xFF, // 21 0x37 7
0xFF, // 22 0x38 8
0xFF, // 23 0x39 9
0xFF, // 24 0x3A :
0xFF, // 25 0x3B ;
0xFF, // 26 0x3C <
0xFF, // 27 0x3D =
0xFF, // 28 0x3E >
0xFF, // 29 0x3F ?
0xFF, // 30 0x40 @
0xFF, // 31 0x41 A
0xFF, // 32 0x42 B
0xFF, // 33 0x43 C
0xFF, // 34 0x44 D
0xFF, // 35 0x45 E
0xFF, // 36 0x46 F
0xFF, // 37 0x47 G
0xFF, // 38 0x48 H
0xFF, // 39 0x49 I
0xFF, // 40 0x4A J
0xFF, // 41 0x4B K
0xFF, // 42 0x4C L
0xFF, // 43 0x4D M
0xFF, // 44 0x4E N
0xFF, // 45 0x4F O
0xFF, // 46 0x50 P
0xFF, // 47 0x51 Q
0xFF, // 48 0x52 R
0xFF, // 49 0x53 S
0xFF, // 50 0x54 T
0xFF, // 51 0x55 U
0xFF, // 52 0x56 V
0xFF, // 53 0x57 W
0xFF, // 54 0x58 X
0xFF, // 55 0x59 Y
0xFF, // 56 0x5A Z
0xFF, // 57 0x5B [
'\\', // 58 0x5C \ \\ =
0xFF, // 59 0x5D ]
0xFF, // 60 0x5E ^
0xFF, // 61 0x5F _
0xFF, // 62 0x60 `
0xFF, // 63 0x61 a
0x08, // 64 0x62 b \b = backspace
0xFF, // 65 0x63 c
0xFF, // 66 0x64 d
0xFF, // 67 0x65 e
0x0C, // 68 0x66 f \f = form feed
0xFF, // 69 0x67 g
0xFF, // 70 0x68 h
0xFF, // 71 0x69 i
0xFF, // 72 0x6A j
0xFF, // 73 0x6B k
0xFF, // 74 0x6C l
0xFF, // 75 0x6D m
0x0A, // 76 0x6E n \n = newline
0xFF, // 77 0x6F o
0xFF, // 78 0x70 p
0xFF, // 79 0x71 q
0x0D, // 80 0x72 r \r = carriage return
0xFF, // 81 0x73 s
0x09, // 82 0x74 t \t = tab
TSN_TABLE_UNESCAPE_UNICODE, // 83 0x75 u \uXXXX unicode
0xFF, // 84 0x76 v
0xFF, // 85 0x77 w
0xFF, // 86 0x78 x
0xFF, // 87 0x79 y
0xFF, // 88 0x7A z
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x7B - 0x7F
//--- Extended / high range (0x80 - 0xFF): all invalid for JSON escape context
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
const uchar JsonUET::s_escape_table[256] =
{
//--- 0x00–0x1F: caracteres de control
TSN_TABLE_ESCAPE_UNICODE, // 0x00 \0 null
TSN_TABLE_ESCAPE_UNICODE, // 0x01 
TSN_TABLE_ESCAPE_UNICODE, // 0x02 
TSN_TABLE_ESCAPE_UNICODE, // 0x03 
TSN_TABLE_ESCAPE_UNICODE, // 0x04 
TSN_TABLE_ESCAPE_UNICODE, // 0x05 
TSN_TABLE_ESCAPE_UNICODE, // 0x06 
TSN_TABLE_ESCAPE_UNICODE, // 0x07
'b', // 0x08 \b backspace
't', // 0x09 \t tab
'n', // 0x0A \n newline
TSN_TABLE_ESCAPE_UNICODE, // 0x0B \v
'f', // 0x0C \f form feed
'r', // 0x0D \r carriage return
TSN_TABLE_ESCAPE_UNICODE, // 0x0E 
TSN_TABLE_ESCAPE_UNICODE, // 0x0F 
TSN_TABLE_ESCAPE_UNICODE, // 0x10 
TSN_TABLE_ESCAPE_UNICODE, // 0x11 
TSN_TABLE_ESCAPE_UNICODE, // 0x12 
TSN_TABLE_ESCAPE_UNICODE, // 0x13 
TSN_TABLE_ESCAPE_UNICODE, // 0x14 
TSN_TABLE_ESCAPE_UNICODE, // 0x15 
TSN_TABLE_ESCAPE_UNICODE, // 0x16 
TSN_TABLE_ESCAPE_UNICODE, // 0x17 
TSN_TABLE_ESCAPE_UNICODE, // 0x18 
TSN_TABLE_ESCAPE_UNICODE, // 0x19 
TSN_TABLE_ESCAPE_UNICODE, // 0x1A 
TSN_TABLE_ESCAPE_UNICODE, // 0x1B
TSN_TABLE_ESCAPE_UNICODE, // 0x1C 
TSN_TABLE_ESCAPE_UNICODE, // 0x1D 
TSN_TABLE_ESCAPE_UNICODE, // 0x1E 
TSN_TABLE_ESCAPE_UNICODE, // 0x1F 
//--- 0x20–0x21: imprimibles
0xFF, // 0x20 ' ' space
0xFF, // 0x21 !
//--- 0x22: comilla doble
'"', // 0x22 \"
//--- 0x23–0x26: imprimibles
0xFF, // 0x23 #
0xFF, // 0x24 $
0xFF, // 0x25 %
0xFF, // 0x26 &
//--- 0x27: comilla simple
0xFF, // 0x27 \'
//--- 0x28–0x2E: imprimibles
0xFF, // 0x28 (
0xFF, // 0x29 )
0xFF, // 0x2A *
0xFF, // 0x2B +
0xFF, // 0x2C ,
0xFF, // 0x2D -
0xFF, // 0x2E .
//--- 0x2F: slash
'/', // 0x2F \/
//--- 0x30–0x5B: imprimibles
0xFF, // 0x30 0
0xFF, // 0x31 1
0xFF, // 0x32 2
0xFF, // 0x33 3
0xFF, // 0x34 4
0xFF, // 0x35 5
0xFF, // 0x36 6
0xFF, // 0x37 7
0xFF, // 0x38 8
0xFF, // 0x39 9
0xFF, // 0x3A :
0xFF, // 0x3B ;
0xFF, // 0x3C <
0xFF, // 0x3D =
0xFF, // 0x3E >
0xFF, // 0x3F ?
0xFF, // 0x40 @
0xFF, // 0x41 A
0xFF, // 0x42 B
0xFF, // 0x43 C
0xFF, // 0x44 D
0xFF, // 0x45 E
0xFF, // 0x46 F
0xFF, // 0x47 G
0xFF, // 0x48 H
0xFF, // 0x49 I
0xFF, // 0x4A J
0xFF, // 0x4B K
0xFF, // 0x4C L
0xFF, // 0x4D M
0xFF, // 0x4E N
0xFF, // 0x4F O
0xFF, // 0x50 P
0xFF, // 0x51 Q
0xFF, // 0x52 R
0xFF, // 0x53 S
0xFF, // 0x54 T
0xFF, // 0x55 U
0xFF, // 0x56 V
0xFF, // 0x57 W
0xFF, // 0x58 X
0xFF, // 0x59 Y
0xFF, // 0x5A Z
0xFF, // 0x5B [
//--- 0x5C: backslash
'\\', // 0x5C \\
//--- 0x5D–0x7E: imprimibles
0xFF, // 0x5D ]
0xFF, // 0x5E ^
0xFF, // 0x5F _
0xFF, // 0x60 `
0xFF, // 0x61 a
0xFF, // 0x62 b
0xFF, // 0x63 c
0xFF, // 0x64 d
0xFF, // 0x65 e
0xFF, // 0x66 f
0xFF, // 0x67 g
0xFF, // 0x68 h
0xFF, // 0x69 i
0xFF, // 0x6A j
0xFF, // 0x6B k
0xFF, // 0x6C l
0xFF, // 0x6D m
0xFF, // 0x6E n
0xFF, // 0x6F o
0xFF, // 0x70 p
0xFF, // 0x71 q
0xFF, // 0x72 r
0xFF, // 0x73 s
0xFF, // 0x74 t
0xFF, // 0x75 u
0xFF, // 0x76 v
0xFF, // 0x77 w
0xFF, // 0x78 x
0xFF, // 0x79 y
0xFF, // 0x7A z
0xFF, // 0x7B {
0xFF, // 0x7C |
0xFF, // 0x7D }
0xFF, // 0x7E ~
//--- 0x7F: DEL (control)
TSN_TABLE_ESCAPE_UNICODE, // 0x7F 
//--- 0x80–0xFF: extended ASCII → \uXXXX
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0x80–0x87
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, // 0x88–0x8F
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0x90–0x97
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0x98–0x9F
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xA0–0xA7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xA8–0xAF
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xB0–0xB7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xB8–0xBF
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xC0–0xC7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xC8–0xCF
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xD0–0xD7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xD8–0xDF
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xE0–0xE7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xE8–0xEF
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xF0–0xF7
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE,
TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, TSN_TABLE_ESCAPE_UNICODE, // 0xF8–0xFF
};
//+------------------------------------------------------------------+
//| Alias para facilitar |
//+------------------------------------------------------------------+
//--- uet
#define JSONPBL_UET_JSCLASS TSN::JsonUET
//--- make
#define JSONPBL_MAKESTRING(RAW, I, LEN, STR) TSN::CBSFLUnescape::MakeString<JSONPBL_UET_JSCLASS>(RAW, (I), (LEN), STR)
#define JSONPBL_MAKEHASH(RAW, I, LEN, HASH) TSN::CBSFLUnescape::MakeHash<JSONPBL_UET_JSCLASS>(RAW, (I), (LEN), HASH)
#define JSONPBL_MAKEUARR(RAW, I, LEN, UARRAY, POS, SURRO) TSN::CBSFLUnescape::MakeUArray<JSONPBL_UET_JSCLASS, SURRO>(RAW, (I), (LEN), UARRAY, POS)
//---
#define JSONPBL_UET_ESCAPE_GET(POS) TSN::JsonUET::s_escape_table[POS];
//---
}
//+------------------------------------------------------------------+
#endif // JSONPARSERBYLEO_SRC_JSONCORE_JSONUET_MQH