Release Notes: UL4 templates can now be used as functions via the <?return?> tag. The built-in UL4 functions are now real objects that can be passed to templates as arguments. Lists in UL4 support the methods append, insert, and pop, and dictionaries support the method update. Line feeds and indentation in the literal text for UL4 templates can now be ignored via an additional constructor argument.
Release Notes: UL4 templates now support lexical scopes. UL4 methods and functions support keyword arguments. Tree traversal and iterative parsing in XIST have been simplified and support the same API now.
Release Notes: Python 3.3 is required. The UL4 parser is generated via ANTLR for compatibility with the Java parser. Accessing undefined variable/attributes in UL4 templates returns the special object "Undefined". UL4 functions isdefined() and isundefined() have been added. Support has been added for date arithmetic to UL4 templates (via the functions date(), timedelta(), and monthdelta()). format() supports language-specific date formatting. Loop variable unpacking and variable unpacking in assignment supports arbitrary nesting. The new script oradd.py can be used for importing data to an Oracle database via procedure calls.
Release Notes: XIST has been ported to Python 3. UL4 templates now compile to an AST format instead of bytecode. A new ll.ul4on module has been added that provides functions for encoding and decoding a lightweight extensible machine-readable text format for serializing the object types supported by UL4. Several UL4 function have been added: isfirst(), islast(), isfirstlast(), enumfl(), fromjson(), asul4on(), fromul4on(), min(), and max(). Several enhancements to ll.orasql.
Release Notes: Java source code can now be produced from UL4 templates. Sisyphus jobs support non-forking mode. The scripts xml2xsc and dtd2xsc can handle multiple XML/DTD files. The UL4 functions json(), type(), repr(), islist(), and isdict() can handle more types of maps and lists. ll.orasql has been enhanced to support object names with "fancy" characters. The scripts uls, ucp, and ucat have new options --include, --exclude, and --all. cx_Oracle 5.1 is supported now. Oracle URLs support logging in in SYSDBA/SYSOPER mode. Oracle URLs support access to objects that belong to a different user.
Release Notes: The parsing infrastructure has been rewritten to be more modular and to support iterative parsing (which enabled handling huge XML files). A new function misc.module() creates a module from source code. Two new UL4 functions, abs() and utcnow(), have been added. A few methods have been added to UL4 date objects: mimeformat(), day(), month(), year(), hour(), minute(), second(), microsecond(), and weekday(), and yearday(). This release uses autoboxing in the Java code generated by ll.xist.ns.jsp.fromul4(). SSH URLs in ll.url now use the standalone execnet package.
Release Notes: Python 2.6 is required now. UL4 templates now support locally defined subtemplates. ll.orasql and ll.nightshade are now part of the distribution. Two new scripts ("uls" and "ucat") have been added.
Release Notes: Template objects in UL4 templates now have a render() method that returns the output string. The UL4 function int() now supports two arguments.