|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- const { isWhitespace } = require('../helpers')
- const {
- ATTRIBUTE_VALUE_WRAPPED_CONTEXT,
- ATTRIBUTES_CONTEXT,
- ATTRIBUTE_VALUE_BARE_CONTEXT
- } = require('../constants/tokenizer-contexts')
- const {
- TOKEN_ATTRIBUTE_VALUE_WRAPPER_START
- } = require('../constants/token-types')
-
- function wrapper (state, tokens) {
- const wrapper = state.decisionBuffer
-
- tokens.push({
- type: TOKEN_ATTRIBUTE_VALUE_WRAPPER_START,
- content: wrapper,
- startPosition: state.caretPosition,
- endPosition: state.caretPosition
- })
-
- state.accumulatedContent = ''
- state.decisionBuffer = ''
- state.currentContext = ATTRIBUTE_VALUE_WRAPPED_CONTEXT
- state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT] = { wrapper }
- state.caretPosition++
- }
-
- function bare (state) {
- state.accumulatedContent = state.decisionBuffer
- state.decisionBuffer = ''
- state.currentContext = ATTRIBUTE_VALUE_BARE_CONTEXT
- state.caretPosition++
- }
-
- function tagEnd (state) {
- state.accumulatedContent = ''
- state.decisionBuffer = ''
- state.currentContext = ATTRIBUTES_CONTEXT
- }
-
- function parseSyntax (chars, state, tokens) {
- if (chars === '"' || chars === '\'') {
- return wrapper(state, tokens)
- }
-
- if (chars === '>' || chars === '/') {
- return tagEnd(state, tokens)
- }
-
- if (!isWhitespace(chars)) {
- return bare(state, tokens)
- }
-
- state.decisionBuffer = ''
- state.caretPosition++
- }
-
- module.exports = {
- parseSyntax
- }
|