@@ -185,16 +185,6 @@ export function nodeAndOffsetInLineMap(map, ch, bias) {
185
185
return { node : node , start : start , end : end , collapse : collapse , coverStart : mStart , coverEnd : mEnd }
186
186
}
187
187
188
- function getUsefulRect ( rects , bias ) {
189
- let rect = nullRect
190
- if ( bias == "left" ) for ( let i = 0 ; i < rects . length ; i ++ ) {
191
- if ( ( rect = rects [ i ] ) . left != rect . right ) break
192
- } else for ( let i = rects . length - 1 ; i >= 0 ; i -- ) {
193
- if ( ( rect = rects [ i ] ) . left != rect . right ) break
194
- }
195
- return rect
196
- }
197
-
198
188
function measureCharInner ( cm , prepared , ch , bias ) {
199
189
let place = nodeAndOffsetInLineMap ( prepared . map , ch , bias )
200
190
let node = place . node , start = place . start , end = place . end , collapse = place . collapse
@@ -204,10 +194,17 @@ function measureCharInner(cm, prepared, ch, bias) {
204
194
for ( let i = 0 ; i < 4 ; i ++ ) { // Retry a maximum of 4 times when nonsense rectangles are returned
205
195
while ( start && isExtendingChar ( prepared . line . text . charAt ( place . coverStart + start ) ) ) -- start
206
196
while ( place . coverStart + end < place . coverEnd && isExtendingChar ( prepared . line . text . charAt ( place . coverStart + end ) ) ) ++ end
207
- if ( ie && ie_version < 9 && start == 0 && end == place . coverEnd - place . coverStart )
208
- rect = node . parentNode . getBoundingClientRect ( )
209
- else
210
- rect = getUsefulRect ( range ( node , start , end ) . getClientRects ( ) , bias )
197
+ if ( ie && ie_version < 9 && start == 0 && end == place . coverEnd - place . coverStart ) {
198
+ rect = node . parentNode . getBoundingClientRect ( ) ;
199
+ } else if ( ie && cm . options . lineWrapping ) {
200
+ var rects = range ( node , start , end ) . getClientRects ( ) ;
201
+ if ( rects . length )
202
+ rect = rects [ bias == "right" ? rects . length - 1 : 0 ] ;
203
+ else
204
+ rect = nullRect ;
205
+ } else {
206
+ rect = range ( node , start , end ) . getBoundingClientRect ( ) || nullRect ;
207
+ }
211
208
if ( rect . left || rect . right || start == 0 ) break
212
209
end = start
213
210
start = start - 1
0 commit comments