precedent 1.0.6 → 1.0.8

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.
Files changed (46) hide show
  1. package/.config/code-server/config.yaml +4 -0
  2. package/.config/configstore/update-notifier-npm-check-updates.json +4 -0
  3. package/.config/configstore/update-notifier-npm.json +4 -0
  4. package/.vscode/launch.json +46 -0
  5. package/Dockerfile_LUXURYCode +69 -0
  6. package/{harness/Debug.js → debug/Harness.js} +0 -0
  7. package/dist/precedent.js +317 -0
  8. package/dist/precedent.min.js +39 -0
  9. package/dist/precedent.min.js.map +1 -0
  10. package/gulpfile.js +73 -58
  11. package/package.json +35 -16
  12. package/source/Precedent-Browser-Shim.js +8 -6
  13. package/source/StringParser.js +1 -1
  14. package/source/WordTree.js +7 -7
  15. package/test/Precedent_tests.js +106 -0
  16. package/test.js +1 -0
  17. package/.c9/.nakignore +0 -17
  18. package/.c9/metadata/tab0 +0 -1
  19. package/.c9/metadata/tab3 +0 -1
  20. package/.c9/metadata/workspace/.travis.yml +0 -1
  21. package/.c9/metadata/workspace/Ideas.md +0 -1
  22. package/.c9/metadata/workspace/Precedent-Command.js +0 -1
  23. package/.c9/metadata/workspace/Precident-Command.js +0 -1
  24. package/.c9/metadata/workspace/README.md +0 -1
  25. package/.c9/metadata/workspace/bin/Precedent +0 -1
  26. package/.c9/metadata/workspace/bin/Precident +0 -1
  27. package/.c9/metadata/workspace/bower.json +0 -1
  28. package/.c9/metadata/workspace/dist/precedent.latest.min.js +0 -1
  29. package/.c9/metadata/workspace/fs.js +0 -1
  30. package/.c9/metadata/workspace/gulpfile.js +0 -1
  31. package/.c9/metadata/workspace/harness/Debug.js +0 -1
  32. package/.c9/metadata/workspace/internal/module.js +0 -1
  33. package/.c9/metadata/workspace/module.js +0 -1
  34. package/.c9/metadata/workspace/package.json +0 -1
  35. package/.c9/metadata/workspace/source/Precedent-Browser-Shim.js +0 -1
  36. package/.c9/metadata/workspace/source/Precedent-Options.js +0 -1
  37. package/.c9/metadata/workspace/source/Precedent.js +0 -1
  38. package/.c9/metadata/workspace/source/StringParser.js +0 -1
  39. package/.c9/metadata/workspace/source/WordTree.js +0 -1
  40. package/.c9/metadata/workspace/test/Precedent_tests.js +0 -1
  41. package/.c9/project.settings +0 -91
  42. package/.npmignore +0 -37
  43. package/dist/precedent.1.0.5.js +0 -339
  44. package/dist/precedent.1.0.5.min.js +0 -2
  45. package/dist/precedent.1.0.5.min.js.map +0 -1
  46. package/dist/precedent.latest.min.js +0 -2
