root/livinglogic.python.xist/NEWS.rst @ 4519:c4c0660af381

Revision 4519:c4c0660af381, 112.7 KB (checked in by Walter Doerwald <walter@…>, 8 years ago)

Added options --include and --exclude to oracreate, oradrop and oragrant.

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