You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by Nathan Bubna <nb...@gmail.com> on 2010/01/03 07:05:17 UTC
Re: Easiest way to map output line numbers to resource (e.g.
template) line numbers?
I'm not aware of any easier way, nor do i recall anyone else tackling
this. Though you can search the archives at:
http://velocity.markmail.org
On Fri, Jan 1, 2010 at 1:50 PM, Rich Wagner <ri...@hotmail.com> wrote:
>
> (Sorry if this is a FAQ: I just joined the mailing list and didn't find an answer to my question after "google"-ing. BTW, is there a way to search the Velocity mailing list archives?)
>
> I need to generate a mapping from output line numbers back to the corresponding resource filenames and line numbers. What's the easiest way to do that?
>
> I have one method in mind, but am hoping there's an easier way. My method involves overloading the standard resource loaders' "getResourceStream" methods so that each resulting "InputStream" prepends a path and line number to each resource line. So for instance, given a template of:
>
> public enum ${EnumName} {
> /* #foreach ( $name in $names ) */
> ${name},
> /* #end */
> ;
> }
>
> my overloaded "FileResourceLoader" would produce an InputStream that contained:
>
> Template.vtl:1:public enum ${EnumName} {
>
> Template.vtl:2: /* #foreach ( $name in $names ) */
>
> Template.vtl:3: ${name},
>
> Template.vtl:4: /* #end */
>
> Template.vtl:5: ;
>
> Template.vtl:6:}
>
> Template expansion would then produce something like the following; output is in the box, and output line numbers are to the left of the box:
>
> RGB.java
> +-------------------------------------------+
> 1 | Template.vtl:1:public enum ${EnumName} { |
>
>
> 2 | Template.vtl:2: /* */ |
>
>
> 3 | Template.vtl:3: Red, |
>
>
>
>
> 4 | Template.vtl:4: /* */ |
>
>
>
>
> 5 | Template.vtl:3: Green, |
>
>
>
>
> 6 | Template.vtl:4: /* */ |
>
>
>
>
> 7 | Template.vtl:3: Blue, |
>
>
>
>
> 8 | Template.vtl:4: /* */ |
>
>
>
>
> 9 | Template.vtl:5: ; |
>
>
> 10| Template.vtl:6:} |
>
> +-------------------------------------------+
>
>
> In this way, it can be inferred that (e.g.) line 7 in "RGB.java" was generated from line 3 of "Template.vtl".
>
> Post-processing would then strip off the prepended file/line information from the output, while at the same time saving line mapping information to a separate file. (Post-processing also provides a chance to remove the extraneous empty comment lines, e.g. "RGB.java" lines 2, 4, 6 and 8... :-)
>
> (Note that doing this at the Resource Loader level means it'd handle #include-ed and #parse-ed resources.)
>
> All well and good, but is there an easier way to get what I want?
>
> Thanks in advance,
> Rich
>
>
> _________________________________________________________________
> Hotmail: Trusted email with Microsoft’s powerful SPAM protection.
> http://clk.atdmt.com/GBL/go/177141664/direct/01/
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
> For additional commands, e-mail: user-help@velocity.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org