package/.npmignore DELETED
@@ -1,37 +0,0 @@
1
- # Logs
2
- logs
3
- *.log
4
- npm-debug.log*
5
-
6
- # Runtime data
7
- pids
8
- *.pid
9
- *.seed
10
-
11
- # Directory for instrumented libs generated by jscoverage/JSCover
12
- lib-cov
13
-
14
- # Coverage directory used by tools like istanbul
15
- coverage
16
-
17
- # nyc test coverage
18
- .nyc_output
19
-
20
- # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21
- .grunt
22
-
23
- # node-waf configuration
24
- .lock-wscript
25
-
26
- # Compiled binary addons (http://nodejs.org/api/addons.html)
27
- build/Release
28
-
29
- # Dependency directories
30
- node_modules
31
- jspm_packages
32
-
33
- # Optional npm cache directory
34
- .npm
35
-
36
- # Optional REPL history
37
- .node_repl_history
@@ -1,339 +0,0 @@
1
- (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
- "use strict";
3
-
4
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
5
-
6
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7
-
8
- /**
9
- * Precedent Meta-Templating
10
- *
11
- * @license MIT
12
- *
13
- * @author Steven Velozo <steven@velozo.com>
14
- *
15
- * @description Process text streams, parsing out meta-template expressions.
16
- */
17
- var libWordTree = require("./WordTree.js");
18
- var libStringParser = require("./StringParser.js");
19
-
20
- var Precedent = function () {
21
- /**
22
- * Precedent Constructor
23
- */
24
- function Precedent() {
25
- _classCallCheck(this, Precedent);
26
-
27
- this.WordTree = new libWordTree();
28
-
29
- this.StringParser = new libStringParser();
30
-
31
- this.ParseTree = this.WordTree.ParseTree;
32
- }
33
-
34
- /**
35
- * Add a Pattern to the Parse Tree
36
- * @method addPattern
37
- * @param {Object} pTree - A node on the parse tree to push the characters into
38
- * @param {string} pPattern - The string to add to the tree
39
- * @param {number} pIndex - callback function
40
- * @return {bool} True if adding the pattern was successful
41
- */
42
-
43
-
44
- _createClass(Precedent, [{
45
- key: "addPattern",
46
- value: function addPattern(pPatternStart, pPatternEnd, pParser) {
47
- return this.WordTree.addPattern(pPatternStart, pPatternEnd, pParser);
48
- }
49
-
50
- /**
51
- * Parse a string with the existing parse tree
52
- * @method parseString
53
- * @param {string} pString - The string to parse
54
- * @return {string} The result from the parser
55
- */
56
-
57
- }, {
58
- key: "parseString",
59
- value: function parseString(pString) {
60
- return this.StringParser.parseString(pString, this.ParseTree);
61
- }
62
- }]);
63
-
64
- return Precedent;
65
- }();
66
-
67
- module.exports = Precedent;
68
-
69
- },{"./StringParser.js":2,"./WordTree.js":3}],2:[function(require,module,exports){
70
- 'use strict';
71
-
72
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
73
-
74
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
75
-
76
- /**
77
- * String Parser
78
- *
79
- * @license MIT
80
- *
81
- * @author Steven Velozo <steven@velozo.com>
82
- *
83
- * @description Parse a string, properly processing each matched token in the word tree.
84
- */
85
-
86
- var StringParser = function () {
87
- /**
88
- * StringParser Constructor
89
- */
90
- function StringParser() {
91
- _classCallCheck(this, StringParser);
92
- }
93
-
94
- /**
95
- * Create a fresh parsing state object to work with.
96
- * @method newParserState
97
- * @param {Object} pParseTree - A node on the parse tree to begin parsing from (usually root)
98
- * @return {Object} A new parser state object for running a character parser on
99
- * @private
100
- */
101
-
102
-
103
- _createClass(StringParser, [{
104
- key: 'newParserState',
105
- value: function newParserState(pParseTree) {
106
- return {
107
- ParseTree: pParseTree,
108
-
109
- Output: '',
110
- OutputBuffer: '',
111
-
112
- Pattern: false,
113
-
114
- PatternMatch: false,
115
- PatternMatchOutputBuffer: ''
116
- };
117
- }
118
-
119
- /**
120
- * Assign a node of the parser tree to be the next potential match.
121
- * If the node has a PatternEnd property, it is a valid match and supercedes the last valid match (or becomes the initial match).
122
- * @method assignNode
123
- * @param {Object} pNode - A node on the parse tree to assign
124
- * @param {Object} pParserState - The state object for the current parsing task
125
- * @private
126
- */
127
-
128
- }, {
129
- key: 'assignNode',
130
- value: function assignNode(pNode, pParserState) {
131
- pParserState.PatternMatch = pNode;
132
-
133
- // If the pattern has a END we can assume it has a parse function...
134
- if (pParserState.PatternMatch.hasOwnProperty('PatternEnd')) {
135
- // ... this is the legitimate start of a pattern.
136
- pParserState.Pattern = pParserState.PatternMatch;
137
- }
138
- }
139
-
140
- /**
141
- * Append a character to the output buffer in the parser state.
142
- * This output buffer is used when a potential match is being explored, or a match is being explored.
143
- * @method appendOutputBuffer
144
- * @param {string} pCharacter - The character to append
145
- * @param {Object} pParserState - The state object for the current parsing task
146
- * @private
147
- */
148
-
149
- }, {
150
- key: 'appendOutputBuffer',
151
- value: function appendOutputBuffer(pCharacter, pParserState) {
152
- pParserState.OutputBuffer += pCharacter;
153
- }
154
-
155
- /**
156
- * Flush the output buffer to the output and clear it.
157
- * @method flushOutputBuffer
158
- * @param {Object} pParserState - The state object for the current parsing task
159
- * @private
160
- */
161
-
162
- }, {
163
- key: 'flushOutputBuffer',
164
- value: function flushOutputBuffer(pParserState) {
165
- pParserState.Output += pParserState.OutputBuffer;
166
- pParserState.OutputBuffer = '';
167
- }
168
-
169
- /**
170
- * Check if the pattern has ended. If it has, properly flush the buffer and start looking for new patterns.
171
- * @method checkPatternEnd
172
- * @param {Object} pParserState - The state object for the current parsing task
173
- * @private
174
- */
175
-
176
- }, {
177
- key: 'checkPatternEnd',
178
- value: function checkPatternEnd(pParserState) {
179
- if (pParserState.OutputBuffer.length >= pParserState.Pattern.PatternEnd.length + pParserState.Pattern.PatternStart.length && pParserState.OutputBuffer.substr(-pParserState.Pattern.PatternEnd.length) === pParserState.Pattern.PatternEnd) {
180
- // ... this is the end of a pattern, cut off the end tag and parse it.
181
- // Trim the start and end tags off the output buffer now
182
- pParserState.OutputBuffer = pParserState.Pattern.Parse(pParserState.OutputBuffer.substr(pParserState.Pattern.PatternStart.length, pParserState.OutputBuffer.length - (pParserState.Pattern.PatternStart.length + pParserState.Pattern.PatternEnd.length)));
183
- // Flush the output buffer.
184
- this.flushOutputBuffer(pParserState);
185
- // End pattern mode
186
- pParserState.Pattern = false;
187
- pParserState.PatternMatch = false;
188
- }
189
- }
190
-
191
- /**
192
- * Parse a character in the buffer.
193
- * @method parseCharacter
194
- * @param {string} pCharacter - The character to append
195
- * @param {Object} pParserState - The state object for the current parsing task
196
- * @private
197
- */
198
-
199
- }, {
200
- key: 'parseCharacter',
201
- value: function parseCharacter(pCharacter, pParserState) {
202
- // (1) If we aren't in a pattern match, and we aren't potentially matching, and this may be the start of a new pattern....
203
- if (!pParserState.PatternMatch && pParserState.ParseTree.hasOwnProperty(pCharacter)) {
204
- // ... assign the node as the matched node.
205
- this.assignNode(pParserState.ParseTree[pCharacter], pParserState);
206
- this.appendOutputBuffer(pCharacter, pParserState);
207
- }
208
- // (2) If we are in a pattern match (actively seeing if this is part of a new pattern token)
209
- else if (pParserState.PatternMatch) {
210
- // If the pattern has a subpattern with this key
211
- if (pParserState.PatternMatch.hasOwnProperty(pCharacter)) {
212
- // Continue matching patterns.
213
- this.assignNode(pParserState.PatternMatch[pCharacter], pParserState);
214
- }
215
- this.appendOutputBuffer(pCharacter, pParserState);
216
- if (pParserState.Pattern) {
217
- // ... Check if this is the end of the pattern (if we are matching a valid pattern)...
218
- this.checkPatternEnd(pParserState);
219
- }
220
- }
221
- // (3) If we aren't in a pattern match or pattern, and this isn't the start of a new pattern (RAW mode)....
222
- else {
223
- pParserState.Output += pCharacter;
224
- }
225
- }
226
-
227
- /**
228
- * Parse a string for matches, and process any template segments that occur.
229
- * @method parseString
230
- * @param {string} pString - The string to parse.
231
- * @param {Object} pParseTree - The parse tree to begin parsing from (usually root)
232
- */
233
-
234
- }, {
235
- key: 'parseString',
236
- value: function parseString(pString, pParseTree) {
237
- var tmpParserState = this.newParserState(pParseTree);
238
-
239
- for (var i = 0; i < pString.length; i++) {
240
- // TODO: This is not fast.
241
- this.parseCharacter(pString[i], tmpParserState);
242
- }
243
-
244
- this.flushOutputBuffer(tmpParserState);
245
-
246
- return tmpParserState.Output;
247
- }
248
- }]);
249
-
250
- return StringParser;
251
- }();
252
-
253
- module.exports = StringParser;
254
-
255
- },{}],3:[function(require,module,exports){
256
- 'use strict';
257
-
258
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
259
-
260
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
261
-
262
- /**
263
- * Word Tree
264
- *
265
- * @license MIT
266
- *
267
- * @author Steven Velozo <steven@velozo.com>
268
- *
269
- * @description Create a tree (directed graph) of Javascript objects, one character per object.
270
- */
271
-
272
- var WordTree = function () {
273
- /**
274
- * WordTree Constructor
275
- */
276
- function WordTree() {
277
- _classCallCheck(this, WordTree);
278
-
279
- this.ParseTree = {};
280
- }
281
-
282
- /**
283
- * Add a child character to a Parse Tree node
284
- * @method addChild
285
- * @param {Object} pTree - A parse tree to push the characters into
286
- * @param {string} pPattern - The string to add to the tree
287
- * @param {number} pIndex - callback function
288
- * @returns {Object} The resulting leaf node that was added (or found)
289
- * @private
290
- */
291
-
292
-
293
- _createClass(WordTree, [{
294
- key: 'addChild',
295
- value: function addChild(pTree, pPattern, pIndex) {
296
- if (pIndex > pPattern.length) return pTree;
297
-
298
- if (!pTree.hasOwnProperty(pPattern[pIndex])) pTree[pPattern[pIndex]] = {};
299
-
300
- return pTree[pPattern[pIndex]];
301
- }
302
-
303
- /** Add a Pattern to the Parse Tree
304
- * @method addPattern
305
- * @param {Object} pTree - A node on the parse tree to push the characters into
306
- * @param {string} pPattern - The string to add to the tree
307
- * @param {number} pIndex - callback function
308
- * @return {bool} True if adding the pattern was successful
309
- */
310
-
311
- }, {
312
- key: 'addPattern',
313
- value: function addPattern(pPatternStart, pPatternEnd, pParser) {
314
- if (pPatternStart.length < 1) return false;
315
-
316
- var tmpLeaf = this.ParseTree;
317
-
318
- // Add the tree of leaves iteratively
319
- for (var i = 0; i < pPatternStart.length; i++) {
320
- tmpLeaf = this.addChild(tmpLeaf, pPatternStart, i);
321
- }tmpLeaf.PatternStart = pPatternStart;
322
- tmpLeaf.PatternEnd = typeof pPatternEnd === 'string' && pPatternEnd.length > 0 ? pPatternEnd : pPatternStart;
323
- tmpLeaf.Parse = typeof pParser === 'function' ? pParser : typeof pParser === 'string' ? function () {
324
- return pParser;
325
- } : function (pData) {
326
- return pData;
327
- };
328
-
329
- return true;
330
- }
331
- }]);
332
-
333
- return WordTree;
334
- }();
335
-
336
- module.exports = WordTree;
337
-
338
- },{}]},{},[1])
339
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzb3VyY2UvUHJlY2VkZW50LmpzIiwic291cmNlL1N0cmluZ1BhcnNlci5qcyIsInNvdXJjZS9Xb3JkVHJlZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztBQ0FBOzs7Ozs7Ozs7QUFTQSxJQUFJLGNBQWMsd0JBQWxCO0FBQ0EsSUFBSSxrQkFBa0IsNEJBQXRCOztJQUVNLFM7QUFFTDs7O0FBR0Esc0JBQ0E7QUFBQTs7QUFDQyxPQUFLLFFBQUwsR0FBZ0IsSUFBSSxXQUFKLEVBQWhCOztBQUVBLE9BQUssWUFBTCxHQUFvQixJQUFJLGVBQUosRUFBcEI7O0FBRUEsT0FBSyxTQUFMLEdBQWlCLEtBQUssUUFBTCxDQUFjLFNBQS9CO0FBQ0E7O0FBRUQ7Ozs7Ozs7Ozs7Ozs2QkFRVyxhLEVBQWUsVyxFQUFhLE8sRUFDdkM7QUFDQyxVQUFPLEtBQUssUUFBTCxDQUFjLFVBQWQsQ0FBeUIsYUFBekIsRUFBd0MsV0FBeEMsRUFBcUQsT0FBckQsQ0FBUDtBQUNBOztBQUVEOzs7Ozs7Ozs7OEJBTVksTyxFQUNaO0FBQ0MsVUFBTyxLQUFLLFlBQUwsQ0FBa0IsV0FBbEIsQ0FBOEIsT0FBOUIsRUFBdUMsS0FBSyxTQUE1QyxDQUFQO0FBQ0E7Ozs7OztBQUdGLE9BQU8sT0FBUCxHQUFpQixTQUFqQjs7Ozs7Ozs7O0FDbkRBOzs7Ozs7Ozs7O0lBVU0sWTtBQUVMOzs7QUFHQSx5QkFDQTtBQUFBO0FBQ0M7O0FBRUQ7Ozs7Ozs7Ozs7O2lDQU9nQixVLEVBQ2hCO0FBQ0MsVUFDQTtBQUNJLGVBQVcsVUFEZjs7QUFHQyxZQUFRLEVBSFQ7QUFJQyxrQkFBYyxFQUpmOztBQU1DLGFBQVMsS0FOVjs7QUFRQyxrQkFBYyxLQVJmO0FBU0MsOEJBQTBCO0FBVDNCLElBREE7QUFZQTs7QUFFRDs7Ozs7Ozs7Ozs7NkJBUVksSyxFQUFPLFksRUFDbkI7QUFDQyxnQkFBYSxZQUFiLEdBQTRCLEtBQTVCOztBQUVBO0FBQ0EsT0FBSSxhQUFhLFlBQWIsQ0FBMEIsY0FBMUIsQ0FBeUMsWUFBekMsQ0FBSixFQUNBO0FBQ0M7QUFDQSxpQkFBYSxPQUFiLEdBQXVCLGFBQWEsWUFBcEM7QUFDQTtBQUNEOztBQUVEOzs7Ozs7Ozs7OztxQ0FRb0IsVSxFQUFZLFksRUFDaEM7QUFDQyxnQkFBYSxZQUFiLElBQTZCLFVBQTdCO0FBQ0E7O0FBRUQ7Ozs7Ozs7OztvQ0FNbUIsWSxFQUNuQjtBQUNDLGdCQUFhLE1BQWIsSUFBdUIsYUFBYSxZQUFwQztBQUNBLGdCQUFhLFlBQWIsR0FBNEIsRUFBNUI7QUFDQTs7QUFHRDs7Ozs7Ozs7O2tDQU1pQixZLEVBQ2pCO0FBQ0MsT0FBSyxhQUFhLFlBQWIsQ0FBMEIsTUFBMUIsSUFBb0MsYUFBYSxPQUFiLENBQXFCLFVBQXJCLENBQWdDLE1BQWhDLEdBQXVDLGFBQWEsT0FBYixDQUFxQixZQUFyQixDQUFrQyxNQUE5RyxJQUNGLGFBQWEsWUFBYixDQUEwQixNQUExQixDQUFpQyxDQUFDLGFBQWEsT0FBYixDQUFxQixVQUFyQixDQUFnQyxNQUFsRSxNQUE4RSxhQUFhLE9BQWIsQ0FBcUIsVUFEckcsRUFFQTtBQUNDO0FBQ0E7QUFDQSxpQkFBYSxZQUFiLEdBQTRCLGFBQWEsT0FBYixDQUFxQixLQUFyQixDQUEyQixhQUFhLFlBQWIsQ0FBMEIsTUFBMUIsQ0FBaUMsYUFBYSxPQUFiLENBQXFCLFlBQXJCLENBQWtDLE1BQW5FLEVBQTJFLGFBQWEsWUFBYixDQUEwQixNQUExQixJQUFvQyxhQUFhLE9BQWIsQ0FBcUIsWUFBckIsQ0FBa0MsTUFBbEMsR0FBeUMsYUFBYSxPQUFiLENBQXFCLFVBQXJCLENBQWdDLE1BQTdHLENBQTNFLENBQTNCLENBQTVCO0FBQ0E7QUFDQSxTQUFLLGlCQUFMLENBQXVCLFlBQXZCO0FBQ0E7QUFDQSxpQkFBYSxPQUFiLEdBQXVCLEtBQXZCO0FBQ0EsaUJBQWEsWUFBYixHQUE0QixLQUE1QjtBQUNBO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7aUNBT2dCLFUsRUFBWSxZLEVBQzVCO0FBQ0M7QUFDQSxPQUFJLENBQUMsYUFBYSxZQUFkLElBQThCLGFBQWEsU0FBYixDQUF1QixjQUF2QixDQUFzQyxVQUF0QyxDQUFsQyxFQUNBO0FBQ0M7QUFDQSxTQUFLLFVBQUwsQ0FBZ0IsYUFBYSxTQUFiLENBQXVCLFVBQXZCLENBQWhCLEVBQW9ELFlBQXBEO0FBQ0EsU0FBSyxrQkFBTCxDQUF3QixVQUF4QixFQUFvQyxZQUFwQztBQUNBO0FBQ0Q7QUFOQSxRQU9LLElBQUksYUFBYSxZQUFqQixFQUNMO0FBQ0M7QUFDQSxTQUFJLGFBQWEsWUFBYixDQUEwQixjQUExQixDQUF5QyxVQUF6QyxDQUFKLEVBQ0E7QUFDQztBQUNBLFdBQUssVUFBTCxDQUFnQixhQUFhLFlBQWIsQ0FBMEIsVUFBMUIsQ0FBaEIsRUFBdUQsWUFBdkQ7QUFDQTtBQUNELFVBQUssa0JBQUwsQ0FBd0IsVUFBeEIsRUFBb0MsWUFBcEM7QUFDQSxTQUFJLGFBQWEsT0FBakIsRUFDQTtBQUNDO0FBQ0EsV0FBSyxlQUFMLENBQXFCLFlBQXJCO0FBQ0E7QUFDRDtBQUNEO0FBZkssU0FpQkw7QUFDQyxtQkFBYSxNQUFiLElBQXVCLFVBQXZCO0FBQ0E7QUFDRDs7QUFFRDs7Ozs7Ozs7OzhCQU1hLE8sRUFBUyxVLEVBQ3RCO0FBQ0MsT0FBSSxpQkFBaUIsS0FBSyxjQUFMLENBQW9CLFVBQXBCLENBQXJCOztBQUVBLFFBQUssSUFBSSxJQUFJLENBQWIsRUFBZ0IsSUFBSSxRQUFRLE1BQTVCLEVBQW9DLEdBQXBDLEVBQ0E7QUFDQztBQUNBLFNBQUssY0FBTCxDQUFvQixRQUFRLENBQVIsQ0FBcEIsRUFBZ0MsY0FBaEM7QUFDQTs7QUFFRCxRQUFLLGlCQUFMLENBQXVCLGNBQXZCOztBQUVBLFVBQU8sZUFBZSxNQUF0QjtBQUNBOzs7Ozs7QUFHRixPQUFPLE9BQVAsR0FBaUIsWUFBakI7Ozs7Ozs7OztBQzNLQTs7Ozs7Ozs7OztJQVVNLFE7QUFFTDs7O0FBR0EscUJBQ0E7QUFBQTs7QUFDQyxPQUFLLFNBQUwsR0FBaUIsRUFBakI7QUFDQTs7QUFFRDs7Ozs7Ozs7Ozs7OzsyQkFTVSxLLEVBQU8sUSxFQUFVLE0sRUFDM0I7QUFDQyxPQUFJLFNBQVMsU0FBUyxNQUF0QixFQUNDLE9BQU8sS0FBUDs7QUFFRCxPQUFJLENBQUMsTUFBTSxjQUFOLENBQXFCLFNBQVMsTUFBVCxDQUFyQixDQUFMLEVBQ0MsTUFBTSxTQUFTLE1BQVQsQ0FBTixJQUEwQixFQUExQjs7QUFFRCxVQUFPLE1BQU0sU0FBUyxNQUFULENBQU4sQ0FBUDtBQUNBOztBQUVEOzs7Ozs7Ozs7OzZCQU9ZLGEsRUFBZSxXLEVBQWEsTyxFQUN4QztBQUNDLE9BQUksY0FBYyxNQUFkLEdBQXVCLENBQTNCLEVBQ0MsT0FBTyxLQUFQOztBQUVELE9BQUksVUFBVSxLQUFLLFNBQW5COztBQUVBO0FBQ0EsUUFBSyxJQUFJLElBQUksQ0FBYixFQUFnQixJQUFJLGNBQWMsTUFBbEMsRUFBMEMsR0FBMUM7QUFDQyxjQUFVLEtBQUssUUFBTCxDQUFjLE9BQWQsRUFBdUIsYUFBdkIsRUFBc0MsQ0FBdEMsQ0FBVjtBQURELElBR0EsUUFBUSxZQUFSLEdBQXVCLGFBQXZCO0FBQ0EsV0FBUSxVQUFSLEdBQXVCLE9BQU8sV0FBUCxLQUF3QixRQUF6QixJQUF1QyxZQUFZLE1BQVosR0FBcUIsQ0FBN0QsR0FBbUUsV0FBbkUsR0FBaUYsYUFBdEc7QUFDQSxXQUFRLEtBQVIsR0FBaUIsT0FBTyxPQUFQLEtBQW9CLFVBQXJCLEdBQW1DLE9BQW5DLEdBQ1gsT0FBTyxPQUFQLEtBQW9CLFFBQXJCLEdBQWlDLFlBQU07QUFBRSxXQUFPLE9BQVA7QUFBaUIsSUFBMUQsR0FDQSxVQUFDLEtBQUQsRUFBVztBQUFFLFdBQU8sS0FBUDtBQUFlLElBRmhDOztBQUlBLFVBQU8sSUFBUDtBQUNBOzs7Ozs7QUFHRixPQUFPLE9BQVAsR0FBaUIsUUFBakIiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoqXG4qIFByZWNlZGVudCBNZXRhLVRlbXBsYXRpbmdcbipcbiogQGxpY2Vuc2UgICAgIE1JVFxuKlxuKiBAYXV0aG9yICAgICAgU3RldmVuIFZlbG96byA8c3RldmVuQHZlbG96by5jb20+XG4qXG4qIEBkZXNjcmlwdGlvbiBQcm9jZXNzIHRleHQgc3RyZWFtcywgcGFyc2luZyBvdXQgbWV0YS10ZW1wbGF0ZSBleHByZXNzaW9ucy5cbiovXG52YXIgbGliV29yZFRyZWUgPSByZXF1aXJlKGAuL1dvcmRUcmVlLmpzYCk7XG52YXIgbGliU3RyaW5nUGFyc2VyID0gcmVxdWlyZShgLi9TdHJpbmdQYXJzZXIuanNgKTtcblxuY2xhc3MgUHJlY2VkZW50XG57XG5cdC8qKlxuXHQgKiBQcmVjZWRlbnQgQ29uc3RydWN0b3Jcblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHRoaXMuV29yZFRyZWUgPSBuZXcgbGliV29yZFRyZWUoKTtcblx0XHRcblx0XHR0aGlzLlN0cmluZ1BhcnNlciA9IG5ldyBsaWJTdHJpbmdQYXJzZXIoKTtcblxuXHRcdHRoaXMuUGFyc2VUcmVlID0gdGhpcy5Xb3JkVHJlZS5QYXJzZVRyZWU7XG5cdH1cblx0XG5cdC8qKlxuXHQgKiBBZGQgYSBQYXR0ZXJuIHRvIHRoZSBQYXJzZSBUcmVlXG5cdCAqIEBtZXRob2QgYWRkUGF0dGVyblxuXHQgKiBAcGFyYW0ge09iamVjdH0gcFRyZWUgLSBBIG5vZGUgb24gdGhlIHBhcnNlIHRyZWUgdG8gcHVzaCB0aGUgY2hhcmFjdGVycyBpbnRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwUGF0dGVybiAtIFRoZSBzdHJpbmcgdG8gYWRkIHRvIHRoZSB0cmVlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwSW5kZXggLSBjYWxsYmFjayBmdW5jdGlvblxuXHQgKiBAcmV0dXJuIHtib29sfSBUcnVlIGlmIGFkZGluZyB0aGUgcGF0dGVybiB3YXMgc3VjY2Vzc2Z1bFxuXHQgKi9cblx0YWRkUGF0dGVybihwUGF0dGVyblN0YXJ0LCBwUGF0dGVybkVuZCwgcFBhcnNlcilcblx0e1xuXHRcdHJldHVybiB0aGlzLldvcmRUcmVlLmFkZFBhdHRlcm4ocFBhdHRlcm5TdGFydCwgcFBhdHRlcm5FbmQsIHBQYXJzZXIpO1xuXHR9XG5cdFxuXHQvKipcblx0ICogUGFyc2UgYSBzdHJpbmcgd2l0aCB0aGUgZXhpc3RpbmcgcGFyc2UgdHJlZVxuXHQgKiBAbWV0aG9kIHBhcnNlU3RyaW5nXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwU3RyaW5nIC0gVGhlIHN0cmluZyB0byBwYXJzZVxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSByZXN1bHQgZnJvbSB0aGUgcGFyc2VyXG5cdCAqL1xuXHRwYXJzZVN0cmluZyhwU3RyaW5nKVxuXHR7XG5cdFx0cmV0dXJuIHRoaXMuU3RyaW5nUGFyc2VyLnBhcnNlU3RyaW5nKHBTdHJpbmcsIHRoaXMuUGFyc2VUcmVlKTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFByZWNlZGVudDtcbiIsIi8qKlxuKiBTdHJpbmcgUGFyc2VyXG4qXG4qIEBsaWNlbnNlICAgICBNSVRcbipcbiogQGF1dGhvciAgICAgIFN0ZXZlbiBWZWxvem8gPHN0ZXZlbkB2ZWxvem8uY29tPlxuKlxuKiBAZGVzY3JpcHRpb24gUGFyc2UgYSBzdHJpbmcsIHByb3Blcmx5IHByb2Nlc3NpbmcgZWFjaCBtYXRjaGVkIHRva2VuIGluIHRoZSB3b3JkIHRyZWUuXG4qL1xuXG5jbGFzcyBTdHJpbmdQYXJzZXJcbntcblx0LyoqXG5cdCAqIFN0cmluZ1BhcnNlciBDb25zdHJ1Y3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdH1cblx0XG5cdC8qKlxuXHQgKiBDcmVhdGUgYSBmcmVzaCBwYXJzaW5nIHN0YXRlIG9iamVjdCB0byB3b3JrIHdpdGguXG5cdCAqIEBtZXRob2QgbmV3UGFyc2VyU3RhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBQYXJzZVRyZWUgLSBBIG5vZGUgb24gdGhlIHBhcnNlIHRyZWUgdG8gYmVnaW4gcGFyc2luZyBmcm9tICh1c3VhbGx5IHJvb3QpXG5cdCAqIEByZXR1cm4ge09iamVjdH0gQSBuZXcgcGFyc2VyIHN0YXRlIG9iamVjdCBmb3IgcnVubmluZyBhIGNoYXJhY3RlciBwYXJzZXIgb25cblx0ICogQHByaXZhdGVcblx0ICovXG5cdG5ld1BhcnNlclN0YXRlIChwUGFyc2VUcmVlKVxuXHR7XG5cdFx0cmV0dXJuIChcblx0XHR7XG5cdFx0ICAgIFBhcnNlVHJlZTogcFBhcnNlVHJlZSxcblxuXHRcdFx0T3V0cHV0OiAnJyxcblx0XHRcdE91dHB1dEJ1ZmZlcjogJycsXG5cblx0XHRcdFBhdHRlcm46IGZhbHNlLFxuXG5cdFx0XHRQYXR0ZXJuTWF0Y2g6IGZhbHNlLFxuXHRcdFx0UGF0dGVybk1hdGNoT3V0cHV0QnVmZmVyOiAnJ1xuXHRcdH0pO1xuXHR9XG5cdFx0XG5cdC8qKlxuXHQgKiBBc3NpZ24gYSBub2RlIG9mIHRoZSBwYXJzZXIgdHJlZSB0byBiZSB0aGUgbmV4dCBwb3RlbnRpYWwgbWF0Y2guXG5cdCAqIElmIHRoZSBub2RlIGhhcyBhIFBhdHRlcm5FbmQgcHJvcGVydHksIGl0IGlzIGEgdmFsaWQgbWF0Y2ggYW5kIHN1cGVyY2VkZXMgdGhlIGxhc3QgdmFsaWQgbWF0Y2ggKG9yIGJlY29tZXMgdGhlIGluaXRpYWwgbWF0Y2gpLlxuXHQgKiBAbWV0aG9kIGFzc2lnbk5vZGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBOb2RlIC0gQSBub2RlIG9uIHRoZSBwYXJzZSB0cmVlIHRvIGFzc2lnblxuXHQgKiBAcGFyYW0ge09iamVjdH0gcFBhcnNlclN0YXRlIC0gVGhlIHN0YXRlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcGFyc2luZyB0YXNrXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhc3NpZ25Ob2RlIChwTm9kZSwgcFBhcnNlclN0YXRlKVxuXHR7XG5cdFx0cFBhcnNlclN0YXRlLlBhdHRlcm5NYXRjaCA9IHBOb2RlO1xuXG5cdFx0Ly8gSWYgdGhlIHBhdHRlcm4gaGFzIGEgRU5EIHdlIGNhbiBhc3N1bWUgaXQgaGFzIGEgcGFyc2UgZnVuY3Rpb24uLi5cblx0XHRpZiAocFBhcnNlclN0YXRlLlBhdHRlcm5NYXRjaC5oYXNPd25Qcm9wZXJ0eSgnUGF0dGVybkVuZCcpKVxuXHRcdHtcblx0XHRcdC8vIC4uLiB0aGlzIGlzIHRoZSBsZWdpdGltYXRlIHN0YXJ0IG9mIGEgcGF0dGVybi5cblx0XHRcdHBQYXJzZXJTdGF0ZS5QYXR0ZXJuID0gcFBhcnNlclN0YXRlLlBhdHRlcm5NYXRjaDtcblx0XHR9XG5cdH1cblx0XG5cdC8qKlxuXHQgKiBBcHBlbmQgYSBjaGFyYWN0ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgaW4gdGhlIHBhcnNlciBzdGF0ZS5cblx0ICogVGhpcyBvdXRwdXQgYnVmZmVyIGlzIHVzZWQgd2hlbiBhIHBvdGVudGlhbCBtYXRjaCBpcyBiZWluZyBleHBsb3JlZCwgb3IgYSBtYXRjaCBpcyBiZWluZyBleHBsb3JlZC5cblx0ICogQG1ldGhvZCBhcHBlbmRPdXRwdXRCdWZmZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBDaGFyYWN0ZXIgLSBUaGUgY2hhcmFjdGVyIHRvIGFwcGVuZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gcFBhcnNlclN0YXRlIC0gVGhlIHN0YXRlIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgcGFyc2luZyB0YXNrXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhcHBlbmRPdXRwdXRCdWZmZXIgKHBDaGFyYWN0ZXIsIHBQYXJzZXJTdGF0ZSlcblx0e1xuXHRcdHBQYXJzZXJTdGF0ZS5PdXRwdXRCdWZmZXIgKz0gcENoYXJhY3Rlcjtcblx0fVxuXHRcblx0LyoqXG5cdCAqIEZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyIHRvIHRoZSBvdXRwdXQgYW5kIGNsZWFyIGl0LlxuXHQgKiBAbWV0aG9kIGZsdXNoT3V0cHV0QnVmZmVyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwUGFyc2VyU3RhdGUgLSBUaGUgc3RhdGUgb2JqZWN0IGZvciB0aGUgY3VycmVudCBwYXJzaW5nIHRhc2tcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZsdXNoT3V0cHV0QnVmZmVyIChwUGFyc2VyU3RhdGUpXG5cdHtcblx0XHRwUGFyc2VyU3RhdGUuT3V0cHV0ICs9IHBQYXJzZXJTdGF0ZS5PdXRwdXRCdWZmZXI7XG5cdFx0cFBhcnNlclN0YXRlLk91dHB1dEJ1ZmZlciA9ICcnO1xuXHR9XG5cblx0XG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgcGF0dGVybiBoYXMgZW5kZWQuICBJZiBpdCBoYXMsIHByb3Blcmx5IGZsdXNoIHRoZSBidWZmZXIgYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIG5ldyBwYXR0ZXJucy5cblx0ICogQG1ldGhvZCBjaGVja1BhdHRlcm5FbmRcblx0ICogQHBhcmFtIHtPYmplY3R9IHBQYXJzZXJTdGF0ZSAtIFRoZSBzdGF0ZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHBhcnNpbmcgdGFza1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0Y2hlY2tQYXR0ZXJuRW5kIChwUGFyc2VyU3RhdGUpXG5cdHtcblx0XHRpZiAoKHBQYXJzZXJTdGF0ZS5PdXRwdXRCdWZmZXIubGVuZ3RoID49IHBQYXJzZXJTdGF0ZS5QYXR0ZXJuLlBhdHRlcm5FbmQubGVuZ3RoK3BQYXJzZXJTdGF0ZS5QYXR0ZXJuLlBhdHRlcm5TdGFydC5sZW5ndGgpICYmIFxuXHRcdFx0KHBQYXJzZXJTdGF0ZS5PdXRwdXRCdWZmZXIuc3Vic3RyKC1wUGFyc2VyU3RhdGUuUGF0dGVybi5QYXR0ZXJuRW5kLmxlbmd0aCkgPT09IHBQYXJzZXJTdGF0ZS5QYXR0ZXJuLlBhdHRlcm5FbmQpKVxuXHRcdHtcblx0XHRcdC8vIC4uLiB0aGlzIGlzIHRoZSBlbmQgb2YgYSBwYXR0ZXJuLCBjdXQgb2ZmIHRoZSBlbmQgdGFnIGFuZCBwYXJzZSBpdC5cblx0XHRcdC8vIFRyaW0gdGhlIHN0YXJ0IGFuZCBlbmQgdGFncyBvZmYgdGhlIG91dHB1dCBidWZmZXIgbm93XG5cdFx0XHRwUGFyc2VyU3RhdGUuT3V0cHV0QnVmZmVyID0gcFBhcnNlclN0YXRlLlBhdHRlcm4uUGFyc2UocFBhcnNlclN0YXRlLk91dHB1dEJ1ZmZlci5zdWJzdHIocFBhcnNlclN0YXRlLlBhdHRlcm4uUGF0dGVyblN0YXJ0Lmxlbmd0aCwgcFBhcnNlclN0YXRlLk91dHB1dEJ1ZmZlci5sZW5ndGggLSAocFBhcnNlclN0YXRlLlBhdHRlcm4uUGF0dGVyblN0YXJ0Lmxlbmd0aCtwUGFyc2VyU3RhdGUuUGF0dGVybi5QYXR0ZXJuRW5kLmxlbmd0aCkpKTtcblx0XHRcdC8vIEZsdXNoIHRoZSBvdXRwdXQgYnVmZmVyLlxuXHRcdFx0dGhpcy5mbHVzaE91dHB1dEJ1ZmZlcihwUGFyc2VyU3RhdGUpO1xuXHRcdFx0Ly8gRW5kIHBhdHRlcm4gbW9kZVxuXHRcdFx0cFBhcnNlclN0YXRlLlBhdHRlcm4gPSBmYWxzZTtcblx0XHRcdHBQYXJzZXJTdGF0ZS5QYXR0ZXJuTWF0Y2ggPSBmYWxzZTtcblx0XHR9XG5cdH1cblx0XG5cdC8qKlxuXHQgKiBQYXJzZSBhIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLlxuXHQgKiBAbWV0aG9kIHBhcnNlQ2hhcmFjdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwQ2hhcmFjdGVyIC0gVGhlIGNoYXJhY3RlciB0byBhcHBlbmRcblx0ICogQHBhcmFtIHtPYmplY3R9IHBQYXJzZXJTdGF0ZSAtIFRoZSBzdGF0ZSBvYmplY3QgZm9yIHRoZSBjdXJyZW50IHBhcnNpbmcgdGFza1xuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cGFyc2VDaGFyYWN0ZXIgKHBDaGFyYWN0ZXIsIHBQYXJzZXJTdGF0ZSlcblx0e1xuXHRcdC8vICgxKSBJZiB3ZSBhcmVuJ3QgaW4gYSBwYXR0ZXJuIG1hdGNoLCBhbmQgd2UgYXJlbid0IHBvdGVudGlhbGx5IG1hdGNoaW5nLCBhbmQgdGhpcyBtYXkgYmUgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhdHRlcm4uLi4uXG5cdFx0aWYgKCFwUGFyc2VyU3RhdGUuUGF0dGVybk1hdGNoICYmIHBQYXJzZXJTdGF0ZS5QYXJzZVRyZWUuaGFzT3duUHJvcGVydHkocENoYXJhY3RlcikpXG5cdFx0e1xuXHRcdFx0Ly8gLi4uIGFzc2lnbiB0aGUgbm9kZSBhcyB0aGUgbWF0Y2hlZCBub2RlLlxuXHRcdFx0dGhpcy5hc3NpZ25Ob2RlKHBQYXJzZXJTdGF0ZS5QYXJzZVRyZWVbcENoYXJhY3Rlcl0sIHBQYXJzZXJTdGF0ZSk7XG5cdFx0XHR0aGlzLmFwcGVuZE91dHB1dEJ1ZmZlcihwQ2hhcmFjdGVyLCBwUGFyc2VyU3RhdGUpO1xuXHRcdH1cblx0XHQvLyAoMikgSWYgd2UgYXJlIGluIGEgcGF0dGVybiBtYXRjaCAoYWN0aXZlbHkgc2VlaW5nIGlmIHRoaXMgaXMgcGFydCBvZiBhIG5ldyBwYXR0ZXJuIHRva2VuKVxuXHRcdGVsc2UgaWYgKHBQYXJzZXJTdGF0ZS5QYXR0ZXJuTWF0Y2gpXG5cdFx0e1xuXHRcdFx0Ly8gSWYgdGhlIHBhdHRlcm4gaGFzIGEgc3VicGF0dGVybiB3aXRoIHRoaXMga2V5XG5cdFx0XHRpZiAocFBhcnNlclN0YXRlLlBhdHRlcm5NYXRjaC5oYXNPd25Qcm9wZXJ0eShwQ2hhcmFjdGVyKSlcblx0XHRcdHtcblx0XHRcdFx0Ly8gQ29udGludWUgbWF0Y2hpbmcgcGF0dGVybnMuXG5cdFx0XHRcdHRoaXMuYXNzaWduTm9kZShwUGFyc2VyU3RhdGUuUGF0dGVybk1hdGNoW3BDaGFyYWN0ZXJdLCBwUGFyc2VyU3RhdGUpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5hcHBlbmRPdXRwdXRCdWZmZXIocENoYXJhY3RlciwgcFBhcnNlclN0YXRlKTtcblx0XHRcdGlmIChwUGFyc2VyU3RhdGUuUGF0dGVybilcblx0XHRcdHtcblx0XHRcdFx0Ly8gLi4uIENoZWNrIGlmIHRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiAoaWYgd2UgYXJlIG1hdGNoaW5nIGEgdmFsaWQgcGF0dGVybikuLi5cblx0XHRcdFx0dGhpcy5jaGVja1BhdHRlcm5FbmQocFBhcnNlclN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gKDMpIElmIHdlIGFyZW4ndCBpbiBhIHBhdHRlcm4gbWF0Y2ggb3IgcGF0dGVybiwgYW5kIHRoaXMgaXNuJ3QgdGhlIHN0YXJ0IG9mIGEgbmV3IHBhdHRlcm4gKFJBVyBtb2RlKS4uLi5cblx0XHRlbHNlXG5cdFx0e1xuXHRcdFx0cFBhcnNlclN0YXRlLk91dHB1dCArPSBwQ2hhcmFjdGVyO1xuXHRcdH1cblx0fVxuXHRcblx0LyoqXG5cdCAqIFBhcnNlIGEgc3RyaW5nIGZvciBtYXRjaGVzLCBhbmQgcHJvY2VzcyBhbnkgdGVtcGxhdGUgc2VnbWVudHMgdGhhdCBvY2N1ci5cblx0ICogQG1ldGhvZCBwYXJzZVN0cmluZ1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcFN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwUGFyc2VUcmVlIC0gVGhlIHBhcnNlIHRyZWUgdG8gYmVnaW4gcGFyc2luZyBmcm9tICh1c3VhbGx5IHJvb3QpXG5cdCAqL1xuXHRwYXJzZVN0cmluZyAocFN0cmluZywgcFBhcnNlVHJlZSlcblx0e1xuXHRcdGxldCB0bXBQYXJzZXJTdGF0ZSA9IHRoaXMubmV3UGFyc2VyU3RhdGUocFBhcnNlVHJlZSk7XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHBTdHJpbmcubGVuZ3RoOyBpKyspXG5cdFx0e1xuXHRcdFx0Ly8gVE9ETzogVGhpcyBpcyBub3QgZmFzdC5cblx0XHRcdHRoaXMucGFyc2VDaGFyYWN0ZXIocFN0cmluZ1tpXSwgdG1wUGFyc2VyU3RhdGUpO1xuXHRcdH1cblx0XHRcblx0XHR0aGlzLmZsdXNoT3V0cHV0QnVmZmVyKHRtcFBhcnNlclN0YXRlKTtcblx0XHRcblx0XHRyZXR1cm4gdG1wUGFyc2VyU3RhdGUuT3V0cHV0O1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nUGFyc2VyO1xuIiwiLyoqXG4qIFdvcmQgVHJlZVxuKlxuKiBAbGljZW5zZSAgICAgTUlUXG4qXG4qIEBhdXRob3IgICAgICBTdGV2ZW4gVmVsb3pvIDxzdGV2ZW5AdmVsb3pvLmNvbT5cbipcbiogQGRlc2NyaXB0aW9uIENyZWF0ZSBhIHRyZWUgKGRpcmVjdGVkIGdyYXBoKSBvZiBKYXZhc2NyaXB0IG9iamVjdHMsIG9uZSBjaGFyYWN0ZXIgcGVyIG9iamVjdC5cbiovXG5cbmNsYXNzIFdvcmRUcmVlXG57XG5cdC8qKlxuXHQgKiBXb3JkVHJlZSBDb25zdHJ1Y3RvclxuXHQgKi9cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0dGhpcy5QYXJzZVRyZWUgPSB7fTtcblx0fVxuXHRcblx0LyoqIFxuXHQgKiBBZGQgYSBjaGlsZCBjaGFyYWN0ZXIgdG8gYSBQYXJzZSBUcmVlIG5vZGVcblx0ICogQG1ldGhvZCBhZGRDaGlsZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gcFRyZWUgLSBBIHBhcnNlIHRyZWUgdG8gcHVzaCB0aGUgY2hhcmFjdGVycyBpbnRvXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwUGF0dGVybiAtIFRoZSBzdHJpbmcgdG8gYWRkIHRvIHRoZSB0cmVlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwSW5kZXggLSBjYWxsYmFjayBmdW5jdGlvblxuXHQgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIGxlYWYgbm9kZSB0aGF0IHdhcyBhZGRlZCAob3IgZm91bmQpXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRhZGRDaGlsZCAocFRyZWUsIHBQYXR0ZXJuLCBwSW5kZXgpXG5cdHtcblx0XHRpZiAocEluZGV4ID4gcFBhdHRlcm4ubGVuZ3RoKVxuXHRcdFx0cmV0dXJuIHBUcmVlO1xuXHRcdFxuXHRcdGlmICghcFRyZWUuaGFzT3duUHJvcGVydHkocFBhdHRlcm5bcEluZGV4XSkpXG5cdFx0XHRwVHJlZVtwUGF0dGVybltwSW5kZXhdXSA9IHt9O1xuXHRcdFxuXHRcdHJldHVybiBwVHJlZVtwUGF0dGVybltwSW5kZXhdXTtcblx0fVxuXHRcblx0LyoqIEFkZCBhIFBhdHRlcm4gdG8gdGhlIFBhcnNlIFRyZWVcblx0ICogQG1ldGhvZCBhZGRQYXR0ZXJuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwVHJlZSAtIEEgbm9kZSBvbiB0aGUgcGFyc2UgdHJlZSB0byBwdXNoIHRoZSBjaGFyYWN0ZXJzIGludG9cblx0ICogQHBhcmFtIHtzdHJpbmd9IHBQYXR0ZXJuIC0gVGhlIHN0cmluZyB0byBhZGQgdG8gdGhlIHRyZWVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHBJbmRleCAtIGNhbGxiYWNrIGZ1bmN0aW9uXG5cdCAqIEByZXR1cm4ge2Jvb2x9IFRydWUgaWYgYWRkaW5nIHRoZSBwYXR0ZXJuIHdhcyBzdWNjZXNzZnVsXG5cdCAqL1xuXHRhZGRQYXR0ZXJuIChwUGF0dGVyblN0YXJ0LCBwUGF0dGVybkVuZCwgcFBhcnNlcilcblx0e1xuXHRcdGlmIChwUGF0dGVyblN0YXJ0Lmxlbmd0aCA8IDEpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRsZXQgdG1wTGVhZiA9IHRoaXMuUGFyc2VUcmVlO1xuXG5cdFx0Ly8gQWRkIHRoZSB0cmVlIG9mIGxlYXZlcyBpdGVyYXRpdmVseVxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgcFBhdHRlcm5TdGFydC5sZW5ndGg7IGkrKylcblx0XHRcdHRtcExlYWYgPSB0aGlzLmFkZENoaWxkKHRtcExlYWYsIHBQYXR0ZXJuU3RhcnQsIGkpO1xuXG5cdFx0dG1wTGVhZi5QYXR0ZXJuU3RhcnQgPSBwUGF0dGVyblN0YXJ0O1xuXHRcdHRtcExlYWYuUGF0dGVybkVuZCA9ICgodHlwZW9mKHBQYXR0ZXJuRW5kKSA9PT0gJ3N0cmluZycpICYmIChwUGF0dGVybkVuZC5sZW5ndGggPiAwKSkgPyBwUGF0dGVybkVuZCA6IHBQYXR0ZXJuU3RhcnQ7XG5cdFx0dG1wTGVhZi5QYXJzZSA9ICh0eXBlb2YocFBhcnNlcikgPT09ICdmdW5jdGlvbicpID8gcFBhcnNlciA6IFxuXHRcdFx0XHRcdFx0KHR5cGVvZihwUGFyc2VyKSA9PT0gJ3N0cmluZycpID8gKCkgPT4geyByZXR1cm4gcFBhcnNlcjsgfSA6XG5cdFx0XHRcdFx0XHQocERhdGEpID0+IHsgcmV0dXJuIHBEYXRhOyB9O1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBXb3JkVHJlZTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- !function t(e,r,n){function a(i,f){if(!r[i]){if(!e[i]){var o="function"==typeof require&&require;if(!f&&o)return o(i,!0);if(u)return u(i,!0);var s=new Error("Cannot find module '"+i+"'");throw s.code="MODULE_NOT_FOUND",s}var c=r[i]={exports:{}};e[i][0].call(c.exports,function(t){var r=e[i][1][t];return a(r||t)},c,c.exports,t,e,r,n)}return r[i].exports}for(var u="function"==typeof require&&require,i=0;i<n.length;i++)a(n[i]);return a}({1:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=t("./WordTree.js"),i=t("./StringParser.js"),f=function(){function t(){n(this,t),this.WordTree=new u,this.StringParser=new i,this.ParseTree=this.WordTree.ParseTree}return a(t,[{key:"addPattern",value:function(t,e,r){return this.WordTree.addPattern(t,e,r)}},{key:"parseString",value:function(t){return this.StringParser.parseString(t,this.ParseTree)}}]),t}();e.exports=f},{"./StringParser.js":2,"./WordTree.js":3}],2:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=function(){function t(){n(this,t)}return a(t,[{key:"newParserState",value:function(t){return{ParseTree:t,Output:"",OutputBuffer:"",Pattern:!1,PatternMatch:!1,PatternMatchOutputBuffer:""}}},{key:"assignNode",value:function(t,e){e.PatternMatch=t,e.PatternMatch.hasOwnProperty("PatternEnd")&&(e.Pattern=e.PatternMatch)}},{key:"appendOutputBuffer",value:function(t,e){e.OutputBuffer+=t}},{key:"flushOutputBuffer",value:function(t){t.Output+=t.OutputBuffer,t.OutputBuffer=""}},{key:"checkPatternEnd",value:function(t){t.OutputBuffer.length>=t.Pattern.PatternEnd.length+t.Pattern.PatternStart.length&&t.OutputBuffer.substr(-t.Pattern.PatternEnd.length)===t.Pattern.PatternEnd&&(t.OutputBuffer=t.Pattern.Parse(t.OutputBuffer.substr(t.Pattern.PatternStart.length,t.OutputBuffer.length-(t.Pattern.PatternStart.length+t.Pattern.PatternEnd.length))),this.flushOutputBuffer(t),t.Pattern=!1,t.PatternMatch=!1)}},{key:"parseCharacter",value:function(t,e){!e.PatternMatch&&e.ParseTree.hasOwnProperty(t)?(this.assignNode(e.ParseTree[t],e),this.appendOutputBuffer(t,e)):e.PatternMatch?(e.PatternMatch.hasOwnProperty(t)&&this.assignNode(e.PatternMatch[t],e),this.appendOutputBuffer(t,e),e.Pattern&&this.checkPatternEnd(e)):e.Output+=t}},{key:"parseString",value:function(t,e){for(var r=this.newParserState(e),n=0;n<t.length;n++)this.parseCharacter(t[n],r);return this.flushOutputBuffer(r),r.Output}}]),t}();e.exports=u},{}],3:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=function(){function t(){n(this,t),this.ParseTree={}}return a(t,[{key:"addChild",value:function(t,e,r){return r>e.length?t:(t.hasOwnProperty(e[r])||(t[e[r]]={}),t[e[r]])}},{key:"addPattern",value:function(t,e,r){if(t.length<1)return!1;for(var n=this.ParseTree,a=0;a<t.length;a++)n=this.addChild(n,t,a);return n.PatternStart=t,n.PatternEnd="string"==typeof e&&e.length>0?e:t,n.Parse="function"==typeof r?r:"string"==typeof r?function(){return r}:function(t){return t},!0}}]),t}();e.exports=u},{}]},{},[1]);
2
- //# sourceMappingURL=precedent.1.0.5.min.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["precedent.1.0.5.min.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","libWordTree","libStringParser","Precedent","this","WordTree","StringParser","ParseTree","value","pPatternStart","pPatternEnd","pParser","addPattern","pString","parseString","./StringParser.js","./WordTree.js","2","pParseTree","Output","OutputBuffer","Pattern","PatternMatch","PatternMatchOutputBuffer","pNode","pParserState","hasOwnProperty","pCharacter","PatternEnd","PatternStart","substr","Parse","flushOutputBuffer","assignNode","appendOutputBuffer","checkPatternEnd","tmpParserState","newParserState","parseCharacter","3","pTree","pPattern","pIndex","tmpLeaf","addChild","pData"],"mappings":"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","file":"precedent.1.0.5.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n* Precedent Meta-Templating\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n*\n* @description Process text streams, parsing out meta-template expressions.\n*/\nvar libWordTree = require(\"./WordTree.js\");\nvar libStringParser = require(\"./StringParser.js\");\n\nvar Precedent = function () {\n\t/**\n * Precedent Constructor\n */\n\tfunction Precedent() {\n\t\t_classCallCheck(this, Precedent);\n\n\t\tthis.WordTree = new libWordTree();\n\n\t\tthis.StringParser = new libStringParser();\n\n\t\tthis.ParseTree = this.WordTree.ParseTree;\n\t}\n\n\t/**\n * Add a Pattern to the Parse Tree\n * @method addPattern\n * @param {Object} pTree - A node on the parse tree to push the characters into\n * @param {string} pPattern - The string to add to the tree\n * @param {number} pIndex - callback function\n * @return {bool} True if adding the pattern was successful\n */\n\n\n\t_createClass(Precedent, [{\n\t\tkey: \"addPattern\",\n\t\tvalue: function addPattern(pPatternStart, pPatternEnd, pParser) {\n\t\t\treturn this.WordTree.addPattern(pPatternStart, pPatternEnd, pParser);\n\t\t}\n\n\t\t/**\n * Parse a string with the existing parse tree\n * @method parseString\n * @param {string} pString - The string to parse\n * @return {string} The result from the parser\n */\n\n\t}, {\n\t\tkey: \"parseString\",\n\t\tvalue: function parseString(pString) {\n\t\t\treturn this.StringParser.parseString(pString, this.ParseTree);\n\t\t}\n\t}]);\n\n\treturn Precedent;\n}();\n\nmodule.exports = Precedent;\n\n},{\"./StringParser.js\":2,\"./WordTree.js\":3}],2:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n* String Parser\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n*\n* @description Parse a string, properly processing each matched token in the word tree.\n*/\n\nvar StringParser = function () {\n\t/**\n * StringParser Constructor\n */\n\tfunction StringParser() {\n\t\t_classCallCheck(this, StringParser);\n\t}\n\n\t/**\n * Create a fresh parsing state object to work with.\n * @method newParserState\n * @param {Object} pParseTree - A node on the parse tree to begin parsing from (usually root)\n * @return {Object} A new parser state object for running a character parser on\n * @private\n */\n\n\n\t_createClass(StringParser, [{\n\t\tkey: 'newParserState',\n\t\tvalue: function newParserState(pParseTree) {\n\t\t\treturn {\n\t\t\t\tParseTree: pParseTree,\n\n\t\t\t\tOutput: '',\n\t\t\t\tOutputBuffer: '',\n\n\t\t\t\tPattern: false,\n\n\t\t\t\tPatternMatch: false,\n\t\t\t\tPatternMatchOutputBuffer: ''\n\t\t\t};\n\t\t}\n\n\t\t/**\n * Assign a node of the parser tree to be the next potential match.\n * If the node has a PatternEnd property, it is a valid match and supercedes the last valid match (or becomes the initial match).\n * @method assignNode\n * @param {Object} pNode - A node on the parse tree to assign\n * @param {Object} pParserState - The state object for the current parsing task\n * @private\n */\n\n\t}, {\n\t\tkey: 'assignNode',\n\t\tvalue: function assignNode(pNode, pParserState) {\n\t\t\tpParserState.PatternMatch = pNode;\n\n\t\t\t// If the pattern has a END we can assume it has a parse function...\n\t\t\tif (pParserState.PatternMatch.hasOwnProperty('PatternEnd')) {\n\t\t\t\t// ... this is the legitimate start of a pattern.\n\t\t\t\tpParserState.Pattern = pParserState.PatternMatch;\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Append a character to the output buffer in the parser state.\n * This output buffer is used when a potential match is being explored, or a match is being explored.\n * @method appendOutputBuffer\n * @param {string} pCharacter - The character to append\n * @param {Object} pParserState - The state object for the current parsing task\n * @private\n */\n\n\t}, {\n\t\tkey: 'appendOutputBuffer',\n\t\tvalue: function appendOutputBuffer(pCharacter, pParserState) {\n\t\t\tpParserState.OutputBuffer += pCharacter;\n\t\t}\n\n\t\t/**\n * Flush the output buffer to the output and clear it.\n * @method flushOutputBuffer\n * @param {Object} pParserState - The state object for the current parsing task\n * @private\n */\n\n\t}, {\n\t\tkey: 'flushOutputBuffer',\n\t\tvalue: function flushOutputBuffer(pParserState) {\n\t\t\tpParserState.Output += pParserState.OutputBuffer;\n\t\t\tpParserState.OutputBuffer = '';\n\t\t}\n\n\t\t/**\n * Check if the pattern has ended. If it has, properly flush the buffer and start looking for new patterns.\n * @method checkPatternEnd\n * @param {Object} pParserState - The state object for the current parsing task\n * @private\n */\n\n\t}, {\n\t\tkey: 'checkPatternEnd',\n\t\tvalue: function checkPatternEnd(pParserState) {\n\t\t\tif (pParserState.OutputBuffer.length >= pParserState.Pattern.PatternEnd.length + pParserState.Pattern.PatternStart.length && pParserState.OutputBuffer.substr(-pParserState.Pattern.PatternEnd.length) === pParserState.Pattern.PatternEnd) {\n\t\t\t\t// ... this is the end of a pattern, cut off the end tag and parse it.\n\t\t\t\t// Trim the start and end tags off the output buffer now\n\t\t\t\tpParserState.OutputBuffer = pParserState.Pattern.Parse(pParserState.OutputBuffer.substr(pParserState.Pattern.PatternStart.length, pParserState.OutputBuffer.length - (pParserState.Pattern.PatternStart.length + pParserState.Pattern.PatternEnd.length)));\n\t\t\t\t// Flush the output buffer.\n\t\t\t\tthis.flushOutputBuffer(pParserState);\n\t\t\t\t// End pattern mode\n\t\t\t\tpParserState.Pattern = false;\n\t\t\t\tpParserState.PatternMatch = false;\n\t\t\t}\n\t\t}\n\n\t\t/**\n * Parse a character in the buffer.\n * @method parseCharacter\n * @param {string} pCharacter - The character to append\n * @param {Object} pParserState - The state object for the current parsing task\n * @private\n */\n\n\t}, {\n\t\tkey: 'parseCharacter',\n\t\tvalue: function parseCharacter(pCharacter, pParserState) {\n\t\t\t// (1) If we aren't in a pattern match, and we aren't potentially matching, and this may be the start of a new pattern....\n\t\t\tif (!pParserState.PatternMatch && pParserState.ParseTree.hasOwnProperty(pCharacter)) {\n\t\t\t\t// ... assign the node as the matched node.\n\t\t\t\tthis.assignNode(pParserState.ParseTree[pCharacter], pParserState);\n\t\t\t\tthis.appendOutputBuffer(pCharacter, pParserState);\n\t\t\t}\n\t\t\t// (2) If we are in a pattern match (actively seeing if this is part of a new pattern token)\n\t\t\telse if (pParserState.PatternMatch) {\n\t\t\t\t\t// If the pattern has a subpattern with this key\n\t\t\t\t\tif (pParserState.PatternMatch.hasOwnProperty(pCharacter)) {\n\t\t\t\t\t\t// Continue matching patterns.\n\t\t\t\t\t\tthis.assignNode(pParserState.PatternMatch[pCharacter], pParserState);\n\t\t\t\t\t}\n\t\t\t\t\tthis.appendOutputBuffer(pCharacter, pParserState);\n\t\t\t\t\tif (pParserState.Pattern) {\n\t\t\t\t\t\t// ... Check if this is the end of the pattern (if we are matching a valid pattern)...\n\t\t\t\t\t\tthis.checkPatternEnd(pParserState);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// (3) If we aren't in a pattern match or pattern, and this isn't the start of a new pattern (RAW mode)....\n\t\t\t\telse {\n\t\t\t\t\t\tpParserState.Output += pCharacter;\n\t\t\t\t\t}\n\t\t}\n\n\t\t/**\n * Parse a string for matches, and process any template segments that occur.\n * @method parseString\n * @param {string} pString - The string to parse.\n * @param {Object} pParseTree - The parse tree to begin parsing from (usually root)\n */\n\n\t}, {\n\t\tkey: 'parseString',\n\t\tvalue: function parseString(pString, pParseTree) {\n\t\t\tvar tmpParserState = this.newParserState(pParseTree);\n\n\t\t\tfor (var i = 0; i < pString.length; i++) {\n\t\t\t\t// TODO: This is not fast.\n\t\t\t\tthis.parseCharacter(pString[i], tmpParserState);\n\t\t\t}\n\n\t\t\tthis.flushOutputBuffer(tmpParserState);\n\n\t\t\treturn tmpParserState.Output;\n\t\t}\n\t}]);\n\n\treturn StringParser;\n}();\n\nmodule.exports = StringParser;\n\n},{}],3:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n* Word Tree\n*\n* @license MIT\n*\n* @author Steven Velozo <steven@velozo.com>\n*\n* @description Create a tree (directed graph) of Javascript objects, one character per object.\n*/\n\nvar WordTree = function () {\n\t/**\n * WordTree Constructor\n */\n\tfunction WordTree() {\n\t\t_classCallCheck(this, WordTree);\n\n\t\tthis.ParseTree = {};\n\t}\n\n\t/** \n * Add a child character to a Parse Tree node\n * @method addChild\n * @param {Object} pTree - A parse tree to push the characters into\n * @param {string} pPattern - The string to add to the tree\n * @param {number} pIndex - callback function\n * @returns {Object} The resulting leaf node that was added (or found)\n * @private\n */\n\n\n\t_createClass(WordTree, [{\n\t\tkey: 'addChild',\n\t\tvalue: function addChild(pTree, pPattern, pIndex) {\n\t\t\tif (pIndex > pPattern.length) return pTree;\n\n\t\t\tif (!pTree.hasOwnProperty(pPattern[pIndex])) pTree[pPattern[pIndex]] = {};\n\n\t\t\treturn pTree[pPattern[pIndex]];\n\t\t}\n\n\t\t/** Add a Pattern to the Parse Tree\n * @method addPattern\n * @param {Object} pTree - A node on the parse tree to push the characters into\n * @param {string} pPattern - The string to add to the tree\n * @param {number} pIndex - callback function\n * @return {bool} True if adding the pattern was successful\n */\n\n\t}, {\n\t\tkey: 'addPattern',\n\t\tvalue: function addPattern(pPatternStart, pPatternEnd, pParser) {\n\t\t\tif (pPatternStart.length < 1) return false;\n\n\t\t\tvar tmpLeaf = this.ParseTree;\n\n\t\t\t// Add the tree of leaves iteratively\n\t\t\tfor (var i = 0; i < pPatternStart.length; i++) {\n\t\t\t\ttmpLeaf = this.addChild(tmpLeaf, pPatternStart, i);\n\t\t\t}tmpLeaf.PatternStart = pPatternStart;\n\t\t\ttmpLeaf.PatternEnd = typeof pPatternEnd === 'string' && pPatternEnd.length > 0 ? pPatternEnd : pPatternStart;\n\t\t\ttmpLeaf.Parse = typeof pParser === 'function' ? pParser : typeof pParser === 'string' ? function () {\n\t\t\t\treturn pParser;\n\t\t\t} : function (pData) {\n\t\t\t\treturn pData;\n\t\t\t};\n\n\t\t\treturn true;\n\t\t}\n\t}]);\n\n\treturn WordTree;\n}();\n\nmodule.exports = WordTree;\n\n},{}]},{},[1]);\n"]}
@@ -1,2 +0,0 @@
1
- !function t(e,r,n){function a(i,f){if(!r[i]){if(!e[i]){var o="function"==typeof require&&require;if(!f&&o)return o(i,!0);if(u)return u(i,!0);var s=new Error("Cannot find module '"+i+"'");throw s.code="MODULE_NOT_FOUND",s}var c=r[i]={exports:{}};e[i][0].call(c.exports,function(t){var r=e[i][1][t];return a(r||t)},c,c.exports,t,e,r,n)}return r[i].exports}for(var u="function"==typeof require&&require,i=0;i<n.length;i++)a(n[i]);return a}({1:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=t("./WordTree.js"),i=t("./StringParser.js"),f=function(){function t(){n(this,t),this.WordTree=new u,this.StringParser=new i,this.ParseTree=this.WordTree.ParseTree}return a(t,[{key:"addPattern",value:function(t,e,r){return this.WordTree.addPattern(t,e,r)}},{key:"parseString",value:function(t){return this.StringParser.parseString(t,this.ParseTree)}}]),t}();e.exports=f},{"./StringParser.js":2,"./WordTree.js":3}],2:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=function(){function t(){n(this,t)}return a(t,[{key:"newParserState",value:function(t){return{ParseTree:t,Output:"",OutputBuffer:"",Pattern:!1,PatternMatch:!1,PatternMatchOutputBuffer:""}}},{key:"assignNode",value:function(t,e){e.PatternMatch=t,e.PatternMatch.hasOwnProperty("PatternEnd")&&(e.Pattern=e.PatternMatch)}},{key:"appendOutputBuffer",value:function(t,e){e.OutputBuffer+=t}},{key:"flushOutputBuffer",value:function(t){t.Output+=t.OutputBuffer,t.OutputBuffer=""}},{key:"checkPatternEnd",value:function(t){t.OutputBuffer.length>=t.Pattern.PatternEnd.length+t.Pattern.PatternStart.length&&t.OutputBuffer.substr(-t.Pattern.PatternEnd.length)===t.Pattern.PatternEnd&&(t.OutputBuffer=t.Pattern.Parse(t.OutputBuffer.substr(t.Pattern.PatternStart.length,t.OutputBuffer.length-(t.Pattern.PatternStart.length+t.Pattern.PatternEnd.length))),this.flushOutputBuffer(t),t.Pattern=!1,t.PatternMatch=!1)}},{key:"parseCharacter",value:function(t,e){!e.PatternMatch&&e.ParseTree.hasOwnProperty(t)?(this.assignNode(e.ParseTree[t],e),this.appendOutputBuffer(t,e)):e.PatternMatch?(e.PatternMatch.hasOwnProperty(t)&&this.assignNode(e.PatternMatch[t],e),this.appendOutputBuffer(t,e),e.Pattern&&this.checkPatternEnd(e)):e.Output+=t}},{key:"parseString",value:function(t,e){for(var r=this.newParserState(e),n=0;n<t.length;n++)this.parseCharacter(t[n],r);return this.flushOutputBuffer(r),r.Output}}]),t}();e.exports=u},{}],3:[function(t,e,r){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var a=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}(),u=function(){function t(){n(this,t),this.ParseTree={}}return a(t,[{key:"addChild",value:function(t,e,r){return r>e.length?t:(t.hasOwnProperty(e[r])||(t[e[r]]={}),t[e[r]])}},{key:"addPattern",value:function(t,e,r){if(t.length<1)return!1;for(var n=this.ParseTree,a=0;a<t.length;a++)n=this.addChild(n,t,a);return n.PatternStart=t,n.PatternEnd="string"==typeof e&&e.length>0?e:t,n.Parse="function"==typeof r?r:"string"==typeof r?function(){return r}:function(t){return t},!0}}]),t}();e.exports=u},{}]},{},[1]);
2
- //# sourceMappingURL=precedent.1.0.5.min.js.map