1 | "use strict";
|
2 |
|
3 | var SEPARATORS = require("./separators");
|
4 |
|
5 | function parseTrie(input) {
|
6 | var map = new Map();
|
7 | var parentMaps = [map];
|
8 | var domain = "";
|
9 |
|
10 | function setDomain(value) {
|
11 | if (domain === "") {
|
12 | return;
|
13 | }
|
14 |
|
15 | map.set(domain, value);
|
16 | domain = "";
|
17 | }
|
18 |
|
19 | for (var i = 0; i < input.length; i++) {
|
20 | var _char = input.charAt(i);
|
21 |
|
22 | switch (_char) {
|
23 | case SEPARATORS.SAME:
|
24 | {
|
25 | setDomain(true);
|
26 | continue;
|
27 | }
|
28 |
|
29 | case SEPARATORS.DOWN:
|
30 | {
|
31 | var childMap = new Map();
|
32 | setDomain(childMap);
|
33 | parentMaps.push(map);
|
34 | map = childMap;
|
35 | continue;
|
36 | }
|
37 |
|
38 | case SEPARATORS.RESET:
|
39 | {
|
40 | setDomain(true);
|
41 |
|
42 | parentMaps.length = 1;
|
43 | map = parentMaps[0];
|
44 | continue;
|
45 | }
|
46 |
|
47 | case SEPARATORS.UP:
|
48 | {
|
49 | setDomain(true);
|
50 | map = parentMaps.pop();
|
51 | continue;
|
52 | }
|
53 | }
|
54 |
|
55 | domain += _char;
|
56 | }
|
57 |
|
58 | setDomain(true);
|
59 | return parentMaps[0];
|
60 | }
|
61 |
|
62 | module.exports = parseTrie; |
\ | No newline at end of file |