diff --git a/src/diagrams/state/parser/stateDiagram.jison b/src/diagrams/state/parser/stateDiagram.jison index b880355ed..23a2c8c12 100644 --- a/src/diagrams/state/parser/stateDiagram.jison +++ b/src/diagrams/state/parser/stateDiagram.jison @@ -15,6 +15,8 @@ // Special states for recognizing aliases %x ID %x STATE +%x STATE_STRING +%x STATE_ID %x ALIAS %x SCALE %x struct @@ -35,6 +37,11 @@ \s+"width" {this.popState();} "state"\s+ { this.pushState('STATE'); } +["] this.begin("STATE_STRING"); +"as"\s* {this.popState('STATE_ID');return "AS";} +[^\n] {this.popState('STATE_ID');return "ID";} +["] this.popState(); +[^"]* { console.log('Long description:', yytext);return "STATE_DESCR";} [^\n\s\{]+ {console.log('COMPOSIT_STATE', yytext);return 'COMPOSIT_STATE';} \{ {this.popState();this.pushState('struct'); console.log('begin struct', yytext);return 'STRUCT_START';} \} { console.log('Ending struct'); this.popState(); return 'STRUCT_STOP';}} @@ -106,6 +113,7 @@ statement | HIDE_EMPTY | scale WIDTH | COMPOSIT_STATE STRUCT_START document STRUCT_STOP + | STATE_DESCR AS ID ; idStatement diff --git a/src/diagrams/state/stateDiagram.spec.js b/src/diagrams/state/stateDiagram.spec.js index 61d97e44c..664d1051b 100644 --- a/src/diagrams/state/stateDiagram.spec.js +++ b/src/diagrams/state/stateDiagram.spec.js @@ -121,29 +121,36 @@ describe('state diagram, ', function() { parser.parse(str); }); - // it('should handle relation definitions', function() { - // const str = `stateDiagram\n - // scale 600 width + it('should handle state deifintions with separation of id', function() { + const str = `stateDiagram\n + state "Long state description" as state1 + `; - // [*] --> State1 - // State1 --> State2 : Succeeded - // State1 --> [*] : Aborted - // State2 --> State3 : Succeeded - // State2 --> [*] : Aborted - // state State3 { - // state "Accumulate Enough Data\nLong State Name" as long1 - // long1 : Just a test - // [*] --> long1 - // long1 --> long1 : New Data - // long1 --> ProcessData : Enough Data - // } - // State3 --> State3 : Failed - // State3 --> [*] : Succeeded / Save Result - // State3 --> [*] : Aborted - // `; + parser.parse(str); + }); + it('should State definition with quotes', function() { + const str = `stateDiagram\n + scale 600 width - // parser.parse(str); - // }); + [*] --> State1 + State1 --> State2 : Succeeded + State1 --> [*] : Aborted + State2 --> State3 : Succeeded + State2 --> [*] : Aborted + state State3 { + state "Accumulate Enough Data\nLong State Name" as long1 + long1 : Just a test + [*] --> long1 + long1 --> long1 : New Data + long1 --> ProcessData : Enough Data + } + State3 --> State3 : Failed + State3 --> [*] : Succeeded / Save Result + State3 --> [*] : Aborted + `; + + parser.parse(str); + }); // it('should handle relation definitions', function() { // const str = `stateDiagram\n // state fork_state <>