nv-char-chunk
- nv-char-chunk
- avoid big str copy during tokenize
install
- npm install nv-char-chunk
usage
example
const {Chunk,Cache} = require("nv-char-chunk")
var chunk =Chunk.from("{abc} {def")
chunk.forward()
chunk.forward()
chunk.forward()
chunk.forward()
chunk.forward()
/*
> chunk.curr_pos
5
> chunk.next_pos
6
>
*/
chunk.backword()
chunk.cursor
chunk.ch
/*
> chunk.cursor
[ 4, 5 ]
>
> chunk.ch
' '
*/
chunk.passed
chunk.lefted
/*
> chunk.passed
Chunk(4) [ '{', 'a', 'b', 'c' ]
>
> chunk.lefted
Chunk(6) [ '}', ' ', '{', 'd', 'e', 'f' ]
>
*/
var chunk2 = Chunk.from("} {ghi}")
chunk2.prepend(chunk.lefted)
/*
> chunk2
Chunk(13) [
'}', ' ', '{', 'd',
'e', 'f', '}', ' ',
'{', 'g', 'h', 'i',
'}'
]
>
*/
> chunk.release()
> chunk
Chunk(0) []
>
var chunk0 = Chunk.from(`[ abc d"ef"g h"`)
var chunk1 = Chunk.from(`i"j ]`)
var cache = new Cache(chunk0)
/*
> cache.chunk === chunk0
true
>
*/
var lblk = chunk0.take_tok('olblk')
/*
> lblk
{ data: '[', type: 'olblk' }
>
*/
chunk0.forward()
chunk0.forward()
cache.push_pos(chunk0.curr_pos)
chunk0.forward()
chunk0.forward()
chunk0.forward()
cache.ei = chunk0.curr_pos
cache.dtype = 'word'
/*
> cache
Cache(1) [ _Pos { type: 0, str: '', si: 2, ei: 5, dtype: 'word' } ]
*/
var word0 = cache.take_tok()
/*
> cache
Cache(0) []
> word0
{ data: 'abc', type: 'word' }
>
*/
chunk0.forward()
cache.push_pos(chunk0.curr_pos)
/*
> chunk0.ch
'd'
>
*/
chunk0.forward()
cache.ei = chunk0.curr_pos
cache.dtype = 'prefix'
chunk0.forward()
cache.push_pos(chunk0.curr_pos)
chunk0.forward()
chunk0.forward()
cache.ei = chunk0.curr_pos
cache.dtype = 'quote'
chunk0.forward()
cache.push_pos(chunk0.curr_pos)
chunk0.forward()
cache.ei = chunk0.curr_pos
cache.dtype = 'suffix'
/*
> cache
Cache(3) [
_Pos { type: 0, str: '', si: 6, ei: 7, dtype: 'prefix' },
_Pos { type: 0, str: '', si: 8, ei: 10, dtype: 'quote' },
_Pos { type: 0, str: '', si: 11, ei: 12, dtype: 'suffix' }
]
>
*/
var word1 = cache.take_tok('word');
/*
> word1
{ data: 'defg', type: 'word' }
>
*/
chunk0.forward()
cache.push_pos(chunk0.curr_pos)
chunk0.forward()
cache.ei = chunk0.curr_pos
cache.dtype = 'prefix'
chunk0.forward()
chunk1.prepend(chunk0.lefted)
chunk0.release()
var cache = new Cache(chunk1)
LICENSE