summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/css/walkCssTokens.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/webpack/lib/css/walkCssTokens.js')
-rw-r--r--node_modules/webpack/lib/css/walkCssTokens.js775
1 files changed, 0 insertions, 775 deletions
diff --git a/node_modules/webpack/lib/css/walkCssTokens.js b/node_modules/webpack/lib/css/walkCssTokens.js
deleted file mode 100644
index 84951538..00000000
--- a/node_modules/webpack/lib/css/walkCssTokens.js
+++ /dev/null
@@ -1,775 +0,0 @@
-/*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
-*/
-
-"use strict";
-
-/**
- * @typedef {object} CssTokenCallbacks
- * @property {function(string, number): boolean=} isSelector
- * @property {function(string, number, number, number, number): number=} url
- * @property {function(string, number, number): number=} string
- * @property {function(string, number, number): number=} leftParenthesis
- * @property {function(string, number, number): number=} rightParenthesis
- * @property {function(string, number, number): number=} pseudoFunction
- * @property {function(string, number, number): number=} function
- * @property {function(string, number, number): number=} pseudoClass
- * @property {function(string, number, number): number=} atKeyword
- * @property {function(string, number, number): number=} class
- * @property {function(string, number, number): number=} identifier
- * @property {function(string, number, number): number=} id
- * @property {function(string, number, number): number=} leftCurlyBracket
- * @property {function(string, number, number): number=} rightCurlyBracket
- * @property {function(string, number, number): number=} semicolon
- * @property {function(string, number, number): number=} comma
- */
-
-/** @typedef {function(string, number, CssTokenCallbacks): number} CharHandler */
-
-// spec: https://drafts.csswg.org/css-syntax/
-
-const CC_LINE_FEED = "\n".charCodeAt(0);
-const CC_CARRIAGE_RETURN = "\r".charCodeAt(0);
-const CC_FORM_FEED = "\f".charCodeAt(0);
-
-const CC_TAB = "\t".charCodeAt(0);
-const CC_SPACE = " ".charCodeAt(0);
-
-const CC_SOLIDUS = "/".charCodeAt(0);
-const CC_REVERSE_SOLIDUS = "\\".charCodeAt(0);
-const CC_ASTERISK = "*".charCodeAt(0);
-
-const CC_LEFT_PARENTHESIS = "(".charCodeAt(0);
-const CC_RIGHT_PARENTHESIS = ")".charCodeAt(0);
-const CC_LEFT_CURLY = "{".charCodeAt(0);
-const CC_RIGHT_CURLY = "}".charCodeAt(0);
-const CC_LEFT_SQUARE = "[".charCodeAt(0);
-const CC_RIGHT_SQUARE = "]".charCodeAt(0);
-
-const CC_QUOTATION_MARK = '"'.charCodeAt(0);
-const CC_APOSTROPHE = "'".charCodeAt(0);
-
-const CC_FULL_STOP = ".".charCodeAt(0);
-const CC_COLON = ":".charCodeAt(0);
-const CC_SEMICOLON = ";".charCodeAt(0);
-const CC_COMMA = ",".charCodeAt(0);
-const CC_PERCENTAGE = "%".charCodeAt(0);
-const CC_AT_SIGN = "@".charCodeAt(0);
-
-const CC_LOW_LINE = "_".charCodeAt(0);
-const CC_LOWER_A = "a".charCodeAt(0);
-const CC_LOWER_U = "u".charCodeAt(0);
-const CC_LOWER_E = "e".charCodeAt(0);
-const CC_LOWER_Z = "z".charCodeAt(0);
-const CC_UPPER_A = "A".charCodeAt(0);
-const CC_UPPER_E = "E".charCodeAt(0);
-const CC_UPPER_U = "U".charCodeAt(0);
-const CC_UPPER_Z = "Z".charCodeAt(0);
-const CC_0 = "0".charCodeAt(0);
-const CC_9 = "9".charCodeAt(0);
-
-const CC_NUMBER_SIGN = "#".charCodeAt(0);
-const CC_PLUS_SIGN = "+".charCodeAt(0);
-const CC_HYPHEN_MINUS = "-".charCodeAt(0);
-
-const CC_LESS_THAN_SIGN = "<".charCodeAt(0);
-const CC_GREATER_THAN_SIGN = ">".charCodeAt(0);
-
-/**
- * @param {number} cc char code
- * @returns {boolean} true, if cc is a newline
- */
-const _isNewLine = cc =>
- cc === CC_LINE_FEED || cc === CC_CARRIAGE_RETURN || cc === CC_FORM_FEED;
-
-/** @type {CharHandler} */
-const consumeSpace = (input, pos, _callbacks) => {
- /** @type {number} */
- let cc;
- do {
- pos++;
- cc = input.charCodeAt(pos);
- } while (_isWhiteSpace(cc));
- return pos;
-};
-
-/**
- * @param {number} cc char code
- * @returns {boolean} true, if cc is a newline
- */
-const _isNewline = cc =>
- cc === CC_LINE_FEED || cc === CC_CARRIAGE_RETURN || cc === CC_FORM_FEED;
-
-/**
- * @param {number} cc char code
- * @returns {boolean} true, if cc is a space (U+0009 CHARACTER TABULATION or U+0020 SPACE)
- */
-const _isSpace = cc => cc === CC_TAB || cc === CC_SPACE;
-
-/**
- * @param {number} cc char code
- * @returns {boolean} true, if cc is a whitespace
- */
-const _isWhiteSpace = cc => _isNewline(cc) || _isSpace(cc);
-
-/**
- * ident-start code point
- *
- * A letter, a non-ASCII code point, or U+005F LOW LINE (_).
- * @param {number} cc char code
- * @returns {boolean} true, if cc is a start code point of an identifier
- */
-const isIdentStartCodePoint = cc =>
- (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
- (cc >= CC_UPPER_A && cc <= CC_UPPER_Z) ||
- cc === CC_LOW_LINE ||
- cc >= 0x80;
-
-/** @type {CharHandler} */
-const consumeDelimToken = (input, pos, _callbacks) => pos + 1;
-
-/** @type {CharHandler} */
-const consumeComments = (input, pos, _callbacks) => {
- // If the next two input code point are U+002F SOLIDUS (/) followed by a U+002A
- // ASTERISK (*), consume them and all following code points up to and including
- // the first U+002A ASTERISK (*) followed by a U+002F SOLIDUS (/), or up to an
- // EOF code point. Return to the start of this step.
- //
- // If the preceding paragraph ended by consuming an EOF code point, this is a parse error.
- // But we are silent on errors.
- if (
- input.charCodeAt(pos) === CC_SOLIDUS &&
- input.charCodeAt(pos + 1) === CC_ASTERISK
- ) {
- pos += 1;
- while (pos < input.length) {
- if (
- input.charCodeAt(pos) === CC_ASTERISK &&
- input.charCodeAt(pos + 1) === CC_SOLIDUS
- ) {
- pos += 2;
- break;
- }
- pos++;
- }
- }
- return pos;
-};
-
-/** @type {function(number): CharHandler} */
-const consumeString = quoteCc => (input, pos, callbacks) => {
- const start = pos;
- pos = _consumeString(input, pos, quoteCc);
- if (callbacks.string !== undefined) {
- pos = callbacks.string(input, start, pos);
- }
- return pos;
-};
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @param {number} quoteCc quote char code
- * @returns {number} new position
- */
-const _consumeString = (input, pos, quoteCc) => {
- pos++;
- for (;;) {
- if (pos === input.length) return pos;
- const cc = input.charCodeAt(pos);
- if (cc === quoteCc) return pos + 1;
- if (_isNewLine(cc)) {
- // bad string
- return pos;
- }
- if (cc === CC_REVERSE_SOLIDUS) {
- // we don't need to fully parse the escaped code point
- // just skip over a potential new line
- pos++;
- if (pos === input.length) return pos;
- pos++;
- } else {
- pos++;
- }
- }
-};
-
-/**
- * @param {number} cc char code
- * @returns {boolean} is identifier start code
- */
-const _isIdentifierStartCode = cc =>
- cc === CC_LOW_LINE ||
- (cc >= CC_LOWER_A && cc <= CC_LOWER_Z) ||
- (cc >= CC_UPPER_A && cc <= CC_UPPER_Z) ||
- cc > 0x80;
-
-/**
- * @param {number} first first code point
- * @param {number} second second code point
- * @returns {boolean} true if two code points are a valid escape
- */
-const _isTwoCodePointsAreValidEscape = (first, second) => {
- if (first !== CC_REVERSE_SOLIDUS) return false;
- if (_isNewLine(second)) return false;
- return true;
-};
-
-/**
- * @param {number} cc char code
- * @returns {boolean} is digit
- */
-const _isDigit = cc => cc >= CC_0 && cc <= CC_9;
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @returns {boolean} true, if input at pos starts an identifier
- */
-const _startsIdentifier = (input, pos) => {
- const cc = input.charCodeAt(pos);
- if (cc === CC_HYPHEN_MINUS) {
- if (pos === input.length) return false;
- const cc = input.charCodeAt(pos + 1);
- if (cc === CC_HYPHEN_MINUS) return true;
- if (cc === CC_REVERSE_SOLIDUS) {
- const cc = input.charCodeAt(pos + 2);
- return !_isNewLine(cc);
- }
- return _isIdentifierStartCode(cc);
- }
- if (cc === CC_REVERSE_SOLIDUS) {
- const cc = input.charCodeAt(pos + 1);
- return !_isNewLine(cc);
- }
- return _isIdentifierStartCode(cc);
-};
-
-/** @type {CharHandler} */
-const consumeNumberSign = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (pos === input.length) return pos;
- if (
- callbacks.isSelector &&
- callbacks.isSelector(input, pos) &&
- _startsIdentifier(input, pos)
- ) {
- pos = _consumeIdentifier(input, pos, callbacks);
- if (callbacks.id !== undefined) {
- return callbacks.id(input, start, pos);
- }
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeMinus = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (pos === input.length) return pos;
- const cc = input.charCodeAt(pos);
- // If the input stream starts with a number, reconsume the current input code point, consume a numeric token, and return it.
- if (cc === CC_FULL_STOP || _isDigit(cc)) {
- return consumeNumericToken(input, pos, callbacks);
- } else if (cc === CC_HYPHEN_MINUS) {
- pos++;
- if (pos === input.length) return pos;
- const cc = input.charCodeAt(pos);
- if (cc === CC_GREATER_THAN_SIGN) {
- return pos + 1;
- }
- pos = _consumeIdentifier(input, pos, callbacks);
- if (callbacks.identifier !== undefined) {
- return callbacks.identifier(input, start, pos);
- }
- } else if (cc === CC_REVERSE_SOLIDUS) {
- if (pos + 1 === input.length) return pos;
- const cc = input.charCodeAt(pos + 1);
- if (_isNewLine(cc)) return pos;
- pos = _consumeIdentifier(input, pos, callbacks);
- if (callbacks.identifier !== undefined) {
- return callbacks.identifier(input, start, pos);
- }
- } else if (_isIdentifierStartCode(cc)) {
- pos = consumeOtherIdentifier(input, pos - 1, callbacks);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeDot = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (pos === input.length) return pos;
- const cc = input.charCodeAt(pos);
- if (_isDigit(cc)) return consumeNumericToken(input, pos - 2, callbacks);
- if (
- (callbacks.isSelector && !callbacks.isSelector(input, pos)) ||
- !_startsIdentifier(input, pos)
- )
- return pos;
- pos = _consumeIdentifier(input, pos, callbacks);
- if (callbacks.class !== undefined) return callbacks.class(input, start, pos);
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeNumericToken = (input, pos, callbacks) => {
- pos = _consumeNumber(input, pos, callbacks);
- if (pos === input.length) return pos;
- if (_startsIdentifier(input, pos))
- return _consumeIdentifier(input, pos, callbacks);
- const cc = input.charCodeAt(pos);
- if (cc === CC_PERCENTAGE) return pos + 1;
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeOtherIdentifier = (input, pos, callbacks) => {
- const start = pos;
- pos = _consumeIdentifier(input, pos, callbacks);
- if (pos !== input.length && input.charCodeAt(pos) === CC_LEFT_PARENTHESIS) {
- pos++;
- if (callbacks.function !== undefined) {
- return callbacks.function(input, start, pos);
- }
- } else if (callbacks.identifier !== undefined) {
- return callbacks.identifier(input, start, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumePotentialUrl = (input, pos, callbacks) => {
- const start = pos;
- pos = _consumeIdentifier(input, pos, callbacks);
- const nextPos = pos + 1;
- if (
- pos === start + 3 &&
- input.slice(start, nextPos).toLowerCase() === "url("
- ) {
- pos++;
- let cc = input.charCodeAt(pos);
- while (_isWhiteSpace(cc)) {
- pos++;
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- }
- if (cc === CC_QUOTATION_MARK || cc === CC_APOSTROPHE) {
- if (callbacks.function !== undefined) {
- return callbacks.function(input, start, nextPos);
- }
- return nextPos;
- }
- const contentStart = pos;
- /** @type {number} */
- let contentEnd;
- for (;;) {
- if (cc === CC_REVERSE_SOLIDUS) {
- pos++;
- if (pos === input.length) return pos;
- pos++;
- } else if (_isWhiteSpace(cc)) {
- contentEnd = pos;
- do {
- pos++;
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- } while (_isWhiteSpace(cc));
- if (cc !== CC_RIGHT_PARENTHESIS) return pos;
- pos++;
- if (callbacks.url !== undefined) {
- return callbacks.url(input, start, pos, contentStart, contentEnd);
- }
- return pos;
- } else if (cc === CC_RIGHT_PARENTHESIS) {
- contentEnd = pos;
- pos++;
- if (callbacks.url !== undefined) {
- return callbacks.url(input, start, pos, contentStart, contentEnd);
- }
- return pos;
- } else if (cc === CC_LEFT_PARENTHESIS) {
- return pos;
- } else {
- pos++;
- }
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- }
- } else {
- if (callbacks.identifier !== undefined) {
- return callbacks.identifier(input, start, pos);
- }
- return pos;
- }
-};
-
-/** @type {CharHandler} */
-const consumePotentialPseudo = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (
- (callbacks.isSelector && !callbacks.isSelector(input, pos)) ||
- !_startsIdentifier(input, pos)
- )
- return pos;
- pos = _consumeIdentifier(input, pos, callbacks);
- const cc = input.charCodeAt(pos);
- if (cc === CC_LEFT_PARENTHESIS) {
- pos++;
- if (callbacks.pseudoFunction !== undefined) {
- return callbacks.pseudoFunction(input, start, pos);
- }
- return pos;
- }
- if (callbacks.pseudoClass !== undefined) {
- return callbacks.pseudoClass(input, start, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeLeftParenthesis = (input, pos, callbacks) => {
- pos++;
- if (callbacks.leftParenthesis !== undefined) {
- return callbacks.leftParenthesis(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeRightParenthesis = (input, pos, callbacks) => {
- pos++;
- if (callbacks.rightParenthesis !== undefined) {
- return callbacks.rightParenthesis(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeLeftCurlyBracket = (input, pos, callbacks) => {
- pos++;
- if (callbacks.leftCurlyBracket !== undefined) {
- return callbacks.leftCurlyBracket(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeRightCurlyBracket = (input, pos, callbacks) => {
- pos++;
- if (callbacks.rightCurlyBracket !== undefined) {
- return callbacks.rightCurlyBracket(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeSemicolon = (input, pos, callbacks) => {
- pos++;
- if (callbacks.semicolon !== undefined) {
- return callbacks.semicolon(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeComma = (input, pos, callbacks) => {
- pos++;
- if (callbacks.comma !== undefined) {
- return callbacks.comma(input, pos - 1, pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const _consumeIdentifier = (input, pos) => {
- for (;;) {
- const cc = input.charCodeAt(pos);
- if (cc === CC_REVERSE_SOLIDUS) {
- pos++;
- if (pos === input.length) return pos;
- pos++;
- } else if (
- _isIdentifierStartCode(cc) ||
- _isDigit(cc) ||
- cc === CC_HYPHEN_MINUS
- ) {
- pos++;
- } else {
- return pos;
- }
- }
-};
-
-/** @type {CharHandler} */
-const _consumeNumber = (input, pos) => {
- pos++;
- if (pos === input.length) return pos;
- let cc = input.charCodeAt(pos);
- while (_isDigit(cc)) {
- pos++;
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- }
- if (cc === CC_FULL_STOP && pos + 1 !== input.length) {
- const next = input.charCodeAt(pos + 1);
- if (_isDigit(next)) {
- pos += 2;
- cc = input.charCodeAt(pos);
- while (_isDigit(cc)) {
- pos++;
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- }
- }
- }
- if (cc === CC_LOWER_E || cc === CC_UPPER_E) {
- if (pos + 1 !== input.length) {
- const next = input.charCodeAt(pos + 2);
- if (_isDigit(next)) {
- pos += 2;
- } else if (
- (next === CC_HYPHEN_MINUS || next === CC_PLUS_SIGN) &&
- pos + 2 !== input.length
- ) {
- const next = input.charCodeAt(pos + 2);
- if (_isDigit(next)) {
- pos += 3;
- } else {
- return pos;
- }
- } else {
- return pos;
- }
- }
- } else {
- return pos;
- }
- cc = input.charCodeAt(pos);
- while (_isDigit(cc)) {
- pos++;
- if (pos === input.length) return pos;
- cc = input.charCodeAt(pos);
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeLessThan = (input, pos, _callbacks) => {
- if (input.slice(pos + 1, pos + 4) === "!--") return pos + 4;
- return pos + 1;
-};
-
-/** @type {CharHandler} */
-const consumeAt = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (pos === input.length) return pos;
- if (_startsIdentifier(input, pos)) {
- pos = _consumeIdentifier(input, pos, callbacks);
- if (callbacks.atKeyword !== undefined) {
- pos = callbacks.atKeyword(input, start, pos);
- }
- }
- return pos;
-};
-
-/** @type {CharHandler} */
-const consumeReverseSolidus = (input, pos, callbacks) => {
- const start = pos;
- pos++;
- if (pos === input.length) return pos;
- // If the input stream starts with a valid escape, reconsume the current input code point, consume an ident-like token, and return it.
- if (
- _isTwoCodePointsAreValidEscape(
- input.charCodeAt(start),
- input.charCodeAt(pos)
- )
- ) {
- return consumeOtherIdentifier(input, pos - 1, callbacks);
- }
- // Otherwise, this is a parse error. Return a <delim-token> with its value set to the current input code point.
- return pos;
-};
-
-const CHAR_MAP = Array.from({ length: 0x80 }, (_, cc) => {
- // https://drafts.csswg.org/css-syntax/#consume-token
- switch (cc) {
- // whitespace
- case CC_LINE_FEED:
- case CC_CARRIAGE_RETURN:
- case CC_FORM_FEED:
- case CC_TAB:
- case CC_SPACE:
- return consumeSpace;
- // U+0022 QUOTATION MARK (")
- case CC_QUOTATION_MARK:
- return consumeString(cc);
- // U+0023 NUMBER SIGN (#)
- case CC_NUMBER_SIGN:
- return consumeNumberSign;
- // U+0027 APOSTROPHE (')
- case CC_APOSTROPHE:
- return consumeString(cc);
- // U+0028 LEFT PARENTHESIS (()
- case CC_LEFT_PARENTHESIS:
- return consumeLeftParenthesis;
- // U+0029 RIGHT PARENTHESIS ())
- case CC_RIGHT_PARENTHESIS:
- return consumeRightParenthesis;
- // U+002B PLUS SIGN (+)
- case CC_PLUS_SIGN:
- return consumeNumericToken;
- // U+002C COMMA (,)
- case CC_COMMA:
- return consumeComma;
- // U+002D HYPHEN-MINUS (-)
- case CC_HYPHEN_MINUS:
- return consumeMinus;
- // U+002E FULL STOP (.)
- case CC_FULL_STOP:
- return consumeDot;
- // U+003A COLON (:)
- case CC_COLON:
- return consumePotentialPseudo;
- // U+003B SEMICOLON (;)
- case CC_SEMICOLON:
- return consumeSemicolon;
- // U+003C LESS-THAN SIGN (<)
- case CC_LESS_THAN_SIGN:
- return consumeLessThan;
- // U+0040 COMMERCIAL AT (@)
- case CC_AT_SIGN:
- return consumeAt;
- // U+005B LEFT SQUARE BRACKET ([)
- case CC_LEFT_SQUARE:
- return consumeDelimToken;
- // U+005C REVERSE SOLIDUS (\)
- case CC_REVERSE_SOLIDUS:
- return consumeReverseSolidus;
- // U+005D RIGHT SQUARE BRACKET (])
- case CC_RIGHT_SQUARE:
- return consumeDelimToken;
- // U+007B LEFT CURLY BRACKET ({)
- case CC_LEFT_CURLY:
- return consumeLeftCurlyBracket;
- // U+007D RIGHT CURLY BRACKET (})
- case CC_RIGHT_CURLY:
- return consumeRightCurlyBracket;
- // Optimization
- case CC_LOWER_U:
- case CC_UPPER_U:
- return consumePotentialUrl;
- default:
- // digit
- if (_isDigit(cc)) return consumeNumericToken;
- // ident-start code point
- if (isIdentStartCodePoint(cc)) {
- return consumeOtherIdentifier;
- }
- // EOF, but we don't have it
- // anything else
- return consumeDelimToken;
- }
-});
-
-/**
- * @param {string} input input css
- * @param {CssTokenCallbacks} callbacks callbacks
- * @returns {void}
- */
-module.exports = (input, callbacks) => {
- // This section describes how to consume a token from a stream of code points. It will return a single token of any type.
- let pos = 0;
- while (pos < input.length) {
- // Consume comments.
- pos = consumeComments(input, pos, callbacks);
-
- const cc = input.charCodeAt(pos);
-
- // Consume the next input code point.
- if (cc < 0x80) {
- pos = CHAR_MAP[cc](input, pos, callbacks);
- } else {
- pos++;
- }
- }
-};
-
-module.exports.isIdentStartCodePoint = isIdentStartCodePoint;
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @returns {number} position after comments
- */
-module.exports.eatComments = (input, pos) => {
- for (;;) {
- const originalPos = pos;
- pos = consumeComments(input, pos, {});
- if (originalPos === pos) {
- break;
- }
- }
-
- return pos;
-};
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @returns {number} position after whitespace
- */
-module.exports.eatWhitespace = (input, pos) => {
- while (_isWhiteSpace(input.charCodeAt(pos))) {
- pos++;
- }
-
- return pos;
-};
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @returns {number} position after whitespace and comments
- */
-module.exports.eatWhitespaceAndComments = (input, pos) => {
- for (;;) {
- const originalPos = pos;
- pos = consumeComments(input, pos, {});
- while (_isWhiteSpace(input.charCodeAt(pos))) {
- pos++;
- }
- if (originalPos === pos) {
- break;
- }
- }
-
- return pos;
-};
-
-/**
- * @param {string} input input
- * @param {number} pos position
- * @returns {number} position after whitespace
- */
-module.exports.eatWhiteLine = (input, pos) => {
- for (;;) {
- const cc = input.charCodeAt(pos);
- if (_isSpace(cc)) {
- pos++;
- continue;
- }
- if (_isNewLine(cc)) pos++;
- // For `\r\n`
- if (cc === CC_CARRIAGE_RETURN && input.charCodeAt(pos + 1) === CC_LINE_FEED)
- pos++;
- break;
- }
-
- return pos;
-};