Files
rappaurio-sae501_502/app/node_modules/hyntax/lib/tokenizer-context-handlers/attribute-value-wrapped.js
2023-09-25 09:41:55 +02:00

54 lines
1.3 KiB
JavaScript

const { calculateTokenCharactersRange } = require('../helpers')
const {
TOKEN_ATTRIBUTE_VALUE,
TOKEN_ATTRIBUTE_VALUE_WRAPPER_END
} = require('../constants/token-types')
const {
ATTRIBUTES_CONTEXT,
ATTRIBUTE_VALUE_WRAPPED_CONTEXT
} = require('../constants/tokenizer-contexts')
function wrapper (state, tokens) {
const range = calculateTokenCharactersRange(state, { keepBuffer: false })
const endWrapperPosition = range.endPosition + 1
tokens.push(
{
type: TOKEN_ATTRIBUTE_VALUE,
content: state.accumulatedContent,
startPosition: range.startPosition,
endPosition: range.endPosition
},
{
type: TOKEN_ATTRIBUTE_VALUE_WRAPPER_END,
content: state.decisionBuffer,
startPosition: endWrapperPosition,
endPosition: endWrapperPosition
}
)
state.accumulatedContent = ''
state.decisionBuffer = ''
state.currentContext = ATTRIBUTES_CONTEXT
state.caretPosition++
state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT] = undefined
}
function parseSyntax (chars, state, tokens) {
const wrapperChar = state.contextParams[ATTRIBUTE_VALUE_WRAPPED_CONTEXT].wrapper
if (chars === wrapperChar) {
return wrapper(state, tokens)
}
state.accumulatedContent += state.decisionBuffer
state.decisionBuffer = ''
state.caretPosition++
}
module.exports = {
parseSyntax
}