UNPKG

markuplint-angular-parser

Version:
79 lines 3.04 kB
import { v4 as uuid } from 'uuid'; import { tokenizer } from './tokenizer.js'; const reAttrsInStartTag = /(\s*)([^\u0000-\u001F\u007F-\u009F "'>/=]+)(?:(\s*)(=)(\s*)(?:"([^"]*)"|'([^']*)'|(\S*)))?/; export default function attrTokenizer(raw, line, col, startOffset, isDynamicValue) { const attrMatched = reAttrsInStartTag.exec(raw); if (!attrMatched) { throw new SyntaxError('Illegal attribute token'); } const spacesBeforeAttrString = attrMatched[1] ?? ''; const nameChars = attrMatched[2] ?? ''; const spacesBeforeEqualChars = attrMatched[3] ?? ''; const equalChars = attrMatched[4] ?? null; const spacesAfterEqualChars = attrMatched[5] ?? ''; const quoteChars = attrMatched[6] == null && attrMatched[7] == null ? null : '"'; const valueChars = attrMatched[6] ?? attrMatched[7] ?? attrMatched[8] ?? (quoteChars ? '' : null); let offset = startOffset; const spacesBeforeName = tokenizer(spacesBeforeAttrString, line, col, offset); line = spacesBeforeName.endLine; col = spacesBeforeName.endCol; offset = spacesBeforeName.endOffset; const name = tokenizer(nameChars, line, col, offset); line = name.endLine; col = name.endCol; offset = name.endOffset; const spacesBeforeEqual = tokenizer(spacesBeforeEqualChars, line, col, offset); line = spacesBeforeEqual.endLine; col = spacesBeforeEqual.endCol; offset = spacesBeforeEqual.endOffset; const equal = tokenizer(equalChars, line, col, offset); line = equal.endLine; col = equal.endCol; offset = equal.endOffset; const spacesAfterEqual = tokenizer(spacesAfterEqualChars, line, col, offset); line = spacesAfterEqual.endLine; col = spacesAfterEqual.endCol; offset = spacesAfterEqual.endOffset; const startQuote = tokenizer(quoteChars, line, col, offset); line = startQuote.endLine; col = startQuote.endCol; offset = startQuote.endOffset; const value = tokenizer(valueChars, line, col, offset); line = value.endLine; col = value.endCol; offset = value.endOffset; const endQuote = tokenizer(quoteChars, line, col, offset); const attrToken = tokenizer(nameChars + spacesBeforeEqualChars + (equalChars ?? '') + spacesAfterEqualChars + (quoteChars ?? '') + (valueChars ?? '') + (quoteChars ?? ''), name.startLine, name.startCol, name.startOffset); return { type: 'attr', uuid: uuid(), raw: attrToken.raw, startOffset: attrToken.startOffset, endOffset: attrToken.endOffset, startLine: attrToken.startLine, endLine: attrToken.endLine, startCol: attrToken.startCol, endCol: attrToken.endCol, spacesBeforeName, name, spacesBeforeEqual, equal, spacesAfterEqual, startQuote, value, endQuote, isDuplicatable: false, nodeName: name.raw, isDynamicValue, }; } //# sourceMappingURL=attr-tokenizer.js.map