root/livinglogic.python.xist/NEWS.rst @ 3774:fe39e1d66b08

Revision 3774:fe39e1d66b08, 89.6 KB (checked in by Walter Doerwald <walter@…>, 10 years ago)

Update requirements.

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