@@ -95,58 +95,56 @@ class Visitor {
9595 let entityNameCapture = false ;
9696 let entityValueCapture = false ;
9797 let entityRoleCapture = false ;
98- exp . split ( '' ) . forEach ( char => {
99- switch ( char )
100- {
101- case '{' :
102- let newEntity = { entityName : '' , role : '' , entityValue : undefined , parent : curEntity } ;
103- curList . push ( newEntity ) ;
104- curEntity = newEntity ;
105- entityNameCapture = true ;
106- entityRoleCapture = false ;
107- entityValueCapture = false ;
108- break ;
109- case '}' :
110- curEntity = curEntity . parent || undefined ;
111- curList = curEntity != undefined ? curEntity . entityValue : splitString ;
112- entityValueCapture = false ;
113- entityRoleCapture = false ;
114- entityNameCapture = false ;
115- break ;
116- case '=' :
117- curEntity . entityValue = [ ] ;
118- curList = curEntity . entityValue ;
98+ let expChars = exp . split ( '' ) ;
99+ let escapeChar = false ;
100+ expChars . forEach ( function ( char , index ) {
101+ if ( char === '\\' && expChars . length > index + 1 && EscapeCharsInUtterance . includes ( expChars [ index + 1 ] ) ) {
102+ escapeChar = true ;
103+ } else if ( char === '{' && ! escapeChar ) {
104+ let newEntity = { entityName : '' , role : '' , entityValue : undefined , parent : curEntity } ;
105+ curList . push ( newEntity ) ;
106+ curEntity = newEntity ;
107+ entityNameCapture = true ;
108+ entityRoleCapture = false ;
109+ entityValueCapture = false ;
110+ } else if ( char === '}' && ! escapeChar ) {
111+ curEntity = curEntity . parent || undefined ;
112+ curList = curEntity != undefined ? curEntity . entityValue : splitString ;
113+ entityValueCapture = false ;
114+ entityRoleCapture = false ;
115+ entityNameCapture = false ;
116+ } else if ( char === '=' && ! entityValueCapture ) {
117+ curEntity . entityValue = [ ] ;
118+ curList = curEntity . entityValue ;
119+ entityNameCapture = false ;
120+ entityValueCapture = true ;
121+ entityRoleCapture = false ;
122+ } else if ( char === ':' && ! entityRoleCapture ) {
123+ if ( curEntity !== undefined && curEntity . entityName !== '' && entityNameCapture === true ) {
124+ entityRoleCapture = true ;
119125 entityNameCapture = false ;
120- entityValueCapture = true ;
121- entityRoleCapture = false ;
122- break ;
123- case ':' :
124- if ( curEntity !== undefined && curEntity . entityName !== '' && entityNameCapture === true ) {
125- entityRoleCapture = true ;
126- entityNameCapture = false ;
127- entityValueCapture = false ;
128- } else {
129- curList . push ( char ) ;
130- }
131- break ;
132- default :
133- if ( entityNameCapture ) {
134- curEntity . entityName += char ;
135- } else if ( entityValueCapture ) {
136- if ( char === ' ' ) {
137- // we do not want leading spaces
138- if ( curList . length !== 0 ) {
139- curList . push ( char ) ;
140- }
141- } else {
126+ entityValueCapture = false ;
127+ } else {
128+ curList . push ( char ) ;
129+ }
130+ } else {
131+ escapeChar = false ;
132+ if ( entityNameCapture ) {
133+ curEntity . entityName += char ;
134+ } else if ( entityValueCapture ) {
135+ if ( char === ' ' ) {
136+ // we do not want leading spaces
137+ if ( curList . length !== 0 ) {
142138 curList . push ( char ) ;
143139 }
144- } else if ( entityRoleCapture ) {
145- curEntity . role += char ;
146140 } else {
147141 curList . push ( char ) ;
148142 }
149- break ;
143+ } else if ( entityRoleCapture ) {
144+ curEntity . role += char ;
145+ } else {
146+ curList . push ( char ) ;
147+ }
150148 }
151149 } ) ;
152150 return splitString ;
0 commit comments