@@ -4,8 +4,9 @@ const MODE_SLASH = 0;
44const MODE_TEXT = 1 ;
55const MODE_WHITESPACE = 2 ;
66const 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
1011const TAG_SET = 1 ;
1112const CHILD_APPEND = 0 ;
@@ -72,22 +73,23 @@ export const treeify = (built, fields) => {
7273
7374export 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