1.0.14 • Published 2 years ago

nv-char-escape v1.0.14

Weekly downloads
213
License
ISC
Repository
-
Last release
2 years ago

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
1.0.14

2 years ago

1.0.13

3 years ago

1.0.12

3 years ago

1.0.11

3 years ago

1.0.10

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.3

3 years ago

1.0.0

3 years ago