@@ -10,7 +10,7 @@ const revertBackupedLocals = require('./backup').revert
1010const placeholders = require ( './placeholders' )
1111
1212const delimitersSettings = [ ]
13- let conditionals , switches , loops , scopes , ignored
13+ let conditionals , switches , loops , scopes , ignored , delimitersReplace , unescapeDelimitersReplace
1414
1515/**
1616 * @description Creates a set of local variables within the loop, and evaluates all nodes within the loop, returning their contents
@@ -124,12 +124,12 @@ module.exports = function postHTMLExpressions (options) {
124124 let before = escapeRegexpString ( options . delimiters [ 0 ] )
125125 let after = escapeRegexpString ( options . delimiters [ 1 ] )
126126
127- const delimitersRegexp = new RegExp ( `${ before } (.+?)${ after } ` , 'g' )
127+ const delimitersRegexp = new RegExp ( `(?<!@) ${ before } (.+?)${ after } ` , 'g' )
128128
129129 before = escapeRegexpString ( options . unescapeDelimiters [ 0 ] )
130130 after = escapeRegexpString ( options . unescapeDelimiters [ 1 ] )
131131
132- const unescapeDelimitersRegexp = new RegExp ( `${ before } (.+?)${ after } ` , 'g' )
132+ const unescapeDelimitersRegexp = new RegExp ( `(?<!@) ${ before } (.+?)${ after } ` , 'g' )
133133
134134 // make array of delimiters
135135 const delimiters = [
@@ -148,6 +148,9 @@ module.exports = function postHTMLExpressions (options) {
148148 delimitersSettings [ 1 ] = delimiters [ 0 ]
149149 }
150150
151+ delimitersReplace = new RegExp ( `@${ delimitersSettings [ 1 ] . text [ 0 ] } ` , 'g' )
152+ unescapeDelimitersReplace = new RegExp ( `@${ delimitersSettings [ 0 ] . text [ 0 ] } ` , 'g' )
153+
151154 // kick off the parsing
152155 return walk . bind ( null , { locals : options . locals } )
153156}
@@ -176,20 +179,10 @@ function walk (opts, nodes) {
176179
177180 // if we have a string, match and replace it
178181 if ( typeof node === 'string' ) {
179- // if node contains ignored expression delimiter, output as-is
180- const before = delimitersSettings [ 1 ] . text [ 0 ]
181- const after = delimitersSettings [ 1 ] . text [ 1 ]
182- const ignoredDelimiter = new RegExp ( `@${ before } (.+?)${ after } ` , 'g' )
183-
184- if ( ignoredDelimiter . test ( node ) ) {
185- node = node . replace ( `@${ before } ` , before )
186-
187- m . push ( node )
188-
189- return m
190- }
191-
192182 node = placeholders ( node , ctx , delimitersSettings )
183+ node = node
184+ . replace ( unescapeDelimitersReplace , delimitersSettings [ 0 ] . text [ 0 ] )
185+ . replace ( delimitersReplace , delimitersSettings [ 1 ] . text [ 0 ] )
193186
194187 m . push ( node )
195188
@@ -200,6 +193,9 @@ function walk (opts, nodes) {
200193 if ( node . attrs ) {
201194 for ( const key in node . attrs ) {
202195 node . attrs [ key ] = placeholders ( node . attrs [ key ] , ctx , delimitersSettings )
196+ node . attrs [ key ] = node . attrs [ key ]
197+ . replace ( unescapeDelimitersReplace , delimitersSettings [ 0 ] . text [ 0 ] )
198+ . replace ( delimitersReplace , delimitersSettings [ 1 ] . text [ 0 ] )
203199 }
204200 }
205201
0 commit comments