Commits

Walter Dörwald committed 3227d4b

Remove XML version of the documentation.

Comments (0)

Files changed (3)

INSTALL.xml

-<?xml version='1.0' encoding='iso-8859-1'?>
-<section><h>Requirements</h>
-<p>To use &xist; you need the following software packages:</p>
-<ol>
-<li><a href="http://www.python.org/">Python 2.5</a>,</li>
-<li><a href="root:core/index.html">ll-core</a> (1.11 or newer),</li>
-<li>if you want to use automatic image size calculation: the
-<a href="http://www.pythonware.com/products/pil/">Python Imaging Library</a>,</li>
-<li>if you want to parse broken &html;: <a href="http://www.xmlsoft.org/">libxml2</a>
-(including its Python wrapper),</li>
-<li>if you want want to use the function <func>ll.xist.ns.html.astext</func>
-to convert &html; to plain text: <a href="http://elinks.or.cz/">elinks</a>,</li>
-<li>if you want to install this package as an egg:
-<a href="http://peak.telecommunity.com/DevCenter/setuptools">setuptools</a>.</li>
-<li>if you want to run the test suite: <a href="http://codespeak.net/py/current/doc/test.html">py.test</a>,</li>
-<li>and a C compiler supported by <app>distutils</app>, if you want
-to install the source distribution.</li>
-</ol>
-</section>
-
-
-<section><h>Installation</h>
-<p><app moreinfo="http://peak.telecommunity.com/DevCenter/setuptools">setuptools</app>
-is used for installation so you can install this module with the following command:</p>
-
-<prog>
-easy_install ll-xist
-</prog>
-
-<p>If you want to install from source, you can download one of the
-<a href="root:xist/Download.html">distribution archives</a>, unpack it,
-enter the directory and execute the following command:</p>
-<prog>
-python setup.py install
-</prog>
-
-<p>This will copy <filename>*.py</filename> files, compile <filename>*.c</filename>
-files and install everything in the <dirname>site-packages</dirname>
-directory as the <mod>ll.xist</mod> package.</p>
-
-<p>For Windows a binary distribution is provided. To install it,
-double click it, and follow the instructions.</p>
-
-<p>If you have difficulties installing this software, send a problem report
-to Walter D�rwald (<email>walter@livinglogic.de</email>).</p>
-</section>
-
-
-<section><h>Character encoding</h>
-<p>When you pass an 8bit string in the constructor
-of an &xist; element, these strings have to
-be converted to Unicode. &xist; assumes that these 8bit strings
-are in the system default encoding, which normally is &ascii;.</p>
-
-<p>If your strings contain non-&ascii; characters you <em>must</em>
-pass them as unicode strings to the &xist; constructors and you <em>must</em>
-specify the encoding you're using in your source code in the first or second
-line of your script (see
-<a href="http://www.python.org/peps/pep-0263.html">PEP 263</a> for
-a detailed description).</p>
-</section>
-
-
-<section><h>IPython display hooks</h>
-<p>If you're using &xist; in an
-<a href="http://ipython.scipy.org/">IPython shell</a>, &xist; allows you
-to browse through your trees using any of the browsers provided by IPython's
-<a href="http://projects.scipy.org/ipython/ipython/wiki/UsingIPipe">ipipe module</a>.</p>
-
-<p>You can specify which format gets used by changing the value of the
-<lit>defaultpresenter</lit> variable in the module <mod>ll.xist.presenters</mod>:</p>
-
-<prog>
-from ll.xist import presenters
-presenters.defaultpresenter = presenters.TreePresenter
-</prog>
-
-<p>Setting this value to <lit>None</lit> turns off the display hook.</p>
-
-</section>

MIGRATION.xml

