@@ -375,34 +375,40 @@ function badPos(pos, bad) { if (bad) pos.bad = true; return pos }
375
375
function domTextBetween ( cm , from , to , fromLine , toLine ) {
376
376
let text = "" , closing = false , lineSep = cm . doc . lineSeparator ( )
377
377
function recognizeMarker ( id ) { return marker => marker . id == id }
378
+ function close ( ) {
379
+ if ( closing ) {
380
+ text += lineSep
381
+ closing = false
382
+ }
383
+ }
384
+ function addText ( str ) {
385
+ if ( str ) {
386
+ close ( )
387
+ text += str
388
+ }
389
+ }
378
390
function walk ( node ) {
379
391
if ( node . nodeType == 1 ) {
380
392
let cmText = node . getAttribute ( "cm-text" )
381
393
if ( cmText != null ) {
382
- if ( cmText == "" ) text += node . textContent . replace ( / \u200b / g, "" )
383
- else text += cmText
394
+ addText ( cmText || node . textContent . replace ( / \u200b / g, "" ) )
384
395
return
385
396
}
386
397
let markerID = node . getAttribute ( "cm-marker" ) , range
387
398
if ( markerID ) {
388
399
let found = cm . findMarks ( Pos ( fromLine , 0 ) , Pos ( toLine + 1 , 0 ) , recognizeMarker ( + markerID ) )
389
400
if ( found . length && ( range = found [ 0 ] . find ( ) ) )
390
- text += getBetween ( cm . doc , range . from , range . to ) . join ( lineSep )
401
+ addText ( getBetween ( cm . doc , range . from , range . to ) . join ( lineSep ) )
391
402
return
392
403
}
393
404
if ( node . getAttribute ( "contenteditable" ) == "false" ) return
405
+ let isBlock = / ^ ( p r e | d i v | p ) $ / i. test ( node . nodeName )
406
+ if ( isBlock ) close ( )
394
407
for ( let i = 0 ; i < node . childNodes . length ; i ++ )
395
408
walk ( node . childNodes [ i ] )
396
- if ( / ^ ( p r e | d i v | p ) $ / i. test ( node . nodeName ) )
397
- closing = true
409
+ if ( isBlock ) closing = true
398
410
} else if ( node . nodeType == 3 ) {
399
- let val = node . nodeValue
400
- if ( ! val ) return
401
- if ( closing ) {
402
- text += lineSep
403
- closing = false
404
- }
405
- text += val
411
+ addText ( node . nodeValue )
406
412
}
407
413
}
408
414
for ( ; ; ) {
0 commit comments