mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-10 02:49:40 +02:00
Fix issue with new line in the lexer
This commit is contained in:
@@ -16,6 +16,10 @@
|
|||||||
%%
|
%%
|
||||||
|
|
||||||
\%\%[^\n]* /* do nothing */
|
\%\%[^\n]* /* do nothing */
|
||||||
|
|
||||||
|
/*[>][;] return 'TAGEND';
|
||||||
|
[>][\n] return 'TAGEND';*/
|
||||||
|
|
||||||
["] this.begin("string");
|
["] this.begin("string");
|
||||||
<string>["] this.popState();
|
<string>["] this.popState();
|
||||||
<string>[^"]* return "TEXT";
|
<string>[^"]* return "TEXT";
|
||||||
@@ -60,6 +64,7 @@
|
|||||||
<roundVertex>[\)] this.popState();
|
<roundVertex>[\)] this.popState();
|
||||||
<roundVertex>[^\)]* {return "ROUND";}
|
<roundVertex>[^\)]* {return "ROUND";}
|
||||||
|
|
||||||
|
\n+ return 'NEWLINE';
|
||||||
\s+ /* do nothing */
|
\s+ /* do nothing */
|
||||||
"style" return 'STYLE';
|
"style" return 'STYLE';
|
||||||
"default" return 'DEFAULT';
|
"default" return 'DEFAULT';
|
||||||
@@ -182,22 +187,26 @@
|
|||||||
"}" return 'DIAMOND_STOP'
|
"}" return 'DIAMOND_STOP'
|
||||||
"\"" return 'QUOTE';
|
"\"" return 'QUOTE';
|
||||||
"say" return 'say';
|
"say" return 'say';
|
||||||
\n+ return 'NEWLINE';
|
|
||||||
<<EOF>> return 'EOF';
|
<<EOF>> return 'EOF';
|
||||||
. return 'INVALID';
|
. return 'INVALID';
|
||||||
|
|
||||||
/lex
|
/lex
|
||||||
|
|
||||||
|
/* operator associations and precedence */
|
||||||
|
|
||||||
|
%left '^'
|
||||||
|
|
||||||
|
|
||||||
%start mermaidDoc
|
%start mermaidDoc
|
||||||
|
|
||||||
%% /* language grammar */
|
%% /* language grammar */
|
||||||
|
|
||||||
mermaidDoc: graphConfig document;
|
mermaidDoc: graphConfig lineEnd document
|
||||||
|
;
|
||||||
|
|
||||||
graphConfig
|
graphConfig
|
||||||
: GRAPH DIR
|
: GRAPH DIR
|
||||||
{ yy.setDirection($2);$$ = $2;}
|
{ console.log('Got GCONF DIR');yy.setDirection($2);$$ = $2;}
|
||||||
| GRAPH TAGEND
|
| GRAPH TAGEND
|
||||||
{ yy.setDirection("LR");$$ = $2;}
|
{ yy.setDirection("LR");$$ = $2;}
|
||||||
| GRAPH TAGSTART
|
| GRAPH TAGSTART
|
||||||
@@ -205,7 +214,7 @@ graphConfig
|
|||||||
| GRAPH UP
|
| GRAPH UP
|
||||||
{ yy.setDirection("BT");$$ = $2;}
|
{ yy.setDirection("BT");$$ = $2;}
|
||||||
| GRAPH DOWN
|
| GRAPH DOWN
|
||||||
{ yy.setDirection("TB");$$ = $2;}
|
{ console.log('Got TB');yy.setDirection("TB");$$ = $2;}
|
||||||
;
|
;
|
||||||
|
|
||||||
document
|
document
|
||||||
@@ -214,40 +223,104 @@ document
|
|||||||
;
|
;
|
||||||
|
|
||||||
line
|
line
|
||||||
: statement { }
|
: statement lineEnd {console.log('Got statement');}
|
||||||
| 'NEWLINE'
|
|
||||||
| EOF
|
|
||||||
;
|
;
|
||||||
|
lineEnd: lineEnd2|lineEnd2 lineEnd;
|
||||||
|
lineEnd2:'NEWLINE'{console.log('Got line end');}| EOF| 'SEMI' {console.log('Got semi');};
|
||||||
|
|
||||||
statement
|
statement
|
||||||
: verticeStatement
|
: verticeStatement
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
verticeStatement:
|
verticeStatement:
|
||||||
vertex link vertex
|
vertex linkStatement vertex
|
||||||
{ yy.addLink($1,$3,$2);$$ = [$1,$3];}
|
{ console.log('Got vtx stat: ');yy.addLink($1,$3,$2);$$ = [$1,$3];}
|
||||||
| vertex
|
| vertex
|
||||||
{$$ = [$1];}
|
{console.log('Got vtx stat (single): '+$1);$$ = [$1];}
|
||||||
;
|
;
|
||||||
vertex: alphaNum SQUARE
|
vertex: alphaNum vertexType
|
||||||
{$$ = $1;yy.addVertex($1,$2,'square');}
|
{$$ = $1;yy.addVertex($1,$2.text,$2.type);}
|
||||||
| alphaNum ROUND
|
| alphaNum
|
||||||
{$$ = $1;yy.addVertex($1,$2,'round');}
|
{console.log('Got vtx: '+$1);$$ = $1;yy.addVertex($1,$1,'square');}
|
||||||
| alphaNum CIRCLE
|
|
||||||
{$$ = $1;yy.addVertex($1,$2,'circle');}
|
|
||||||
| alphaNum DIAMOND
|
|
||||||
{$$ = $1;yy.addVertex($1,$2,'diamond');}
|
|
||||||
| alphaNum ODD
|
|
||||||
{$$ = $1;yy.addVertex($1,$2,'diamond');}
|
|
||||||
;
|
;
|
||||||
alphaNum
|
|
||||||
: alphaNumStatement
|
vertexType: SQUARE
|
||||||
{$$=$1;}
|
{$$ = {text:$1,type:'square'};}
|
||||||
| alphaNum alphaNumStatement
|
| ROUND
|
||||||
{$$=$1+''+$2;}
|
{$$ = {text:$1,type:'round'};}
|
||||||
|
| CIRCLE
|
||||||
|
{$$ = {text:$1,type:'circle'};}
|
||||||
|
| DIAMOND
|
||||||
|
{$$ = {text:$1,type:'diamond'};}
|
||||||
|
| ODD
|
||||||
|
{$$ = {text:$1,type:'odd'};}
|
||||||
|
;
|
||||||
|
link: linkStatement arrowText
|
||||||
|
{$1.text = $2;$$ = $1;}
|
||||||
|
| linkStatement TESTSTR SPACE
|
||||||
|
{$1.text = $2;$$ = $1;}
|
||||||
|
| linkStatement arrowText SPACE
|
||||||
|
{$1.text = $2;$$ = $1;}
|
||||||
|
| linkStatement
|
||||||
|
{$$ = $1;}
|
||||||
|
| '--' text ARROW_POINT
|
||||||
|
{$$ = {"type":"arrow","stroke":"normal","text":$2};}
|
||||||
|
| '--' text ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"normal","text":$2};}
|
||||||
|
| '--' text ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"normal","text":$2};}
|
||||||
|
| '--' text ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"normal","text":$2};}
|
||||||
|
| '-.' text DOTTED_ARROW_POINT
|
||||||
|
{$$ = {"type":"arrow","stroke":"dotted","text":$2};}
|
||||||
|
| '-.' text DOTTED_ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"dotted","text":$2};}
|
||||||
|
| '-.' text DOTTED_ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"dotted","text":$2};}
|
||||||
|
| '-.' text DOTTED_ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"dotted","text":$2};}
|
||||||
|
| '==' text THICK_ARROW_POINT
|
||||||
|
{$$ = {"type":"arrow","stroke":"thick","text":$2};}
|
||||||
|
| '==' text THICK_ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"thick","text":$2};}
|
||||||
|
| '==' text THICK_ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"thick","text":$2};}
|
||||||
|
| '==' text THICK_ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"thick","text":$2};}
|
||||||
;
|
;
|
||||||
|
|
||||||
alphaNumStatement
|
linkStatement: ARROW_POINT
|
||||||
|
{console.log('Got linkStatement');$$ = {"type":"arrow","stroke":"normal"};}
|
||||||
|
| ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"normal"};}
|
||||||
|
| ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"normal"};}
|
||||||
|
| ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"normal"};}
|
||||||
|
| DOTTED_ARROW_POINT
|
||||||
|
{$$ = {"type":"arrow","stroke":"dotted"};}
|
||||||
|
| DOTTED_ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"dotted"};}
|
||||||
|
| DOTTED_ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"dotted"};}
|
||||||
|
| DOTTED_ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"dotted"};}
|
||||||
|
| THICK_ARROW_POINT
|
||||||
|
{$$ = {"type":"arrow","stroke":"thick"};}
|
||||||
|
| THICK_ARROW_CIRCLE
|
||||||
|
{$$ = {"type":"arrow_circle","stroke":"thick"};}
|
||||||
|
| THICK_ARROW_CROSS
|
||||||
|
{$$ = {"type":"arrow_cross","stroke":"thick"};}
|
||||||
|
| THICK_ARROW_OPEN
|
||||||
|
{$$ = {"type":"arrow_open","stroke":"thick"};}
|
||||||
|
;
|
||||||
|
|
||||||
|
alphaNum
|
||||||
|
: alphaNumToken |alphaNum alphaNumToken
|
||||||
|
;
|
||||||
|
|
||||||
|
alphaNum2
|
||||||
: DIR
|
: DIR
|
||||||
{$$=$1;}
|
{$$=$1;}
|
||||||
| alphaNumToken
|
| alphaNumToken
|
||||||
@@ -255,11 +328,91 @@ alphaNumStatement
|
|||||||
| alphaNumToken MINUS alphaNumToken
|
| alphaNumToken MINUS alphaNumToken
|
||||||
{$$=$1+'-'+$3;}
|
{$$=$1+'-'+$3;}
|
||||||
;
|
;
|
||||||
|
|
||||||
alphaNumToken : ALPHA | NUM | COLON | COMMA | PLUS | EQUALS | MULT | DOT | BRKT ;
|
|
||||||
|
|
||||||
message
|
arrowText:
|
||||||
: 'say' TEXT { console.log('Saying: '+2);return $2; }
|
PIPE text PIPE
|
||||||
;
|
{$$ = $2;}
|
||||||
|
;
|
||||||
|
|
||||||
|
text: textToken
|
||||||
|
{$$=$1;}
|
||||||
|
| text textToken
|
||||||
|
{$$=$1+''+$2;}
|
||||||
|
| TESTSTR
|
||||||
|
{$$=$1;}
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
commentText: commentToken
|
||||||
|
{$$=$1;}
|
||||||
|
| commentText commentToken
|
||||||
|
{$$=$1+''+$2;}
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
keywords
|
||||||
|
: STYLE | LINKSTYLE | CLASSDEF | CLASS | CLICK | GRAPH | DIR | subgraph | end | DOWN | UP;
|
||||||
|
|
||||||
|
|
||||||
|
textNoTags: textNoTagsToken
|
||||||
|
{$$=$1;}
|
||||||
|
| textNoTags textNoTagsToken
|
||||||
|
{$$=$1+''+$2;}
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
classDefStatement:CLASSDEF SPACE DEFAULT SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.addClass($3,$5);}
|
||||||
|
| CLASSDEF SPACE alphaNum SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.addClass($3,$5);}
|
||||||
|
;
|
||||||
|
|
||||||
|
classStatement:CLASS SPACE alphaNum SPACE alphaNum
|
||||||
|
{$$ = $1;yy.setClass($3, $5);}
|
||||||
|
;
|
||||||
|
|
||||||
|
clickStatement:CLICK SPACE alphaNum SPACE alphaNum
|
||||||
|
{$$ = $1;yy.setClickEvent($3, $5);}
|
||||||
|
;
|
||||||
|
|
||||||
|
styleStatement:STYLE SPACE alphaNum SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.addVertex($3,undefined,undefined,$5);}
|
||||||
|
| STYLE SPACE HEX SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.updateLink($3,$5);}
|
||||||
|
;
|
||||||
|
|
||||||
|
linkStyleStatement
|
||||||
|
: LINKSTYLE SPACE DEFAULT SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.updateLink($3,$5);}
|
||||||
|
| LINKSTYLE SPACE NUM SPACE stylesOpt
|
||||||
|
{$$ = $1;yy.updateLink($3,$5);}
|
||||||
|
;
|
||||||
|
|
||||||
|
commentStatement: PCT PCT commentText;
|
||||||
|
|
||||||
|
stylesOpt: style
|
||||||
|
{$$ = [$1]}
|
||||||
|
| stylesOpt COMMA style
|
||||||
|
{$1.push($3);$$ = $1;}
|
||||||
|
;
|
||||||
|
|
||||||
|
style: styleComponent
|
||||||
|
|style styleComponent
|
||||||
|
{$$ = $1 + $2;}
|
||||||
|
;
|
||||||
|
|
||||||
|
styleComponent: ALPHA | COLON | MINUS | NUM | UNIT | SPACE | HEX | BRKT | DOT | STYLE | PCT ;
|
||||||
|
|
||||||
|
/* Token lists */
|
||||||
|
|
||||||
|
commentToken : textToken | graphCodeTokens ;
|
||||||
|
|
||||||
|
textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT;
|
||||||
|
|
||||||
|
textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ;
|
||||||
|
|
||||||
|
alphaNumToken : ALPHA | NUM | COLON | COMMA | PLUS | EQUALS | MULT | DOT | BRKT;
|
||||||
|
|
||||||
|
graphCodeTokens: PIPE | PS | PE | SQS | SQE | DIAMOND_START | DIAMOND_STOP | TAG_START | TAG_END | ARROW_CROSS | ARROW_POINT | ARROW_CIRCLE | ARROW_OPEN | QUOTE | SEMI ;
|
||||||
%%
|
%%
|
Reference in New Issue
Block a user