root/livinglogic.python.xist/NEWS.rst @ 4524:00f8808b9221

Revision 4524:00f8808b9221, 113.2 KB (checked in by Walter Doerwald <walter@…>, 8 years ago)

Names for UL4 templates.

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