root/livinglogic.python.xist/NEWS.rst @ 3148:1a71e17630c8

Revision 3148:1a71e17630c8, 71.8 KB (checked in by Walter Doerwald <walter@…>, 12 years ago)

Fix typos.

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