Skip to content

Commit

Permalink
refactor: Remove directives from grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
sidharthv96 committed Aug 25, 2023
1 parent f0883be commit 1e0918c
Show file tree
Hide file tree
Showing 14 changed files with 8 additions and 690 deletions.
30 changes: 0 additions & 30 deletions packages/mermaid/src/diagrams/c4/parser/c4Diagram.jison
Original file line number Diff line number Diff line change
Expand Up @@ -72,25 +72,16 @@
%x string_kv_key
%x string_kv_value

%x open_directive
%x type_directive
%x arg_directive
%x close_directive
%x acc_title
%x acc_descr
%x acc_descr_multiline

%%

\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
.*direction\s+TB[^\n]* return 'direction_tb';
.*direction\s+BT[^\n]* return 'direction_bt';
.*direction\s+RL[^\n]* return 'direction_rl';
.*direction\s+LR[^\n]* return 'direction_lr';
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';


"title"\s[^#\n;]+ return 'title';
Expand Down Expand Up @@ -207,7 +198,6 @@ accDescr\s*"{"\s* { this.begin("acc_descr_multiline");}
start
: mermaidDoc
| direction
| directive start
;

direction
Expand All @@ -225,26 +215,6 @@ mermaidDoc
: graphConfig
;

directive
: openDirective typeDirective closeDirective NEWLINE
| openDirective typeDirective ':' argDirective closeDirective NEWLINE
;

openDirective
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
;

typeDirective
: type_directive { }
;

argDirective
: arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }
;

closeDirective
: close_directive { yy.parseDirective('}%%', 'close_directive', 'c4Context'); }
;

graphConfig
: C4_CONTEXT NEWLINE statements EOF {yy.setC4Type($1)}
Expand Down
30 changes: 0 additions & 30 deletions packages/mermaid/src/diagrams/class/parser/classDiagram.jison
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
%x href
%x callback_name
%x callback_args
%x open_directive
%x type_directive
%x arg_directive
%x acc_title
%x acc_descr
%x acc_descr_multiline
Expand All @@ -24,15 +21,10 @@
%x namespace
%x namespace-body
%%
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
.*direction\s+TB[^\n]* return 'direction_tb';
.*direction\s+BT[^\n]* return 'direction_bt';
.*direction\s+RL[^\n]* return 'direction_rl';
.*direction\s+LR[^\n]* return 'direction_lr';
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';
\%\%(?!\{)*[^\n]*(\r?\n?)+ /* skip comments */
\%\%[^\n]*(\r?\n)* /* skip comments */
accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; }
Expand Down Expand Up @@ -220,7 +212,6 @@ line was introduced with 'click'.

start
: mermaidDoc
| directive start
| statements
;

Expand All @@ -239,27 +230,6 @@ mermaidDoc
: graphConfig
;

directive
: openDirective typeDirective closeDirective NEWLINE
| openDirective typeDirective ':' argDirective closeDirective NEWLINE
;

openDirective
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
;

typeDirective
: type_directive { yy.parseDirective($1, 'type_directive'); }
;

argDirective
: arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }
;

closeDirective
: close_directive { yy.parseDirective('}%%', 'close_directive', 'class'); }
;

graphConfig
: CLASS_DIAGRAM NEWLINE statements EOF
;
Expand Down
31 changes: 2 additions & 29 deletions packages/mermaid/src/diagrams/er/parser/erDiagram.jison
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
%lex

%options case-insensitive
%x open_directive type_directive arg_directive block
%x block
%x acc_title
%x acc_descr
%x acc_descr_multiline
Expand All @@ -14,11 +14,6 @@ accDescr\s*":"\s* { this.begin("ac
accDescr\s*"{"\s* { this.begin("acc_descr_multiline");}
<acc_descr_multiline>[\}] { this.popState(); }
<acc_descr_multiline>[^\}]* return "acc_descr_multiline_value";
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';
[\n]+ return 'NEWLINE';
\s+ /* skip whitespace */
[\s]+ return 'SPACE';
Expand Down Expand Up @@ -75,7 +70,6 @@ o\{ return 'ZERO_OR_MORE';

start
: 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }
| directive start
;

