In this collaboration, we use a compiled TAL to render text.
Objects
- PT
- The PageTemplate
- PT2
- Another PageTemplate
- TI
- An object that implements the TALImplementation interface.
- CTAL
- A compiled TAL data structure returned from a TAL compile call.
- CTAL2
- ditto.
- EEF
- An object that implements the ExpressionEngineFactory? interface.
- EE
- An object that implements the ExpressionEngine? interface.
- cexpr
- A compiled expression. This will be context-dependent. For example, when we are executing a define. this will be a different expression for each definition.
Sequence of calls
- PT calls EEF.create(data)
to create an expression engine. The expression is passed names to be included in the standard namespace. The call returns an expression engine, EE.
- PT calls TI.renderText(CTAL, EE)
As the TALImplementation renders the TAL, it will make calls to EE as different TAL statements are executed:
When a node containing a define or a repeat is encountered (and a condition, if present, if true):
- TI calls EE.beginScope()
After processing node containing a define or a loop:
- TI calls EE.endScope()
when a z:define is executed:
For each define (in order), either:
- TI calls EE.setLocal(name, cexpr)
or
- TI calls EE.setGlobal(name, cexpr)
For each condition:
- TI calls EE.isTrue(cexpr)
For each repeat:
- TI calls EE.startRepeat(name, cexpr)
while 1:
- TI calls EE.repeat()
The return value is a boolean. If the value is false, we break out of the loop. Otherwise, we render the output node and continue.
For each insert or replace:
- TI calls EE.text(cexpr)
To compute the text to be used. The return value is either a string, None, or an object that satisfies the DOM text-node interface.
or
- TI calls EE.structure(cexpr)
To compute the structure to be inserted. The result should be a DOM Fragment or None.
For each attribute to be set:
- TI calls EE.text(cexpr)
to compute the attribute text. The result should be a string or None.
When a use-macro is encountered,
- TI calls EE.macro(cexpr)
The expression engine evaluates the expression. This is likely to involve traversal into a PageTemplate, which will ask the TAL implementation for the macro.
PT2 calls TI.findMacro(CTAL2, name)