At the end I've managed to implement this with a custom TemplateEngine. However the original idea was to have to custom string literal type in my DLS, using a custom string delimiter. For example:
/% .. my string %/ Is there a way to extend the Groovy syntax in this way? Cheers, Paolo On Sun, May 3, 2015 at 9:09 PM, Paolo Di Tommaso <[email protected]> wrote: > Almost, I'm think to use an AST to convert a GStringExpression to > ConstantExpression, in which all $ placeholders are escaped. Then use a > custom TemplateEngine to interpolate variables prefixed with a % character. > > > p > > > On Sun, May 3, 2015 at 8:11 PM, Dinko Srkoč <[email protected]> wrote: > >> On 3 May 2015 at 19:53, Paolo Di Tommaso <[email protected]> >> wrote: >> > I think that AST cannot work here because the string has been already >> > parsed. >> >> Perhaps, but here's the idea - find all ConstantExpressions with >> String values and parse them again. If you find '%DONE' inside, try >> all VariableExpressions in scope with name 'DONE'. If found, replace >> the ConstantExpression with another one, having a GString that you >> assembled as a value. >> >> My AST skills are a bit rusty, does this seem feasible? >> >> Cheers, >> Dinko >> >> > >> > >> > p >> > >> > >> > On Sun, May 3, 2015 at 7:30 PM, Dinko Srkoč <[email protected]> >> wrote: >> >> >> >> On 3 May 2015 at 18:01, Paolo Di Tommaso <[email protected]> >> >> wrote: >> >> > Hi, >> >> > >> >> > I would need to implement a string literal in which the dollar char >> is >> >> > not >> >> > interpreted as variable placeholder, indeed to use a custom >> character to >> >> > interpolate variables. >> >> > >> >> > For example I would like define a string like this: >> >> > >> >> > >> >> > def DONE = 'Task completed' >> >> > >> >> > >> >> > def script = /% >> >> > >> >> > mv file_name $HOME >> >> > echo %DONE >> >> > /% >> >> > >> >> > >> >> > >> >> > In which the $HOME string is ignored while %DONE is interpolated as >> a >> >> > groovy variable. >> >> > >> >> > Is there any way to do that ? >> >> >> >> Probably not ... although, I imagine it might be possible using AST >> >> transformations. >> >> >> >> On a related note, it would be interesting to have the ability to use >> >> a different GString implementation, instead of GStringImpl. >> >> >> >> Cheers, >> >> Dinko >> >> >> >> > >> >> > >> >> > Cheers, >> >> > Paolo >> >> > >> >> > >> >> > >> > >> > >> > >
