@@ -20,36 +20,47 @@ class ViewRangeBuilder {
2020
2121 constructor ( private registry : SliceRegistry ) { }
2222
23- private build0 ( node : PeritextMlNode ) : void {
23+ private build0 ( node : PeritextMlNode , depth = 0 ) : void {
24+ const skipWhitespace = depth < 2 ;
2425 if ( typeof node === 'string' ) {
26+ if ( skipWhitespace && ! node . trim ( ) ) return ;
2527 this . text += node ;
2628 return ;
2729 }
2830 const [ type , attr ] = node ;
2931 const start = this . text . length ;
3032 const length = node . length ;
3133 const inline = ! ! attr ?. inline ;
32- for ( let i = 2 ; i < length ; i ++ ) this . build0 ( node [ i ] as PeritextMlNode ) ;
3334 if ( ! ! type || type === 0 ) {
3435 let end : number = 0 , header : number = 0 ;
3536 if ( ! inline ) {
37+ this . text += '\n' ;
3638 end = start ;
3739 header =
3840 ( SliceBehavior . Marker << SliceHeaderShift . Behavior ) +
3941 ( Anchor . Before << SliceHeaderShift . X1Anchor ) +
4042 ( Anchor . Before << SliceHeaderShift . X2Anchor ) ;
41- } else {
43+ const slice : ViewSlice = [ header , start , end , type ] ;
44+ const data = attr ?. data ;
45+ if ( data ) slice . push ( data ) ;
46+ this . slices . push ( slice ) ;
47+ }
48+ }
49+ for ( let i = 2 ; i < length ; i ++ ) this . build0 ( node [ i ] as PeritextMlNode , depth + 1 ) ;
50+ if ( ! ! type || type === 0 ) {
51+ let end : number = 0 , header : number = 0 ;
52+ if ( inline ) {
4253 end = this . text . length ;
4354 const behavior : SliceBehavior = attr ?. behavior ?? SliceBehavior . Many ;
4455 header =
4556 ( behavior << SliceHeaderShift . Behavior ) +
4657 ( Anchor . Before << SliceHeaderShift . X1Anchor ) +
4758 ( Anchor . After << SliceHeaderShift . X2Anchor ) ;
59+ const slice : ViewSlice = [ header , start , end , type ] ;
60+ const data = attr ?. data ;
61+ if ( data ) slice . push ( data ) ;
62+ this . slices . push ( slice ) ;
4863 }
49- const slice : ViewSlice = [ header , start , end , type ] ;
50- const data = attr ?. data ;
51- if ( data ) slice . push ( data ) ;
52- this . slices . push ( slice ) ;
5364 }
5465 }
5566
0 commit comments