I expect that when adding velocity markup to an existing text file
to not affect the spacing in the output. This includes indented #foreach
directives and inner indented #if/#set/#macro directives.
So the rule I proposed was to allow adding velocity markup, one per line,
and still have the same output - e.g. add an #if statement around
existing text to conditionally mask it out. Or add an #foreach around
a table row and be able to repeat the body with dynamic data, etc.
As sonn as a directive is placed wihtin other text in the same line,
any whitespace around it should remain untouched.
If a line is looks like this:
DirectiveLine ::= LineEnd TabsAndSpaces? Directive TabsAndSpaces? LineEnd
TabsAndSpaces ::= (#x20 | #x09)+
LineEnd ::= StartOfStream | ((#x0D #x0A) | #x0D | #x0A) | EndOfStream
then the first "TabsAndSpaces?" and the closing "TabsAndSpaces? LineEnd"
should be gobbled. (Note that it supports multiline directives, that is
why "DirectiveLine" is not simply "Line".) If you whant the first
"LineEnd" to be gobbled prepend a ## before it (makes the EOL part of
the previous line!).
This has been an isse since velocity birth and discussed in many
user and developer threads. Some users agree with my proposals,
some say that velocity sould not touch any whitespaces and a
code formatter should be run after the template rendering.
The proposal is not 100% BC, but a switch could allow the classic
style (by default), or to pass all whitespaces.
A new directive could be created to control the gobbling for
the enclosed parts within a template.