scanner logic

byob32768generatorを経由してfindInLine/matchを使用可能。

scanner

findInLine, match

01. declare buffer, result, values
let buffer=``,result,values=readablestream.toValues()

findInLine

02. start loop
for(;;){

03. get result, start if
if(result=buffer.match(RegExp(`(${v})(?:\r\n|\n|$)`))){

04. set buffer
buffer=buffer.substring(result.index+result.shift().length)

05. return
return result

06. end if
}

07. return
if(!values)return values

08. get result, start if
if((result=await values.next()).done){

09. add buffer
buffer+=decoder.decode()

10. set values
values=null

11. end if, else set buffer
}else buffer+=decoder.decode(result.value,{stream:true})

12. end loop
}

match

02. declare this.match
this.match=()=>result