in experimental/generation/generator/packages/library/src/mergeAssets.ts [564:615]
function parseLGTemplate(oldTemplate: any, oldBody: any, oldStatements: string[], newStatements: string[], newEnumValueMap: Map<string, number>, oldEnumEntitySet: Set<string>, newSwitchStatements: string[]): {startIndex: number, endIndex: number} {
let startIndex = 0
let endIndex = 0
const oldRules = oldBody.switchCaseTemplateBody().switchCaseRule()
for (const rule of oldRules) {
const state = rule.switchCaseStat()
if (state.text.match('\s*-\s*SWITCH')) {
startIndex = state.start.line + oldTemplate.sourceRange.range.start.line - 1
newSwitchStatements.push(oldStatements[startIndex])
let i = startIndex + 1
while (i < oldStatements.length && !oldStatements[i].toLowerCase().match('case') && !oldStatements[i].toLowerCase().match('default')) {
newSwitchStatements.push(oldStatements[i])
i++
}
} else if (state.text.match('\s*-\s*CASE')) {
const enumEntity = state.text.replace('-CASE:${', '').replace('}', '')
oldEnumEntitySet.add(enumEntity)
if (newEnumValueMap.has(enumEntity)) {
let k = state.start.line + oldTemplate.sourceRange.range.start.line - 1
newSwitchStatements.push(oldStatements[k])
k++
while (k < oldStatements.length && !oldStatements[k].toLowerCase().match('case') && !oldStatements[k].toLowerCase().match('default')) {
newSwitchStatements.push(oldStatements[k])
k++
}
}
} else if (state.text.match('\s*-\s*DEFAULT')) {
for (const [key, value] of newEnumValueMap) {
if (!oldEnumEntitySet.has(key)) {
let k = value - 1
newSwitchStatements.push(newStatements[k])
k++
while (k < newStatements.length && !newStatements[k].toLowerCase().match('case') && !newStatements[k].toLowerCase().match('default')) {
newSwitchStatements.push(newStatements[k])
k++
}
}
}
let m = state.start.line + oldTemplate.sourceRange.range.start.line - 1
newSwitchStatements.push(oldStatements[m])
m++
while (m < oldStatements.length && !oldStatements[m].match('#') && !oldStatements[m].startsWith('[')) {
newSwitchStatements.push(oldStatements[m])
m++
}
endIndex = m
}
}
return {startIndex, endIndex}
}