@@ -5,10 +5,25 @@ const parse = require('reshape-parser')
55module . exports = ( _locals = { } ) => {
66 return function ( tree , opts ) {
77 const locals = Object . assign ( { } , opts . locals || { } , _locals )
8- return util . modifyNodes ( tree , ( node ) => node . type === 'code' , ( node ) => {
9- const newNode = parse ( gen . call ( { runtime : opts . runtime } , node , opts ) ( locals ) )
10- newNode . location = node . location
11- return newNode
8+ return util . modifyNodes ( tree , ( node ) => {
9+ return node . type === 'code' || node . type === 'tag'
10+ } , ( node ) => {
11+ if ( node . type === 'tag' ) {
12+ if ( ! node . attrs ) return node
13+ for ( let k in node . attrs ) {
14+ node . attrs [ k ] . map ( ( n ) => {
15+ if ( n . type === 'code' ) { node . attrs [ k ] = evalNode ( n , locals , opts ) }
16+ } )
17+ }
18+ return node
19+ }
20+ if ( node . type === 'code' ) return evalNode ( node , locals , opts )
1221 } )
1322 }
1423}
24+
25+ function evalNode ( node , locals , opts ) {
26+ const newNode = parse ( gen . call ( { runtime : opts . runtime } , node , opts ) ( locals ) )
27+ if ( node . location ) { newNode . location = node . location }
28+ return newNode
29+ }
0 commit comments