Added directive parsing to gannt

Ensured tests pass
This commit is contained in:
chris moran 2020-07-27 10:16:41 -04:00
parent e5b22684cd
commit b9fa2f4125
No known key found for this signature in database
GPG Key ID: 7E303019E6BB02D7
2 changed files with 45 additions and 2 deletions

View File

@ -3,6 +3,7 @@ import { sanitizeUrl } from '@braintree/sanitize-url';
import { logger } from '../../logger'; import { logger } from '../../logger';
import { getConfig } from '../../config'; import { getConfig } from '../../config';
import utils from '../../utils'; import utils from '../../utils';
import mermaidAPI from '../../mermaidAPI';
let dateFormat = ''; let dateFormat = '';
let axisFormat = ''; let axisFormat = '';
@ -19,6 +20,10 @@ let inclusiveEndDates = false;
// The serial order of the task in the script // The serial order of the task in the script
let lastOrder = 0; let lastOrder = 0;
export const parseDirective = function(statement, context, type) {
mermaidAPI.parseDirective(this, statement, context, type);
};
export const clear = function() { export const clear = function() {
sections = []; sections = [];
tasks = []; tasks = [];
@ -582,6 +587,7 @@ export const bindFunctions = function(element) {
}; };
export default { export default {
parseDirective,
clear, clear,
setDateFormat, setDateFormat,
getDateFormat, getDateFormat,

View File

@ -11,7 +11,19 @@
%x href %x href
%x callbackname %x callbackname
%x callbackargs %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';
\%\%(?!\{)*[^\n]* /* skip comments */
[^\}]\%\%*[^\n]* /* skip comments */
\%\%*[^\n]*[\n]* /* do nothing */
[\n]+ return 'NL'; [\n]+ return 'NL';
\s+ /* skip whitespace */ \s+ /* skip whitespace */
@ -77,7 +89,8 @@ that id.
%% /* language grammar */ %% /* language grammar */
start start
: gantt document 'EOF' { return $2; } : directive start
| gantt document 'EOF' { return $2; }
; ;
document document
@ -102,8 +115,14 @@ statement
| section {yy.addSection($1.substr(8));$$=$1.substr(8);} | section {yy.addSection($1.substr(8));$$=$1.substr(8);}
| clickStatement | clickStatement
| taskTxt taskData {yy.addTask($1,$2);$$='task';} | 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. click allows any combination of href and call.
*/ */
@ -131,4 +150,22 @@ clickStatementDebug
| click href callbackname callbackargs {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;} | click href callbackname callbackargs {$$=$1 + ' ' + $2 + ' ' + $3 + ' ' + $4;}
| click href {$$=$1 + ' ' + $2;} | 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', 'sequence'); }
;
%%