= Markup Templates = The `markup` package provides a template engine that is compatible with Kid (http://kid.lesscode.org) to a certain extent. Common concepts and features: * The same basic set of directives (excluding `py:extends` and `py:layout`) * Inline expressions using the `${expr}` (or just `$expr`) syntax. * Expressions are real Python code, not some crippled mini language. * Stream-based processing model making heavy use of Python generators. * Different serialization methods, for example to produce XML or HTML output. Differences include: * No generation of Python code for a template; the template is "interpreted" * No support for `` processing instructions * Expressions are evaluated in a more flexible manner, meaning you can use e.g. attribute access notation to access items in a dictionary, etc (see the [source:/trunk/markup/eval.py markup.eval] module) * Use of XInclude and match templates instead of Kid's `py:extends` / `py:layout` directives * Real (thread-safe) search path support * No dependency on ElementTree (due to the lack of position reporting) * The original location of parse events is kept throughout the processing pipeline, so that errors can be tracked back to a specific line/column in the template file * `py:match` directives use (basic) XPath expressions to match against input nodes, making match templates more powerful while keeping the syntax simple (see the [source:/trunk/markup/path.py markup.path] module)