@@ -44,7 +44,7 @@ export const build = (statics) => {
4444 let buffer = '' ;
4545 let quote = '' ;
4646 let current = [ 0 ] ;
47- let char , propName , idx ;
47+ let char , propName ;
4848
4949 const commit = field => {
5050 if ( mode === MODE_TEXT && ( field || ( buffer = buffer . replace ( / ^ \s * \n \s * | \s * \n \s * $ / g, '' ) ) ) ) {
@@ -78,48 +78,53 @@ export const build = (statics) => {
7878 for ( let j = 0 ; j < statics [ i ] . length ; j ++ ) {
7979 char = statics [ i ] [ j ] ;
8080
81- if ( mode === MODE_TEXT && char === '<' ) {
82- // commit buffer
83- commit ( ) ;
84- current = [ current ] ;
85- mode = MODE_TAGNAME ;
86- }
87- else if ( mode !== MODE_TEXT && ( char === quote || ! quote ) && ( idx = '\'">=/\t\n\r ' . indexOf ( char ) ) >= 0 ) {
88- if ( idx < 2 ) {
89- // char === '"' || char === "'"
90- quote = quote ? '' : char ;
91- }
92- else if ( idx === 2 ) {
93- // char === '>'
81+ if ( mode === MODE_TEXT ) {
82+ if ( char === '<' ) {
83+ // commit buffer
9484 commit ( ) ;
95- mode = MODE_TEXT ;
85+ current = [ current ] ;
86+ mode = MODE_TAGNAME ;
9687 }
97- else if ( idx === 3 ) {
98- // char === '='
99- if ( mode ) {
100- mode = MODE_ATTRIBUTE ;
101- propName = buffer ;
102- buffer = '' ;
103- }
88+ else {
89+ buffer += char ;
10490 }
105- else if ( idx === 4 ) {
106- // char === '/'
107- if ( mode ) {
108- commit ( ) ;
109- if ( mode === MODE_TAGNAME ) {
110- current = current [ 0 ] ;
111- }
112- mode = current ;
113- ( current = current [ 0 ] ) . push ( 0 , mode , CHILD_RECURSE ) ;
114- mode = MODE_SLASH ;
115- }
91+ }
92+ else if ( quote ) {
93+ if ( char === quote ) {
94+ quote = '' ;
11695 }
117- else if ( mode ) {
118- // char is a whitespace
119- // <a disabled>
120- commit ( ) ;
121- mode = MODE_WHITESPACE ;
96+ else {
97+ buffer += char ;
98+ }
99+ }
100+ else if ( char === '"' || char === "'" ) {
101+ quote = char ;
102+ }
103+ else if ( char === '>' ) {
104+ commit ( ) ;
105+ mode = MODE_TEXT ;
106+ }
107+ else if ( ! mode ) {
108+ // Ignore everything until the tag ends
109+ }
110+ else if ( char === '=' ) {
111+ mode = MODE_ATTRIBUTE ;
112+ propName = buffer ;
113+ buffer = '' ;
114+ }
115+ else if ( char === '/' ) {
116+ commit ( ) ;
117+ if ( mode === MODE_TAGNAME ) {
118+ current = current [ 0 ] ;
122119 }
120+ mode = current ;
121+ ( current = current [ 0 ] ) . push ( 0 , mode , CHILD_RECURSE ) ;
122+ mode = MODE_SLASH ;
123+ }
124+ else if ( char === ' ' || char === '\t' || char === '\n' || char === '\r' ) {
125+ // <a disabled>
126+ commit ( ) ;
127+ mode = MODE_WHITESPACE ;
123128 }
124129 else {
125130 buffer += char ;
0 commit comments