cmlenz@756: Version 0.6 cmlenz@756: http://svn.edgewall.org/repos/genshi/tags/0.6.0/ cmlenz@756: (???, from branches/stable/0.6.x) cmlenz@756: cmlenz@756: * Support for Python 2.3 has been dropped. cmlenz@836: * Rewrite of the XPath evaluation engine for better performance and improved cmlenz@836: correctness. This is the result of integrating work done by Marcin Kurczych cmlenz@836: during GSoC 2008. cmlenz@836: * Updated the Python AST processing for template code evaluation to use the cmlenz@836: `_ast` module instead of the deprecated `compiler` package, including an cmlenz@881: adapter layer for Python 2.4. This, too, is the result of integrating work cmlenz@881: done by Marcin Kurczych during GSoC 2008. cmlenz@836: * Added caching in the serialization stage for improved performance. cmlenz@840: * Various improvements to the HTML sanitization filter. cmlenz@785: * Fix problem with I18n filter that would get confused by expressions in cmlenz@785: attribute values when inside an `i18n:msg` block (ticket #250). cmlenz@800: * Fix problem with the transformation filter dropping events after the cmlenz@800: selection (ticket #290). cmlenz@803: * `for` loops in template code blocks no longer establish their own locals cmlenz@803: scope, meaning you can now access variables assigned in the loop outside cmlenz@803: of the loop, just as you can in regular Python code (ticket #259). cmlenz@806: * Import statements inside function definitions in template code blocks no cmlenz@806: longer result in an UndefinedError when the imported name is accessed cmlenz@806: (ticket #276). cmlenz@838: * Fixed handling of relative URLs with fragment identifiers containing colons cmlenz@838: in the `HTMLSanitizer` (ticket #274). cmlenz@841: * Added an option to the `HTMLFiller` to also populate password fields. cmlenz@870: * Match template processing no longer produces unwanted duplicate output in cmlenz@870: some cases (ticket #254). cmlenz@877: * Templates instantiated without a loader now get an implicit loader based on cmlenz@877: their file path, or the current directory as a fallback (ticket #320). cmlenz@785: cmlenz@785: cmlenz@758: Version 0.5.1 cmlenz@758: http://svn.edgewall.org/repos/genshi/tags/0.5.1/ cmlenz@778: (Jul 9 2008, from branches/stable/0.5.x) cmlenz@758: cmlenz@758: * Fix problem with nested match templates not being applied when buffering cmlenz@758: on the outer `py:match` is disabled. Thanks to Erik Bray for reporting the cmlenz@758: problem and providing a test case! cmlenz@762: * Fix problem in `Translator` filter that would cause the translation of cmlenz@762: text nodes to fail if the translation function returned an object that was cmlenz@762: not directly a string, but rather something like an instance of the cmlenz@762: `LazyProxy` class in Babel (ticket #145). cmlenz@766: * Fix problem with match templates incorrectly being applied multiple times. cmlenz@769: * Includes from templates loaded via an absolute path now include the correct cmlenz@769: file in nested directories as long if no search path has been configured cmlenz@769: (ticket #240). cmlenz@771: * Unbuffered match templates could result in parts of the matched content cmlenz@771: being included in the output if the match template didn't actually consume cmlenz@771: it via one or more calls to the `select()` function (ticket #243). cmlenz@758: cmlenz@758: cmlenz@475: Version 0.5 cmlenz@475: http://svn.edgewall.org/repos/genshi/tags/0.5.0/ cmlenz@745: (Jun 9 2008, from branches/stable/0.5.x) cmlenz@475: cmlenz@475: * Added #include directive for text templates (ticket #115). cmlenz@501: * Added new markup transformation filter contributed by Alec Thomas. This cmlenz@501: provides gorgeous jQuery-inspired stream transformation capabilities based cmlenz@501: on XPath expressions. cmlenz@524: * When using HTML or XHTML serialization, the `xml:lang` attribute is cmlenz@524: automatically translated to the `lang` attribute which HTML user agents cmlenz@524: understand. cmlenz@537: * Added support for the XPath 2 `matches()` function in XPath expressions, cmlenz@537: which allow matching against regular expressions. cmlenz@545: * Support for Python code blocks in templates can now be disabled cmlenz@545: (ticket #123). cmlenz@548: * Includes are now processed when the template is parsed if possible, but cmlenz@548: only if the template loader is not set to do automatic reloading. Included cmlenz@548: templates are basically inlined into the including template, which can cmlenz@548: speed up rendering of that template a bit. cmlenz@592: * Added new syntax for text templates, which is more powerful and flexible cmlenz@609: with respect to white-space and line breaks. It also supports Python code cmlenz@609: blocks. The old syntax is still available and the default for now, but in a cmlenz@609: future release the new syntax will become the default, and some time after cmlenz@609: that the old syntax will be removed. cmlenz@603: * Added support for passing optimization hints to `` directives, cmlenz@603: which can speed up match templates in many cases, for example when a match cmlenz@603: template should only be applied once to a stream, or when it should not be cmlenz@603: applied recursively. cmlenz@605: * Text templates now default to rendering as plain text; it is no longer cmlenz@605: necessary to explicitly specify the "text" method to the `render()` or cmlenz@605: `serialize()` method of the generated markup stream. cmlenz@658: * XInclude elements in markup templates now support the `parse` attribute; cmlenz@658: when set to "xml" (the default), the include is processed as before, but cmlenz@658: when set to "text", the included template is parsed as a text template using cmlenz@658: the new syntax (ticket #101). cmlenz@650: * Python code blocks inside match templates are now executed (ticket #155). cmlenz@651: * The template engine plugin no longer adds the `default_doctype` when the cmlenz@651: `fragment` parameter is `True`. cmlenz@655: * The `striptags` function now also removes HTML/XML-style comments (ticket cmlenz@655: #150). cmlenz@657: * The `py:replace` directive can now also be used as an element, with an cmlenz@657: attribute named `value` (ticket #144). cmlenz@658: * The `TextSerializer` class no longer strips all markup in text by default, cmlenz@658: so that it is still possible to use the Genshi `escape` function even with cmlenz@658: text templates. The old behavior is available via the `strip_markup` option cmlenz@658: of the serializer (ticket #146). cmlenz@682: * Assigning to a variable named `data` in a Python code block no longer cmlenz@682: breaks context lookup. cmlenz@688: * The `Stream.render` now accepts an optional `out` parameter that can be cmlenz@688: used to pass in a writable file-like object to use for assembling the cmlenz@688: output, instead of building a big string and returning it. cmlenz@689: * The XHTML serializer now strips `xml:space` attributes as they are only cmlenz@689: allowed on very few tags. cmlenz@694: * Match templates are now applied in a more controlled fashion: in the order cmlenz@694: they are declared in the template source, all match templates up to (and cmlenz@694: including) the matching template itself are applied to the matched content, cmlenz@694: whereas the match templates declared after the matching template are only cmlenz@694: applied to the generated content (ticket #186). cmlenz@714: * The `TemplateLoader` class now provides an `_instantiate()` method that can cmlenz@695: be overridden by subclasses to implement advanced template instantiation cmlenz@695: logic (ticket #204). cmlenz@696: * The search path of the `TemplateLoader` class can now contain ''load cmlenz@696: functions'' in addition to path strings. A load function is passed the cmlenz@696: name of the requested template file, and should return a file-like object cmlenz@696: and some metadata. New load functions are supplied for loading from egg cmlenz@696: package data, and loading from different loaders depending on the path cmlenz@696: prefix of the requested filename (ticket #182). cmlenz@700: * Match templates can now be processed without keeping the complete matched cmlenz@700: content in memory, which could cause excessive memory use on long pages. cmlenz@700: The buffering can be disabled using the new `buffer` optimization hint on cmlenz@700: the `` directive. cmlenz@702: * Improve error reporting when accessing an attribute in a Python expression cmlenz@702: raises an `AttributeError` (ticket #191). cmlenz@713: * The `Markup` class now supports mappings for right hand of the `%` (modulo) cmlenz@713: operator in the same way the Python string classes do, except that the cmlenz@713: substituted values are escape. Also, the special constructor which took cmlenz@713: positional arguments that would be substituted was removed. Thus the cmlenz@713: `Markup` class now supports the same arguments as that of its `unicode` cmlenz@713: base class (ticket #211). cmlenz@714: * The `Template` class and its subclasses, as well as the interpolation API, cmlenz@714: now take an `filepath` parameter instead of `basedir` (ticket #207). cmlenz@729: * The `XHTMLSerializer` now has a `drop_xml_decl` option that defaults to cmlenz@729: `True`. Setting it to `False` will cause any XML decl in the serialized cmlenz@729: stream to be included in the output as it would for XML serialization. cmlenz@739: * Add support for a protocol that would allow interoperability of different cmlenz@739: Python packages that generate and/or consume markup, based on the special cmlenz@739: `__html__()` method (ticket #202). cmlenz@475: cmlenz@475: cmlenz@579: Version 0.4.4 cmlenz@579: http://svn.edgewall.org/repos/genshi/tags/0.4.4/ cmlenz@596: (Aug 14, 2007, from branches/stable/0.4.x) cmlenz@579: cmlenz@579: * Fixed augmented assignment to local variables in Python code blocks. cmlenz@588: * Fixed handling of nested function and class definitions in Python code cmlenz@588: blocks. cmlenz@590: * Includes were not raising `TemplateNotFound` exceptions even when no cmlenz@590: fallback has been specified. That has been corrected. cmlenz@590: * The template loader now raises a `TemplateNotFound` error when a previously cmlenz@590: cached template is removed or renamed, where it previously was passing up cmlenz@590: an `OSError`. cmlenz@594: * The Genshi I18n filter can be configured to only extract messages found in cmlenz@596: `gettext` function calls, ignoring any text nodes and attribute values cmlenz@596: (ticket #138). cmlenz@579: cmlenz@579: cmlenz@535: Version 0.4.3 cmlenz@535: http://svn.edgewall.org/repos/genshi/tags/0.4.3/ cmlenz@574: (Jul 17 2007, from branches/stable/0.4.x) cmlenz@535: cmlenz@535: * The I18n filter no longer extracts or translates literal strings in cmlenz@535: attribute values that also contain expressions. cmlenz@538: * Added `loader_callback` option to plugin interface, which allows specifying cmlenz@538: a callback function that the template loader should invoke whenever a new cmlenz@538: template is loaded (ticket #130). Note that the value for this option can cmlenz@538: not be specified as a string, only as an actual function object, which means cmlenz@538: it is not available for use through configuration files. cmlenz@550: * The I18n filter now extracts messages from gettext functions even inside cmlenz@550: ignored tags (ticket #132). cmlenz@556: * The HTML sanitizer now strips any CSS comments in style attributes, which cmlenz@556: could previously be used to hide malicious property values. cmlenz@571: * The HTML sanitizer now also removes any HTML comments encountered, as those cmlenz@571: may be used to hide malicious payloads targetting a certain "innovative" cmlenz@571: browser that goes and interprets the content of specially prepared comments. cmlenz@569: * Attribute access in template expressions no longer silently ignores cmlenz@569: exceptions other than `AttributeError` raised in the attribute accessor. cmlenz@535: cmlenz@535: cmlenz@494: Version 0.4.2 cmlenz@494: http://svn.edgewall.org/repos/genshi/tags/0.4.2/ cmlenz@574: (Jun 20 2007, from branches/stable/0.4.x) cmlenz@494: cmlenz@494: * The `doctype` parameter of the markup serializers now also accepts the "name" cmlenz@494: of the doctype as string, in addition to the `(name, pubid, sysid)` tuple. cmlenz@494: * The I18n filter was not replacing the original attributes with the cmlenz@494: translation, but instead adding a second attribute with the same name. cmlenz@512: * `TextTemplate` can now handle unicode source (ticket #125). cmlenz@520: * A `` processing instruction containing trailing whitespace no cmlenz@520: longer causes a syntax error (ticket #127). cmlenz@522: * The I18n filter now skips the content of elements that have an `xml:lang` cmlenz@522: attribute with a fixed string value. Basically, `xml:lang` can now be used cmlenz@522: as a flag to mark specific sections as not needing localization. cmlenz@528: * Added plugin for message extraction via Babel (http://babel.edgewall.org/). cmlenz@494: cmlenz@494: cmlenz@456: Version 0.4.1 cmlenz@456: http://svn.edgewall.org/repos/genshi/tags/0.4.1/ cmlenz@489: (May 21 2007, from branches/stable/0.4.x) cmlenz@456: cmlenz@456: * Fix incorrect reference to translation function in the I18N filter. cmlenz@458: * The `ET()` function now correctly handles attributes with a namespace. cmlenz@460: * XML declarations are now processed internally, as well as written to the cmlenz@460: output when XML serialization is used (ticket #111). cmlenz@462: * Added the functions `encode()` and `get_serializer()` to the `genshi.output` cmlenz@462: module, which provide a lower-level API to the functionality previously only cmlenz@462: available through `Stream.render()` and `Stream.serialize()`. cmlenz@464: * The `DocType` class now has a `get(name)` function that returns a `DOCTYPE` cmlenz@464: tuple for a given string. cmlenz@464: * Added frameset variants to the `DocType` constants for HTML 4.01 and XHTML cmlenz@464: 1.0. cmlenz@469: * Improved I18n extraction for pluralizable messages: for any translation cmlenz@469: function with multiple string arguments (such as ``ngettext``), a single cmlenz@469: item with a tuple of strings is yielded, instead an item for each string cmlenz@469: argument. cmlenz@471: * The `HTMLFormFiller` stream filter no longer alters form elements for which cmlenz@471: the data element contains no corresponding item. cmlenz@473: * Code in `` processing instructions no longer gets the special cmlenz@473: treatment as Python code in template expressions, i.e. item and attribute cmlenz@473: access are no longer interchangeable (which was broken in a number of ways cmlenz@473: anyway, see ticket #113). This change does not affect expressions. cmlenz@473: * Numerous fixes for the execution of Python code in `` processing cmlenz@473: instructions (tickets #113 and #114). cmlenz@479: * The `py:def` (and `#def`) directive now supports "star args" (i.e. `*args` cmlenz@479: and `**kwargs`) in the function declaration (ticket #116). cmlenz@456: cmlenz@456: cmlenz@276: Version 0.4 cmlenz@276: http://svn.edgewall.org/repos/genshi/tags/0.4.0/ cmlenz@452: (Apr 16 2007, from branches/stable/0.4.x) cmlenz@276: cmlenz@276: * New example applications for CherryPy and web.py. cmlenz@276: * The template loader now uses a LRU cache to limit the number of cached cmlenz@276: templates to a configurable maximum. Also, a race condition in the template cmlenz@276: loader was fixed by adding locking. cmlenz@276: * A new filter (genshi.filters.HTMLFormFiller) was added, which can populate cmlenz@276: HTML forms based on a dictionary of values. cmlenz@277: * The set of permitted tag and attribute names for the HTMLSanitizer can now cmlenz@277: be configured per instance. cmlenz@294: * The template engine plugin now supports a range of options for cmlenz@294: configuration, for example to set the default serialization method, the cmlenz@294: default output encoding, or the default DOCTYPE. cmlenz@302: * The ElementTree adaptation function `ET()` has moved into the `genshi.input` cmlenz@302: module. cmlenz@302: * Allow `when` directives to omit the test expression as long as the cmlenz@302: associated choose directive does have one. In that case, the when branch is cmlenz@302: followed if the expression of the choose directive evaluates to a truth cmlenz@302: value. cmlenz@317: * Unsuccessful attribute or item lookups now return `Undefined` objects for cmlenz@317: nicer error messages. cmlenz@336: * Split up the `genshi.template` module into multiple modules inside the new cmlenz@336: `genshi.template` package. cmlenz@343: * Results of expression evaluation are no longer implicitly called if they cmlenz@343: are callable. cmlenz@345: * Instances of the `genshi.core.Attrs` class are now immutable (they are cmlenz@345: subclasses of `tuple` instead of `list`). cmlenz@374: * `MarkupTemplate`s can now be instantiated from markup streams, in addition cmlenz@374: to strings and file-like objects (ticket #69). cmlenz@378: * Improve handling of incorrectly nested tags in the HTML parser. cmlenz@399: * Template includes can now be nested inside fallback content. cmlenz@399: * Expressions can now contain dict literals (ticket #37). cmlenz@399: * It is now possible to have one or more escaped dollar signs in front of a cmlenz@399: full expression (ticket #92). cmlenz@401: * The `Markup` class is now available by default in template expressions cmlenz@401: (ticket #67). cmlenz@411: * The handling of namespace declarations in XML/XHTML output has been improved. cmlenz@411: * The `Attrs` class no longer automatically wraps all attribute names in cmlenz@411: `QName` objects. This is now the responsibility of whoever is instantiating cmlenz@411: `Attrs` objects (for example, stream filters and generators). cmlenz@411: * Python code blocks are now supported using the `` processing cmlenz@411: instruction (ticket #84). cmlenz@442: * The way errors in template expressions are handled can now be configured. The cmlenz@442: option `LenientLookup` provides the same forgiving mode used in previous cmlenz@442: Genshi versions, while `StrictLookup` raises exceptions when undefined cmlenz@442: variables or members are accessed. The lenient mode is still the default in cmlenz@442: this version, but that may change in the future. (ticket #88) cmlenz@442: * If a variable is not necessarily defined at the top level of the template cmlenz@442: data, the new built-in functions `defined(key)` and `value_of(key, default)` cmlenz@442: can be used so that the template also works in strict lookup mode. These cmlenz@442: functions were previously only available when using Genshi via the template cmlenz@442: engine plugin (for compatibility with Kid). cmlenz@432: * `style` attributes are no longer allowed by the `HTMLSanitizer` by default. cmlenz@446: If they are explicitly added to the set of safe attributes, any unicode cmlenz@446: escapes in the attribute value are now handled properly. cmlenz@437: * Namespace declarations on conditional elements (for example using a `py:if` cmlenz@437: directive`) are no longer moved to the following element when the element cmlenz@437: originally carrying the declaration is removed from the stream (ticket #107). cmlenz@446: * Added basic built-in support for internationalizing templates by providing cmlenz@446: a new `Translator` class that can both extract localizable strings from a cmlenz@446: stream, and replace those strings with their localizations at render time. cmlenz@446: The code for this was largely taken from previous work done by Matt Good cmlenz@446: and David Fraser. cmlenz@365: cmlenz@365: cmlenz@387: Version 0.3.6 cmlenz@387: http://svn.edgewall.org/repos/genshi/tags/0.3.6/ cmlenz@387: (Dec 11 2006, from branches/stable/0.3.x) cmlenz@387: cmlenz@387: * The builder API now accepts streams as children of elements and fragments. cmlenz@387: cmlenz@387: cmlenz@365: Version 0.3.5 cmlenz@387: http://svn.edgewall.org/repos/genshi/tags/0.3.5/ cmlenz@365: (Nov 22 2006, from branches/stable/0.3.x) cmlenz@365: cmlenz@371: * Fix XPath traversal in match templates. Previously, `div/p` would be treated cmlenz@371: the same as `div//p`, i.e. it would match all descendants and not just the cmlenz@371: immediate children. cmlenz@365: * Preserve whitespace in HTML `
` elements also when they contain child
cmlenz@365:    elements.
cmlenz@365:  * Match templates no longer match their own output (ticket #77).
cmlenz@365:  * Blank lines before directives in text templates are now preserved as
cmlenz@365:    expected (ticket #62).
cmlenz@346: 
cmlenz@317: 
cmlenz@317: Version 0.3.4
cmlenz@317: http://svn.edgewall.org/repos/genshi/tags/0.3.4/
cmlenz@323: (Nov 2 2006, from branches/stable/0.3.x)
cmlenz@317: 
cmlenz@317:  * The encoding of HTML and XML files, as well as markup and text templates,
cmlenz@317:    can now be specified. Also, the encoding specified in XML declarations is
cmlenz@317:    now respected unless an expiclit encoding is requested.
cmlenz@317:  * Expressions used as arguments for `py:with`, `py:def`, and `py:for`
cmlenz@317:    directives can now contain non-ASCII strings.
cmlenz@285: 
cmlenz@285: 
cmlenz@288: Version 0.3.3
cmlenz@288: http://svn.edgewall.org/repos/genshi/tags/0.3.3/
cmlenz@302: (Oct 16 2006, from branches/stable/0.3.x)
cmlenz@288: 
cmlenz@288:  * Fixed bug introduced in 0.3.2 that broke the parsing of templates which
cmlenz@288:    declare the same namespace more than once in a nested fashion.
cmlenz@294:  * Fixed the parsing of HTML entity references inside attribute values, both
cmlenz@294:    in the `XMLParser` and the `HTMLParser` classes.
cmlenz@302:  * Some changes to usage of absolute vs. relative template paths to ensure that
cmlenz@302:    the filenamed-keyed cache employed by the TemplateLoader doesn't mix up
cmlenz@302:    templates with the same name, but from different subdirectories.
cmlenz@288: 
cmlenz@288: 
cmlenz@285: Version 0.3.2
cmlenz@285: http://svn.edgewall.org/repos/genshi/tags/0.3.2/
cmlenz@285: (Oct 12 2006, from branches/stable/0.3.x)
cmlenz@285: 
cmlenz@285:  * Exceptions from templates now contain the absolute path to the template file
cmlenz@285:    when a search path is used. This enables tracebacks to display the line in
cmlenz@285:    question.
cmlenz@285:  * The template engine plugin now provides three different types: "genshi" and
cmlenz@285:    "genshi-markup" map to markup templates, while "genshi-text" maps to text
cmlenz@285:    templates.
cmlenz@278:  * Fixed the namespace context used by XPath patterns in py:match templates.
cmlenz@278:    The were erroneously using the namespace context of the elements being
cmlenz@278:    matched, where they should rather use the context in which they were
cmlenz@278:    defined.
cmlenz@285:  * The contents of `