root/livinglogic.python.xist/NEWS.rst @ 4529:2af1ce09d6b7

Revision 4529:2af1ce09d6b7, 113.5 KB (checked in by Walter Doerwald <walter@…>, 8 years ago)

Fix sisyphus: Use ul4c.Template instead of ul4c.compile.

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