Deploying to gh-pages from @ 7c3269bdbe 🚀

This commit is contained in:
niklasvh
2022-01-22 16:55:25 +00:00
commit 81ce7ed71b
1620 changed files with 36474 additions and 0 deletions

View File

@ -0,0 +1,34 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var assert_1 = require("assert");
var tokenizer_1 = require("../tokenizer");
var tokenize = function (value) {
var tokenizer = new tokenizer_1.Tokenizer();
tokenizer.write(value);
return tokenizer.read();
};
describe('tokenizer', function () {
describe('<ident>', function () {
it('auto', function () { return assert_1.deepEqual(tokenize('auto'), [{ type: 20 /* IDENT_TOKEN */, value: 'auto' }]); });
it('url', function () { return assert_1.deepEqual(tokenize('url'), [{ type: 20 /* IDENT_TOKEN */, value: 'url' }]); });
it('auto test', function () {
return assert_1.deepEqual(tokenize('auto test'), [
{ type: 20 /* IDENT_TOKEN */, value: 'auto' },
{ type: 31 /* WHITESPACE_TOKEN */ },
{ type: 20 /* IDENT_TOKEN */, value: 'test' }
]);
});
});
describe('<url-token>', function () {
it('url(test.jpg)', function () {
return assert_1.deepEqual(tokenize('url(test.jpg)'), [{ type: 22 /* URL_TOKEN */, value: 'test.jpg' }]);
});
it('url("test.jpg")', function () {
return assert_1.deepEqual(tokenize('url("test.jpg")'), [{ type: 22 /* URL_TOKEN */, value: 'test.jpg' }]);
});
it("url('test.jpg')", function () {
return assert_1.deepEqual(tokenize("url('test.jpg')"), [{ type: 22 /* URL_TOKEN */, value: 'test.jpg' }]);
});
});
});
//# sourceMappingURL=tokernizer-tests.js.map

View File

