First of all, thanks for all the responses: they've been helpful. Here's an idea to chew on: Instead of having Velocity users augment their resource loaders, whether the "File..." one or the "Webapp..." one, what about providing a way to expose a line filtering option at a different level? To be specific, imagine 7.1 (say) supported a new configuration key: "template.line.filtering.class". When not set, Velocity would behave as it does today: no filtering. But if that's configured with the fully qualified class name for a class that implements this interface:
public interface ILineFilter { /** * Optionally changes the given line from a Template source, * returning the filtered result. If null is returned, the * filter is expressing a desire for the entire line to be * filtered away. * @param line the line to (potentially) filter; does not * end with line termination character(s) like * '\n' or '\r'. */ String filterLine(String line); } ...then the Velocity code that interacts with any and all loaders would know to wrap the InputStream produced by the applicable loader with a filtering InputStream that applies the user-supplied filter to each Template source line. Something like this: templatesInputStream = { stream produced by resource loader } if ( "template.line.filtering.class" is set by user ) { ILineFilter lineFilter = { "newInstance" of user's configured class } wrappedStream = new LineFilteringInputStream (templatesInputStream, lineFilter); templatesInputStream = wrappedStream; } ... created the Template using "templatesInputStream" ... The benefit is that users don't have to configure their (one or more) resource loaders: the filtering is done in one place. Plus the amount of code the user needs to write is smaller, and it's much more to the point: the user doesn't need to get involved with resource loader implementation details, nor line reading/buffering, etc... Just a suggestion... Thanks, Rich ________________________________ Kiva.org - Loans That Change Lives ---------------------------------------- > Subject: Re: Directive indenting ? > From: j-b.bri...@novlog.com > Date: Wed, 23 Mar 2011 14:04:52 +0100 > To: user@velocity.apache.org > > OK, I'll try the FileResourceLoader as it failed at runtime with the > WebappResourceLoader. > I already change the code to use StringBuilder. > > I'll share it with pleasure ! > Let me just validate it work for me with the FileResourceLoader. > > On 23 mars 2011, at 14:01, Claude Brisson wrote: > > > As noted on the wiki page, this custom resource loader extends > > WebappResourceLoader but you can do exactly the same while extending > > FileResourceLoader. > > > > If you do so, be sure to share it! Also, the code could probably be > > optimized a bit (for instance by using a StringBuilder instead of a String > > for its inner buffer). > > > > > > Claude > > > > On 2011-03-23 10:47, Jean-Baptiste BRIAUD -- Novlog wrote: > >> It doesn't compile : > >> the WebappResourceLoader class is not found. > >> I guess it is in the velocity-tool.jar extra lib ... I'll try, I have > >> several emergency in parallel :-) > >> If my guess is correct, I'll just have to add a new dependency on my > >> project. > >> I'll let you know. > >> > >> On 22 mars 2011, at 17:20, Claude Brisson wrote: > >> > >>> It's a very straightforward input filter that uses the common resource > >>> loading API - it should work well with 1.7. > >>> > >>> It's the filter itself that should be considered beta. > >>> > >>> Claude > >>> > >>> On 2011-03-22 14:33, Jean-Baptiste BRIAUD -- Novlog wrote: > >>>> Does it work with current 1.7 (latest stable) version or should I > >>>> migrate to V2 beta ? > >>>> If yes, is that beta version stable enough ? > >>>> > >>>> On 22 mars 2011, at 11:41, Jean-Baptiste BRIAUD -- Novlog wrote: > >>>> > >>>>> Thanks for the pointer ! For years, I was thinking it was not possible. > >>>>> > >>>>> On 21 mars 2011, at 20:52, Claude Brisson wrote: > >>>>> > >>>>>> Yet, you can check a custom resource loader available on the wiki that > >>>>>> does precisely this: > >>>>>> http://wiki.apache.org/velocity/StructuredGlobbingResourceLoader > >>>>>> > >>>>>> > >>>>>> Claude > >>>>>> > >>>>>> On 2011-03-21 19:50, Sergiu Dumitriu wrote: > >>>>>>> On 03/21/2011 07:04 PM, Rich Wagner wrote: > >>>>>>>> Sorry in advance if this is a FAQ whose answer I haven't found... > >>>>>>>> > >>>>>>>> Instead of writing: > >>>>>>>> > >>>>>>>> > >>>>>>>> #foreach( $container in $Containers ) > >>>>>>>> #if( $container.prop("Generate") ) > >>>>>>>> ...stuff... > >>>>>>>> #end > >>>>>>>> #end > >>>>>>>> > >>>>>>>> > >>>>>>>> I'd like to indent the "#if" and its "#end", for the sake of better > >>>>>>>> readability: > >>>>>>>> > >>>>>>>> > >>>>>>>> #foreach( $container in $Containers ) > >>>>>>>> #if( $container.prop("Generate") ) > >>>>>>>> ...stuff... > >>>>>>>> #end > >>>>>>>> #end > >>>>>>>> > >>>>>>>> > >>>>>>>> But then I find the spaces before the "#if" and its matching "#end" > >>>>>>>> show up in the output, which I don't want to happen. > >>>>>>>> > >>>>>>>> To get around this, I've implemented a somewhat hack-ish Template > >>>>>>>> preprocesser: my resource loader wraps a template's stream inside my > >>>>>>>> own stream implementation which filters template lines. That is, if > >>>>>>>> a line starts with "#blah", the initial spaces are trimmed off. > >>>>>>>> > >>>>>>>> That works, and isn't all that intrusive. But if "off-the-shelf" > >>>>>>>> Velocity already provides an easier way to accomplish the same > >>>>>>>> thing, I'd prefer that... > >>>>>>> No, there's no similar feature directly in Velocity yet. > >>>>>>> > >>>>>> --------------------------------------------------------------------- > >>>>>> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > >>>>>> For additional commands, e-mail: user-h...@velocity.apache.org > >>>>>> > >>>>> --------------------------------------------------------------------- > >>>>> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > >>>>> For additional commands, e-mail: user-h...@velocity.apache.org > >>>>> > >>>> --------------------------------------------------------------------- > >>>> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > >>>> For additional commands, e-mail: user-h...@velocity.apache.org > >>>> > >>>> > >>> > >>> --------------------------------------------------------------------- > >>> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > >>> For additional commands, e-mail: user-h...@velocity.apache.org > >>> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > >> For additional commands, e-mail: user-h...@velocity.apache.org > >> > >> > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > > For additional commands, e-mail: user-h...@velocity.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org > For additional commands, e-mail: user-h...@velocity.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@velocity.apache.org For additional commands, e-mail: user-h...@velocity.apache.org