-
Notifications
You must be signed in to change notification settings - Fork 10
/
xml2instructions.js
97 lines (78 loc) · 2.95 KB
/
xml2instructions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
(function (module) {
var lid = 0;
function new_id() {
return lid++;
}
function node(template_id, parent_id, n, emit) {
function attribute(name, value, parent_id) {
if (value.indexOf('{{') != -1) {
var chunks = value.split('{{');
chunks[0].length && emit('attr', template_id, parent_id, name, ['C', chunks[0]]);
for (var i = 1, l = chunks.length, c = chunks[1]; i < l; i++, c = chunks[i]) {
var _ = c.split('}}', 2);
var key = _[0], text = _[1];
emit('attr', template_id, parent_id, name, ['V', key]);
text.length && emit('attr', template_id, parent_id, name, ['C', text]);
}
} else {
emit('attr', template_id, parent_id, name, ['C', value]);
}
}
function string(value) {
if (value.indexOf('{{') != -1) {
var chunks = value.split('{{');
chunks[0].length && emit('text', template_id, parent_id, ['C', chunks[0]]);
for (var i = 1, l = chunks.length, c = chunks[1]; i < l; i++, c = chunks[i]) {
var _ = c.split('}}', 2);
var key = _[0], text = _[1];
emit('text', template_id, parent_id, ['V', key]);
text.length && emit('text', template_id, parent_id, ['C', text]);
}
} else {
emit('text', template_id, parent_id, ['C', value]);
}
}
switch (n.nodeType) {
case 9: // Document
node(template_id, parent_id, n.firstChild, emit);
emit('stop', template_id);
break;
case 3: //Text
string(n.nodeValue);
break;
case 1: //Element
if (n.tagName == 'forall' || n.tagName == 'if') {
var new_template_id = template_id + '_' + n.tagName + '_' + new_id();
if (n.hasAttribute('name')) {
new_template_id = n.getAttribute('name');
}
emit(n.tagName, template_id, parent_id, n.getAttribute('key'), new_template_id);
for (var i = 0, child = n.childNodes, l = n.childNodes.length; i < l; i++) {
node(new_template_id, 'root', child[i], emit);
}
emit('stop', new_template_id);
} else if(n.tagName == 'include') {
emit(n.tagName, template_id, parent_id, n.getAttribute('key'), n.getAttribute('name'));
} else {
var node_id = 'n' + new_id();
emit('node', template_id, n.tagName, node_id);
if (n.attributes) {
for (var a = n.attributes, i = 0, l = n.attributes.length; i < l; i++) {
attribute(a[i].name, a[i].value, node_id);
}
}
if (n.childNodes) {
for (var i = 0, c = n.childNodes, l = n.childNodes.length; i < l; i++) {
node(template_id, node_id, c[i], emit);
}
}
emit('link', template_id, parent_id, node_id);
break;
}
default:
//console.log('||nodeType=>' + n.nodeType);
break;
}
}
module.exports = node;
})(module);