in parsers/LU/JS/packages/lu/src/parser/lufile/visitor.js [84:146]
static tokenizeUtterance(exp) {
let splitString = [];
let curList = splitString;
let curEntity = undefined;
let entityNameCapture = false;
let entityValueCapture = false;
let entityRoleCapture = false;
exp.split('').forEach(char => {
switch(char)
{
case '{':
let newEntity = {entityName : '', role : '', entityValue : undefined, parent : curEntity};
curList.push(newEntity);
curEntity = newEntity;
entityNameCapture = true;
entityRoleCapture = false;
entityValueCapture = false;
break;
case '}':
curEntity = curEntity.parent || undefined;
curList = curEntity != undefined ? curEntity.entityValue : splitString;
entityValueCapture = false;
entityRoleCapture = false;
entityNameCapture = false;
break;
case '=':
curEntity.entityValue = [];
curList = curEntity.entityValue;
entityNameCapture = false;
entityValueCapture = true;
entityRoleCapture = false;
break;
case ':':
if (curEntity !== undefined && curEntity.entityName !== '' && entityNameCapture === true) {
entityRoleCapture = true;
entityNameCapture = false;
entityValueCapture = false;
} else {
curList.push(char);
}
break;
default :
if (entityNameCapture) {
curEntity.entityName += char;
} else if (entityValueCapture) {
if (char === ' ') {
// we do not want leading spaces
if (curList.length !== 0) {
curList.push(char);
}
} else {
curList.push(char);
}
} else if (entityRoleCapture) {
curEntity.role += char;
} else {
curList.push(char);
}
break;
}
});
return splitString;
}