@@ -140,7 +140,7 @@ export default class Parser {
140140 if ( next [ 0 ] === tokens . equals ) {
141141 node . operator = content ;
142142 lastAdded = 'operator' ;
143- } else if ( ! node . namespace && next ) {
143+ } else if ( ( ! node . namespace || ( lastAdded === "namespace" && ! spaceAfterMeaningfulToken ) ) && next ) {
144144 if ( spaceBefore ) {
145145 dotProp . set ( node , 'spaces.attribute.before' , spaceBefore ) ;
146146 spaceBefore = '' ;
@@ -149,7 +149,11 @@ export default class Parser {
149149 dotProp . set ( node , 'raws.spaces.attribute.before' , spaceBefore ) ;
150150 commentBefore = '' ;
151151 }
152- node . namespace = content ;
152+ node . namespace = ( node . namespace || "" ) + content ;
153+ let rawValue = dotProp . get ( node , "raws.namespace" ) ;
154+ if ( rawValue ) {
155+ node . raws . namespace += content ;
156+ }
153157 lastAdded = 'namespace' ;
154158 }
155159 spaceAfterMeaningfulToken = false ;
@@ -183,13 +187,13 @@ export default class Parser {
183187 if (
184188 next &&
185189 this . content ( next ) === '|' &&
186- ( attr [ pos + 2 ] && attr [ pos + 2 ] [ 0 ] !== tokens . equals ) &&
190+ ( attr [ pos + 2 ] && attr [ pos + 2 ] [ 0 ] !== tokens . equals ) && // this look-ahead probably fails with comment nodes involved.
187191 ! node . operator &&
188192 ! node . namespace
189193 ) {
190194 node . namespace = content ;
191195 lastAdded = 'namespace' ;
192- } else if ( ! node . attribute ) {
196+ } else if ( ! node . attribute || ( lastAdded === "attribute" && ! spaceAfterMeaningfulToken ) ) {
193197 if ( spaceBefore ) {
194198 dotProp . set ( node , 'spaces.attribute.before' , spaceBefore ) ;
195199 spaceBefore = '' ;
@@ -198,12 +202,20 @@ export default class Parser {
198202 dotProp . set ( node , 'raws.spaces.attribute.before' , commentBefore ) ;
199203 commentBefore = '' ;
200204 }
201- node . attribute = content ;
205+ node . attribute = ( node . attribute || "" ) + content ;
206+ let rawValue = dotProp . get ( node , "raws.attribute" ) ;
207+ if ( rawValue ) {
208+ node . raws . attribute += content ;
209+ }
202210 lastAdded = 'attribute' ;
203- } else if ( ! node . value ) {
204- node . value = content ;
211+ } else if ( ! node . value || ( lastAdded === "value" && ! spaceAfterMeaningfulToken ) ) {
212+ node . value = ( node . value || "" ) + content ;
213+ let rawValue = dotProp . get ( node , "raws.value" ) ;
214+ if ( rawValue ) {
215+ node . raws . value += content ;
216+ }
205217 lastAdded = 'value' ;
206- dotProp . set ( node , 'raws.unquoted' , content ) ;
218+ dotProp . set ( node , 'raws.unquoted' , dotProp . get ( node , 'raws.unquoted' , '' ) + content ) ;
207219 } else if ( content === 'i' ) {
208220 if ( node . value && ( node . quoted || spaceAfterMeaningfulToken ) ) {
209221 node . insensitive = true ;
0 commit comments