| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- "use strict";
- const htmlparser = require("htmlparser2");
- const jsTokens = require("js-tokens");
- const OPEN_BRACE = "{".charCodeAt(0);
- module.exports = class JsxLikeTokenizer extends htmlparser.Tokenizer {
- stateBeforeAttributeValue(c) {
- if (c === OPEN_BRACE) {
- const startIndex = this.index;
- const endIndex = getIndexOfExpressionEnd(this.buffer, startIndex + 1);
- if (endIndex != null) {
- this.sectionStart = startIndex;
- this.index = endIndex + 1;
- this.cbs.onattribdata(this.sectionStart, this.index);
- this.sectionStart = -1;
- this.cbs.onattribend(1 /* QuoteType.Unquoted */, this.index);
- this.state = 8 /* BeforeAttributeName */;
- this.stateBeforeAttributeName(this.buffer.charCodeAt(this.index));
- return;
- }
- }
- super.stateBeforeAttributeValue(c);
- }
- };
- function getIndexOfExpressionEnd(source, startIndex) {
- let index = startIndex;
- let braceStack = 0;
- for (const token of jsTokens(source.slice(startIndex))) {
- if (token.value === "}") {
- if (braceStack === 0) {
- return index;
- }
- braceStack--;
- } else if (token.value === "{") {
- braceStack++;
- }
- index += token.value.length;
- }
- return null;
- }
|