nl_tokens: Tries to find matched CSS property and nearest range for selection
pl_tokens: function matchedRangeForCSSProperty ( rule , selRange , isBackward ) { /** @type CSSProperty */ var property = null ; var possibleRanges , curRange = null , ix ; var list = rule . list ( ) ; var searchFn , nearestItemFn ; if ( isBackward ) { list . reverse ( ) ; searchFn = function ( p ) { return p . range ( true ) . start <= selRange . start ; } ; nearestItemFn = function ( r ) { return r . <mask> < selRange . start ; } ; } else { searchFn = function ( p ) { return p . range ( true ) . end >= selRange . end ; } ; nearestItemFn = function ( r ) { return r . end > selRange . start ; } ; } // search for nearest to selection CSS property while ( property = _ . find ( list , searchFn ) ) { possibleRanges = makePossibleRangesCSS ( property ) ; if ( isBackward ) possibleRanges . reverse ( ) ; // check if any possible range is already selected curRange = _ . find ( possibleRanges , function ( r ) { return r . equal ( selRange ) ; } ) ; if ( ! curRange ) { // no selection, select nearest item var matchedRanges = _ . filter ( possibleRanges , function ( r ) { return r . inside ( selRange . end ) ; } ) ; if ( matchedRanges . length > 1 ) { curRange = matchedRanges [ 1 ] ; break ; } if ( curRange = _ . find ( possibleRanges , nearestItemFn ) ) break ; } else { ix = _ . indexOf ( possibleRanges , curRange ) ; if ( ix != possibleRanges . length - 1 ) { curRange = possibleRanges [ ix + 1 ] ; break ; } } curRange = null ; selRange . start = selRange . end = isBackward ? property . range ( true ) . start - 1 : property . range ( true ) . end + 1 ; } return curRange ; }