@ -0,0 +1 @@
{"version":3,"file":"tokernizer-tests.js","sourceRoot":"","sources":["../../../../../src/css/syntax/__tests__/tokernizer-tests.ts"],"names":[],"mappings":";;AAAA,iCAAiC;AACjC,0CAAkD;AAElD,IAAM,QAAQ,GAAG,UAAC,KAAa;IAC3B,IAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IAClC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF,QAAQ,CAAC,WAAW,EAAE;IAClB,QAAQ,CAAC,SAAS,EAAE;QAChB,EAAE,CAAC,MAAM,EAAE,cAAM,OAAA,kBAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAC,IAAI,sBAAuB,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC,EAA3E,CAA2E,CAAC,CAAC;QAC9F,EAAE,CAAC,KAAK,EAAE,cAAM,OAAA,kBAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAC,IAAI,sBAAuB,EAAE,KAAK,EAAE,KAAK,EAAC,CAAC,CAAC,EAAzE,CAAyE,CAAC,CAAC;QAC3F,EAAE,CAAC,WAAW,EAAE;YACZ,OAAA,kBAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBACpC,EAAC,IAAI,sBAAuB,EAAE,KAAK,EAAE,MAAM,EAAC;gBAC5C,EAAC,IAAI,2BAA4B,EAAC;gBAClC,EAAC,IAAI,sBAAuB,EAAE,KAAK,EAAE,MAAM,EAAC;aAC/C,CAAC;QAJF,CAIE,CAAC,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,aAAa,EAAE;QACpB,EAAE,CAAC,eAAe,EAAE;YAChB,OAAA,kBAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,EAAC,IAAI,oBAAqB,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;QAAtF,CAAsF,CAAC,CAAC;QAC5F,EAAE,CAAC,iBAAiB,EAAE;YAClB,OAAA,kBAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAC,IAAI,oBAAqB,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;QAAxF,CAAwF,CAAC,CAAC;QAC9F,EAAE,CAAC,iBAAiB,EAAE;YAClB,OAAA,kBAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAC,IAAI,oBAAqB,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;QAAxF,CAAwF,CAAC,CAAC;IAClG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}

147
dist/lib/css/syntax/parser.js vendored Normal file
View File

@ -0,0 +1,147 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseFunctionArgs = exports.nonFunctionArgSeparator = exports.nonWhiteSpace = exports.isIdentWithValue = exports.isStringToken = exports.isIdentToken = exports.isNumberToken = exports.isDimensionToken = exports.Parser = void 0;
var tokenizer_1 = require("./tokenizer");
var Parser = /** @class */ (function () {
function Parser(tokens) {
this._tokens = tokens;
}
Parser.create = function (value) {
var tokenizer = new tokenizer_1.Tokenizer();
tokenizer.write(value);
return new Parser(tokenizer.read());
};
Parser.parseValue = function (value) {
return Parser.create(value).parseComponentValue();
};
Parser.parseValues = function (value) {
return Parser.create(value).parseComponentValues();
};
Parser.prototype.parseComponentValue = function () {
var token = this.consumeToken();
while (token.type === 31 /* WHITESPACE_TOKEN */) {
token = this.consumeToken();
}
if (token.type === 32 /* EOF_TOKEN */) {
throw new SyntaxError("Error parsing CSS component value, unexpected EOF");
}
this.reconsumeToken(token);
var value = this.consumeComponentValue();
do {
token = this.consumeToken();
} while (token.type === 31 /* WHITESPACE_TOKEN */);
if (token.type === 32 /* EOF_TOKEN */) {
return value;
}
throw new SyntaxError("Error parsing CSS component value, multiple values found when expecting only one");
};
Parser.prototype.parseComponentValues = function () {
var values = [];
while (true) {
var value = this.consumeComponentValue();
if (value.type === 32 /* EOF_TOKEN */) {
return values;
}
values.push(value);
values.push();
}
};
Parser.prototype.consumeComponentValue = function () {
var token = this.consumeToken();
switch (token.type) {
case 11 /* LEFT_CURLY_BRACKET_TOKEN */:
case 28 /* LEFT_SQUARE_BRACKET_TOKEN */:
case 2 /* LEFT_PARENTHESIS_TOKEN */:
return this.consumeSimpleBlock(token.type);
case 19 /* FUNCTION_TOKEN */:
return this.consumeFunction(token);
}
return token;
};
Parser.prototype.consumeSimpleBlock = function (type) {
var block = { type: type, values: [] };
var token = this.consumeToken();
while (true) {
if (token.type === 32 /* EOF_TOKEN */ || isEndingTokenFor(token, type)) {
return block;
}
this.reconsumeToken(token);
block.values.push(this.consumeComponentValue());
token = this.consumeToken();
}
};
Parser.prototype.consumeFunction = function (functionToken) {
var cssFunction = {
name: functionToken.value,
values: [],
type: 18 /* FUNCTION */
};
while (true) {
var token = this.consumeToken();
if (token.type === 32 /* EOF_TOKEN */ || token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */) {
return cssFunction;
}
this.reconsumeToken(token);
cssFunction.values.push(this.consumeComponentValue());
}
};
Parser.prototype.consumeToken = function () {
var token = this._tokens.shift();
return typeof token === 'undefined' ? tokenizer_1.EOF_TOKEN : token;
};
Parser.prototype.reconsumeToken = function (token) {
this._tokens.unshift(token);
};
return Parser;
}());
exports.Parser = Parser;
var isDimensionToken = function (token) { return token.type === 15 /* DIMENSION_TOKEN */; };
exports.isDimensionToken = isDimensionToken;
var isNumberToken = function (token) { return token.type === 17 /* NUMBER_TOKEN */; };
exports.isNumberToken = isNumberToken;
var isIdentToken = function (token) { return token.type === 20 /* IDENT_TOKEN */; };
exports.isIdentToken = isIdentToken;
var isStringToken = function (token) { return token.type === 0 /* STRING_TOKEN */; };
exports.isStringToken = isStringToken;
var isIdentWithValue = function (token, value) {
return exports.isIdentToken(token) && token.value === value;
};
exports.isIdentWithValue = isIdentWithValue;
var nonWhiteSpace = function (token) { return token.type !== 31 /* WHITESPACE_TOKEN */; };
exports.nonWhiteSpace = nonWhiteSpace;
var nonFunctionArgSeparator = function (token) {
return token.type !== 31 /* WHITESPACE_TOKEN */ && token.type !== 4 /* COMMA_TOKEN */;
};
exports.nonFunctionArgSeparator = nonFunctionArgSeparator;
var parseFunctionArgs = function (tokens) {
var args = [];
var arg = [];
tokens.forEach(function (token) {
if (token.type === 4 /* COMMA_TOKEN */) {
if (arg.length === 0) {
throw new Error("Error parsing function args, zero tokens for arg");
}
args.push(arg);
arg = [];
return;
}
if (token.type !== 31 /* WHITESPACE_TOKEN */) {
arg.push(token);
}
});
if (arg.length) {
args.push(arg);
}
return args;
};
exports.parseFunctionArgs = parseFunctionArgs;
var isEndingTokenFor = function (token, type) {
if (type === 11 /* LEFT_CURLY_BRACKET_TOKEN */ && token.type === 12 /* RIGHT_CURLY_BRACKET_TOKEN */) {
return true;
}
if (type === 28 /* LEFT_SQUARE_BRACKET_TOKEN */ && token.type === 29 /* RIGHT_SQUARE_BRACKET_TOKEN */) {
return true;
}
return type === 2 /* LEFT_PARENTHESIS_TOKEN */ && token.type === 3 /* RIGHT_PARENTHESIS_TOKEN */;
};
//# sourceMappingURL=parser.js.map

1
dist/lib/css/syntax/parser.js.map vendored Normal file
View File

@ -0,0 +1 @@
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../src/css/syntax/parser.ts"],"names":[],"mappings":";;;AAAA,yCAQqB;AAoBrB;IAGI,gBAAY,MAAkB;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IAC1B,CAAC;IAEM,aAAM,GAAb,UAAc,KAAa;QACvB,IAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAClC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAEM,iBAAU,GAAjB,UAAkB,KAAa;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;IACtD,CAAC;IAEM,kBAAW,GAAlB,UAAmB,KAAa;QAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACvD,CAAC;IAED,oCAAmB,GAAnB;QACI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC,IAAI,8BAA+B,EAAE;YAC9C,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;SAC/B;QAED,IAAI,KAAK,CAAC,IAAI,uBAAwB,EAAE;YACpC,MAAM,IAAI,WAAW,CAAC,mDAAmD,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE3C,GAAG;YACC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;SAC/B,QAAQ,KAAK,CAAC,IAAI,8BAA+B,EAAE;QAEpD,IAAI,KAAK,CAAC,IAAI,uBAAwB,EAAE;YACpC,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,IAAI,WAAW,CAAC,kFAAkF,CAAC,CAAC;IAC9G,CAAC;IAED,qCAAoB,GAApB;QACI,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO,IAAI,EAAE;YACT,IAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,uBAAwB,EAAE;gBACpC,OAAO,MAAM,CAAC;aACjB;YACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,EAAE,CAAC;SACjB;IACL,CAAC;IAEO,sCAAqB,GAA7B;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAElC,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,uCAAwC;YACxC,wCAAyC;YACzC;gBACI,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C;gBACI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAC1C;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,mCAAkB,GAA1B,UAA2B,IAAkB;QACzC,IAAM,KAAK,GAAa,EAAC,IAAI,MAAA,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;QAE3C,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,EAAE;YACT,IAAI,KAAK,CAAC,IAAI,uBAAwB,IAAI,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;gBACrE,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;YAChD,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;SAC/B;IACL,CAAC;IAEO,gCAAe,GAAvB,UAAwB,aAA+B;QACnD,IAAM,WAAW,GAAgB;YAC7B,IAAI,EAAE,aAAa,CAAC,KAAK;YACzB,MAAM,EAAE,EAAE;YACV,IAAI,mBAAoB;SAC3B,CAAC;QAEF,OAAO,IAAI,EAAE;YACT,IAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,uBAAwB,IAAI,KAAK,CAAC,IAAI,oCAAsC,EAAE;gBACxF,OAAO,WAAW,CAAC;aACtB;YAED,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;SACzD;IACL,CAAC;IAEO,6BAAY,GAApB;QACI,IAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,OAAO,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,qBAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,CAAC;IAEO,+BAAc,GAAtB,UAAuB,KAAe;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACL,aAAC;AAAD,CAAC,AAjHD,IAiHC;AAjHY,wBAAM;AAmHZ,IAAM,gBAAgB,GAAG,UAAC,KAAe,IAA8B,OAAA,KAAK,CAAC,IAAI,6BAA8B,EAAxC,CAAwC,CAAC;AAA1G,QAAA,gBAAgB,oBAA0F;AAChH,IAAM,aAAa,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,0BAA2B,EAArC,CAAqC,CAAC;AAAtG,QAAA,aAAa,iBAAyF;AAC5G,IAAM,YAAY,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,yBAA0B,EAApC,CAAoC,CAAC;AAApG,QAAA,YAAY,gBAAwF;AAC1G,IAAM,aAAa,GAAG,UAAC,KAAe,IAAgC,OAAA,KAAK,CAAC,IAAI,yBAA2B,EAArC,CAAqC,CAAC;AAAtG,QAAA,aAAa,iBAAyF;AAC5G,IAAM,gBAAgB,GAAG,UAAC,KAAe,EAAE,KAAa;IAC3D,OAAA,oBAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;AAA5C,CAA4C,CAAC;AADpC,QAAA,gBAAgB,oBACoB;AAE1C,IAAM,aAAa,GAAG,UAAC,KAAe,IAAc,OAAA,KAAK,CAAC,IAAI,8BAA+B,EAAzC,CAAyC,CAAC;AAAxF,QAAA,aAAa,iBAA2E;AAC9F,IAAM,uBAAuB,GAAG,UAAC,KAAe;IACnD,OAAA,KAAK,CAAC,IAAI,8BAA+B,IAAI,KAAK,CAAC,IAAI,wBAA0B;AAAjF,CAAiF,CAAC;AADzE,QAAA,uBAAuB,2BACkD;AAE/E,IAAM,iBAAiB,GAAG,UAAC,MAAkB;IAChD,IAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,GAAG,GAAe,EAAE,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK;QACjB,IAAI,KAAK,CAAC,IAAI,wBAA0B,EAAE;YACtC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;aACvE;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,GAAG,EAAE,CAAC;YACT,OAAO;SACV;QAED,IAAI,KAAK,CAAC,IAAI,8BAA+B,EAAE;YAC3C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACnB;IACL,CAAC,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,MAAM,EAAE;QACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAtBW,QAAA,iBAAiB,qBAsB5B;AAEF,IAAM,gBAAgB,GAAG,UAAC,KAAe,EAAE,IAAkB;IACzD,IAAI,IAAI,sCAAuC,IAAI,KAAK,CAAC,IAAI,uCAAwC,EAAE;QACnG,OAAO,IAAI,CAAC;KACf;IACD,IAAI,IAAI,uCAAwC,IAAI,KAAK,CAAC,IAAI,wCAAyC,EAAE;QACrG,OAAO,IAAI,CAAC;KACf;IAED,OAAO,IAAI,mCAAqC,IAAI,KAAK,CAAC,IAAI,oCAAsC,CAAC;AACzG,CAAC,CAAC"}

630
dist/lib/css/syntax/tokenizer.js vendored Normal file
View File

@ -0,0 +1,630 @@
"use strict";
// https://www.w3.org/TR/css-syntax-3
Object.defineProperty(exports, "__esModule", { value: true });
exports.Tokenizer = exports.EOF_TOKEN = exports.FLAG_NUMBER = exports.FLAG_INTEGER = exports.FLAG_ID = exports.FLAG_UNRESTRICTED = void 0;
var css_line_break_1 = require("css-line-break");
exports.FLAG_UNRESTRICTED = 1 << 0;
exports.FLAG_ID = 1 << 1;
exports.FLAG_INTEGER = 1 << 2;
exports.FLAG_NUMBER = 1 << 3;
var LINE_FEED = 0x000a;
var SOLIDUS = 0x002f;
var REVERSE_SOLIDUS = 0x005c;
var CHARACTER_TABULATION = 0x0009;
var SPACE = 0x0020;
var QUOTATION_MARK = 0x0022;
var EQUALS_SIGN = 0x003d;
var NUMBER_SIGN = 0x0023;
var DOLLAR_SIGN = 0x0024;
var PERCENTAGE_SIGN = 0x0025;
var APOSTROPHE = 0x0027;
var LEFT_PARENTHESIS = 0x0028;
var RIGHT_PARENTHESIS = 0x0029;
var LOW_LINE = 0x005f;
var HYPHEN_MINUS = 0x002d;
var EXCLAMATION_MARK = 0x0021;
var LESS_THAN_SIGN = 0x003c;
var GREATER_THAN_SIGN = 0x003e;
var COMMERCIAL_AT = 0x0040;
var LEFT_SQUARE_BRACKET = 0x005b;
var RIGHT_SQUARE_BRACKET = 0x005d;
var CIRCUMFLEX_ACCENT = 0x003d;
var LEFT_CURLY_BRACKET = 0x007b;
var QUESTION_MARK = 0x003f;
var RIGHT_CURLY_BRACKET = 0x007d;
var VERTICAL_LINE = 0x007c;
var TILDE = 0x007e;
var CONTROL = 0x0080;
var REPLACEMENT_CHARACTER = 0xfffd;
var ASTERISK = 0x002a;
var PLUS_SIGN = 0x002b;
var COMMA = 0x002c;
var COLON = 0x003a;
var SEMICOLON = 0x003b;
var FULL_STOP = 0x002e;
var NULL = 0x0000;
var BACKSPACE = 0x0008;
var LINE_TABULATION = 0x000b;
var SHIFT_OUT = 0x000e;
var INFORMATION_SEPARATOR_ONE = 0x001f;
var DELETE = 0x007f;
var EOF = -1;
var ZERO = 0x0030;
var a = 0x0061;
var e = 0x0065;
var f = 0x0066;
var u = 0x0075;
var z = 0x007a;
var A = 0x0041;
var E = 0x0045;
var F = 0x0046;
var U = 0x0055;
var Z = 0x005a;
var isDigit = function (codePoint) { return codePoint >= ZERO && codePoint <= 0x0039; };
var isSurrogateCodePoint = function (codePoint) { return codePoint >= 0xd800 && codePoint <= 0xdfff; };
var isHex = function (codePoint) {
return isDigit(codePoint) || (codePoint >= A && codePoint <= F) || (codePoint >= a && codePoint <= f);
};
var isLowerCaseLetter = function (codePoint) { return codePoint >= a && codePoint <= z; };
var isUpperCaseLetter = function (codePoint) { return codePoint >= A && codePoint <= Z; };
var isLetter = function (codePoint) { return isLowerCaseLetter(codePoint) || isUpperCaseLetter(codePoint); };
var isNonASCIICodePoint = function (codePoint) { return codePoint >= CONTROL; };
var isWhiteSpace = function (codePoint) {
return codePoint === LINE_FEED || codePoint === CHARACTER_TABULATION || codePoint === SPACE;
};
var isNameStartCodePoint = function (codePoint) {
return isLetter(codePoint) || isNonASCIICodePoint(codePoint) || codePoint === LOW_LINE;
};
var isNameCodePoint = function (codePoint) {
return isNameStartCodePoint(codePoint) || isDigit(codePoint) || codePoint === HYPHEN_MINUS;
};
var isNonPrintableCodePoint = function (codePoint) {
return ((codePoint >= NULL && codePoint <= BACKSPACE) ||
codePoint === LINE_TABULATION ||
(codePoint >= SHIFT_OUT && codePoint <= INFORMATION_SEPARATOR_ONE) ||
codePoint === DELETE);
};
var isValidEscape = function (c1, c2) {
if (c1 !== REVERSE_SOLIDUS) {
return false;
}
return c2 !== LINE_FEED;
};
var isIdentifierStart = function (c1, c2, c3) {
if (c1 === HYPHEN_MINUS) {
return isNameStartCodePoint(c2) || isValidEscape(c2, c3);
}
else if (isNameStartCodePoint(c1)) {
return true;
}
else if (c1 === REVERSE_SOLIDUS && isValidEscape(c1, c2)) {
return true;
}
return false;
};
var isNumberStart = function (c1, c2, c3) {
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
if (isDigit(c2)) {
return true;
}
return c2 === FULL_STOP && isDigit(c3);
}
if (c1 === FULL_STOP) {
return isDigit(c2);
}
return isDigit(c1);
};
var stringToNumber = function (codePoints) {
var c = 0;
var sign = 1;
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
if (codePoints[c] === HYPHEN_MINUS) {
sign = -1;
}
c++;
}
var integers = [];
while (isDigit(codePoints[c])) {
integers.push(codePoints[c++]);
}
var int = integers.length ? parseInt(css_line_break_1.fromCodePoint.apply(void 0, integers), 10) : 0;
if (codePoints[c] === FULL_STOP) {
c++;
}
var fraction = [];
while (isDigit(codePoints[c])) {
fraction.push(codePoints[c++]);
}
var fracd = fraction.length;
var frac = fracd ? parseInt(css_line_break_1.fromCodePoint.apply(void 0, fraction), 10) : 0;
if (codePoints[c] === E || codePoints[c] === e) {
c++;
}
var expsign = 1;
if (codePoints[c] === PLUS_SIGN || codePoints[c] === HYPHEN_MINUS) {
if (codePoints[c] === HYPHEN_MINUS) {
expsign = -1;
}
c++;
}
var exponent = [];
while (isDigit(codePoints[c])) {
exponent.push(codePoints[c++]);
}
var exp = exponent.length ? parseInt(css_line_break_1.fromCodePoint.apply(void 0, exponent), 10) : 0;
return sign * (int + frac * Math.pow(10, -fracd)) * Math.pow(10, expsign * exp);
};
var LEFT_PARENTHESIS_TOKEN = {
type: 2 /* LEFT_PARENTHESIS_TOKEN */
};
var RIGHT_PARENTHESIS_TOKEN = {
type: 3 /* RIGHT_PARENTHESIS_TOKEN */
};
var COMMA_TOKEN = { type: 4 /* COMMA_TOKEN */ };
var SUFFIX_MATCH_TOKEN = { type: 13 /* SUFFIX_MATCH_TOKEN */ };
var PREFIX_MATCH_TOKEN = { type: 8 /* PREFIX_MATCH_TOKEN */ };
var COLUMN_TOKEN = { type: 21 /* COLUMN_TOKEN */ };
var DASH_MATCH_TOKEN = { type: 9 /* DASH_MATCH_TOKEN */ };
var INCLUDE_MATCH_TOKEN = { type: 10 /* INCLUDE_MATCH_TOKEN */ };
var LEFT_CURLY_BRACKET_TOKEN = {
type: 11 /* LEFT_CURLY_BRACKET_TOKEN */
};
var RIGHT_CURLY_BRACKET_TOKEN = {
type: 12 /* RIGHT_CURLY_BRACKET_TOKEN */
};
var SUBSTRING_MATCH_TOKEN = { type: 14 /* SUBSTRING_MATCH_TOKEN */ };
var BAD_URL_TOKEN = { type: 23 /* BAD_URL_TOKEN */ };
var BAD_STRING_TOKEN = { type: 1 /* BAD_STRING_TOKEN */ };
var CDO_TOKEN = { type: 25 /* CDO_TOKEN */ };
var CDC_TOKEN = { type: 24 /* CDC_TOKEN */ };
var COLON_TOKEN = { type: 26 /* COLON_TOKEN */ };
var SEMICOLON_TOKEN = { type: 27 /* SEMICOLON_TOKEN */ };
var LEFT_SQUARE_BRACKET_TOKEN = {
type: 28 /* LEFT_SQUARE_BRACKET_TOKEN */
};
var RIGHT_SQUARE_BRACKET_TOKEN = {
type: 29 /* RIGHT_SQUARE_BRACKET_TOKEN */
};
var WHITESPACE_TOKEN = { type: 31 /* WHITESPACE_TOKEN */ };
exports.EOF_TOKEN = { type: 32 /* EOF_TOKEN */ };
var Tokenizer = /** @class */ (function () {
function Tokenizer() {
this._value = [];
}
Tokenizer.prototype.write = function (chunk) {
this._value = this._value.concat(css_line_break_1.toCodePoints(chunk));
};
Tokenizer.prototype.read = function () {
var tokens = [];
var token = this.consumeToken();
while (token !== exports.EOF_TOKEN) {
tokens.push(token);
token = this.consumeToken();
}
return tokens;
};
Tokenizer.prototype.consumeToken = function () {
var codePoint = this.consumeCodePoint();
switch (codePoint) {
case QUOTATION_MARK:
return this.consumeStringToken(QUOTATION_MARK);
case NUMBER_SIGN:
var c1 = this.peekCodePoint(0);
var c2 = this.peekCodePoint(1);
var c3 = this.peekCodePoint(2);
if (isNameCodePoint(c1) || isValidEscape(c2, c3)) {
var flags = isIdentifierStart(c1, c2, c3) ? exports.FLAG_ID : exports.FLAG_UNRESTRICTED;
var value = this.consumeName();
return { type: 5 /* HASH_TOKEN */, value: value, flags: flags };
}
break;
case DOLLAR_SIGN:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint();
return SUFFIX_MATCH_TOKEN;
}
break;
case APOSTROPHE:
return this.consumeStringToken(APOSTROPHE);
case LEFT_PARENTHESIS:
return LEFT_PARENTHESIS_TOKEN;
case RIGHT_PARENTHESIS:
return RIGHT_PARENTHESIS_TOKEN;
case ASTERISK:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint();
return SUBSTRING_MATCH_TOKEN;
}
break;
case PLUS_SIGN:
if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {
this.reconsumeCodePoint(codePoint);
return this.consumeNumericToken();
}
break;
case COMMA:
return COMMA_TOKEN;
case HYPHEN_MINUS:
var e1 = codePoint;
var e2 = this.peekCodePoint(0);
var e3 = this.peekCodePoint(1);
if (isNumberStart(e1, e2, e3)) {
this.reconsumeCodePoint(codePoint);
return this.consumeNumericToken();
}
if (isIdentifierStart(e1, e2, e3)) {
this.reconsumeCodePoint(codePoint);
return this.consumeIdentLikeToken();
}
if (e2 === HYPHEN_MINUS && e3 === GREATER_THAN_SIGN) {
this.consumeCodePoint();
this.consumeCodePoint();
return CDC_TOKEN;
}
break;
case FULL_STOP:
if (isNumberStart(codePoint, this.peekCodePoint(0), this.peekCodePoint(1))) {
this.reconsumeCodePoint(codePoint);
return this.consumeNumericToken();
}
break;
case SOLIDUS:
if (this.peekCodePoint(0) === ASTERISK) {
this.consumeCodePoint();
while (true) {
var c = this.consumeCodePoint();
if (c === ASTERISK) {
c = this.consumeCodePoint();
if (c === SOLIDUS) {
return this.consumeToken();
}
}
if (c === EOF) {
return this.consumeToken();
}
}
}
break;
case COLON:
return COLON_TOKEN;
case SEMICOLON:
return SEMICOLON_TOKEN;
case LESS_THAN_SIGN:
if (this.peekCodePoint(0) === EXCLAMATION_MARK &&
this.peekCodePoint(1) === HYPHEN_MINUS &&
this.peekCodePoint(2) === HYPHEN_MINUS) {
this.consumeCodePoint();
this.consumeCodePoint();
return CDO_TOKEN;
}
break;
case COMMERCIAL_AT:
var a1 = this.peekCodePoint(0);
var a2 = this.peekCodePoint(1);
var a3 = this.peekCodePoint(2);
if (isIdentifierStart(a1, a2, a3)) {
var value = this.consumeName();
return { type: 7 /* AT_KEYWORD_TOKEN */, value: value };
}
break;
case LEFT_SQUARE_BRACKET:
return LEFT_SQUARE_BRACKET_TOKEN;
case REVERSE_SOLIDUS:
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
this.reconsumeCodePoint(codePoint);
return this.consumeIdentLikeToken();
}
break;
case RIGHT_SQUARE_BRACKET:
return RIGHT_SQUARE_BRACKET_TOKEN;
case CIRCUMFLEX_ACCENT:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint();
return PREFIX_MATCH_TOKEN;
}
break;
case LEFT_CURLY_BRACKET:
return LEFT_CURLY_BRACKET_TOKEN;
case RIGHT_CURLY_BRACKET:
return RIGHT_CURLY_BRACKET_TOKEN;
case u:
case U:
var u1 = this.peekCodePoint(0);
var u2 = this.peekCodePoint(1);
if (u1 === PLUS_SIGN && (isHex(u2) || u2 === QUESTION_MARK)) {
this.consumeCodePoint();
this.consumeUnicodeRangeToken();
}
this.reconsumeCodePoint(codePoint);
return this.consumeIdentLikeToken();
case VERTICAL_LINE:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint();
return DASH_MATCH_TOKEN;
}
if (this.peekCodePoint(0) === VERTICAL_LINE) {
this.consumeCodePoint();
return COLUMN_TOKEN;
}
break;
case TILDE:
if (this.peekCodePoint(0) === EQUALS_SIGN) {
this.consumeCodePoint();
return INCLUDE_MATCH_TOKEN;
}
break;
case EOF:
return exports.EOF_TOKEN;
}
if (isWhiteSpace(codePoint)) {
this.consumeWhiteSpace();
return WHITESPACE_TOKEN;
}
if (isDigit(codePoint)) {
this.reconsumeCodePoint(codePoint);
return this.consumeNumericToken();
}
if (isNameStartCodePoint(codePoint)) {
this.reconsumeCodePoint(codePoint);
return this.consumeIdentLikeToken();
}
return { type: 6 /* DELIM_TOKEN */, value: css_line_break_1.fromCodePoint(codePoint) };
};
Tokenizer.prototype.consumeCodePoint = function () {
var value = this._value.shift();
return typeof value === 'undefined' ? -1 : value;
};
Tokenizer.prototype.reconsumeCodePoint = function (codePoint) {
this._value.unshift(codePoint);
};
Tokenizer.prototype.peekCodePoint = function (delta) {
if (delta >= this._value.length) {
return -1;
}
return this._value[delta];
};
Tokenizer.prototype.consumeUnicodeRangeToken = function () {
var digits = [];
var codePoint = this.consumeCodePoint();
while (isHex(codePoint) && digits.length < 6) {
digits.push(codePoint);
codePoint = this.consumeCodePoint();
}
var questionMarks = false;
while (codePoint === QUESTION_MARK && digits.length < 6) {
digits.push(codePoint);
codePoint = this.consumeCodePoint();
questionMarks = true;
}
if (questionMarks) {
var start_1 = parseInt(css_line_break_1.fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? ZERO : digit); })), 16);
var end = parseInt(css_line_break_1.fromCodePoint.apply(void 0, digits.map(function (digit) { return (digit === QUESTION_MARK ? F : digit); })), 16);
return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start_1, end: end };
}
var start = parseInt(css_line_break_1.fromCodePoint.apply(void 0, digits), 16);
if (this.peekCodePoint(0) === HYPHEN_MINUS && isHex(this.peekCodePoint(1))) {
this.consumeCodePoint();
codePoint = this.consumeCodePoint();
var endDigits = [];
while (isHex(codePoint) && endDigits.length < 6) {
endDigits.push(codePoint);
codePoint = this.consumeCodePoint();
}
var end = parseInt(css_line_break_1.fromCodePoint.apply(void 0, endDigits), 16);
return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: end };
}
else {
return { type: 30 /* UNICODE_RANGE_TOKEN */, start: start, end: start };
}
};
Tokenizer.prototype.consumeIdentLikeToken = function () {
var value = this.consumeName();
if (value.toLowerCase() === 'url' && this.peekCodePoint(0) === LEFT_PARENTHESIS) {
this.consumeCodePoint();
return this.consumeUrlToken();
}
else if (this.peekCodePoint(0) === LEFT_PARENTHESIS) {
this.consumeCodePoint();
return { type: 19 /* FUNCTION_TOKEN */, value: value };
}
return { type: 20 /* IDENT_TOKEN */, value: value };
};
Tokenizer.prototype.consumeUrlToken = function () {
var value = [];
this.consumeWhiteSpace();
if (this.peekCodePoint(0) === EOF) {
return { type: 22 /* URL_TOKEN */, value: '' };
}
var next = this.peekCodePoint(0);
if (next === APOSTROPHE || next === QUOTATION_MARK) {
var stringToken = this.consumeStringToken(this.consumeCodePoint());
if (stringToken.type === 0 /* STRING_TOKEN */) {
this.consumeWhiteSpace();
if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {
this.consumeCodePoint();
return { type: 22 /* URL_TOKEN */, value: stringToken.value };
}
}
this.consumeBadUrlRemnants();
return BAD_URL_TOKEN;
}
while (true) {
var codePoint = this.consumeCodePoint();
if (codePoint === EOF || codePoint === RIGHT_PARENTHESIS) {
return { type: 22 /* URL_TOKEN */, value: css_line_break_1.fromCodePoint.apply(void 0, value) };
}
else if (isWhiteSpace(codePoint)) {
this.consumeWhiteSpace();
if (this.peekCodePoint(0) === EOF || this.peekCodePoint(0) === RIGHT_PARENTHESIS) {
this.consumeCodePoint();
return { type: 22 /* URL_TOKEN */, value: css_line_break_1.fromCodePoint.apply(void 0, value) };
}
this.consumeBadUrlRemnants();
return BAD_URL_TOKEN;
}
else if (codePoint === QUOTATION_MARK ||
codePoint === APOSTROPHE ||
codePoint === LEFT_PARENTHESIS ||
isNonPrintableCodePoint(codePoint)) {
this.consumeBadUrlRemnants();
return BAD_URL_TOKEN;
}
else if (codePoint === REVERSE_SOLIDUS) {
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
value.push(this.consumeEscapedCodePoint());
}
else {
this.consumeBadUrlRemnants();
return BAD_URL_TOKEN;
}
}
else {
value.push(codePoint);
}
}
};
Tokenizer.prototype.consumeWhiteSpace = function () {
while (isWhiteSpace(this.peekCodePoint(0))) {
this.consumeCodePoint();
}
};
Tokenizer.prototype.consumeBadUrlRemnants = function () {
while (true) {
var codePoint = this.consumeCodePoint();
if (codePoint === RIGHT_PARENTHESIS || codePoint === EOF) {
return;
}
if (isValidEscape(codePoint, this.peekCodePoint(0))) {
this.consumeEscapedCodePoint();
}
}
};
Tokenizer.prototype.consumeStringSlice = function (count) {
var SLICE_STACK_SIZE = 50000;
var value = '';
while (count > 0) {
var amount = Math.min(SLICE_STACK_SIZE, count);
value += css_line_break_1.fromCodePoint.apply(void 0, this._value.splice(0, amount));
count -= amount;
}
this._value.shift();
return value;
};
Tokenizer.prototype.consumeStringToken = function (endingCodePoint) {
var value = '';
var i = 0;
do {
var codePoint = this._value[i];
if (codePoint === EOF || codePoint === undefined || codePoint === endingCodePoint) {
value += this.consumeStringSlice(i);
return { type: 0 /* STRING_TOKEN */, value: value };
}
if (codePoint === LINE_FEED) {
this._value.splice(0, i);
return BAD_STRING_TOKEN;
}
if (codePoint === REVERSE_SOLIDUS) {
var next = this._value[i + 1];
if (next !== EOF && next !== undefined) {
if (next === LINE_FEED) {
value += this.consumeStringSlice(i);
i = -1;
this._value.shift();
}
else if (isValidEscape(codePoint, next)) {
value += this.consumeStringSlice(i);
value += css_line_break_1.fromCodePoint(this.consumeEscapedCodePoint());
i = -1;
}
}
}
i++;
} while (true);
};
Tokenizer.prototype.consumeNumber = function () {
var repr = [];
var type = exports.FLAG_INTEGER;
var c1 = this.peekCodePoint(0);
if (c1 === PLUS_SIGN || c1 === HYPHEN_MINUS) {
repr.push(this.consumeCodePoint());
}
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint());
}
c1 = this.peekCodePoint(0);
var c2 = this.peekCodePoint(1);
if (c1 === FULL_STOP && isDigit(c2)) {
repr.push(this.consumeCodePoint(), this.consumeCodePoint());
type = exports.FLAG_NUMBER;
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint());
}
}
c1 = this.peekCodePoint(0);
c2 = this.peekCodePoint(1);
var c3 = this.peekCodePoint(2);
if ((c1 === E || c1 === e) && (((c2 === PLUS_SIGN || c2 === HYPHEN_MINUS) && isDigit(c3)) || isDigit(c2))) {
repr.push(this.consumeCodePoint(), this.consumeCodePoint());
type = exports.FLAG_NUMBER;
while (isDigit(this.peekCodePoint(0))) {
repr.push(this.consumeCodePoint());
}
}
return [stringToNumber(repr), type];
};
Tokenizer.prototype.consumeNumericToken = function () {
var _a = this.consumeNumber(), number = _a[0], flags = _a[1];
var c1 = this.peekCodePoint(0);
var c2 = this.peekCodePoint(1);
var c3 = this.peekCodePoint(2);
if (isIdentifierStart(c1, c2, c3)) {
var unit = this.consumeName();
return { type: 15 /* DIMENSION_TOKEN */, number: number, flags: flags, unit: unit };
}
if (c1 === PERCENTAGE_SIGN) {
this.consumeCodePoint();
return { type: 16 /* PERCENTAGE_TOKEN */, number: number, flags: flags };
}
return { type: 17 /* NUMBER_TOKEN */, number: number, flags: flags };
};
Tokenizer.prototype.consumeEscapedCodePoint = function () {
var codePoint = this.consumeCodePoint();
if (isHex(codePoint)) {
var hex = css_line_break_1.fromCodePoint(codePoint);
while (isHex(this.peekCodePoint(0)) && hex.length < 6) {
hex += css_line_break_1.fromCodePoint(this.consumeCodePoint());
}
if (isWhiteSpace(this.peekCodePoint(0))) {
this.consumeCodePoint();
}
var hexCodePoint = parseInt(hex, 16);
if (hexCodePoint === 0 || isSurrogateCodePoint(hexCodePoint) || hexCodePoint > 0x10ffff) {
return REPLACEMENT_CHARACTER;
}
return hexCodePoint;
}
if (codePoint === EOF) {
return REPLACEMENT_CHARACTER;
}
return codePoint;
};
Tokenizer.prototype.consumeName = function () {
var result = '';
while (true) {
var codePoint = this.consumeCodePoint();
if (isNameCodePoint(codePoint)) {
result += css_line_break_1.fromCodePoint(codePoint);
}
else if (isValidEscape(codePoint, this.peekCodePoint(0))) {
result += css_line_break_1.fromCodePoint(this.consumeEscapedCodePoint());
}
else {
this.reconsumeCodePoint(codePoint);
return result;
}
}
};
return Tokenizer;
}());
exports.Tokenizer = Tokenizer;
//# sourceMappingURL=tokenizer.js.map

1
dist/lib/css/syntax/tokenizer.js.map vendored Normal file

File diff suppressed because one or more lines are too long