Have you seen this? http://wiki.apache.org/jakarta-velocity/VelocityWhitespaceGobbling
Adding "##" to the end of a line seems to be the best suggestion so far. http://wiki.apache.org/jakarta-velocity/VelocityWhitespaceTruncatedByLineComment
WILL
----- Original Message ----- From: "Tim Pierce" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Sunday, March 13, 2005 9:57 AM
Subject: merge-time output on/off control?
Using velocity, I have become increasingly frustrated with trying to control whitespace.
I am generating source-code and therefore tight control of indentation is of great benefit to me.
my velocity statements are nested to such a degree that indentation of *them* is important for maintenance of the template. The example below is a real snippet from a template I'm building. Obviously, the whitespace for documents produced will be a real mess with tabs everywhere, though it is (relatively) readable - which illustrates my point, it seems difficult to control whitespace without sacrificing readability. Both readability of the produced source-code document and of the template are important to me.
example:
#if( $xpath.single( $class, "field/@default" ) )
#set( $initialiserName = "initialise${classname}" )
void ${classname}::${initialiserName}(){
#foreach( $field in $class.getChildren( "field" ) )
#set( $manyAtt = xpath.single( $field, "@many" ) )
## don't worry about many's
#if( !$manyAtt || !( "true".equals( $manyAtt ) ) )
#set( $defaultAtt = $xpath.single( $field, "@default" ) )
#if( $defaultAtt )
#set( $staticAtt = $xpath.single( $field, "@static" ) )
#if( "true".equals( $staticAtt ) )
#if( $xpath.single( $field, "@bean|@state" )
set${utils.cap( $xpath.single( $field, "@name" )} )}( ${xpath.single(
$field, "@default" )} );
#else
${xpath.single( $field,"@name" )} = ${xpath.single( $field,"@default" )};
#end
#end
#end
#end
#endI have known people hack velocity to cut out any whitesapce on a line directly before a velocity directive (#), which might work in my case.
I can't hepl think though that there must be a better way.
I was considering if it might be possible to get some control in there which
would give the template functionality to allow output from the merge to be
written to the writer or ignored say by something like ${vel.stop()} and
${vel.go()} (by popping some piece of the running velocity class into the
context)so you may get
${vel.stop}
#foreach( $class in $classes)
#foreach( $method in $class.methods )
This line will not get written out to the document
${vel.go} This line will! ${vel.stop} This one won't
#end
#endwhich would likely approximate to something like
This line will! This line will! This line will!
Alternatively #on #off directives.
What are peoples thoughts on this? is something like this already available? how do other people get around the whitespace nightmare, or is it just me?
regards
T
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
