1 | var build,
|
2 | cache,
|
3 | definition,
|
4 | fs = require('fs'),
|
5 | _ = require('underscore'),
|
6 | pegjs = require('pegjs');
|
7 |
|
8 | definition = fs.readFileSync('./definitions/message.pegjs', 'utf8');
|
9 |
|
10 | build = function(options) {
|
11 | return pegjs.buildParser(_.template(definition, options));
|
12 | };
|
13 |
|
14 | cache = {};
|
15 |
|
16 | module.exports = {
|
17 | parse: function(s) {
|
18 | var components, control_characters, escape, fields, message, repeat, subcomponents, _ref;
|
19 |
|
20 | control_characters = s.substring(3, 8);
|
21 | _ref = control_characters.split(''), fields = _ref[0], components = _ref[1], repeat = _ref[2], escape = _ref[3], subcomponents = _ref[4];
|
22 | if (!cache[control_characters]) {
|
23 | cache[control_characters] = build({
|
24 | fields: fields,
|
25 | components: components,
|
26 | repeat: repeat,
|
27 | escape: escape,
|
28 | subcomponents: subcomponents
|
29 | });
|
30 | }
|
31 | message = cache[control_characters].parse(s);
|
32 | return {
|
33 | control_characters: {
|
34 | fields: fields,
|
35 | components: components,
|
36 | repeat: repeat,
|
37 | escape: escape,
|
38 | subcomponents: subcomponents
|
39 | },
|
40 | message: message
|
41 | };
|
42 | }
|
43 | };
|