// Common functions for lexers 'use strict'; function isWhiteSpace(ch) { return ch === 0x20; } // Check if line has zero length or contains spaces only function isEmpty(state, line) { return state.bMarks[line] + state.tShift[line] >= state.eMarks[line]; } // Scan lines from given one and return first not empty function skipEmptyLines(state, from) { for (var max = state.lineMax; from < max; from++) { if (state.bMarks[from] + state.tShift[from] < state.eMarks[from]) { break; } } return from; } // Skip spaces from given position. function skipSpaces(state, pos) { for (var max = state.src.length; pos < max; pos++) { if (!isWhiteSpace(state.src.charCodeAt(pos))) { break; } } return pos; } // Skip char codes from given position function skipChars(state, pos, code) { for (var max = state.src.length; pos < max; pos++) { if (state.src.charCodeAt(pos) !== code) { break; } } return pos; } // Skip char codes reverse from given position /*function skipCharsBack(state, pos, code, min) { for (; pos >= min; pos--) { if (code !== state.src.charCodeAt(pos)) { break; } } return pos; }*/ // cut lines range from source. function getLines(state, begin, end, keepLastLF) { var last; if (keepLastLF) { last = end < state.lineMax ? state.bMarks[end] : state.src.length; } else { last = end < state.lineMax ? state.eMarks[end - 1] : state.src.length; } return state.src.slice(state.bMarks[begin], last); } exports.isWhiteSpace = isWhiteSpace; exports.isEmpty = isEmpty; exports.skipEmptyLines = skipEmptyLines; exports.skipSpaces = skipSpaces; exports.skipChars = skipChars; exports.getLines = getLines;