diff --git a/gulp/tasks/jison.js b/gulp/tasks/jison.js index 7149f5548..4beb57b3b 100644 --- a/gulp/tasks/jison.js +++ b/gulp/tasks/jison.js @@ -1,9 +1,11 @@ var gulp = require('gulp'); var shell = require('gulp-shell'); var jison = require('gulp-jison'); +var filelog = require('gulp-filelog'); gulp.task('jison', function() { return gulp.src('./src/**/*.jison') + .pipe(filelog('Jison file:')) .pipe(jison({ moduleType: 'commonjs' })) .pipe(gulp.dest('./src/')); }); diff --git a/gulp/tasks/test.js b/gulp/tasks/test.js index 4d32a2968..037f74f4a 100644 --- a/gulp/tasks/test.js +++ b/gulp/tasks/test.js @@ -28,6 +28,11 @@ gulp.task('jasmine',['jison','lint'], function () { .pipe(jasmine({includeStackTrace:true})); }); +gulp.task('jas', function () { + return gulp.src(['src/**/*.spec.js']) + .pipe(jasmine({includeStackTrace:true})); +}); + gulp.task('tape', shell.task(['./node_modules/.bin/tape ./test/cli_test-*.js'])); gulp.task('coverage', function (cb) { diff --git a/package.json b/package.json index 2e12a8d60..ed408fffa 100644 --- a/package.json +++ b/package.json @@ -49,11 +49,12 @@ "gulp-concat": "~2.4.1", "gulp-data": "^1.1.1", "gulp-ext-replace": "~0.1.0", + "gulp-filelog": "^0.4.1", "gulp-hogan": "^1.1.0", "gulp-insert": "^0.4.0", "gulp-istanbul": "^0.4.0", "gulp-jasmine": "~1.0.1", - "gulp-jison": "~1.0.0", + "gulp-jison": "~1.2.0", "gulp-jshint": "^1.9.0", "gulp-less": "^3.0.1", "gulp-rename": "~1.2.0", diff --git a/src/diagrams/flow2/flow2.spec.js b/src/diagrams/flow2/flow2.spec.js deleted file mode 100644 index c1583b0e6..000000000 --- a/src/diagrams/flow2/flow2.spec.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Created by knut on 14-11-18. - */ -ddescribe('when parsing an info graph it',function() { - var parseError; - beforeEach(function () { - ex = require('./parser/flow2').parser; - ex.yy = require('./flow2Db'); - parseError = function(err, hash) { - console.log('Syntax error:' + err); - }; - //ex.yy.parseError = parseError; - }); - - - - it('should handle a vertex definition', function () { - var str = 'graph TB\napa[tjo(apa)]\n'; - - ex.parse(str); - }); - - it('should handle a vertex definition with escaped text', function () { - var str = 'graph TB\napa[\"hello()\"]\n'; - - ex.parse(str); - }); - - it('should handle a vertex definition with escaped text', function () { - var str = 'graph TB\napa[\"hello[man]\"]\n'; - - ex.parse(str); - }); - - it('should handle a rounded vertex definition', function () { - var str = 'graph TB\napa(tjo apa !!!)\n'; - - ex.parse(str); - }); - - it('should handle a rounded vertex definition with escaped text', function () { - var str = 'graph TB\napa(\"hello(man)\")\n'; - - ex.parse(str); - }); - - it('should handle a rounded vertex definition with escaped text', function () { - var str = 'graph TB\napa(\"hello[man]\")\n'; - - ex.parse(str); - }); - - it('should handle a circöe vertex definition', function () { - var str = 'graph TB\napa((tjo apa !!!))\n'; - - ex.parse(str); - }); - - it('should handle a rounded vertex definition with escaped text', function () { - var str = 'graph TB\napa((\"hello(man)\"))\n'; - - ex.parse(str); - }); - - it('should handle a rounded vertex definition with escaped text', function () { - var str = 'graph TB\napa((\"hello[man]\"))\n'; - - ex.parse(str); - }); - - it('should handle a diamond vertex definition', function () { - var str = 'graph TB\napa{tjo apa !!!}\n'; - - ex.parse(str); - }); - - it('should handle a diamond vertex definition with escaped text', function () { - var str = 'graph TB\napa{\"hello(man)\"}\n'; - - ex.parse(str); - }); - - it('should handle a diamond vertex definition with escaped text', function () { - var str = 'graph TB\napa{\"hello[man]\"}\n'; - - ex.parse(str); - }); - it('should handle a odd vertex definition', function () { - var str = 'graph TB\napa>tjo apa !!!]\n'; - - ex.parse(str); - }); - - it('should handle a odd vertex definition with escaped text', function () { - var str = 'graph TB\napa>\"hello(man)\"]\n'; - - ex.parse(str); - }); - - it('should handle a odd vertex definition with escaped text', function () { - var str = 'graph TB\napa>\"hello[man]\"]\n'; - - ex.parse(str); - }); -}); \ No newline at end of file diff --git a/src/diagrams/flow2/flow2Db.js b/src/diagrams/flow2/flow2Db.js deleted file mode 100644 index e570b744b..000000000 --- a/src/diagrams/flow2/flow2Db.js +++ /dev/null @@ -1,341 +0,0 @@ -/** - * Created by knut on 14-11-03. - */ - -var vertices = {}; -var edges = []; -var classes = []; -var subGraphs = []; -var subCount=0; -var direction; -// Functions to be run after graph rendering -var funs = []; -/** - * Function called by parser when a node definition has been found - * @param id - * @param text - * @param type - * @param style - */ -exports.addVertex = function (id, text, type, style) { - var txt; - - if(typeof id === 'undefined'){ - return; - } - if(id.trim().length === 0){ - return; - } - - if (typeof vertices[id] === 'undefined') { - vertices[id] = {id: id, styles: [], classes:[]}; - } - if (typeof text !== 'undefined') { - txt = text.trim(); - - // strip quotes if string starts and exnds with a quote - if(txt[0] === '"' && txt[txt.length-1] === '"'){ - txt = txt.substring(1,txt.length-1); - } - - vertices[id].text = txt; - } - if (typeof type !== 'undefined') { - vertices[id].type = type; - } - if (typeof type !== 'undefined') { - vertices[id].type = type; - } - if (typeof style !== 'undefined') { - if (style !== null) { - style.forEach(function (s) { - vertices[id].styles.push(s); - }); - } - } -}; - -/** - * Function called by parser when a link/edge definition has been found - * @param start - * @param end - * @param type - * @param linktext - */ -exports.addLink = function (start, end, type, linktext) { - //console.log('Got edge', start, end); - var edge = {start: start, end: end, type: undefined, text: ''}; - linktext = type.text; - - if (typeof linktext !== 'undefined') { - edge.text = linktext.trim(); - - // strip quotes if string starts and exnds with a quote - if(edge.text[0] === '"' && edge.text[edge.text.length-1] === '"'){ - edge.text = edge.text.substring(1,edge.text.length-1); - } - } - - if (typeof type !== 'undefined') { - edge.type = type.type; - edge.stroke = type.stroke; - } - edges.push(edge); -}; -/** - * Updates a link with a style - * @param pos - * @param style - */ -exports.updateLink = function (pos, style) { - var position = pos.substr(1); - - if(pos === 'default'){ - edges.defaultStyle = style; - }else{ - edges[pos].style = style; - } -}; - -exports.addClass = function (id, style) { - if (typeof classes[id] === 'undefined') { - classes[id] = {id: id, styles: []}; - } - - if (typeof style !== 'undefined') { - if (style !== null) { - style.forEach(function (s) { - classes[id].styles.push(s); - }); - } - } -}; - -/** - * Called by parser when a graph definition is found, stores the direction of the chart. - * @param dir - */ -exports.setDirection = function (dir) { - //console.log('Got dir: '+dir); - direction = dir; -}; - -/** - * Called by parser when a graph definition is found, stores the direction of the chart. - * @param dir - */ -exports.setClass = function (id,className) { - if(id.indexOf(',')>0){ - id.split(',').forEach(function(id2){ - if(typeof vertices[id2] !== 'undefined'){ - vertices[id2].classes.push(className); - } - }); - }else{ - if(typeof vertices[id] !== 'undefined'){ - vertices[id].classes.push(className); - } - } -}; -/** - * Called by parser when a graph definition is found, stores the direction of the chart. - * @param dir - */ -exports.setClickEvent = function (id,functionName) { - - - if(id.indexOf(',')>0){ - id.split(',').forEach(function(id2) { - if (typeof vertices[id2] !== 'undefined') { - funs.push(function () { - var elem = document.getElementById(id2); - if (elem !== null) { - elem.onclick = function () { - eval(functionName + '(\'' + id2 + '\')'); // jshint ignore:line - }; - } - }); - } - }); - }else{ - //console.log('Checking now for ::'+id); - if(typeof vertices[id] !== 'undefined'){ - funs.push(function(){ - var elem = document.getElementById(id); - if(elem !== null){ - //console.log('id was NOT null: '+id); - elem.onclick = function(){eval(functionName+'(\'' + id + '\')');}; // jshint ignore:line - } - else{ - //console.log('id was null: '+id); - } - }); - } - } - - -}; - -exports.bindFunctions = function(){ - //setTimeout(function(){ - funs.forEach(function(fun){ - fun(); - }); - //},1000); - -}; -exports.getDirection = function () { - return direction; -}; -/** - * Retrieval function for fetching the found nodes after parsing has completed. - * @returns {{}|*|vertices} - */ -exports.getVertices = function () { - return vertices; -}; - -/** - * Retrieval function for fetching the found links after parsing has completed. - * @returns {{}|*|edges} - */ -exports.getEdges = function () { - return edges; -}; - -/** - * Retrieval function for fetching the found class definitions after parsing has completed. - * @returns {{}|*|classes} - */ -exports.getClasses = function () { - return classes; -}; - -/** - * Clears the internal graph db so that a new graph can be parsed. - */ -exports.clear = function () { - vertices = {}; - classes = {}; - edges = []; - funs = []; - subGraphs = []; - subCount = 0; -}; -/** - * - * @returns {string} - */ -exports.defaultStyle = function () { - return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; -}; - -/** - * Clears the internal graph db so that a new graph can be parsed. - */ -exports.addSubGraph = function (list, title) { - function uniq(a) { - var prims = {"boolean":{}, "number":{}, "string":{}}, objs = []; - - return a.filter(function(item) { - var type = typeof item; - if(item===' '){ - return false; - } - if(type in prims) - return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); - else - return objs.indexOf(item) >= 0 ? false : objs.push(item); - }); - } - - var nodeList = []; - - nodeList = uniq(nodeList.concat.apply(nodeList,list)); - - - var subGraph = {id:'subGraph'+subCount, nodes:nodeList,title:title}; -//console.log('subGraph:' + subGraph.title + subGraph.id); -//console.log(subGraph.nodes); - subGraphs.push(subGraph); - subCount = subCount + 1; - return subGraph.id; -}; - -var getPosForId = function(id){ - var i; - for(i=0;i2000){ - return; - - } - //var nPos = getPosForId(subGraphs[pos].id); - posCrossRef[secCount]=pos; - console.log('Setting ',' ',secCount,' to ',pos); - // Check if match - if(subGraphs[pos].id === id){ - return { - result:true, - count:0 - }; - } - - - var count = 0; - var posCount = 1; - while(count=0){ - var res = indexNodes(id,childPos); - if(res.result){ - return { - result:true, - count:posCount+res.count - }; - }else{ - posCount = posCount + res.count; - } - } - count = count +1; - } - - return { - result:false, - count:posCount - }; - -}; - - - -exports.getDepthFirstPos = function (pos) { - return posCrossRef[pos]; -}; -exports.indexNodes = function (id) { - secCount = -1; - if(subGraphs.length>0){ - indexNodes('none',subGraphs.length-1,0); - } -}; - -exports.getSubGraphs = function (list) { - return subGraphs; -}; - -exports.parseError = function(err,hash){ - mermaid.parseError(err,hash); -}; \ No newline at end of file diff --git a/src/diagrams/flow2/flow2Renderer.js b/src/diagrams/flow2/flow2Renderer.js deleted file mode 100644 index 3586726f1..000000000 --- a/src/diagrams/flow2/flow2Renderer.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Created by knut on 14-12-11. - */ -var db = require('./exampleDb'); -var exampleParser = require('./parser/example.js'); -var d3 = require('../../d3'); - -/** - * Draws a an info picture in the tag with id: id based on the graph definition in text. - * @param text - * @param id - */ -exports.draw = function (txt, id, ver) { - var parser; - parser = exampleParser.parser; - parser.yy = db; - - // Parse the graph definition - parser.parse(txt); - - // Fetch the default direction, use TD if none was found - var svg = d3.select('#'+id); - - var textstring = "mermaid!"; - var g = svg.append("g"); - - g.append("text") // text label for the x axis - .attr("x", 100) - .attr("y", 40) - .attr('class','version') - .attr('font-size','32px') - .style("text-anchor", "middle") - .text('mermaid '+ ver); - - /* - var box = exports.bounds.getBounds(); - - var height = box.stopy-box.starty+2*conf.diagramMarginY; - var width = box.stopx-box.startx+2*conf.diagramMarginX;*/ - - svg.attr("height",100); - svg.attr("width", 400 ); - //svg.attr("viewBox", '0 0 300 150'); -}; \ No newline at end of file diff --git a/src/diagrams/flow2/parser/flow2.jison b/src/diagrams/flow2/parser/flow2.jison deleted file mode 100644 index a3b63f71d..000000000 --- a/src/diagrams/flow2/parser/flow2.jison +++ /dev/null @@ -1,426 +0,0 @@ -/** mermaid - * http://knsv.github.io/mermaid/ - * (c) 2015 Knut Sveidqvist - * MIT license. - */ - -%lex -%x string squareVertex eSquareVertex roundVertex eRoundVertex circleVertex eCircleVertex diamondVertex eDiamondVertex oddVertex eOddVertex - -%options case-insensitive - -%{ - // Pre-lexer code can go here -%} - -%% - -\%\%[^\n]* return 'COMMENT'; - -[>][;] return 'TAGEND'; -[>][\n] return 'TAGEND'; - -["] this.begin("string"); -["] this.popState(); -[^"]* return "TEXT"; - -[\[]["] this.begin("eSquareVertex"); -["][\]] this.popState(); -[^"]* {return "SQUARE";} - -[\[] this.begin("squareVertex"); -[\]] this.popState(); -[^\]]* {return "SQUARE";} - -[\>]["] this.begin("eOddVertex"); -["][\]] this.popState(); -[^"]* {return "ODD";} - -[\>] this.begin("oddVertex"); -[\]] this.popState(); -[^\]]* {return "ODD";} - -[\{]["] this.begin("eDiamondVertex"); -["][\}] this.popState(); -[^"]* {console.log('edia: '+yytext);return "DIAMOND";} - -[\{] this.begin("diamondVertex"); -[\}] this.popState(); -[^\}]* {console.log('dia: '+yytext);return "DIAMOND";} - -[\(][\(]["] this.begin("eCircleVertex"); -["][\)][\)] this.popState(); -[^\"]* return "CIRCLE"; - -[\(][\(] this.begin("circleVertex"); -[\)][\)] this.popState(); -[^\)]* return "CIRCLE"; - -[\(]["] this.begin("eRoundVertex"); -["][\)] this.popState(); -[^"]* {return "ROUND";} - -[\(] this.begin("roundVertex"); -[\)] this.popState(); -[^\)]* {return "ROUND";} - -\n+ return 'NEWLINE'; - -"style"[\s]+.* return 'STYLE'; - -"default" return 'DEFAULT'; -"linkStyle" return 'LINKSTYLE'; -"classDef" return 'CLASSDEF'; -"class" return 'CLASS'; -"click" return 'CLICK'; -"graph"\s+ return 'GRAPH'; -"subgraph"\s+ return 'subgraph'; -"end"\s* return 'end'; -"LR" return 'DIR'; -"RL" return 'DIR'; -"TB" return 'DIR'; -"BT" return 'DIR'; -"TD" return 'DIR'; -"BR" return 'DIR'; -[0-9]+ return 'NUM'; -\# return 'BRKT'; -":" return 'COLON'; -";" return 'SEMI'; -"," return 'COMMA'; -"*" return 'MULT'; -"<" return 'TAGSTART'; -">" return 'TAGEND'; -"^" return 'UP'; -"v" return 'DOWN'; -\s*\-\-[x]\s* return 'ARROW_CROSS'; -\s*\-\-\>\s* return 'ARROW_POINT'; -\s*\-\-[o]\s* return 'ARROW_CIRCLE'; -\s*\-\-\-\s* return 'ARROW_OPEN'; -\s*\-\.\-[x]\s* return 'DOTTED_ARROW_CROSS'; -\s*\-\.\-\>\s* return 'DOTTED_ARROW_POINT'; -\s*\-\.\-[o]\s* return 'DOTTED_ARROW_CIRCLE'; -\s*\-\.\-\s* return 'DOTTED_ARROW_OPEN'; -\s*.\-[x]\s* return 'DOTTED_ARROW_CROSS'; -\s*\.\-\>\s* return 'DOTTED_ARROW_POINT'; -\s*\.\-[o]\s* return 'DOTTED_ARROW_CIRCLE'; -\s*\.\-\s* return 'DOTTED_ARROW_OPEN'; -\s*\=\=[x]\s* return 'THICK_ARROW_CROSS'; -\s*\=\=\>\s* return 'THICK_ARROW_POINT'; -\s*\=\=[o]\s* return 'THICK_ARROW_CIRCLE'; -\s*\=\=[\=]\s* return 'THICK_ARROW_OPEN'; -\s*\-\-\s* return '--'; -\s*\-\.\s* return '-.'; -\s*\=\=\s* return '=='; -\- return 'MINUS'; -"." return 'DOT'; -\+ return 'PLUS'; -\% return 'PCT'; -"=" return 'EQUALS'; -\= return 'EQUALS'; -[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u005C\u005F-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]| -[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]| -[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]| -[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]| -[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]| -[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]| -[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]| -[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]| -[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]| -[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]| -[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]| -[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]| -[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]| -[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]| -[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]| -[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]| -[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]| -[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]| -[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]| -[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]| -[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]| -[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]| -[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]| -[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]| -[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]| -[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]| -[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]| -[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]| -[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]| -[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]| -[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]| -[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]| -[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]| -[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]| -[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]| -[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]| -[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]| -[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]| -[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]| -[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]| -[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]| -[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]| -[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]| -[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]| -[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]| -[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]| -[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]| -[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]| -[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]| -[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]| -[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]| -[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]| -[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]| -[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]| -[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]| -[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]| -[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]| -[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]| -[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]]| -[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]| -[\uFFD2-\uFFD7\uFFDA-\uFFDC_\/] - return 'ALPHA'; -"|" return 'PIPE'; -"(" return 'PS'; -")" return 'PE'; -"[" return 'SQS'; -"]" return 'SQE'; -"{" return 'DIAMOND_START' -"}" return 'DIAMOND_STOP' -"\"" return 'QUOTE'; -"say" return 'say'; -<> return 'EOF'; -\s+ {console.log('S');return 'SP';} -. return 'INVALID'; - -/lex - -/* operator associations and precedence */ - -%left '^' - - -%start mermaidDoc - -%% /* language grammar */ - -mermaidDoc: initialComment -; - -initialComment - : COMMENT lineEnd initialComment - | graphConfig document - ; - -graphConfig - : GRAPH DIR lineEnd - { console.log('Got GCONF DIR');yy.setDirection($2);$$ = $2;} - | GRAPH TAGEND - { yy.setDirection("LR");$$ = $2;} - | GRAPH TAGSTART lineEnd - { yy.setDirection("RL");$$ = $2;} - | GRAPH UP lineEnd - { yy.setDirection("BT");$$ = $2;} - | GRAPH DOWN lineEnd - { console.log('Got TB');yy.setDirection("TB");$$ = $2;} - ; - -document - : /* empty */ - | document line - ; - -line - : statement lineEnd {console.log('Got statement');} - ; -lineEnd: lineEnd2|lineEnd2 lineEnd; -lineEnd2:'NEWLINE'{console.log('Got line end');}| EOF| 'SP'|'SEMI' {console.log('Got semi');}; - -statement - : verticeStatement - | STYLE { ;yy.handleStyleStatement($1);$$ = [$1];} - | COMMENT - | subgraph text lineEnd document end - {$$=yy.addSubGraph($4,$2);} - | subgraph lineEnd document end - {$$=yy.addSubGraph($3,undefined);} - ; - -verticeStatement: - vertex linkStatement vertex - { console.log('Got vtx stat: ');yy.addLink($1,$3,$2);$$ = [$1,$3];} - | vertex - {console.log('Got vtx stat (single): '+$1);$$ = [$1];} - ; -vertex: alphaNum vertexType - {$$ = $1;yy.addVertex($1,$2.text,$2.type);} - | alphaNum - {console.log('Got vtx: '+$1);$$ = $1;yy.addVertex($1,$1,'square');} - ; - - vertexType: SQUARE - {$$ = {text:$1,type:'square'};} - | ROUND - {$$ = {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 - {$$ = $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};} - ; - -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 - {$$=$1;} - | alphaNumToken - {$$=$1;} - | alphaNumToken MINUS alphaNumToken - {$$=$1+'-'+$3;} - ; - -arrowText: - PIPE text PIPE - {$$ = $2;} - ; - -text: textToken - {$$=$1;} - | text textToken - {$$=$1+''+$2;} - | TESTSTR - {$$=$1;} - ; - - - -commentText: commentToken - {$$=$1;} - | commentText commentToken - {$$=$1+''+$2;} - ; - - -keywords - : 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 alphaNum stylesOpt - {$$ = $1;yy.addVertex($3,undefined,undefined,$5);} - | STYLE HEX 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 ; -%% \ No newline at end of file diff --git a/src/diagrams/flowchart/parser/flow.spec.js b/src/diagrams/flowchart/parser/flow.spec.js index 70a650477..8783e4114 100644 --- a/src/diagrams/flowchart/parser/flow.spec.js +++ b/src/diagrams/flowchart/parser/flow.spec.js @@ -5,7 +5,7 @@ var graph = require('../graphDb'); var flow = require('./flow'); -ddescribe('when parsing ',function(){ +describe('when parsing ',function(){ beforeEach(function(){ flow.parser.yy = require('../graphDb'); flow.parser.yy.clear(); diff --git a/src/diagrams/sequenceDiagram/parser/sequence.jison b/src/diagrams/sequenceDiagram/parser/sequence.jison deleted file mode 100644 index 154b45500..000000000 --- a/src/diagrams/sequenceDiagram/parser/sequence.jison +++ /dev/null @@ -1,151 +0,0 @@ -/* description: Parses end executes mathematical expressions. */ - -/* lexical grammar */ -%lex - -%% -\n return 'NEWLINE'; -"sequence" return 'SEQ'; -"TB" return 'DIR'; -[0-9]+ return 'NUM'; -":" return 'COLON'; -\- return 'MINUS'; -\+ return 'PLUS'; -\= return 'EQUALS'; -[a-zåäöæøA-ZÅÄÖÆØ()]+ return 'ALPHA'; -"/" return 'SLASH'; -"(" return 'PS'; -")" return 'PE'; -"[" return 'SQS'; -"]" return 'SQE'; -\. return 'DOT'; -\s return 'SPACE'; -<> return 'EOF'; - -/lex - -/* operator associations and precedence */ - -%right '^' - -%start expressions - -%% /* language grammar */ - -expressions - : sequenceConfig statements - {$$=$1;} - | EOF - ; -sequenceConfig - : SEQ SPACE DIR newlines - { $$ = $3;} - ; - -statements - : statement newlines statements - {$$=$1;} - | statement EOF - {$$=$1;} - | statement newlines EOF - {$$=$1;} - ; - -preStatement - : alphaNum COLON text - {$$={a:$1,b:$3}} - ; - -statement - : preStatement - {yy.addActor($1.a,'actor',$1.b);$$='actor';} - | preStatement DOT message - {yy.addMessage($1.a,$1.b,$3);$$='message';} - | preStatement EQUALS callee DOT message - {yy.addMessage($1.a,$3,$5,$1.b);$$='actor';} - ; - -action: - SQS SQE - {$$='action';} - ; - -actorDefinition: - alphaNum COLON alphaNum - {$$='actor';} - ; -messageDefinition: - caller COLON answer EQUALS callee DOT message - {console.log('Got new message from='+$1+' to='+$5+' message='+$7+' answer='+$3);$$='actor';} - ; - -caller: - alphaNum - ; - -answer: - alphaNum - ; - -callee: - alphaNum - ; - -message: - alphaNum - ; - -spaceList - : SPACE spaceList - | SPACE - ; -newlines - : NEWLINE newlines - | SPACE newlines - | NEWLINE - | SPACE - ; -alphaNum - :alphaNumStatement - {$$=$1;} - ; - -alphaNumStatement - : alphaNum alphaNumToken - {$$=$1+''+$2;} - | alphaNumToken - ; - -alphaNumToken - : ALPHA - {$$=$1;} - | NUM - {$$=$1;} - ; - -text - :textStatement - {$$=$1;} - ; - -textStatement - : text textToken - {$$=$1+''+$2;} - | textToken - ; - -textToken - : alphaNumToken - | SPACE - {$$=$1;} - ; - -// Characters and spaces -//text: alphaNum SPACE text -// {$$ = $1 + ' ' +$3;} -// | alphaNum spaceList MINUS spaceList text -// {$$ = $1 + ' - ' +$5;} -// | alphaNum -// {$$ = $1;} - -%% \ No newline at end of file diff --git a/src/diagrams/sequenceDiagram/parser/sequence.js b/src/diagrams/sequenceDiagram/parser/sequence.js deleted file mode 100644 index 6f0ba0f3e..000000000 --- a/src/diagrams/sequenceDiagram/parser/sequence.js +++ /dev/null @@ -1,663 +0,0 @@ -/* parser generated by jison 0.4.15 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,11],$V1=[1,12],$V2=[1,17],$V3=[1,16],$V4=[6,8,28],$V5=[6,8,14,16,28,31,32],$V6=[6,8,14,16,18,28,31,32],$V7=[6,31,32],$V8=[1,35],$V9=[6,8,16,18,28,31,32]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"expressions":3,"sequenceConfig":4,"statements":5,"EOF":6,"SEQ":7,"SPACE":8,"DIR":9,"newlines":10,"statement":11,"preStatement":12,"alphaNum":13,"COLON":14,"text":15,"DOT":16,"message":17,"EQUALS":18,"callee":19,"action":20,"SQS":21,"SQE":22,"actorDefinition":23,"messageDefinition":24,"caller":25,"answer":26,"spaceList":27,"NEWLINE":28,"alphaNumStatement":29,"alphaNumToken":30,"ALPHA":31,"NUM":32,"textStatement":33,"textToken":34,"$accept":0,"$end":1}, -terminals_: {2:"error",6:"EOF",7:"SEQ",8:"SPACE",9:"DIR",14:"COLON",16:"DOT",18:"EQUALS",21:"SQS",22:"SQE",28:"NEWLINE",31:"ALPHA",32:"NUM"}, -productions_: [0,[3,2],[3,1],[4,4],[5,3],[5,2],[5,3],[12,3],[11,1],[11,3],[11,5],[20,2],[23,3],[24,7],[25,1],[26,1],[19,1],[17,1],[27,2],[27,1],[10,2],[10,2],[10,1],[10,1],[13,1],[29,2],[29,1],[30,1],[30,1],[15,1],[33,2],[33,1],[34,1],[34,1]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { -/* this == yyval */ - -var $0 = $$.length - 1; -switch (yystate) { -case 1: case 5: -this.$=$$[$0-1]; -break; -case 3: - this.$ = $$[$0-1]; -break; -case 4: case 6: -this.$=$$[$0-2]; -break; -case 7: -this.$={a:$$[$0-2],b:$$[$0]} -break; -case 8: -yy.addActor($$[$0].a,'actor',$$[$0].b);this.$='actor'; -break; -case 9: -yy.addMessage($$[$0-2].a,$$[$0-2].b,$$[$0]);this.$='message'; -break; -case 10: -yy.addMessage($$[$0-4].a,$$[$0-2],$$[$0],$$[$0-4].b);this.$='actor'; -break; -case 11: -this.$='action'; -break; -case 12: -this.$='actor'; -break; -case 13: -console.log('Got new message from='+$$[$0-6]+' to='+$$[$0-2]+' message='+$$[$0]+' answer='+$$[$0-4]);this.$='actor'; -break; -case 24: case 27: case 28: case 29: case 33: -this.$=$$[$0]; -break; -case 25: case 30: -this.$=$$[$0-1]+''+$$[$0]; -break; -} -}, -table: [{3:1,4:2,6:[1,3],7:[1,4]},{1:[3]},{5:5,11:6,12:7,13:8,29:9,30:10,31:$V0,32:$V1},{1:[2,2]},{8:[1,13]},{1:[2,1]},{6:[1,15],8:$V2,10:14,28:$V3},o($V4,[2,8],{16:[1,18],18:[1,19]}),{14:[1,20],30:21,31:$V0,32:$V1},o($V5,[2,24]),o($V5,[2,26]),o($V6,[2,27]),o($V6,[2,28]),{9:[1,22]},{5:23,6:[1,24],11:6,12:7,13:8,29:9,30:10,31:$V0,32:$V1},{1:[2,5]},o($V7,[2,22],{10:25,8:$V2,28:$V3}),o($V7,[2,23],{10:26,8:$V2,28:$V3}),{13:28,17:27,29:9,30:10,31:$V0,32:$V1},{13:30,19:29,29:9,30:10,31:$V0,32:$V1},{8:$V8,15:31,30:34,31:$V0,32:$V1,33:32,34:33},o($V5,[2,25]),{8:$V2,10:36,28:$V3},{1:[2,4]},{1:[2,6]},o($V7,[2,20]),o($V7,[2,21]),o($V4,[2,9]),o($V4,[2,17],{30:21,31:$V0,32:$V1}),{16:[1,37]},{16:[2,16],30:21,31:$V0,32:$V1},o([6,16,18,28],[2,7],{30:34,34:38,8:$V8,31:$V0,32:$V1}),o($V9,[2,29]),o($V9,[2,31]),o($V9,[2,32]),o($V9,[2,33]),o([31,32],[2,3]),{13:28,17:39,29:9,30:10,31:$V0,32:$V1},o($V9,[2,30]),o($V4,[2,10])], -defaultActions: {3:[2,2],5:[2,1],15:[2,5],23:[2,4],24:[2,6]}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - throw new Error(str); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: - function lex() { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; - } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; -/* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ - -EOF:1, - -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - -// resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, - -// consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - - this._input = this._input.slice(1); - return ch; - }, - -// unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - -// When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, - -// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, - -// retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, - -// displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, - -// displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - -// displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - -// test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; - - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, - -// return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - -// return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - -// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, - -// pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - -// produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - -// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - -// alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, - -// return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0:return 28; -break; -case 1:return 7; -break; -case 2:return 9; -break; -case 3:return 32; -break; -case 4:return 14; -break; -case 5:return 'MINUS'; -break; -case 6:return 'PLUS'; -break; -case 7:return 18; -break; -case 8:return 31; -break; -case 9:return 'SLASH'; -break; -case 10:return 'PS'; -break; -case 11:return 'PE'; -break; -case 12:return 21; -break; -case 13:return 22; -break; -case 14:return 16; -break; -case 15:return 8; -break; -case 16:return 6; -break; -} -}, -rules: [/^(?:\n)/,/^(?:sequence\b)/,/^(?:TB\b)/,/^(?:[0-9]+)/,/^(?::)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[a-zåäöæøA-ZÅÄÖÆØ()]+)/,/^(?:\/)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\.)/,/^(?:\s)/,/^(?:$)/], -conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && require.main === module) { - exports.main(process.argv.slice(1)); -} -} \ No newline at end of file diff --git a/src/diagrams/sequenceDiagram/sequence.spec.js b/src/diagrams/sequenceDiagram/sequence.spec.js deleted file mode 100644 index af9717060..000000000 --- a/src/diagrams/sequenceDiagram/sequence.spec.js +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Created by knut on 14-11-18. - */ -var sq = require('./parser/sequence').parser; - -//console.log(sq.parse('a12:d12\na24:d24')); - -str = 'a12:d12\n\na24:d24'; -//console.log(str); -//console.log(sq.parse(str)); -//console.log(sq.parse('[]\n[]')); - -str = 'bfs:queue\n\nbfs3:queue\n'; -str = str + 'bfs:message=someNode.setLevel\n'; -str = str + 'bfs:message2=someNode.setLevel2'; -//console.log(str); -//console.log(sq.parse(str)); - -str = 'bfs:BFS\n'; -str = str + 'someNode:SomeNode\n'; -str = str + 'bfs:queue.new\n'; -str = str + 'bfs:someNode.setLevel'; -//console.log(str); -//console.log(sq.parse(str)); - - -describe('when parsing a sequence it',function() { - var parseError; - beforeEach(function () { - sq = require('./parser/sequence').parser; - sq.yy = require('./sequenceDb'); - sq.yy.clear(); - parseError = function(err, hash) { - console.log('Syntax error:' + err); - }; - sq.yy.parseError = parseError; - }); - - it('should handle a sequence defintion', function () { - str = 'sequence TB\nbfs1:queue'; - - sq.parse(str); - var actors = sq.yy.getActors(); - actors.bfs1.description = 'queue'; - }); - - it('should handle an actor', function () { - str = 'sequence TB\nbfs1:queue'; - - sq.parse(str); - var actors = sq.yy.getActors(); - actors.bfs1.description = 'queue'; - }); - - it('should handle an actor with space in its description', function () { - str = 'sequence TB\nbfs1:The queue\n'; - - sq.parse(str); - var actors = sq.yy.getActors(); - actors.bfs1.description = 'queue'; - }); - - it('should handle a statement ending with a newline', function () { - str = 'sequence TB\nbfs1:queue\n'; - - sq.parse(str); - var actors = sq.yy.getActors(); - actors.bfs1.description = 'queue'; - }); - - xit('should handle a errors', function () { - str = 'sequence TB\nbfs1!!!!queue\n'; - - spyOn('sq.yy',parseError); - sq.parse(str); - - //expect(sq.yy.parseError).toHaveBeenCalled(); - }); - - it('should handle multiple actors', function () { - str = 'sequence TB\nbfs1:queue\n\nbfs2:queue'; - - sq.parse(str); - var actors = sq.yy.getActors(); - actors.bfs1.description = 'queue'; - actors.bfs2.description = 'queue'; - }); - - it('should handle a message with response', function () { - str = 'sequence TB\nbfs1:queue\n\nbfs2:queue\n'; - str = str + 'bfs1:message=bfs2.setLevel(0)'; - //console.log(str); - sq.parse(str); - var messages = sq.yy.getMessages(); - expect(messages.length).toBe(1); - expect(messages[0].from).toBe('bfs1'); - }); - - it('should handle a message with no response', function () { - str = 'sequence TB\nbfs1:queue\n\nbfs2:queue\n'; - str = str + 'bfs1:bfs2.start'; - //console.log(str); - sq.parse(str); - var messages = sq.yy.getMessages(); - expect(messages.length).toBe(1); - expect(messages[0].from).toBe('bfs1'); - }); -}); \ No newline at end of file diff --git a/test/web.html b/test/web.html index 48e130ba8..3b4ee4a9f 100644 --- a/test/web.html +++ b/test/web.html @@ -24,7 +24,7 @@ stroke: grey; } - + @@ -39,6 +39,8 @@ A --> C(Round Rect) B --> D{Rhombus} C --> D + A("test(vcc) a a ") --> B; +

Issue 140