1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | 'use strict';
|
16 |
|
17 | var formulaName = require('./util').formulaName;
|
18 | var {
|
19 | getAttr
|
20 | } = require('@accordproject/markdown-common').CommonMarkUtils;
|
21 | var NS_PREFIX_TemplateMarkModel = require('./externalModels/TemplateMarkModel').NS_PREFIX_TemplateMarkModel;
|
22 |
|
23 |
|
24 | var variableRule = {
|
25 | tag: NS_PREFIX_TemplateMarkModel + 'VariableDefinition',
|
26 | leaf: true,
|
27 | open: false,
|
28 | close: false,
|
29 | enter: (node, token, callback) => {
|
30 | var format = getAttr(token.attrs, 'format', null);
|
31 | if (format) {
|
32 | node.$class = NS_PREFIX_TemplateMarkModel + 'FormattedVariableDefinition';
|
33 | node.format = format;
|
34 | }
|
35 | node.name = getAttr(token.attrs, 'name', null);
|
36 | node.format = getAttr(token.attrs, 'format', null);
|
37 | },
|
38 | skipEmpty: false
|
39 | };
|
40 | var thisRule = {
|
41 |
|
42 | tag: NS_PREFIX_TemplateMarkModel + 'VariableDefinition',
|
43 | leaf: true,
|
44 | open: false,
|
45 | close: false,
|
46 | enter: (node, token, callback) => {
|
47 | var format = getAttr(token.attrs, 'format', null);
|
48 | if (format) {
|
49 | node.$class = NS_PREFIX_TemplateMarkModel + 'FormattedVariableDefinition';
|
50 | node.format = format;
|
51 | }
|
52 | node.name = 'this';
|
53 | node.format = getAttr(token.attrs, 'format', null);
|
54 | },
|
55 | skipEmpty: false
|
56 | };
|
57 | var formulaRule = {
|
58 | tag: NS_PREFIX_TemplateMarkModel + 'FormulaDefinition',
|
59 | leaf: true,
|
60 | open: false,
|
61 | close: false,
|
62 | enter: (node, token, callback) => {
|
63 | var code = token.content;
|
64 | node.name = formulaName(code);
|
65 | node.code = code;
|
66 | node.dependencies = [];
|
67 | },
|
68 | skipEmpty: false
|
69 | };
|
70 | var ifOpenRule = {
|
71 | tag: NS_PREFIX_TemplateMarkModel + 'ConditionalDefinition',
|
72 | leaf: false,
|
73 | open: true,
|
74 | close: false,
|
75 | enter: (node, token, callback) => {
|
76 | node.name = getAttr(token.attrs, 'name', null);
|
77 | node.whenTrue = null;
|
78 | node.whenFalse = null;
|
79 | },
|
80 | skipEmpty: false
|
81 | };
|
82 | var ifCloseRule = {
|
83 | tag: NS_PREFIX_TemplateMarkModel + 'ConditionalDefinition',
|
84 | leaf: false,
|
85 | open: false,
|
86 | close: true,
|
87 | exit: (node, token, callback) => {
|
88 | if (node.whenTrue) {
|
89 | node.whenFalse = node.nodes ? node.nodes : [];
|
90 | } else {
|
91 | node.whenTrue = node.nodes ? node.nodes : [];
|
92 | node.whenFalse = [];
|
93 | }
|
94 | delete node.nodes;
|
95 | },
|
96 |
|
97 | skipEmpty: false
|
98 | };
|
99 | var elseRule = {
|
100 | tag: NS_PREFIX_TemplateMarkModel + 'ConditionalDefinition',
|
101 | leaf: false,
|
102 | open: false,
|
103 | close: false,
|
104 | enter: (node, token, callback) => {
|
105 | if (node.$class === 'org.accordproject.templatemark.ConditionalDefinition') {
|
106 | node.whenTrue = node.nodes ? node.nodes : [];
|
107 | node.nodes = [];
|
108 | } else {
|
109 |
|
110 | node.whenSome = node.nodes ? node.nodes : [];
|
111 | node.nodes = [];
|
112 | }
|
113 | },
|
114 |
|
115 | skipEmpty: false
|
116 | };
|
117 | var optionalOpenRule = {
|
118 | tag: NS_PREFIX_TemplateMarkModel + 'OptionalDefinition',
|
119 | leaf: false,
|
120 | open: true,
|
121 | close: false,
|
122 | enter: (node, token, callback) => {
|
123 | node.name = getAttr(token.attrs, 'name', null);
|
124 | node.whenSome = null;
|
125 | node.whenNone = null;
|
126 | },
|
127 | skipEmpty: false
|
128 | };
|
129 | var optionalCloseRule = {
|
130 | tag: NS_PREFIX_TemplateMarkModel + 'OptionalDefinition',
|
131 | leaf: false,
|
132 | open: false,
|
133 | close: true,
|
134 | exit: (node, token, callback) => {
|
135 | if (node.whenSome) {
|
136 | node.whenNone = node.nodes ? node.nodes : [];
|
137 | } else {
|
138 | node.whenSome = node.nodes ? node.nodes : [];
|
139 | node.whenNone = [];
|
140 | }
|
141 | delete node.nodes;
|
142 | },
|
143 |
|
144 | skipEmpty: false
|
145 | };
|
146 | var withOpenRule = {
|
147 | tag: NS_PREFIX_TemplateMarkModel + 'WithDefinition',
|
148 | leaf: false,
|
149 | open: true,
|
150 | close: false,
|
151 | enter: (node, token, callback) => {
|
152 | node.name = getAttr(token.attrs, 'name', null);
|
153 | },
|
154 | skipEmpty: false
|
155 | };
|
156 | var withCloseRule = {
|
157 | tag: NS_PREFIX_TemplateMarkModel + 'WithDefinition',
|
158 | leaf: false,
|
159 | open: false,
|
160 | close: true
|
161 | };
|
162 | var joinOpenRule = {
|
163 | tag: NS_PREFIX_TemplateMarkModel + 'JoinDefinition',
|
164 | leaf: false,
|
165 | open: true,
|
166 | close: false,
|
167 | enter: (node, token, callback) => {
|
168 | node.name = getAttr(token.attrs, 'name', null);
|
169 | node.separator = getAttr(token.attrs, 'separator', ',');
|
170 | },
|
171 | skipEmpty: false
|
172 | };
|
173 | var joinCloseRule = {
|
174 | tag: NS_PREFIX_TemplateMarkModel + 'JoinDefinition',
|
175 | leaf: false,
|
176 | open: false,
|
177 | close: true
|
178 | };
|
179 |
|
180 |
|
181 | var clauseOpenRule = {
|
182 | tag: NS_PREFIX_TemplateMarkModel + 'ClauseDefinition',
|
183 | leaf: false,
|
184 | open: true,
|
185 | close: false,
|
186 | enter: (node, token, callback) => {
|
187 | node.name = getAttr(token.attrs, 'name', null);
|
188 | }
|
189 | };
|
190 | var clauseCloseRule = {
|
191 | tag: NS_PREFIX_TemplateMarkModel + 'ClauseDefinition',
|
192 | leaf: false,
|
193 | open: false,
|
194 | close: true
|
195 | };
|
196 | var ulistOpenRule = {
|
197 | tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
|
198 | leaf: false,
|
199 | open: true,
|
200 | close: false,
|
201 | enter: (node, token, callback) => {
|
202 | node.name = getAttr(token.attrs, 'name', null);
|
203 | node.type = 'bullet';
|
204 | node.tight = 'true';
|
205 | }
|
206 | };
|
207 | var ulistCloseRule = {
|
208 | tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
|
209 | leaf: false,
|
210 | open: false,
|
211 | close: true
|
212 | };
|
213 | var olistOpenRule = {
|
214 | tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
|
215 | leaf: false,
|
216 | open: true,
|
217 | close: false,
|
218 | enter: (node, token, callback) => {
|
219 | node.name = getAttr(token.attrs, 'name', null);
|
220 | node.type = 'ordered';
|
221 | node.tight = 'true';
|
222 | node.start = '1';
|
223 | node.delimiter = 'period';
|
224 | }
|
225 | };
|
226 | var olistCloseRule = {
|
227 | tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
|
228 | leaf: false,
|
229 | open: false,
|
230 | close: true
|
231 | };
|
232 | var rules = {
|
233 | inlines: {},
|
234 | blocks: {}
|
235 | };
|
236 | rules.inlines.variable = variableRule;
|
237 | rules.inlines.this = thisRule;
|
238 | rules.inlines.formula = formulaRule;
|
239 | rules.inlines.inline_block_if_open = ifOpenRule;
|
240 | rules.inlines.inline_block_if_close = ifCloseRule;
|
241 | rules.inlines.inline_block_optional_open = optionalOpenRule;
|
242 | rules.inlines.inline_block_optional_close = optionalCloseRule;
|
243 | rules.inlines.inline_block_else = elseRule;
|
244 | rules.inlines.inline_block_with_open = withOpenRule;
|
245 | rules.inlines.inline_block_with_close = withCloseRule;
|
246 | rules.inlines.inline_block_join_open = joinOpenRule;
|
247 | rules.inlines.inline_block_join_close = joinCloseRule;
|
248 | rules.blocks.block_clause_open = clauseOpenRule;
|
249 | rules.blocks.block_clause_close = clauseCloseRule;
|
250 | rules.blocks.block_ulist_open = ulistOpenRule;
|
251 | rules.blocks.block_ulist_close = ulistCloseRule;
|
252 | rules.blocks.block_olist_open = olistOpenRule;
|
253 | rules.blocks.block_olist_close = olistCloseRule;
|
254 | module.exports = rules; |
\ | No newline at end of file |