Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » M2T (model-to-text transformation) » [JET2] How to correctly indent/linebreak lines?
[JET2] How to correctly indent/linebreak lines? [message #20661] Tue, 05 June 2007 18:39 Go to next message
Florian Georg is currently offline Florian GeorgFriend
Messages: 27
Registered: July 2009
Junior Member
I'm trying to generate a XML file with a certain indention.
When I try this:

<c:iterate select="$packages" var="package" >
<c:include template="templates/package.jet"
passVariables="package"/>
</c:iterate>

I would hope the output of the included template being indented by a tab
(or four spaces), but it is not.
Additionally, I call that template recursivly and I was hoping that the
indents "add up" for each level of hierarchy... is this possible?


Is there a general rule how JET deals with indention/whitespaces/line
breaks?

This is particularly important e.g. for languages where indention has
some semantical meaning.


Thanks in advance for your help
regards,
Florian
Re: [JET2] How to correctly indent/linebreak lines? [message #20758 is a reply to message #20661] Wed, 06 June 2007 12:44 Go to previous messageGo to next message
Paul Elder is currently offline Paul ElderFriend
Messages: 849
Registered: July 2009
Senior Member
Florian:

JET has no automated tools for indenting, although I do know that some users
that have written a custom tag to indent. I have submitted bug 191228
(https://bugs.eclipse.org/bugs/show_bug.cgi?id=191228) to track a possible
enhancement. Feel free to add comments.

I have done indenting by using a variable:
<%-- Set the initial indent, spaces added around ' ' just for clarity --%>
<c:setVariable var="indent" select=" ' ' "/>
Then, in the recursive template, start with:

<c:setVariable var="indent" select="concat($indent, ' ')"/>

.... through the template add:
<c:get select="$indent"/>...rest of line...

.... and, at the end of the template:
<%-- restore the previous indent, assuming that we indented 4 spaces --%>
<c:setVariable var="indent" select="substring($indent,5)"/>

The only real problem with this is that all those <c:get select="$indent"/>
tags interfere with template readability.

As for whitespace, JET has specific rules for removing whitespace and
newlines from the template.

1) JET will only CONSIDER removing whitespace if a language element
(scriptlet, expression, declaration, directive, open tag, end tag, empty
tag, comment) is 'alone' on a line. Technically, this is implemented as the
element starts on a line in which preceeding text in only whitespace, and
ends on a line that is only whitespace. So, for example, the following are
all 'alone' on a line:
<c:iterate select="..." var="...">
<%-- this is a multiline comment,
but it is still 'alone' on a line --%>
2) For scriptlets, declarations, directives and comments, being alone on a
line will cause JET to remove the surrounding whitespace, including new-line
characters at the end of the trailing line.
3) For JET custom tags, which space removal is dependent on that tag. Each
tag is declared with a 'whenContainingLineIsEmpty' attribute, which can have
a value of either 'preserve' or 'remove'. Typically, tags that produce
content preserve, while those that provide control structure like
capabilites remove. Some examples of whitespace preserving tags: c:get, f:lc
(lowercase). Examples of whitespace removing tags: c:iterate, c:if,
c:include.

I have had suggestions that JET needs other modes of whitespace processing.
As an example, consider writing code generate a Java method signature.
Instinctively, I'd want to write something like:

<c:iterate select="$method/flags" var="flag" >
<c:get select="$flag/@value"/>
</c:iterate>
<c:get select="$method/@name"/> (
<c:iterate select="$method/parameter" var="parameter" delimiter=",">
<c:get select="$parameter/@type"/> <c:get select="$parameter/@name"/>
</c:iterate>
)

But if you did that, you'd get a whole pile of extra lines. Today, you need
to run this all onto one long line. It would be nice to either a tag, or a
template mode that operated in a whitespace normalizing mode (all runs of
whitespace including new lines are converted to a single blank; initial and
trailing whitespace is removed). I have a bug on this one, too: bug 180927
(https://bugs.eclipse.org/bugs/show_bug.cgi?id=180927).

Paul


"Florian Georg" <florian.georg@ch.ibm.com> wrote in message
news:f44ak9$3s6$1@build.eclipse.org...
> I'm trying to generate a XML file with a certain indention.
> When I try this:
>
> <c:iterate select="$packages" var="package" >
> <c:include template="templates/package.jet" passVariables="package"/>
> </c:iterate>
>
> I would hope the output of the included template being indented by a tab
> (or four spaces), but it is not.
> Additionally, I call that template recursivly and I was hoping that the
> indents "add up" for each level of hierarchy... is this possible?
>
>
> Is there a general rule how JET deals with indention/whitespaces/line
> breaks?
>
> This is particularly important e.g. for languages where indention has some
> semantical meaning.
>
>
> Thanks in advance for your help
> regards,
> Florian
Re: [JET2] How to correctly indent/linebreak lines? [message #20831 is a reply to message #20758] Thu, 07 June 2007 08:14 Go to previous message
Aleks Dworak is currently offline Aleks DworakFriend
Messages: 8
Registered: July 2009
Junior Member
I use a trick to avoid extra lines, which is commenting them : the end of
your line is the beginning of a comment, the begin of the next line ends
this comment.

But it is not helpful for the readability of the jet templates...
Previous Topic:[JET2] - XPath does not return results for UML/XMI model?
Next Topic:generation of java code
Goto Forum:
  


Current Time: Fri Apr 19 04:56:07 GMT 2024

Powered by FUDForum. Page generated in 0.02180 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top