Edgewall Software

source: tags/0.6.1/ChangeLog

Last change on this file was 1229, checked in by hodgestar, 11 years ago

Merge r1228 from trunk (ChangeLog update).

  • Property svn:eol-style set to native
File size: 25.5 KB
Line 
1Version 0.6.1
2http://svn.edgewall.org/repos/genshi/tags/0.6.1/
3(Jan 27 2013, from branches/stable/0.6.x)
4
5 * Security fix to enhance sanitizing of CSS in style attributes. Genshi's
6   `HTMLSanitizer` disallows style attributes by default (this remains
7   unchanged) and warns against such attacks in its documentation, but
8   the provided CSS santizing is now less lacking (see #455).
9 * Fix for error in how `HTMLFormFiller` would handle `textarea` elements if
10   no value was not supplied form them.
11 * The `HTMLFormFiller` now correctly handles check boxes and radio buttons
12   with an empty `value` attribute.
13 * Template `Context` objects now have a `.copy` method.
14 * Added a simple `tox.ini` file for using tox to test against multiple
15   verions of Python.
16 * Fix for bug in `QName` comparison (see #413).
17 * Fix for bug in handling of trailing events in match template matches
18   (see #399).
19 * Fix i18n namespace declaration in documentation (see #400).
20 * Fix for bug in caching of events in serializers by no longer caching
21   `(TEXT, Markup)` events (see #429).
22 * Fix handling of `None` by `Markup.escape` in `_speedups.c` (see #439).
23 * Fix handling of internal state by match templates (relevant when multiple
24   templates match the same part of the stream, see #370).
25 * Fix handling of multiple events between or on either side of start and end
26   tags in translated messages (see #404).
27 * Fix test failures caused by changes in HTMLParser in Python 2.7 (see #501).
28 * Fix infinite loop in interplotation lexing that was introduced by a change
29   in Python 2.7's tokenizer (see #540).
30 * Fix handling of processing instructions without data (see #368).
31 * Updated MANIFEST.in so as not to rely on build from Subersion 1.6.
32
33
34Version 0.6
35http://svn.edgewall.org/repos/genshi/tags/0.6.0/
36(Apr 22 2010, from branches/stable/0.6.x)
37
38 * Support for Python 2.3 has been dropped.
39 * Rewrite of the XPath evaluation engine for better performance and improved
40   correctness. This is the result of integrating work done by Marcin Kurczych
41   during GSoC 2008.
42 * Updated the Python AST processing for template code evaluation to use the
43   `_ast` module instead of the deprecated `compiler` package, including an
44   adapter layer for Python 2.4. This, too, is the result of integrating work
45   done by  Marcin Kurczych during GSoC 2008.
46 * Added caching in the serialization stage for improved performance in some
47   cases.
48 * Various improvements to the HTML sanitization filter.
49 * Fix problem with I18n filter that would get confused by expressions in
50   attribute values when inside an `i18n:msg` block (ticket #250).
51 * Fix problem with the transformation filter dropping events after the
52   selection (ticket #290).
53 * `for` loops in template code blocks no longer establish their own locals
54   scope, meaning you can now access variables assigned in the loop outside
55   of the loop, just as you can in regular Python code (ticket #259).
56 * Import statements inside function definitions in template code blocks no
57   longer result in an UndefinedError when the imported name is accessed
58   (ticket #276).
59 * Fixed handling of relative URLs with fragment identifiers containing colons
60   in the `HTMLSanitizer` (ticket #274).
61 * Added an option to the `HTMLFiller` to also populate password fields.
62 * Match template processing no longer produces unwanted duplicate output in
63   some cases (ticket #254).
64 * Templates instantiated without a loader now get an implicit loader based on
65   their file path, or the current directory as a fallback (ticket #320).
66 * Added documentation for the `TemplateLoader`.
67 * Enhanced documentation for internationalization.
68
69
70Version 0.5.1
71http://svn.edgewall.org/repos/genshi/tags/0.5.1/
72(Jul 9 2008, from branches/stable/0.5.x)
73
74 * Fix problem with nested match templates not being applied when buffering
75   on the outer `py:match` is disabled. Thanks to Erik Bray for reporting the
76   problem and providing a test case!
77 * Fix problem in `Translator` filter that would cause the translation of
78   text nodes to fail if the translation function returned an object that was
79   not directly a string, but rather something like an instance of the
80   `LazyProxy` class in Babel (ticket #145).
81 * Fix problem with match templates incorrectly being applied multiple times.
82 * Includes from templates loaded via an absolute path now include the correct
83   file in nested directories as long if no search path has been configured
84   (ticket #240).
85 * Unbuffered match templates could result in parts of the matched content
86   being included in the output if the match template didn't actually consume
87   it via one or more calls to the `select()` function (ticket #243).
88
89
90Version 0.5
91http://svn.edgewall.org/repos/genshi/tags/0.5.0/
92(Jun 9 2008, from branches/stable/0.5.x)
93
94 * Added #include directive for text templates (ticket #115).
95 * Added new markup transformation filter contributed by Alec Thomas. This
96   provides gorgeous jQuery-inspired stream transformation capabilities based
97   on XPath expressions.
98 * When using HTML or XHTML serialization, the `xml:lang` attribute is
99   automatically translated to the `lang` attribute which HTML user agents
100   understand.
101 * Added support for the XPath 2 `matches()` function in XPath expressions,
102   which allow matching against regular expressions.
103 * Support for Python code blocks in templates can now be disabled
104   (ticket #123).
105 * Includes are now processed when the template is parsed if possible, but
106   only if the template loader is not set to do automatic reloading. Included
107   templates are basically inlined into the including template, which can
108   speed up rendering of that template a bit.
109 * Added new syntax for text templates, which is more powerful and flexible
110   with respect to white-space and line breaks. It also supports Python code
111   blocks. The old syntax is still available and the default for now, but in a
112   future release the new syntax will become the default, and some time after
113   that the old syntax will be removed.
114 * Added support for passing optimization hints to `<py:match>` directives,
115   which can speed up match templates in many cases, for example when a match
116   template should only be applied once to a stream, or when it should not be
117   applied recursively.
118 * Text templates now default to rendering as plain text; it is no longer
119   necessary to explicitly specify the "text" method to the `render()` or
120   `serialize()` method of the generated markup stream.
121 * XInclude elements in markup templates now support the `parse` attribute;
122   when set to "xml" (the default), the include is processed as before, but
123   when set to "text", the included template is parsed as a text template using
124   the new syntax (ticket #101).
125 * Python code blocks inside match templates are now executed (ticket #155).
126 * The template engine plugin no longer adds the `default_doctype` when the
127   `fragment` parameter is `True`.
128 * The `striptags` function now also removes HTML/XML-style comments (ticket
129   #150).
130 * The `py:replace` directive can now also be used as an element, with an
131   attribute named `value` (ticket #144).
132 * The `TextSerializer` class no longer strips all markup in text by default,
133   so that it is still possible to use the Genshi `escape` function even with
134   text templates. The old behavior is available via the `strip_markup` option
135   of the serializer (ticket #146).
136 * Assigning to a variable named `data` in a Python code block no longer
137   breaks context lookup.
138 * The `Stream.render` now accepts an optional `out` parameter that can be
139   used to pass in a writable file-like object to use for assembling the
140   output, instead of building a big string and returning it.
141 * The XHTML serializer now strips `xml:space` attributes as they are only
142   allowed on very few tags.
143 * Match templates are now applied in a more controlled fashion: in the order
144   they are declared in the template source, all match templates up to (and
145   including) the matching template itself are applied to the matched content,
146   whereas the match templates declared after the matching template are only
147   applied to the generated content (ticket #186).
148 * The `TemplateLoader` class now provides an `_instantiate()` method that can
149   be overridden by subclasses to implement advanced template instantiation
150   logic (ticket #204).
151 * The search path of the `TemplateLoader` class can now contain ''load
152   functions'' in addition to path strings. A load function is passed the
153   name of the requested template file, and should return a file-like object
154   and some metadata. New load functions are supplied for loading from egg
155   package data, and loading from different loaders depending on the path
156   prefix of the requested filename (ticket #182).
157 * Match templates can now be processed without keeping the complete matched
158   content in memory, which could cause excessive memory use on long pages.
159   The buffering can be disabled using the new `buffer` optimization hint on
160   the `<py:match>` directive.
161 * Improve error reporting when accessing an attribute in a Python expression
162   raises an `AttributeError` (ticket #191).
163 * The `Markup` class now supports mappings for right hand of the `%` (modulo)
164   operator in the same way the Python string classes do, except that the
165   substituted values are escape. Also, the special constructor which took
166   positional arguments that would be substituted was removed. Thus the
167   `Markup` class now supports the same arguments as that of its `unicode`
168   base class (ticket #211).
169 * The `Template` class and its subclasses, as well as the interpolation API,
170   now take an `filepath` parameter instead of `basedir` (ticket #207).
171 * The `XHTMLSerializer` now has a `drop_xml_decl` option that defaults to
172   `True`. Setting it to `False` will cause any XML decl in the serialized
173   stream to be included in the output as it would for XML serialization.
174 * Add support for a protocol that would allow interoperability of different
175   Python packages that generate and/or consume markup, based on the special
176   `__html__()` method (ticket #202).
177
178
179Version 0.4.4
180http://svn.edgewall.org/repos/genshi/tags/0.4.4/
181(Aug 14, 2007, from branches/stable/0.4.x)
182
183 * Fixed augmented assignment to local variables in Python code blocks.
184 * Fixed handling of nested function and class definitions in Python code
185   blocks.
186 * Includes were not raising `TemplateNotFound` exceptions even when no
187   fallback has been specified. That has been corrected.
188 * The template loader now raises a `TemplateNotFound` error when a previously
189   cached template is removed or renamed, where it previously was passing up
190   an `OSError`.
191 * The Genshi I18n filter can be configured to only extract messages found in
192   `gettext` function calls, ignoring any text nodes and attribute values
193   (ticket #138).
194
195
196Version 0.4.3
197http://svn.edgewall.org/repos/genshi/tags/0.4.3/
198(Jul 17 2007, from branches/stable/0.4.x)
199
200 * The I18n filter no longer extracts or translates literal strings in
201   attribute values that also contain expressions.
202 * Added `loader_callback` option to plugin interface, which allows specifying
203   a callback function that the template loader should invoke whenever a new
204   template is loaded (ticket #130). Note that the value for this option can
205   not be specified as a string, only as an actual function object, which means
206   it is not available for use through configuration files.
207 * The I18n filter now extracts messages from gettext functions even inside
208   ignored tags (ticket #132).
209 * The HTML sanitizer now strips any CSS comments in style attributes, which
210   could previously be used to hide malicious property values.
211 * The HTML sanitizer now also removes any HTML comments encountered, as those
212   may be used to hide malicious payloads targetting a certain "innovative"
213   browser that goes and interprets the content of specially prepared comments.
214 * Attribute access in template expressions no longer silently ignores
215   exceptions other than `AttributeError` raised in the attribute accessor.
216
217
218Version 0.4.2
219http://svn.edgewall.org/repos/genshi/tags/0.4.2/
220(Jun 20 2007, from branches/stable/0.4.x)
221
222 * The `doctype` parameter of the markup serializers now also accepts the "name"
223   of the doctype as string, in addition to the `(name, pubid, sysid)` tuple.
224 * The I18n filter was not replacing the original attributes with the
225   translation, but instead adding a second attribute with the same name.
226 * `TextTemplate` can now handle unicode source (ticket #125).
227 * A `<?python ?>` processing instruction containing trailing whitespace no
228   longer causes a syntax error (ticket #127).
229 * The I18n filter now skips the content of elements that have an `xml:lang`
230   attribute with a fixed string value. Basically, `xml:lang` can now be used
231   as a flag to mark specific sections as not needing localization.
232 * Added plugin for message extraction via Babel (http://babel.edgewall.org/).
233
234
235Version 0.4.1
236http://svn.edgewall.org/repos/genshi/tags/0.4.1/
237(May 21 2007, from branches/stable/0.4.x)
238
239 * Fix incorrect reference to translation function in the I18N filter.
240 * The `ET()` function now correctly handles attributes with a namespace.
241 * XML declarations are now processed internally, as well as written to the
242   output when XML serialization is used (ticket #111).
243 * Added the functions `encode()` and `get_serializer()` to the `genshi.output`
244   module, which provide a lower-level API to the functionality previously only
245   available through `Stream.render()` and `Stream.serialize()`.
246 * The `DocType` class now has a `get(name)` function that returns a `DOCTYPE`
247   tuple for a given string.
248 * Added frameset variants to the `DocType` constants for HTML 4.01 and XHTML
249   1.0.
250 * Improved I18n extraction for pluralizable messages: for any translation
251   function with multiple string arguments (such as ``ngettext``), a single
252   item with a tuple of strings is yielded, instead an item for each string
253   argument.
254 * The `HTMLFormFiller` stream filter no longer alters form elements for which
255   the data element contains no corresponding item.
256 * Code in `<?python ?>` processing instructions no longer gets the special
257   treatment as Python code in template expressions, i.e. item and attribute
258   access are no longer interchangeable (which was broken in a number of ways
259   anyway, see ticket #113). This change does not affect expressions.
260 * Numerous fixes for the execution of Python code in `<?python ?>` processing
261   instructions (tickets #113 and #114).
262 * The `py:def` (and `#def`) directive now supports "star args" (i.e. `*args`
263   and `**kwargs`) in the function declaration (ticket #116).
264
265
266Version 0.4
267http://svn.edgewall.org/repos/genshi/tags/0.4.0/
268(Apr 16 2007, from branches/stable/0.4.x)
269
270 * New example applications for CherryPy and web.py.
271 * The template loader now uses a LRU cache to limit the number of cached
272   templates to a configurable maximum. Also, a race condition in the template
273   loader was fixed by adding locking.
274 * A new filter (genshi.filters.HTMLFormFiller) was added, which can populate
275   HTML forms based on a dictionary of values.
276 * The set of permitted tag and attribute names for the HTMLSanitizer can now
277   be configured per instance.
278 * The template engine plugin now supports a range of options for
279   configuration, for example to set the default serialization method, the
280   default output encoding, or the default DOCTYPE.
281 * The ElementTree adaptation function `ET()` has moved into the `genshi.input`
282   module.
283 * Allow `when` directives to omit the test expression as long as the
284   associated choose directive does have one. In that case, the when branch is
285   followed if the expression of the choose directive evaluates to a truth
286   value.
287 * Unsuccessful attribute or item lookups now return `Undefined` objects for
288   nicer error messages.
289 * Split up the `genshi.template` module into multiple modules inside the new
290   `genshi.template` package.
291 * Results of expression evaluation are no longer implicitly called if they
292   are callable.
293 * Instances of the `genshi.core.Attrs` class are now immutable (they are
294   subclasses of `tuple` instead of `list`).
295 * `MarkupTemplate`s can now be instantiated from markup streams, in addition
296   to strings and file-like objects (ticket #69).
297 * Improve handling of incorrectly nested tags in the HTML parser.
298 * Template includes can now be nested inside fallback content.
299 * Expressions can now contain dict literals (ticket #37).
300 * It is now possible to have one or more escaped dollar signs in front of a
301   full expression (ticket #92).
302 * The `Markup` class is now available by default in template expressions
303   (ticket #67).
304 * The handling of namespace declarations in XML/XHTML output has been improved.
305 * The `Attrs` class no longer automatically wraps all attribute names in
306   `QName` objects. This is now the responsibility of whoever is instantiating
307   `Attrs` objects (for example, stream filters and generators).
308 * Python code blocks are now supported using the `<?python ?>` processing
309   instruction (ticket #84).
310 * The way errors in template expressions are handled can now be configured. The
311   option `LenientLookup` provides the same forgiving mode used in previous
312   Genshi versions, while `StrictLookup` raises exceptions when undefined
313   variables or members are accessed. The lenient mode is still the default in
314   this version, but that may change in the future. (ticket #88)
315 * If a variable is not necessarily defined at the top level of the template
316   data, the new built-in functions `defined(key)` and `value_of(key, default)`
317   can be used so that the template also works in strict lookup mode. These
318   functions were previously only available when using Genshi via the template
319   engine plugin (for compatibility with Kid).
320 * `style` attributes are no longer allowed by the `HTMLSanitizer` by default.
321   If they are explicitly added to the set of safe attributes, any unicode
322   escapes in the attribute value are now handled properly.
323 * Namespace declarations on conditional elements (for example using a `py:if`
324   directive`) are no longer moved to the following element when the element
325   originally carrying the declaration is removed from the stream (ticket #107).
326 * Added basic built-in support for internationalizing templates by providing
327   a new `Translator` class that can both extract localizable strings from a
328   stream, and replace those strings with their localizations at render time.
329   The code for this was largely taken from previous work done by Matt Good
330   and David Fraser.
331
332
333Version 0.3.6
334http://svn.edgewall.org/repos/genshi/tags/0.3.6/
335(Dec 11 2006, from branches/stable/0.3.x)
336
337 * The builder API now accepts streams as children of elements and fragments.
338
339
340Version 0.3.5
341http://svn.edgewall.org/repos/genshi/tags/0.3.5/
342(Nov 22 2006, from branches/stable/0.3.x)
343
344 * Fix XPath traversal in match templates. Previously, `div/p` would be treated
345   the same as `div//p`, i.e. it would match all descendants and not just the
346   immediate children.
347 * Preserve whitespace in HTML `<pre>` elements also when they contain child
348   elements.
349 * Match templates no longer match their own output (ticket #77).
350 * Blank lines before directives in text templates are now preserved as
351   expected (ticket #62).
352
353
354Version 0.3.4
355http://svn.edgewall.org/repos/genshi/tags/0.3.4/
356(Nov 2 2006, from branches/stable/0.3.x)
357
358 * The encoding of HTML and XML files, as well as markup and text templates,
359   can now be specified. Also, the encoding specified in XML declarations is
360   now respected unless an expiclit encoding is requested.
361 * Expressions used as arguments for `py:with`, `py:def`, and `py:for`
362   directives can now contain non-ASCII strings.
363
364
365Version 0.3.3
366http://svn.edgewall.org/repos/genshi/tags/0.3.3/
367(Oct 16 2006, from branches/stable/0.3.x)
368
369 * Fixed bug introduced in 0.3.2 that broke the parsing of templates which
370   declare the same namespace more than once in a nested fashion.
371 * Fixed the parsing of HTML entity references inside attribute values, both
372   in the `XMLParser` and the `HTMLParser` classes.
373 * Some changes to usage of absolute vs. relative template paths to ensure that
374   the filenamed-keyed cache employed by the TemplateLoader doesn't mix up
375   templates with the same name, but from different subdirectories.
376
377
378Version 0.3.2
379http://svn.edgewall.org/repos/genshi/tags/0.3.2/
380(Oct 12 2006, from branches/stable/0.3.x)
381
382 * Exceptions from templates now contain the absolute path to the template file
383   when a search path is used. This enables tracebacks to display the line in
384   question.
385 * The template engine plugin now provides three different types: "genshi" and
386   "genshi-markup" map to markup templates, while "genshi-text" maps to text
387   templates.
388 * Fixed the namespace context used by XPath patterns in py:match templates.
389   The were erroneously using the namespace context of the elements being
390   matched, where they should rather use the context in which they were
391   defined.
392 * The contents of `<script>` and `<style>` elements are no longer escaped when
393   serializing to HTML but declaring the XHTML namespace in the template.
394 * Improved error message raised when using the `py:for` directive on an object
395   that is not iterable (ticket #60).
396 * Fixed the XPath function `starts-with()` which was always returning true
397   (ticket #61).
398
399
400Version 0.3.1
401http://svn.edgewall.org/repos/genshi/tags/0.3.1/
402(Sep 22 2006, from branches/stable/0.3.x)
403
404 * Includes and user-defined filters were not getting the correct context data
405   when used inside a match template (ticket #56).
406 * XPath patterns using the union operator (`|`) were returning only partial
407   results in some cases.
408
409
410Version 0.3
411http://svn.edgewall.org/repos/genshi/tags/0.3.0/
412(Sep 17 2006, from branches/stable/0.3.x)
413
414 * The project name was changed from "Markup" to "Genshi". See UPGRADE.txt
415   for upgrade instructions.
416 * Expression evaluation now differentiates between undefined variables and
417   variables that are defined but set to `None`. This also means that local
418   variables can override built-ins even if the local variable are set to
419   `None` (ticket #36).
420 * The plugin implementation now makes more functions available for use inside
421   templates: XML(), HTML(), defined(), and value-of(). These are mostly for
422   migration from Kid.
423 * The parsing of `py:with` directives has been improved: you can now assign
424   to multiple names, and semicolons inside string literals are treated as
425   expected.
426 * Generator expressions can now be used in template expressions (ticket #16).
427 * Added serialization to plain text (ticket #41).
428 * Calling functions from template expressions with *args and/or **kwargs
429   now works correctly (ticket #42).
430 * The `TemplateLoader` class and the `Template` instances that it manages are
431   now thread-safe, as they no longer keep any state related to the current
432   processing context.
433 * Stream filters and serializers can now be applied using the "pipe" (bitwise
434   or) operator "|".
435 * The execution of named template functions (`py:def`) no longer silently
436   swallows TypeError exceptions (ticket #44).
437 * The XML Parser now correctly handles unicode input (ticket #43).
438 * HTML entities can now be used in templates without having to declare an HTML
439   document type.
440 * Error reporting on undefined entities has been fixed.
441 * Fix traversal of substreams by XPath expressions. For example, the path
442   '*/*' no longer matches non-immediate child elements, and '@*' no longer
443   matches the attributes of descendants.
444 * Fixes for `py:match` which would get confused when it should be applied
445   to multiple elements (ticket #49).
446 * Using namespace prefixes in XPath expressions is now supported.
447 * Expressions now correctly handle slices (ticket #51).
448 * A simple text-based template language is now included for generating
449   plain text output (ticket #47).
450
451
452Version 0.2
453http://svn.edgewall.org/repos/genshi/tags/0.2.0/
454(Aug 22 2006, from branches/stable/0.2.x)
455
456 * XPath syntax errors now contain position info (ticket #20).
457 * Errors in expression evaluation now contain the correct line number in the
458   template (ticket #22).
459 * <script> and <style> element contents are no longer escaped when using HTML
460   serialization (ticket #24).
461 * In some cases expressions in templates did not get interpolated (ticket
462   #26).
463 * CDATA sections are now passed through the pipeline and serialized correctly.
464   That allows using <script> or <style> elements in XHTML output that is still
465   compatible with HTML user agents.
466 * The XHTML serializer now correctly handles elements in foreign namespaces
467   (such as SVG or MathML).
468 * Fixed relative includes in templates on Windows (ticket #27).
469 * Output can be encoded using legacy codecs such as ISO-8859-1. Any character
470   not representable in the chosen encoding gets replaced by the corresponding
471   XML character reference.
472 * String literals in XPath expressions that contain spaces are now parsed
473   as expected.
474 * Added support for the XPath functions boolean(), ceiling(), concat(),
475   contains(), false(), floor(), normalize-space(), number(), round(),
476   starts-with(), string-length(), substring(), substring-after(),
477   substring-before(), translate(), and true().
478 * Non-ASCII characters in expressions should now be handled correctly (ticket
479   #29).
480 * Default values for arguments of template functions now also work with
481   constants and complex expressions (they only worked for string or number
482   literals before).
483 * XPath expressions in now support XPath variables ($var) in predicates
484   (ticket #31).
485 * Expressions in templates can now span multiple lines if they are enclosed
486   in curly braces.
487 * py:def macros can now be invoked from within expressions inside attribute
488   values (ticket #34).
489
490
491Version 0.1
492http://svn.edgewall.org/repos/genshi/tags/0.1.0/
493(Aug 3 2006, from branches/stable/0.1.x)
494
495 * First public release
Note: See TracBrowser for help on using the repository browser.