Re: Overriding a macro definition

Christopher Schultz <[email protected]> Mon, 20 Jun 2022 16:11:11 -0400
Newsgroups gmane.comp.jakarta.velocity.user
Message-ID <[email protected]>
All,

On 6/20/22 13:54, Christopher Schultz wrote:
> On 6/20/22 13:40, Christopher Schultz wrote:
>> I have a process where I'd like to use a global macro library but also 
>> allow the individual templates to override the macros if necessary.
>>
>> My code looks something like this:
>>
>>
>> // == One-time setup
>> Properties props = new Properties();
>> props.setProperty("velocimacro.inline.allow", "true");
>> props.setProperty("velocimacro.inline.local_scope", "true");
> 
> /facepalm
> 
> I'm not sure how I messed-up the copy/paste of those settings, but they 
> should have been:
> 
> props.setProperty("velocimacro.permissions.allow.inline", "true");
> props.setProperty("velocimacro.permissions.allow.inline.local.scope", 
> "true");
> 
> It's working as expected, now.

I spoke too soon. The "global" macros aren't being seen by the 
individual templates, now. I'm sure this is because I enabled 
local-scope and haven't explicitly-loaded the "global" macros as "global".

How do I do that? Probably /not/ by using VelocityEngine.evaluate() as I 
have here:

// == One-time setup
Properties props = new Properties();
props.setProperty("velocimacro.permissions.allow.inline", "true");
props.setProperty("velocimacro.permissions.allow.inline.local.scope", 
"true");
VelocityEngine ve = new VelocityEngine();
ve.init(props);

VelocityContext globalContext = new VelocityContext();

// Load the global macro template
engine.evaluate(globalContext, new NullWriter(), "VM_global_library", 
new InputStreamReader(...));

What do I need to do to create "global" macros when inline macros have 
been enabled?

-chris