lib/action/selectItem.js
function findItem(editor, isBackward, extractFn, rangeFn) {
		var content = editorUtils.outputInfo(editor).content;
		
		var contentLength = content.length;
		var itemRange, rng;
		/** @type Range */
		var prevRange = range(-1, 0);
		/** @type Range */
		var sel = range(editor.getSelectionRange());
		
		var searchPos = sel.start, loop = 100000; // endless loop protection
		while (searchPos >= 0 && searchPos < contentLength && --loop > 0) {
			if ( (itemRange = extractFn(content, searchPos, isBackward)) ) {
				if (prevRange.equal(itemRange)) {
					break;
				}
				
				prevRange = itemRange.clone();
				rng = rangeFn(itemRange.substring(content), itemRange.start, sel.clone());
				
				if (rng) {
					editor.createSelection(rng.start, rng.end);
					return true;
				} else {
					searchPos = isBackward ? itemRange.start : itemRange.end - 1;
				}
			}
			
			searchPos += isBackward ? -1 : 1;
		}
		
		return false;
	}
function findItem(editor, isBackward, extractFn, rangeFn) {
		var content = editorUtils.outputInfo(editor).content;
		
		var contentLength = content.length;
		var itemRange, rng;
		/** @type Range */
		var prevRange = range(-1, 0);
		/** @type Range */
		var sel = range(editor.getSelectionRange());
		
		var searchPos = sel.start, loop = 100000; // endless loop protection
		while (searchPos >= 0 && searchPos < contentLength && --loop > 0) {
			if ( (itemRange = extractFn(content, searchPos, isBackward)) ) {
				if (prevRange.equal(itemRange)) {
					break;
				}
				
				prevRange = itemRange.clone();
				rng = rangeFn(itemRange.substring(content), itemRange.start, sel.clone());
				
				if (rng) {
					editor.createSelection(rng.start, rng.end);
					return true;
				} else {
					searchPos = isBackward ? itemRange.start : itemRange.end - 1;
				}
			}
			
			searchPos += isBackward ? -1 : 1;
		}
		
		return false;
	}
function findItem ( editor , isBackward , extractFn , rangeFn ) { var content = editorUtils . outputInfo ( editor ) . content ; var contentLength = content . length ; var itemRange , rng ; /** @type Range */ var prevRange = range ( - 1 , 0 ) ; /** @type Range */ var sel = range ( editor . getSelectionRange ( ) ) ; var searchPos = sel . start , loop = 100000 ; // endless loop protection while ( searchPos >= 0 && searchPos < contentLength && -- loop > 0 ) { if ( ( itemRange = extractFn ( content , searchPos , isBackward ) ) ) { if ( prevRange . equal ( itemRange ) ) { break ; } prevRange = itemRange . clone ( ) ; rng = rangeFn ( itemRange . substring ( content ) , itemRange . start , sel . clone ( ) ) ; if ( rng ) { editor . createSelection ( rng . start , rng . end ) ; return true ; } else { searchPos = isBackward ? itemRange . start : itemRange . end - 1 ; } } searchPos += isBackward ? - 1 : 1 ; } return false ; }
Generic function for searching for items to select
@param {IEmmetEditor} editor
@param {Boolean} isBackward Search backward (search forward otherwise)
@param {Function} extractFn Function that extracts item content
@param {Function} rangeFn Function that search for next token range
Generic function for searching for items to select