-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy pathplantuml.pegjs
More file actions
132 lines (132 loc) · 6.83 KB
/
plantuml.pegjs
File metadata and controls
132 lines (132 loc) · 6.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
plantumlfile
= items:((noise newline { return null }) / (noise "@startuml" noise newline filelines:umllines noise "@enduml" noise { var UMLBlock = require("./UMLBlock"); return new UMLBlock(filelines) }))* { for (var i = 0; i < items.length; i++) { if (items[i] === null) { items.splice(i, 1); i--; } } return items }
umllines
= lines:(umlline*) { for (var i = 0; i < lines.length; i++) { if (lines[i]===null) { lines.splice(i, 1); i--; } } return lines; }
umlline
= propertyset newline { return null }
/ titleset newline { return null }
/ noise newline { return null }
/ commentline { return null }
/ noteline { return null }
/ hideline newline { return null }
/ skinparams newline { return null }
/ declaration:packagedeclaration newline { return declaration }
/ declaration:namespacedeclaration newline { return declaration }
/ declaration:classdeclaration newline { return declaration }
/ declaration:interfacedeclaration newline { return declaration }
/ declaration:abstractclassdeclaration newline { return declaration }
/ declaration:memberdeclaration newline { return declaration }
/ declaration:connectordeclaration newline { return declaration }
hideline
= noise "hide empty members" noise
skinparams
= noise "skinparam" noise [^\r\n]+
connectordeclaration
= noise leftObject:objectname noise connectordescription? noise connector:connectortype noise connectordescription? noise rightObject:objectname noise ([:] [^\r\n]+)? { var Connection = require("./Connection"); return new Connection(leftObject, connector, rightObject) }
connectordescription
= noise ["]([\\]["]/[^"])*["] noise
titleset
= noise "title " noise [^\r\n]+ noise
commentline
= noise "'" [^\r\n]+ noise
/ noise ".." [^\r\n\.]+ ".." noise
/ noise "--" [^\r\n\-]+ "--" noise
/ noise "__" [^\r\n\_]+ "__" noise
noteline
= noise "note " noise [^\r\n]+ noise
connectortype
= item:extends { return item }
/ concatenates { var Composition = require("./Composition"); return new Composition() }
/ aggregates { var Aggregation = require("./Aggregation"); return new Aggregation() }
/ connectorsize { return null }
extends
= "<|" connectorsize { var Extension = require("./Extension"); return new Extension(true) }
/ connectorsize "|>" { var Extension = require("./Extension"); return new Extension(false) }
connectorsize
= ".."
/ "-up-"
/ "-down-"
/ "-left-"
/ "-right-"
/ "---"
/ "--"
/ [.]
/ [-]
concatenates
= "*" connectorsize
/ connectorsize [*]
aggregates
= "o" connectorsize
/ connectorsize [o]
startblock
= noise [{] noise
endblock
= noise [}]
propertyset
= "setpropname.*"
packagedeclaration
= "package " objectname startblock newline umllines endblock
/ "package " objectname newline umllines "end package"
abstractclassdeclaration
= noise "abstract " noise "class "? noise classname:objectname noise startblock lines:umllines endblock { var AbstractClass = require("./AbstractClass"); return new AbstractClass(classname, lines) }
/ noise "abstract " noise "class "? noise classname:objectname noise { var AbstractClass = require("./AbstractClass"); return new AbstractClass(classname) }
/ noise "abstract " noise "class "? noise classname:objectname noise newline noise lines:umllines "end class" { var AbstractClass = require("./AbstractClass"); return new AbstractClass(classname, lines) }
noise
= [ \t]*
noiseWithColon
= [ \t:]*
newline
= [\r\n]
/ [\n]
classdeclaration
= noise "class " noise classname:objectname noise classtype:objecttype? noise startblock lines:umllines endblock { var Class = require("./Class"); return new Class(classname, lines, classtype) }
/ noise "class " noise classname:objectname noise classtype:objecttype? noise { var Class = require("./Class"); return new Class(classname, null, classtype) }
/ noise "class " noise classname:objectname noise classtype:objecttype? noise newline noise lines:umllines "end class" { var Class = require("./Class"); return new Class(classname, lines, classtype) }
interfacedeclaration
= noise "interface " noise interfacename:objectname noise startblock lines:umllines endblock { var Interface = require("./Interface"); return new Interface(interfacename, lines) }
/ noise "interface " noise interfacename:objectname noise "<<" noise [^>]+ noise ">>" noise { var Interface = require("./Interface"); return new Interface(interfacename) }
/ noise "interface " noise interfacename:objectname noise { var Interface = require("./Interface"); return new Interface(interfacename) }
/ noise "interface " noise interfacename:objectname noise newline noise lines:umllines "end interface" { var Interface = require("./Interface"); return new Interface(interfacename, lines) }
color
= [#][0-9a-fA-F]+
namespacedeclaration
= noise "namespace " noise namespacename:objectname noise color? noise startblock lines:umllines endblock { var Namespace = require("./Namespace"); return new Namespace(namespacename, lines) }
/ noise "namespace " noise namespacename:objectname noise newline umllines "end namespace" { var Namespace = require("./Namespace"); return new Namespace(namespacename) }
staticmemberdeclaration
= "static " memberdeclaration
memberdeclaration
= declaration:methoddeclaration { return declaration }
/ declaration:fielddeclaration { return declaration }
fielddeclaration
= noise accessortype:accessortype noise returntype:returntype noiseWithColon membername:membername noise { var Field = require("./Field"); return new Field(accessortype, returntype, membername) }
/ noise accessortype:accessortype noise membername:membername noise { var Field = require("./Field"); return new Field(accessortype, "void", membername) }
/ noise returntype:returntype noiseWithColon membername:membername noise { var Field = require("./Field"); return new Field("+", returntype, membername) }
methoddeclaration
= noise field:fielddeclaration [(] parameters:methodparameters [)] noise { var Method = require("./Method"); return new Method(field.getAccessType(), field.getReturnType(), field.getName(), parameters); }
methodparameters
= items:methodparameter* { return items; }
methodparameter
= noise item:returntype membername:([ ] membername)? [,]? { var Parameter = require("./Parameter"); return new Parameter(item, membername ? membername[1] : null); }
returntype
= items:[^ ,\n\r\t(){}]+ { return items.join("") }
objectname
= item:(richchars) { return item.join("") }
/ "\"" item:(richerchars) "\"" { return item.join("") }
objecttype
= "<<" noise item:(richerchars) noise ">>" { return item.join("") }
membername
= items:([A-Za-z_][A-Za-z0-9_]*) { return [items[0], items[1].join("")].join("") }
accessortype
= publicaccessor
/ privateaccessor
/ protectedaccessor
publicaccessor
= [+]
privateaccessor
= [-]
protectedaccessor
= [#]
richchars
= [A-Za-z0-9_:;~#!§$()\[\]\+\-\*\\/|,]+
richerchars
= [A-Za-z0-9_:;~#!§$()\[\]\+\-\*\\/|,{} ]+