in src/language/semantics/xpLexer.ts [1038:1116]
private updateResult(
poppedContext: Token | null | undefined,
result: Token[],
newToken: Token
) {
let cachedRealToken = this.latestRealToken
if (cachedRealToken) {
}
let state = newToken.charType
let newTokenValue = newToken.value
if (newTokenValue !== '') {
newToken.length = newTokenValue.length
newToken.line = this.lineNumber
newToken.startCharacter = this.tokenCharNumber
if (newToken.tokenType === TokenLevelState.nodeNameTest) {
if (newTokenValue.includes('#')) {
newToken.tokenType = TokenLevelState.functionNameTest
}
}
let isWhitespace = newToken.charType === CharLevelState.lWs
if (this.deferWsNewLine) {
if (isWhitespace) {
this.lineNumber++
newToken.line = this.lineNumber
this.tokenCharNumber = this.wsCharNumber
} else {
this.tokenCharNumber = 0
this.lineNumber++
this.wsNewLine = true
}
this.deferWsNewLine = false
} else if (this.wsNewLine) {
if (isWhitespace) {
this.tokenCharNumber = this.wsCharNumber
} else {
this.tokenCharNumber += newTokenValue.length
}
this.wsNewLine = false
} else {
this.tokenCharNumber += newTokenValue.length
}
if (!isWhitespace) {
this.wsCharNumber = 0
}
if (!isWhitespace) {
result.push(newToken)
}
let prevToken = this.latestRealToken
this.setLabelForLastTokenOnly(prevToken, newToken)
this.setLabelsUsingCurrentToken(poppedContext, prevToken, newToken)
if (
prevToken &&
!isWhitespace &&
this.elementNameTests &&
this.attributeNameTests
) {
if (prevToken.tokenType === TokenLevelState.nodeNameTest) {
if (this.elementNameTests.indexOf(prevToken.value) < 0) {
this.elementNameTests.push(prevToken.value)
}
} else if (prevToken.tokenType === TokenLevelState.attributeNameTest) {
if (this.attributeNameTests.indexOf(prevToken.value) < 0) {
this.attributeNameTests.push(prevToken.value)
}
}
}
if (!(state === CharLevelState.lC || state === CharLevelState.lWs)) {
this.latestRealToken = newToken
}
}
}