Skip to content

Commit 5651843

Browse files
committed
Add comments support in HTM
developit/htm#84
1 parent 600b330 commit 5651843

1 file changed

Lines changed: 46 additions & 26 deletions

File tree

packages/sinuous/htm/src/build.js

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ const MODE_SLASH = 0;
44
const MODE_TEXT = 1;
55
const MODE_WHITESPACE = 2;
66
const MODE_TAGNAME = 3;
7-
const MODE_PROP_SET = 4;
8-
const MODE_PROP_APPEND = 5;
7+
const MODE_COMMENT = 4;
8+
const MODE_PROP_SET = 5;
9+
const MODE_PROP_APPEND = 6;
910

1011
const TAG_SET = 1;
1112
const CHILD_APPEND = 0;
@@ -72,22 +73,23 @@ export const treeify = (built, fields) => {
7273

7374
export const evaluate = (h, built, fields, args) => {
7475
for (let i = 1; i < built.length; i++) {
75-
const field = built[i++];
76+
const field = built[i];
7677
const value = typeof field === 'number' ? fields[field] : field;
78+
const type = built[++i];
7779

78-
if (built[i] === TAG_SET) {
80+
if (type === TAG_SET) {
7981
args[0] = value;
8082
}
81-
else if (built[i] === PROPS_ASSIGN) {
83+
else if (type === PROPS_ASSIGN) {
8284
args[1] = Object.assign(args[1] || {}, value);
8385
}
84-
else if (built[i] === PROP_SET) {
86+
else if (type === PROP_SET) {
8587
(args[1] = args[1] || {})[built[++i]] = value;
8688
}
87-
else if (built[i] === PROP_APPEND) {
89+
else if (type === PROP_APPEND) {
8890
args[1][built[++i]] += (value + '');
8991
}
90-
else if (built[i]) {
92+
else if (type) {
9193
// code === CHILD_RECURSE
9294
args.push(h.apply(null, evaluate(h, value, fields, ['', null])));
9395
}
@@ -144,25 +146,28 @@ export const build = function(statics) {
144146
current.push(true, PROP_SET, buffer);
145147
}
146148
}
147-
else if (MINI && mode === MODE_PROP_SET) {
148-
(current[2] = current[2] || {})[propName] = field ? buffer ? (buffer + fields[field]) : fields[field] : buffer;
149-
mode = MODE_PROP_APPEND;
150-
}
151-
else if (MINI && mode === MODE_PROP_APPEND) {
152-
if (buffer || field) {
153-
current[2][propName] += field ? buffer + fields[field] : buffer;
154-
}
155-
}
156-
else if (!MINI && mode >= MODE_PROP_SET) {
157-
if (buffer || (!field && mode === MODE_PROP_SET)) {
158-
current.push(buffer, mode, propName);
159-
mode = MODE_PROP_APPEND;
149+
else if (mode >= MODE_PROP_SET) {
150+
if (MINI) {
151+
if (mode === MODE_PROP_SET) {
152+
(current[2] = current[2] || {})[propName] = field ? buffer ? (buffer + fields[field]) : fields[field] : buffer;
153+
mode = MODE_PROP_APPEND;
154+
}
155+
else if (field || buffer) {
156+
current[2][propName] += field ? buffer + fields[field] : buffer;
157+
}
160158
}
161-
if (field) {
162-
current.push(field, mode, propName);
163-
mode = MODE_PROP_APPEND;
159+
else {
160+
if (buffer || (!field && mode === MODE_PROP_SET)) {
161+
current.push(buffer, mode, propName);
162+
mode = MODE_PROP_APPEND;
163+
}
164+
if (field) {
165+
current.push(field, mode, propName);
166+
mode = MODE_PROP_APPEND;
167+
}
164168
}
165169
}
170+
166171
buffer = '';
167172
};
168173

@@ -174,7 +179,7 @@ export const build = function(statics) {
174179
commit(i);
175180
}
176181

177-
for (let j=0; j<statics[i].length; j++) {
182+
for (let j=0; j<statics[i].length;j++) {
178183
char = statics[i][j];
179184

180185
if (mode === MODE_TEXT) {
@@ -193,6 +198,16 @@ export const build = function(statics) {
193198
buffer += char;
194199
}
195200
}
201+
else if (mode === MODE_COMMENT) {
202+
// Ignore everything until the last three characters are '-', '-' and '>'
203+
if (buffer === '--' && char === '>') {
204+
mode = MODE_TEXT;
205+
buffer = '';
206+
}
207+
else {
208+
buffer = char + buffer[0];
209+
}
210+
}
196211
else if (quote) {
197212
if (char === quote) {
198213
quote = '';
@@ -216,7 +231,7 @@ export const build = function(statics) {
216231
propName = buffer;
217232
buffer = '';
218233
}
219-
else if (char === '/') {
234+
else if (char === '/' && (mode < MODE_PROP_SET || statics[i][j+1] === '>')) {
220235
commit();
221236
if (mode === MODE_TAGNAME) {
222237
current = current[0];
@@ -238,6 +253,11 @@ export const build = function(statics) {
238253
else {
239254
buffer += char;
240255
}
256+
257+
if (mode === MODE_TAGNAME && buffer === '!--') {
258+
mode = MODE_COMMENT;
259+
current = current[0];
260+
}
241261
}
242262
}
243263
commit();

0 commit comments

Comments
 (0)