-<?xml version='1.0' encoding='iso-8859-1'?>
-<section><h>Migrating to version 3.1</h>
-
-<section><h>Changes to &url; handling</h>
-<p>&url;s containing processing instructions will no longer
-be transformed in any way. If you need the old behaviour
-you can wrap the initial part of the attribute value into
-an <class>specials.url</class> PI.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 3.0</h>
-
-<section><h>Changes to tree traversal</h>
-<p>You can no longer apply XFind expression directly to nodes, so instead of:</p>
-<prog>
-for node in root//html.p:
-	print node
-</prog>
-<p>you have to write:</p>
-<prog>
-for node in root.walknode(html.p):
-	print node
-</prog>
-<p>If you want the search anchored at the root node, you can do the following:</p>
-<prog>
-for node in root.walknode(root/html.p):
-	print node
-</prog>
-<p>This will yield <class>html.p</class> elements only if they are immediate
-children of the <lit>root</lit> node.</p>
-
-<p>Passing a callable to the <meth>walk</meth> method now creates a
-<class>ll.xist.xfind.CallableSelector</class>. If you want the old tree traversal
-logic back, you have to put your code into the <meth>filterpath</meth> method
-of a <class>WalkFilter</class> object.</p>
-
-<p>Many of the XFind operators have been renamed (and all have been rewritten).
-See the <mod>xfind</mod> documentation for more info.</p>
-
-</section>
-
-<section><h>The death of namespace modules</h>
-
-<p>It's no longer possible to turn modules into namespaces. Element classes
-belong to a namespace (in the &xml; sense) simpy if their <lit>xmlns</lit>
-attribute have the same value. So a module definition like this:</p>
-
-<prog>
-from ll.xist import xsc
-
-class foo(xsc.Element):
-	def convert(self, converter):
-		return xsc.Text("foo")
-
-class xmlns(xsc.Namespace):
-	xmlname = "foo"
-	xmlurl = "http://xmlns.example.org/foo"
-xmlns.makemod(vars())
-</prog>
-
-<p>has to be changed into this:</p>
-
-<prog>
-from ll.xist import xsc
-
-class foo(xsc.Element):
-	xmlns = "http://xmlns.example.org/foo"
-
-	def convert(self, converter):
-		return xsc.Text("foo")
-</prog>
-
-</section>
-
-<section><h>Renamed <mod>doc</mod> classes</h>
-
-<p>Many classes in the <mod>ll.xist.ns.doc</mod> module have been renamed.
-The following names have changed:</p>
-
-<ul>
-<li><lit>function</lit> to <lit>func</lit>;</li>
-<li><lit>method</lit> to <lit>meth</lit>;</li>
-<li><lit>module</lit> to <lit>mod</lit>;</li>
-<li><lit>property</lit> to <lit>prop</lit>;</li>
-<li><lit>title</lit> to <lit>h</lit>;</li>
-<li><lit>par</lit> to <lit>p</lit>;</li>
-<li><lit>olist</lit> to <lit>ol</lit>;</li>
-<li><lit>ulist</lit> to <lit>ul</lit>;</li>
-<li><lit>dlist</lit> to <lit>dl</lit>;</li>
-<li><lit>item</lit> to <lit>li</lit> or <lit>dd</lit> (depending on whether
-it's inside an <class>ol</class>, <class>ul</class> or <class>dl</class>);</li>
-<li><lit>term</lit> to <lit>dt</lit>;</li>
-<li><lit>link</lit> to <lit>a</lit>.</li>
-</ul>
-
-</section>
-
-
-<section><h>Migrating to version 2.15</h>
-
-<section><h>Changes to plain text conversion</h>
-
-<p>The node method <meth>asText</meth> has been moved to the
-<mod>html</mod> namespace, so you have to replace:</p>
-
-<prog>print node.asText()</prog>
-
-<p>with:</p>
-
-<prog>
-from ll.xist.ns import html
-print html.astext(node)
-</prog>
-
-</section>
-
-<section><h>Changes to <class>htmlspecials.pixel</class></h>
-
-<p>If you've been using the <lit>color</lit> attribute for
-<class>htmlspecials.pixel</class>, you have to add a <lit>#</lit> in from of
-the value, as it is a &css; color value now. (And if've you've been using
-<lit>color</lit> and a &css; padding of a different color: This will no longer
-work).</p>
-
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.14</h>
-
-<section><h>Changes to presenters</h>
-
-<p>Presenters work differently now. Instead of:</p>
-
-<prog>print node.asrepr(presenters.CodePresenter)</prog>
-
-<p>simply do the following:</p>
-
-<prog>print presenters.CodePresenter(node)</prog>
-
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.13</h>
-
-<section><h>Changes to <mod>ll.xist.xsc</mod></h>
-
-<p><meth>xsc.Namespace.tokenize</meth> no longer has an <arg>encoding</arg>
-argument, but operates on a unicode string directly. You can either use the
-result of a <meth>asString</meth> call or decode the result of an
-<meth>asBytes</meth> call yourself.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.11</h>
-
-<section><h>Changes to <mod>ll.xist.xsc</mod></h>
-
-<p>The function <func>ToNode</func> has been renamed to
-<func>tonode</func>.</p>
-
-<p><class>ll.xist.Context</class> no longer subclasses <class>list</class>.
-If you need a stack for your context, simply add the list as an attribute
-of the context object.</p>
-
-</section>
-
-<section><h>Code rearrangements</h>
-
-<p>The iterator stuff from <mod>ll.xist.xfind</mod> has been moved to
-the <mod>ll</mod> package/module, i.e. you have to use
-<func>ll.first</func> instead of <func>ll.xist.xfind.first</func>.</p>
-
-</section>
-
-<section><h>Changes to the <meth>walk</meth> method</h>
-
-<p>The <meth>walk</meth> method has changed again. There are no inmodes
-and outmodes any longer. Instead input and output are <class>Cursor</class>
-objects. If you're using your own <meth>walk</meth> filters, you have to
-update them. For different output modes you can use the methods <meth>walknode</meth>,
-<meth>walkpath</meth> or <meth>walkindex</meth> instead of using
-the cursor yielded by <meth>walk</meth>.</p>
-
-<p>The node methods <meth>find</meth> and <meth>findfirst</meth>
-have been removed. Use <lit>xsc.Frag(node.walk(<rep>...</rep>)</lit> or
-<lit>node.walk(<rep>...</rep>)[0]</lit> instead.</p>
-
-</section>
-
-<section><h>Changes to publishing</h>
-
-<p>Publishing has changed: If you've used the method <meth>repr</meth>
-before to get a string representation of an &xml; tree, you have to use
-<meth>asrepr</meth> instead now (<meth>repr</meth> is a generator
-which will produce the string in pieces).</p>
-
-</section>
-
-<section><h>Changes to the <mod>xfind</mod> module</h>
-
-<p>The functions <func>item</func>, <func>first</func>,
-<func>last</func>, <func>count</func> and
-<func>iterone</func> as well as the class <class>Iterator</class>
-have been moved to the <mod>ll</mod> module.</p>
-
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.10</h>
-
-<section><h>Changes to publishing</h>
-<p>Publishing has been changed from using a stream &api; to using a
-iterator &api;. If you've been using <meth>Publisher.write</meth> or
-<meth>Publisher.writetext</meth> (in your own <meth>publish</meth>
-methods) you must update your code by replacing <lit>publisher.write(<rep>foo</rep>)</lit>
-with <lit>yield publisher.encode(<rep>foo</rep>)</lit> and
-<lit>publisher.writetext(<rep>foo</rep>)</lit> with
-<lit>yield publisher.encodetext(<rep>foo</rep>)</lit>.</p>
-</section>
-
-<section><h>Changes to the test suite</h>
-<p>The test suite now uses <a href="http://codespeak.net/py/current/doc/test.html">py.test</a>,
-so if you want to run it you'll need py.test.</p>
-</section>
-
-<section><h>Changes to <mod>ll.xist.ns.code</mod></h>
-<p>The code in a <class>ll.xist.ns.code.pyexec</class> object is no longer
-executed at construction time, but at conversion time. So if you relied on
-this fact (e.g. to make a namespace available for parsing the rest of the
-&xml; file) you will have to change your code.</p>
-</section>
-
-<section><h>Removed namespaces</h>
-<p>The namespace modules <mod>ll.xist.ns.css</mod> and
-<mod>ll.xist.ns.cssspecials</mod> have been removed.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.9</h>
-
-<section><h>Changes to exceptions</h>
-<p>All exception classes have been moved from <mod>ll.xist.errors</mod>
-to <mod>ll.xist.xsc</mod>.</p>
-</section>
-
-<section><h>Changes to &xml; name handling</h>
-<p>The class attribute <lit>xmlname</lit> no longer gets replaced with a tuple
-containing both the Python and the &xml; name. If you want to get the Python name,
-use <lit><rep>foo</rep>.__class__.__name__</lit>.</p>
-</section>
-
-<section><h>Changes to the methods <meth>walk</meth>, <meth>find</meth> and <meth>findfirst</meth></h>
-<p>The argument <arg>filtermode</arg> has been renamed to <arg>inmode</arg>
-and (for <meth>walk</meth>) <arg>walkmode</arg> has been renamed to <arg>outmode</arg>.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.8</h>
-
-<section><h>Changes to display hooks</h>
-<p>The way &xist; uses <func>sys.displayhook</func> has been
-enhanced. To make use of this, you might want to update your Python
-startup script. For more info see the
-<a href="root:xist/Installation.html">installation instructions</a>.</p>
-</section>
-
-<section><h>Changes to the <lit>xmlns</lit> attribute</h>
-<p>Each element (or entity, or processing instruction) class had an attribute
-<lit>xmlns</lit> that references the namespace module. This attribute has been
-renamed to <lit>__ns__</lit>.</p>
-</section>
-
-<section><h>Other minor changes</h>
-<p><class>ll.xist.ns.specials.x</class> has been renamed to
-<class>ll.xist.ns.specials.ignore</class>.</p>
-<p><class>ll.xist.xfind.item</class> no longer handles slices.
-If you've used that functionality, you may now use slices
-on XFind operators, and materilize the result, i.e. replace
-<lit>xfind.slice(<rep>foo</rep>, 1, -1)</lit>
-with <lit>list(<rep>foo</rep>[1:-1])</lit>, if <lit><rep>foo</rep></lit> is
-an XFind operator. Otherwise you can use <lit>list(<rep>foo</rep>)[1:-1]</lit>.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.7</h>
-
-<section><h>Changes to <mod>ll.xist.xfind</mod></h>
-<p>The functions <func>xfind.first</func> and
-<func>xfind.last</func> now use <func>xfind.item</func>, so
-they will raise an <class>IndexError</class> when no default value is passed.
-To get the old behaviour, simply pass <lit>None</lit> as the default.</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.6</h>
-
-<section><h>Changes to the publishing &api;</h>
-<p>The top level publishing method in the publisher has been
-renamed from <meth>dopublication</meth> to <meth>publish</meth>.
-If you're using the publishing &api; directly (instead of the node methods
-<meth>asBytes</meth> and <meth>write</meth>), you'll have to
-update your code.</p>
-<p>The method that writes a unicode object to the output stream has
-been renamed from <meth>publish</meth> to <meth>write</meth>.
-This is only relevant when you've overwritten the <meth>publish</meth>
-method in your own node class (e.g. in &jsp; tag library directives
-or similar stuff, or for special nodes that publish some text literally).</p>
-</section>
-
-<section><h>Changes to the presentation &api;</h>
-<p>The presentation &api; has been changed too: The top level presentation
-method in the presenter has been renamed from <meth>dopresentation</meth> to
-<meth>present</meth>. This is only relevant if you've written your own
-presenter, or are using the presentation &api; directly (instead of the node
-method <meth>repr</meth>).</p>
-</section>
-
-<section><h>Parsing &html;</h>
-<p>Parsing &html; is now done via libxml2's &html; parser, instead of using
-�TidyLib of mxTidy. You can no longer pass arguments to tidy. Only the boolean
-values of the <arg>tidy</arg> argument will be used. There are no other visible
-changes to the &api; but the result of parsing might have changed.</p>
-</section>
-
-<section><h>Removed &api;s and scripts</h>
-<p>The script <filename>xscmake.py</filename> has been removed.</p>
-
-<p>The <meth>visit</meth> method has been removed.</p>
-
-<p><meth>ll.xist.xsc.FindOld</meth> has been removed.</p>
-
-<p><class>ll.xist.ns.xml.header</class> has been renamed to
-<class>ll.xist.ns.xml.declaration</class>.</p>
-
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.5</h>
-
-<section><h>Changes to content model</h>
-<p>The boolean class attribute <lit>empty</lit> for element classes has been
-replaced by an object <lit>model</lit>. <lit>empty</lit> is still supported,
-but issues a <class>PendingDeprecationWarning</class>. If you don't want to specify
-a proper content model for your own elements you can replace <lit>empty = False</lit>
-with <lit>model = True</lit> (which is a shortcut for <lit>model = sims.Any()</lit>)
-and <lit>empty = True</lit> with <lit>model = False</lit> (which is a shortcut
-for <lit>model = sims.Empty()</lit>).</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.4</h>
-
-<section><h>Changes to parsing</h>
-<p>Parsing has changed internally, but the module level parsing functions in
-<mod>ll.xist.parsers</mod> are still available (and will create a parser
-on the fly), but a few arguments have changed:</p>
-<dl>
-<dt><arg>handler</arg></dt><dd>This argument is no longer available, if you
-need a special handler, you have to subclass <class>ll.xist.parsers.Parser</class>
-and call its parsing methods.</dd>
-<dt><arg>parser</arg></dt><dd>This argument has been renamed to
-<arg>saxparser</arg> and is <em>not</em> a &sax;2 parser instance any longer,
-but a callable that will create a &sax;2 parser.</dd>
-<dt><arg>sysid</arg></dt><dd><arg>sysid</arg> is now available for all
-parsing functions not just <func>parseString</func>.</dd>
-</dl>
-</section>
-
-<section><h>Changes to converter contexts</h>
-<p><meth>ll.xist.converters.Converter.__getitem__</meth> now doesn't use
-the key passed in, but <lit><rep>key</rep>.Context</lit> as the real dictionary
-key. This has the following consequences:</p>
-<ul>
-<li><p>If you want a unique context for your own element class,
-you <em>must</em> implement a new <class>Context</class> class (otherwise you'd
-get <class>ll.xist.xsc.Element.Context</class>):</p>
-<example>
-<prog>
-class Foo(xsc.Element):
-	empty = False
-
-	class Context(xsc.Element.Context):
-		def __init_(self):
-			xsc.Element.Context.__init__(self)
-			<rep>...</rep>
-</prog>
-</example>
-</li>
-<li>Subclasses that don't overwrite <class>Context</class> (as well as instances
-of those classes) can be passed to <meth>ll.xist.converters.Converter.__getitem__</meth>
-and the unique base class context object will be returned.</li>
-</ul>
-</section>
-
-<section><h>Changed namespaces</h>
-<p>The character reference classes from <mod>ll.xist.ns.ihtml</mod>
-that are duplicates of those in <mod>ll.xist.ns.chars</mod> have been removed, so you
-have to use <mod>ll.xist.ns.chars</mod> for those characters in addition to
-<mod>ll.xist.ns.ihtml</mod>
-</p>
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.3</h>
-
-<section><h>Changes in namespace handling</h>
-<p>Namespace handling has changed. There are no entity or processing instruction
-prefixes any longer and creating a proper <class>Prefixes</class> object has
-been simplified. For example:</p>
-<prog>
-prefixes = xsc.Prefixes()
-prefixes.addElementPrefixMapping(None, html)
-prefixes.addElementPrefixMapping("svg", svg)
-</prog>
-<p>can be simplified to:</p>
-<prog>
-prefixes = xsc.Prefixes(html, svg=svg)
-</prog>
-<p>The three arguments <arg>elementmode</arg>, <arg>entitymode</arg> and
-<arg>procinstmode</arg> for the publishing methods have been combined into
-<arg>prefixmode</arg>, which is used for elements only.</p>
-</section>
-
-<section><h>Changed namespaces</h>
-<p>The character reference classes from <mod>ll.xist.ns.html</mod>
-have been moved to a separate namespace <mod>ll.xist.ns.chars</mod>.</p>
-<p>The processing instructions <class>eval_</class> and <class>exec_</class>
-from the <mod>ll.xist.ns.code</mod> module have been renamed to
-<class>pyeval</class> and <class>pyexec</class>.</p>
-</section>
-
-<section><h>Changed method names</h>
-<p>The method names <meth>beginPublication</meth>, <meth>endPublication</meth>
-and <meth>doPublication</meth> have been lowercased.</p>
-</section>
-</section>
-
-
-<section><h>Migrating to version 2.2</h>
-
-<section><h>Attribute methods</h>
-
-<p>The <class>Element</class> methods for accessing attributes
-have been deprecated. So instead of <lit><rep>node</rep>.hasattr("<rep>attr</rep>")</lit>,
-you should use:</p>
-
-<prog>
-"<rep>attr</rep>" in <rep>node</rep>.attrs
-</prog>
-
-<p>The same holds for checking whether an attribute is allowed. You can use the following code:</p>
-
-<prog>
-"<rep>attr</rep>" in <rep>node</rep>.Attrs
-</prog>
-
-<p>or:</p>
-
-<prog>
-"<rep>attr</rep>" in <rep>NodeClass</rep>.Attrs
-</prog>
-
-<p>or:</p>
-
-<prog>
-<rep>NodeClass</rep>.isallowed("<rep>attr</rep>")
-</prog>
-
-<p>Many <class>Attrs</class> methods have gained an additional parameter
-<arg>xml</arg>, which specifies whether an attribute name should be
-treated as the &xml; or the Python name of the attribute. Make sure
-that you're not mixing up your arguments in the function call. The
-safest method for this is using keyword arguments, e.g.:</p>
-
-<prog>
-<rep>node</rep>.attr.get("<rep>attr</rep>", default=42)
-</prog>
-
-</section>
-
-<section><h>JSP directive page element</h>
-
-<p>A <lit>contentType</lit> attribute is no longer generated for the
-<class>ll.xist.ns.jsp.directive_page</class>. You have to explicitely use an attribute
-<lit>contentType="<rep>text/html</rep>"</lit> to get a <lit>contentType</lit> attribute
-in the resulting &jsp;. The <lit>charset</lit> option is generated automatically
-from the encoding specified in the publisher.</p>
-
-</section>
-
-<section><h><class>autoimg</class> changes</h>
-
-<p><class>ll.xist.htmlspecials.autoimg</class> will no longer touches existing <lit>width</lit>
-or <lit>height</lit> attributes, so e.g. setting the width to twice the image size via
-<lit>width="2*%(width)s"</lit> no longer works. You have to implement your own
-version of <class>autoimg</class> if you need this.</p>
-
-</section>
-
-<section><h><meth>find</meth> changes</h>
-
-<p><meth>find</meth> has been completely rewritten to use the new tree traversal filters.
-For backwards compatibility a filter functor <class>ll.xist.xsc.FindOld</class> exists that
-takes the same arguments as the old <meth>find</meth> method. I.e. you can replace:</p>
-<prog>
-node.find(
-	type=html.a,
-	attr={"href": None},
-	searchchildren=True
-)
-</prog>
-<p>with:</p>
-<prog>
-node.find(
-	xsc.FindOld(
-		type=html.a,
-		attr={"href": None},
-		searchchildren=True
-	),
-	skiproot=True
-)
-</prog>
-<p>But one minor difference remains: when <arg>skiproot</arg> is set to true in the new
-<meth>find</meth> method, the attributes of the root element will <em>not</em> be traversed.
-With the old method they would be traversed.</p>
-
-</section>
-
-<section><h><class>doc</class> changes</h>
-
-<p><class>programlisting</class> has been renamed to <class>prog</class>.</p>
-
-</section>
-
-<section><h>Namespace changes</h>
-
-<p>Namespaces can no longer be instantiated. Instead you have to derive a class
-from <class>Namespace</class>. The <arg>xmlprefix</arg> argument from the constructor
-becomes a class attribute <lit>xmlname</lit> and the argument <arg>xmlname</arg>
-becomes <lit>xmlurl</lit>.</p>
-
-<p>Adding element classes to the namespace is now done with the
-<class>Namespace</class> classmethod <meth>update</meth>.
-If you want the turn a namespace into a module, you can use the classmethod
-<meth>makemod</meth> instead of <meth>update</meth>.</p>
-
-<example><h>Old method</h>
-<prog>
-xmlns = xsc.Namespace("foo", "http://www.foo.com/", vars()
-</prog>
-</example>
-
-<example><h>New method</h>
-<prog>
-class xmlns(xsc.Namespace):
-	xmlname = "foo"
-	xmlurl = "http://www.foo.com/"
-xmlns.makemod(vars())
-</prog>
-</example>
-
-</section>
-
-</section>
-
-
-<section><h>Migrating to version 2.1</h>
-
-<ul>
-<li>The method <meth>withSep</meth> has been renamed
-to <meth>withsep</meth>.</li>
-
-<li>The argument <arg>defaultEncoding</arg> for the various
-parsing functions has been renamed to <arg>encoding</arg>.</li>
-</ul>
-
-</section>
-
-
-<section><h>Migrating to version 2.0</h>
-
-<section><h>Attribute handling</h>
-
-<p>The biggest change is in the way attributes are defined. In older
-versions you had to define a class attribute <lit>attrHandlers</lit>
-that mapped attribute names to attribute classes. This created problems
-with <z>illegal</z> attribute names (e.g. <lit>class</lit> and <lit>http-equiv</lit>
-in &html;), so for them an ugly workaround was implemented. With 2.0
-this is no longer neccessary. Defining attributes is done via a
-class <class>Attrs</class> nested inside the element class like this:</p>
-
-<example>
-<prog>
-class foo(xsc.Element):
-	class Attrs(xsc.Element.Attrs):
-		class bar(xsc.TextAttr)
-			"The bar attribute"
-			default = "spam"
-			values = ("spam", "eggs")
-			required = True
-		class baz(xsc.URLAttr):
-			"The baz attribute"
-</prog>
-</example>
-
-<p>Default values, set of allowed attributes values and
-whether the attribute is required can be defined via
-class attributes as shown above. You should (directly
-or indirecty) inherit from <class>xsc.Element.Attrs</class>,
-because this class implements handling of global attributes.
-If you want to inherit some attributes (e.g. from your
-base class), you can derive from the appropriate
-<class>Attrs</class> class. Removing an attribute you inherited
-can be done like this:</p>
-
-<example>
-<prog>
-class bar(foo):
-	class Attrs(foo.Attrs):
-		baz = None
-</prog>
-</example>
-
-<p>This removes the attribute <lit>baz</lit> inherited
-from <class>foo</class>.</p>
-
-<p>For attribute names that are no legal Python identifiers,
-the same method can be used as for element classes: Define
-the real &xml; name via a class attribute. This class attribute
-has been renamed from <lit>name</lit> to <lit>xmlname</lit>.</p>
-
-<p>This also means that you always have to use the Python
-name when using attributes now. The &xml; name will only
-be used for parsing and publishing.</p>
-
-<p>&xist; 2.0 tries to be as backwards compatible as
-possible: An existing <lit>attrHandlers</lit> attribute
-will be converted to an <class>Attrs</class> class on the
-fly (and will generate a <class>DeprecationWarning</class> when
-the class is created). An <class>Attrs</class> class will
-automatically generate an <lit>attrHandlers</lit> attribute,
-so it's possible to derive from new element classes in the old way.
-The only situation where this won't work, is with
-attributes where the Python and &xml; name differ, you
-have to use <z>new style</z> attributes there.</p>
-</section>
-
-<section><h>Namespace support</h>
-
-<p>&xist; supports &xml; namespaces now and for parsing it's
-possible to configure which namespaces should be available
-for instantiating classes from. For more info about this
-refer to the documentation for the class <pyref module="ll.xist.xsc" class="Prefixes"><class>Prefixes</class></pyref>.</p>
-
-<p>Before 2.0 the &xml; name for a namespace object
-was pretty useless, now it can be used as the namespace
-name in <lit>xmlns</lit> attributes and it will be used
-for that when publishing and specifying an <lit>elementmode</lit>
-of <lit>2</lit> in the call to the publishing method or the constructor
-of the publisher.</p>
-
-<p>Namespace objects should now be named <lit>xmlns</lit>
-instead of <lit>namespace</lit> as before.</p>
-
-</section>
-
-<section><h>Global attributes</h>
-
-<p>Global attributes are supported now, e.g. the attributes
-<lit>xml:lang</lit> and <lit>xml:space</lit> can be specified
-in an element constructor like this:</p>
-
-<example>
-<prog>
-from ll.xist import xsc
-from ll.xist.ns import html, xml
-
-node = html.html(
-	<rep>content</rep>,
-	{(xml, "lang"): "en", (xml, "space"): "preserve"},
-	lang="en"
-)
-</prog>
-</example>
-
-<p>Instead of the module object (which must contain a
-namespace object named <lit>xmlns</lit>), you can also
-pass the namespace object itself (i.e. <lit>xml.xmlns</lit>)
-or the namespace name (i.e. <lit>"http://www.w3.org/XML/1998/namespace"</lit>).</p>
-
-</section>
-
-<section><h>Namespace changes</h>
-
-<p>The classes <class>XML</class> and <class>XML10</class>
-have been moved from <mod>ll.xist.xsc</mod> to
-<mod>ll.xist.ns.xml</mod>.</p>
-
-<p>All the classes in <mod>ll.xist.ns.specials</mod>
-that are specific to &html; generation have been moved
-to the new module <mod>ll.xist.ns.htmlspecials</mod>.</p>
-
-<p>The module <mod>ll.xist.ns.html</mod> has been updated
-to the &xhtml; specification, so there might be some changes.
-The new feature for specifying attribute restrictions has
-been used, so e.g. you'll get warnings for missing <lit>alt</lit>
-attributes in <class>img</class> elements. These warnings
-are issued via the warning framework. Refer to the documentation
-for the <mod>warnings</mod> module to find out how to
-configure the handling of these warnings.</p>
-
-</section>
-
-<section><h>Miscellaneous</h>
-
-<p>&xist; now requires at least Python 2.2.1 because
-the integer constants <lit>True</lit> and <lit>False</lit>
-are used throughout the code wherever appropriate. These
-constants will become instances of the new class <class>bool</class>
-in Python 2.3. You might want to change your code too, to
-use these new constant (e.g. when setting the element
-class attribute <lit>empty</lit>).</p>
-
-<p>Using mixed case method names was a bad idea, because
-this conflicts with Python's convention of using
-all lowercase names (without underscores). These method
-names will be fixed in the next few &xist; versions.
-The first names that where changed were the element methods
-<meth>getAttr</meth> and <meth>hasAttr</meth>, which
-have been renamed to <meth>getattr</meth> and
-<meth>hasattr</meth> respectively. <meth>getAttr</meth>
-and <meth>hasAttr</meth> are still there and can be called
-without generating <class>DeprecationWarning</class>s, but they
-will start to generate warnings in the upcoming versions.</p>
-
-</section>

NEWS.xml

-<?xml version='1.0' encoding='utf-8'?>
-<section><h>Changes in 3.1 (released 01/18/2008)</h>
-<ul>
-<li>Fixed the problem that the source distibution didn't include header files.</li>
-<li>If an <class>URLAttr</class> attribute contains a processing instruction
-&xist; will no longer transform the &url; in any way.</li>
-<li>Fixed a parser bug, where attributes were dropped when the attribute
-value was empty.</li>
-<li>Putting a module into a <class>Pool</class> object now copies the
-<lit>xmlns</lit> attribute too. This makes it possible to use <class>Pool</class>
-objects as conversion targets.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 3.0 (released 01/07/2008)</h>
-<ul>
-<li>Namespaces have been greatly simplified. There are no namespace modules any
-longer. An element class can be assigned a namespace by setting the <lit>xmlns</lit>
-class attribute to the namespace name. Global attributes can be assigned a
-namespace by setting the <lit>xmlns</lit> attribute on the attribute class itself
-(<em>not</em> on the <class>Attrs</class> class). The classes <class>Prefixes</class>
-and <class>NSPool</class> are gone too. Instead a new class <class>Pool</class>
-is used to specify which classes should be used for parsing.
-</li>
-
-<li>Dependency on <a href="http://pyxml.sf.net/">PyXML</a> has finally
-been dropped. &xist; now uses its own &xml; parsing &api;. Two parsers
-are available: One based on <a href="http://expat.sourceforge.net/">expat</a>
-and one based on a custom version of
-<a href="http://effbot.org/zone/sgmlop-index.htm">sgmlop</a>.</li>
-
-<li>Tree traversal has been rewritten again. XFind expressions involving
-multiple uses of <lit>//</lit> now work correctly. The method <meth>walk</meth>
-now doesn't yield <class>Cursor</class> objects, but simple path lists
-(actually it's always the same list, if you want distinct lists use
-<meth>walkpath</meth>). Applying XFind expressions to nodes directly
-is no longer supported, you have to call <meth>walk</meth>,
-<meth>walknode</meth> or <meth>walkpath</meth> with the XFind
-expression instead. Many XFind operators have been renamed and/or reimplemented
-(see the documentation for the <mod>xfind</mod> module for more
-information).</li>
-
-<li><p>The methods <meth>__getitem__</meth>, <meth>__setitem__</meth>
-and <meth>__delitem__</meth> for <class>Frag</class> and <class>Element</class>
-now support the new walk filters, so you can do:</p>
-<ul>
-<li><lit>del node[html.p]</lit> to delete all <class>html.p</class> child elements
-of <lit>node</lit>;</li>
-<li><lit>del node[html.p[2]]</lit> to delete only the third
-<class>html.p</class>;</li>
-<li><lit>node[xfind.hasclass("note")] = html.p("There was a note here!")</lit> to
-replace several child nodes with a new one;</li>
-<li><lit>for c in node[xfind.empty]: print c.bytes()</lit> to print all
-empty (element) children of <lit>node</lit>;</li>
-<li><lit>del node[node[0]]</lit> to delete the first child node (which is
-silly, but illustrates that you can pass a node to get/replace/delete
-that node);</li>
-</ul>
-</li>
-
-<li><p>A new module <mod>ll.xist.css</mod> has been added which contains
-&css; related functionality: The generator function <func>iterrules</func>
-can be passed an &xist; tree and it will produce all &css; rules defined in any
-<class>html.link</class> or <class>html.style</class> elements or imported by them
-(via the &css; rule <lit>@import</lit>). This requires the
-<a href="http://cheeseshop.python.org/pypi/cssutils"><mod>cssutils</mod></a>
-package.</p>
-
-<p>The function <func>applystylesheets</func> modifies the &xist; tree passed in
-by removing all &css; (from <class>html.link</class> and <class>html.style</class>
-elements and their <lit>@import</lit>ed stylesheets) and putting the styles into
-<lit>style</lit> attributes of the affected elements instead.</p>
-
-<p>The function <func>selector</func> return a tree walk filter from a &css;
-selector passed as a string.</p>
-</li>
-
-<li>
-<p>Constructing trees can now be done with <lit>with</lit> blocks. Code looks
-like this:</p>
-<prog>
-with xsc.Frag() as node:
-	+xml.XML()
-	+html.DocTypeXHTML10transitional()
-	with html.html():
-		with html.head():
-			+meta.contenttype()
-			+html.title("Example page")
-		with html.body():
-			+html.h1("Welcome to the example page")
-			with html.p():
-				+xsc.Text("This example page has a link to the ")
-				+html.a("Python home page", href="http://www.python.org/")
-				+xsc.Text(".")
-
-print node.conv().bytes(encoding="us-ascii")
-</prog>
-<p>Also the function <func>xsc.append</func> has been renamed to
-<func>add</func> and supports <lit>with</lit> blocks now instead of
-<a href="http://codespeak.net/svn/user/hpk/talks/xpython-talk.txt">XPython</a>.</p>
-</li>
-
-<li>A subset of <a href="http://docutils.sourceforge.net/rst.html">ReST</a>
-is supported now for docstrings when using the <mod>ll.xist.ns.doc</mod>
-module. The module attribute <lit>__docformat__</lit> is now honored (Set it
-to <lit>"xist"</lit> to get &xist; docstrings).</li>
-
-<li>Many classes in the <mod>ll.xist.ns.doc</mod> have been renamed
-to more familiar names (from &html;, &xhtml; 2 or ReST).</li>
-
-<li>The <lit>media</lit> attribute of <class>html.link</class> and
-<class>html.style</class> now has a method <meth>hasmedia</meth>.</li>
-
-<li>The node method <meth>asBytes</meth> has been renamed to
-<meth>bytes</meth> and <meth>bytes</meth> has been renamed to
-<meth>iterbytes</meth>.</li>
-
-<li>The node method <meth>asString</meth> has been renamed to
-<meth>string</meth> and a new method <meth>iterstring</meth> has been
-added.</li>
-
-<li><class>ll.xist.ns.xml.XML10</class> is gone now. Use
-<class>ll.xist.ns.xml.XML</class> instead.</li>
-
-<li><func>xsc.tonode</func> now will raise an exception when it
-can't handle an argument instead of issuing a warning.</li>
-
-<li>A class attribute <lit>empty</lit> inside element classes will now no
-longer get converted into <lit>model</lit>.</li>
-
-<li><class>ll.xist.ns.doc.pyref</class> now copes better with decorated
-methods.</li>
-
-<li>The deprecated <class>Element</class> methods <meth>hasAttr</meth>,
-<meth>hasattr</meth>, <meth>isallowedattr</meth>, <meth>getAttr</meth>,
-<meth>getattr</meth>, <meth>setDefaultAttr</meth>,
-<meth>setdefaultattr</meth>, <meth>attrkeys</meth>,
-<meth>attrvalues</meth>, <meth>attritems</meth>,
-<meth>iterattrkeys</meth>, <meth>iterattrvalues</meth>,
-<meth>iterattritems</meth>, <meth>allowedattrkeys</meth>,
-<meth>allowedattrvalues</meth>, <meth>allowedattritems</meth>,
-<meth>iterallowedattrkeys</meth>, <meth>iterallowedattrvalues</meth>,
-<meth>iterallowedattritems</meth> and <meth>copyDefaultAttrs</meth>
-have been removed. The deprecated <class>Attrs</class> method
-<meth>copydefaults</meth> has been removed too.</li>
-
-<li>The namespace module <mod>ll.xist.ns.cond</mod> has been removed.</li>
-
-<li>When calling the function <func>ll.xist.parsers.parseURL</func>
-the arguments <arg>headers</arg> and <arg>data</arg> are now passed along
-to the parser's method only if they are specified. This makes it possible to
-pass ssh &url;s to <func>ll.xist.parsers.parseURL</func>.</li>
-
-<li>The methods <meth>withnames</meth> and <meth>withoutnames</meth> have
-been split into two that take Python names and two that take XML names.
-Multiple arguments are used now (instead of one argument that must be a sequence).
-Passing a namespace to remove all attributes from the namespace is no longer supported.</li>
-
-<li>The <class>Attrs</class> methods <meth>updatenew</meth> and
-<meth>updatexisting</meth> have been removed.</li>
-
-</ul>
-</section>
-
-
-<section><h>Changes in 2.15.5 (released 07/17/2007)</h>
-
-<ul>
-<li>The Python quotes example no longer contains the &xml; source
-or the generated &html;.</li>
-</ul>
-
-
-<section><h>Changes in 2.15.4 (released 07/16/2007)</h>
-<ul>
-<li>The Python quotes example now always parses the file from
-the original &url;.</li>
-<li>The Python quotes and the media example now print the result
-to <lit>stdout</lit>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.15.3 (released 07/16/2007)</h>
-<ul>
-<li>Use a consistent license (MIT) everywhere. This should make
-&xist; Debian compatible.</li>
-<li>Change the Python quotes example, so that it works even if
-there's no <filename>python-quotes.xml</filename> in the current
-directory.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.15.2 (released 01/24/2007)</h>
-<ul>
-<li>Fixed a bug in <meth>presenters.CodePresenter.__str__</meth>.</li>
-<li>Fixed base URL handling for tidy parsing.</li>
-<li>Updated examples.</li>
-<li>Updated <func>xiter</func> and <func>xattrs</func>
-implementations for <class>Node</class> and <class>Namespace</class> to
-conform to the newest version of IPython.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.15.1 (released 09/25/2006)</h>
-<ul>
-<li>Fixed a few bugs in the <mod>sgmlop</mod> function declarations.</li>
-<li>Readded the spacer pixel.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.15 (released 09/24/2006)</h>
-<ul>
-<li>&xist; has been made compatible with Python 2.5: Code has been updated
-to use the proper C API for memory management and <a href="http://www.python.org/dev/peps/pep-0353/">PEP 353</a>
-support has been added. &xist; now includes its own fixed version of <mod>sgmlop</mod>.</li>
-<li>The <class>ll.xist.xsc.Attrs</class> methods <meth>with</meth> and
-<meth>without</meth> have been renamed to <meth>withnames</meth> and
-<meth>withoutnames</meth> for Python 2.5 compatibility.</li>
-<li><class>ll.xist.ns.htmlspecials.pixel</class> no longer handles colors
-via different GIFs. It uses the <lit>background-color</lit> in the <lit>style</lit>
-attribute instead. The same change has been implemented for
-<class>ll.xist.ns.htmlspecials.autopixel</class>. It's now possible to overwrite
-the default <lit>src</lit> attribute value of <lit>root:px/spc.gif</lit> either
-via the &xml; attribute or via the converter context.</li>
-<li>The node method <meth>asText</meth> has been made a function, moved
-into the <mod>html</mod> namespace and renamed to <func>astext</func>.
-Furthermore <app moreinfo="http://elinks.or.cz/">elinks</app> is used for plain text
-formatting now instead of <app moreinfo="http://w3m.sourceforge.net/">w3m</app>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.14.2 (released 07/04/2006)</h>
-<ul>
-<li>Fixed a bug in the <meth>presentAttr</meth> method of
-<class>ll.xist.presenters.TreePresenter</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.14.1 (released 06/29/2006)</h>
-<ul>
-<li>Fixed a bug in the <meth>presentEntity</meth> method of
-<class>ll.xist.presenters.CodePresenter</class>.</li>
-<li>Updated installation instructions.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.14 (released 06/28/2006)</h>
-<ul>
-<li>Namespaces for RSS 0.91, RSS 2.0 and Atom 1.0 have been added.</li>
-
-<li>A new namespace <mod>ll.xist.ns.detox</mod> has been added that
-is similar to <mod>ll.toxic</mod> but can be used to generate Python
-code instead of PL/SQL code. Using <mod>detox</mod> templates is about
-50 times faster than using &xist; trees directly and about 10 times faster than
-<a href="http://kid.lesscode.org/">Kid</a>.</li>
-
-<li>Presenters are now compatible to <a href="http://ipython.scipy.org/">IPython</a>'s
-ipipe module. This means that you can browse &xist; trees interactively
-if you have IPython installed. <class>NormalPresenter</class> and the
-<class>Node</class> methods <meth>repr</meth> and <meth>asrepr</meth>
-have been removed.</li>
-
-<li>A new processing instruction <class>ll.xist.ns.specials.url</class>
-has been added that does the same &url; transformation as
-<class>ll.xist.xsc.URLAttr</class> does.</li>
-
-<li>On publishing <class>ll.xist.ns.html.html</class> now only adds a
-<lit>lang</lit> and <lit>xml:lang</lit> attribute, if neither of them exists.</li>
-
-<li><mod>setuptools</mod> is now supported for installation.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.13 (released 10/31/2005)</h>
-<ul>
-<li><meth>ll.xist.xsc.Namespace.tokenize</meth> requires a
-<class>unicode</class> object as input now. This makes it possible
-to use encodings that are not ASCII compatible (such as UTF-16).
-The <arg>encoding</arg> argument is gone.</li>
-
-<li><meth>ll.xist.xsc.Node.asString</meth> uses the <arg>encoding</arg>
-argument to determine which characters have to be output as character references
-now. (You'll still get a unicode object as the result.)</li>
-
-<li>A new processing instruction class <class>ll.xist.ns.specials.literal</class>
-has been added, that will output its content literally when published. This
-can be used for embedding preformatted &xml; (e.g. from a database) into an
-XIST tree.</li>
-</ul>
-
-</section>
-
-
-<section><h>Changes in 2.12 (released 10/13/2005)</h>
-<ul>
-<li>Namespaces for <a href="http://www.relaxng.org/">Relax NG</a> and
-<a href="http://kid.lesscode.org/">Kid</a> have been added.</li>
-
-<li>&xist; requires version 1.0 of the core package now.</li>
-
-<li>The class name for the DocBook &dtd; class has been fixed.</li>
-
-</ul>
-
-</section>
-
-
-<section><h>Changes in 2.11 (released 07/29/2005)</h>
-<ul>
-<li>A script <filename>xml2xsc.py</filename> has been added, that
-can be used to parse an &xml; file and generate a rudimentary &xist; namespace
-from it.</li>
-
-<li>A <class>DocType</class> for XHTML 1.1 has been added
-(suggested by Elvelind Grandin).</li>
-
-<li>Line number information is now added when parsing &html;.</li>
-
-<li>The <meth>sorted</meth> method now supports the same arguments
-(<arg>cmp</arg>, <arg>key</arg> and <arg>reverse</arg>) as
-<meth>list.sort</meth> and <func>sorted</func> in Python 2.4.</li>
-
-<li>The <meth>walk</meth> doesn't yield the node directly, but yields
-a <class>Cursor</class> object now, with has several ways of referencing the node.</li>
-
-<li>New methods <meth>walknode</meth>, <meth>walkpath</meth> and
-<meth>walkindex</meth> have been added.</li>
-
-<li>Presenters use an iterator &api; instead of a stream &api; now. Dumping
-an &xml; tree presentation to the terminal can now start immediately instead
-of having to wait for the complete string to be formatted.</li>
-
-<li>Fixed a bug with element/attribute names that contained a <lit>.</lit>
-character. (This broke <mod>ll.xist.ns.fo</mod>.)</li>
-
-<li>Fixed a bug with <lit>xmlns</lit> attributes in nested elements.
-When an element ended the parser restored the wrong prefix mapping.</li>
-
-<li>The <dirname>python-quotes</dirname> demo has been updated to use the
-current version of AMK's &xml; file.</li>
-
-<li>Removed iterator stuff from <mod>ll.xist.xfind</mod>, as this
-is now part of the <mod>ll</mod> package/module.</li>
-
-<li>The function <func>ToNode</func> has been renamed to
-<func>tonode</func>.</li>
-
-<li><class>ll.xist.Context</class> no longer subclasses <class>list</class>.</li>
-
-<li><class>ll.xist.ns.doc.explain</class> will now try to output the objects
-in the order in which they appear in the Python source.</li>
-
-<li>The node methods <meth>find</meth> and <meth>findfirst</meth>
-have been removed.</li>
-
-<li><mod>ll.xist.ns.cond</mod> now uses a sandbox dictionary in a
-converter context for evaluating expression.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.10 (released 05/20/2005)</h>
-<ul>
-<li>The content of the processing instruction <class>ll.xist.ns.code.pyexec</class>
-will not be executed at construction time, but at conversion time. The code
-in <class>ll.xist.ns.code.pyexec</class> or <class>ll.xist.ns.code.pyeval</class>
-will no longer be executed in the <mod>ll.xist.sandbox</mod> module
-(which has been removed), but in a sandbox dictionary in the converter context
-of the <mod>ll.xist.ns.code</mod> namespace.</li>
-
-<li>The tests have been ported to <a href="http://codespeak.net/py/current/doc/test.html">py.test</a>.</li>
-
-<li>The method <meth>mapped</meth> is now callable without arguments.
-In this case a converter will be created on the fly. You can pass constructor
-arguments for this converter to <meth>mapped</meth> as keyword arguments.</li>
-
-<li>The publishing &api; has changed again: <meth>ll.xist.publishers.Publisher.publish</meth>
-no longer accepts an argument <arg>stream</arg> to which the byte strings are
-written, but it is a generator now. The publisher methods <meth>write</meth>
-and <meth>writetext</meth> have been renamed to <meth>encode</meth> and
-<meth>encodetext</meth> and return the encoded byte string, instead of
-writing it directly to the stream. There's a new generator method
-<meth>bytes</meth> for nodes now, which can be passed the same arguments
-as <meth>asBytes</meth>. These changes should help when using
-&xist; in &wsgi; applications.</li>
-
-<li>The iterator returned from <meth>Element.__getitem__</meth>,
-<meth>Frag.__getitem__</meth> and the <meth>walk</meth> method
-now supports <meth>__getitem__</meth> itself, so you can write
-<lit><rep>table</rep>[html.tr][0]</lit> to get the first row from a table or
-<lit><rep>page</rep>.walk(xsc.FindTypeAll(html.td))[-1]</lit> to get the last table cell
-from a complete &html; page.</li>
-
-<li>Several bugs in the namespaces <mod>ll.xist.ns.meta</mod>,
-<mod>ll.xist.ns.form</mod> and
-<mod>ll.xist.ns.specials</mod> have been fixed.</li>
-<li>The namespace modules <mod>ll.xist.ns.css</mod> and
-<mod>ll.xist.ns.cssspecials</mod> have been removed.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.9 (released 04/21/2005)</h>
-<ul>
-<li>&xist; trees can now be pickled. The only restriction is that global
-attributes must come from a namespace that has been turned into a module
-via <meth>makemod</meth>, so that this module can be imported on
-unpickling.</li>
-
-<li><p>Two arguments of the <meth>walk</meth> method have been renamed:
-<arg>filtermode</arg> has been renamed to <arg>inmode</arg> and <arg>walkmode</arg>
-has been renamed to <arg>outmode</arg>. For these modes two new values are
-supported:</p>
-<dl>
-<dt><lit>ll.xist.xsc.walkindex</lit></dt><dd>The value passed to the filter
-function or yielded from the iterator is a list containing child indizes and
-attribute names that specify the path to the node in question.</dd>
-<dt><lit>ll.xist.xsc.walkrootindex</lit></dt><dd>The filter function
-will be called with two arguments: The first is the root node of the tree (i.e.
-the node for which <meth>walk</meth> has been called), the second one is
-an index path (just like for <lit>ll.xist.xsc.walkindex</lit>). If used as
-an <arg>outmode</arg> a tuple with these two values will be yielded.</dd>
-</dl>
-</li>
-<li><p>Attribute mappings now support <meth>__getitem__</meth>,
-<meth>__setitem__</meth> and <meth>__delitem__</meth> with list
-arguments, i.e. you can do:</p>
-<prog>
-<prompt>&gt;&gt;&gt; </prompt><input>from ll.xist.ns import html</input>
-<prompt>&gt;&gt;&gt; </prompt><input>e = html.a("gurk", href=("hinz", "kunz"))</input>
-<prompt>&gt;&gt;&gt; </prompt><input>print e.attrs[["href", 0]]</input>
-hinz
-<prompt>&gt;&gt;&gt; </prompt><input>e.attrs[["href", 0]] = "hurz"</input>
-<prompt>&gt;&gt;&gt; </prompt><input>print e["href"]</input>
-hurzkunz
-<prompt>&gt;&gt;&gt; </prompt><input>del e.attrs[["href", 0]]</input>
-<prompt>&gt;&gt;&gt; </prompt><input>print e["href"]</input>
-kunz
-</prog>
-</li>
-<li><p>&xml; attributes can now be accessed as Python attributes, i.e.</p>
-<prog>
-<prompt>&gt;&gt;&gt; </prompt><input>from ll.xist.ns import html</input>
-<prompt>&gt;&gt;&gt; </prompt><input>e = html.a("spam", href="eggs")</input>
-<prompt>&gt;&gt;&gt; </prompt><input>print e.attrs.href</input>
-eggs
-</prog>
-<p>(Don't confuse this with <lit>e.Attrs.href</lit> which is the
-attribute class.)</p>
-</li>
-
-<li><class>Frag</class> and <class>Element</class> now support <class>Node</class>
-subclasses as arguments to their <meth>__getitem__</meth> method: An iterator
-for all children of the specified type will be returned.</li>
-
-<li>The encoding used for parsing now defaults to <lit>None</lit>. When
-reading from an &url; and no default encoding has been specified the one
-from the <lit>Content-Type</lit> header will be used. If this still doesn't
-result in a usable encoding, <lit>"utf-8"</lit> will be used when parsing &xml;
-and <lit>"iso-8859-1"</lit> will be used when parsing broken &html;.</li>
-
-<li>All error and warning classes from <mod>ll.xist.errors</mod>
-have been merged into <mod>ll.xist.xsc</mod>. This avoids import
-problems with circular imports.</li>
-
-<li>The attributes <lit>showLocation</lit> and <lit>showPath</lit>
-of <class>ll.xist.presenters.TreePresenter</class> have been lowercased and
-presenters are properly reset after they've done their job.</li>
-
-<li>The class attribute <lit>xmlname</lit> will no longer be turned into a list
-containing the Python and the &xml; name, but will be the &xml; name only. You
-can get the Python name from <lit><rep>foo</rep>.__class__.__name__</lit>.</li>
-
-<li><class>DeprecationWarning</class>s for <lit>name</lit> and
-<lit>attrHandlers</lit> have finally been removed.</li>
-
-<li>Instances of <class>ll.xist.xsc.Entity</class> subclasses can now be
-compared. <meth>__eq__</meth> simply checks if the objects are instances
-of the same class.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.8.1 (released 03/22/2005)</h>
-<ul>
-<li>Added a note about the package init file to the installation
-documentation.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.8 (released 01/03/2005)</h>
-<ul>
-<li>&xist; requires Python 2.4 now.</li>
-
-<li><class>ll.xist.ns.specials.x</class> has been renamed to
-<class>ll.xist.ns.specials.ignore</class>.</li>
-
-<li><class>ll.xist.utils.findAttr</class> has been renamed to
-<class>ll.xist.utils.findattr</class>.</li>
-
-<li><class>ll.xist.xfind.item</class> no longer handles slices.</li>
-
-<li>XFind has been enhanced to support item and slice operators, i.e.
-if <lit><rep>foo</rep></lit> is an XFind operator, <lit><rep>foo</rep>[0]</lit>
-is an operator that will produce the first node from <lit><rep>foo</rep></lit>
-(if there is one). Negative values and slices are supported too.</li>
-
-<li>Operators can be chained via division: <lit>html.a/html.b</lit> is an
-operator that can be passed around and applied to a node.</li>
-
-<li>&xist; requires the new core module and makes use of the new
-<z>cooperative displayhook</z> functionality defined there: If you install
-the displayhook you can tweak or replace <lit>ll.xist.presenters.hookpresenter</lit>
-to change the output.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.7 (released 11/24/2004)</h>
-<ul>
-<li>The transparent pixel used by <class>ll.xist.ns.htmlspecials.pixel</class>
-has been renamed to <filename>spc.gif</filename> to avoid problems with IE.</li>
-<li>Removed a debug print in <class>ll.xist.xfind.Finder.__getitem__</class>.</li>
-<li><mod>ll.xist.xfind</mod> now has a new function <func>item</func>,
-that can be used to get a certain item or slice from an iterator.
-<func>xfind.first</func> and <func>xfind.last</func> have been
-changed to use <func>xfind.item</func>, so you now have to pass a
-default value to get the old behaviour.</li>
-<li>Obsolete options in <mod>ll.xist.options</mod> have been removed
-(and <lit>reprEncoding</lit> has been renamed to <lit>reprencoding</lit>).</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.6.2 (released 06/06/2005)</h>
-<ul>
-<li>Fixed a bug in <meth>ll.xist.parsers.Parser.parse</meth>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.6.1 (released 11/02/2004)</h>
-<ul>
-<li>Fixed a bug in <meth>ll.xist.xfind.Finder.__floordiv__</meth>.</li>
-<li>Restricted characters as defined in
-<a href="http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-RestrictedChar">&xml; 1.1</a>
-will now be published as character references.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.6 (released 10/26/2004)</h>
-<ul>
-<li><func>ToNode</func> now tries iterating through the
-value passed in, so it's now possible to pass iterators and generators
-(and generator expressions in Python 2.4) to <class>Frag</class>
-and <class>Element</class> constructors.</li>
-
-<li><p>A new &api; named XFind has been added for iterating through &xml;
-trees. XFind expressions look somewhat like XPath expressions but are pure
-Python expressions. For example finding all images inside links in an &html;
-page can be done like this:</p>
-<example><h>Finding linked images with XFind</h>
-<prog>
-from ll.xist import parsers, xfind
-from ll.xist.ns import html
-node = parsers.parseURL("http://www.python.org/", tidy=True)
-for img in node//html.a/html.img:
-	print img["src"]
-</prog>
-</example>
-
-<p>The module <mod>ll.xist.xfind</mod> contains several operators
-that can be used in XFind expressions.</p>
-</li>
-
-<li>Parsing broken &html; is now done with the &html; parser from
-<a href="http://www.xmlsoft.org/">libxml2</a>. The parsing functions
-no longer accept options for tidy, only the boolean value of the <arg>tidy</arg>
-argument is used.</li>
-
-<li>The publishing &api; has been simplified: Publication can now be done with
-a call to <meth>ll.xist.publishers.Publisher.publish</meth>, passing in a
-<class>ll.xist.xsc.Node</class>. Writing strings to the publisher output is
-now done with <meth>ll.xist.publishers.Publisher.write</meth>. The methods
-<meth>beginPublication</meth> and <meth>endPublication</meth> have been
-removed.</li>
-
-<li>The presentation &api; has been simplified in the same way: You'll get a
-presentation by calling: <lit>string = <rep>presenter</rep>.present(<rep>node</rep>)</lit>.
-The methods <meth>beginPresentation</meth> and <meth>endPresentation</meth>
-have been removed.</li>
-
-<li>The parser now has the option to ignore illegal elements, attributes,
-processing instructions and entities. The default behaviour is to raise an
-exception, but this can now be reconfigured via Python's warning framework.</li>
-
-<li>The classmethod <meth>tokenize</meth> from <mod>ll.toxic</mod>
-has been moved to <class>ll.xist.xsc.Namespace</class>, so it's now possible
-to tokenize an &xml; string for other processing instructions as well.</li>
-
-<li>A new class <class>ll.xist.xsc.NSPool</class> has been added.
-An <class>NSPool</class> contains a pool of namespaces from which the parser
-selects the appropriate namespace once an <lit>xmlns</lit> attribute is
-encountered.</li>
-
-<li>The script <filename>xscmake.py</filename> (which has been unmaintained
-for a while now) has been removed.</li>
-
-<li>Elements <class>hostname</class>, <class>tty</class>, <class>prompt</class>
-and <class>input</class> were add to <mod>ll.xist.ns.doc</mod>.</li>
-
-<li>The method <meth>ll.xist.xsc.Attrs.set</meth> now returns the
-new attribute object.</li>
-
-<li>The <meth>visit</meth> method has been removed.</li>
-
-<li><meth>ll.xist.xsc.FindOld</meth> has been removed.</li>
-
-<li><class>ll.xist.ns.xml.header</class> has been renamed to
-<class>ll.xist.ns.xml.declaration</class>.</li>
-
-</ul>
-
-</section>
-
-
-<section><h>Changes in 2.5 (released 06/30/2004)</h>
-<ul>
-
-<li>Specifying content models for elements has seen major enhancements. The
-boolean class attribute <lit>empty</lit> has been replaced by an object
-<lit>model</lit> whose <meth>checkvalid</meth> method will be called
-for validating the element content.</li>
-
-<li>A new module <mod>ll.xist.sims</mod> has been added that provides
-a simple schema validation. Schema violations will be reported via Pythons
-warning framework.</li>
-
-<li>All namespace modules have been updated to use <mod>sims</mod>
-information. The &svg; module has been updated to &svg; 1.1. The docbook
-module has been updated to DocBook 4.3.</li>
-
-<li>It's possible to switch off validation during parsing and publishing.</li>
-
-<li><p><class>ll.xist.xsc.Frag</class> and <class>ll.xist.xsc.Element</class>
-both have a <meth>__call__</meth> method with the same arguments as
-their constructors. Those methods will append content nodes (and set attributes
-for <class>ll.xist.xsc.Element</class>) and return <self/>, so they can be used
-when creating an object tree. This makes it possible to put the attributes close
-to the tag name, instead of putting them at the end after the content.</p>
-<p>Instead of:</p>
-<example>
-<prog>
-node = html.table(
-	html.tr(
-		html.td("foo"),
-		html.td("bar"),
-	),
-	html.tr(
-		html.td("spam"),
-		html.td("eggs")
-	),
-	class_="example"
-)
-</prog>
-</example>
-<p>you can now use the following:</p>
-<example>
-<prog>
-node = html.table(class_="example")(
-	html.tr(
-		html.td("foo"),
-		html.td("bar"),
-	),
-	html.tr(
-		html.td("spam"),
-		html.td("eggs")
-	)
-)
-</prog>
-</example>
-
-</li>
-
-<li><p>Experimental support for Holger Krekel's
-<a href="http://codespeak.net/svn/user/hpk/talks/xpython-talk.txt">XPython</a>
-has been added. Code might look like this:</p>
-<example>
-<prog>
-from ll.xist import xsc, converters
-from ll.xist.ns import html, meta
-
-import random
-
-c = converters.Converter()
-&lt;c&gt;:
-	&lt;html.html()&gt;:
-		&lt;html.head()&gt;:
-			&lt;meta.contenttype()&gt;: pass
-			&lt;html.title()&gt;:
-				xsc.append("The title")
-		&lt;html.body(class_="foo")&gt;:
-			&lt;html.h1()&gt;:
-				flag = random.choice((0, 1))
-				if flag:
-					xsc.append("The foo page", class_="foo")
-				else:
-					xsc.append("The bar page", class_="bar")
-			&lt;html.p()&gt;:
-				if flag:
-					xsc.append("The foo content")
-				else:
-					xsc.append("The bar content")
-
-print c.lastnode.asBytes()
-</prog>
-</example>
-</li>
-
-<li>
-<p>Creating global attributes has been simplified. Passing an instance
-of <class>ll.xist.xsc.Namespace.Attrs</class> to an <class>Element</class>
-constructor now does the right thing:</p>
-<example>
-<prog>
-from ll.xist.ns import html, xml
-node = html.html(
-	html.head(),
-	xml.Attrs(lang="de"),
-	lang="en",
-)
-</prog>
-</example>
-</li>
-
-<li>Creating skeleton implementations of &xist; namespaces is no longer done
-via &xml; conversion (i.e. the namespace module <mod>ll.xist.ns.xndl</mod>),
-but through the new module <mod>ll.xist.xnd</mod>. The script
-<filename>dtdxsc.py</filename> will automatically generate <mod>sims</mod>
-information.</li>
-
-<li><class>ll.xist.xsc.CharRef</class> now inherits from
-<class>ll.xist.xsc.Text</class> too, so you don't have to special case
-<class>CharRef</class>s any more. When publishing, <class>CharRef</class>s
-will be handled like <class>Text</class> nodes.</li>
-
-<li><class>ll.xist.ns.meta.contenttype</class> now has an attribute
-<lit>mimetype</lit> (defaulting to <lit>"text/html"</lit>) for specifying
-the &mime; type.</li>
-
-<li><class>ll.xist.ns.htmlspecials.caps</class> has been removed.</li>
-
-<li>Registering elements in namespace classes has been rewritten to use
-a cache now.</li>
-
-<li>Pretty printing has been changed: Whitespace will only be added now if
-there are no text nodes in element content.</li>
-
-<li>Two mailing lists are now available: One for discussion about &xist;
-and one for &xist; announcements.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.4.1 (released 01/05/2004)</h>
-<ul>
-<li>Changed the xmlname of <class>ll.xist.ns.jsp.directive_page</class> back again
-(it's <lit>directive.page</lit> only for the &xml; form, which we don't use anyway.)</li>
-
-<li>Drop the default value for <class>ll.xist.ns.jsp.directive_page.Attrs.language</class>,
-as this attribute can only be used once.</li>
-
-<li>If an <class>ll.xist.xsc.Prefixes</class> object has a prefix mapping for
-a namespace it will return this prefix too, if asked for a prefix for a subclass
-of this namespace.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.4 (released 01/02/2004)</h>
-<ul>
-<li>The class <class>ll.xist.parsers.Handler</class> has been renamed to
-<class>Parser</class> and has been made reusable, i.e. it is possible to
-instantiate a parser once and use it multiple times for parsing. All the
-classes derived from <class>xml.sax.xmlreader.InputSource</class> have been
-dropped and the methods for parsing strings, &url;s and files have been
-implemented as methods of the parser. Most of the arguments that had to be passed
-to the various parsing functions are passed to the parser constructor now.
-The basic parsing functionality is implemented by parsing streams instead of
-<class>InputSource</class>s.</li>
-<li>Similar to the changes for parsing, publishers have been changed to be
-reusable and most arguments to the publishing functions are available as
-arguments to the publisher constructor.</li>
-<li>Now converter contexts are no longer bound to an element
-class, but to the context class defined by the element class, i.e.
-the attribute <lit>Context</lit> of the argument for <meth>Converter.__getitem__</meth>
-will be used as the dictionary key. This makes it possible to use a class
-and it subclasses interchangeably (as long as the base class defines
-its own <class>Context</class> class and the subclasses don't overwrite it).</li>
-<li>Added a find functor <class>FindTypeAllAttrs</class> that
-searches content and attributes.</li>
-<li>Fixed the &xml; name for <class>ll.xist.ns.jsp.directive_page</class>.</li>
-<li>All character references in <mod>ll.xist.ns.ihtml</mod>
-that exist in <mod>ll.xist.ns.chars</mod> too have been removed.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.3 (released 12/08/2003)</h>
-<ul>
-<li>It's now possible to parse &xml; without generating location
-information for each node, by passing <lit>loc=False</lit> to
-the constructor of the <class>Handler</class>.</li>
-<li>The <class>HTMLParser</class> no longer complains about
-global attributes or <lit>xmlns</lit>.</li>
-<li>&xist; now supports <app moreinfo="http://utidylib.sf.net/">&micro;Tidylib</app>
-in addition to <app>mxTidy</app>. If <app>&micro;Tidylib</app> is found
-it is preferred over <app>mxTidy</app>.</li>
-<li>It's possible now to pass arguments to tidy simple by
-passing an argument dictionary for the <arg>tidy</arg> argument
-in the parsing functions.</li>
-<li>The methods <meth>parsed</meth> and <meth>checkvalid</meth>
-have been separated.</li>
-<li><class>ll.xist.ns.htmlspecials.pixel</class> and
-<class>ll.xist.ns.htmlspecials.autopixel</class> now check whether their
-<lit>color</lit> attribute is ok.</li>
-<li>The base &url; is now set correctly when parsing from an &url;
-even if the original &url; does a redirect. (This requires <mod>ll.url</mod>
-version 0.11.3).</li>
-<li>Namespace handling has been rewritten again, to be more standards
-compliant: Now there is no prefixes for entities and processing instructions any longer.
-Prefix mappings can be created much simpler, and they no longer contain any
-namespace stack for parsing, as this is now done by the parser itself.
-<class>xsc.NamespaceAttrMixIn</class> is gone too.</li>
-<li>The processing instructions <class>exec_</class> and <class>eval_</class>
-from <mod>ll.xist.ns.code</mod> have been renamed to <class>pyexec</class>
-and <class>pyeval</class> and <class>import_</class> has been removed.</li>
-<li><class>CharRef</class>s from <mod>ll.xist.ns.html</mod> have been
-moved to a new module named <mod>ll.xist.ns.chars</mod>.</li>
-<li>The method names <meth>beginPublication</meth>, <meth>endPublication</meth>
-and <meth>doPublication</meth> have been lowercased.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.2 (released 07/31/2003)</h>
-<ul>
-<li><p>Namespace handling has been completely rewritten.
-Namespaces are now classes derived from <class>ll.xist.xsc.Namespace</class>.
-Defining element classes can be done inside or outside the namespace
-class. If the element classes are defined outside the namespace
-class, they can be moved inside the namespace with a simple
-attribute assignment:</p>
-<prog>
-class foo(xsc.Element):
-	empty = False
-
-class xmlns(xsc.Namespace):
-	xmlname = "foo"
-	xmlurl = "http://www.foo.com/ns/foo"
-
-xmlns.foo = foo
-</prog>
-<p>The methods <meth>elementkeys</meth>, <meth>iterelementkeys</meth>,
-<meth>elementvalues</meth>, <meth>iterelementvalues</meth>,
-<meth>elementitems</meth> and <meth>iterelementitems</meth>
-can be used for iterating through the element classes and their
-names. You can use the method <meth>element</meth>
-to get an element class with a certain name:</p>
-<prog>
-&gt;&gt;&gt; from ll.xist.ns import html
-&gt;&gt;&gt; html.element("div")
-&lt;element class ll.xist.ns.html/div at 0x824363c&gt;
-</prog>
-<p>For processing instructions, entities and character references
-similar methods are available.</p>
-<p>The method <meth>update</meth> can be used to add
-many element classes to a namespace at once, simply by passing
-a dictionary with those classes (use <lit>vars()</lit>
-to add everything that's defined inside your module). The method
-<meth>updatenew</meth> does the same, but copies only those
-attributes that don't exist in the namespace, <meth>updateexisting</meth>
-copies only those that do exist. You can turn a namespace
-into a module with <meth>makemod</meth>:</p>
-<prog>
-from ll.xist import xsc
-
-class foo(xsc.Element):
-	empty = False
-
-class xmlns(xsc.Namespace):
-	xmlname = "foo"
-	xmlurl = "http://www.foo.com/ns/foo"
-xmlns.makemod(vars())
-</prog>
-<p>Put the above code into <filename>foo.py</filename> and
-you can do the following:</p>
-<prog>
->>> import foo
->>> foo
-&lt;namespace foo/xmlns name=u'foo' url=u'http://www.foo.com/ns/foo' with 1 elements from 'foo.py' at 0x81bfc14&gt;
-</prog>
-</li>
-
-<li><func>getns</func> has been dropped, so you always
-have to pass in a <class>Namespace</class> class where a namespace
-is required.</li>
-
-<li>For the <class>ll.xist.ns.jsp.directive_page</class> element
-automatic generation of the correct <lit>charset</lit> option
-in the <lit>contentType</lit> attribute is only done when there
-is a <lit>contentType</lit> attribute, as <lit>contentType</lit>
-is optional.</li>
-
-<li>The converter has a new property <func>node</func>.
-<arg>node</arg> can't be passed to <meth>conv</meth> but
-will be set to <self/> by <meth>conv</meth> automatically.
-This makes it possible to access the <z>document root</z>
-during conversion.</li>
-
-<li><class>ll.xist.ns.htmlspecials.autoimg</class> no longer touches
-existing width and height attributes. This means that %-formatting
-of the existing attributes is no longer done.</li>
-
-<li>Added a new class <class>ll.xist.ns.htmlspecials.autopixel</class>
-that works like <class>ll.xist.ns.htmlspecials.pixel</class> but
-inherits the size for the image specified via the <lit>src</lit>
-attribute.</li>
-
-<li><class>Frag</class> and <class>Element</class> now support
-extended slices.</li>
-
-<li><class>Frag</class> and <class>Element</class> now support
-the methods <meth>extend</meth> and <meth>__iadd__</meth>.</li>
-
-<li>For walking the tree the method <meth>walk</meth> has been completely
-rewritten and a new method <meth>visit</meth> has been added. For
-more info see the docstrings.</li>
-
-<li><class>Node</class> now has two new methods <meth>copy</meth>
-and <meth>deepcopy</meth> and supports the <mod>copy</mod>
-module from the Python standard library.</li>
-
-<li>Calling <meth>mapped</meth> through <meth>conv</meth> has
-been removed. You again have to call <meth>mapped</meth> directly
-and pass a node and a converter.</li>
-
-<li>The &html; handling of the <class>HTMLParser</class> has been improved
-(it now uses code from <mod>xml.sax.drivers2.drv_sgmlop_html</mod> (which
-is part of <a href="http://pyxml.sf.net">PyXML</a>)).</li>
-
-<li>The core functionality found in the script <filename>dtd2xsc.py</filename>
-has been moved to a class method <meth>ll.xist.ns.xndl.fromdtd</meth> in the
-<mod>ll.xist.ns.xndl</mod> namespace.</li>
-
-<li><class>ll.xist.parsers.ExpatParser</class> is now a real subclass
-instead of an alias for <class>xml.sax.expatreader.ExpatParser</class>
-It reports unknown entity references to the application (if loading
-of external entities is switched off, which is done by
-<class>ll.xist.parsers.Handler</class> and only outside of attributes).</li>
-
-<li>Namespaces have been added for Zope's TAL and METAL specifications.</li>
-
-<li>A namespace has been added for <a href="http://www.w3.org/Style/XSL/">XSL-FO</a>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.1.4 (released 06/13/2003)</h>
-<ul>
-<li>Remove the checks for attributes in attributes and
-moved the publication code for the full element into a separate
-method. This allows &jsp; tag library namespaces to simply
-overwrite <meth>publish</meth> to publish the element
-even inside attributes. (This is the same fix as in release 1.5.10)</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.1.3 (released 05/07/2003)</h>
-<ul>
-<li>The methods <meth>sorted</meth>, <meth>reversed</meth>
-and <meth>shuffled</meth> have been rewritten so they no longer
-use <lit>sys.maxint</lit>. This change fixes those methods for
-64 bit platforms (reported by Giles Frances Hall)</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.1.2 (released 02/27/2003)</h>
-<ul>
-<li><class>ll.xist.ns.struts_config11.plug_in</class> now
-allows content (as the &dtd; states). (This is the same fix
-as in release 1.5.8.)</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.1.1 (released 02/11/2003)</h>
-<ul>
-<li>Added a few elements and attributes to <mod>ll.xist.ns.doc</mod>:
-<class>username</class>, which is used for the name of a user account,
-<class>xref</class>, which is used for internal cross references and
-the attribute <lit>id</lit> for <class>section</class>, which specifies
-the target for an <class>xref</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.1 (released 12/09/2002)</h>
-<ul>
-<li>Added a new namespace module <mod>ll.xist.ns.xndl</mod>
-that contains the <z>&xist; namespace definition language</z>, i.e.
-elements that describe an &xist; namespace and can be used by
-various scripts to generate skeleton namespace modules.
-The first of these script is the &dtd; to namespace converter
-<filename>dtd2xsc.py</filename>.</li>
-<li>Added a new namespace module <mod>ll.xist.ns.tld</mod>
-that contains the definition for Java Server Pages Tag Library
-descriptors and a script <filename>tld2xsc.py</filename>
-that uses this namespace to generate namespace modules from
-<lit>tld</lit> files.</li>
-<li><class>Attr</class> now supports the method
-<meth>filtered</meth>. This is used by <meth>without</meth>
-now. The arguments for <meth>without</meth> have changed,
-because handling global attributes was too <z>magic</z>.
-A new method <meth>with</meth> has been added, with does
-the opposite of <meth>without</meth>, i.e. it removes all
-attributes that are not specified as parameters.</li>
-<li>The Python name of each <class>Node</class> subclass
-is now available as the class attribute <lit>pyname</lit>.</li>
-<li>To continue the great renaming <meth>withSep</meth>
-has been renamed to <meth>withsep</meth>.</li>
-<li>The namespace name for the <mod>ll.xist.ns.struts_html</mod>
-module has been fixed.</li>
-<li>The argument <arg>defaultEncoding</arg> for the various
-parsing functions has been renamed to <arg>encoding</arg>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.8 (released 11/20/2002)</h>
-<ul>
-<li><func>ll.xist.ns.doc.getDoc</func> has been renamed
-to <func>getdoc</func>.</li>
-<li>The &css; parser was dropping the <lit>%</lit> from
-percentage values. This has been fixed.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.7 (released 11/12/2002)</h>
-<ul>
-<li><meth>xsc.Element.__nonzero__</meth> can no longer fall back
-to <meth>xsc.Frag.__nonzero__</meth>.
-(this is the same fix as in 1.5.7).</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.6 (released 11/11/2002)</h>
-<ul>
-<li>Performance optimizations.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.5 (released 11/11/2002)</h>
-<ul>
-<li>Fixed a bug in <class>ll.xist.ns.specials.autoimg</class>:
-Attributes were not converted before the size check was done
-(this is the same fix as in 1.5.5).</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.4 (released 11/08/2002)</h>
-<ul>
-<li>Fixed a regression bug in <class>ll.xist.ns.jsp.directive</class>
-and several documentation issues.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.3 (released 10/30/2002)</h>
-<ul>
-<li>Fixed a few bugs in <class>HTMLParser</class>.</li>
-<li>Added DocBook conversion for several elements
-in <mod>ll.xist.ns.doc</mod>.</li>
-<li>Now the <filename>__init__.py</filename> file for the
-<mod>ll</mod> package is included.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.2 (released 10/21/2002)</h>
-<ul>
-<li>Fixed a bug in <meth>Frag.__rmul__</meth> (by
-reusing <meth>__mul__</meth>).</li>
-<li>Fixed a bug with the backwards compatible prefix
-mapping: Defining element classes in <lit>exec</lit> processing
-instructions didn't work, because the prefixes object used for
-parsing wouldn't be updated when the namespace object is
-defined inside the processing instruction. Now using the default
-for the <arg>prefixes</arg> argument in calls to the parsing
-functions uses one global shared <class>Prefixes</class> instances
-where all the namespaces that are newly defined will be registered too.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0.1 (released 10/17/2002)</h>
-<ul>
-<li>Fixed <filename>xscmake.py</filename> by removing the
-prefix handling. <class>OldPrefixes</class> will always
-be used for parsing now.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 2.0 (released 10/16/2002)</h>
-<ul>
-<li>&xist; now requires at least Python 2.2.1.</li>
-<li>Attribute handling has been largely rewritten. Instead of
-a class attribute <lit>attrHandlers</lit>, the attributes
-are now defined through a nested class named <class>Attrs</class>
-inside the element. This class must be derived from <class>ll.xist.Element.Attrs</class>
-(or one of its subclasses if you want to inherit attributes from
-this class). Defining attributes is done through classes nested
-inside this attributes class and derived from any of the known
-attribute classes (like <class>TextAttr</class>, <class>URLAttr</class> etc.).
-The class name will be the attribute name (and can be overwritten
-with a class attribute <lit>xmlname</lit>. This makes it possible
-to have docstrings for attributes. Furthermore it's possible
-to define an attribute default value via the class attribute <lit>default</lit>,
-allowed values for the attribute via <lit>values</lit>,
-which is a list of allowed values, and whether the attribute is
-required or not via <lit>required</lit>.</li>
-<li>&xist; now has real namespace support. The new class
-<class>ll.xist.xsc.Prefixes</class> can be used to define a
-mapping between prefixes and namespace names. This can be
-used for parsing and publishing. Namespace support is even
-available for entities and processing instruction.</li>
-<li>Global attributes are supported now. Namespace modules
-for the <lit>xml</lit> and <lit>xlink</lit> namespaces
-have been added (and <class>ll.xist.xsc.XML</class> was
-moved to <mod>ll.xist.ns.xml</mod>).</li>
-<li>A new namespace module for &svg; 1.0 has been added: <mod>ll.xist.ns.svg</mod>.</li>
-<li>The &html; specific parts of <mod>ll.xist.ns.specials</mod>
-have been split off into a separate module <mod>ll.xist.ns.htmlspecials</mod>.</li>
-<li>Comparison of attributes with strings has been removed.
-You have to use <meth>__unicode__</meth> or <meth>__str__</meth>
-now before comparing.</li>
-<li>The <class>HTMLParser</class> now removes unknown attributes
-instead of complaining.</li>
-<li>There is a new parser class <class>BadEntityParser</class>, which
-is a &sax;2 parser that recognizes the character entities
-defined in &html; and tries to pass on unknown or malformed
-entities to the handler literally.</li>
-<li>To give all nodes a chance to do something after they have been parsed
-(e.g. to prepend the base &url; for <class>URLAttr</class> nodes), the parser
-now calls the method <meth>parsed</meth> immediately after node creation.
-This is used for the new class <class>StyleAttr</class>, which uses the
-<class>CSSTokenizer</class>, to prepend the base &url; to all &url;s
-found in a style attribute.</li>
-<li>The pixel images have been moved to the directory <dirname>px</dirname>
-to make image &url;s shorter.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.6.1 (released 08/25/2003)</h>
-<ul>
-<li>Updated to work with newer versions of <mod>ll.ansistyle</mod>.</li>
-<li>Updated the namespaces <mod>ll.xist.ns.struts_html</mod> and
-<mod>ll.xist.ns.struts_config11</mod> to the state of Struts 1.1 final.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.6 (released 07/02/2003)</h>
-<ul>
-<li>Removed the default value for the <lit>className</lit> attribute
-in <class>ll.xist.ns.struts_config11.action</class>.</li>
-<li>Added an attribute <lit>type</lit> to
-<class>ll.xist.ns.struts_config11.action_mapping</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.13 (released 07/01/2003)</h>
-<ul>
-<li>Implemented <meth>ll.xist.xsc.Namespace.__eq__</meth>,
-so that replacing a namespace in the registry really works.</li>
-<li>Added an attribute <lit>target</lit> to <class>ll.xist.ns.html.area</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.12 (released 06/17/2003)</h>
-<ul>
-<li>Fixed a bug in the new <mod>ll.xist.ns.jsp</mod>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.11 (released 06/13/2003)</h>
-<ul>
-<li>Updated <mod>ll.xist.ns.jsp</mod> to &jsp; 1.2.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.10 (released 06/13/2003)</h>
-<ul>
-<li>Remove the checks for attributes in attributes and
-moved the publication code for the full element into a separate
-method. This allows &jsp; tag library namespaces to simply
-overwrite <meth>publish</meth> to publish the element
-even inside attributes.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.9 (released 04/30/2003)</h>
-<ul>
-<li>Reregistering a namespace now properly overwrites
-the old version in <lit>xsc.namespaceRegistry</lit>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.8 (released 02/27/2003)</h>
-<ul>
-<li><class>ll.xist.ns.struts_config11.plug_in</class> now
-allows content (as the &dtd; states).</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.7 (released 11/12/2002)</h>
-<ul>
-<li><meth>xsc.Element.__nonzero__</meth> can no longer fall back
-to <meth>xsc.Frag.__nonzero__</meth>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.6 (released 11/11/2002)</h>
-<ul>
-<li>Performance optimizations.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.5 (released 11/11/2002)</h>
-<ul>
-<li>Fixed a bug in <class>ll.xist.ns.specials.autoimg</class>:
-Attributes were not converted before the size check was done.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.4 (released 09/30/2002)</h>
-<ul>
-<li><filename>xscmake.py</filename> now tries to strip off
-a trailing <lit>xsc</lit> from the filename before it falls back
-to the extension <lit>html</lit> (The builtin extension mapping
-is still tried first).</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.3 (released 09/25/2002)</h>
-<ul>
-<li>Added new processing instruction class <class>ll.xist.ns.php.expression</class>
-that generates a &php; <lit>print</lit> statement from its content.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.2 (released 09/19/2002)</h>
-<ul>
-<li>Removed the <lit>value</lit> magic from
-<class>ll.xist.ns.form.checkbox</class> as this
-conflicted with dynamic <lit>value</lit> values.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.5.1 (released 09/17/2002)</h>
-<ul>
-<li>Comparison of attributes with strings has been removed.
-You have to use <meth>__unicode__</meth> or <meth>__str__</meth>
-instead.</li>
-<li>The <class>HTMLParser</class> now removes unknown attributes
-instead of complaining.</li>
-<li>There is a new parser class <class>BadEntityParser</class>, which
-is a &sax;2 parser that recognizes the character entities
-defined in &html; and tries to pass on unknown or malformed
-entities to the handler literally.</li>
-<li>To give all nodes a chance to do something after they have been parsed
-(e.g. to prepend the base URL for <class>URLAttr</class> nodes), the parser
-now calls the method <meth>parsed()</meth> immediately after node creation.
-This is used for the new class <class>StyleAttr</class>, which uses the
-<class>CSSTokenizer</class>, to prepend the base url to all urls found in
-a style attribute.</li>
-<li>The <class>HTMLParser</class> now removes unknown attributes
-instead of complaining.</li>
-<li>There is a new parser class <class>BadEntityParser</class>, which
-is a &sax;2 parser that recognizes the character entities
-defined in &html; and tries to pass on unknown or malformed
-entities to the handler literally.</li>
-<li>To give all nodes a chance to do something after they have been parsed
-(e.g. to prepend the base &url; for <class>URLAttr</class> nodes), the parser
-now calls the method <meth>parsed</meth> immediately after node creation.
-This is used for the new class <class>StyleAttr</class>, which uses the
-<class>CSSTokenizer</class>, to prepend to base &url; to all &url;s
-found in a style attribute.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.4.3 (released 04/29/2002)</h>
-<ul>
-<li>New namespace module <mod>xist.ns.struts_config11</mod>
-allows to parse and modify <a href="http://jakarta.apache.org/struts/">Struts</a>
-configuration files conforming to the
-<a href="http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">Struts 1.1 DTD</a>.
-</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.4.2 (released 03/22/2002)</h>
-<ul>
-<li>Updated <filename>xscmake.py</filename> to be compatible with the new
-<mod>url</mod> module.</li>
-<li><class>xist.ns.jsp.directive_page</class> now automatically sets the
-<lit>contentType</lit> on publishing.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.4.1 (released 03/21/2002)</h>
-<ul>
-<li>Removed <class>TidyURLInputSource</class>. Now it's possible
-to pass a <lit>tidy</lit> flag to the remaining functions <func>parseString</func>,
-<func>parseFile</func> and <func>parseURL</func> to specify whether
-the source should be tidied.</li>
-<li>To prevent an element from being registered in a <class>Namespace</class>
-the class attribute <lit>register</lit> can be used now. This makes
-it possible to have a name for the element even when it's not registered.</li>
-<li><mod>xist.ns.form</mod> elements now have all the attributes that the
-corresponding elements from <mod>xist.ns.html</mod> have.</li>
-<li>Removed the old <mod>xist.url</mod> from the Windows distribution.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.4 (released 03/18/2002)</h>
-<ul>
-<li>Reimplemented &url; handling again. Now the new global
-module <mod>url</mod> is used for that.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.3.1 (released 03/14/2002)</h>
-<ul>
-<li>Added a method <meth>pretty</meth> to <class>Node</class>
-for generating a pretty printable version of the node.</li>
-<li><lit>xsc.Node.name</lit> no longer is a class method, but a
-class attribute, that will be set at class instantiation time
-by the meta class.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.3 (released 02/12/2002)</h>
-<ul>
-<li>Ported to Python 2.2. <class>Node</class> is now derived from
-<class>object</class>, <class>Frag</class> from <class>list</class> and
-there's a new class <class>Attrs</class> which is derived from
-<class>dict</class> for the attribute mappings. All presenters
-have been adapted to work with <class>Attrs</class>.
-In addition to the usual dictionary methods and operators <class>Attrs</class>
-has a method <meth>without</meth> that returns a copy of the
-<class>Attrs</class> instance with some specified attributes removed.</li>
-<li>All the node classes now have a new method <meth>walk</meth> that generates
-all nodes in the tree using the new generator feature of Python 2.2.</li>
-<li>Also a new method <meth>walkPath</meth> has been added that works the
-same as <meth>walk</meth> but yields the complete path to each node
-as a list.</li>
-<li>Added a class <class>block</class> to <mod>xist.ns.jsp</mod>.
-The content of the <class>block</class> instance will simply be enclosed
-in a <lit>{}</lit> block. <mod>xist.ns.php</mod> got such
-a class too.</li>
-<li>Added a new module <mod>xist.ns.ihtml</mod> for
-i-mode &html;.</li>
-<li>Added new modules <mod>xist.ns.css</mod> and
-<mod>xist.ns.cssspecials</mod> for generating &css;.</li>
-<li>Now the various attributes of the <class>Converter</class> object
-are collected in a <class>ConverterState</class> object and it's possible
-to push and pop those states, i.e. it's now easy to temporarily modify a
-converter object during a <meth>convert</meth> call and revert back
-to a previous state afterwards.</li>
-<li><func>parseURL</func> and <func>parseTidyURL</func>
-now have an additional parameter <lit>headers</lit> which is a list of
-string pairs specifying additional headers to be passed in with the
-request.</li>
-<li><func>parseString</func> has an additional parameter
-<lit>systemId</lit> which will be the system id of the
-<class>InputSource</class>.</li>
-<li>The distribution now includes the makefile and the &xml;
-source files so now the distribution can rebuild ifself.</li>
-<li>Various other small bugfixes and enhancements.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.2.5 (released 12/03/2001)</h>
-<ul>
-<li>Added a new element <class>contentscripttype</class> to
-<mod>xist.ns.meta</mod> that generates a
-<lit>&lt;meta http-equiv="Content-Script-Type" ...&gt;</lit>
-element.</li>
-<li><func>xist.ns.doc.explain</func> now generates anchor elements
-for the class, function and method description, so now the
-links on the &xist; webpages work.</li>
-<li>Docstrings and documentation has been reworked. Now
-<class>xist.ns.doc.pyref</class> no longer implies a font change.
-Use the classes <class>xist.ns.doc.module</class>, <class>xist.ns.doc.class</class>,
-<class>xist.ns.doc.method</class>, <class>xist.ns.doc.function</class> and
-<class>xist.ns.doc.arg</class> to mark up your Python identifiers.</li>
-<li>Added the attributes <lit>type</lit> and <lit>key</lit>
-to <class>xist.ns.struts_config.data_source</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.2.4 (released 11/23/2001)</h>
-<ul>
-<li>Added the deprecated attributes <lit>start</lit> to
-<class>xist.ns.html.ol</class> and <lit>value</lit> to
-<class>xist.ns.html.li</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.2.3 (released 11/22/2001)</h>
-<ul>
-<li>Added missing <meth>asPlainString</meth> methods to
-<class>Comment</class> and <class>DocType</class>.</li>
-</ul>
-</section>
-
-
-<section><h>Changes in 1.2.2 (released 11/16/2001)</h>
-<ul>
-<li><meth>xist.url.URL.fileSize</meth> and <meth>xist.url.URL.imageSize</meth>