document
Expand All @@ -90,14 +84,9 @@ line
| EOF { $$=[];}
;

directive
: openDirective typeDirective closeDirective 'NEWLINE'
| openDirective typeDirective ':' argDirective closeDirective 'NEWLINE'
;

statement
: directive
| entityName relSpec entityName ':' role
: entityName relSpec entityName ':' role
{
yy.addEntity($1);
yy.addEntity($3);
Expand Down Expand Up @@ -185,20 +174,4 @@ role
| 'ALPHANUM' { $$ = $1; }
;

openDirective
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
;

typeDirective
: type_directive { yy.parseDirective($1, 'type_directive'); }
;

argDirective
: arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }
;

closeDirective
: close_directive { yy.parseDirective('}%%', 'close_directive', 'er'); }
;

%%
36 changes: 1 addition & 35 deletions packages/mermaid/src/diagrams/flowchart/parser/flow.jison
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,8 @@
%x href
%x callbackname
%x callbackargs
%x open_directive
%x type_directive
%x arg_directive
%x close_directive

%%
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';
accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; }
<acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; }
accDescr\s*":"\s* { this.begin("acc_descr");return 'acc_descr'; }
Expand Down Expand Up @@ -272,35 +263,10 @@ that id.
%% /* language grammar */

start
: mermaidDoc
| directive start
;

directive
: openDirective typeDirective closeDirective separator
| openDirective typeDirective ':' argDirective closeDirective separator
;

openDirective
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
;

typeDirective
: type_directive { yy.parseDirective($type_directive, 'type_directive'); }
;

argDirective
: arg_directive { $arg_directive = $arg_directive.trim().replace(/'/g, '"'); yy.parseDirective($arg_directive, 'arg_directive'); }
;

closeDirective
: close_directive { yy.parseDirective('}%%', 'close_directive', 'flowchart'); }
;

mermaidDoc
: graphConfig document
;


document
: /* empty */
{ $$ = [];}
Expand Down
32 changes: 1 addition & 31 deletions packages/mermaid/src/diagrams/gantt/parser/gantt.jison
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,11 @@
%x href
%x callbackname
%x callbackargs
%x open_directive
%x type_directive
%x arg_directive
%x close_directive
%x acc_title
%x acc_descr
%x acc_descr_multiline
%%
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';

accTitle\s*":"\s* { this.begin("acc_title");return 'acc_title'; }
<acc_title>(?!\n|;|#)*[^\n]* { this.popState(); return "acc_title_value"; }
Expand Down Expand Up @@ -112,8 +104,7 @@ weekday\s+sunday return 'weekday_sunday'
%% /* language grammar */

start
: directive start
| gantt document 'EOF' { return $2; }
: gantt document 'EOF' { return $2; }
;

document
Expand Down Expand Up @@ -155,13 +146,8 @@ statement
| section { yy.addSection($1.substr(8));$$=$1.substr(8); }
| clickStatement
| taskTxt taskData {yy.addTask($1,$2);$$='task';}
| directive
;

directive
: openDirective typeDirective closeDirective 'NL'
| openDirective typeDirective ':' argDirective closeDirective 'NL'
;

/*
click allows any combination of href and call.
Expand Down Expand Up @@ -192,20 +178,4 @@ clickStatementDebug
| click href {$$=$1 + ' ' + $2;}
;

openDirective
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
;

typeDirective
: type_directive { yy.parseDirective($1, 'type_directive'); }
;

argDirective
: arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }
;

closeDirective
: close_directive { yy.parseDirective('}%%', 'close_directive', 'gantt'); }
;

%%
Loading

0 comments on commit 1e0918c

Please sign in to comment.