root/livinglogic.python.xist/NEWS.rst @ 3063:ed43c7b2e3a3

Revision 3063:ed43c7b2e3a3, 68.9 KB (checked in by Walter Doerwald <walter@…>, 12 years ago)

Fix typo.

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