root/livinglogic.python.xist/NEWS.rst @ 3721:97cae619a257

Revision 3721:97cae619a257, 87.7 KB (checked in by Walter Doerwald <walter@…>, 10 years ago)

Fix typo.

Line 
1Changes in 3.6.4 (released 03/19/2009)
2--------------------------------------
3
4*   A new UL4 method ``join`` has been added. It works like the Python string
5    method join.
6
7*   :mod:`ll.misc` has three new functions: :func:`gzip` und :func:`gunzip` can
8    be used for compressing and uncompressing byte strings with gzip.
9    :func:`jsmin` can be used to minify Javascript source.
10
11*   Parsing an empty string with ``tidy=True`` in
12    :func:`ll.xist.parsers.parsestring` now works again.
13
14
15Changes in 3.6.3 (released 03/02/2009)
16--------------------------------------
17
18*   The xfind operators ``attrhasvalue````attrhasvalue_xml``,
19    ``attrcontains``, ``attrcontains_xml``, ``attrstartswith``,
20    ``attrstartswith_xml``, ``attrendswith``, ``attrendswith_xml``, ``hasid``
21    and ``hasclass`` now support multiple values. The operator matches the
22    node if it matches with any of the given values.
23
24*   A new function ``reversed`` is now available in UL4 templates. It returns
25    an iterator that will output the items of any sequence in reverse order.
26
27
28Changes in 3.6.2 (released 02/16/2009)
29--------------------------------------
30
31*   Inside UL4 templates rendering other templates can now be done with the new
32    ``render`` method. This method returns the template output as a string.
33    Passing parameters can be done via keyword arguments or with the ``**``
34    syntax like when using the ``render`` tag.
35
36*   A new version of the ``int`` function has been added to UL4: When called with
37    two arguments, the first must be a string, and the second is treated as the
38    base for the conversion.
39
40
41Changes in 3.6.1 (released 01/27/2009)
42--------------------------------------
43
44*   Generating the Python source from an UL4 template is now 20-25% faster.
45
46*   Fixed a buffer overrun in the C portions of the url module.
47
48*   Added a class :class:`addattr` to :mod:`ll.xist.xsc`. This can be used
49    to extend XML attributes via ``with`` blocks.
50
51*   Added the function :func:`ll.xist.ns.jsp.fromul4` which can turn an UL4
52    template into JSP source code.
53
54
55Changes in 3.6 (released 12/31/2008)
56------------------------------------
57
58*   The following :class:`Color` class methods have been dropped: ``fromrgba``,
59    ``fromrgba4``, ``fromrgba8``, ``fromint4``, ``fromint8``.
60
61*   The following :class:`Color` properties have been dropped: ``r4``, ``g4``,
62    ``b4``, ``a4``, ``r8``, ``g8``, ``b8``, ``a8``, ``r``, ``g``, ``b````a``
63    ``int4``, ``int8``, ``rgb4``, ``rgba4``, ``rgb8``, and ``rgba8`` have been
64    dropped. The new methods ``r``, ``g``, ``b`` and ``a`` return the 8 bit
65    component values.
66
67*   The class methods ``fromhsva`` and ``fromhlsa`` have been renamed to
68    ``fromhsv`` and ``fromhls``.
69
70*   The property ``css`` has been dropped. Instead the CSS string is returned
71    by ``__str__``.
72
73*   Dividing color now does a scalar division. Blending colors is now done with
74    the modulo operator.
75
76*   Support for color objects has been added to UL4.
77
78*   The XPIT templating language and :class:`ll.make.XPITAction` have been
79    removed.
80
81*   Fixed a bug in :meth:`ll.make.CacheAction.get`: The action must return real
82    data when called with ``bigbang`` as the timestamp.
83
84*   :class:`ll.make.UL4RenderAction` has been fixed.
85
86
87Changes in 3.5 (released 12/05/2008)
88------------------------------------
89
90*   A new function ``json`` has been added to UL4: This function returns a
91    JSON dump of the object passed in (this requires either :mod:`simplejson`
92    or Python 2.6).
93
94*   The UL4 function ``csvescape`` has been renamed to ``csv``.
95
96*   A new option :option:`--showregistration`/:option:`-r` has been added to
97    make scripts.
98
99*   :mod:`ll.make` now supports Growl__ notifications on Mac OS X. To activate
100    it set the ``LL_MAKE_GROWL`` environment variable to ``1`` or use the ``-g``
101    or ``--growl`` options.
102
103    __ http://growl.info/
104
105*   :mod:`ll.make` has a new action class :class:`JavascriptMinifyAction` for
106    minimizing Javascript source.
107
108*   :class:`ll.color.Color` has been rewritten to create immutable objects
109    with the components being 8 bit values (i.e. 0-255) instead of floating
110    point values between 0 and 1. An alpha component has been added.
111
112*   A ``strong`` element has been added to the :mod:`ll.xist.ns.doc`
113    namespace.
114
115
116Changes in 3.4.4 (released 09/16/2008)
117--------------------------------------
118
119*   Fixed a bug in :meth:`ll.make.JoinAction.execute`.
120
121
122Changes in 3.4.3 (released 09/09/2008)
123--------------------------------------
124
125*   :func:`css.applystylesheets` could no longer handle style declarations
126    containing comments. This has been fixed now.
127
128
129Changes in 3.4.2 (released 09/03/2008)
130--------------------------------------
131
132*   Parsing didn't work when :var:`tidy` was set to true and a :var:`base`
133    argument was given. This has been fixed now.
134
135
136Changes in 3.4.1 (released 08/29/2008)
137--------------------------------------
138
139*   Bugs with thread local storage have been fixed so using :class:`xsc.Pool`,
140    :class:`xsc.build` and URL contexts in ``with`` blocks in multithreaded
141    applications should work now.
142
143
144Changes in 3.4 (released 08/19/2008)
145------------------------------------
146
147*   Templates can no longer be passed as a separate dictionary to UL4 templates
148    but are passed as variables like other data objects too.
149
150*   Strings in UL4 have gained a new method ``capitalize``.
151
152*   Printing XML escaped strings in UL4 has now gained its own tag and opcode.
153    ``<?printx foo?>`` is equivalent to ``<?print xmlescape(foo)?>``.
154
155*   Exception handling in UL4 has been rewritten to allow proper error reporting
156    when calling nested templates.
157
158*   UL4 has gained a new function ``zip``. It can be called with two or three
159    arguments and does what :func:`itertools.zip` does.
160
161*   UL4 has gained another new function: ``type`` returns the type of its
162    argument as a string.
163
164*   UL4 now supports tuple unpacking in ``<?for?>`` tags with three variables.
165
166*   UL4 has a new tag for comments: ``<?note This is comment?>``.
167
168*   A new script ``db2ul4.py`` has been added that can render UL4 templates with
169    database content.
170
171*   In UL4s ``<?render?>`` tags it's now possible to pass along a complete
172    argument dictionary via the ``**arg`` syntax just like in Python. This syntax
173    can even be used multiple times in the call. This syntax is available in
174    dictionary literals too, i.e. ``{1:2, 3:4}`` and ``{**{1:2}, **{3:4}}`` are
175    equivalent.
176
177*   A new UL4 function ``get`` has been added that works similar to the
178    dictionary method ``get``, but works with global variables.
179
180*   The missing processing instruction :class:`render` has been added to
181    :mod:`ll.xist.ns.ul4`.
182
183*   :mod:`xml_codec` now partially works, even if the C module is missing. As
184    long as you explicitly specify an encoding on parsing and publishing it
185    should work.
186
187*   A new processing instruction class :class:`ll.xist.AttrProcInst` has been
188    introduced. When an :class:`AttrProcInst` node is the first node in an
189    attribute, it takes over publishing of the attribute. In all other cases
190    the processing instruction disappears completely. UL4 uses this to implement
191    "conditional attributes" (via the new classes :class:`attr_if` and
192    :class:`attr_ifnn`).
193
194*   Building trees with ``with`` blocks has changed slightly. Nodes used in
195    ``with`` blocks and with ``+`` are now passed to a ``with`` handler instead
196    of building the tree directly. This fixes a problem when nested
197    :meth:`convert` calls use ``with`` blocks.
198
199*   The element :class:`ll.xist.ns.form.memo` has been renamed to
200    :class:`textarea` and :class:`ll.xist.ns.form.edit` has been renamed to
201    :class:`text`. Classes :class:`ll.xist.ns.form.button` and
202    :class:`ll.xist.ns.form.file` have been added.
203
204*   Iterating through the inputs in :mod:`ll.make` actions has been fixed (i.e.
205    the additional inputs will be output too). :meth:`ll.make.Project.findpaths`
206    has been fixed to work with non-:class:`ll.make.Action` inputs. (This means
207    that now you *have* to pass a real registered target action to
208    :meth:`findpaths` not just its key).
209
210*   :mod:`ll.make` has gained a new action: :class:`XISTStringAction` publishes
211    an XIST node as a unicode string. :class:`XISTPublishAction` has been renamed
212    to :class:`XISTBytesAction`.
213
214*   Fixed a bug in the caching logic in :meth:`ll.make.CacheAction`.
215
216*   :class:`ll.make.CallMethAction` has been renamed to :class:`CallAttrAction`
217    because it can be used to e.g. call functions in a module too.
218
219*   The properties ``showaction``, ``showstep`` and ``shownote`` of
220    :class:`ll.make.Project` object can now be assigned booleans as well (which
221    results in *all* or *no* actions being shown.
222
223*   The version number for :mod:`cssutils` has been bumped to 0.9.5.1.
224
225
226Changes in 3.3.2 (released 07/15/2008)
227--------------------------------------
228
229*   Dictionaries in UL4 have gained a new method ``get``.
230
231*   The version number for :mod:`cssutils` has been bumped again (to 0.9.5rc2
232    or a later 0.9.5 version).
233
234*   Fixed a bug in the parsing of slice expressions in UL4.
235
236*   :mod:`ll.make` has gained a new :class:`UL4RenderAction` action.
237
238*   Fixed a bug in the formatting for the ``getslice2`` opcode for UL4.
239
240
241Changes in 3.3.1 (released 07/14/2008)
242--------------------------------------
243
244*   Fixed a bug in the implementation of the "not" operator in UL4.
245
246*   When the UL4 compiler encounters unclosed blocks, it will now include the
247    start location of the block in the error message.
248
249
250Changes in 3.3 (released 07/11/2008)
251------------------------------------
252
253*   XIST has gained its fourth templating language: ``UL4`` the
254    "Universal Layout Language". This templating language is similar in
255    capabilities to `Djangos templating language`__. However ``UL4`` templates
256    are compiled to a bytecode format, which makes it possible to implement
257    template renderers in other languages and makes the template code "secure"
258    (i.e.template code can't open or delete files).
259
260    __ http://www.djangoproject.com/documentation/templates/
261
262*   :mod:`ll.make` has gained new actions: :class:`GZipAction`,
263    :class:`GUnzipAction`, :class:`CallFuncAction`:class:`CallMethAction`,
264    :class:`UL4CompileAction`, :class:`UL4DumpAction` and :class:`UL4LoadAction`.
265
266*   The version number for :mod:`cssutils` has been bumped to 0.9.5rc1.
267
268*   Nodes of type :class:`ll.xist.xsc.Comment` and :class:`ll.xist.xsc.DocType`
269    inside of attributes are now simply ignored when publishing instead of
270    generating an exception.
271
272*   All actions in :mod:`ll.make` no longer check whether their inputs are
273    action objects. Non-action objects are simply treated as ancient input data.
274    This also means that most action classes have an :var:`input` parameter in
275    their constructor again, as this input could now be a constant.
276
277*   Most attributes of action objects in :mod:`ll.make` can now be action objects
278    themselves, so for example the name of the encoding to be used in an
279    :class:`EncodeAction` can be the output of another action.
280
281*   :class:`ll.make.ImportAction` has been dropped as now the module object can
282    be used directly (e.g. as the input for an :class:`XISTPoolAction` object).
283
284*   :func:`ll.misc.xmlescape` now escapes ``'`` as ``&#39;`` for IE compatibility.
285
286*   Functions :func:`ll.misc.xmlescape_text` and :func:`ll.misc.xmlescape_attr`
287    have been added that implement the functionality from XIST 3.2.5 and earlier.
288
289*   The default parser for XIST is expat now. To switch back to sgmlop simply
290    pass an :class:`SGMLOPParser` object to the parsing functions::
291
292        >>> from ll.xist import parsers
293        >>> node = parsers.parsestring("<a>", parser=parsers.SGMLOPParser())
294
295*   TOXIC has been split into a compiler module :mod:`ll.toxicc` and an XIST
296    namespace :mod:`ll.xist.ns.toxic`. TOXIC now supports output for
297    SQL Server. The function :func:`xml2ora` as been renamed to :func:`compile`
298    (and has a new :var:`mode` argument for specifying the database type).
299
300*   The :var:`targetroot` parameter for :meth:`ll.make.XISTConvertAction.__init__`
301    has been renamed to :var:`root`.
302
303
304Changes in 3.2.7 (released 05/16/2008)
305--------------------------------------
306
307*   Added the missing file ``_misc_include.c`` to the distribution archives.
308
309
310Changes in 3.2.6 (released 05/07/2008)
311--------------------------------------
312
313*   A new action class :class:`EvalAction` has been added to :mod:`ll.make`.
314
315*   :func:`ll.xist.helpers.escapetext` and :func:`ll.xist.helpers.escapeattr`
316    have been merged into one function that escapes all special characters
317    (including ``'`` and ``"``) and has been renamed/moved to
318    :func:`ll.misc.xmlescape`.
319
320*   Python versions of all the functions in the module :mod:`ll.misc` have been
321    added. Those versions will be used in case the C module is not available.
322
323
324Changes in 3.2.5 (released 04/11/2008)
325--------------------------------------
326
327*   A refcounting bug in the attribute parsing code of :mod:`sgmlop` has been
328    fixed.
329
330*   The helper function :func:`cssescapereplace` has been removed, as it's no
331    longer needed.
332
333*   Pure Python versions of :func:`helpers.excapetext` and
334    :func:`helpers.escapeattr` have been added, in case the C module is not
335    available.
336
337
338Changes in 3.2.4 (released 04/02/2008)
339--------------------------------------
340
341*   The following functions have been added to :mod:`ll.xist.css`:
342    :func:`parsestring`, :func:`parsestream`, :func:`parsefile`, :func:`parseurl`
343    and :func:`write`. They parse CSS resources and are similar to the XML/HTML
344    parsing functions in that they apply the specified base URL to all URLs in
345    the style sheet.
346
347*   :mod:`cssutils` 0.9.5b2 is required now.
348
349*   :func:`ll.xist.css.iterrules` and :func:`ll.xist.css.applystylesheets` now
350    support specifying whether the preferred stylesheets or an alternate
351    stylesheet group should be used.
352
353*   :meth:`ll.xist.xsc.ProcInst.__mul__` and
354    :meth:`ll.xist.xsc.ProcInst.__rmul__` now return a fragment containing
355    the node repeated a number of times instead of one processing instruction
356    node containing repeated content.
357
358*   The constructor for :class:`ll.xist.parsers.ExpatParser` now takes two
359    additional arguments:
360
361    :var:`xmldecl`
362        If this is true the XML declaration will appear in the resulting XIST
363        tree.
364
365    :var:`doctype`
366        If this is true the doctype declaration will appear in the resulting
367        XIST tree (however any internal DTD subset will be dropped).
368
369
370Changes in 3.2.3 (released 03/04/2008)
371--------------------------------------
372
373*   :mod:`cssutils` 0.9.5 is used now. This simplifies the implementation of
374    :func:`css.selector`.
375
376*   A function :func:`ll.xist.css.geturls` has been added. This returns a list of
377    all the URLs in a :mod:`cssutils` stylesheet.
378
379*   :func:`toxic.xml2ora` now treats unknown processing instructions as text.
380    This makes it possible to e.g. output an XML header via toxic.
381
382*   The pseudo-elements in :mod:`ll.xist.ns.jsp` are no longer in a namespace,
383    so they will always be published without any prefixes.
384
385
386Changes in 3.2.2 (released 02/25/2008)
387--------------------------------------
388
389*   A new method :meth:`replaceurls` has been added to
390    :class:`ll.xist.xsc.StyleAttr`. With this method all URLs in a ``style``
391    attribute can be replaced.
392
393*   Fixed a bug in :meth:`ll.xist.parsers.SGMLOPParser.begin`: The encoding
394    wasn't passed properly to the XML decoder.
395
396*   :meth:`ll.xist.xsc.ProcInst.publish` now calls the :meth:`checkvalid`
397    method too.
398
399
400Changes in 3.2.1 (released 02/05/2008)
401--------------------------------------
402
403*   It's now possible to force the publisher to output certain ``xmlns``
404    attributes via the :var:`showxmlns` argument to the :class:`Publisher`
405    constructor.
406
407
408Changes in 3.2 (released 02/01/2008)
409------------------------------------
410
411*   The core package has been moved into XIST, installing XIST now only requires
412    *one* package.
413
414*   :mod:`ll.toxic` has been moved into XIST and is now available as
415    :mod:`ll.xist.ns.toxic`.
416
417*   When a :class:`ll.make.XISTParseAction` object is executed the content of
418    the pool will now be extended by the content of the pool from the
419    :class:`XISTPoolAction` instead of being replaced.
420
421*   :class:`ll.make.Pool` and :class:`ll.xist.xsc.Pool` no longer use a
422    :class:`WeakValueDictionary`, but a simple :class:`dict`. This means they
423    can now store *any* object. A method :meth:`clear` has been added, which
424    removes all registered objects.
425
426*   Fixed a bug in :func:`ll.xist.css.iterrules` that surfaced when a
427    :var:`base` argument was given.
428
429*   Fixed a second bug in :func:`ll.xist.css.iterrules` where the ``href`` of a
430    :class:`link` element wasn't applied to the URLs in the stylesheet.
431
432
433Changes in 3.1 (released 01/18/2008)
434------------------------------------
435
436*   Fixed the problem that the source distibution didn't include header files.
437
438*   If an :class:`URLAttr` attribute contains a processing instruction XIST
439    will no longer transform the URL in any way.
440
441*   Fixed a parser bug where attributes were dropped when the attribute value
442    was empty.
443
444*   Putting a module into a :class:`Pool` object now copies the ``xmlns``
445    attribute too. This makes it possible to use :class:`Pool` objects as
446    conversion targets.
447
448
449Changes in 2.9 (released 01/07/2008)
450------------------------------------
451
452*   Namespaces have been greatly simplified. There are no namespace modules any
453    longer. An element class can be assigned a namespace by setting the
454    ``xmlns`` class attribute to the namespace name. Global attributes can be
455    assigned a namespace by setting the ``xmlns`` attribute on the attribute
456    class itself (*not* on the :class:`Attrs` class). The classes
457    :class:`Prefixes` and :class:`NSPool` are gone too. Instead a new class
458    :class:`Pool` is used to specify which classes should be used for parsing.
459
460*   Dependency on PyXML_ has finally been dropped. XIST now uses its own XML
461    parsing API. Two parsers are available: One based on expat_ and one based on
462    a custom version of sgmlop_.
463
464    .. _PyXML: http://pyxml.sf.net/
465    .. _expat: http://expat.sourceforge.net/
466    .. _sgmlop: http://effbot.org/zone/sgmlop-index.htm
467
468*   Tree traversal has been rewritten again. XFind expressions involving
469    multiple uses of ``//`` now work correctly. The method :meth:`walk` now
470    doesn't yield :class:`Cursor` objects, but simple path lists (actually it's
471    always the same list, if you want distinct lists use :meth:`walkpath`).
472    Applying XFind expressions to nodes directly is no longer supported, you
473    have to call :meth:`walk`, :meth:`walknode` or :meth:`walkpath` with the
474    XFind expression instead. Many XFind operators have been renamed and/or
475    reimplemented (see the documentation for the :mod:`xfind` module for more
476    information).
477
478*   The methods :meth:`__getitem__`, :meth:`__setitem__` and :meth:`__delitem__`
479    for :class:`Frag` and :class:`Element` now support the new walk filters, so
480    you can do:
481
482    *   ``del node[html.p]`` to delete all :class:`html.p` child elements of
483        ``node``;
484    *   ``del node[html.p[2]]`` to delete only the third :class:`html.p`;
485    *   ``node[xfind.hasclass("note")] = html.p("There was a note here!")`` to
486        replace several child nodes with a new one;
487    *   ``for c in node[xfind.empty]: print c.bytes()`` to print all empty
488        (element) children of ``node``;
489    *   ``del node[node[0]]`` to delete the first child node (which is silly,
490        but illustrates that you can pass a node to get/replace/delete that
491        node);
492
493*   A new module :mod:`ll.xist.css` has been added which contains CSS related
494    functionality: The generator function :func:`iterrules` can be passed an
495    XIST tree and it will produce all CSS rules defined in any
496    :class:`html.link` or :class:`html.style` elements or imported by them
497    (via the CSS rule ``@import``). This requires the :mod:`cssutils` package.
498
499*   The function :func:`applystylesheets` modifies the XIST tree passed in by
500    removing all CSS (from :class:`html.link` and :class:`html.style` elements
501    and their ``@import``\ed stylesheets) and putting the styles into ``style``
502    attributes of the affected elements instead.
503
504*   The function :func:`selector` return a tree walk filter from a CSS selector
505    passed as a string.
506
507*   Constructing trees can now be done with ``with`` blocks. Code looks like
508    this::
509   
510        with xsc.Frag() as node:
511            +xml.XML()
512            +html.DocTypeXHTML10transitional()
513            with html.html():
514                with html.head():
515                    +meta.contenttype()
516                    +html.title("Example page")
517                with html.body():
518                    +html.h1("Welcome to the example page")
519                    with html.p():
520                        +xsc.Text("This example page has a link to the ")
521                        +html.a("Python home page", href="http://www.python.org/")
522                        +xsc.Text(".")
523   
524        print node.conv().bytes(encoding="us-ascii")
525
526    Also the function :func:`xsc.append` has been renamed to :func:`add` and
527    supports ``with`` blocks now instead of XPython__.
528
529    __ http://codespeak.net/svn/user/hpk/talks/xpython-talk.txt
530
531*   A subset of ReST__ is supported now for docstrings when using the
532    :mod:`ll.xist.ns.doc` module. The module attribute :attr:`__docformat__`
533    is now honored (Set it to ``"xist"`` to get XIST docstrings).
534
535    __ http://docutils.sourceforge.net/rst.html
536
537*   Many classes in the :mod:`ll.xist.ns.doc` have been renamed to more
538    familiar names (from HTML, XHTML 2 or ReST).
539
540*   The ``media`` attribute of :class:`html.link` and :class:`html.style` now
541    has a method :meth:`hasmedia`.
542
543*   The node method :meth:`asBytes` has been renamed to :meth:`bytes` and
544    :meth:`bytes` has been renamed to :meth:`iterbytes`.
545
546*   The node method :meth:`asString` has been renamed to :meth:`string` and a
547    new method :meth:`iterstring` has been added.
548
549*   :class:`ll.xist.ns.xml.XML10` is gone now. Use :class:`ll.xist.ns.xml.XML`
550    instead.
551
552*   :func:`xsc.tonode` now will raise an exception when it can't handle an
553    argument instead of issuing a warning.
554
555*   A class attribute :attr:`empty` inside element classes will now no longer
556    get converted into :attr:`model`.
557
558*   :class:`ll.xist.ns.doc.pyref` now copes better with decorated methods.
559
560*   The deprecated :class:`Element` methods :meth:`hasAttr`, :meth:`hasattr`,
561    :meth:`isallowedattr`, :meth:`getAttr`, :meth:`getattr`,
562    :meth:`setDefaultAttr`, :meth:`setdefaultattr`, :meth:`attrkeys`,
563    :meth:`attrvalues`, :meth:`attritems`, :meth:`iterattrkeys`,
564    :meth:`iterattrvalues`, :meth:`iterattritems`, :meth:`allowedattrkeys`,
565    :meth:`allowedattrvalues`, :meth:`allowedattritems`,
566    :meth:`iterallowedattrkeys`, :meth:`iterallowedattrvalues`,
567    :meth:`iterallowedattritems` and :meth:`copyDefaultAttrs` have been removed.
568    The deprecated :class:`Attrs` method :meth:`copydefaults` has been removed
569    too.
570
571*   The namespace module :mod:`ll.xist.ns.cond` has been removed.
572
573*   When calling the function :func:`ll.xist.parsers.parseURL` the arguments
574    :var:`headers` and :var:`data` are now passed along to the parser's method
575    only if they are specified. This makes it possible to pass ssh URLs to
576    :func:`ll.xist.parsers.parseURL`.
577
578*   The methods :meth:`withnames` and :meth:`withoutnames` have been split into
579    two that take Python names and two that take XML names. Multiple arguments
580    are used now (instead of one argument that must be a sequence). Passing a
581    namespace to remove all attributes from the namespace is no longer
582    supported.
583
584*   The :class:`Attrs` methods :meth:`updatenew` and :meth:`updatexisting` have
585    been removed.
586
587
588Changes in 2.15.5 (released 07/17/2007)
589---------------------------------------
590
591*   The Python quotes example no longer contains the XML source or the
592    generated HTML.
593
594
595Changes in 2.15.4 (released 07/16/2007)
596---------------------------------------
597
598*   The Python quotes example now always parses the file from the original URL.
599
600*   The Python quotes and the media example now print the result to ``stdout``.
601
602
603Changes in 2.15.3 (released 07/16/2007)
604---------------------------------------
605
606*   Use a consistent license (MIT) everywhere. This should make XIST Debian
607    compatible.
608
609*   Change the Python quotes example, so that it works even if there's no
610    :file:`python-quotes.xml` in the current directory.
611
612
613Changes in 2.15.2 (released 01/24/2007)
614---------------------------------------
615
616*   Fixed a bug in :meth:`presenters.CodePresenter.__str__`.
617
618*   Fixed base URL handling for tidy parsing.
619
620*   Updated examples.
621
622*   Updated :func:`xiter` and :func:`xattrs` implementations for :class:`Node`
623    and :class:`Namespace` to conform to the newest version of IPython.
624
625
626Changes in 2.15.1 (released 09/25/2006)
627---------------------------------------
628
629*   Fixed a few bugs in the :mod:`sgmlop` function declarations.
630
631*   Readded the spacer pixel.
632
633
634Changes in 2.15 (released 09/24/2006)
635-------------------------------------
636
637*   XIST has been made compatible with Python 2.5: Code has been updated
638    to use the proper C API for memory management and :pep:`353` support has
639    been added. XIST now includes its own fixed version of :mod:`sgmlop`.
640
641*   The :class:`ll.xist.xsc.Attrs` methods :meth:`with` and :meth:`without` have
642    been renamed to :meth:`withnames` and :meth:`withoutnames` for Python 2.5
643    compatibility.
644
645*   :class:`ll.xist.ns.htmlspecials.pixel` no longer handles colors via
646    different GIFs. It uses the ``background-color`` in the ``style`` attribute
647    instead. The same change has been implemented for
648    :class:`ll.xist.ns.htmlspecials.autopixel`. It's now possible to overwrite
649    the default ``src`` attribute value of ``root:px/spc.gif`` either via the
650    XML attribute or via the converter context.
651
652*   The node method :meth:`asText` has been made a function, moved into the
653    :mod:`html` namespace and renamed to :func:`astext`. Furthermore elinks_ is
654    used for plain text formatting now instead of w3m_.
655
656    .. _elinks: http://elinks.or.cz/
657    .. _w3m: http://w3m.sf.net/
658
659
660Changes in 2.14.2 (released 07/04/2006)
661---------------------------------------
662
663*   Fixed a bug in the :meth:`presentAttr` method of
664    :class:`ll.xist.presenters.TreePresenter`.
665
666
667Changes in 2.14.1 (released 06/29/2006)
668---------------------------------------
669
670*   Fixed a bug in the :meth:`presentEntity` method of
671    :class:`ll.xist.presenters.CodePresenter`.
672
673*   Updated installation instructions.
674
675
676Changes in 2.14 (released 06/28/2006)
677-------------------------------------
678
679*   Namespaces for RSS 0.91, RSS 2.0 and Atom 1.0 have been added.
680
681*   A new namespace :mod:`ll.xist.ns.detox` has been added that is similar to
682    :mod:`ll.toxic` but can be used to generate Python code instead of
683    PL/SQL code. Using :mod:`detox` templates is about 50 times faster than
684    using XIST trees directly and about 10 times faster than Kid__.
685
686    __ http://kid.lesscode.org/
687
688*   Presenters are now compatible to IPython__ :mod:`ipipe` module. This means
689    that you can browse XIST trees interactively if you have IPython installed.
690    :class:`NormalPresenter` and the :class:`Node` methods :meth:`repr` and
691    :meth:`asrepr` have been removed.
692
693    __ http://ipython.scipy.org/
694
695*   A new processing instruction :class:`ll.xist.ns.specials.url` has been added
696    that does the same URL transformation as :class:`ll.xist.xsc.URLAttr` does.
697
698*   On publishing :class:`ll.xist.ns.html.html` now only adds a ``lang`` and
699    ``xml:lang`` attribute, if neither of them exists.
700
701*   :mod:`setuptools` is now supported for installation.
702
703
704Changes in 2.13 (released 10/31/2005)
705-------------------------------------
706
707*   :meth:`ll.xist.xsc.Namespace.tokenize` requires a :class:`unicode` object
708    as input now. This makes it possible to use encodings that are not ASCII
709    compatible (such as UTF-16). The :var:`encoding` argument is gone.
710
711*   :meth:`ll.xist.xsc.Node.asString` uses the :var:`encoding` argument to
712    determine which characters have to be output as character references
713    now. (You'll still get a unicode object as the result.)
714
715*   A new processing instruction class :class:`ll.xist.ns.specials.literal` has
716    been added, that will output its content literally when published. This can
717    be used for embedding preformatted XML (e.g. from a database) into an XIST
718    tree.
719
720
721Changes in 2.12 (released 10/13/2005)
722-------------------------------------
723
724*   Namespaces for `Relax NG`_ and Kid_ have been added.
725
726    .. _Relax NG: http://www.relaxng.org/
727    .. _Kid: http://kid.lesscode.org/
728
729*   XIST requires version 1.0 of the core package now.
730
731*   The class name for the DocBook DTD class has been fixed.
732
733
734Changes in 2.11 (released 07/29/2005)
735-------------------------------------
736
737*   A script :file:`xml2xsc.py` has been added, that can be used to parse an
738    XML file and generate a rudimentary XIST namespace from it.
739
740*   A :class:`DocType` for XHTML 1.1 has been added (suggested by Elvelind
741    Grandin).
742
743*   Line number information is now added when parsing HTML.
744
745*   The :meth:`sorted` method now supports the same arguments (:var:`cmp`,
746    :var:`key` and :var:`reverse`) as :meth:`list.sort` and :func:`sorted`
747    in Python 2.4.
748
749*   The :meth:`walk` doesn't yield the node directly, but yields a :class:`Cursor`
750    object now, with has several ways of referencing the node.
751
752*   New methods :meth:`walknode`, :meth:`walkpath` and :meth:`walkindex` have
753    been added.
754
755*   Presenters use an iterator API instead of a stream API now. Dumping an
756    XML tree presentation to the terminal can now start immediately instead
757    of having to wait for the complete string to be formatted.
758
759*   Fixed a bug with element/attribute names that contained a ``.`` character.
760    (This broke :mod:`ll.xist.ns.fo`.)
761
762*   Fixed a bug with ``xmlns`` attributes in nested elements. When an element
763    ended the parser restored the wrong prefix mapping.
764
765*   The :dir:`python-quotes` demo has been updated to use the current version of
766    AMK's XML file.
767
768*   Removed iterator stuff from :mod:`ll.xist.xfind`, as this is now part of the
769    :mod:`ll` package/module.
770
771*   The function :func:`ToNode` has been renamed to :func:`tonode`.
772
773*   :class:`ll.xist.Context` no longer subclasses :class:`list`.
774
775*   :class:`ll.xist.ns.doc.explain` will now try to output the objects in the
776    order in which they appear in the Python source.
777
778*   The node methods :meth:`find` and :meth:`findfirst` have been removed.
779
780*   :mod:`ll.xist.ns.cond` now uses a sandbox dictionary in a converter context
781    for evaluating expression.
782
783
784Changes in 2.10 (released 05/20/2005)
785-------------------------------------
786
787*   The content of the processing instruction :class:`ll.xist.ns.code.pyexec`
788    will not be executed at construction time, but at conversion time. The code
789    in :class:`ll.xist.ns.code.pyexec` or :class:`ll.xist.ns.code.pyeval` will
790    no longer be executed in the :mod:`ll.xist.sandbox` module (which has been
791    removed), but in a sandbox dictionary in the converter context of the
792    :mod:`ll.xist.ns.code` namespace.
793
794*   The tests have been ported to `py.test`_.
795
796    .. _py.test: http://codespeak.net/py/current/doc/test.html
797
798*   The method :meth:`mapped` is now callable without arguments. In this case a
799    converter will be created on the fly. You can pass constructor arguments for
800    this converter to :meth:`mapped` as keyword arguments.
801
802*   The publishing API has changed again:
803    :meth:`ll.xist.publishers.Publisher.publish` no longer accepts an argument
804    :var:`stream` to which the byte strings are written, but it is a generator
805    now. The publisher methods :meth:`write` and :meth:`writetext` have been
806    renamed to :meth:`encode` and :meth:`encodetext` and return the encoded
807    byte string, instead of writing it directly to the stream. There's a new
808    generator method :meth:`bytes` for nodes now, which can be passed the same
809    arguments as :meth:`asBytes`. These changes should help when using XIST in
810    WSGI applications.
811
812*   The iterator returned from :meth:`Element.__getitem__`,
813    :meth:`Frag.__getitem__` and the :meth:`walk` method now supports
814    :meth:`__getitem__` itself, so you can write ``table[html.tr][0]`` to get
815    the first row from a table or ``page.walk(xsc.FindTypeAll(html.td))[-1]``
816    to get the last table cell from a complete HTML page.
817
818*   Several bugs in the namespaces :mod:`ll.xist.ns.meta`, :mod:`ll.xist.ns.form`
819    and :mod:`ll.xist.ns.specials` have been fixed.
820
821*   The namespace modules :mod:`ll.xist.ns.css` and :mod:`ll.xist.ns.cssspecials`
822    have been removed.
823
824
825Changes in 2.9 (released 04/21/2005)
826------------------------------------
827
828*   XIST trees can now be pickled. The only restriction is that global
829    attributes must come from a namespace that has been turned into a module via
830    :meth:`makemod`, so that this module can be imported on unpickling.
831
832*   Two arguments of the :meth:`walk` method have been renamed: :var:`filtermode`
833    has been renamed to :var:`inmode` and :var:`walkmode` has been renamed to
834    :var:`outmode`. For these modes two new values are supported:
835
836    :const:`ll.xist.xsc.walkindex`
837        The value passed to the filter function or yielded from the iterator is
838        a list containing child indizes and attribute names that specify the path
839        to the node in question.
840
841    :const:`ll.xist.xsc.walkrootindex`
842        The filter function will be called with two arguments: The first is the
843        root node of the tree (i.e. the node for which :meth:`walk` has been
844        called), the second one is an index path (just like for
845        ``ll.xist.xsc.walkindex``). If used as an :var:`outmode` a tuple with
846        these two values will be yielded.
847
848* Attribute mappings now support :meth:`__getitem__`, :meth:`__setitem__` and
849    :meth:`__delitem__` with list arguments, i.e. you can do::
850
851        >>> from ll.xist.ns import html
852        >>> e = html.a("gurk", href=("hinz", "kunz"))
853        >>> print e.attrs[["href", 0]]
854        hinz
855        >>> e.attrs[["href", 0]] = "hurz"
856        >>> print e["href"]
857        hurzkunz
858        >>> del e.attrs[["href", 0]]
859        >>> print e["href"]
860        kunz
861
862    XML attributes can now be accessed as Python attributes, i.e.::
863
864        >>> from ll.xist.ns import html
865        >>> e = html.a("spam", href="eggs")
866        >>> print e.attrs.href
867        eggs
868
869    (Don't confuse this with ``e.Attrs.href`` which is the attribute class.)
870
871*   :class:`Frag` and :class:`Element` now support :class:`Node` subclasses as
872    arguments to their :meth:`__getitem__` method: An iterator for all children
873    of the specified type will be returned.
874
875*   The encoding used for parsing now defaults to :const:`None`. When reading
876    from an URL and no default encoding has been specified the one from the
877    ``Content-Type`` header will be used. If this still doesn't result in a
878    usable encoding, ``"utf-8"`` will be used when parsing XML and
879    ``"iso-8859-1"`` will be used when parsing broken HTML.
880
881*   All error and warning classes from :mod:`ll.xist.errors` have been merged
882    into :mod:`ll.xist.xsc`. This avoids import problems with circular imports.
883
884*   The attributes :attr:`showLocation` and :attr:`showPath` of
885    :class:`ll.xist.presenters.TreePresenter` have been lowercased and
886    presenters are properly reset after they've done their job.
887
888*   The class attribute :attr:`xmlname` will no longer be turned into a list
889    containing the Python and the XML name, but will be the XML name only.
890    You can get the Python name of :class:`foo` from ``foo.__class__.__name__``.
891
892*   :class:`DeprecationWarning`\s for :attr:`name` and :attr:`attrHandlers` have
893    finally been removed.
894
895*   Instances of :class:`ll.xist.xsc.Entity` subclasses can now be compared.
896    :meth:`__eq__` simply checks if the objects are instances of the same class.
897
898
899Changes in 2.8.1 (released 03/22/2005)
900--------------------------------------
901
902*   Added a note about the package init file to the installation documentation.
903
904
905Changes in 2.8 (released 01/03/2005)
906------------------------------------
907
908*   XIST requires Python 2.4 now.
909
910*   :class:`ll.xist.ns.specials.x` has been renamed to
911    :class:`ll.xist.ns.specials.ignore`.
912
913*   :func:`ll.xist.utils.findAttr` has been renamed to
914    :func:`ll.xist.utils.findattr`.
915
916*   :class:`ll.xist.xfind.item` no longer handles slices.
917
918*   XFind has been enhanced to support item and slice operators, i.e. if
919    ``foo`` is an XFind operator, ``foo[0]`` is an operator that will produce
920    the first node from ``foo`` (if there is one). Negative values and slices
921    are supported too.
922
923*   Operators can be chained via division: ``html.a/html.b`` is an operator
924    that can be passed around and applied to a node.
925
926*   XIST requires the new core module and makes use of the new
927    "cooperative displayhook" functionality defined there: If you install the
928    displayhook you can tweak or replace ``ll.xist.presenters.hookpresenter``
929    to change the output.
930
931
932Changes in 2.7 (released 11/24/2004)
933------------------------------------
934
935*   The transparent pixel used by :class:`ll.xist.ns.htmlspecials.pixel` has
936    been renamed to :file:`spc.gif` to avoid problems with IE.
937
938*   Removed a debug print in :class:`ll.xist.xfind.Finder.__getitem__`.
939
940*   :mod:`ll.xist.xfind` now has a new function :func:`item`, that can be used
941    to get a certain item or slice from an iterator. :func:`xfind.first` and
942    :func:`xfind.last` have been changed to use :func:`xfind.item`, so you now
943    have to pass a default value to get the old behaviour.
944
945*   Obsolete options in :mod:`ll.xist.options` have been removed (and
946    :data:`reprEncoding` has been renamed to :data:`reprencoding`).
947
948
949Changes in 2.6.2 (released 06/06/2005)
950--------------------------------------
951
952*   Fixed a bug in :meth:`ll.xist.parsers.Parser.parse`.
953
954
955Changes in 2.6.1 (released 11/02/2004)
956--------------------------------------
957
958*   Fixed a bug in :meth:`ll.xist.xfind.Finder.__floordiv__`.
959
960*   Restricted characters as defined in `XML 1.1`__ will now be published as
961    character references.
962
963    __  http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-RestrictedChar
964
965
966Changes in 2.6 (released 10/26/2004)
967------------------------------------
968
969*   :func:`ToNode` now tries iterating through the value passed in, so it's now
970    possible to pass iterators and generators (and generator expressions in
971    Python 2.4) to :class:`Frag` and :class:`Element` constructors.
972
973*   A new API named XFind has been added for iterating through XML trees.
974    XFind expressions look somewhat like XPath expressions but are pure Python
975    expressions. For example finding all images inside links in an HTML page
976    can be done like this::
977
978        from ll.xist import parsers, xfind
979        from ll.xist.ns import html
980        node = parsers.parseURL("http://www.python.org/", tidy=True)
981        for img in node//html.a/html.img:
982            print img["src"]
983
984*   The module :mod:`ll.xist.xfind` contains several operators that can be used
985    in XFind expressions.
986
987*   Parsing broken HTML is now done with the HTML parser from libxml2_. The
988    parsing functions no longer accept options for tidy, only the boolean value
989    of the :var:`tidy` argument is used.
990
991    .. _libxml2: http://www.xmlsoft.org/
992
993*   The publishing API has been simplified: Publication can now be done with
994    a call to :meth:`ll.xist.publishers.Publisher.publish`, passing in a
995    :class:`ll.xist.xsc.Node`. Writing strings to the publisher output is
996    now done with :meth:`ll.xist.publishers.Publisher.write`. The methods
997    :meth:`beginPublication` and :meth:`endPublication` have been
998    removed.
999
1000*   The presentation API has been simplified in the same way: You'll get a
1001    presentation by calling: ``string = presenter.present(node)``. The methods
1002    :meth:`beginPresentation` and :meth:`endPresentation` have been removed.
1003
1004*   The parser now has the option to ignore illegal elements, attributes,
1005    processing instructions and entities. The default behaviour is to raise an
1006    exception, but this can now be reconfigured via Python's warning framework.
1007
1008*   The classmethod :meth:`tokenize` from :mod:`ll.toxic` has been moved to
1009    :class:`ll.xist.xsc.Namespace`, so it's now possible to tokenize an XML
1010    string for other processing instructions as well.
1011
1012*   A new class :class:`ll.xist.xsc.NSPool` has been added. An :class:`NSPool`
1013    contains a pool of namespaces from which the parser selects the appropriate
1014    namespace once an ``xmlns`` attribute is encountered.</item>
1015
1016*   The script :file:`xscmake.py` (which has been unmaintained for a while now)
1017    has been removed.</item>
1018
1019*   Elements :class:`hostname`, :class:`tty`, :class:`prompt` and :class:`input`
1020    were added to :mod:`ll.xist.ns.doc`.
1021
1022*   The method :meth:`ll.xist.xsc.Attrs.set` now returns the new attribute
1023    object.
1024
1025*   The :meth:`visit` method has been removed.
1026
1027*   :meth:`ll.xist.xsc.FindOld` has been removed.
1028
1029*   :class:`ll.xist.ns.xml.header` has been renamed to
1030    :class:`ll.xist.ns.xml.declaration`.
1031
1032
1033Changes in 2.5 (released 06/30/2004)
1034------------------------------------
1035
1036*   Specifying content models for elements has seen major enhancements. The
1037    boolean class attribute :attr:`empty` has been replaced by an object
1038    :attr:`model` whose :meth:`checkvalid` method will be called for validating
1039    the element content.
1040
1041*   A new module :mod:`ll.xist.sims` has been added that provides a simple
1042    schema validation. Schema violations will be reported via Pythons
1043    warning framework.
1044
1045*   All namespace modules have been updated to use :mod:`sims` information.
1046    The SVG module has been updated to SVG 1.1. The docbook module has been
1047    updated to DocBook 4.3.
1048
1049*   It's possible to switch off validation during parsing and publishing.
1050
1051*   :class:`ll.xist.xsc.Frag` and :class:`ll.xist.xsc.Element` both have a
1052    :meth:`__call__` method with the same arguments as their constructors.
1053    Those methods will append content nodes (and set attributes for
1054    :class:`ll.xist.xsc.Element`) and return :var:`self`, so they can be used
1055    when creating an object tree. This makes it possible to put the attributes
1056    close to the tag name, instead of putting them at the end after the content.
1057
1058    Instead of::
1059
1060        node = html.table(
1061            html.tr(
1062                html.td("foo"),
1063                html.td("bar"),
1064            ),
1065            html.tr(
1066                html.td("spam"),
1067                html.td("eggs")
1068            ),
1069            class_="example"
1070
1071    you can now use the following::
1072
1073        node = html.table(class_="example")(
1074            html.tr(
1075                html.td("foo"),
1076                html.td("bar"),
1077            ),
1078            html.tr(
1079                html.td("spam"),
1080                html.td("eggs")
1081            )
1082        )
1083
1084*   Experimental support for Holger Krekel's XPython_ has been added. Code
1085    might look like this::
1086
1087        from ll.xist import xsc, converters
1088        from ll.xist.ns import html, meta
1089
1090        import random
1091
1092        c = converters.Converter()
1093        <c>:
1094            <html.html()>:
1095                <html.head()>:
1096                    <meta.contenttype()>: pass
1097                    <html.title()>:
1098                        xsc.append("The title")
1099                <html.body(class_="foo")>:
1100                    <html.h1()>:
1101                        flag = random.choice((0, 1))
1102                        if flag:
1103                            xsc.append("The foo page", class_="foo")
1104                        else:
1105                            xsc.append("The bar page", class_="bar")
1106                    <html.p()>:
1107                        if flag:
1108                            xsc.append("The foo content")
1109                        else:
1110                            xsc.append("The bar content")
1111
1112        print c.lastnode.asBytes()
1113
1114    .. _XPython: http://codespeak.net/svn/user/hpk/talks/xpython-talk.txt
1115
1116*   Creating global attributes has been simplified. Passing an instance of
1117    :class:`ll.xist.xsc.Namespace.Attrs` to an :class:`Element` constructor
1118    now does the right thing::
1119
1120        from ll.xist.ns import html, xml
1121        node = html.html(
1122            html.head(),
1123            xml.Attrs(lang="de"),
1124            lang="en",
1125        )
1126
1127*   Creating skeleton implementations of XIST namespaces is no longer done
1128    via XML conversion (i.e. the namespace module :mod:`ll.xist.ns.xndl`),
1129    but through the new module :mod:`ll.xist.xnd`. The script :file:`dtdxsc.py`
1130    will automatically generate :mod:`sims` information.
1131
1132*   :class:`ll.xist.xsc.CharRef` now inherits from :class:`ll.xist.xsc.Text`
1133    too, so you don't have to special case :class:`CharRef`\s any more. When
1134    publishing, :class:`CharRef`\s will be handled like :class:`Text` nodes.
1135
1136*   :class:`ll.xist.ns.meta.contenttype` now has an attribute ``mimetype``
1137    (defaulting to ``"text/html"``) for specifying the MIME type.
1138
1139*   :class:`ll.xist.ns.htmlspecials.caps` has been removed.
1140
1141*   Registering elements in namespace classes has been rewritten to use a
1142    cache now.
1143
1144*   Pretty printing has been changed: Whitespace will only be added now if
1145    there are no text nodes in element content.
1146
1147*   Two mailing lists are now available: One for discussion about XIST and
1148    one for XIST announcements.
1149
1150
1151Changes in 2.4.1 (released 01/05/2004)
1152--------------------------------------
1153
1154*   Changed the xmlname of :class:`ll.xist.ns.jsp.directive_page` back again
1155    (it's ``directive.page`` only for the XML form, which we don't use anyway.)
1156
1157*   Drop the default value for
1158    :class:`ll.xist.ns.jsp.directive_page.Attrs.language`, as this attribute can
1159    only be used once.
1160
1161*   If an :class:`ll.xist.xsc.Prefixes` object has a prefix mapping for a
1162    namespace it will return this prefix too, if asked for a prefix for a
1163    subclass of this namespace.
1164
1165
1166Changes in 2.4 (released 01/02/2004)
1167------------------------------------
1168
1169*   The class :class:`ll.xist.parsers.Handler` has been renamed to :class:`Parser`
1170    and has been made reusable, i.e. it is possible to instantiate a parser once
1171    and use it multiple times for parsing. All the classes derived from
1172    :class:`xml.sax.xmlreader.InputSource` have been dropped and the methods
1173    for parsing strings, URLs and files have been implemented as methods of
1174    the parser. Most of the arguments that had to be passed to the various
1175    parsing functions are passed to the parser constructor now. The basic
1176    parsing functionality is implemented by parsing streams instead of
1177    :class:`InputSource` objects.
1178
1179*   Similar to the changes for parsing, publishers have been changed to be
1180    reusable and most arguments to the publishing functions are available as
1181    arguments to the publisher constructor.
1182
1183*   Now converter contexts are no longer bound to an element class, but to the
1184    context class defined by the element class, i.e. the attribute ``Context``
1185    of the argument for :meth:`Converter.__getitem__` will be used as the
1186    dictionary key. This makes it possible to use a class and it subclasses
1187    interchangeably (as long as the base class defines its own :class:`Context`
1188    class and the subclasses don't overwrite it).
1189
1190*   Added a find functor :class:`FindTypeAllAttrs` that searches content and
1191    attributes.
1192
1193*   Fixed the XML name for :class:`ll.xist.ns.jsp.directive_page`.
1194
1195*   All character references in :mod:`ll.xist.ns.ihtml` that exist in
1196    :mod:`ll.xist.ns.chars` too have been removed.
1197
1198
1199Changes in 2.3 (released 12/08/2003)
1200------------------------------------
1201
1202*   It's now possible to parse XML without generating location information for
1203    each node, by passing ``loc=False`` to the constructor of the
1204    :class:`Handler`.
1205
1206*   The :class:`HTMLParser` no longer complains about global attributes or
1207    ``xmlns``.
1208
1209*   XIST now supports uTidylib_ in addition to mxTidy. uTidylib is found
1210    it is preferred over mxTidy.
1211
1212    .. _uTidylib: http://utidylib.sf.net/
1213
1214*   It's possible now to pass arguments to tidy simple by passing an argument
1215    dictionary for the :var:`tidy` argument in the parsing functions.
1216
1217*   The methods :meth:`parsed` and :meth:`checkvalid` have been separated.
1218
1219*   :class:`ll.xist.ns.htmlspecials.pixel` and
1220    :class:`ll.xist.ns.htmlspecials.autopixel` now check whether their
1221    :attr:`color` attribute is ok.
1222
1223*   The base URL is now set correctly when parsing from an URL even if the
1224    original URL does a redirect. (This requires :mod:`ll.url` version 0.11.3).
1225
1226*   Namespace handling has been rewritten again, to be more standards compliant:
1227    Now there is no prefixes for entities and processing instructions any longer.
1228    Prefix mappings can be created much simpler, and they no longer contain any
1229    namespace stack for parsing, as this is now done by the parser itself.
1230    :class:`xsc.NamespaceAttrMixIn` is gone too.
1231
1232*   The processing instructions :class:`exec_` and :class:`eval_` from
1233    :mod:`ll.xist.ns.code` have been renamed to :class:`pyexec` and
1234    :class:`pyeval` and :class:`import_` has been removed.
1235
1236*   :class:`CharRef`\s from :mod:`ll.xist.ns.html` have been moved to a new
1237    module named :mod:`ll.xist.ns.chars`.
1238
1239*   The method names :meth:`beginPublication`, :meth:`endPublication` and
1240    :meth:`doPublication` have been lowercased.
1241
1242
1243Changes in 2.2 (released 07/31/2003)
1244------------------------------------
1245
1246*   Namespace handling has been completely rewritten. Namespaces are now
1247    classes derived from :class:`ll.xist.xsc.Namespace`. Defining element
1248    classes can be done inside or outside the namespace class. If the element
1249    classes are defined outside the namespace class, they can be moved inside
1250    the namespace with a simple attribute assignment::
1251
1252        class foo(xsc.Element):
1253            empty = False
1254
1255        class xmlns(xsc.Namespace):
1256            xmlname = "foo"
1257            xmlurl = "http://www.foo.com/ns/foo"
1258
1259        xmlns.foo = foo
1260
1261*   The methods :meth:`elementkeys`, :meth:`iterelementkeys`,
1262    :meth:`elementvalues`, :meth:`iterelementvalues`, :meth:`elementitems` and
1263    :meth:`iterelementitems` can be used for iterating through the element
1264    classes and their names. You can use the method :meth:`element` to get an
1265    element class with a certain name::
1266
1267        >>> from ll.xist.ns import html
1268        >>> html.element("div")
1269        <element class ll.xist.ns.html/div at 0x824363c>
1270
1271*   For processing instructions, entities and character references similar
1272    methods are available.
1273
1274*   The method :meth:`update` can be used to add many element classes to a
1275    namespace at once, simply by passing a dictionary with those classes
1276    (use ``vars()`` to add everything that's defined inside your module).
1277    The method :meth:`updatenew` does the same, but copies only those
1278    attributes that don't exist in the namespace, :meth:`updateexisting`
1279    copies only those that do exist. You can turn a namespace into a module
1280    with :meth:`makemod`::
1281
1282        from ll.xist import xsc
1283
1284        class foo(xsc.Element):
1285            empty = False
1286
1287        class xmlns(xsc.Namespace):
1288            xmlname = "foo"
1289            xmlurl = "http://www.foo.com/ns/foo"
1290        xmlns.makemod(vars())
1291
1292*   Put the above code into :file:`foo.py` and you can do the following::
1293
1294        >>> import foo
1295        >>> foo
1296        <namespace foo/xmlns name=u'foo' url=u'http://www.foo.com/ns/foo' with 1 elements from 'foo.py' at 0x81bfc14>
1297
1298*   :func:`getns` has been dropped, so you always have to pass in a
1299    :class:`Namespace` class where a namespace is required.
1300
1301*   For the :class:`ll.xist.ns.jsp.directive_page` element automatic generation
1302    of the correct ``charset`` option in the ``contentType`` attribute is only
1303    done when there is a ``contentType`` attribute, as ``contentType`` is
1304    optional.
1305
1306*   The converter has a new property :func:`node`. :var:`node` can't be passed
1307    to :meth:`conv` but will be set to :var:`self` by :meth:`conv`
1308    automatically. This makes it possible to access the "document root" during
1309    conversion.
1310
1311*   :class:`ll.xist.ns.htmlspecials.autoimg` no longer touches existing width
1312    and height attributes. This means that %-formatting of the existing
1313    attributes is no longer done.
1314
1315*   Added a new class :class:`ll.xist.ns.htmlspecials.autopixel` that works
1316    like :class:`ll.xist.ns.htmlspecials.pixel` but inherits the size for the
1317    image specified via the ``src`` attribute.
1318
1319*   :class:`Frag` and :class:`Element` now support extended slices.
1320
1321*   :class:`Frag` and :class:`Element` now support the methods :meth:`extend`
1322    and :meth:`__iadd__`.
1323
1324*   For walking the tree the method :meth:`walk` has been completely rewritten
1325    and a new method :meth:`visit` has been added. For more info see the
1326    docstrings.
1327
1328*   :class:`Node` now has two new methods :meth:`copy` and :meth:`deepcopy` and
1329    supports the :mod:`copy` module from the Python standard library.
1330
1331*   Calling :meth:`mapped` through :meth:`conv` has been removed. You again
1332    have to call :meth:`mapped` directly and pass a node and a converter.
1333
1334*   The HTML handling of the :class:`HTMLParser` has been improved (it now
1335    uses code from :mod:`xml.sax.drivers2.drv_sgmlop_html` (which is part of
1336    PyXML__.
1337
1338    __ http://pyxml.sf.net/
1339
1340*   The core functionality found in the script :file:`dtd2xsc.py` has been
1341    moved to a class method :meth:`ll.xist.ns.xndl.fromdtd` in the
1342    :mod:`ll.xist.ns.xndl` namespace.
1343
1344*   :class:`ll.xist.parsers.ExpatParser` is now a real subclass instead of an
1345    alias for :class:`xml.sax.expatreader.ExpatParser` It reports unknown
1346    entity references to the application (if loading of external entities is
1347    switched off, which is done by :class:`ll.xist.parsers.Handler` and only
1348    outside of attributes).
1349
1350*   Namespaces have been added for Zope's TAL and METAL specifications.
1351
1352*   A namespace has been added for `XSL-FO`_.
1353
1354    .. _XSL-FO: http://www.w3.org/Style/XSL/
1355
1356
1357Changes in 2.1.4 (released 06/13/2003)
1358--------------------------------------
1359
1360*   Remove the checks for attributes in attributes and moved the publication
1361    code for the full element into a separate method. This allows JSP tag
1362    library namespaces to simply overwrite :meth:`publish` to publish the
1363    element even inside attributes. (This is the same fix as in release 1.5.10).
1364
1365
1366Changes in 2.1.3 (released 05/07/2003)
1367--------------------------------------
1368
1369*   The methods :meth:`sorted`, :meth:`reversed` and :meth:`shuffled` have been
1370    rewritten so they no longer use ``sys.maxint``. This change fixes those
1371    methods for 64 bit platforms (reported by Giles Frances Hall)
1372
1373
1374Changes in 2.1.2 (released 02/27/2003)
1375--------------------------------------
1376
1377*   :class:`ll.xist.ns.struts_config11.plug_in` now allows content (as the DTD
1378    states). (This is the same fix as in release 1.5.8.)
1379
1380
1381Changes in 2.1.1 (released 02/11/2003)
1382--------------------------------------
1383
1384*   Added a few elements and attributes to :mod:`ll.xist.ns.doc`:
1385    :class:`username`, which is used for the name of a user account,
1386    :class:`xref`, which is used for internal cross references and the attribute
1387    ``id`` for :class:`section`, which specifies the target for an :class:`xref`.
1388
1389
1390Changes in 2.1 (released 12/09/2002)
1391------------------------------------
1392
1393*   Added a new namespace module :mod:`ll.xist.ns.xndl` that contains the
1394    "XIST namespace definition language", i.e. elements that describe an
1395    XIST namespace and can be used by various scripts to generate skeleton
1396    namespace modules. The first of these script is the DTD to namespace
1397    converter :file:`dtd2xsc.py`.
1398
1399*   Added a new namespace module :mod:`ll.xist.ns.tld` that contains the
1400    definition for Java Server Pages Tag Library descriptors and a script
1401    :file:`tld2xsc.py` that uses this namespace to generate namespace modules
1402    from ``tld`` files.
1403
1404*   :class:`Attr` now supports the method :meth:`filtered`. This is used by
1405    :meth:`without` now. The arguments for :meth:`without` have changed,
1406    because handling global attributes was too "magic". A new method :meth:`with`
1407    has been added, with does the opposite of :meth:`without`, i.e. it removes
1408    all attributes that are not specified as parameters.
1409
1410*   The Python name of each :class:`Node` subclass is now available as the class
1411    attribute :attr:`pyname`.
1412
1413*   To continue the great renaming :meth:`withSep` has been renamed to
1414    :meth:`withsep`.
1415
1416*   The namespace name for the :mod:`ll.xist.ns.struts_html` module has been
1417    fixed.
1418
1419*   The argument :var:`defaultEncoding` for the various parsing functions has
1420    been renamed to :var:`encoding`.
1421
1422
1423Changes in 2.0.8 (released 11/20/2002)
1424--------------------------------------
1425
1426*   :func:`ll.xist.ns.doc.getDoc` has been renamed to :func:`getdoc`.
1427
1428*   The CSS parser was dropping the ``%`` from percentage values. This has
1429    been fixed.
1430
1431
1432Changes in 2.0.7 (released 11/12/2002)
1433
1434*   :meth:`xsc.Element.__nonzero__` can no longer fall back to
1435    :meth:`xsc.Frag.__nonzero__`. (this is the same fix as in 1.5.7).
1436
1437
1438Changes in 2.0.6 (released 11/11/2002)
1439--------------------------------------
1440
1441*   Performance optimizations.
1442
1443
1444Changes in 2.0.5 (released 11/11/2002)
1445--------------------------------------
1446
1447*   Fixed a bug in :class:`ll.xist.ns.specials.autoimg`: Attributes were not
1448    converted before the size check was done (this is the same fix as in 1.5.5).
1449
1450
1451Changes in 2.0.4 (released 11/08/2002)
1452--------------------------------------
1453
1454*   Fixed a regression bug in :class:`ll.xist.ns.jsp.directive` and several
1455    documentation issues.
1456
1457
1458Changes in 2.0.3 (released 10/30/2002)
1459--------------------------------------
1460
1461*   Fixed a few bugs in :class:`HTMLParser`.
1462
1463*   Added DocBook conversion for several elements in :mod:`ll.xist.ns.doc`.
1464
1465*   Now the :file:`__init__.py` file for the :mod:`ll` package is included.
1466
1467
1468Changes in 2.0.2 (released 10/21/2002)
1469--------------------------------------
1470
1471*   Fixed a bug in :meth:`Frag.__rmul__` (by reusing :meth:`__mul__`).
1472
1473*   Fixed a bug with the backwards compatible prefix mapping: Defining element
1474    classes in ``exec`` processing instructions didn't work, because the
1475    prefixes object used for parsing wouldn't be updated when the namespace
1476    object is defined inside the processing instruction. Now using the default
1477    for the :var:`prefixes` argument in calls to the parsing functions uses one
1478    global shared :class:`Prefixes` instances where all the namespaces that are
1479    newly defined will be registered too.
1480
1481
1482Changes in 2.0.1 (released 10/17/2002)
1483--------------------------------------
1484
1485*   Fixed :file:`xscmake.py` by removing the prefix handling.
1486    :class:`OldPrefixes` will always be used for parsing now.
1487
1488
1489Changes in 2.0 (released 10/16/2002)
1490------------------------------------
1491
1492*   XIST now requires at least Python 2.2.1.
1493
1494*   Attribute handling has been largely rewritten. Instead of a class attribute
1495    :attr:`attrHandlers`, the attributes are now defined through a nested class
1496    named :class:`Attrs` inside the element. This class must be derived from
1497    :class:`ll.xist.Element.Attrs` (or one of its subclasses if you want to
1498    inherit attributes from this class). Defining attributes is done through
1499    classes nested inside this attributes class and derived from any of the
1500    known attribute classes (like :class:`TextAttr`, :class:`URLAttr` etc.).
1501    The class name will be the attribute name (and can be overwritten with a
1502    class attribute :attr:`xmlname`. This makes it possible to have docstrings
1503    for attributes. Furthermore it's possible to define an attribute default
1504    value via the class attribute :attr:`default`, allowed values for the
1505    attribute via :attr:`values`, which is a list of allowed values, and
1506    whether the attribute is required or not via :attr:`required`.
1507
1508*   XIST now has real namespace support. The new class
1509    :class:`ll.xist.xsc.Prefixes` can be used to define a mapping between
1510    prefixes and namespace names. This can be used for parsing and publishing.
1511    Namespace support is even available for entities and processing instruction.
1512
1513*   Global attributes are supported now. Namespace modules for the ``xml`` and
1514    ``xlink`` namespaces have been added (and :class:`ll.xist.xsc.XML` was
1515    moved to :mod:`ll.xist.ns.xml`).
1516
1517*   A new namespace module for SVG 1.0 has been added: :mod:`ll.xist.ns.svg`.
1518
1519*   The HTML specific parts of :mod:`ll.xist.ns.specials` have been split off
1520    into a separate module :mod:`ll.xist.ns.htmlspecials`.
1521
1522*   Comparison of attributes with strings has been removed. You have to use
1523    :meth:`__unicode__` or :meth:`__str__` now before comparing.
1524
1525*   The :class:`HTMLParser` now removes unknown attributes instead of
1526    complaining.
1527
1528*   There is a new parser class :class:`BadEntityParser`, which is a SAX2
1529    parser that recognizes the character entities defined in HTML and tries to
1530    pass on unknown or malformed entities to the handler literally.
1531
1532*   To give all nodes a chance to do something after they have been parsed (e.g.
1533    to prepend the base URL for :class:`URLAttr` nodes), the parser now calls
1534    the method :meth:`parsed` immediately after node creation. This is used for
1535    the new class :class:`StyleAttr`, which uses the :class:`CSSTokenizer`, to
1536    prepend the base URL to all URLs found in a style attribute.
1537
1538*   The pixel images have been moved to the directory :dir:`px` to make image
1539    URLs shorter.
1540
1541
1542Changes in 1.6.1 (released 08/25/2003)
1543--------------------------------------
1544
1545*   Updated to work with newer versions of :mod:`ll.ansistyle`.
1546
1547*   Updated the namespaces :mod:`ll.xist.ns.struts_html` and
1548    :mod:`ll.xist.ns.struts_config11` to the state of Struts 1.1 final.
1549
1550
1551Changes in 1.6 (released 07/02/2003)
1552------------------------------------
1553
1554*   Removed the default value for the ``className`` attribute in
1555    :class:`ll.xist.ns.struts_config11.action`.
1556
1557*   Added an attribute ``type`` to
1558    :class:`ll.xist.ns.struts_config11.action_mapping`.
1559
1560
1561Changes in 1.5.13 (released 07/01/2003)
1562---------------------------------------
1563
1564*   Implemented :meth:`ll.xist.xsc.Namespace.__eq__`, so that replacing a
1565    namespace in the registry really works.
1566
1567*   Added an attribute ``target`` to :class:`ll.xist.ns.html.area`.
1568
1569
1570Changes in 1.5.12 (released 06/17/2003)
1571---------------------------------------
1572
1573*   Fixed a bug in the new :mod:`ll.xist.ns.jsp`.
1574
1575
1576Changes in 1.5.11 (released 06/13/2003)
1577---------------------------------------
1578
1579*   Updated :mod:`ll.xist.ns.jsp` to JSP 1.2.
1580
1581
1582Changes in 1.5.10 (released 06/13/2003)
1583---------------------------------------
1584
1585*   Remove the checks for attributes in attributes and moved the publication
1586    code for the full element into a separate method. This allows JSP tag
1587    library namespaces to simply overwrite :meth:`publish` to publish the
1588    element even inside attributes.
1589
1590
1591Changes in 1.5.9 (released 04/30/2003)
1592--------------------------------------
1593
1594*   Reregistering a namespace now properly overwrites the old version in
1595    ``xsc.namespaceRegistry``.
1596
1597
1598Changes in 1.5.8 (released 02/27/2003)
1599--------------------------------------
1600
1601*   :class:`ll.xist.ns.struts_config11.plug_in` now allows content (as the
1602    DTD states).
1603
1604
1605Changes in 1.5.7 (released 11/12/2002)
1606--------------------------------------
1607
1608*   :meth:`xsc.Element.__nonzero__` can no longer fall back to
1609    :meth:`xsc.Frag.__nonzero__`.
1610
1611
1612Changes in 1.5.6 (released 11/11/2002)
1613--------------------------------------
1614
1615*   Performance optimizations.
1616
1617
1618Changes in 1.5.5 (released 11/11/2002)
1619--------------------------------------
1620
1621*   Fixed a bug in :class:`ll.xist.ns.specials.autoimg`: Attributes were not
1622    converted before the size check was done.
1623
1624
1625Changes in 1.5.4 (released 09/30/2002)
1626--------------------------------------
1627
1628*   :file:`xscmake.py` now tries to strip off a trailing ``xsc`` from the
1629    filename before it falls back to the extension ``html`` (The builtin
1630    extension mapping is still tried first).
1631
1632
1633Changes in 1.5.3 (released 09/25/2002)
1634--------------------------------------
1635
1636*   Added new processing instruction class :class:`ll.xist.ns.php.expression`
1637    that generates a PHP ``print`` statement from its content.
1638
1639
1640Changes in 1.5.2 (released 09/19/2002)
1641--------------------------------------
1642
1643*   Removed the ``value`` magic from :class:`ll.xist.ns.form.checkbox` as this
1644    conflicted with dynamic ``value`` values.
1645
1646
1647Changes in 1.5.1 (released 09/17/2002)
1648--------------------------------------
1649
1650*   Comparison of attributes with strings has been removed. You have to use
1651    :meth:`__unicode__` or :meth:`__str__` instead.
1652
1653*   The :class:`HTMLParser` now removes unknown attributes instead of
1654    complaining.
1655
1656*   There is a new parser class :class:`BadEntityParser`, which is a SAX2
1657    parser that recognizes the character entities defined in HTML and tries to
1658    pass on unknown or malformed entities to the handler literally.
1659
1660*   To give all nodes a chance to do something after they have been parsed (e.g.
1661    to prepend the base URL for :class:`URLAttr` nodes), the parser now calls
1662    the method :meth:`parsed()` immediately after node creation. This is used
1663    for the new class :class:`StyleAttr`, which uses the :class:`CSSTokenizer`,
1664    to prepend the base url to all urls found in a style attribute.
1665
1666*   The :class:`HTMLParser` now removes unknown attributes instead of
1667    complaining.
1668
1669*   There is a new parser class :class:`BadEntityParser`, which is a SAX2
1670    parser that recognizes the character entities defined in HTML and tries to
1671    pass on unknown or malformed entities to the handler literally.
1672
1673*   To give all nodes a chance to do something after they have been parsed (e.g.
1674    to prepend the base URL for :class:`URLAttr` nodes), the parser now calls
1675    the method :meth:`parsed` immediately after node creation. This is used for
1676    the new class :class:`StyleAttr`, which uses the :class:`CSSTokenizer`, to
1677    prepend to base URL to all URLs found in a style attribute.
1678
1679
1680Changes in 1.4.3 (released 04/29/2002)
1681--------------------------------------
1682
1683*   New namespace module :mod:`xist.ns.struts_config11` allows to parse and
1684    modify Struts_ configuration files conforming to the `Struts 1.1 DTD`_.
1685
1686    .. _Struts: http://jakarta.apache.org/struts/
1687    .. _Struts 1.1 DTD: http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd
1688
1689
1690Changes in 1.4.2 (released 03/22/2002)
1691--------------------------------------
1692
1693*   Updated :file:`xscmake.py` to be compatible with the new :mod:`url` module.
1694
1695*   :class:`xist.ns.jsp.directive_page` now automatically sets the
1696    ``contentType`` on publishing.
1697
1698
1699Changes in 1.4.1 (released 03/21/2002)
1700--------------------------------------
1701
1702*   Removed :class:`TidyURLInputSource`. Now it's possible to pass a :var:`tidy`
1703    flag to the remaining functions :func:`parseString`, :func:`parseFile` and
1704    :func:`parseURL` to specify whether the source should be tidied.
1705
1706*   To prevent an element from being registered in a :class:`Namespace` the
1707    class attribute :attr:`register` can be used now. This makes it possible
1708    to have a name for the element even when it's not registered.
1709
1710*   :mod:`xist.ns.form` elements now have all the attributes that the
1711    corresponding elements from :mod:`xist.ns.html` have.
1712
1713*   Removed the old :mod:`xist.url` from the Windows distribution.
1714
1715
1716Changes in 1.4 (released 03/18/2002)
1717------------------------------------
1718
1719*   Reimplemented URL handling again. Now the new global module :mod:`url` is
1720    used for that.
1721
1722
1723Changes in 1.3.1 (released 03/14/2002)
1724--------------------------------------
1725
1726*   Added a method :meth:`pretty` to :class:`Node` for generating a pretty
1727    printable version of the node.
1728
1729*   ``xsc.Node.name`` no longer is a class method, but a class attribute, that
1730    will be set at class instantiation time by the meta class.
1731
1732
1733Changes in 1.3 (released 02/12/2002)
1734------------------------------------
1735
1736*   Ported to Python 2.2. :class:`Node` is now derived from :class:`object`,
1737    :class:`Frag` from :class:`list` and there's a new class :class:`Attrs`
1738    which is derived from :class:`dict` for the attribute mappings. All
1739    presenters have been adapted to work with :class:`Attrs`. In addition to
1740    the usual dictionary methods and operators :class:`Attrs` has a
1741    method :meth:`without` that returns a copy of the :class:`Attrs` instance
1742    with some specified attributes removed.
1743
1744*   All the node classes now have a new method :meth:`walk` that generates all
1745    nodes in the tree using the new generator feature of Python 2.2.
1746
1747*   Also a new method :meth:`walkPath` has been added that works the same as
1748    :meth:`walk` but yields the complete path to each node as a list.
1749
1750*   Added a class :class:`block` to :mod:`xist.ns.jsp`. The content of the
1751    :class:`block` instance will simply be enclosed in a ``{}`` block.
1752    :mod:`xist.ns.php` got such a class too.
1753
1754*   Added a new module :mod:`xist.ns.ihtml` for i-mode HTML.
1755
1756*   Added new modules :mod:`xist.ns.css` and :mod:`xist.ns.cssspecials` for
1757    generating CSS.
1758
1759*   Now the various attributes of the :class:`Converter` object are collected in
1760    a :class:`ConverterState` object and it's possible to push and pop those
1761    states, i.e. it's now easy to temporarily modify a converter object during
1762    a :meth:`convert` call and revert back to a previous state afterwards.
1763
1764*   :func:`parseURL` and :func:`parseTidyURL` now have an additional parameter
1765    :var:`headers` which is a list of string pairs specifying additional
1766    headers to be passed in with the request.
1767
1768*   :func:`parseString` has an additional parameter :var:`systemId` which will
1769    be the system id of the :class:`InputSource`.
1770
1771*   The distribution now includes the makefile and the XML source files so now
1772    the distribution can rebuild ifself.
1773
1774*   Various other small bugfixes and enhancements.
1775
1776
1777Changes in 1.2.5 (released 12/03/2001)
1778--------------------------------------
1779
1780*   Added a new element :class:`contentscripttype` to :mod:`xist.ns.meta` that
1781    generates a ``<meta http-equiv="Content-Script-Type" ...>`` element.
1782
1783*   :func:`xist.ns.doc.explain` now generates anchor elements for the class,
1784    function and method description, so now the links on the XIST webpages
1785    work.
1786
1787*   Docstrings and documentation has been reworked. Now :class:`xist.ns.doc.pyref`
1788    no longer implies a font change. Use the classes :class:`xist.ns.doc.module`,
1789    :class:`xist.ns.doc.class`, :class:`xist.ns.doc.method`,
1790    :class:`xist.ns.doc.function` and :class:`xist.ns.doc.arg` to mark up your
1791    Python identifiers.
1792
1793*   Added the attributes ``type`` and ``key`` to
1794    :class:`xist.ns.struts_config.data_source`.
1795
1796
1797Changes in 1.2.4 (released 11/23/2001)
1798--------------------------------------
1799
1800*   Added the deprecated attributes ``start`` to :class:`xist.ns.html.ol` and
1801    ``value`` to :class:`xist.ns.html.li`.
1802
1803
1804Changes in 1.2.3 (released 11/22/2001)
1805--------------------------------------
1806
1807*   Added missing :meth:`asPlainString` methods to :class:`Comment` and
1808    :class:`DocType`.
1809
1810
1811Changes in 1.2.2 (released 11/16/2001)
1812--------------------------------------
1813
1814*   :meth:`xist.url.URL.fileSize` and :meth:`xist.url.URL.imageSize` now use
1815    the warning framework to report errors.
1816
1817*   There is a new presenter named :class:`CodePresenter` that dumps the tree
1818    as Python source code.
1819
1820*   The filenames of the pixel images used by :class:`xist.ns.specials.pixel`
1821    have changed. These images are now included.
1822
1823
1824Changes in 1.2.1 (released 10/08/2001)
1825--------------------------------------
1826
1827*   URLs that are completely dynamic will now be left in peace when parsing or
1828    publishing.
1829
1830
1831Changes in 1.2 (released 10/03/2001)
1832------------------------------------
1833
1834*   :class:`xist.ns.meta.keywords` and :class:`xist.ns.meta.description` no
1835    longer call :meth:`asPlainString` on their content. This makes it possible
1836    to e.g. generate the keywords via JSP::
1837
1838        >>> from xist import parsers
1839        >>> from xist.ns import meta, jsp
1840        >>> s = '<keywords>' + \
1841        ...     '<?jsp:expression "foo"?>' + \
1842        ...     '</keywords>'
1843        >>> e = parsers.parseString(s)
1844        >>> print e.conv().asBytes()
1845        <meta name="keywords" content="<%= "foo" %>" />
1846
1847*   When an element occurs inside an attribute during publishing, there won't
1848    be an exception raised any more. Instead the content of the element will be
1849    published. This fixes problems with abbreviation entities inside attributes.
1850
1851*   :class:`xist.parsers.TidyURLInputSource` now uses the new experimental
1852    eGenix mx Extension package, which includes a Python port of tidy.
1853
1854*   :meth:`__repr__` now uses the new class :class:`presenters.PlainPresenter`
1855    which gives a little more info than the default :meth:`__repr__`.
1856
1857*   URL handling has been changed again. Upto now, :class:`URLAttr` had an
1858    additional instance attribute ``base``, which was the "base" file/URL from
1859    which the attribute was parsed. Now the base URL will be directly
1860    incorporated into the URL. You can pass the base URL to all the parsing
1861    functions. Similar to that when publishing you can specify a base URL. All
1862    URLs in the tree will be output relative to this base URL. Joining URLs is
1863    now done via :meth:`__div__` and no longer via :meth:`__add__`. This makes
1864    it more consistent with :mod:`fileutils`. The plan is to make URLs string
1865    like immutable objects and to merge them with :class:`fileutils.Filename`.
1866
1867*   :class:`xist.ns.specials.php` has been moved to its own module
1868    (:mod:`xist.ns.php`). This module provided additional convenience
1869    processing instructions (just like :mod:`xist.ns.jsp` does).
1870
1871
1872Changes in 1.1.3 (released 09/17/2001)
1873--------------------------------------
1874
1875*   The global namespace registry now keeps a sequential list of all registered
1876    namespaces, which will be used by the parser when searching for names. This
1877    gives a predictable search order even without using :class:`Namespaces`
1878    and its :meth:`pushNamespace` method: modules imported last will be searched
1879    first.
1880
1881*   Processing instructions are now allowed inside attributes when publishing.
1882
1883*   :mod:`xist.ns.docbooklite` has been renamed to :mod:`xist.ns.doc`. It can
1884    now generate HTML and Docbook output and has improved a lot. The XIST
1885    web pages now use this for automatic documentation generation. The doc
1886    example has been removed.
1887
1888*   :class:`xist.url.URL` now has a new method :meth:`info` that returns the
1889    headers for the file/URL.
1890
1891*   :class:`xist.url.URL` now has a methods :meth:`fileSize` and
1892    :meth:`imageSize` too.
1893
1894*   :class:`xist.ns.jsp.directive_page` now has new attribute ``session``.
1895
1896
1897Changes in 1.1.2 (released 08/21/2001)
1898--------------------------------------
1899
1900*   :meth:`__repr__` now uses the new class :class:`presenters.PlainPresenter`
1901    which gives a little more info than the default :meth:`__repr__`.
1902
1903
1904Changes in 1.1.1 (released 08/01/2001)
1905--------------------------------------
1906
1907*   Small bugfix in :func:`presenters.strProcInst`.
1908*   Fixed :class:`xist.ns.struts_html.option` to allow content.
1909
1910
1911Changes in 1.1 (released 07/19/2001)
1912------------------------------------
1913
1914*   Sequences in constructor arguments for :class:`Frag` and :class:`Element`
1915    are again expanded and it's again possible to pass dictionaries in an
1916    :class:`Element` constructor to specify attributes. As sequences are always
1917    unpacked, the method :meth:`extend` is gone. This works for :meth:`append`
1918    and :meth:`insert` too.
1919
1920*   :class:`Node` and :class:`Frag` implement :meth:`__mul__` and
1921    :meth:`__rmul__`, so you can do stuff like::
1922
1923        html.br()*5
1924
1925    This returns a :class:`Frag` with five times to same node.
1926
1927*   Arguments for the converter constructor can be passed to
1928    :meth:`xist.xsc.Node.conv` now, so it's possible to do stuff like this::
1929
1930        from xist.ns import code
1931        print code.Eval("return converter.lang").conv(lang="en").asBytes()
1932
1933    which will print ``en``.
1934
1935*   The option :var:`XHTML` for the publishers has been changed to lowercase.
1936
1937*   :class:`xist.ns.html.html` will automatically generate a ``lang`` and
1938    ``xml:lang`` attribute when the converter has a language set.
1939
1940
1941Changes in 1.0 (released 06/18/2001)
1942------------------------------------
1943
1944*   New module for WML 1.3.
1945
1946*   The publishing interface has changed internally and publishing should be
1947    faster now.
1948
1949*   Publishers now support a new parameter: :var:`usePrefix`, which specifies
1950    if namespace prefixes should be output for the element names.
1951
1952*   Part of the implementation of the publishing stuff has been moved to C, so
1953    now you'll need a C compiler to install XIST.
1954
1955*   When publishing ``"``, it will now only be replaced with ``&quot;`` inside
1956    attributes.
1957
1958*   All the :meth:`asHTML` methods now have an additional argument
1959    :var:`converter`. This makes it possible to implement different processing
1960    modes or stages for new elements. All currently implemented elements and
1961    entities ignore this argument, but pass it on in the call to their
1962    childrens' :meth:`asHTML` method. As the name :meth:`asHTML` no longer
1963    makes sense, :meth:`asHTML` has been renamed to :meth:`convert`.
1964
1965*   There is now a tool :file:`dtd2xsc.py` in the :dir:`scripts` directory that
1966    creates a skeleton XIST module from a DTD (this requires xmlproc from the
1967    PyXML package).
1968
1969*   New preliminary module for DocBook 4.12. (Incomplete: :meth:`convert`
1970    methods and Unicode character entities are missing; any volunteers for
1971    implementing 375 classes?)
1972
1973*   New module :file:`ruby.py` that implements the `W3C Ruby draft`_.
1974
1975    .. _W3C Ruby draft: http://www.w3.org/TR/ruby/xhtml11-ruby-1.mod
1976
1977*   :file:`sql.py` has been removed from XIST, but is available as a
1978    separate module.
1979
1980*   The parsing interface has been changed. Parsing is now done with the
1981    functions :func:`parseFile`, :func:`parseString`, :func:`parseURL` and
1982    :func:`parseTidyURL` in the module :mod:`parsers`. It's now possible to
1983    specify which parser should be used for parsing by passing a SAX2 parser
1984    instance to any of these functions. XIST now includes a rudimentary
1985    SAX2 driver for :class:`sgmlop` and a rudimentary HTML parser that
1986    emits SAX2 events.
1987
1988*   The python-quotes example has been updated to work with expat.
1989
1990*   Added a new example: media.
1991
1992*   All abbreviation entities have been moved to a new module :file:`abbr.py`.
1993
1994*   All the modules that provide new elements and entitites have been moved
1995    to a subpackage :mod:`ns`.
1996
1997*   :class:`Frag` and :class:`Element` now have new methods :meth:`sorted`,
1998    :meth:`reversed`, :meth:`filtered` and :meth:`shuffled` that return sorted,
1999    reversed, filtered and shuffled versions of the :class:`Frag`/:class:`Element`
2000    object.
2001
2002*   New namespace modules :file:`ns/jsp.py` and :file:`ns/struts_html.py` have
2003    been added that allow you to use JSP_ and Struts_ tags with XIST.
2004
2005    .. _JSP: http://java.sun.com/products/jsp/
2006    .. _Struts: http://jakarta.apache.org/struts/
2007
2008*   A new method :meth:`asText` was added, that returns the node as a formatted
2009    plain ASCII text (this requires that w3m__ is installed.)
2010
2011    __ http://w3m.sf.net/
2012
2013*   :file:`make.py` has been renamed to :file:`xscmake.py` and moved to the
2014    :dir:`scripts` directory, it will be installed as a callable script with
2015    ``python setup.py install_scripts``.
2016
2017*   :file:`xscmake.py` has a new option :option:`--files`/:option:`-f`.
2018    The argument is a file containing a list of filenames (one name per line)
2019    that should be converted.
2020
2021*   :file:`xscmake.py` has a new option :option:`--parser`/:option:`-r` for
2022    specifying which parser to use. Allowed values are ``sgmlop`` and ``expat``.
2023
2024*   :file:`xscmake.py` has a new option :option:`--namespace`/:option:`-n`
2025    that can be used for appending :class:`Namespace` objects to the
2026    :class:`Namespaces` object used by :file:`xscmake.py`::
2027
2028        xscmake.py -n html -n spam eggs.xsc
2029
2030    With this call the parser will find element classes from the module with
2031    the prefix name ``spam`` before those from ``html`` and those before
2032    anything else.
2033
2034*   :class:`xist.url.URL` no longer has an attribute :attr:`ext`. :attr:`file`
2035    and :attr:`ext` are merged.
2036
2037*   The special treatment of sequences as constructor arguments to :class:`Frag`
2038    and :class:`Element` has been removed, so XIST will no longer remove one
2039    level of nesting. If you still want that, use a ``*`` argument.
2040
2041*   :class:`Frag` and :class:`Element` now have a new method :meth:`mapped`,
2042    that recursively maps the nodes through a function. This is like
2043    :meth:`convert` but via an external function.
2044
2045*   Attribute handling has been improved thanks to a suggestion by Hartmut
2046    Goebel: :meth:`Element.__getitem__` now always works as long as the
2047    attribute name is legal. If the attribute is not set, an empty attribute
2048    will be returned. All empty attributes will be considered as being not set
2049    and so :meth:`hasAttr` returns ``0`` for them, and :meth:`publish` doesn't
2050    publish them. This simplifies several very common cases:
2051
2052    *   Copying an attribute from one element to another works regardless of
2053        whether the attribute is set or not;
2054
2055    *   Testing for an attributes presence can now be done much simpler:
2056        ``if element["attrname"]`` instead of ``if element.hasAttr("attrname")``
2057        (which still works, and should be a little faster);
2058
2059    *   When you construct an XIST tree and the presence or absence of an
2060        attribute is tied to a condition, you can construct the attribute in
2061        advance and use it afterwards in the tree construction::
2062
2063            if condition:
2064                align = "right"
2065            else:
2066                align = None
2067            node = html.div("spam", align=align)
2068
2069        So, when the ``condition`` is false, the node will not have the
2070        attribute ``align`` set.
2071
2072*   :class:`xist.ns.cond.If` (and :class:`xist.ns.cond.ElIf`) can now be used
2073    to test for attributes of the converter. I.e. it's possible to write the
2074    following XML::
2075
2076        <if lang="en">Title
2077        <elif lang="de">Überschrift
2078        </if>
2079
2080*   URL handling has be completely changed and is much, much simpler now. There
2081    are no more path markers. To specify an URL that is relative to the current
2082    directory use the scheme ``root`` (e.g. ``root:main.css``).
2083
2084
2085Changes in 0.4.7 (released 11/24/2000)
2086--------------------------------------
2087
2088*   Fixed a bug in the entity handling.
2089
2090*   Added a few deprecated elements and attributes to the :mod:`html` module.
2091
2092*   Improved the publishing of attributes. Now all attribute values will be
2093    published. For boolean attributes no value will be published for ``XHTML==0``
2094    and the attribute name will be used for ``XHTML==1`` or ``XHTML==2``.
2095
2096*   :meth:`Element.compact` now works (better) ;).
2097
2098*   Incorparated many bug fixes from Hartmut Goebel.
2099
2100*   Implemented :meth:`xsc.Element.copyDefaultAttrs`, which copies unset
2101    attributes over from a dictionary (simplifies implementing
2102    :class:`specials.plaintable` and :class:`specials.plainbody`).
2103
2104*   :meth:`providers.Provider.pushNamespace` now handles multiple arguments
2105    which may be :class:`Namespace` objects or modules (in which case,
2106    ``module.namespace`` will be pushed).
2107
2108*   :meth:`providers.Providers.popNamespace` can now pop multiple namespaces
2109    at once.
2110
2111*   :class:`providers.TidyURIProvider` now uses :func:`os.popen3` for piping
2112    the file through tidy, so now there will be no more temporary files. The
2113    call to tidy now includes options that hopefully make the output more
2114    suited to XIST.
2115
2116*   Incorparated a new :file:`url.py` by Hartmut Goebel, that fixes many problem
2117    (e.g. optimizing ``http://server/foo/bar/../../baz.gif`` now works.)
2118
2119*   :file:`make.py` includes a new option :option:`--path` for adding
2120    directories to :data:`sys.path`.
2121
2122
2123Changes in 0.4.6 (released 11/03/2000)
2124--------------------------------------
2125
2126*   Now uses :class:`sgmlop.XMLParser` instead of :class:`sgmlop.SGMLParser`,
2127    so case is preserved.
2128
2129*   Fixed another regression from the URL to string conversion change.
2130
2131
2132Changes in 0.4.5 (released 11/01/2000)
2133--------------------------------------
2134
2135*   Converting URLs to nodes is now done in :func:`ToNode`, so :class:`URL`
2136    objects can be used everywhere.
2137
2138*   Fixed a few bugs in :meth:`Text._strtext` and :meth:`URLAttr._str`.
2139
2140
2141Changes in 0.4.4 (releases 10/27/2000)
2142--------------------------------------
2143
2144*   Now testing if characters can be encoded with the specified encoding is
2145    done directy. This means, that escaping unencodable characters now works
2146    even with exotic encodings (tested with `JapaneseCodecs 1.0.1`__.
2147
2148    __ http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/
2149
2150*   The :class:`URLAttr` constructor now can handle a single parameter of the
2151    type :class:`URL`.
2152
2153*   The URL to string conversion function have changed: :meth:`URL.asString`
2154    returns the URL with path markers, :meth:`URL.asPlainString` returns the
2155    URL without path markers.
2156
2157*   Added the ``i18n`` attribute to the :class:`font` element.
2158
2159*   Fixed the clashes between the class names for the elements and entities
2160    :class:`sub` and :class:`sup` in :file:`html.py`.
2161
2162*   Several small enhancements and bug fixes contributed by Hartmut Goebel.
2163
2164
2165Changes in 0.4.3 (released 10/19/2000)
2166--------------------------------------
2167
2168*   Now processing instruction classes are registered in the same way as
2169    elements and entities are.
2170
2171*   The leaf nodes (:class:`Text`, :class:`Comment`, :class:`ProcInst`) are now
2172    considered immutable. This means that their :meth:`asHTML` method can
2173    simply return :var:`self`, because now those nodes can be shared between
2174    trees. Functionality for manipulation the objects is provided by a mixin
2175    class very similar to :class:`UserString`. All this results in a speedup
2176    of about 10% for the python-quotes example.
2177
2178*   Small optimizations in the :meth:`asHTML` methods of :class:`Element` and
2179    :class:`Frag` optimized away many calls to :meth:`append`, :meth:`extend`
2180    and :meth:`ToNode` and result in a speedup of about 30% for the
2181    python-quotes example. One consequence of this is that :class:`Null`
2182    objects will no longer be ignored.
2183
2184
2185Changes in 0.4.2 (released 09/24/2000)
2186--------------------------------------
2187
2188*   New elements :class:`keywords` and :class:`description` in :file:`meta.py`.
2189
2190*   Fixed a bug in :meth:`Namespace.register`, now setting ``name=None`` to
2191    prevent an element from being registered works again.
2192
2193
2194Changes in 0.4.1 (released 09/21/2000)
2195--------------------------------------
2196
2197*   A new module named :file:`meta.py` has been created, that simplifies
2198    generating meta tags.
2199
2200*   Various small bugfixes.
2201
2202
2203Changes in 0.4 (released 09/19/2000)
2204------------------------------------
2205
2206*   XIST now requires at least Python 2.0b1.
2207
2208*   A new bugfixed version of the sgmlop source is available from the
2209    `FTP site`_.
2210
2211    .. _FTP site: ftp://ftp.livinglogic.de/pub/livinglogic/xist/
2212
2213*   XIST now completely supports Unicode. For output any encoding known to
2214    Python can be used, so now you can output your HTML in ASCII, Latin-1,
2215    UTF-8, UTF-16, ...
2216
2217*   All publishers have been updated to support Unicode. The publishing
2218    interface has been streamlined (:var:`encoding` and :var:`XHTML` parameters
2219    are now attributes of the publisher).
2220
2221*   :meth:`asString` will now always return a Unicode string. If you want a byte
2222    string use :meth:`asBytes` instead, where the encoding can be specified as
2223    an argument.
2224
2225*   There an additional publisher class :class:`FilePublisher`, which can be
2226    used for publishing to a file (or anything else that has a :meth:`write`
2227    and a :meth:`writelines` method, and is supported by the stream writer
2228    available through :func:`codecs.lookup`).
2229
2230*   Element and attribute names are no longer converted to lowercase. If you
2231    have an attribute name which clashes with a Python keyword (e.g. ``class``)
2232    append an underscore (``_``), which will be removed before accessing the
2233    attribute. This is the "official" Python method for handling these cases.
2234
2235*   Elements and entities are no longer registered one by one. Now you can
2236    build :class:`Namespace` objects which are used for searching and there are
2237    :meth:`pushNamespace` and :meth:`popNamespace` functions in :mod:`XSC.xsc`.
2238    For more info, see the source.
2239
2240*   Image size calculation has been removed from :class:`html.img` and
2241    :class:`html.input`. Use :class:`specials.autoimg` and
2242    :class:`specials.autoinput` for that.
2243
2244*   :meth:`__getitem__`, :meth:`__setitem__` and :meth:`__delitem` of
2245    :class:`Frag` and :class:`Element` now accepts a list as an argument. The
2246    method will be applied recursively, i.e. ``e[[0, 1, "foo", 2]`` is the
2247    same as ``e[0][1]["foo"][2]``.
2248
2249*   The deprecated module :file:`db.py` no longer exists. Useful functions and
2250    elements from :file:`db.py` have been moved to :file:`sql.py` and
2251    :file:`form.py` respectively.
2252
2253*   When using :func:`xsc.make` the encoding and XHTML parameters to use can
2254    now be specified on the command line (e.g. ``--encoding utf-8 --xhtml 2``)
2255
2256*   Handling of multiline ``<?xsc-eval?>`` and ``<?xsc-exec?>`` has been
2257    enhanced, although XIST will not be able to guess the correct indentation
2258    in all cases. As a workarround simply add a Python comment to the beginning.
2259    So the following won't work::
2260
2261        <?xsc-exec
2262            for i in xrange(10):
2263                do(i)
2264        ?>
2265
2266    But this will::
2267
2268        <?xsc-exec
2269            #
2270            for i in xrange(10):
2271                do(i)
2272        ?>
2273
2274*   Make functionality has been moved to :file:`make.py`, as certain modules
2275    can't be used as the main script, because reimporting them in processing
2276    instructions won't work. Now you can simply call::
2277
2278        make.py --import xist.html --import spam eggs.xsc
2279
2280*   There is a new module :file:`cond.py`, that contains elements that can be
2281    used for conditionals::
2282
2283        <?xsc-exec a=42?>
2284        <if cond="a==21">
2285            <b>foo</b>
2286        <elif cond="a==42"/>
2287            <i>bar</i>
2288        <else/>
2289            baz
2290        </if>
2291
2292
2293Changes in 0.3.9 (released 08/10/2000)
2294--------------------------------------
2295
2296*   sgmlop will now be found either via ``import sgmlop`` or via
2297    ``from xml.parsers import sgmlop``.
2298
2299
2300Changes in 0.3.8 (released 07/14/2000)
2301--------------------------------------
2302
2303*   Fixed a bug in :meth:`URLAttr.publish`, which prevented :class:`URLAttr`
2304    from working at all.
2305
2306
2307Changes in 0.3.7 (released 07/06/2000)
2308--------------------------------------
2309
2310*   Fixed a bug in :class:`html.img` and :class:`html.input`. Now image size
2311    calculation works again.
2312
2313
2314*   Changes in 0.3.6 (released 07/04/2000)
2315
2316*   Fixed a bug in :meth:`Node._matches`, which resulted in a non working
2317    :meth:`find`.
2318
2319
2320Changes in 0.3.5 (released 07/02/2000)
2321--------------------------------------
2322
2323*   The documentation example has been enhanced. Now documenting methods works.
2324
2325*   When the member :attr:`elementname`: in the element class is set before
2326    calling :func:`registerElement`, this element name will be used for the
2327    element. This allows custom names even when using
2328    :func:`registerAllElements`.
2329
2330*   Comparison of scheme and server in URLs is done case insensitive (as
2331    :rfc:`2068` requires.)
2332
2333*   Image size calculation is now done in :meth:`asString` and not in
2334    :meth:`asHTML`. This allows to write faster code. Old method::
2335
2336        e = html.div(html.img(...),gurk.hurz()).asHTML().asString()
2337
2338    New method::
2339
2340        e = html.div(html.img(...),gurk.hurz().asHTML()).asString()
2341
2342*   Image size calculation is now done for ``<nput type="image">``. The ``size``
2343    attribute is set to the image width.
2344
2345*   Manipulating the path in an URL is now done via the usual
2346    :meth:`__setitem__`/:meth:`__getitem__` stuff, which keeps the path in a
2347    consistent state::
2348
2349        >>> from xist.URL import URL
2350        >>> u = URL("/foo/*/../bar/baz.gif")
2351        >>> del u[1]
2352        >>> u
2353        URL(scheme='server', path=['bar'], file='baz', ext='gif')
2354
2355*   :meth:`findNodes` (which has been shortened to :meth:`find`) has an
2356    additional argument :var:`test`, which can be a test function that will be
2357    called when the node passes all other tests.
2358
2359*   :meth:`asString` no longer generates a string directly, but uses the new
2360    method :meth:`publish`, which has an additional argument :var:`publisher`,
2361    to which the strings to be output are passed.
2362
2363
2364Changes in 0.3.4 (released 05/31/2000)
2365--------------------------------------
2366
2367*   Location information is now copied over in :meth:`clone`, :meth:`asHTML`
2368    and :meth:`compact` where appropriate, so you know even in the HTML tree
2369    where something came from.
2370
2371*   ``xsc.repransi`` can now have three values:
2372
2373    0
2374        coloring is off
2375    1
2376        coloring is on for a dark background
2377    2
2378        coloring is on for a light background
2379
2380*   All ``repransi`` variables are now arrays with two strings, the first for
2381    dark, the second for light.
2382
2383
2384Changes in 0.3.3 (released 05/30/2000)
2385--------------------------------------
2386
2387*   The workaround for the trailing CDATA bug in sgmlop has been removed, so
2388    now you'll need a newer version of sgmlop (included in PyXML 0.5.5.1).
2389
2390
2391Changes before 0.3.3
2392--------------------
2393
2394*   These changes predate written history.
Note: See TracBrowser for help on using the browser.