1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | 'use strict';
|
16 |
|
17 | var CommonMarkUtils = require('@accordproject/markdown-common').CommonMarkUtils;
|
18 |
|
19 |
|
20 | var computedParser = require('./combinators').computedParser;
|
21 | var enumParser = require('./combinators').enumParser;
|
22 | var conditionalParser = require('./combinators').conditionalParser;
|
23 | var optionalParser = require('./combinators').optionalParser;
|
24 | var ulistBlockParser = require('./combinators').ulistBlockParser;
|
25 | var olistBlockParser = require('./combinators').olistBlockParser;
|
26 | var joinBlockParser = require('./combinators').joinBlockParser;
|
27 | var withParser = require('./combinators').withParser;
|
28 | var clauseParser = require('./combinators').clauseParser;
|
29 | var wrappedClauseParser = require('./combinators').wrappedClauseParser;
|
30 | var contractParser = require('./combinators').contractParser;
|
31 | var mkVariable = require('./combinators').mkVariable;
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | function inContract(stack) {
|
39 | return stack.blocks.includes('ContractDefinition');
|
40 | }
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | var rules = {};
|
47 |
|
48 |
|
49 | rules.EnumVariableDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
50 | var result = r => enumParser(thing.enumValues).map(value => mkVariable(thing, value));
|
51 | resultSeq(parameters, result);
|
52 | };
|
53 | rules.VariableDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
54 | var elementType = thing.identifiedBy ? 'Resource' : thing.elementType;
|
55 | var format = thing.format ? thing.format : null;
|
56 | var parserName = format ? elementType + '_' + format : elementType;
|
57 | var result;
|
58 | if (parameters.templateParser[parserName]) {
|
59 | result = r => {
|
60 | return r[parserName].map(value => mkVariable(thing, value));
|
61 | };
|
62 | } else {
|
63 | var fragmentParameters = {};
|
64 | fragmentParameters.parserManager = parameters.parserManager;
|
65 | fragmentParameters.parsingTable = parameters.parsingTable;
|
66 | fragmentParameters.templateParser = parameters.templateParser;
|
67 | fragmentParameters.result = resultString('');
|
68 | fragmentParameters.first = parameters.first;
|
69 | fragmentParameters.stack = parameters.stack;
|
70 | var parsingFun = parameters.parsingTable.getParser(thing.name, elementType, format, fragmentParameters);
|
71 | parameters.templateParser[parserName] = parsingFun;
|
72 | result = r => {
|
73 | try {
|
74 | return r[parserName].map(value => mkVariable(thing, value));
|
75 | } catch (err) {
|
76 | console.log('ERROR HANDLING VARIABLE ' + elementType);
|
77 | throw err;
|
78 | }
|
79 | };
|
80 | }
|
81 | resultSeq(parameters, result);
|
82 | };
|
83 | rules.FormattedVariableDefinition = rules.VariableDefinition;
|
84 | rules.ConditionalDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
85 | var whenTrueParser = visitor.visitChildren(visitor, thing, parameters, 'whenTrue');
|
86 | var whenFalseParser = visitor.visitChildren(visitor, thing, parameters, 'whenFalse');
|
87 | var result = r => conditionalParser(thing, whenTrueParser(r), whenFalseParser(r));
|
88 | resultSeq(parameters, result);
|
89 | };
|
90 | rules.OptionalDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
91 | var whenSomeParser = visitor.visitChildren(visitor, thing, parameters, 'whenSome');
|
92 | var whenNoneParser = visitor.visitChildren(visitor, thing, parameters, 'whenNone');
|
93 | var result = r => optionalParser(thing, whenSomeParser(r), whenNoneParser(r));
|
94 | resultSeq(parameters, result);
|
95 | };
|
96 | rules.JoinDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
97 | var result = r => joinBlockParser(thing, children(r));
|
98 | resultSeq(parameters, result);
|
99 | };
|
100 | rules.WithDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
101 | var result = r => withParser(thing.elementType, children(r)).map(value => mkVariable(thing, value));
|
102 | resultSeq(parameters, result);
|
103 | };
|
104 | rules.FormulaDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
105 | var result = r => computedParser(thing.value);
|
106 | resultSeq(parameters, result);
|
107 | };
|
108 |
|
109 |
|
110 | rules.ListBlockDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
111 |
|
112 | var level = 1;
|
113 | var prefix = CommonMarkUtils.mkPrefix(parameters, level);
|
114 | var result = thing.type === 'bullet' ? r => ulistBlockParser(thing, children(r), prefix) : r => olistBlockParser(thing, children(r), prefix);
|
115 | resultSeq(parameters, result);
|
116 | };
|
117 | rules.ClauseDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
118 | var result;
|
119 | if (inContract(parameters.stack)) {
|
120 | result = r => wrappedClauseParser(thing, children(r));
|
121 | } else {
|
122 | result = r => clauseParser(thing, children(r));
|
123 | }
|
124 | resultSeq(parameters, result);
|
125 | };
|
126 | rules.ContractDefinition = (visitor, thing, children, parameters, resultString, resultSeq) => {
|
127 | var result = r => contractParser(thing, children(r));
|
128 | resultSeq(parameters, result);
|
129 | };
|
130 | module.exports = rules; |
\ | No newline at end of file |