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