occam-verify-cli 0.0.506 → 0.0.507
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/conclusion.js +5 -160
- package/lib/consequence.js +3 -81
- package/lib/matcher/conclusion.js +194 -0
- package/lib/matcher/consequence.js +194 -0
- package/lib/matcher/premise.js +199 -0
- package/lib/matcher/supposition.js +199 -0
- package/lib/matcher.js +36 -0
- package/lib/metaMatcher/conclusion.js +194 -0
- package/lib/metaMatcher/premise.js +199 -0
- package/lib/metaMatcher.js +36 -0
- package/lib/metaSubstitution.js +7 -6
- package/lib/mixins/matcher.js +109 -0
- package/lib/premise.js +9 -178
- package/lib/ruleNames.js +5 -1
- package/lib/step/metaproof.js +5 -5
- package/lib/substitution.js +7 -6
- package/lib/supposition.js +5 -92
- package/lib/utilities/substitution.js +61 -0
- package/lib/verify/metaproof.js +3 -3
- package/lib/verify/proof.js +3 -3
- package/lib/verify/ruleProof.js +3 -3
- package/package.json +1 -1
- package/src/conclusion.js +6 -277
- package/src/consequence.js +3 -141
- package/src/matcher/conclusion.js +86 -0
- package/src/matcher/consequence.js +89 -0
- package/src/matcher/premise.js +94 -0
- package/src/matcher/supposition.js +97 -0
- package/src/matcher.js +9 -0
- package/src/metaMatcher/conclusion.js +86 -0
- package/src/metaMatcher/premise.js +94 -0
- package/src/metaMatcher.js +9 -0
- package/src/metaSubstitution.js +4 -3
- package/src/mixins/matcher.js +81 -0
- package/src/premise.js +10 -298
- package/src/ruleNames.js +1 -0
- package/src/step/metaproof.js +1 -1
- package/src/substitution.js +3 -2
- package/src/supposition.js +12 -159
- package/src/utilities/{node.js → substitution.js} +4 -74
- package/src/verify/metaproof.js +2 -2
- package/src/verify/proof.js +2 -2
- package/src/verify/ruleProof.js +2 -2
- package/lib/metaSupposition.js +0 -167
- package/lib/utilities/node.js +0 -106
- package/lib/verify/metaSupposition.js +0 -41
- package/src/metaSupposition.js +0 -196
- package/src/verify/metaSupposition.js +0 -44
package/src/verify/metaproof.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyMetaDerivation from "../verify/metaDerivation";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { matcher } from "../matcher";
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
|
|
8
8
|
const metaDerivationNodeQuery = nodeQuery("/metaproof/metaDerivation!");
|
|
@@ -22,7 +22,7 @@ export default function verifyMetaproof(metaproofNode, conclusion, metaproofCont
|
|
|
22
22
|
conclusionMetastatementNode = conclusion.getMetastatementNode(),
|
|
23
23
|
nodeA = metastatementNode, ///
|
|
24
24
|
nodeB = conclusionMetastatementNode, ///
|
|
25
|
-
nodeMatches = matchNode(nodeA, nodeB);
|
|
25
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
26
26
|
|
|
27
27
|
metaproofVerified = nodeMatches; ///
|
|
28
28
|
}
|
package/src/verify/proof.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyDerivation from "../verify/derivation";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { matcher } from "../matcher";
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
|
|
8
8
|
const derivationNodeQuery = nodeQuery("/proof/derivation!");
|
|
@@ -22,7 +22,7 @@ export default function verifyProof(proofNode, conclusion, proofContext) {
|
|
|
22
22
|
conclusionStatementNode = conclusion.getStatementNode(),
|
|
23
23
|
nodeA = statementNode, ///
|
|
24
24
|
nodeB = conclusionStatementNode, ///
|
|
25
|
-
nodeMatches = matchNode(nodeA, nodeB);
|
|
25
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
26
26
|
|
|
27
27
|
proofVerified = nodeMatches; ///
|
|
28
28
|
}
|
package/src/verify/ruleProof.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import verifyRuleDerivation from "../verify/ruleDerivation";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { matcher } from "../matcher";
|
|
6
6
|
import { nodeQuery } from "../utilities/query";
|
|
7
7
|
|
|
8
8
|
const ruleDerivationNodeQuery = nodeQuery("/ruleProof/ruleDerivation!");
|
|
@@ -22,7 +22,7 @@ export default function verifyRuleProof(ruleProofNode, conclusion, metaproofCont
|
|
|
22
22
|
conclusionMetastatementNode = conclusion.getMetastatementNode(),
|
|
23
23
|
nodeA = metastatementNode, ///
|
|
24
24
|
nodeB = conclusionMetastatementNode, ///
|
|
25
|
-
nodeMatches = matchNode(nodeA, nodeB);
|
|
25
|
+
nodeMatches = matcher.matchNode(nodeA, nodeB);
|
|
26
26
|
|
|
27
27
|
ruleProofVerified = nodeMatches; ///
|
|
28
28
|
}
|
package/lib/metaSupposition.js
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return MetaSupposition;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _metaSubstitution = /*#__PURE__*/ _interopRequireDefault(require("./metaSubstitution"));
|
|
12
|
-
var _array = require("./utilities/array");
|
|
13
|
-
var _string = require("./utilities/string");
|
|
14
|
-
var _query = require("./utilities/query");
|
|
15
|
-
var _ruleNames = require("./ruleNames");
|
|
16
|
-
function _classCallCheck(instance, Constructor) {
|
|
17
|
-
if (!(instance instanceof Constructor)) {
|
|
18
|
-
throw new TypeError("Cannot call a class as a function");
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function _defineProperties(target, props) {
|
|
22
|
-
for(var i = 0; i < props.length; i++){
|
|
23
|
-
var descriptor = props[i];
|
|
24
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
25
|
-
descriptor.configurable = true;
|
|
26
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
27
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
31
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
32
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
33
|
-
return Constructor;
|
|
34
|
-
}
|
|
35
|
-
function _interopRequireDefault(obj) {
|
|
36
|
-
return obj && obj.__esModule ? obj : {
|
|
37
|
-
default: obj
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
var MetaSupposition = /*#__PURE__*/ function() {
|
|
41
|
-
function MetaSupposition(metastatementNode) {
|
|
42
|
-
_classCallCheck(this, MetaSupposition);
|
|
43
|
-
this.metastatementNode = metastatementNode;
|
|
44
|
-
}
|
|
45
|
-
_createClass(MetaSupposition, [
|
|
46
|
-
{
|
|
47
|
-
key: "getMetastatementNode",
|
|
48
|
-
value: function getMetastatementNode() {
|
|
49
|
-
return this.metastatementNode;
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
key: "matchMetastatementNode",
|
|
54
|
-
value: function matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
55
|
-
var nonTerminalNode = metastatementNode, metaSuppositionNonTerminalNode = this.metastatementNode, metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions), metastatementNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
56
|
-
return metastatementNodeMatches;
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
key: "toJSON",
|
|
61
|
-
value: function toJSON() {
|
|
62
|
-
var metastatementString = (0, _string.nodeAsString)(this.metastatementNode), metastatement = metastatementString, json = {
|
|
63
|
-
metastatement: metastatement
|
|
64
|
-
};
|
|
65
|
-
return json;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
], [
|
|
69
|
-
{
|
|
70
|
-
key: "fromJSON",
|
|
71
|
-
value: function fromJSON(json, releaseContext) {
|
|
72
|
-
var metastatement = json.metastatement, metastatementString = metastatement, metastatementNode = (0, _string.metastatementNodeFromMetastatementString)(metastatementString, releaseContext), metaSupposition = new MetaSupposition(metastatementNode);
|
|
73
|
-
return metaSupposition;
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
key: "fromMetastatementNode",
|
|
78
|
-
value: function fromMetastatementNode(metastatementNode) {
|
|
79
|
-
var metaSupposition = new MetaSupposition(metastatementNode);
|
|
80
|
-
return metaSupposition;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
]);
|
|
84
|
-
return MetaSupposition;
|
|
85
|
-
}();
|
|
86
|
-
function matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions) {
|
|
87
|
-
var metaSuppositionNodeMatches = false;
|
|
88
|
-
var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaSuppositionNode.isTerminalNode();
|
|
89
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
90
|
-
if (nodeTerminalNode) {
|
|
91
|
-
var terminalNode = node, metaSuppositionTerminalNode = metaSuppositionNode, metaSuppositionTerminalNodeMatches = matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions);
|
|
92
|
-
metaSuppositionNodeMatches = metaSuppositionTerminalNodeMatches; ///
|
|
93
|
-
} else {
|
|
94
|
-
var nonTerminalNode = node, metaSuppositionNonTerminalNode = metaSuppositionNode, metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
95
|
-
metaSuppositionNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return metaSuppositionNodeMatches;
|
|
99
|
-
}
|
|
100
|
-
function matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions) {
|
|
101
|
-
var metaSuppositionNodesMatches = false;
|
|
102
|
-
var nodesLength = nodes.length, metaSuppositionNodesLength = metaSuppositionNodes.length;
|
|
103
|
-
if (nodesLength === metaSuppositionNodesLength) {
|
|
104
|
-
metaSuppositionNodesMatches = nodes.every(function(node, index) {
|
|
105
|
-
var metaSuppositionNode = metaSuppositionNodes[index], metaSuppositionNodeMatches = matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions);
|
|
106
|
-
if (metaSuppositionNodeMatches) {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
return metaSuppositionNodesMatches;
|
|
112
|
-
}
|
|
113
|
-
function matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions) {
|
|
114
|
-
var metaSuppositionMetavariableMatches;
|
|
115
|
-
var metaSuppositionMetavariableName = (0, _query.metavariableNameFromMetavariableNode)(metaSuppositionMetavariableNode), metaSubstitution = metaSubstitutions.find(function(metaSubstitution) {
|
|
116
|
-
var metavariableName = metaSubstitution.getMetavariableName();
|
|
117
|
-
if (metavariableName === metaSuppositionMetavariableName) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
}) || null;
|
|
121
|
-
if (metaSubstitution !== null) {
|
|
122
|
-
var metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
123
|
-
metaSuppositionMetavariableMatches = metaSubstitutionNodesMatch; ///
|
|
124
|
-
} else {
|
|
125
|
-
var metavariableName = metaSuppositionMetavariableName, metaSubstitution1 = _metaSubstitution.default.fromMetavariableNameAndNodes(metavariableName, nodes);
|
|
126
|
-
metaSubstitutions.push(metaSubstitution1);
|
|
127
|
-
metaSuppositionMetavariableMatches = true;
|
|
128
|
-
}
|
|
129
|
-
return metaSuppositionMetavariableMatches;
|
|
130
|
-
}
|
|
131
|
-
function matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions) {
|
|
132
|
-
var matches = metaSuppositionTerminalNode.match(terminalNode), metaSuppositionTerminalNodeMatches = matches;
|
|
133
|
-
return metaSuppositionTerminalNodeMatches;
|
|
134
|
-
}
|
|
135
|
-
function matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
136
|
-
var metaSuppositionNonTerminalNodeMatches = false;
|
|
137
|
-
var ruleName = nonTerminalNode.getRuleName(), metaSuppositionRuleName = metaSuppositionNonTerminalNode.getRuleName(); ///
|
|
138
|
-
if (ruleName === metaSuppositionRuleName) {
|
|
139
|
-
var childNodes = nonTerminalNode.getChildNodes(), metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(), nodes = childNodes, metaSuppositionNodes = metaSuppositionChildNodes, metaSuppositionChildNodesMatches = matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions);
|
|
140
|
-
metaSuppositionNonTerminalNodeMatches = metaSuppositionChildNodesMatches; ///
|
|
141
|
-
if (!metaSuppositionNonTerminalNodeMatches) {
|
|
142
|
-
var ruleNameMetastatementRuleName = ruleName === _ruleNames.METASTATEMENT_RULE_NAME;
|
|
143
|
-
if (ruleNameMetastatementRuleName) {
|
|
144
|
-
var metastatementNode = nonTerminalNode, metaSuppositionMetastatementNode = metaSuppositionNonTerminalNode, metaSuppositionMetastatementNodeMatches = matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions);
|
|
145
|
-
metaSuppositionNonTerminalNodeMatches = metaSuppositionMetastatementNodeMatches; ///
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
return metaSuppositionNonTerminalNodeMatches;
|
|
150
|
-
}
|
|
151
|
-
function matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
152
|
-
var metaSuppositionMetastatementNodeMatches = false;
|
|
153
|
-
var metaSuppositionNonTerminalNode = metaSuppositionMetastatementNode, metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(), metaSuppositionChildNodesLength = metaSuppositionChildNodes.length;
|
|
154
|
-
if (metaSuppositionChildNodesLength === 1) {
|
|
155
|
-
var firstMetaSuppositionChildNode = (0, _array.first)(metaSuppositionChildNodes), metaSuppositionChildNode = firstMetaSuppositionChildNode, metaSuppositionChildNodeNonTerminalNode = metaSuppositionChildNode.isNonTerminalNode();
|
|
156
|
-
if (metaSuppositionChildNodeNonTerminalNode) {
|
|
157
|
-
var metaSuppositionNonTerminalChildNode = metaSuppositionChildNode, metaSuppositionNonTerminalChildNodeRuleName = metaSuppositionNonTerminalChildNode.getRuleName(), metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName = metaSuppositionNonTerminalChildNodeRuleName === _ruleNames.METAVARIABLE_RULE_NAME;
|
|
158
|
-
if (metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
159
|
-
var metaSuppositionMetavariableNode = metaSuppositionNonTerminalChildNode, nonTerminalNode = metastatementNode, childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, metaSuppositionMetavariableMatches = matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions);
|
|
160
|
-
metaSuppositionMetastatementNodeMatches = metaSuppositionMetavariableMatches; ///
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return metaSuppositionMetastatementNodeMatches;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhU3VwcG9zaXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBNZXRhU3Vic3RpdHV0aW9uIGZyb20gXCIuL21ldGFTdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgZmlyc3QgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSB9IGZyb20gXCIuL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgbWV0YXN0YXRlbWVudE5vZGVGcm9tTWV0YXN0YXRlbWVudFN0cmluZyB9IGZyb20gXCIuL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IE1FVEFWQVJJQUJMRV9SVUxFX05BTUUsIE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FIH0gZnJvbSBcIi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFTdXBwb3NpdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXN0YXRlbWVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBtYXRjaE1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlID0gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZShtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBtZXRhc3RhdGVtZW50U3RyaW5nID0gbm9kZUFzU3RyaW5nKHRoaXMubWV0YXN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnQgPSBtZXRhc3RhdGVtZW50U3RyaW5nLCAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbWV0YXN0YXRlbWVudFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCByZWxlYXNlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgbWV0YXN0YXRlbWVudCB9ID0ganNvbixcbiAgICAgICAgICBtZXRhc3RhdGVtZW50U3RyaW5nID0gbWV0YXN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGVGcm9tTWV0YXN0YXRlbWVudFN0cmluZyhtZXRhc3RhdGVtZW50U3RyaW5nLCByZWxlYXNlQ29udGV4dCksXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uID0gbmV3IE1ldGFTdXBwb3NpdGlvbihtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YVN1cHBvc2l0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21NZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSkge1xuICAgIGNvbnN0IG1ldGFTdXBwb3NpdGlvbiA9IG5ldyBNZXRhU3VwcG9zaXRpb24obWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vZGUobWV0YVN1cHBvc2l0aW9uTm9kZSwgbm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFTdXBwb3NpdGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgcnVsZU5vZGVUZXJtaW5hbE5vZGUgPSBtZXRhU3VwcG9zaXRpb25Ob2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZSA9IG1ldGFTdXBwb3NpdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZShtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBtZXRhU3VwcG9zaXRpb25Ob2RlTWF0Y2hlcyA9IG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXM7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUgPSBtZXRhU3VwcG9zaXRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGUobWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YVN1cHBvc2l0aW9uTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1cHBvc2l0aW9uTm9kZXMobWV0YVN1cHBvc2l0aW9uTm9kZXMsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YVN1cHBvc2l0aW9uTm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vZGVzTGVuZ3RoID0gbWV0YVN1cHBvc2l0aW9uTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gbWV0YVN1cHBvc2l0aW9uTm9kZXNMZW5ndGgpIHtcbiAgICBtZXRhU3VwcG9zaXRpb25Ob2Rlc01hdGNoZXMgPSBub2Rlcy5ldmVyeSgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1ldGFTdXBwb3NpdGlvbk5vZGUgPSBtZXRhU3VwcG9zaXRpb25Ob2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob2RlTWF0Y2hlcyA9IG1hdGNoTWV0YVN1cHBvc2l0aW9uTm9kZShtZXRhU3VwcG9zaXRpb25Ob2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIGlmIChtZXRhU3VwcG9zaXRpb25Ob2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtZXRhU3VwcG9zaXRpb25Ob2Rlc01hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlKG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU5vZGUsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTWF0Y2hlcztcblxuICBjb25zdCBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBtZXRhU3Vic3RpdHV0aW9uID0gbWV0YVN1YnN0aXR1dGlvbnMuZmluZCgobWV0YVN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhU3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgICAgICAgIGlmIChtZXRhdmFyaWFibGVOYW1lID09PSBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKG1ldGFTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaCA9IG1ldGFTdWJzdGl0dXRpb24ubWF0Y2hOb2Rlcyhub2Rlcyk7XG5cbiAgICBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVNYXRjaGVzID0gbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2g7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTmFtZSwgLy8vXG4gICAgICAgICAgbWV0YVN1YnN0aXR1dGlvbiA9IE1ldGFTdWJzdGl0dXRpb24uZnJvbU1ldGF2YXJpYWJsZU5hbWVBbmROb2RlcyhtZXRhdmFyaWFibGVOYW1lLCBub2Rlcyk7XG5cbiAgICBtZXRhU3Vic3RpdHV0aW9ucy5wdXNoKG1ldGFTdWJzdGl0dXRpb24pO1xuXG4gICAgbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTWF0Y2hlcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUobWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBtZXRhU3VwcG9zaXRpb25UZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgbWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoZXM7XG5cbiAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlKG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvblJ1bGVOYW1lID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCk7IC8vL1xuXG4gIGlmIChydWxlTmFtZSA9PT0gbWV0YVN1cHBvc2l0aW9uUnVsZU5hbWUpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVzID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub2RlcyA9IGNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vZGVzID0gbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2Rlc01hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvbk5vZGVzKG1ldGFTdXBwb3NpdGlvbk5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNNYXRjaGVzOyAvLy9cblxuICAgIGlmICghbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgY29uc3QgcnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGUobWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlczsgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGUobWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxOb2RlID0gbWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcyA9IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNMZW5ndGggPSBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAobWV0YVN1cHBvc2l0aW9uQ2hpbGROb2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGZpcnN0TWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlID0gZmlyc3QobWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcyksXG4gICAgICAgICAgbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlID0gZmlyc3RNZXRhU3VwcG9zaXRpb25DaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChtZXRhU3VwcG9zaXRpb25DaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlID0gbWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSA9IChtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID09PSBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKG1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOb2RlID0gbWV0YVN1cHBvc2l0aW9uTm9uVGVybWluYWxDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gbWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgIG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXMgPSBtYXRjaE1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZShtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOb2RlLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIG1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG59XG4iXSwibmFtZXMiOlsiTWV0YVN1cHBvc2l0aW9uIiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhU3Vic3RpdHV0aW9ucyIsIm5vblRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsTm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsInRvSlNPTiIsIm1ldGFzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJtZXRhc3RhdGVtZW50IiwianNvbiIsImZyb21KU09OIiwicmVsZWFzZUNvbnRleHQiLCJtZXRhc3RhdGVtZW50Tm9kZUZyb21NZXRhc3RhdGVtZW50U3RyaW5nIiwibWV0YVN1cHBvc2l0aW9uIiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwibWF0Y2hNZXRhU3VwcG9zaXRpb25Ob2RlIiwibWV0YVN1cHBvc2l0aW9uTm9kZSIsIm5vZGUiLCJtZXRhU3VwcG9zaXRpb25Ob2RlTWF0Y2hlcyIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInJ1bGVOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwibWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlIiwibWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YVN1cHBvc2l0aW9uVGVybWluYWxOb2RlIiwibWF0Y2hNZXRhU3VwcG9zaXRpb25Ob2RlcyIsIm1ldGFTdXBwb3NpdGlvbk5vZGVzIiwibm9kZXMiLCJtZXRhU3VwcG9zaXRpb25Ob2Rlc01hdGNoZXMiLCJub2Rlc0xlbmd0aCIsImxlbmd0aCIsIm1ldGFTdXBwb3NpdGlvbk5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJpbmRleCIsIm1hdGNoTWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlIiwibWV0YVN1cHBvc2l0aW9uTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk1ldGF2YXJpYWJsZU1hdGNoZXMiLCJtZXRhU3VwcG9zaXRpb25NZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YVN1YnN0aXR1dGlvbiIsImZpbmQiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwibWF0Y2hOb2RlcyIsIk1ldGFTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzIiwicHVzaCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJtZXRhU3VwcG9zaXRpb25SdWxlTmFtZSIsImNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlcyIsIm1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNNYXRjaGVzIiwicnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSIsIm1ldGFTdXBwb3NpdGlvbk1ldGFzdGF0ZW1lbnROb2RlIiwibWV0YVN1cHBvc2l0aW9uTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhU3VwcG9zaXRpb25NZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZXNMZW5ndGgiLCJmaXJzdE1ldGFTdXBwb3NpdGlvbkNoaWxkTm9kZSIsImZpcnN0IiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlIiwibWV0YVN1cHBvc2l0aW9uQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZSIsIm1ldGFTdXBwb3NpdGlvbk5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUiLCJtZXRhU3VwcG9zaXRpb25Ob25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUiLCJNRVRBVkFSSUFCTEVfUlVMRV9OQU1FIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQVVxQkE7OztxRUFSUTtxQkFFUDtzQkFDTztxQkFDd0I7eUJBRVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFakQsSUFBQSxBQUFNQSxnQ0E0Q2xCLEFBNUNZO2FBQU1BLGdCQUNQQyxpQkFBaUI7OEJBRFZEO1FBRWpCLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUdBOztpQkFGUkQ7O1lBS25CRSxLQUFBQTttQkFBQUEsU0FBQUEsdUJBQXVCO2dCQUNyQixPQUFPLElBQUksQ0FBQ0QsaUJBQWlCO1lBQy9COzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLHVCQUF1QkYsaUJBQWlCLEVBQUVHLGlCQUFpQixFQUFFO2dCQUMzRCxJQUFNQyxrQkFBa0JKLG1CQUNsQkssaUNBQWlDLElBQUksQ0FBQ0wsaUJBQWlCLEVBQ3ZETSx3Q0FBd0NDLG9DQUFvQ0YsZ0NBQWdDRCxpQkFBaUJELG9CQUM3SEssMkJBQTJCRix1Q0FBdUMsR0FBRztnQkFFM0UsT0FBT0U7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxTQUFTO2dCQUNQLElBQU1DLHNCQUFzQkMsSUFBQUEsb0JBQVksRUFBQyxJQUFJLENBQUNYLGlCQUFpQixHQUN6RFksZ0JBQWdCRixxQkFDaEJHLE9BQU87b0JBQ0xELGVBQUFBO2dCQUNGO2dCQUVOLE9BQU9DO1lBQ1Q7Ozs7WUFFT0MsS0FBQUE7bUJBQVAsU0FBT0EsU0FBU0QsSUFBSSxF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
|
package/lib/utilities/node.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
matchNode: function() {
|
|
13
|
-
return matchNode;
|
|
14
|
-
},
|
|
15
|
-
matchNodes: function() {
|
|
16
|
-
return matchNodes;
|
|
17
|
-
},
|
|
18
|
-
matchBracketedNonTerminalNode: function() {
|
|
19
|
-
return matchBracketedNonTerminalNode;
|
|
20
|
-
},
|
|
21
|
-
bracketedNonTerminalChildNodeFromChildNodes: function() {
|
|
22
|
-
return bracketedNonTerminalChildNodeFromChildNodes;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
var _array = require("./array");
|
|
26
|
-
var _ruleNames = require("../ruleNames");
|
|
27
|
-
var _constants = require("../constants");
|
|
28
|
-
function matchNode(nodeA, nodeB) {
|
|
29
|
-
var nodeMatches = false;
|
|
30
|
-
var nodeATerminalNode = nodeA.isTerminalNode(), nodeBTerminalNode = nodeB.isTerminalNode();
|
|
31
|
-
if (nodeATerminalNode === nodeBTerminalNode) {
|
|
32
|
-
if (nodeATerminalNode) {
|
|
33
|
-
var terminalNodeA = nodeA, terminalNodeB = nodeB, terminalNodeMatches = matchTerminalNode(terminalNodeA, terminalNodeB);
|
|
34
|
-
nodeMatches = terminalNodeMatches; ///
|
|
35
|
-
} else {
|
|
36
|
-
var nonTerminalNodeA = nodeA, nonTerminalNodeB = nodeB, nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
37
|
-
nodeMatches = nonTerminalNodeMatches; ///
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return nodeMatches;
|
|
41
|
-
}
|
|
42
|
-
function matchNodes(nodesA, nodesB) {
|
|
43
|
-
var nodesMatch = false;
|
|
44
|
-
var nodesALength = nodesA.length, nodesBLength = nodesB.length;
|
|
45
|
-
if (nodesALength === nodesBLength) {
|
|
46
|
-
nodesMatch = nodesA.every(function(nodeA, index) {
|
|
47
|
-
var nodeB = nodesB[index], nodeMatches = matchNode(nodeA, nodeB);
|
|
48
|
-
if (nodeMatches) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
return nodesMatch;
|
|
54
|
-
}
|
|
55
|
-
function matchBracketedNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
|
|
56
|
-
var bracketedNodeMatches = false;
|
|
57
|
-
if (!bracketedNodeMatches) {
|
|
58
|
-
var nonTerminalNodeMatches = matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB);
|
|
59
|
-
bracketedNodeMatches = nonTerminalNodeMatches; ///
|
|
60
|
-
}
|
|
61
|
-
if (!bracketedNodeMatches) {
|
|
62
|
-
var nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(), childNodesA = nonTerminalNodeAChildNodes, bracketedNonTerminalChildNodeA = bracketedNonTerminalChildNodeFromChildNodes(childNodesA);
|
|
63
|
-
if (bracketedNonTerminalChildNodeA !== null) {
|
|
64
|
-
var nodeA = bracketedNonTerminalChildNodeA, nodeB = nonTerminalNodeB, nodeMatches = matchNode(nodeA, nodeB);
|
|
65
|
-
bracketedNodeMatches = nodeMatches; ///
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (!bracketedNodeMatches) {
|
|
69
|
-
var nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(), childNodesB = nonTerminalNodeBChildNodes, bracketedNonTerminalChildNodeB = bracketedNonTerminalChildNodeFromChildNodes(childNodesB);
|
|
70
|
-
if (bracketedNonTerminalChildNodeB !== null) {
|
|
71
|
-
var nodeB1 = bracketedNonTerminalChildNodeB, nodeA1 = nonTerminalNodeA, nodeMatches1 = matchNode(nodeA1, nodeB1);
|
|
72
|
-
bracketedNodeMatches = nodeMatches1; ///
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return bracketedNodeMatches;
|
|
76
|
-
}
|
|
77
|
-
function bracketedNonTerminalChildNodeFromChildNodes(childNodes) {
|
|
78
|
-
var ruleName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : _ruleNames.METASTATEMENT_RULE_NAME;
|
|
79
|
-
var bracketedNonTerminalChildNode = null;
|
|
80
|
-
var childNodesLength = childNodes.length;
|
|
81
|
-
if (childNodesLength === _constants.BRACKETED_CHILD_NODES_LENGTH) {
|
|
82
|
-
var firstChildNode = (0, _array.first)(childNodes), thirdChildNode = (0, _array.third)(childNodes), secondChildNode = (0, _array.second)(childNodes), firstChildNodeTerminalNode = firstChildNode.isTerminalNode(), thirdChildNodeTerminalNode = thirdChildNode.isTerminalNode(), secondChildNodeNonTerminalNode = secondChildNode.isNonTerminalNode();
|
|
83
|
-
if (firstChildNodeTerminalNode && secondChildNodeNonTerminalNode && thirdChildNodeTerminalNode) {
|
|
84
|
-
var nonTerminalNode = secondChildNode, firstTerminalNode = firstChildNode, secondTerminalNode = thirdChildNode, nonTerminalNodeRuleName = nonTerminalNode.getRuleName(), firstTerminalNodeContent = firstTerminalNode.getContent(), secondTerminalNodeContent = secondTerminalNode.getContent(), nonTerminalNodeRuleNameRuleName = nonTerminalNodeRuleName === ruleName, firstTerminalNodeContentLeftBracket = firstTerminalNodeContent === _constants.LEFT_BRACKET, secondTerminalNodeContentRightBracket = secondTerminalNodeContent === _constants.RIGHT_BRACKET;
|
|
85
|
-
if (nonTerminalNodeRuleNameRuleName && firstTerminalNodeContentLeftBracket && secondTerminalNodeContentRightBracket) {
|
|
86
|
-
bracketedNonTerminalChildNode = nonTerminalNode; ///
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return bracketedNonTerminalChildNode;
|
|
91
|
-
}
|
|
92
|
-
function matchTerminalNode(terminalNodeA, terminalNodeB) {
|
|
93
|
-
var matches = terminalNodeA.match(terminalNodeB), terminalNodeMatches = matches; ///
|
|
94
|
-
return terminalNodeMatches;
|
|
95
|
-
}
|
|
96
|
-
function matchNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB) {
|
|
97
|
-
var nonTerminalNodeMatches = false;
|
|
98
|
-
var nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName(), nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName(); ///
|
|
99
|
-
if (nonTerminalNodeARuleName === nonTerminalNodeBRuleName) {
|
|
100
|
-
var nonTerminalNodeAChildNodes = nonTerminalNodeA.getChildNodes(), nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(), nodesA = nonTerminalNodeAChildNodes, nodesB = nonTerminalNodeBChildNodes, nodesMatch = matchNodes(nodesA, nodesB);
|
|
101
|
-
nonTerminalNodeMatches = nodesMatch; ///
|
|
102
|
-
}
|
|
103
|
-
return nonTerminalNodeMatches;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvbm9kZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZmlyc3QsIHNlY29uZCwgdGhpcmQgfSBmcm9tIFwiLi9hcnJheVwiO1xuaW1wb3J0IHsgTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5pbXBvcnQgeyBCUkFDS0VURURfQ0hJTERfTk9ERVNfTEVOR1RILCBMRUZUX0JSQUNLRVQsIFJJR0hUX0JSQUNLRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaE5vZGUobm9kZUEsIG5vZGVCKSB7XG4gIGxldCBub2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVBVGVybWluYWxOb2RlID0gbm9kZUEuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgbm9kZUJUZXJtaW5hbE5vZGUgPSBub2RlQi5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlQVRlcm1pbmFsTm9kZSA9PT0gbm9kZUJUZXJtaW5hbE5vZGUpIHtcbiAgICBpZiAobm9kZUFUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZUEgPSBub2RlQSwgIC8vL1xuICAgICAgICAgICAgdGVybWluYWxOb2RlQiA9IG5vZGVCLCAgLy8vXG4gICAgICAgICAgICB0ZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlQSwgdGVybWluYWxOb2RlQik7XG5cbiAgICAgIG5vZGVNYXRjaGVzID0gdGVybWluYWxOb2RlTWF0Y2hlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGVBID0gbm9kZUEsICAvLy9cbiAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZUIgPSBub2RlQiwgLy8vXG4gICAgICAgICAgICBub25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hOb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlQSwgbm9uVGVybWluYWxOb2RlQik7XG5cbiAgICAgIG5vZGVNYXRjaGVzID0gbm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGVNYXRjaGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hOb2Rlcyhub2Rlc0EsIG5vZGVzQikge1xuICBsZXQgbm9kZXNNYXRjaCA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzQUxlbmd0aCA9IG5vZGVzQS5sZW5ndGgsXG4gICAgICAgIG5vZGVzQkxlbmd0aCA9IG5vZGVzQi5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzQUxlbmd0aCA9PT0gbm9kZXNCTGVuZ3RoKSB7XG4gICAgbm9kZXNNYXRjaCA9IG5vZGVzQS5ldmVyeSgobm9kZUEsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBub2RlQiA9IG5vZGVzQltpbmRleF0sXG4gICAgICAgICAgICBub2RlTWF0Y2hlcyA9IG1hdGNoTm9kZShub2RlQSwgbm9kZUIpO1xuXG4gICAgICBpZiAobm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBub2Rlc01hdGNoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hCcmFja2V0ZWROb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlQSwgbm9uVGVybWluYWxOb2RlQikge1xuICBsZXQgYnJhY2tldGVkTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBpZiAoIWJyYWNrZXRlZE5vZGVNYXRjaGVzKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoTm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIpO1xuXG4gICAgYnJhY2tldGVkTm9kZU1hdGNoZXMgPSBub25UZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG4gIH1cblxuICBpZiAoIWJyYWNrZXRlZE5vZGVNYXRjaGVzKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGVBLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBjaGlsZE5vZGVzQSA9IG5vblRlcm1pbmFsTm9kZUFDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZUEgPSBicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZUZyb21DaGlsZE5vZGVzKGNoaWxkTm9kZXNBKTtcblxuICAgIGlmIChicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZUEgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGVBID0gYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVBLCAgLy8vXG4gICAgICAgICAgICBub2RlQiA9IG5vblRlcm1pbmFsTm9kZUIsIC8vL1xuICAgICAgICAgICAgbm9kZU1hdGNoZXMgPSBtYXRjaE5vZGUobm9kZUEsIG5vZGVCKTtcblxuICAgICAgYnJhY2tldGVkTm9kZU1hdGNoZXMgPSBub2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgaWYgKCFicmFja2V0ZWROb2RlTWF0Y2hlcykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZUJDaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlQi5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgY2hpbGROb2Rlc0IgPSBub25UZXJtaW5hbE5vZGVCQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVCID0gYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVGcm9tQ2hpbGROb2RlcyhjaGlsZE5vZGVzQik7XG5cbiAgICBpZiAoYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVCICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBub2RlQiA9IGJyYWNrZXRlZE5vblRlcm1pbmFsQ2hpbGROb2RlQiwgIC8vL1xuICAgICAgICAgICAgbm9kZUEgPSBub25UZXJtaW5hbE5vZGVBLCAvLy9cbiAgICAgICAgICAgIG5vZGVNYXRjaGVzID0gbWF0Y2hOb2RlKG5vZGVBLCBub2RlQik7XG5cbiAgICAgIGJyYWNrZXRlZE5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWROb2RlTWF0Y2hlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyYWNrZXRlZE5vblRlcm1pbmFsQ2hpbGROb2RlRnJvbUNoaWxkTm9kZXMoY2hpbGROb2RlcywgcnVsZU5hbWUgPSBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSkge1xuICBsZXQgYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IGNoaWxkTm9kZXNMZW5ndGggPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAoY2hpbGROb2Rlc0xlbmd0aCA9PT0gQlJBQ0tFVEVEX0NISUxEX05PREVTX0xFTkdUSCkge1xuICAgIGNvbnN0IGZpcnN0Q2hpbGROb2RlID0gZmlyc3QoY2hpbGROb2RlcyksXG4gICAgICAgICAgdGhpcmRDaGlsZE5vZGUgPSB0aGlyZChjaGlsZE5vZGVzKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGUgPSBzZWNvbmQoY2hpbGROb2RlcyksXG4gICAgICAgICAgZmlyc3RDaGlsZE5vZGVUZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICAgIHRoaXJkQ2hpbGROb2RlVGVybWluYWxOb2RlID0gdGhpcmRDaGlsZE5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgICBzZWNvbmRDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBzZWNvbmRDaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChmaXJzdENoaWxkTm9kZVRlcm1pbmFsTm9kZSAmJiBzZWNvbmRDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgJiYgdGhpcmRDaGlsZE5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHNlY29uZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgZmlyc3RUZXJtaW5hbE5vZGUgPSBmaXJzdENoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgICBzZWNvbmRUZXJtaW5hbE5vZGUgPSB0aGlyZENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIGZpcnN0VGVybWluYWxOb2RlQ29udGVudCA9IGZpcnN0VGVybWluYWxOb2RlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICAgIHNlY29uZFRlcm1pbmFsTm9kZUNvbnRlbnQgPSBzZWNvbmRUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlUnVsZU5hbWVSdWxlTmFtZSA9IChub25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gcnVsZU5hbWUpLFxuICAgICAgICAgICAgZmlyc3RUZXJtaW5hbE5vZGVDb250ZW50TGVmdEJyYWNrZXQgPSAoZmlyc3RUZXJtaW5hbE5vZGVDb250ZW50ID09PSBMRUZUX0JSQUNLRVQpLFxuICAgICAgICAgICAgc2Vjb25kVGVybWluYWxOb2RlQ29udGVudFJpZ2h0QnJhY2tldCA9IChzZWNvbmRUZXJtaW5hbE5vZGVDb250ZW50ID09PSBSSUdIVF9CUkFDS0VUKTtcblxuICAgICAgaWYgKG5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUgJiYgZmlyc3RUZXJtaW5hbE5vZGVDb250ZW50TGVmdEJyYWNrZXQgJiYgc2Vjb25kVGVybWluYWxOb2RlQ29udGVudFJpZ2h0QnJhY2tldCkge1xuICAgICAgICBicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZSA9IG5vblRlcm1pbmFsTm9kZTsgIC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hUZXJtaW5hbE5vZGUodGVybWluYWxOb2RlQSwgdGVybWluYWxOb2RlQikge1xuICBjb25zdCBtYXRjaGVzID0gdGVybWluYWxOb2RlQS5tYXRjaCh0ZXJtaW5hbE5vZGVCKSxcbiAgICAgICAgdGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoZXM7ICAvLy9cblxuICByZXR1cm4gdGVybWluYWxOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hOb25UZXJtaW5hbE5vZGUobm9uVGVybWluYWxOb2RlQSwgbm9uVGVybWluYWxOb2RlQikge1xuICBsZXQgbm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vblRlcm1pbmFsTm9kZUFSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZUEuZ2V0UnVsZU5hbWUoKSwgLy8vXG4gICAgICAgIG5vblRlcm1pbmFsTm9kZUJSdWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZUIuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgaWYgKG5vblRlcm1pbmFsTm9kZUFSdWxlTmFtZSA9PT0gbm9uVGVybWluYWxOb2RlQlJ1bGVOYW1lKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlQUNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGVBLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICBub25UZXJtaW5hbE5vZGVCQ2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZUIuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzQSA9IG5vblRlcm1pbmFsTm9kZUFDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICBub2Rlc0IgPSBub25UZXJtaW5hbE5vZGVCQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbm9kZXNNYXRjaCA9IG1hdGNoTm9kZXMobm9kZXNBLCBub2Rlc0IpO1xuXG4gICAgbm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG5vZGVzTWF0Y2g7IC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG4iXSwibmFtZXMiOlsibWF0Y2hOb2RlIiwibWF0Y2hOb2RlcyIsIm1hdGNoQnJhY2tldGVkTm9uVGVybWluYWxOb2RlIiwiYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVGcm9tQ2hpbGROb2RlcyIsIm5vZGVBIiwibm9kZUIiLCJub2RlTWF0Y2hlcyIsIm5vZGVBVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJub2RlQlRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZUEiLCJ0ZXJtaW5hbE5vZGVCIiwidGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoVGVybWluYWxOb2RlIiwibm9uVGVybWluYWxOb2RlQSIsIm5vblRlcm1pbmFsTm9kZUIiLCJub25UZXJtaW5hbE5vZGVNYXRjaGVzIiwibWF0Y2hOb25UZXJtaW5hbE5vZGUiLCJub2Rlc0EiLCJub2Rlc0IiLCJub2Rlc01hdGNoIiwibm9kZXNBTGVuZ3RoIiwibGVuZ3RoIiwibm9kZXNCTGVuZ3RoIiwiZXZlcnkiLCJpbmRleCIsImJyYWNrZXRlZE5vZGVNYXRjaGVzIiwibm9uVGVybWluYWxOb2RlQUNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwiY2hpbGROb2Rlc0EiLCJicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZUEiLCJub25UZXJtaW5hbE5vZGVCQ2hpbGROb2RlcyIsImNoaWxkTm9kZXNCIiwiYnJhY2tldGVkTm9uVGVybWluYWxDaGlsZE5vZGVCIiwiY2hpbGROb2RlcyIsInJ1bGVOYW1lIiwiTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUiLCJicmFja2V0ZWROb25UZXJtaW5hbENoaWxkTm9kZSIsImNoaWxkTm9kZXNMZW5ndGgiLCJCUkFDS0VURURfQ0hJTERfTk9ERVNfTEVOR1RIIiwiZmlyc3RDaGlsZE5vZGUiLCJmaXJzdCIsInRoaXJkQ2hpbGROb2RlIiwidGhpcmQiLCJzZWNvbmRDaGlsZE5vZGUiLCJzZWNvbmQiLCJmaXJzdENoaWxkTm9kZVRlcm1pbmFsTm9kZSIsInRoaXJkQ2hpbGROb2RlVGVybWluYWxOb2RlIiwic2Vjb25kQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJmaXJzdFRlcm1pbmFsTm9kZSIsInNlY29uZFRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJmaXJzdFRlcm1pbmFsTm9kZUNvbnRlbnQiLCJnZXRDb250ZW50Iiwic2Vjb25kVGVybWluYWxOb2RlQ29udGVudCIsIm5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lUnVsZU5hbWUiLCJmaXJzdFRlcm1pbmFsTm9kZUNvbnRlbnRMZWZ0QnJhY2tldCIsIkxFRlRfQlJBQ0tFVCIsInNlY29uZFRlcm1pbmFsTm9kZUNvbnRlbnRSaWdodEJyYWNrZXQiLCJSSUdIVF9CUkFDS0VUIiwibWF0Y2hlcyIsIm1hdGNoIiwibm9uVGVybWluYWxOb2RlQVJ1bGVOYW1lIiwibm9uVGVybWluYWxOb2RlQlJ1bGVOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFNZ0JBLFNBQVM7ZUFBVEE7O0lBeUJBQyxVQUFVO2VBQVZBOztJQW9CQUMsNkJBQTZCO2VBQTdCQTs7SUF3Q0FDLDJDQUEyQztlQUEzQ0E7OztxQkF6RnFCO3lCQUNHO3lCQUNrQztBQUVuRSxTQUFTSCxVQUFVSSxLQUFLLEVBQUVDLEtBQUssRUFBRTtJQUN0QyxJQUFJQyxjQUFjLEtBQUs7SUFFdkIsSUFBTUMsb0JBQW9CSCxNQUFNSSxjQUFjLElBQ3hDQyxvQkFBb0JKLE1BQU1HLGNBQWM7SUFFOUMsSUFBSUQsc0JBQXNCRSxtQkFBbUI7UUFDM0MsSUFBSUYsbUJBQW1CO1lBQ3JCLElBQU1HLGdCQUFnQk4sT0FDaEJPLGdCQUFnQk4sT0FDaEJPLHNCQUFzQkMsa0JBQWtCSCxlQUFlQztZ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
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return verifyMetaSupposition;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _metaproof = /*#__PURE__*/ _interopRequireDefault(require("../step/metaproof"));
|
|
12
|
-
var _metaSupposition = /*#__PURE__*/ _interopRequireDefault(require("../metaSupposition"));
|
|
13
|
-
var _metastatement = /*#__PURE__*/ _interopRequireDefault(require("./metastatement"));
|
|
14
|
-
var _query = require("../utilities/query");
|
|
15
|
-
var _string = require("../utilities/string");
|
|
16
|
-
function _interopRequireDefault(obj) {
|
|
17
|
-
return obj && obj.__esModule ? obj : {
|
|
18
|
-
default: obj
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
var metastatementNodeQuery = (0, _query.nodeQuery)("/metaSupposition/unqualifiedMetastatement!/metastatement!");
|
|
22
|
-
function verifyMetaSupposition(metaSuppositionNode, metaSuppositions, metaproofContext) {
|
|
23
|
-
var metaSuppositionVerified;
|
|
24
|
-
metaproofContext.begin(metaSuppositionNode);
|
|
25
|
-
var metaSuppositionString = (0, _string.nodeAsString)(metaSuppositionNode);
|
|
26
|
-
metaproofContext.debug("Verifying the ".concat(metaSuppositionString, " metaSupposition..."));
|
|
27
|
-
var metastatementNode = metastatementNodeQuery(metaSuppositionNode);
|
|
28
|
-
if (metastatementNode !== null) {
|
|
29
|
-
var qualified = false, metastatementVerified = (0, _metastatement.default)(metastatementNode, qualified, metaproofContext);
|
|
30
|
-
if (metastatementVerified) {
|
|
31
|
-
var metaproofStep = _metaproof.default.fromMetastatementNode(metastatementNode), metaSupposition = _metaSupposition.default.fromMetastatementNode(metastatementNode);
|
|
32
|
-
metaSuppositions.push(metaSupposition);
|
|
33
|
-
metaproofContext.addMetaproofStep(metaproofStep);
|
|
34
|
-
}
|
|
35
|
-
metaSuppositionVerified = true;
|
|
36
|
-
}
|
|
37
|
-
metaSuppositionVerified ? metaproofContext.complete(metaSuppositionNode) : metaproofContext.halt(metaSuppositionNode);
|
|
38
|
-
return metaSuppositionVerified;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZnkvbWV0YVN1cHBvc2l0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgTWV0YXByb29mU3RlcCBmcm9tIFwiLi4vc3RlcC9tZXRhcHJvb2ZcIjtcbmltcG9ydCBNZXRhU3VwcG9zaXRpb24gZnJvbSBcIi4uL21ldGFTdXBwb3NpdGlvblwiO1xuaW1wb3J0IHZlcmlmeU1ldGFzdGF0ZW1lbnQgZnJvbSBcIi4vbWV0YXN0YXRlbWVudFwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFTdXBwb3NpdGlvbi91bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQhL21ldGFzdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlNZXRhU3VwcG9zaXRpb24obWV0YVN1cHBvc2l0aW9uTm9kZSwgbWV0YVN1cHBvc2l0aW9ucywgbWV0YXByb29mQ29udGV4dCkge1xuICBsZXQgbWV0YVN1cHBvc2l0aW9uVmVyaWZpZWQ7XG5cbiAgbWV0YXByb29mQ29udGV4dC5iZWdpbihtZXRhU3VwcG9zaXRpb25Ob2RlKTtcblxuICBjb25zdCBtZXRhU3VwcG9zaXRpb25TdHJpbmcgPSBub2RlQXNTdHJpbmcobWV0YVN1cHBvc2l0aW9uTm9kZSk7XG5cbiAgbWV0YXByb29mQ29udGV4dC5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAke21ldGFTdXBwb3NpdGlvblN0cmluZ30gbWV0YVN1cHBvc2l0aW9uLi4uYCk7XG5cbiAgY29uc3QgbWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5KG1ldGFTdXBwb3NpdGlvbk5vZGUpO1xuXG4gIGlmIChtZXRhc3RhdGVtZW50Tm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9IGZhbHNlLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRWZXJpZmllZCA9IHZlcmlmeU1ldGFzdGF0ZW1lbnQobWV0YXN0YXRlbWVudE5vZGUsIHF1YWxpZmllZCwgbWV0YXByb29mQ29udGV4dCk7XG5cbiAgICBpZiAobWV0YXN0YXRlbWVudFZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBtZXRhcHJvb2ZTdGVwID0gTWV0YXByb29mU3RlcC5mcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgICAgbWV0YVN1cHBvc2l0aW9uID0gTWV0YVN1cHBvc2l0aW9uLmZyb21NZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICAgIG1ldGFTdXBwb3NpdGlvbnMucHVzaChtZXRhU3VwcG9zaXRpb24pO1xuXG4gICAgICBtZXRhcHJvb2ZDb250ZXh0LmFkZE1ldGFwcm9vZlN0ZXAobWV0YXByb29mU3RlcCk7XG4gICAgfVxuXG4gICAgbWV0YVN1cHBvc2l0aW9uVmVyaWZpZWQgPSB0cnVlO1xuICB9XG5cbiAgbWV0YVN1cHBvc2l0aW9uVmVyaWZpZWQgP1xuICAgIG1ldGFwcm9vZkNvbnRleHQuY29tcGxldGUobWV0YVN1cHBvc2l0aW9uTm9kZSkgOlxuICAgICAgbWV0YXByb29mQ29udGV4dC5oYWx0KG1ldGFTdXBwb3NpdGlvbk5vZGUpO1xuXG4gIHJldHVybiBtZXRhU3VwcG9zaXRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlNZXRhU3VwcG9zaXRpb24iLCJtZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibWV0YVN1cHBvc2l0aW9uTm9kZSIsIm1ldGFTdXBwb3NpdGlvbnMiLCJtZXRhcHJvb2ZDb250ZXh0IiwibWV0YVN1cHBvc2l0aW9uVmVyaWZpZWQiLCJiZWdpbiIsIm1ldGFTdXBwb3NpdGlvblN0cmluZyIsIm5vZGVBc1N0cmluZyIsImRlYnVnIiwibWV0YXN0YXRlbWVudE5vZGUiLCJxdWFsaWZpZWQiLCJtZXRhc3RhdGVtZW50VmVyaWZpZWQiLCJ2ZXJpZnlNZXRhc3RhdGVtZW50IiwibWV0YXByb29mU3RlcCIsIk1ldGFwcm9vZlN0ZXAiLCJmcm9tTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhU3VwcG9zaXRpb24iLCJNZXRhU3VwcG9zaXRpb24iLCJwdXNoIiwiYWRkTWV0YXByb29mU3RlcCIsImNvbXBsZXRlIiwiaGFsdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBV0E7OztlQUF3QkE7Ozs4REFURTtvRUFDRTtrRUFDSTtxQkFFTjtzQkFDRzs7Ozs7O0FBRTdCLElBQU1DLHlCQUF5QkMsSUFBQUEsZ0JBQVMsRUFBQztBQUUxQixTQUFTRixzQkFBc0JHLG1CQUFtQixFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLEVBQUU7SUFDckcsSUFBSUM7SUFFSkQsaUJBQWlCRSxLQUFLLENBQUNKO0lBRXZCLElBQU1LLHdCQUF3QkMsSUFBQUEsb0JBQVksRUFBQ047SUFFM0NFLGlCQUFpQkssS0FBSyxDQUFDLEFBQUMsaUJBQXNDLE9BQXRCRix1QkFBc0I7SUFFOUQsSUFBTUcsb0JBQW9CVix1QkFBdUJFO0lBRWpELElBQUlRLHNCQUFzQixJQUFJLEVBQUU7UUFDOUIsSUFBTUMsWUFBWSxLQUFLLEVBQ2pCQyx3QkFBd0JDLElBQUFBLHNCQUFtQixFQUFDSCxtQkFBbUJDLFdBQVdQO1FBRWhGLElBQUlRLHVCQUF1QjtZQUN6QixJQUFNRSxnQkFBZ0JDLGtCQUFhLENBQUNDLHFCQUFxQixDQUFDTixvQkFDcERPLGtCQUFrQkMsd0JBQWUsQ0FBQ0YscUJBQXFCLENBQUNOO1lBRTlEUCxpQkFBaUJnQixJQUFJLENBQUNGO1lBRXRCYixpQkFBaUJnQixnQkFBZ0IsQ0FBQ047UUFDcEMsQ0FBQztRQUVEVCwwQkFBMEIsSUFBSTtJQUNoQyxDQUFDO0lBRURBLDBCQUNFRCxpQkFBaUJpQixRQUFRLENBQUNuQix1QkFDeEJFLGlCQUFpQmtCLElBQUksQ0FBQ3BCLG9CQUFvQjtJQUU5QyxPQUFPRztBQUNUIn0=
|
package/src/metaSupposition.js
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import MetaSubstitution from "./metaSubstitution";
|
|
4
|
-
|
|
5
|
-
import { first } from "./utilities/array";
|
|
6
|
-
import { nodeAsString } from "./utilities/string";
|
|
7
|
-
import { metavariableNameFromMetavariableNode } from "./utilities/query";
|
|
8
|
-
import { metastatementNodeFromMetastatementString } from "./utilities/string";
|
|
9
|
-
import { METAVARIABLE_RULE_NAME, METASTATEMENT_RULE_NAME } from "./ruleNames";
|
|
10
|
-
|
|
11
|
-
export default class MetaSupposition {
|
|
12
|
-
constructor(metastatementNode) {
|
|
13
|
-
this.metastatementNode = metastatementNode;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
getMetastatementNode() {
|
|
17
|
-
return this.metastatementNode;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
matchMetastatementNode(metastatementNode, metaSubstitutions) {
|
|
21
|
-
const nonTerminalNode = metastatementNode, ///
|
|
22
|
-
metaSuppositionNonTerminalNode = this.metastatementNode, ///
|
|
23
|
-
metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions),
|
|
24
|
-
metastatementNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
25
|
-
|
|
26
|
-
return metastatementNodeMatches;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
toJSON() {
|
|
30
|
-
const metastatementString = nodeAsString(this.metastatementNode),
|
|
31
|
-
metastatement = metastatementString, ///
|
|
32
|
-
json = {
|
|
33
|
-
metastatement
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
return json;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
static fromJSON(json, releaseContext) {
|
|
40
|
-
const { metastatement } = json,
|
|
41
|
-
metastatementString = metastatement, ///
|
|
42
|
-
metastatementNode = metastatementNodeFromMetastatementString(metastatementString, releaseContext),
|
|
43
|
-
metaSupposition = new MetaSupposition(metastatementNode);
|
|
44
|
-
|
|
45
|
-
return metaSupposition;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static fromMetastatementNode(metastatementNode) {
|
|
49
|
-
const metaSupposition = new MetaSupposition(metastatementNode);
|
|
50
|
-
|
|
51
|
-
return metaSupposition;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions) {
|
|
56
|
-
let metaSuppositionNodeMatches = false;
|
|
57
|
-
|
|
58
|
-
const nodeTerminalNode = node.isTerminalNode(),
|
|
59
|
-
ruleNodeTerminalNode = metaSuppositionNode.isTerminalNode();
|
|
60
|
-
|
|
61
|
-
if (nodeTerminalNode === ruleNodeTerminalNode) {
|
|
62
|
-
if (nodeTerminalNode) {
|
|
63
|
-
const terminalNode = node, ///
|
|
64
|
-
metaSuppositionTerminalNode = metaSuppositionNode, ///
|
|
65
|
-
metaSuppositionTerminalNodeMatches = matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions);
|
|
66
|
-
|
|
67
|
-
metaSuppositionNodeMatches = metaSuppositionTerminalNodeMatches; ///
|
|
68
|
-
} else {
|
|
69
|
-
const nonTerminalNode = node, ///
|
|
70
|
-
metaSuppositionNonTerminalNode = metaSuppositionNode, ///
|
|
71
|
-
metaSuppositionNonTerminalNodeMatches = matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions);
|
|
72
|
-
|
|
73
|
-
metaSuppositionNodeMatches = metaSuppositionNonTerminalNodeMatches; ///
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return metaSuppositionNodeMatches;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions) {
|
|
81
|
-
let metaSuppositionNodesMatches = false;
|
|
82
|
-
|
|
83
|
-
const nodesLength = nodes.length,
|
|
84
|
-
metaSuppositionNodesLength = metaSuppositionNodes.length;
|
|
85
|
-
|
|
86
|
-
if (nodesLength === metaSuppositionNodesLength) {
|
|
87
|
-
metaSuppositionNodesMatches = nodes.every((node, index) => {
|
|
88
|
-
const metaSuppositionNode = metaSuppositionNodes[index],
|
|
89
|
-
metaSuppositionNodeMatches = matchMetaSuppositionNode(metaSuppositionNode, node, metaSubstitutions);
|
|
90
|
-
|
|
91
|
-
if (metaSuppositionNodeMatches) {
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return metaSuppositionNodesMatches;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions) {
|
|
101
|
-
let metaSuppositionMetavariableMatches;
|
|
102
|
-
|
|
103
|
-
const metaSuppositionMetavariableName = metavariableNameFromMetavariableNode(metaSuppositionMetavariableNode),
|
|
104
|
-
metaSubstitution = metaSubstitutions.find((metaSubstitution) => {
|
|
105
|
-
const metavariableName = metaSubstitution.getMetavariableName();
|
|
106
|
-
|
|
107
|
-
if (metavariableName === metaSuppositionMetavariableName) {
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
}) || null;
|
|
111
|
-
|
|
112
|
-
if (metaSubstitution !== null) {
|
|
113
|
-
const metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
|
|
114
|
-
|
|
115
|
-
metaSuppositionMetavariableMatches = metaSubstitutionNodesMatch; ///
|
|
116
|
-
} else {
|
|
117
|
-
const metavariableName = metaSuppositionMetavariableName, ///
|
|
118
|
-
metaSubstitution = MetaSubstitution.fromMetavariableNameAndNodes(metavariableName, nodes);
|
|
119
|
-
|
|
120
|
-
metaSubstitutions.push(metaSubstitution);
|
|
121
|
-
|
|
122
|
-
metaSuppositionMetavariableMatches = true;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
return metaSuppositionMetavariableMatches;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function matchMetaSuppositionTerminalNode(metaSuppositionTerminalNode, terminalNode, metaSubstitutions) {
|
|
129
|
-
const matches = metaSuppositionTerminalNode.match(terminalNode),
|
|
130
|
-
metaSuppositionTerminalNodeMatches = matches;
|
|
131
|
-
|
|
132
|
-
return metaSuppositionTerminalNodeMatches;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
function matchMetaSuppositionNonTerminalNode(metaSuppositionNonTerminalNode, nonTerminalNode, metaSubstitutions) {
|
|
136
|
-
let metaSuppositionNonTerminalNodeMatches = false;
|
|
137
|
-
|
|
138
|
-
const ruleName = nonTerminalNode.getRuleName(),
|
|
139
|
-
metaSuppositionRuleName = metaSuppositionNonTerminalNode.getRuleName(); ///
|
|
140
|
-
|
|
141
|
-
if (ruleName === metaSuppositionRuleName) {
|
|
142
|
-
const childNodes = nonTerminalNode.getChildNodes(),
|
|
143
|
-
metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(),
|
|
144
|
-
nodes = childNodes, ///
|
|
145
|
-
metaSuppositionNodes = metaSuppositionChildNodes, ///
|
|
146
|
-
metaSuppositionChildNodesMatches = matchMetaSuppositionNodes(metaSuppositionNodes, nodes, metaSubstitutions);
|
|
147
|
-
|
|
148
|
-
metaSuppositionNonTerminalNodeMatches = metaSuppositionChildNodesMatches; ///
|
|
149
|
-
|
|
150
|
-
if (!metaSuppositionNonTerminalNodeMatches) {
|
|
151
|
-
const ruleNameMetastatementRuleName = (ruleName === METASTATEMENT_RULE_NAME);
|
|
152
|
-
|
|
153
|
-
if (ruleNameMetastatementRuleName) {
|
|
154
|
-
const metastatementNode = nonTerminalNode, ///
|
|
155
|
-
metaSuppositionMetastatementNode = metaSuppositionNonTerminalNode, ///
|
|
156
|
-
metaSuppositionMetastatementNodeMatches = matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions);
|
|
157
|
-
|
|
158
|
-
metaSuppositionNonTerminalNodeMatches = metaSuppositionMetastatementNodeMatches; ///
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
return metaSuppositionNonTerminalNodeMatches;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function matchMetaSuppositionMetastatementNode(metaSuppositionMetastatementNode, metastatementNode, metaSubstitutions) {
|
|
167
|
-
let metaSuppositionMetastatementNodeMatches = false;
|
|
168
|
-
|
|
169
|
-
const metaSuppositionNonTerminalNode = metaSuppositionMetastatementNode, ///
|
|
170
|
-
metaSuppositionChildNodes = metaSuppositionNonTerminalNode.getChildNodes(),
|
|
171
|
-
metaSuppositionChildNodesLength = metaSuppositionChildNodes.length;
|
|
172
|
-
|
|
173
|
-
if (metaSuppositionChildNodesLength === 1) {
|
|
174
|
-
const firstMetaSuppositionChildNode = first(metaSuppositionChildNodes),
|
|
175
|
-
metaSuppositionChildNode = firstMetaSuppositionChildNode, ///
|
|
176
|
-
metaSuppositionChildNodeNonTerminalNode = metaSuppositionChildNode.isNonTerminalNode();
|
|
177
|
-
|
|
178
|
-
if (metaSuppositionChildNodeNonTerminalNode) {
|
|
179
|
-
const metaSuppositionNonTerminalChildNode = metaSuppositionChildNode, ///
|
|
180
|
-
metaSuppositionNonTerminalChildNodeRuleName = metaSuppositionNonTerminalChildNode.getRuleName(),
|
|
181
|
-
metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName = (metaSuppositionNonTerminalChildNodeRuleName === METAVARIABLE_RULE_NAME);
|
|
182
|
-
|
|
183
|
-
if (metaSuppositionNonTerminalChildNodeRuleNameMetavariableRuleName) {
|
|
184
|
-
const metaSuppositionMetavariableNode = metaSuppositionNonTerminalChildNode, ///
|
|
185
|
-
nonTerminalNode = metastatementNode, ///
|
|
186
|
-
childNodes = nonTerminalNode.getChildNodes(),
|
|
187
|
-
nodes = childNodes, ///
|
|
188
|
-
metaSuppositionMetavariableMatches = matchMetaSuppositionMetavariable(metaSuppositionMetavariableNode, nodes, metaSubstitutions);
|
|
189
|
-
|
|
190
|
-
metaSuppositionMetastatementNodeMatches = metaSuppositionMetavariableMatches; ///
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
return metaSuppositionMetastatementNodeMatches;
|
|
196
|
-
}
|