Changeset 3170:69d4844d2a73 in livinglogic.python.xist

Show
Ignore:
Timestamp:
01/23/08 22:33:03 (12 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Rewrap to stay belong 80 chars.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • NEWS.rst

    r3167 r3170  
     1Changes in 3.2 (released ??/??/2008) 
     2------------------------------------ 
     3 
     4*   :class:`ll.xist.xsc.Pool` doesn't use a :class:`WeakValueDictionary` any 
     5    longer. This means it can now store *any* object. A method :meth:`clear` 
     6    has been added, which removes all registered objects. 
     7 
     8 
    19Changes in 3.1 (released 01/18/2008) 
    210------------------------------------ 
     
    412*   Fixed the problem that the source distibution didn't include header files. 
    513 
    6 *   If an :class:`URLAttr` attribute contains a processing instruction XIST will 
    7     no longer transform the URL in any way. 
     14*   If an :class:`URLAttr` attribute contains a processing instruction XIST 
     15    will no longer transform the URL in any way. 
    816 
    917*   Fixed a parser bug, where attributes were dropped when the attribute value 
    1018    was empty. 
    1119 
    12 *   Putting a module into a :class:`Pool` object now copies the ``xmlns`` attribute 
    13     too. This makes it possible to use :class:`Pool` objects as conversion targets. 
     20*   Putting a module into a :class:`Pool` object now copies the ``xmlns`` 
     21    attribute too. This makes it possible to use :class:`Pool` objects as 
     22    conversion targets. 
    1423 
    1524 
     
    1827 
    1928*   Namespaces have been greatly simplified. There are no namespace modules any 
    20     longer. An element class can be assigned a namespace by setting the ``xmlns`` 
    21     class attribute to the namespace name. Global attributes can be assigned a 
    22     namespace by setting the ``xmlns`` attribute on the attribute class itself 
    23     (*not* on the :class:`Attrs` class). The classes :class:`Prefixes` and 
    24     :class:`NSPool` are gone too. Instead a new class :class:`Pool` is used to 
    25     specify which classes should be used for parsing. 
     29    longer. An element class can be assigned a namespace by setting the 
     30    ``xmlns`` class attribute to the namespace name. Global attributes can be 
     31    assigned a namespace by setting the ``xmlns`` attribute on the attribute 
     32    class itself (*not* on the :class:`Attrs` class). The classes 
     33    :class:`Prefixes` and :class:`NSPool` are gone too. Instead a new class 
     34    :class:`Pool` is used to specify which classes should be used for parsing. 
    2635 
    2736*   Dependency on PyXML_ has finally been dropped. XIST now uses its own XML 
     
    3342    .. _sgmlop: http://effbot.org/zone/sgmlop-index.htm 
    3443 
    35 *   Tree traversal has been rewritten again. XFind expressions involving multiple 
    36     uses of ``//`` now work correctly. The method :meth:`walk` now doesn't yield 
    37     :class:`Cursor` objects, but simple path lists (actually it's always the same 
    38     list, if you want distinct lists use :meth:`walkpath`). Applying XFind 
    39     expressions to nodes directly is no longer supported, you have to call 
    40     :meth:`walk`, :meth:`walknode` or :meth:`walkpath` with the XFind expression 
    41     instead. Many XFind operators have been renamed and/or reimplemented 
    42     (see the documentation for the :mod:`xfind` module for more information). 
     44*   Tree traversal has been rewritten again. XFind expressions involving 
     45    multiple uses of ``//`` now work correctly. The method :meth:`walk` now 
     46    doesn't yield :class:`Cursor` objects, but simple path lists (actually it's 
     47    always the same list, if you want distinct lists use :meth:`walkpath`). 
     48    Applying XFind expressions to nodes directly is no longer supported, you 
     49    have to call :meth:`walk`, :meth:`walknode` or :meth:`walkpath` with the 
     50    XFind expression instead. Many XFind operators have been renamed and/or 
     51    reimplemented (see the documentation for the :mod:`xfind` module for more 
     52    information). 
    4353 
    4454*   The methods :meth:`__getitem__`, :meth:`__setitem__` and :meth:`__delitem__` 
     
    5363    *   ``for c in node[xfind.empty]: print c.bytes()`` to print all empty 
    5464        (element) children of ``node``; 
    55     *   ``del node[node[0]]`` to delete the first child node (which is silly, but 
    56         illustrates that you can pass a node to get/replace/delete that node); 
     65    *   ``del node[node[0]]`` to delete the first child node (which is silly, 
     66        but illustrates that you can pass a node to get/replace/delete that 
     67        node); 
    5768 
    5869*   A new module :mod:`ll.xist.css` has been added which contains CSS related 
     
    100111    __ http://docutils.sourceforge.net/rst.html 
    101112 
    102 *   Many classes in the :mod:`ll.xist.ns.doc` have been renamed to more familiar 
    103     names (from HTML, XHTML 2 or ReST). 
    104  
    105 *   The ``media`` attribute of :class:`html.link` and :class:`html.style` now has 
    106     a method :meth:`hasmedia`. 
     113*   Many classes in the :mod:`ll.xist.ns.doc` have been renamed to more 
     114    familiar names (from HTML, XHTML 2 or ReST). 
     115 
     116*   The ``media`` attribute of :class:`html.link` and :class:`html.style` now 
     117    has a method :meth:`hasmedia`. 
    107118 
    108119*   The node method :meth:`asBytes` has been renamed to :meth:`bytes` and 
     
    118129    argument instead of issuing a warning. 
    119130 
    120 *   A class attribute :attr:`empty` inside element classes will now no longer get 
    121     converted into :attr:`model`. 
     131*   A class attribute :attr:`empty` inside element classes will now no longer 
     132    get converted into :attr:`model`. 
    122133 
    123134*   :class:`ll.xist.ns.doc.pyref` now copes better with decorated methods. 
    124135 
    125136*   The deprecated :class:`Element` methods :meth:`hasAttr`, :meth:`hasattr`, 
    126     :meth:`isallowedattr`, :meth:`getAttr`, :meth:`getattr`, :meth:`setDefaultAttr`, 
    127     :meth:`setdefaultattr`, :meth:`attrkeys`, :meth:`attrvalues`, :meth:`attritems`, 
    128     :meth:`iterattrkeys`, :meth:`iterattrvalues`, :meth:`iterattritems`, 
    129     :meth:`allowedattrkeys`, :meth:`allowedattrvalues`, :meth:`allowedattritems`, 
     137    :meth:`isallowedattr`, :meth:`getAttr`, :meth:`getattr`, 
     138    :meth:`setDefaultAttr`, :meth:`setdefaultattr`, :meth:`attrkeys`, 
     139    :meth:`attrvalues`, :meth:`attritems`, :meth:`iterattrkeys`, 
     140    :meth:`iterattrvalues`, :meth:`iterattritems`, :meth:`allowedattrkeys`, 
     141    :meth:`allowedattrvalues`, :meth:`allowedattritems`, 
    130142    :meth:`iterallowedattrkeys`, :meth:`iterallowedattrvalues`, 
    131143    :meth:`iterallowedattritems` and :meth:`copyDefaultAttrs` have been removed. 
    132     The deprecated :class:`Attrs` method :meth:`copydefaults` has been removed too. 
     144    The deprecated :class:`Attrs` method :meth:`copydefaults` has been removed 
     145    too. 
    133146 
    134147*   The namespace module :mod:`ll.xist.ns.cond` has been removed. 
     
    142155    two that take Python names and two that take XML names. Multiple arguments 
    143156    are used now (instead of one argument that must be a sequence). Passing a 
    144     namespace to remove all attributes from the namespace is no longer supported. 
     157    namespace to remove all attributes from the namespace is no longer 
     158    supported. 
    145159 
    146160*   The :class:`Attrs` methods :meth:`updatenew` and :meth:`updatexisting` have 
     
    151165--------------------------------------- 
    152166 
    153 *   The Python quotes example no longer contains the XML source or the generated 
    154     HTML. 
     167*   The Python quotes example no longer contains the XML source or the 
     168    generated HTML. 
    155169 
    156170 
     
    198212 
    199213*   XIST has been made compatible with Python 2.5: Code has been updated 
    200     to use the proper C API for memory management and :pep:`353` support has been 
    201     added. XIST now includes its own fixed version of :mod:`sgmlop`. 
     214    to use the proper C API for memory management and :pep:`353` support has 
     215    been added. XIST now includes its own fixed version of :mod:`sgmlop`. 
    202216 
    203217*   The :class:`ll.xist.xsc.Attrs` methods :meth:`with` and :meth:`without` have 
     
    205219    compatibility. 
    206220 
    207 *   :class:`ll.xist.ns.htmlspecials.pixel` no longer handles colors via different 
    208     GIFs. It uses the ``background-color`` in the ``style`` attribute instead. 
    209     The same change has been implemented 
    210     for :class:`ll.xist.ns.htmlspecials.autopixel`. It's now possible to overwrite 
     221*   :class:`ll.xist.ns.htmlspecials.pixel` no longer handles colors via 
     222    different GIFs. It uses the ``background-color`` in the ``style`` attribute 
     223    instead. The same change has been implemented for 
     224    :class:`ll.xist.ns.htmlspecials.autopixel`. It's now possible to overwrite 
    211225    the default ``src`` attribute value of ``root:px/spc.gif`` either via the 
    212226    XML attribute or via the converter context. 
     
    243257*   A new namespace :mod:`ll.xist.ns.detox` has been added that is similar to 
    244258    :mod:`ll.toxic` but can be used to generate Python code instead of 
    245     PL/SQL code. Using :mod:`detox` templates is about 50 times faster than using 
    246     XIST trees directly and about 10 times faster than Kid__. 
     259    PL/SQL code. Using :mod:`detox` templates is about 50 times faster than 
     260    using XIST trees directly and about 10 times faster than Kid__. 
    247261 
    248262    __ http://kid.lesscode.org/ 
     
    267281------------------------------------- 
    268282 
    269 *   :meth:`ll.xist.xsc.Namespace.tokenize` requires a :class:`unicode` object as 
    270     input now. This makes it possible to use encodings that are not ASCII 
     283*   :meth:`ll.xist.xsc.Namespace.tokenize` requires a :class:`unicode` object 
     284    as input now. This makes it possible to use encodings that are not ASCII 
    271285    compatible (such as UTF-16). The :var:`encoding` argument is gone. 
    272286 
     
    300314    XML file and generate a rudimentary XIST namespace from it. 
    301315 
    302 *   A :class:`DocType` for XHTML 1.1 has been added (suggested by Elvelind Grandin). 
     316*   A :class:`DocType` for XHTML 1.1 has been added (suggested by Elvelind 
     317    Grandin). 
    303318 
    304319*   Line number information is now added when parsing HTML. 
     
    311326    object now, with has several ways of referencing the node. 
    312327 
    313 *   New methods :meth:`walknode`, :meth:`walkpath` and :meth:`walkindex` have been 
    314     added. 
     328*   New methods :meth:`walknode`, :meth:`walkpath` and :meth:`walkindex` have 
     329    been added. 
    315330 
    316331*   Presenters use an iterator API instead of a stream API now. Dumping an 
     
    348363*   The content of the processing instruction :class:`ll.xist.ns.code.pyexec` 
    349364    will not be executed at construction time, but at conversion time. The code 
    350     in :class:`ll.xist.ns.code.pyexec` or :class:`ll.xist.ns.code.pyeval` will no 
    351     longer be executed in the :mod:`ll.xist.sandbox` module (which has been 
     365    in :class:`ll.xist.ns.code.pyexec` or :class:`ll.xist.ns.code.pyeval` will 
     366    no longer be executed in the :mod:`ll.xist.sandbox` module (which has been 
    352367    removed), but in a sandbox dictionary in the converter context of the 
    353368    :mod:`ll.xist.ns.code` namespace. 
     
    365380    :var:`stream` to which the byte strings are written, but it is a generator 
    366381    now. The publisher methods :meth:`write` and :meth:`writetext` have been 
    367     renamed to :meth:`encode` and :meth:`encodetext` and return the encoded byte 
    368     string, instead of writing it directly to the stream. There's a new generator 
    369     method :meth:`bytes` for nodes now, which can be passed the same arguments 
    370     as :meth:`asBytes`. These changes should help when using XIST in WSGI 
    371     applications. 
     382    renamed to :meth:`encode` and :meth:`encodetext` and return the encoded 
     383    byte string, instead of writing it directly to the stream. There's a new 
     384    generator method :meth:`bytes` for nodes now, which can be passed the same 
     385    arguments as :meth:`asBytes`. These changes should help when using XIST in 
     386    WSGI applications. 
    372387 
    373388*   The iterator returned from :meth:`Element.__getitem__`, 
    374389    :meth:`Frag.__getitem__` and the :meth:`walk` method now supports 
    375390    :meth:`__getitem__` itself, so you can write ``table[html.tr][0]`` to get 
    376     the first row from a table or ``page.walk(xsc.FindTypeAll(html.td))[-1]`` to 
    377     get the last table cell from a complete HTML page. 
     391    the first row from a table or ``page.walk(xsc.FindTypeAll(html.td))[-1]`` 
     392    to get the last table cell from a complete HTML page. 
    378393 
    379394*   Several bugs in the namespaces :mod:`ll.xist.ns.meta`, :mod:`ll.xist.ns.form` 
     
    396411 
    397412    :const:`ll.xist.xsc.walkindex` 
    398         The value passed to the filter function or yielded from the iterator is a 
    399         list containing child indizes and attribute names that specify the path to 
    400         the node in question. 
     413        The value passed to the filter function or yielded from the iterator is 
     414        a list containing child indizes and attribute names that specify the path 
     415        to the node in question. 
    401416 
    402417    :const:`ll.xist.xsc.walkrootindex` 
    403         The filter function will be called with two arguments: The first is the root 
    404         node of the tree (i.e. the node for which :meth:`walk` has been called), 
    405         the second one is an index path (just like for ``ll.xist.xsc.walkindex``). 
    406         If used as an :var:`outmode` a tuple with these two values will be yielded. 
     418        The filter function will be called with two arguments: The first is the 
     419        root node of the tree (i.e. the node for which :meth:`walk` has been 
     420        called), the second one is an index path (just like for 
     421        ``ll.xist.xsc.walkindex``). If used as an :var:`outmode` a tuple with 
     422        these two values will be yielded. 
    407423 
    408424* Attribute mappings now support :meth:`__getitem__`, :meth:`__setitem__` and 
     
    443459 
    444460*   The attributes :attr:`showLocation` and :attr:`showPath` of 
    445     :class:`ll.xist.presenters.TreePresenter` have been lowercased and presenters 
    446     are properly reset after they've done their job. 
     461    :class:`ll.xist.presenters.TreePresenter` have been lowercased and 
     462    presenters are properly reset after they've done their job. 
    447463 
    448464*   The class attribute :attr:`xmlname` will no longer be turned into a list 
     
    477493 
    478494*   XFind has been enhanced to support item and slice operators, i.e. if 
    479     ``foo`` is an XFind operator, ``foo[0]`` is an operator that will produce the 
    480     first node from ``foo`` (if there is one). Negative values and slices are 
    481     supported too. 
    482  
    483 *   Operators can be chained via division: ``html.a/html.b`` is an operator that 
    484     can be passed around and applied to a node. 
     495    ``foo`` is an XFind operator, ``foo[0]`` is an operator that will produce 
     496    the first node from ``foo`` (if there is one). Negative values and slices 
     497    are supported too. 
     498 
     499*   Operators can be chained via division: ``html.a/html.b`` is an operator 
     500    that can be passed around and applied to a node. 
    485501 
    486502*   XIST requires the new core module and makes use of the new 
     
    493509------------------------------------ 
    494510 
    495 *   The transparent pixel used by :class:`ll.xist.ns.htmlspecials.pixel` has been 
    496     renamed to :file:`spc.gif` to avoid problems with IE. 
     511*   The transparent pixel used by :class:`ll.xist.ns.htmlspecials.pixel` has 
     512    been renamed to :file:`spc.gif` to avoid problems with IE. 
    497513 
    498514*   Removed a debug print in :class:`ll.xist.xfind.Finder.__getitem__`. 
    499515 
    500 *   :mod:`ll.xist.xfind` now has a new function :func:`item`, that can be used to 
    501     get a certain item or slice from an iterator. :func:`xfind.first` and 
     516*   :mod:`ll.xist.xfind` now has a new function :func:`item`, that can be used 
     517    to get a certain item or slice from an iterator. :func:`xfind.first` and 
    502518    :func:`xfind.last` have been changed to use :func:`xfind.item`, so you now 
    503519    have to pass a default value to get the old behaviour. 
     
    518534*   Fixed a bug in :meth:`ll.xist.xfind.Finder.__floordiv__`. 
    519535 
    520 *   Restricted characters as defined in `XML 1.1`_ will now be published as 
     536*   Restricted characters as defined in `XML 1.1`__ will now be published as 
    521537    character references. 
    522538 
    523     .. _XML 1.1:  http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-RestrictedChar 
     539    __  http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-RestrictedChar 
    524540 
    525541 
     
    580596    were added to :mod:`ll.xist.ns.doc`. 
    581597 
    582 *   The method :meth:`ll.xist.xsc.Attrs.set` now returns the new attribute object. 
     598*   The method :meth:`ll.xist.xsc.Attrs.set` now returns the new attribute 
     599    object. 
    583600 
    584601*   The :meth:`visit` method has been removed. 
     
    641658        ) 
    642659 
    643 *   Experimental support for Holger Krekel's XPython_ has been added. Code might 
    644     look like this:: 
     660*   Experimental support for Holger Krekel's XPython_ has been added. Code 
     661    might look like this:: 
    645662 
    646663        from ll.xist import xsc, converters 
     
    674691 
    675692*   Creating global attributes has been simplified. Passing an instance of 
    676     :class:`ll.xist.xsc.Namespace.Attrs` to an :class:`Element` constructor now 
    677     does the right thing:: 
     693    :class:`ll.xist.xsc.Namespace.Attrs` to an :class:`Element` constructor 
     694    now does the right thing:: 
    678695 
    679696        from ll.xist.ns import html, xml 
     
    689706    will automatically generate :mod:`sims` information. 
    690707 
    691 *   :class:`ll.xist.xsc.CharRef` now inherits from :class:`ll.xist.xsc.Text` too, 
    692     so you don't have to special case :class:`CharRef`s any more. When 
     708*   :class:`ll.xist.xsc.CharRef` now inherits from :class:`ll.xist.xsc.Text` 
     709    too, so you don't have to special case :class:`CharRef`s any more. When 
    693710    publishing, :class:`CharRef`s will be handled like :class:`Text` nodes. 
    694711 
     
    698715*   :class:`ll.xist.ns.htmlspecials.caps` has been removed. 
    699716 
    700 *   Registering elements in namespace classes has been rewritten to use a cache 
    701     now. 
     717*   Registering elements in namespace classes has been rewritten to use a 
     718    cache now. 
    702719 
    703720*   Pretty printing has been changed: Whitespace will only be added now if 
     
    760777 
    761778*   It's now possible to parse XML without generating location information for 
    762     each node, by passing ``loc=False`` to the constructor of the :class:`Handler`. 
     779    each node, by passing ``loc=False`` to the constructor of the 
     780    :class:`Handler`. 
    763781 
    764782*   The :class:`HTMLParser` no longer complains about global attributes or 
     
    802820------------------------------------ 
    803821 
    804 *   Namespace handling has been completely rewritten. Namespaces are now classes 
    805     derived from :class:`ll.xist.xsc.Namespace`. Defining element classes can be 
    806     done inside or outside the namespace class. If the element classes are 
    807     defined outside the namespace class, they can be moved inside the namespace 
    808     with a simple attribute assignment:: 
     822*   Namespace handling has been completely rewritten. Namespaces are now 
     823    classes derived from :class:`ll.xist.xsc.Namespace`. Defining element 
     824    classes can be done inside or outside the namespace class. If the element 
     825    classes are defined outside the namespace class, they can be moved inside 
     826    the namespace with a simple attribute assignment:: 
    809827 
    810828        class foo(xsc.Element): 
     
    863881 
    864882*   The converter has a new property :func:`node`. :var:`node` can't be passed 
    865     to :meth:`conv` but will be set to :var:`self` by :meth:`conv` automatically. 
    866     This makes it possible to access the "document root" during conversion. 
     883    to :meth:`conv` but will be set to :var:`self` by :meth:`conv` 
     884    automatically. This makes it possible to access the "document root" during 
     885    conversion. 
    867886 
    868887*   :class:`ll.xist.ns.htmlspecials.autoimg` no longer touches existing width 
    869     and height attributes. This means that %-formatting of the existing attributes 
    870     is no longer done. 
    871  
    872 *   Added a new class :class:`ll.xist.ns.htmlspecials.autopixel` that works like 
    873     :class:`ll.xist.ns.htmlspecials.pixel` but inherits the size for the image 
    874     specified via the ``src`` attribute. 
     888    and height attributes. This means that %-formatting of the existing 
     889    attributes is no longer done. 
     890 
     891*   Added a new class :class:`ll.xist.ns.htmlspecials.autopixel` that works 
     892    like :class:`ll.xist.ns.htmlspecials.pixel` but inherits the size for the 
     893    image specified via the ``src`` attribute. 
    875894 
    876895*   :class:`Frag` and :class:`Element` now support extended slices. 
     
    895914    __ http://pyxml.sf.net/ 
    896915 
    897 *   The core functionality found in the script :file:`dtd2xsc.py` has been moved 
    898     to a class method :meth:`ll.xist.ns.xndl.fromdtd` in the 
     916*   The core functionality found in the script :file:`dtd2xsc.py` has been 
     917    moved to a class method :meth:`ll.xist.ns.xndl.fromdtd` in the 
    899918    :mod:`ll.xist.ns.xndl` namespace. 
    900919 
    901920*   :class:`ll.xist.parsers.ExpatParser` is now a real subclass instead of an 
    902     alias for :class:`xml.sax.expatreader.ExpatParser` It reports unknown entity 
    903     references to the application (if loading of external entities is switched 
    904     off, which is done by :class:`ll.xist.parsers.Handler` and only outside of 
    905     attributes). 
     921    alias for :class:`xml.sax.expatreader.ExpatParser` It reports unknown 
     922    entity references to the application (if loading of external entities is 
     923    switched off, which is done by :class:`ll.xist.parsers.Handler` and only 
     924    outside of attributes). 
    906925 
    907926*   Namespaces have been added for Zope's TAL and METAL specifications. 
     
    917936*   Remove the checks for attributes in attributes and moved the publication 
    918937    code for the full element into a separate method. This allows JSP tag 
    919     library namespaces to simply overwrite :meth:`publish` to publish the element 
    920     even inside attributes. (This is the same fix as in release 1.5.10). 
     938    library namespaces to simply overwrite :meth:`publish` to publish the 
     939    element even inside attributes. (This is the same fix as in release 1.5.10). 
    921940 
    922941 
     
    939958-------------------------------------- 
    940959 
    941 *   Added a few elements and attributes to :mod:`ll.xist.ns.doc`: :class:`username`, 
    942     which is used for the name of a user account, :class:`xref`, which is used 
    943     for internal cross references and the attribute ``id`` for :class:`section`, 
    944     which specifies the target for an :class:`xref`. 
     960*   Added a few elements and attributes to :mod:`ll.xist.ns.doc`: 
     961    :class:`username`, which is used for the name of a user account, 
     962    :class:`xref`, which is used for internal cross references and the attribute 
     963    ``id`` for :class:`section`, which specifies the target for an :class:`xref`. 
    945964 
    946965 
     
    10291048 
    10301049*   Fixed a bug with the backwards compatible prefix mapping: Defining element 
    1031     classes in ``exec`` processing instructions didn't work, because the prefixes 
    1032     object used for parsing wouldn't be updated when the namespace object is 
    1033     defined inside the processing instruction. Now using the default for the 
    1034     :var:`prefixes` argument in calls to the parsing functions uses one global 
    1035     shared :class:`Prefixes` instances where all the namespaces that are newly 
    1036     defined will be registered too. 
     1050    classes in ``exec`` processing instructions didn't work, because the 
     1051    prefixes object used for parsing wouldn't be updated when the namespace 
     1052    object is defined inside the processing instruction. Now using the default 
     1053    for the :var:`prefixes` argument in calls to the parsing functions uses one 
     1054    global shared :class:`Prefixes` instances where all the namespaces that are 
     1055    newly defined will be registered too. 
    10371056 
    10381057 
     
    10541073    :class:`ll.xist.Element.Attrs` (or one of its subclasses if you want to 
    10551074    inherit attributes from this class). Defining attributes is done through 
    1056     classes nested inside this attributes class and derived from any of the known 
    1057     attribute classes (like :class:`TextAttr`, :class:`URLAttr` etc.). The class 
    1058     name will be the attribute name (and can be overwritten with a class 
    1059     attribute :attr:`xmlname`. This makes it possible to have docstrings for 
    1060     attributes. Furthermore it's possible to define an attribute default value 
    1061     via the class attribute :attr:`default`, allowed values for the attribute 
    1062     via :attr:`values`, which is a list of allowed values, and whether the 
    1063     attribute is required or not via :attr:`required`. 
     1075    classes nested inside this attributes class and derived from any of the 
     1076    known attribute classes (like :class:`TextAttr`, :class:`URLAttr` etc.). 
     1077    The class name will be the attribute name (and can be overwritten with a 
     1078    class attribute :attr:`xmlname`. This makes it possible to have docstrings 
     1079    for attributes. Furthermore it's possible to define an attribute default 
     1080    value via the class attribute :attr:`default`, allowed values for the 
     1081    attribute via :attr:`values`, which is a list of allowed values, and 
     1082    whether the attribute is required or not via :attr:`required`. 
    10641083 
    10651084*   XIST now has real namespace support. The new class 
     
    11421161*   Remove the checks for attributes in attributes and moved the publication 
    11431162    code for the full element into a separate method. This allows JSP tag 
    1144     library namespaces to simply overwrite :meth:`publish` to publish the element 
    1145     even inside attributes. 
     1163    library namespaces to simply overwrite :meth:`publish` to publish the 
     1164    element even inside attributes. 
    11461165 
    11471166 
     
    12611280    :func:`parseURL` to specify whether the source should be tidied. 
    12621281 
    1263 *   To prevent an element from being registered in a :class:`Namespace` the class 
    1264     attribute :attr:`register` can be used now. This makes it possible to have a 
    1265     name for the element even when it's not registered. 
     1282*   To prevent an element from being registered in a :class:`Namespace` the 
     1283    class attribute :attr:`register` can be used now. This makes it possible 
     1284    to have a name for the element even when it's not registered. 
    12661285 
    12671286*   :mod:`xist.ns.form` elements now have all the attributes that the 
     
    12921311 
    12931312*   Ported to Python 2.2. :class:`Node` is now derived from :class:`object`, 
    1294     :class:`Frag` from :class:`list` and there's a new class :class:`Attrs` which 
    1295     is derived from :class:`dict` for the attribute mappings. All presenters 
    1296     have been adapted to work with :class:`Attrs`. In addition to the usual 
    1297     dictionary methods and operators :class:`Attrs` has a method :meth:`without` 
    1298     that returns a copy of the :class:`Attrs` instance with some specified 
    1299     attributes removed. 
     1313    :class:`Frag` from :class:`list` and there's a new class :class:`Attrs` 
     1314    which is derived from :class:`dict` for the attribute mappings. All 
     1315    presenters have been adapted to work with :class:`Attrs`. In addition to 
     1316    the usual dictionary methods and operators :class:`Attrs` has a 
     1317    method :meth:`without` that returns a copy of the :class:`Attrs` instance 
     1318    with some specified attributes removed. 
    13001319 
    13011320*   All the node classes now have a new method :meth:`walk` that generates all 
     
    13201339 
    13211340*   :func:`parseURL` and :func:`parseTidyURL` now have an additional parameter 
    1322     :var:`headers` which is a list of string pairs specifying additional headers 
    1323     to be passed in with the request. 
    1324  
    1325 *   :func:`parseString` has an additional parameter :var:`systemId` which will be 
    1326     the system id of the :class:`InputSource`. 
     1341    :var:`headers` which is a list of string pairs specifying additional 
     1342    headers to be passed in with the request. 
     1343 
     1344*   :func:`parseString` has an additional parameter :var:`systemId` which will 
     1345    be the system id of the :class:`InputSource`. 
    13271346 
    13281347*   The distribution now includes the makefile and the XML source files so now 
     
    13691388-------------------------------------- 
    13701389 
    1371 *   :meth:`xist.url.URL.fileSize` and :meth:`xist.url.URL.imageSize` now use the 
    1372     warning framework to report errors. 
    1373  
    1374 *   There is a new presenter named :class:`CodePresenter` that dumps the tree as 
    1375     Python source code. 
     1390*   :meth:`xist.url.URL.fileSize` and :meth:`xist.url.URL.imageSize` now use 
     1391    the warning framework to report errors. 
     1392 
     1393*   There is a new presenter named :class:`CodePresenter` that dumps the tree 
     1394    as Python source code. 
    13761395 
    13771396*   The filenames of the pixel images used by :class:`xist.ns.specials.pixel` 
     
    14021421        <meta name="keywords" content="<%= "foo" %>" /> 
    14031422 
    1404 *   When an element occurs inside an attribute during publishing, there won't be 
    1405     an exception raised any more. Instead the content of the element will be 
     1423*   When an element occurs inside an attribute during publishing, there won't 
     1424    be an exception raised any more. Instead the content of the element will be 
    14061425    published. This fixes problems with abbreviation entities inside attributes. 
    14071426 
    1408 *   :class:`xist.parsers.TidyURLInputSource` now uses the new experimental eGenix 
    1409     mx Extension package, which includes a Python port of tidy. 
     1427*   :class:`xist.parsers.TidyURLInputSource` now uses the new experimental 
     1428    eGenix mx Extension package, which includes a Python port of tidy. 
    14101429 
    14111430*   :meth:`__repr__` now uses the new class :class:`presenters.PlainPresenter` 
     
    14231442 
    14241443*   :class:`xist.ns.specials.php` has been moved to its own module 
    1425     (:mod:`xist.ns.php`). This module provided additional convenience processing 
    1426     instructions (just like :mod:`xist.ns.jsp` does). 
     1444    (:mod:`xist.ns.php`). This module provided additional convenience 
     1445    processing instructions (just like :mod:`xist.ns.jsp` does). 
    14271446 
    14281447 
     
    15161535    :var:`converter`. This makes it possible to implement different processing 
    15171536    modes or stages for new elements. All currently implemented elements and 
    1518     entities ignore this argument, but pass it on in the call to their childrens' 
    1519     :meth:`asHTML` method. As the name :meth:`asHTML` no longer makes sense, 
    1520     :meth:`asHTML` has been renamed to :meth:`convert`. 
     1537    entities ignore this argument, but pass it on in the call to their 
     1538    childrens' :meth:`asHTML` method. As the name :meth:`asHTML` no longer 
     1539    makes sense, :meth:`asHTML` has been renamed to :meth:`convert`. 
    15211540 
    15221541*   There is now a tool :file:`dtd2xsc.py` in the :dir:`scripts` directory that 
     
    15241543    PyXML package). 
    15251544 
    1526 *   New preliminary module for DocBook 4.12. (Incomplete: :meth:`convert` methods 
    1527     and Unicode character entities are missing; any volunteers for implementing 
    1528     375 classes?) 
     1545*   New preliminary module for DocBook 4.12. (Incomplete: :meth:`convert` 
     1546    methods and Unicode character entities are missing; any volunteers for 
     1547    implementing 375 classes?) 
    15291548 
    15301549*   New module :file:`ruby.py` that implements the `W3C Ruby draft`_. 
     
    15491568*   All abbreviation entities have been moved to a new module :file:`abbr.py`. 
    15501569 
    1551 *   All the modules that provide new elements and entitites have been moved to a 
    1552     subpackage :mod:`ns`. 
     1570*   All the modules that provide new elements and entitites have been moved 
     1571    to a subpackage :mod:`ns`. 
    15531572 
    15541573*   :class:`Frag` and :class:`Element` now have new methods :meth:`sorted`, 
     
    15721591    ``python setup.py install_scripts``. 
    15731592 
    1574 *   :file:`xscmake.py` has a new option :option:`--files`/:option:`-f`. The argument 
    1575     is a file containing a list of filenames (one name per line) that should be 
    1576     converted. 
    1577  
    1578 *   :file:`xscmake.py` has a new option :option:`--parser`/:option:`-r` for specifying 
    1579     which parser to use. Allowed values are ``sgmlop`` and ``expat``. 
    1580  
    1581 *   :file:`xscmake.py` has a new option :option:`--namespace`/:option:`-n` that can be 
    1582     used for appending :class:`Namespace` objects to the :class:`Namespaces` 
    1583     object used by :file:`xscmake.py`:: 
     1593*   :file:`xscmake.py` has a new option :option:`--files`/:option:`-f`. 
     1594    The argument is a file containing a list of filenames (one name per line) 
     1595    that should be converted. 
     1596 
     1597*   :file:`xscmake.py` has a new option :option:`--parser`/:option:`-r` for 
     1598    specifying which parser to use. Allowed values are ``sgmlop`` and ``expat``. 
     1599 
     1600*   :file:`xscmake.py` has a new option :option:`--namespace`/:option:`-n` 
     1601    that can be used for appending :class:`Namespace` objects to the 
     1602    :class:`Namespaces` object used by :file:`xscmake.py`:: 
    15841603 
    15851604        xscmake.py -n html -n spam eggs.xsc 
    15861605 
    1587     With this call the parser will find element classes from the module with the 
    1588     prefix name ``spam`` before those from ``html`` and those before anything 
    1589     else. 
     1606    With this call the parser will find element classes from the module with 
     1607    the prefix name ``spam`` before those from ``html`` and those before 
     1608    anything else. 
    15901609 
    15911610*   :class:`xist.url.URL` no longer has an attribute :attr:`ext`. :attr:`file` 
     
    16241643            node = html.div("spam", align=align) 
    16251644 
    1626         So, when the ``condition`` is false, the node will not have the attribute 
    1627         ``align`` set. 
    1628  
    1629 *   :class:`xist.ns.cond.If` (and :class:`xist.ns.cond.ElIf`) can now be used to 
    1630     test for attributes of the converter. I.e. it's possible to write the 
     1645        So, when the ``condition`` is false, the node will not have the 
     1646        attribute ``align`` set. 
     1647 
     1648*   :class:`xist.ns.cond.If` (and :class:`xist.ns.cond.ElIf`) can now be used 
     1649    to test for attributes of the converter. I.e. it's possible to write the 
    16311650    following XML:: 
    16321651 
     
    16661685    at once. 
    16671686 
    1668 *   :class:`providers.TidyURIProvider` now uses :func:`os.popen3` for piping the 
    1669     file through tidy, so now there will be no more temporary files. The call to 
    1670     tidy now includes options that hopefully make the output more suited to 
    1671     XIST. 
     1687*   :class:`providers.TidyURIProvider` now uses :func:`os.popen3` for piping 
     1688    the file through tidy, so now there will be no more temporary files. The 
     1689    call to tidy now includes options that hopefully make the output more 
     1690    suited to XIST. 
    16721691 
    16731692*   Incorparated a new :file:`url.py` by Hartmut Goebel, that fixes many problem 
    16741693    (e.g. optimizing ``http://server/foo/bar/../../baz.gif`` now works.) 
    16751694 
    1676 *   :file:`make.py` includes a new option :option:`--path` for adding directories 
    1677     to :data:`sys.path`. 
     1695*   :file:`make.py` includes a new option :option:`--path` for adding 
     1696    directories to :data:`sys.path`. 
    16781697 
    16791698 
     
    16991718-------------------------------------- 
    17001719 
    1701 *   Now testing if characters can be encoded with the specified encoding is done 
    1702     directy. This means, that escaping unencodable characters now works even with 
    1703     exotic encodings (tested with `JapaneseCodecs 1.0.1`_. 
    1704  
    1705     .. _JapaneseCodecs 1.0.1: http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/ 
     1720*   Now testing if characters can be encoded with the specified encoding is 
     1721    done directy. This means, that escaping unencodable characters now works 
     1722    even with exotic encodings (tested with `JapaneseCodecs 1.0.1`__. 
     1723 
     1724    __ http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/ 
    17061725 
    17071726*   The :class:`URLAttr` constructor now can handle a single parameter of the 
     
    17091728 
    17101729*   The URL to string conversion function have changed: :meth:`URL.asString` 
    1711     returns the URL with path markers, :meth:`URL.asPlainString` returns the URL 
    1712     without path markers. 
     1730    returns the URL with path markers, :meth:`URL.asPlainString` returns the 
     1731    URL without path markers. 
    17131732 
    17141733*   Added the ``i18n`` attribute to the :class:`font` element. 
     
    17231742-------------------------------------- 
    17241743 
    1725 *   Now processing instruction classes are registered in the same way as elements 
    1726     and entities are. 
     1744*   Now processing instruction classes are registered in the same way as 
     1745    elements and entities are. 
    17271746 
    17281747*   The leaf nodes (:class:`Text`, :class:`Comment`, :class:`ProcInst`) are now 
    1729     considered immutable. This means that their :meth:`asHTML` method can simply 
    1730     return :var:`self`, because now those nodes can be shared between trees. 
    1731     Functionality for manipulation the objects is provided by a mixin class very 
    1732     similar to :class:`UserString`. All this results in a speedup of about 10% 
    1733     for the python-quotes example. 
     1748    considered immutable. This means that their :meth:`asHTML` method can 
     1749    simply return :var:`self`, because now those nodes can be shared between 
     1750    trees. Functionality for manipulation the objects is provided by a mixin 
     1751    class very similar to :class:`UserString`. All this results in a speedup 
     1752    of about 10% for the python-quotes example. 
    17341753 
    17351754*   Small optimizations in the :meth:`asHTML` methods of :class:`Element` and 
    1736     :class:`Frag` optimized away many calls to :meth:`append`, :meth:`extend` and 
    1737     :meth:`ToNode` and result in a speedup of about 30% for the python-quotes 
    1738     example. One consequence of this is that :class:`Null` objects will no longer 
    1739     be ignored. 
     1755    :class:`Frag` optimized away many calls to :meth:`append`, :meth:`extend` 
     1756    and :meth:`ToNode` and result in a speedup of about 30% for the 
     1757    python-quotes example. One consequence of this is that :class:`Null` 
     1758    objects will no longer be ignored. 
    17401759 
    17411760 
     
    17721791    UTF-8, UTF-16, ... 
    17731792 
    1774 *   All publishers have been updated to support Unicode. The publishing interface 
    1775     has been streamlined (:var:`encoding` and :var:`XHTML` parameters are now 
    1776     attributes of the publisher). 
     1793*   All publishers have been updated to support Unicode. The publishing 
     1794    interface has been streamlined (:var:`encoding` and :var:`XHTML` parameters 
     1795    are now attributes of the publisher). 
    17771796 
    17781797*   :meth:`asString` will now always return a Unicode string. If you want a byte 
     
    17801799    an argument. 
    17811800 
    1782 *   There an additional publisher class :class:`FilePublisher`, which can be used 
    1783     for publishing to a file (or anything else that has a :meth:`write` and a 
    1784     :meth:`writelines` method, and is supported by the stream writer available 
    1785     through :func:`codecs.lookup`). 
    1786  
    1787 *   Element and attribute names are no longer converted to lowercase. If you have 
    1788     an attribute name which clashes with a Python keyword (e.g. ``class``) append 
    1789     an underscore (``_``), which will be removed before accessing the attribute. 
    1790     This is the "official" Python method for handling these cases. 
    1791  
    1792 *   Elements and entities are no longer registered one by one. Now you can build 
    1793     :class:`Namespace` objects which are used for searching and there are 
     1801*   There an additional publisher class :class:`FilePublisher`, which can be 
     1802    used for publishing to a file (or anything else that has a :meth:`write` 
     1803    and a :meth:`writelines` method, and is supported by the stream writer 
     1804    available through :func:`codecs.lookup`). 
     1805 
     1806*   Element and attribute names are no longer converted to lowercase. If you 
     1807    have an attribute name which clashes with a Python keyword (e.g. ``class``) 
     1808    append an underscore (``_``), which will be removed before accessing the 
     1809    attribute. This is the "official" Python method for handling these cases. 
     1810 
     1811*   Elements and entities are no longer registered one by one. Now you can 
     1812    build :class:`Namespace` objects which are used for searching and there are 
    17941813    :meth:`pushNamespace` and :meth:`popNamespace` functions in :mod:`XSC.xsc`. 
    17951814    For more info, see the source. 
     
    18081827    :file:`form.py` respectively. 
    18091828 
    1810 *   When using :func:`xsc.make` the encoding and XHTML parameters to use can now 
    1811     be specified on the command line (e.g. ``--encoding utf-8 --xhtml 2``) 
     1829*   When using :func:`xsc.make` the encoding and XHTML parameters to use can 
     1830    now be specified on the command line (e.g. ``--encoding utf-8 --xhtml 2``) 
    18121831 
    18131832*   Handling of multiline ``<?xsc-eval?>`` and ``<?xsc-exec?>`` has been 
    18141833    enhanced, although XIST will not be able to guess the correct indentation 
    1815     in all cases. As a workarround simply add a Python comment to the beginning. So the 
    1816     following won't work:: 
     1834    in all cases. As a workarround simply add a Python comment to the beginning. 
     1835    So the following won't work:: 
    18171836 
    18181837        <?xsc-exec 
     
    19421961-------------------------------------- 
    19431962 
    1944 *   The workaround for the trailing CDATA bug in sgmlop has been removed, so now 
    1945     you'll need a newer version of sgmlop (included in PyXML 0.5.5.1). 
     1963*   The workaround for the trailing CDATA bug in sgmlop has been removed, so 
     1964    now you'll need a newer version of sgmlop (included in PyXML 0.5.5.1). 
    19461965 
    19471966