[
https://issues.apache.org/jira/browse/TORQUE-71?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Thomas Fischer closed TORQUE-71.
--------------------------------
Resolution: Fixed
Fix Version/s: 3.3-RC3
Patch applied, thanks
> custom velocity renderer to have nicely trimmed generated code
> --------------------------------------------------------------
>
> Key: TORQUE-71
> URL: https://issues.apache.org/jira/browse/TORQUE-71
> Project: Torque
> Issue Type: Improvement
> Components: Generator
> Reporter: Thoralf Rickert
> Priority: Minor
> Fix For: 3.3-RC3
>
> Attachments: patch.txt, TorqueDataModelTask.java
>
>
> The current Torque templates have spaces and tabs in front of Velocity
> commands (#foreach, #set, #end,...). The Velocity renderer puts this spaces
> and tabs into the generated code - that is the reason why the code in
> generated Base* class files looks sometimes a little bit ugly. If we remove
> the leading spaces in front of Velocity commands we can avoid this problem.
> My solution is to override the rendering method in
> org.apache.velocity.texen.ant.TexenTask that Torque uses to render the
> templates and replace the template loader with our own. Therefor we can
> remove the leading spaces.
> /**
> * This method filters the template and replaces some
> * unwanted characters. For example it removes leading
> * spaces in front of velocity commands and replaces
> * tabs with spaces to prevent bounces in different
> * code editors with different tab-width-setting.
> */
> protected byte[] filter(String template, String encoding) throws Exception {
> StringReader stringReader = new StringReader(template);
> LineNumberReader lineNumberReader = new LineNumberReader(stringReader);
> String line = null;
> ByteArrayOutputStream baos = new ByteArrayOutputStream();
> PrintStream ps = new PrintStream(baos,true,encoding);
> while ((line = lineNumberReader.readLine()) != null) {
> // remove leading spaces in front of velocity commands and comments
> line = line.replaceAll("^\\s*#", "#");
> // replace tabs with spaces to prevent bounces in editors
> line = line.replaceAll("\t"," ");
> ps.println(line);
> }
> ps.flush();
> ps.close();
> return baos.toByteArray();
> }
> The only problem is, that this would generate an error if you use empty
> statements in #if or #foreach commands, for example
> #if (something)
> #end
> This would create an error in velocity's render engine if you remove the
> leading spaces - because empty statements are not allowed in Velocity. But
> this can be avoided by add a single new line:
> #if (something)
> #end
> A patch for the current generator comes in the next days.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]