@@ -35,7 +35,7 @@ class DisplayFile {
3535 inout = line [ 37 ] . toUpperCase ( ) ;
3636 y = line . substring ( 38 , 41 ) . trim ( ) ;
3737 x = line . substring ( 41 , 44 ) . trim ( ) ;
38- keywords = line . substring ( 44 ) . trim ( ) ;
38+ keywords = line . substring ( 44 ) . trimEnd ( ) ;
3939
4040 switch ( line [ 16 ] ) {
4141 case 'R' :
@@ -256,41 +256,9 @@ class DisplayFile {
256256 conditions : [ ]
257257 } ;
258258
259- let inString = false ;
260- let value = `` ;
261-
262- keywordStrings . forEach ( keywordString => {
263- if ( keywordString . startsWith ( `'` ) ) {
264- inString = true ;
265- keywordString = keywordString . substring ( 1 ) ;
266-
267- if ( keywordString . endsWith ( `'` ) || keywordString . endsWith ( `-` ) ) {
268- keywordString = keywordString . substring ( 0 , keywordString . length - 1 ) ;
269- }
270-
271- result . value = keywordString ;
272- value += `!` ;
273- return ;
274- }
275-
276- if ( keywordString . endsWith ( '-' ) ) {
277- if ( inString )
278- result . value += keywordString . substring ( 0 , keywordString . length - 1 ) ;
279- else
280- value += keywordString . substring ( 0 , keywordString . length - 1 ) ;
281- } else
282- if ( keywordString . endsWith ( `'` ) ) {
283- if ( inString ) {
284- result . value += keywordString . substring ( 0 , keywordString . length - 1 ) ;
285- inString = false ;
286- }
287- } else {
288- value += keywordString + ` ` ;
289- }
290-
291- value += `!` ;
292- } ) ;
259+ const newLineMark = `~` ;
293260
261+ let value = keywordStrings . join ( newLineMark ) + newLineMark ;
294262 let conditionalLine = 1 ;
295263
296264 if ( value . length > 0 ) {
@@ -299,25 +267,45 @@ class DisplayFile {
299267 let inBrakcets = 0 ;
300268 let word = `` ;
301269 let innerValue = `` ;
270+ let inString = false ;
302271
303272 for ( let i = 0 ; i < value . length ; i ++ ) {
304273 switch ( value [ i ] ) {
305- case `!` :
274+ case `+` :
275+ case `-` :
276+ if ( ! inString ) {
277+ innerValue += value [ i ] ;
278+ }
279+ break ;
280+
281+ case `'` :
306282 if ( inBrakcets > 0 ) {
307283 innerValue += value [ i ] ;
308284 } else {
309- conditionalLine += 1 ;
285+ if ( inString ) {
286+ inString = false ;
287+
288+ result . value = innerValue ;
289+ innerValue = `` ;
290+ } else {
291+ inString = true ;
292+ }
310293 }
311294 break ;
295+
312296 case `(` :
313297 inBrakcets ++ ;
314298 break ;
315299 case `)` :
316300 inBrakcets -- ;
317301 break ;
302+
303+ case newLineMark :
318304 case ` ` :
319- if ( inBrakcets > 0 ) {
320- innerValue += value [ i ] ;
305+ if ( inBrakcets > 0 || inString ) {
306+ if ( value [ i ] !== newLineMark ) {
307+ innerValue += value [ i ] ;
308+ }
321309 } else {
322310 if ( word . length > 0 ) {
323311 let conditionals = conditionalStrings ? conditionalStrings [ conditionalLine ] : undefined ;
@@ -332,9 +320,11 @@ class DisplayFile {
332320 innerValue = `` ;
333321 }
334322 }
323+
324+ if ( value [ i ] === newLineMark ) conditionalLine += 1 ;
335325 break ;
336326 default :
337- if ( inBrakcets > 0 )
327+ if ( inBrakcets > 0 || inString )
338328 innerValue += value [ i ] ;
339329 else
340330 word += value [ i ] ;
0 commit comments