//+------------------------------------------------------------------+
//| 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