There is also an implicit syntaxic change in Henning's code example: he uses #macro myNamedMacro($arg1, $arg2, $arg3) ... do something with $arg1, $arg2, $arg3 #end
which is quite natural but AFAIK not supported since the valid syntax is: #macro (myNamedMacro, $arg1, $arg2, $arg3) ... do something with $arg1, $arg2, $arg3 #end Supporting the former syntax would be great. Claude Le mardi 29 mai 2007 à 18:28 +0530, Supun Kamburugamuva a écrit : > Hi, > > I have gone through most of the stuff pointed by Henning and now I > think I'm ready to start the real work. So I thought I should start > with a simple thing at the beginning. So I choose the 4th suggestion > (blank as argument delimiter') from Hennings list (I don't think this > will take much time). At the moment I'm working on it and trying to > figure out how it should be done. > > Regards, > Supun.. > > > > > On 5/10/07, Henning P. Schmiedehausen <[EMAIL PROTECTED]> wrote: > > "Supun Kamburugamuva" <[EMAIL PROTECTED]> writes: > > > > Hi Supun, > > > > >I would like to start working on the macro issues as soon as possible. > > > I know the code writing officially starts on 28th May. But I thought > > >starting early would be better. > > > > > > I added a page to the Wiki about this > > (http://wiki.apache.org/velocity/GoogleSummerOfCode2007) and also some > > suggestions. Please do not be afraid about my + - ++++ scale, I might > > be terribly off. Also bear with my syntax typos, it's already late > > here. > > > > If we can get one or two ++ items resolved or even one ++++ item, I > > would be very happy with the GSOC project. > > > > >I have gone through the macro code and still I don't have a clear > > >picture of how the macro stuff is working. What I have done up to now > > >is setting up debug points where I feel important and debugging the > > >code. > > > > Welcome to our world. :-) > > > > Here is the whirlwind tour. Let's see how much I still remember off > > the top of my head and how much I must look up in the code base: > > > > In the depths of the parser, there is Macro.processAndRegister. This > > is where a macro is registered with the engine. This in turn calls > > addVelocimacro on the passed RuntimeServices object (which is the > > actual instance of the engine). This is where the Velocimacro Factory > > comes in, because this call is just a facade before the call in the > > factory. The factory and the VelocimacroManager (which is inside the > > factory) are what keeps the macros inside the engine. The factory > > manages the macros and the manager the namespaces (yes, we do have > > such an underdocumented feature). > > > > The macros themselves are invoked when the AST is parsed, through a > > lookup in the ASTDirective class. This represents a directive on the > > AST, either one of the defined (#if, #set etc) through > > parser.isDirective() or a macro (which is similar, e.g. #foo, #bar) > > through rsvc.isVelocimacro()). > > > > I'd suggest that you check out src/parser/Parser.jjt which gets > > compiled by JJTree/JavaCC into the parser-related classes. > > > > The most interesting breakpoints are probably the following method > > entry points: > > > > RuntimeInstance: > > > > * addVelocimacro > > * getVelocimacro > > > > VelociMacroManager: > > > > * addNamespace > > * getNamespace (multiple) > > > > VelociMacroManager.MacroEntry: > > > > * C'tor > > * getNodeTree > > * createVelocimacro > > * parseTree > > * setup > > > > VelocimacroFactory: > > > > * getVelocimacro (do not remove the synchronized block!) > > * initVelocimacro > > * addVelocimacro > > > > This is hopefully enough to get you going. Write a small harness to > > test your code (load a template, parse it, render it) and test a few > > very simple templates under the debugger. This should give you an idea > > how inline macros work. Try again with a macro library (configured in > > properties) to understand the difference. Look at the setFromLibrary() > > methods in the MacroEntry class. > > > > Find out, what the Twonk is good for. ;-) > > > > Best regards > > Henning > > > > -- > > Henning P. Schmiedehausen -- [EMAIL PROTECTED] | J2EE, Linux, > > |gls > > 91054 Buckenhof, Germany -- +49 9131 506540 | Apache person > > |eau > > Open Source Consulting, Development, Design | Velocity - Turbine guy > > |rwc > > > > |m k > > INTERMETA - Gesellschaft fuer Mehrwertdienste mbH - RG Fuerth, HRB 7350 > > |a s > > Sitz der Gesellschaft: Buckenhof. Geschaeftsfuehrer: Henning Schmiedehausen > > |n > > > > "Save the cheerleader. Save the world." > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]