UNPKG

7.14 kBJavaScriptView Raw
1/*
2 * Licensed under the Apache License, Version 2.0 (the "License");
3 * you may not use this file except in compliance with the License.
4 * You may obtain a copy of the License at
5 *
6 * http://www.apache.org/licenses/LICENSE-2.0
7 *
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS,
10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and
12 * limitations under the License.
13 */
14
15'use strict';
16
17var formulaName = require('./util').formulaName;
18var {
19 getAttr
20} = require('@accordproject/markdown-common').CommonMarkUtils;
21var NS_PREFIX_TemplateMarkModel = require('./externalModels/TemplateMarkModel').NS_PREFIX_TemplateMarkModel;
22
23// Inline rules
24var 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};
40var thisRule = {
41 // 'this' is a special variable for the current data in scope within the template
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};
57var 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};
70var 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};
82var 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; // Delete children (now in whenTrue or whenFalse)
95 },
96
97 skipEmpty: false
98};
99var 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 = []; // Reset children (now in whenTrue)
108 } else {
109 // Optional definition
110 node.whenSome = node.nodes ? node.nodes : [];
111 node.nodes = []; // Reset children (now in whenSome)
112 }
113 },
114
115 skipEmpty: false
116};
117var 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};
129var 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; // Delete children (now in whenSome or whenNone)
142 },
143
144 skipEmpty: false
145};
146var 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};
156var withCloseRule = {
157 tag: NS_PREFIX_TemplateMarkModel + 'WithDefinition',
158 leaf: false,
159 open: false,
160 close: true
161};
162var 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};
173var joinCloseRule = {
174 tag: NS_PREFIX_TemplateMarkModel + 'JoinDefinition',
175 leaf: false,
176 open: false,
177 close: true
178};
179
180// Block rules
181var 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};
190var clauseCloseRule = {
191 tag: NS_PREFIX_TemplateMarkModel + 'ClauseDefinition',
192 leaf: false,
193 open: false,
194 close: true
195};
196var 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};
207var ulistCloseRule = {
208 tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
209 leaf: false,
210 open: false,
211 close: true
212};
213var 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};
226var olistCloseRule = {
227 tag: NS_PREFIX_TemplateMarkModel + 'ListBlockDefinition',
228 leaf: false,
229 open: false,
230 close: true
231};
232var rules = {
233 inlines: {},
234 blocks: {}
235};
236rules.inlines.variable = variableRule;
237rules.inlines.this = thisRule;
238rules.inlines.formula = formulaRule;
239rules.inlines.inline_block_if_open = ifOpenRule;
240rules.inlines.inline_block_if_close = ifCloseRule;
241rules.inlines.inline_block_optional_open = optionalOpenRule;
242rules.inlines.inline_block_optional_close = optionalCloseRule;
243rules.inlines.inline_block_else = elseRule;
244rules.inlines.inline_block_with_open = withOpenRule;
245rules.inlines.inline_block_with_close = withCloseRule;
246rules.inlines.inline_block_join_open = joinOpenRule;
247rules.inlines.inline_block_join_close = joinCloseRule;
248rules.blocks.block_clause_open = clauseOpenRule;
249rules.blocks.block_clause_close = clauseCloseRule;
250rules.blocks.block_ulist_open = ulistOpenRule;
251rules.blocks.block_ulist_close = ulistCloseRule;
252rules.blocks.block_olist_open = olistOpenRule;
253rules.blocks.block_olist_close = olistCloseRule;
254module.exports = rules;
\No newline at end of file