1.0.14 • Published 2 years ago
nv-char-escape v1.0.14
nv-char-escape
- nv-char-escape
install
- npm install nv-char-escape
usage
- from_generator(g,end,pre_padding='',esc='\')
- end is a string or a function-return-boolean: / such as end=(r)=>(r==='\n' || r=== '\r') /
- pre_padding is a string or a string-generator
example
const cmmn = require("nv-char-escape").cmmn
> cmmn.STATE_DICT
{
init: 0,
executing: 1,
succ: 2,
eof: 3,
backslash: 4,
x: 5,
u: 6,
o: 7
}
from string generator
const {sync_gen_from_str} = require("nv-string-stream")
var s = 'b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B"'
var g = sync_gen_from_str(s)
var pre_padding = '@\\t@\\'
var d = cmmn.from_generator(g,'"',pre_padding,'\\')
{
state: 2, //STATE_DICT.succ end-with end-char '"'
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: 'B',
ch: '',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
eval('var xx=`'+s+'`')
'@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB"'
> '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB' === d.rslt
true
>
//end when stream finish, eof
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B'
var g = sync_gen_from_str(s)
cmmn.from_generator(g)
>
{
state: 3, //cmmn.STATE_DICT.eof
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: 'B',
ch: '',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
>
//end with backslash ,state = backslash
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B\\'
var g = sync_gen_from_str(s)
cmmn.from_generator(g)
>
{
state: 4, //STATE_DICT.backslash
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: '',
ch: '\\',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
>
unfinished \x \u oct
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B\\u00'
var g = sync_gen_from_str(s)
cmmn.from_generator(g)
/*
{
state: 6,
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: '',
ch: '\\u00',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
*/
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B\\x1'
var g = sync_gen_from_str(s)
cmmn.from_generator(g)
/*
{
state: 5,
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: '',
ch: '\\x1',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
>
>
*/
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B\\02'
var g = sync_gen_from_str(s)
cmmn.from_generator(g)
> cmmn.from_generator(g)
{
state: 7,
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: '',
ch: '\\02',
rslt: '@\t@\b\x0B@\x00@\x01\x02@\\@\x00@\x00\x01@\x00\x01\x00@A@AB'
}
>
without store rslt , when the string very big,
const cmmn = require("nv-char-escape").cmmn
const {sync_gen_from_str} = require("nv-string-stream")
var s = 'b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B"'
var g = sync_gen_from_str(s)
var pre_padding = '@\\t@\\'
var inited = cmmn.init(g,'"',pre_padding,'\\',false);
var ng = cmmn.gen(inited)
/*
> ng.next()
{ value: '@', done: false }
> ng.next()
{ value: '\t', done: false }
> ng.next()
{ value: '@', done: false }
> ng.next()
{ value: '\b', done: false }
> ng.next()
{ value: '\x0B', done: false }
> ng.next()
{ value: '@', done: false }
> ng.next()
{ value: '\x00', done: false }
> ng.next()
{ value: '@', done: false }
......
*/
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B'
var g = sync_gen_from_str(s)
var inited = cmmn.init(g,'"',pre_padding,'\\',false);
var ng = cmmn.gen(inited)
/*
> Array.from(ng)
[
'@', '\t', '@', '@',
'\t', '@', '\b', '\x0B',
'@', '\x00', '@', '\x01',
'\x02', '@', '\\', '@',
'\x00', '@', '\x00', '\x01',
'@', '\x00', '\x01', '\x00',
'@', 'A', '@', 'A',
'B'
]
> inited
{
state: 3,
eof: [Function: eof],
esc: '\\',
g: Object [Generator] {},
curr: 'B',
ch: ''
}
>
*/
var s = '@\\t@\\b\\v@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B\\'
var g = sync_gen_from_str(s)
var inited = cmmn.init(g,'"',pre_padding,'\\',false);
var ng = cmmn.gen(inited)
/*
> Array.from(ng)
[
'@', '\t', '@', '@', '\t',
'@', '\b', '\x0B', '@', '\x00',
'@', '\x01', '\x02', '@', '\\',
'@', '\x00', '@', '\x00', '\x01',
'@', '\x00', '\x01', '\x00', '@',
'A', '@', 'A', 'B', ''
]
> inited
{
state: 4,
end: [Function: end],
esc: '\\',
g: Object [Generator] {},
curr: '',
ch: '\\'
}
> cmmn.STATE_DICT.backslash
4
>
*/
escape eof
const {sync_gen_from_str} = require("nv-string-stream")
var s = '\\`\\"b\\v\\\'@\\u0000@\\u0001\\u0002@\\\\@\x00@\x00\x01@\0\01\000@\A@\A\B"'
var g = sync_gen_from_str(s)
var pre_padding = '@\\t@\\@'
var inited = cmmn.init(
g,
r=>(r==="'" || r === "`"|| r === '"'),
pre_padding,
'\\',
false
);
var ng = cmmn.gen(inited)
/*
> Array.from(ng)
[
'@', '\t', '@', '@', '`',
'"', 'b', '\x0B', "'", '@',
'\x00', '@', '\x01', '\x02', '@',
'\\', '@', '\x00', '@', '\x00',
'\x01', '@', '\x00', '\x01', '\x00',
'@', 'A', '@', 'A', 'B'
]
>
*/
###skip \\n (multiline at line-end)
var s = '@\\\n\\\\@"'
var g = sync_gen_from_str(s)
var pre_padding = '@\\t@\\@'
var inited = cmmn.init(
g,
r=>(r==="'" || r === "`"|| r === '"'),
pre_padding,
'\\',
false
);
var ng = cmmn.gen(inited)
> Array.from(ng)
[
'@', '\t', '@',
'@', '@', '\\',
'@'
]
>
char
> cmmn.escc("\b")
'\\b'
> cmmn.unescc("b")
'\b'
> cmmn.escx("\x00")
'\\x00'
> cmmn.unescx("00")
'\x00'
> cmmn.escu("\x00")
'\\u0000'
> cmmn.unescu("0000")
'\x00'
>
> char_esc.esco('a')
'\\141'
> '\141'
'a'
> char_esc.unesco('141')
'a'
>
API
from string generator
- end is a string or a function-return-boolean: / such as end=(r)=>(r==='\n' || r=== '\r') /
pre_padding is a string or a string-generator
char_esc.cmmn.STATE_DICT
char_esc.cmmn.from_generator(g,end='"',pre_padding='',esc='\')
char_esc.cmmn.gen(d) // d = char_esc.cmmn.init(g,end,pre_padding='',esc='\',false)
char_esc.cmmn.esc_handle_engine(d,max_round,cond_func,decoder,fixed=true,skip_fst_cond=false,c0=undefined,enable_rslt=false)
char_esc.cmmn.init(g,end,pre_padding='',esc='\',enable_rslt=false)
- char_esc.cmmn.is_terminated(d)
- char_esc.cmmn.handle_executing(d,enable_rslt=false)
- char_esc.cmmn.handle_escc(d,enable_rslt=false)
- char_esc.cmmn.handle_escx(d,enable_rslt=false)
- char_esc.cmmn.handle_escu(d,enable_rslt=false)
- char_esc.cmmn.handle_esco(d,enable_rslt=false)
- char_esc.cmmn.handle_esc_other(d,enable_rslt=false)
char
- char_esc.cmmn.CHAR_UNESC_DICT
- char_esc.cmmn.CHAR_ESC_DICT
- char_esc.cmmn.escc(ch)
- char_esc.cmmn.unescc(ch)
- char_esc.cmmn.escx(ch)
- char_esc.cmmn.unescx(ch2)
- char_esc.cmmn.escu(ch)
- char_esc.cmmn.unescu(ch4)
- char_esc.cmmn.esco(ch)
- char_esc.cmmn.unesco(ch3)
LICENSE
- ISC