← Back to team overview

divmod-dev team mailing list archive

[Merge] lp:~exarkun/divmod.org/remove-nevow into lp:divmod.org

 

Jean-Paul Calderone has proposed merging lp:~exarkun/divmod.org/remove-nevow into lp:divmod.org.

Requested reviews:
  Divmod-dev (divmod-dev)
Related bugs:
  Bug #1325287 in Divmod: "move nevow to github"
  https://bugs.launchpad.net/divmod.org/+bug/1325287

For more details, see:
https://code.launchpad.net/~exarkun/divmod.org/remove-nevow/+merge/222457

See https://github.com/twisted/nevow

-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~exarkun/divmod.org/remove-nevow/+merge/222457
Your team Divmod-dev is requested to review the proposed merge of lp:~exarkun/divmod.org/remove-nevow into lp:divmod.org.
=== modified file 'Divmod.pth'
--- Divmod.pth	2014-05-18 17:48:04 +0000
+++ Divmod.pth	2014-06-08 12:16:37 +0000
@@ -1,9 +1,8 @@
-# -*- test-case-name: axiom,combinator,epsilon,xmantissa,nevow,formless,xquotient,reverend,sine,hyperbola -*-
+# -*- test-case-name: axiom,combinator,epsilon,xmantissa,xquotient,reverend,sine,hyperbola -*-
 Axiom
 Combinator
 Epsilon
 Mantissa
-Nevow
 Quotient
 Reverend
 Sine

=== removed directory 'Nevow'
=== removed file 'Nevow/ChangeLog'
--- Nevow/ChangeLog	2006-06-14 11:54:41 +0000
+++ Nevow/ChangeLog	1970-01-01 00:00:00 +0000
@@ -1,743 +0,0 @@
-2006-06-12  Glyph Lefkowitz <glyph@xxxxxxxxxx>
-
-	* Nevow 0.9.0: see NEWS.txt for details.
-
-2006-04-07  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* Nevow 0.8.0 released
-
-2006-03-30  Tommi Virtanen <tv@xxxxxxxxxxxxxxxxx>
-
-       * nevow/static.py: Fix handling of range requests on static files.
-
-2006-03-30  Jp Calderone <exarkun@xxxxxxxxxx>
-
-       * formless/freeform-defaults.css, formless/annotate.py: Style and
-       feedback improvements.
-
-2006-03-29  Jp Calderone <exarkun@xxxxxxxxxx>
-
-       * examples/formbuilder/: Apply Cory Dodt's patch to make this
-       example work again.
-
-2006-03-27  Jp Calderone <exarkun@xxxxxxxxxx>
-
-       * nevow/athena.py: Add getInitialArguments method which will be
-       invoked during rendering and may return a list or tuple of objects
-       which will be be passed to the client-side Widget's __init__ method.
-
-2006-03-24  Allen Short <washort@xxxxxxxxxx>
-
-	* Upgrade MochiKit to 1.2
-
-2006-03-17  Tristan Seligmann <mithrandi@xxxxxxxxxxxxxxxx>
-
-	* Remove usage of twisted.python.components.Interface from formless. 
-	Convert TypedInterface to zope.interface.
-
-2006-03-17  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/json.py: Improve (hopefully correct this time ;) unicode
-	support.
-
-2006-03-08  Valentino Volonghi <dialtone@xxxxxxxxxx>
-
-	* Remove usage of twisted.python.components.Interface from nevow. 
-	Remove compyCompat.
-
-2006-02-28  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: Make the "Connection: Close" header of Athena
-	transport responses optional (toggleable by a flag on LivePage) to
-	allow TCP connection setup overhead to be avoided.
-
-2006-02-15  Tristan Seligmann <mithrandi@xxxxxxxxxxxxxxxx>
-
-	* nevow/athena.js, nevow/athena.py: Pass JavaScript call-stack
-	information back to the server and include it in logged tracebacks
-	(Firefox only).
-
-2006-02-14  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/util.py: Delete a bunch of code duplicated from Twisted.
-
-2006-02-06  Glyph Lefkowitz <glyph@xxxxxxxxxxxxxxxxx>
-
-	* nevow/athena.py, nevow/athena.js: Pop up an obnoxious widget when
-	an Athena connection is lost.
-
-2006-02-06  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/runtime.js: Add Platform.getPage, a wrapper around the
-	browser-provided HTTP request function.
-
-2006-02-01  Tristan Seligmann <mithrandi@xxxxxxxxxxxxxxxx>
-
-	* nevow/athena.js: Add support for <athena:handler> element, a
-	declarative mechanism for attaching event handlers to nodes.
-
-2006-02-01  Tristan Seligmann <mithrandi@xxxxxxxxxxxxxxxx>
-
-	* bin/nit: Test collector/runner for Athena widgets.
-
-2006-02-01  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/defer.js: Deferred implementation to replace MochiKit
-	Deferreds.
-
-2006-01-21  Valentino Volonghi <dialtone@xxxxxxxxxx>
-
-	* nevow/rend.py, formless/webform.py: Support Deferreds returned
-	from bind_ methods.
-
-2006-01-21  Valentino Volonghi <dialtone@xxxxxxxxxx>
-
-	* nevow/flat/flatstan.py: Fix macros inside of other specials.
-
-2006-01-19  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.js: Added Divmod.Class.methods() for defining
-	multiple methods at once.
-
-2006-01-19  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py, nevow/athena.js: Support the addition of
-	LiveFragment instances to a page after the initial render pass.
-
-2006-01-15  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.js: Introduced new form of Divmod.Class.method() for
-	adding methods to JavaScript classes.  Added a child-window based
-	log viewer.
-
-2006-01-08  Valentino Volonghi <dialtone@xxxxxxxxxx>
-
-	* examples/hello/hellohtml.py: Removed htmlfile usage
-	* nevow/loaders.py: Deprecated htmlfile/htmlstr
-
-2006-01-08  Glyph Lefkowitz <glyph@xxxxxxxxxxxxxxxxx>
-
-	* nevow/test/, formless/test/: Removed all usage of trial's
-	deferredResult() and util.wait() functions.
-
-2006-01-04  Glyph Lefkowitz <glyph@xxxxxxxxxxxxxxxxx>
-
-	* nevow/athena.py: Added fragment and widget nesting.  On the
-	server side, this documents and provides a supported way of
-	setting the magical required "page" attribute.  On the client
-	side, this provides a convenient hook for multiple widgets within
-	a page to communicate with each other.
-
-2005-12-26  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: Added athena.js and MochiKit.js to the dictionary
-	returned by allJavascriptModules(), allowing them to be referenced
-	using the JS import mechanism, in turn allowing them both to be
-	served from a single site-wide URL, rather than once per page.
-
-2005-12-22  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: Remove Python 2.4 dependencies.
-
-2005-12-21  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* Nevow 0.7.0 released
-
-2005-12-18  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: Server-side processing of .js files to allow for
-	an import directive.  Imported JavaScript modules are inserted into
-	the page during the render process in dependency order.
-
-	* nevow/widget.js: Athena Widgets class and support code definitions
-	moved here.
-
-2005-12-13  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-	* nevow/athena.js: Improved IE compatibility.
-
-2005-12-05  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.js: Added Divmod.Class object which provides a
-	class-based object model for JavaScript programs.  Added
-	Nevow.Athena.Widget, a base class for "Live Widgets" - JavaScript
-	classes which can control a particular section of a LivePage and can
-	communicate with corresponding LiveFragment instances on the server.
-
-	* nevow/athena.py: Added a callRemote method to LiveFragment - this
-	allows the server to invoke methods on particular Widgets on the
-	client.
-
-2005-12-03  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/rend.py: Fixed a bug in xmlfile caching which could lead to
-	a corrupt loader cache.
-
-2005-11-29  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/appserver.py: Removed "support" (which consisted of logging
-	an error message and continuing) for returning objects which do not
-	provide IResource.
-
-2005-11-26  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py, nevow/athena.js: Use POST for the LivePage
-	transport, rather than GET.
-
-	* nevow/json.py: Fix a bug in JSON support for floating points.
-
-2005-11-25  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.js: Go live by default.
-
-2005-11-22  Glyph Lefkowitz <glyph@xxxxxxxxxx>
-
-	* nevow/guard.py: Removed __session_just_startd__.
-
-2005-11-15  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: Added LiveFragment - base class for Fragments
-	which may cooperatively share a single LivePage connection.
-
-
-2005-11-09  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* Athena JavaScript API unified into a pseudo-namespace hierarchy.
-
-2005-11-07  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* JSON serializer now quotes dict/object keys.
-
-2005-11-02  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* Nevow 0.6.0 released
-
-2005-09-21  Jp Calderone <exarkun@xxxxxxxxxx>
-
-	* nevow/athena.py: New implementation of LivePage with a
-	data-centric API: generation of JavaScript on the server is highly
-	discouraged, instead an API for passing around simple or complex
-	data structures is provided.
-
-2005-08-01  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-	egg-ify the distribution. "python setup.py bdist_egg" will now build
-	a .egg in dist for Python 2.3 and Python 2.4.
-
-2005-07-14  Donovan Preston <dp@xxxxxxxxxx>
-
-	* It's no longer necessary to specify addSlash = True on
-	the root resource. nevow.appserver.NevowSite automatically
-	sets it on the first argument you pass to it (the root
-	resource).
-
-2005-07-12  Donovan Preston <dp@xxxxxxxxxx>
-
-	* Usability improvements for formless at the expense of
-	purity of abstraction. Since the only thing anybody uses
-	formless for is rendering web forms, make it a little easier
-	to do common things. For example:
-
-	- _nevow_carryover_ does not get appended to URLs unless absolutely
-	necessary (because you return a value from an autocallable)
-
-	- TypedInterface is being deprecated in favor of using
-	IConfigurable directly, and an IConfigurable implementation
-	on Fragment/Page that is easy to use. To expose a "foo" method
-	on a page which takes a "bar" string and a "baz" integer, do this:
-
-	def bind_foo(self, ctx):
-		return [('bar', String()), ('baz', Integer())]
-
-	Previously, you would have had to create a TypedInterface,
-	declare foo and the types of the arguments in the class body,
-	declare that foo is autocallable, and declare that your Page
-	class __implements__ the interface. Now, just implement
-	bind_foo to return an IBinding or a list which can be munged
-	into one.
-
-	- It is possible to return a Page from an autocallable to have
-	that page displayed directly after posting the autocallable.
-	The URL that is used is freeform_hand, which means that the
-	Page goes into your "hand" in the session. The hand can only
-	hold one value, the most recent return result of an autocallable.
-	This isn't very back-button friendly but it makes it super
-	easy to put together a multi-step wizard interface.
-
-	See examples/tests/testformless.py and the /testformless on
-	the example server to see how to do this.
-
-	- It is possible to return a URL instance from an autocallable
-	to have the user redirected to that page after posting the
-	form successfully. This replaces and deprecates the old,
-	whacko method of setting IRedirectAfterPost on the Request.
-
-	See examples/tests/testformless.py and the /formless_redirector
-	on the example server to see how to do this.
-
-	* There is now livetest coverage of the formless examples,
-	including posting forms and checking erroneous conditions.
-
-2005-07-06  Donovan Preston <dp@xxxxxxxxxx>
-
-	* Major non-backwards-compatible improvements to livepage. Changes
-	are designed to avoid an uncollectable garbage problem which was
-	inherent in the previous design.
-
-	The livepage javascript glue now includes a global object named
-	"server". This object has a "handle" method which takes at least
-	one argument, a string indicating the name of the handler to
-	invoke on the server. When called by client-side javascript,
-	LivePage.locateHandler is invoked. locateHandler should return
-	a callable which will be called with a context indicating
-	which client is invoking the method, and any additional arguments
-	which were passed to server.handle, as strings.
-
-	The default implementation of LivePage.locateHandler looks for
-	a correspondingly named "handle_*" method. Using livepage is
-	now as simple as subclassing LivePage and providing handle_*
-	methods:
-
-		class Foo(LivePage):
-			def handle_bar(self, ctx, something):
-				print "something!", something
-
-	And calling server.handle in javascript:
-
-		<a onclick="server.handle('bar', 'here is something')">Click me</a>
-
-	The previous behavior of registering closures or other callables
-	as event handlers and then embedding them in the page is still
-	available using the IClientHandle.transient method. These one-
-	shot handlers are only invokable by the client once before being
-	garbage collected on the server. This makes it possible to
-	implement temporary dialog boxes and the like.
-
-2005-04-09  Tommi Virtanen <tv@xxxxxxxxxxxxxxxxx>
-
-	* Allow remembering ILogger to specify an alternate access logging
-	method.
-
-2005-04-06  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Added optional context argument to Page's renderString and
-    renderSynchronously methods. This provides a site-like context that is
-    useful when rendering multiple pages that need common remembered data.
-
-2005-3-23	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Releasing 0.4.1
-
-2005-3-22	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Releasing 0.4
-
-2005-02-22  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Added a "data" renderer (rend.data) that replaces the tag's content
-    with the current data. i.e. <p n:data="name" n:render="data">Foo Bar</p>.
-
-2005-02-17  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Added i18n - a gettext-like mechanism for marking translatable content
-    in an application's Python modules by wrapping a string in _(). Standard
-    Python gettext tools can be used to generate translation files.
-    
-    Translation happens during rendering and depends on a list of languages
-    found in the context. By default, the browser's preferred languages are
-    used. The default behaviour can be overridden by remembering the languages
-    as inevow.ILanguages in the context; allowing the language to be selected
-    from user preferences, for example.
-
-2005-02-08  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Extended the IDocFactory interface's load method to accept an optional
-    context.
-    
-    The current loaders do not use the context but future loaders may, i.e. one
-    that loads a localised template based on some language in the context.
-
-2005-01-01	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Rewrote LivePage quoting code to be much more correct; added many unit
-	tests. Some older livepage code must be changed to use the
-	livepage.literal object instead of passing normal strings to handler or
-	the LivePage client APIs.
-
-	* Added nevow.livepage module, LivePage, and ILivePage. The name liveevil
-	is deprecated.
-
-2004-12-23	Phil Frost <indigo@xxxxxxxxxxx>
-
-	* Added support for formless to return unicode objects. annotate.String
-	and subclasses (Text, Password, etc.) take a 'unicode' parameter to
-	enable unicode, like so:
-	
-	| annotate.String(unicode=True)
-
-	The coerced value will then be a unicode object.
-
-2004-12-16  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Added ObjectContainer - a data directive accessor for retrieving an
-    attribute of an object. If the current data in the context (the IData) is an
-    object you can register ObjectContainer as the IContainer adapter for the
-    object's class and Nevow will automatically look inside the object to fetch
-    the attribute.
-    
-    Note: ObjectContainer is *not* registered as the adapter for all object
-    types. You must explicitly register the adapter for application classes as
-    needed.
-    
-2004-12-08  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Applied the foom/mesozoic patch to make Page.remember work correctly and
-    without the hack. You can now use the method reliably to remember objects at
-    Page construction time or any other time before the PageContext is created.
-    The remembered objects can be found from the context in the usual way.
-    
-        class MyPage(rend.Page):
-        
-            def __init__(self, original):
-                # Make original available as ISomething(ctx) for later.
-                self.remember(original, ISomething)
-                rend.Page.__init__(self, original)
-    
-    * Added a similar remember method for NevowSite (and made a SiteContext
-    object the ultimate parent). You can know remember objects on the site and
-    have them available anywhere there's a context. A typical use case is making
-    some object store available to the site. This was often achieved using a
-    wrapper resource but now it's as easy as:
-    
-        store = makeStore()
-        site = NevowSite(rootResource)
-        site.remember(store, IStore)
-     
-2004-12-08  Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-    * Renamed URL.fromRequest to URL.fromContext. URL.fromRequest was a little
-    confusing - the URL it returned only included the segments that had been
-    consumed so far by the locateChild process and not the whole URL as the name
-    might suggest. Eventually, fromRequest will change to return a full URL but,
-    for now, its use is deprecated.
-    
-    * Renamed URL.parent to URL.parentdir. URL.parent() was logically equivalent
-    to '..' and so removed more segments than expected. URL.parent's use is now
-    deprecated and in a future release will be changed to remove exactly one
-    segment.
-    
-    * Improve URL.click to normalise any segments of '.' or '..'. Browsers
-    normalise the URL so, according to the docstring, click should too.
-
-2004-12-04	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Added macros! This is the same patch as the one I attached to my
-	"Macros in Nevow" mail, with the addition of an IMacroFactory,
-	a MacroFactory implementation on rend.Page, and macro directive
-	support. Macros are like render functions that take only the
-	context (no data parameter) and run only once during the lifetime
-	of a template loader. Here is an example of the difference between
-	a macro and a renderer:
-
-	>>> class Bumper(object):
-	...     num = 0
-	...     def bump(self):
-	...         self.num += 1
-	...         return self.num
-	... 
-	>>> staysTheSame = Bumper()
-	>>> changes = Bumper()
-	>>> from nevow import flat, tags, loaders
-	>>> document = loaders.stan([tags.invisible(macro=lambda ctx: staysTheSame.bump()), tags.invisible(render=lambda ctx, data: changes.bump())])
-	>>> flat.flatten(document)
-	'11'
-	>>> flat.flatten(document)
-	'12'
-	>>> flat.flatten(document)
-	'13'
-
-2004-12-01	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Added __iter__ to nevow.stan.slot to prevent infinite loops by
-	trying to do "for x in slot('foo'): print x".
-
-	* Added an IGettable adapter for nevow.stan.slot. It is now possible
-	to specify a slot as the data for a node, so the following example
-	would work:
-
-	from nevow import rend, tags
-
-	def fillEm(ctx, data):
-		ctx.fillSlots('value', [1, 2])
-		return ctx.tag
-
-	tags.html(render=fillEm)[
-		tags.ul(data=tags.slot('value'), render=rend.sequence)[
-			tags.li(pattern='item')[
-				str ]]]
-
-2004-09-26	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Added nevow.inevow.IQ interface, an interface for querying the
-	stan DOM. Eventually, this interface will contain APIs for doing
-	traditional DOM introspection, such as iterating children,
-	examining tag names, and examining attributes. For now, it contains
-	only the patternGenerator, onePattern, and allPatterns APIs. These
-	APIs have been deprecated from Context.
-
-	The main benefit of this is the ability to do:
-
-		IQ(loaders.xmlfile(...)).patternGenerator(...)
-
-	which would be nice for creating "pattern library" files containing
-	common skin idioms which can then be copied and used throughout
-	the app.
-
-2004-09-25	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Chatola received a major facelift, bringing it from cool demo
-	up to almost a full fledged web-based chat server. The helper API
-	LiveEvil.call(...) was added, which deprecates 
-	LiveEvil.sendScript(callJS(...))
-
-2004-09-23	Tommi Virtanen	<tv@xxxxxxxxxxxxxxxxx>
-
-	* Make guard.SessionWrapper store its URL  location in all requests it
-	passes to its children. This allows the children know where to post
-	the __login__ and __logout__ forms, even deep inside the resource
-	tree (fixes issue59).
-
-	* Guard now works as a non-root resource, with help from the above
-	change. Semantics of __login__ clarified in unit tests; if your guard
-	is at /foo, posting to /foo/__login__ redirects to /foo, and posting
-	to /foo/__login__/ redirects to /foo/. The two unit tests that failed
-	earlier now pass (with that change in their __login__ URLs).
-
-	* If URL-based sessions are used, login no longer loses session
-	information due to redirect to / (fixes issue56).
-
-2004-09-20	Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-	* Added URL.secure() method to make switching between http and 
-	https easier.
-
-2004-09-08	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Nevow now includes a very simple proof-of-concept WSGI Application 
-	implementation, and can be used with no Twisted dependency. Nevow can 
-	also be used to write CGIs, either using a simple CGI WSGI gateway 
-	(which supports URL traversal), or by using Page.renderString (which does not).
-
-	* Two new context interfaces, ICurrentSegments and IRemainingSegments, 
-	replace the need to examine the Request prepath and postpath attributes
-	directly.
-
-	* ISerializable is deprecated, and has been replaced with a simple 
-	Flattener registry. nevow.flat.registerFlattener and 
-	nevow.flat.getFlattener have been added to support this.
-
-2004-09-06	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* BACKWARDS INCOMPATIBLE CHANGE. Page.configurable_ *always* returns
-	self, and a new Page.configurable_original *always* returns
-	self.original. If you were relying on Page.configurable_'s
-	introspection behavior and are now getting errors about adapting
-	to IConfigurable, change your renderForms() calls to:
-
-		renderForms('original')
-
-	This causes Page.configurable_original to be invoked and
-	introspected for form rendering.
-
-2004-08-23	Donovan Preston <dp@xxxxxxxxxx>
-
-	* LivePage uses a simpler implementation strategy which requires
-	the browser to make one request per output event. As a result,
-	LivePage now works on Mozilla, Safari, and Internet Explorer Windows.
-
-2004-08-05	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Implemented support for IFoo(ctx) synonym syntax. It does the
-	same thing as ctx.locate(IFoo)
-
-	* Removed Resource Generators, a feature of NevowSite that nobody
-	used and wasn't really useful.
-
-	* Changed all inevow.IResource apis to take a Context object
-	where they used to take the request. Remembering objects in
-	PageContexts is now much easier, and fewer hacks are required to
-	build the context chain. The context chain now looks like:
-
-		SiteContext->RequestContext->PageContext(s)->WovenContext(s)
-
-2004-7-28	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Parameterize data_* methods in the same way as render_* methods.
-	Patch by k3mper.
-
-	For example, <div nevow:data="foo bar,baz" /> will cause 
-	data_foo(self, bar, baz) to be called with the strings "bar" and
-	"baz". This data method should return a callable taking ctx, data.
-	The return value of this callable will be remembered as IData at
-	this point in the context stack.
-
-	* Added list-slicing support to ListContainer. You may now use
-	list slicing syntax in a data directive in addition to a simple
-	index. For example:
-
-	def data_aList(self, ctx, data):
-		return ["Buckle", "My", "Shoe"]
-
-	<div nevow:data="aList">
-		<span nevow:data="1:-1" nevow:render="string" />
-	</div>
-
-	Will render as <div><span>My</span></div>
-
-2004-7-20	Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-	* Modified sax loader to retain doctypes, comments and xmlns attributes. 
-	It's now possible to build XHTML valid pages :).
-
-	xmlns attributes are always kept but there are options to ignore the doctype
-	and comment (at the request of foom, not sure why yet). Right now, the default
-	is to retain doctypes and comments but you can use the ignoreDocType and
-	ignoreComment args to the xml loaders and flatsax parse functions. This bit
-	may change.
-
-	* Add a URL -> IResource adapter that performs a HTTP redirect. URLs can then
-	be returned from locateChild().
-
-2004-06-07	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Added nevow.canvas, an experimental module similar to LivePage
-	which provides a Python server-side API for drawing arbitrary lines,
-	curves, and text in the browser. The implementation is socket-based
-	and asynchronous, so the server can issue drawing commands to the
-	client at any time.
-
-	The idea is to provide a server-side API to the Python programmer 
-	and shield them from implementation details, but the current
-	implementation uses a pre-compiled Flash movie (which never changes;
-	we are not generating Flash bytecodes). An implementation using SVG
-	or Safari's Canvas (nevow.canvas was written before the Safari Canvas
-	announcement) would be possible.
-
-2004-05-26	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Add URLOverlay.keep,  an API which lets you specify which query args 
-	will be carried on from the current page render into the new URL.
-
-2004-05-24	Matt Goodall <matt@xxxxxxxxxxxxxxx>
-
-	* Extracted Fragment from Page. Hopefully,  it will make it more obvious 
-	that embedding an object with data_ and render_ methods in a stan tree is
-	possible without using something as "heavy" as Page which is really meant
-	to be a web resource.
-
-2004-05-23	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Added some useful APIs to LiveEvil for manipulating the client-side
-	page:
-
-		- flt(stan): Flatten some stan, quoting apostrophes as
-		as appropriate for embedding in javascript
-
-		- set(what, to): Set the contents of the client-side node
-		with the id 'what' to the stan 'to'.
-
-		- append(where, what): Append the stan 'what' to the client-
-		side node with the id 'where'
-
-		- alert(what): Show an alert to the user with the text "what"
-
-2004-05-19	Jonathan Simms	<slyphon@xxxxxxxxxx>
-
-	* 0.2 released.
-
-2004-05-14	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* nevow.url.URLPath is renamed nevow.url.URL
-
-	* URL objects are now lazier about casting things to strings; they will 
-	keep track of path segments in a list and defer to the nevow rendering 
-	machinery to do the conversion; This means you can do things like 
-	here.child(deferred) or here.child(function)
-
-	* URL objects have a better api for manipulating query arguments
-	    - add(key, value=None) adds a new query arg at the end; the value may 
-	      be None if only a query key needs to be added
-	    - replace(key, value) removes all occurrences of 'key' and inserts a 
-              new (key, value) at the same location as the previous first 
-              occurrence of key
-	    - clear() clears all args
-
-2004-05-06	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Merged freeform-patterned branch, a large formless/freeform refactor.
-	It is now possible to influence the rendering of forms by providing
-	"patterns" to renderForms.
-
-	* Formless is now a top-level package. Freeform has been renamed
-	formless.webform. It should be possible to use formless outside
-	the context of nevow for doing things such as validating network
-	input based on method argument type annotations.
-
-	* TypedInterface, autocallable, and all the Typed subclasses are now
-	in the formless.annotate module.
-
-2004-04-30	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Created nevow.blocks, a module containing helpful code for working
-	around display: inline-block bugs in Mozilla.
-
-2004-04-27	Donovan Preston <dp@xxxxxxxxxx>
-
-	* IRenderer.__call__ was renamed IRenderer.rend to be more explicit.
-
-2004-04-21	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* Implemented nevow.flat.flatten and nevow.flat.precompile, functions
-	useful for using stan outside of the context of Page classes. Useful
-	for generating some XML or even raw text; use it any time you want
-	to convert a tree data structure into a contiguous string!
-
-        import random
-        import string
-         
-        from nevow import flat
-        
-        def letters(howMany):
-            for i in range(howMany):
-                    yield '    ', string.letters[i], '\n'
-        
-        def outline():
-            for i in range(5):
-                    yield i, '\n'
-                    yield letters(random.choice(range(7)))
-                    yield '\n'
-        
-        print flat.flatten(outline())
-
-2004-04-20	Donovan Preston	<dp@xxxxxxxxxx>
-
-	* guard sessions are no longer required to use formless.
-
-2004-04-19	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Implemented lazy context factories. It is now possible to register
-	an adapter against various *Context classes and an interface. They
-	will be invoked if *Context.locate(interface) is called.
-
-	Implemented a lazy ISession adapter against RequestContext, making
-	it possible to do ctx.locate(ISession), which is nice.
-
-2004-04-16	Donovan Preston <dp@xxxxxxxxxx>
-
-	* Added nevow.entities module, a module containing literals for all of
-	the valid XHTML entities. For example:
-
-		def render_nbsp(self, ctx, data):
-			from nevow import entities
-			return entities.nbsp
-

=== removed file 'Nevow/LICENSE'
--- Nevow/LICENSE	2005-10-14 17:36:24 +0000
+++ Nevow/LICENSE	1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-Copyright (c) 2004
-Donovan Preston
-Matt Goodall
-James Y. Knight
-Glyph Lefkowitz
-JP Calderone
-Allen Short
-Alex Levy
-Justin Johnson
-Christopher Armstrong
-Jonathan Simms
-Phil Frost
-Tommi Virtanen
-Michal Pasternak
-Valentino Volonghi
-
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

=== removed file 'Nevow/MANIFEST.in'
--- Nevow/MANIFEST.in	2010-04-06 11:05:45 +0000
+++ Nevow/MANIFEST.in	1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
-include ChangeLog
-include LICENSE
-include zomne.c
-include formless/freeform-default.css
-include nevow/Canvas.swf
-include nevow/athena_private/*.png
-include debian/*
-recursive-include twisted *.py
-recursive-include nevow *.css *.js
-include bin/nevow-xmlgettext 
-graft doc
-recursive-include examples *.css *.gif *.html *.jpg *.js *.py *.png *.tac *.mo *.po *.pot *.xml *.sql *.xul
-include examples/i18n/update-l10n
-include examples/files/words
-include examples/pastebin/data
-include examples/pastebin/static/robots.txt
-include examples/pastebin/TODO
-include examples/wsgi/README
-include extras/xhtml-nevow.rnc
-include nevow/Canvas.fla
-include nevow/canvas.as
-include win32/*
-prune */.svn 
-prune doc/html/*.html

=== removed file 'Nevow/NEWS.txt'
--- Nevow/NEWS.txt	2009-11-30 01:08:55 +0000
+++ Nevow/NEWS.txt	1970-01-01 00:00:00 +0000
@@ -1,244 +0,0 @@
-0.10.0 (2009-11-25):
-  - Added a system for CSS dependency declarations similar to the one in
-    Athena for JavaScript.
-  - Fix Athena's transport cleanup on page unload in Internet Explorer.
-  - Fix nit's results coloring in Internet Explorer.
-  - Added an API for declaring JavaScript classes which involves less
-    repetition than the existing Divmod.Class.subclass API.
-  - Added human-readable formatting for the new flattener's error reporting;
-    rendering error stacks will now display lines from Python code as well
-    as stan and XML templates.
-  - Override the setuptools sdist command with the original distutils sdist
-    command to avoid setuptools' version number transformation.
-  - Added support for default values for slots in XML templates.
-  - Fixed a problem with setup.py which led to css files not being
-    installed.
-  - Removed the old Chatola example and replaced it with a link to the new
-    chat example.
-  - Sped up some of the JavaScript dependency calculations.
-
-0.9.33 (2008-12-09):
-  - Add error handling to the integration between the old flattener
-    and the new flattener so that if the new flattener fails with an
-    exception or a Failure the error is propagated properly to the old
-    flattener which invoked it.
-  - Changed nit so that it doesn't use private `twistd` APIs and
-    instead just sets up a server and runs the reactor.  This makes
-    nit work with all versions of Twisted supported by Nevow.
-  - Changed Nevow's setup.py to use setuptools if setuptools is
-    available.  This has the user-facing consequence of installing
-    Nevow as an egg if setuptools is available at installation time
-    and of making Nevow installable using the `easy_install´ tool.
-  - TabbedPane naively set DOM attributes, making it unusable in
-    Internet Explorer 6 and 7.  Introduced a reliable method for
-    setting DOM node attributes, with name mangling, to address the
-    issue.
-
-0.9.32 (2008-08-12):
-  - A resource wrapper for on-the-fly gzip compression has been added.
-  - A twistd plugin, 'athena-widget', is now available for serving
-    single Athena widgets.
-  - Basic Athena support for Safari added.
-  - Added file name, line number, and column number information to
-    slots and tags parsed from XML files in order to make debugging
-    template/renderer interactions simpler.
-  - A context-free flattener has been added. Fragment and its
-    subclasses are now deprecated in favor of Element.
-  - Javascript classes derived from the tabbedpane class can now
-    override how tab selection is handled.
-
-0.9.31 (2008-02-06):
-  - Fixed Guard's request parameter save/restore feature to not
-    clobber request state after login succeeds when a session has
-    already been negotiated.
-  - Added a hook to nevow.guard.SessionWrapper which allows the
-    domain parameter of the session cookie to be specified.
-
-0.9.30 (2008-01-16):
-  - Change DeferredSerializer so that it passes failures from the
-    Deferred being serialized on to the Deferred returned by the
-    flattening function.  Without this behavior, the Deferred
-    returned by the flattening function is never fired when a
-    Deferred which fails is serialized.
-
-0.9.29 (2008-01-02):
-  - Prevent NevowSite.handleSegment from raising IndexError in certain
-    situations.
-  - Deprecated wsgi and zomne modules.
-
-0.9.28 (2007-12-10):
-  - Added two APIs to Athena, one for creating the string used as the id
-    attribute of the top node of a widget and one for creating the string
-    used as the id attribute of a node which had an id attribute in the
-    widget's template document.
-
-0.9.27 (2007-11-27):
-  - Unicode URLs now supported.
-
-0.9.26 (2007-11-02):
-  - url.URL.path now correctly escapes segments in the string it
-    evaluates to.
-  - inevow.IAthenaTransportable added, along with support for
-    serialization of custom types for server-to-client Athena
-    messages.
-  - Global client-side behaviour is now customizable via a client
-    PageWidget class.
-
-0.9.25 (2007-10-16):
-  - The Athena message queue implementation has been improved, fixing problems
-    masked by bugs in Firebug/YSlow.
-
-0.9.24 (2007-09-05):
-  - ESC key no longer disconnects Athena connections.
-  - Fixed a bug where URLs with quote characters will cause the Athena
-     connection to be lost.
-  - Fixed 'twistd athena-widget' to create a fresh widget instance for each
-    hit.
-
-0.9.23 (2007-08-01):
-  - Fixed install script to include all JavaScript files.
-
-0.9.22 (2007-07-06):
-  - Mock DOM implementation for easier browser testing added.
-  - JavaScript source files are now read using universal newlines mode.
-  - athena.AutoJSPackage now excludes dotfiles.
-  - url.URL now properly subclassable.
-  - User-agent parsing added to Athena, to detect known-unsupported browsers.
-
-0.9.21 (2007-06-06):
-  - Debug logging messages from the reliable message delivery queue
-    disabled.
-
-0.9.20 (2007-05-24):
-  - Athena now no longer holds more than one idle transport open to
-    the browser.
-
-0.9.19 (2007-04-27):
-  - Changed the styling of the progressbar to work on IE6.
-  - Athena.Widget.detach added, to allow widgets to cleanly be removed
-    from a page.
-  - Athena.Widget.callLater added, a wrapper around setTimeout and
-    clearTimeout.
-  - 'athena-widget' twistd command added, for starting a server which
-    serves a single LiveFragment or LiveElement.
-
-0.9.18 (2007-02-23):
-  - Athena 'connection lost' notification now styleable via the
-    'nevow-connection-lost' CSS class.
-  - The 'runjstests' script has been removed, now that JS tests can be
-    run with trial.
-
-0.9.17 (2006-12-08):
-  - More efficient JSON string parsing.
-  - Give FakeRequests a default status code of OK.  Accept all of
-    FakeRequest.__init__'s arguments in the __init__ of
-    AccumulatingFakeRequest.
-
-0.9.16 (2006-11-17):
-  - Updated nit to work with Twisted trunk.
-  - Athena module import caching has been fixed.
-
-0.9.15 (2006-11-08):
-  - Changed _LiveMixin rendering to be idempotent to support the case
-    where a transport hiccup causes a LiveFragment or LiveElement to
-    be sent to the browser multiple times.
-  - Improvements to the tests.
-
-0.9.14 (2006-10-31):
-  - Support code for running non-browser javascript tests has been added.
-  - Added a workaround for nodeById on widgets not yet added to the document in
-    IE.
-  - Athena will now invoke the nodeInserted method (if it exists) on a widget
-    that it instantiates statically.
-  - ID rewriting, similar to existing rewriting support for 'id' attributes,
-    has been added in 'for' and 'headers' attributes of 'label' and 'td'/'th'
-    elements, respectively.
-
-0.9.13 (2006-10-21):
-  - Adjust non-selected panes in tabbedpane to be further out of the viewport.
-  - Convert to using the Javascript module plugin system for Nevow-provided
-    modules.
-
-0.9.12 (2006-10-17):
-  - Added id rewriting for LiveElement and LiveFragment, such that id
-    attributes in a widget template are rewritten so that they are unique to
-    the widget instance. A client-side API, Nevow.Athena.Widget.nodeById(),
-    is provided to allow location of these nodes.
-
-0.9.11 (2006-10-10):
-  - Fixed dynamic widget instantiation in IE.
-  - Added support for correctly quoting the values of slots which are used as
-    attributes.
-
-0.9.10 (2006-10-05):
-  - Minor update to nevow.testutil.
-
-0.9.9 (2006-09-26):
-  - Several nit changes, including the addition of the "check" method to
-    Failure, and the addition of an "assertFailure" method.
-  - The ability to pass Python exceptions to Javascript has been added to
-    Athena.
-  - Dynamic module import has been added for the cases where it is necessary
-    to dynamically add a widget to an existing page.
-
-0.9.8 (2009-09-20):
-  - A bug in nit that caused it to fail if there were too many tests in a
-    test case, and swallow failures in some cases, has been fixed.
-  - Widgets can no longer be added to a page after render time using
-    Divmod.Runtime.Platform.{set,append}NodeContent.  Instead, they must be
-    added using Nevow.Athena.Widget.addChildWidgetFromWidgetInfo.
-
-0.9.7 (2009-09-12):
-  - Automatic Athena event handler registration is fixed for all supported browsers
-    and is no longer document-sensitive (ie, it works inside tables now).
-  - Nit has gained a new assertion method, assertIn.
-
-0.9.6 (2008-08-30):
-  - Fixed a bug in the IE implementation of the runtime.js node fetching
-    functions.
-
-0.9.5 (2006-08-22):
-  - Instance attributes can now be exposed to Athena with nevow.utils.Expose
-    and Expose.exposedMethodNames() no longer returns unexposed names.
-
-0.9.4 (2006-08-14):
-  - Added test method discovery to nit test cases, so multiple test methods
-    may be put in a single test case.
-  - use XPath for certain DOM traversals when available. This yields
-    significant speedups on Opera.
-  - Made Divmod.Runtime.Platform.getAttribute deal with IE attribute
-    name-mangling properly.
-  - Javascript logging is now done in Firebug 0.4 style rather than 0.3.
-  - Some cases where Deferred-returning render methods raised
-    exceptions or buried failures were fixed.
-  - Removed MochiKit. The pieces Nevow depends on have been moved to
-    Divmod.Base in nevow/base.js.
-  - Various doc fixes.
-
-0.9.3 (2006-07-17):
-  - Page rendering now supports preprocessors.
-
-0.9.2 (2006-07-08):
-  - Fixes to the typeahead demo.
-  - Elements are now automatically serialized by json, just like Fragments.
-
-0.9.1 (2006-07-05):
-  - Made nevow.athena.expose the mandatory means of publishing a method to
-    the browser.  The allowedMethods dictionary will no longer be respected.
-  - Added nevow.page.Element and nevow.athena.LiveElement: these are
-    preferred over nevow.rend.Fragment and nevow.athena.LiveFragment for all
-    new development.
-
-0.9.0 (2006-06-12):
-  - Fixed a bug where nested fragment sending rarely worked.
-  - Sending large strings in Athena arguments and results is now faster due to
-    less unnecessary unicode character quoting.
-  - Module objects are now automatically created for all Athena imports.
-  - Better error reporting for fragments which are rendered without a parent.
-  - Disconnect notifiers in Athena pages will no longer clobber each other.
-  - Many optimizations to javascript initialization.
-  - Javascript packages are now defined with less boilerplate: a filesystem
-    convention similar to Python's for module naming, plus one declaration in a
-    Nevow plugin which indicates the directory, rather than a declaration for
-    each module.
-  - Updated README to refer to Athena rather than LivePage

=== removed file 'Nevow/README'
--- Nevow/README	2006-06-14 11:54:41 +0000
+++ Nevow/README	1970-01-01 00:00:00 +0000
@@ -1,69 +0,0 @@
-
-Divmod Nevow
-============
-
-Divmod Nevow is a web application construction kit written in Python. It is
-designed to allow the programmer to express as much of the view logic as
-desired in Python, and includes a pure Python XML expression syntax named stan
-to facilitate this. However it also provides rich support for designer-edited
-templates, using a very small XML attribute language to provide bi-directional
-template manipulation capability.
-
-Nevow also includes Divmod Athena, a "two way web" or "`COMET`_"
-implementation, providing a two-way bridge between Python code on the server
-and JavaScript code on the client.  Modular portions of a page, known as
-"athena fragments" in the server python and "athena widgets" in the client
-javascript, can be individually developed and placed on any Nevow-rendered page
-with a small template renderer.  Athena abstracts the intricacies of HTTP
-communication, session security, and browser-specific bugs behind a simple
-remote-method-call interface, where individual widgets or fragments can call
-remote methods on their client or server peer with one method: "callRemote".
-
-Installation
-------------
-
-Before installing Nevow, you should install `Twisted`_, unless you are going to
-write very simple CGI applications. Nevow integrates fully with the twisted.web
-server providing easy deployment.
-
-Nevow uses the standard distutils method of installation::
-
-    python setup.py install
-
-If you do not have Twisted installed, you can run a subset of the tests using
-the test.py script. If you have twisted installed, the test.py script will
-issue the following trial command::
-
-    trial -v nevow.test formless.test
-
-.. _`Twisted`: http://twistedmatrix.com/
-
-Documentation
--------------
-
-More detailed introductory documentation is available in the doc/ directory,
-along with the beginnings of a reference manual. A large number of examples are
-available in the examples/ directory. These examples require Twisted to run. A
-tac file (twisted application configuration) can be started by invoking twistd,
-the twisted daemon::
-
-    twistd -noy foo.tac
-
-More Information
-----------------
-
-Nevow is an active project, and many new bugfixes and features are committed to
-the Nevow SVN repository. Information about Nevow commits is available by
-subscribing to the `Nevow commits`_ mailing list. The Nevow SVN repository can
-be checked out using::
-
-  svn co http://divmod.org/svn/Divmod/trunk/Nevow Nevow
-
-Discussion of Nevow occurs on the `twisted.web mailing list`_. The Nevow
-developers are also often available for real-time help on the `#twisted.web
-channel`_ on irc.freenode.net.
-
-.. _`Nevow commits`: http://divmod.org/users/mailman.twistd/listinfo/nevow-commits
-.. _`twisted.web mailing list`: http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
-.. _`#twisted.web channel`: irc://irc.freenode.net/#twisted.web
-.. _`COMET`: http://alex.dojotoolkit.org/?p=545

=== removed directory 'Nevow/benchmarks'
=== removed file 'Nevow/benchmarks/fragmentvselement.py'
--- Nevow/benchmarks/fragmentvselement.py	2008-05-22 18:46:50 +0000
+++ Nevow/benchmarks/fragmentvselement.py	1970-01-01 00:00:00 +0000
@@ -1,147 +0,0 @@
-
-from twisted.internet import reactor
-from twisted.internet.defer import succeed
-
-from nevow.appserver import NevowSite
-
-from nevow.rend import Page, Fragment
-from nevow.page import Element, renderer
-from nevow.loaders import stan
-from nevow.tags import directive, div, span
-
-
-class Static:
-    docFactory = stan("Hello, world.  " * 100)
-
-
-
-class StaticFragment(Static, Fragment):
-    pass
-
-
-
-class StaticElement(Static, Element):
-    pass
-
-
-
-class Tiny:
-    docFactory = stan(div(render=directive("foo")))
-
-
-
-class TinyFragment(Tiny, Fragment):
-    def render_foo(self, ctx, data):
-        return ctx.tag[span["result"]]
-
-
-
-class TinyElement(Tiny, Element):
-    def foo(self, request, tag):
-        return tag[span["result"]]
-    renderer(foo)
-
-
-
-class Huge:
-    docFactory = stan(div[[
-        div(render=directive("foo"))
-        for x in range(100)]])
-
-
-
-class HugeFragment(Huge, Fragment):
-    def render_foo(self, ctx, data):
-        return ctx.tag[span["Hello, ", "world", "!"]]
-
-
-
-class HugeElement(Huge, Element):
-    def foo(self, request, tag):
-        return tag[span["Hello, ", "world", "!"]]
-    renderer(foo)
-
-
-
-class Nested:
-    docFactory = stan(div(render=directive("foo")))
-
-    def __init__(self, count=6):
-        self.count = count
-
-
-
-class NestedFragment(Nested, Fragment):
-    def render_foo(self, ctx, data):
-        if self.count:
-            return span[NestedFragment(self.count - 1)]
-        return ctx.tag["Hello"]
-
-
-
-class NestedElement(Nested, Element):
-    def foo(self, request, tag):
-        if self.count:
-            return span[NestedFragment(self.count - 1)]
-        return tag["Hello"]
-    renderer(foo)
-
-
-
-class Deferred:
-    docFactory = stan(div(render=directive('foo')))
-
-
-
-class DeferredFragment(Deferred, Fragment):
-    def render_foo(self, ctx, data):
-        return ctx.tag[succeed("foo")]
-
-
-
-class DeferredElement(Deferred, Element):
-    def foo(self, request, tag):
-        return tag[succeed("foo")]
-    renderer(foo)
-
-
-
-class Compare(Page):
-    def __init__(self, fragment, element):
-        self.fragment = fragment
-        self.element = element
-
-    def child_fragment(self, ctx):
-        return Page(docFactory=stan(self.fragment))
-
-
-    def child_element(self, ctx):
-        return Page(docFactory=stan(self.element))
-
-
-
-class Root(Page):
-    def child_static(self, ctx):
-        return Compare(StaticFragment(), StaticElement())
-
-
-    def child_tiny(self, ctx):
-        return Compare(TinyFragment(), TinyElement())
-
-
-    def child_huge(self, ctx):
-        return Compare(HugeFragment(), HugeElement())
-
-
-    def child_nested(self, ctx):
-        return Compare(NestedFragment(), NestedElement())
-
-
-    def child_deferred(self, ctx):
-        return Compare(DeferredFragment(), DeferredElement())
-
-
-
-if __name__ == '__main__':
-    reactor.listenTCP(8080, NevowSite(Root()))
-    reactor.run()

=== removed file 'Nevow/benchmarks/json_string_tokenizer.py'
--- Nevow/benchmarks/json_string_tokenizer.py	2006-11-24 23:15:26 +0000
+++ Nevow/benchmarks/json_string_tokenizer.py	1970-01-01 00:00:00 +0000
@@ -1,48 +0,0 @@
-
-from time import time
-
-from twisted.python.usage import Options
-
-from nevow.json import serialize, parse
-
-if __name__ == '__main__':
-    from json_string_tokenizer import main
-    raise SystemExit(main())
-
-
-
-class StringTokenizer(Options):
-    optParameters = [
-        ('iterations', 'i', '1000', 'Number of iterations for which to run the benchmark.'),
-        ('scale', 's', '100', 'Factor determining the overall input size.')]
-
-
-    def postOptions(self):
-        self['iterations'] = int(self['iterations'])
-        self['scale'] = int(self['scale'])
-
-
-BASE = u'Hello, world.  "Quotes".'
-def benchmark(iterations, scale):
-    """
-    Deserialize a string C{iterations} times.  Make the string longer based
-    on C{scale}.
-
-    Prints the mean time per parse call.
-    """
-    s = serialize(BASE * scale)
-    before = time()
-    for i in xrange(iterations):
-        parse(s)
-    after = time()
-    print (after - before) / iterations, 'per call'
-
-
-
-def main(args=None):
-    """
-    Benchmark nevow.json string parsing, maybe with some parameters.
-    """
-    options = StringTokenizer()
-    options.parseOptions(args)
-    benchmark(options['iterations'], options['scale'])

=== removed directory 'Nevow/bin'
=== removed file 'Nevow/bin/nevow-xmlgettext'
--- Nevow/bin/nevow-xmlgettext	2005-10-14 17:36:24 +0000
+++ Nevow/bin/nevow-xmlgettext	1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-#!/usr/bin/env python
-from nevow.scripts.xmlgettext import run
-run()

=== removed file 'Nevow/bin/nit'
--- Nevow/bin/nit	2006-11-17 00:50:34 +0000
+++ Nevow/bin/nit	1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-#!/usr/bin/python
-from nevow.scripts.nit import run
-run()

=== removed directory 'Nevow/debian'
=== removed file 'Nevow/debian/changelog'
--- Nevow/debian/changelog	2005-11-06 18:46:50 +0000
+++ Nevow/debian/changelog	1970-01-01 00:00:00 +0000
@@ -1,56 +0,0 @@
-nevow (0.6.0-1.snapshot) unstable; urgency=low
-
-  * SVN snapshot.
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Sun,  6 Nov 2005 20:45:27 +0200
-
-nevow (0.6.0-1) unstable; urgency=low
-
-  * New upstream version. (Closes: #336027)
-  * Acknowledge NMU (Closes: #319230), but please be more careful in the
-    future; no NMU patch was sent to BTS
-  * Remove setupcommon.pyc when cleaning, or dpkg-source will see a binary
-    file content change.
-  * Run unit tests when building.
-  * Clean build tree, distutils fails to remove all of it.
-  * Change priority to extra, as twisted is extra and nevow depends on it.
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Sun,  6 Nov 2005 20:26:39 +0200
-
-nevow (0.4.1-1.1) unstable; urgency=low
-
-  * NMU
-  * Add missing build depends in python2.4-dev (Closes: #319230)
-  * lintian error: fix package description indent for list items.
-
- -- Bastian Kleineidam <calvin@xxxxxxxxxx>  Sat, 13 Aug 2005 18:48:20 +0200
-
-nevow (0.4.1-1) unstable; urgency=low
-
-  * New upstream version.
-  * Python 2.4 support.
-  * Not using upstream tarball as it is too broken compared to
-    SVN tag; specifically it is missing nevow/Canvas.fla, which
-    is considered source code.
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Mon, 27 Jun 2005 15:35:57 +0200
-
-nevow (0.3.0-1) unstable; urgency=low
-
-  * New upstream version.
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Thu, 30 Sep 2004 12:12:44 +0300
-
-nevow (0.2.0-2) unstable; urgency=low
-
-  * Build-depend on both python2.3-dev and python-dev, it seems that is
-    what cdbs wants. (Closes: #257911)
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Tue, 13 Jul 2004 16:39:17 +0300
-
-nevow (0.2.0-1) unstable; urgency=low
-
-  * Initial Release.
-
- -- Tommi Virtanen <tv@xxxxxxxxxx>  Tue, 29 Jun 2004 10:26:36 +0300
-

=== removed file 'Nevow/debian/compat'
--- Nevow/debian/compat	2005-10-14 17:36:24 +0000
+++ Nevow/debian/compat	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-4

=== removed file 'Nevow/debian/control'
--- Nevow/debian/control	2005-11-06 18:46:50 +0000
+++ Nevow/debian/control	1970-01-01 00:00:00 +0000
@@ -1,64 +0,0 @@
-Source: nevow
-Section: devel
-Priority: extra
-Maintainer: Tommi Virtanen <tv@xxxxxxxxxx>
-Standards-Version: 3.6.2
-Build-Depends-Indep: python-dev, python2.3-dev, python2.4-dev, cdbs, debhelper (>= 4.1.68)
-
-Package: python-nevow
-Architecture: all
-Depends: python (>= 2.3), python (<< 2.4), python2.3-nevow
-Description: Web application templating system for Python and Twisted
- This is a dummy package that only depends on python2.3-nevow.
-
-Package: python2.3-nevow
-Architecture: all
-Depends: python2.3, python2.3-twisted
-Description: Web application templating system for Python and Twisted
- Nevow's main focus is on separating the HTML template from both the
- business logic and the display logic, while allowing the programmer
- to write pure Python code as much as possible. It separates your code
- into 'data' and 'render' functions, a simplified implementation of
- traditional MVC. It has various parts which can be used individually
- or as a whole, integrated web solution:
- .
-  - XHTML templates: contain no programming logic, only nodes tagged
-    with nevow attributes
-  - data/render methods: simplified MVC
-  - stan: An s-expression-like syntax for expressing xml in pure python
-  - formless: For describing the types of objects which may be passed
-    to methods of your classes, validating and coercing string input from
-    either web or command-line sources, and calling your methods
-    automatically once validation passes
-  - freeform: For rendering web forms based on formless type
-    descriptions, accepting form posts and passing them to formless
-    validators, and rendering error forms in the event validation fails
-  - livepage: Cross-browser JavaScript glue for sending client side
-    events to the server and server side events to the client after the
-    page has loaded, without causing the entire page to refresh
-
-Package: python2.4-nevow
-Architecture: all
-Depends: python2.4, python2.4-twisted
-Description: Web application templating system for Python and Twisted
- Nevow's main focus is on separating the HTML template from both the
- business logic and the display logic, while allowing the programmer
- to write pure Python code as much as possible. It separates your code
- into 'data' and 'render' functions, a simplified implementation of
- traditional MVC. It has various parts which can be used individually
- or as a whole, integrated web solution:
- .
-  - XHTML templates: contain no programming logic, only nodes tagged
-    with nevow attributes
-  - data/render methods: simplified MVC
-  - stan: An s-expression-like syntax for expressing xml in pure python
-  - formless: For describing the types of objects which may be passed
-    to methods of your classes, validating and coercing string input from
-    either web or command-line sources, and calling your methods
-    automatically once validation passes
-  - freeform: For rendering web forms based on formless type
-    descriptions, accepting form posts and passing them to formless
-    validators, and rendering error forms in the event validation fails
-  - livepage: Cross-browser JavaScript glue for sending client side
-    events to the server and server side events to the client after the
-    page has loaded, without causing the entire page to refresh

=== removed file 'Nevow/debian/copyright'
--- Nevow/debian/copyright	2005-10-14 17:36:24 +0000
+++ Nevow/debian/copyright	1970-01-01 00:00:00 +0000
@@ -1,10 +0,0 @@
-This package was debianized by Tommi Virtanen tv@xxxxxxxxxx on
-Sun, 28 Mar 2004 16:44:10 +0300.
-
-It was originally downloaded from http://www.divmod.org/Home/Projects/Nevow/
-
-Upstream Author: Donovan Preston et al <dp@xxxxxxxxxx>
-
-Copyright:
-
-# See the file LICENSE at the top of the source tree.

=== removed file 'Nevow/debian/python2.3-nevow.manpages'
--- Nevow/debian/python2.3-nevow.manpages	2005-10-14 17:36:24 +0000
+++ Nevow/debian/python2.3-nevow.manpages	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-doc/man/nevow-xmlgettext.1

=== removed file 'Nevow/debian/python2.4-nevow.manpages'
--- Nevow/debian/python2.4-nevow.manpages	2005-10-14 17:36:24 +0000
+++ Nevow/debian/python2.4-nevow.manpages	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-doc/man/nevow-xmlgettext.1

=== removed file 'Nevow/debian/rules'
--- Nevow/debian/rules	2005-11-06 18:46:50 +0000
+++ Nevow/debian/rules	1970-01-01 00:00:00 +0000
@@ -1,71 +0,0 @@
-#!/usr/bin/make -f
-# -*- mode: makefile; coding: utf-8 -*-
-# Copyright © 2002,2003 Colin Walters <walters@xxxxxxxxxx>
-
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/python-distutils.mk
-
-DEB_INSTALL_DOCS_python2.3-nevow := doc/*
-DEB_INSTALL_EXAMPLES_python2.3-nevow := examples/*
-DEB_INSTALL_DOCS_python2.4-nevow := doc/*
-DEB_INSTALL_EXAMPLES_python2.4-nevow := examples/*
-DEB_DH_ALWAYS_EXCLUDE := .svn
-
-docdir = debian/$(1)/usr/share/doc/$(1)
-binary-post-install/%::
-	grep -v '^# See the file LICENSE' \
-		'$(call docdir,$*)/copyright' \
-		>'$(call docdir,$*)/copyright.tmp'
-	cat LICENSE \
-		>>'$(call docdir,$*)/copyright.tmp'
-	mv \
-		'$(call docdir,$*)/copyright.tmp' \
-		'$(call docdir,$*)/copyright'
-
-# see http://bugs.debian.org/295906
-cdbs_python_ver = $(filter-out -%,$(subst -, -,$(patsubst python%,%,$(cdbs_curpkg))))
-
-$(patsubst %,binary-post-install/%,$(DEB_PYTHON_REAL_LIB_PACKAGES)):: binary-post-install/%:
-	set -e; for file in debian/$(cdbs_curpkg)/usr/bin/*; do \
-		sed '1s|.*|#!/usr/bin/python$(cdbs_python_ver)|' $$file >\
-			"$${file}$(cdbs_python_ver)";\
-		rm -- "$$file";\
-		chmod 755 "$${file}$(cdbs_python_ver)";\
-		mv "debian/$(cdbs_curpkg)/usr/share/man/man1/$$(basename "$$file").1" \
-			"debian/$(cdbs_curpkg)/usr/share/man/man1/$$(basename "$$file")$(cdbs_python_ver).1";\
-	done
-
-binary-post-install/python2.3-nevow::
-	set -e; for file in debian/$(cdbs_curpkg)/usr/bin/*;\
-		do target="$$(echo "$$file" | sed 's/$(cdbs_python_ver)$$//')";\
-		ln -s "$$(basename "$$file")" "$$target";\
-		manname="$$(basename "$$target").1.gz";\
-		ln -s "$$(basename "$$file").1.gz" \
-			"debian/$(cdbs_curpkg)/usr/share/man/man1/$$manname";\
-	done
-
-clean::
-	rm -f setupcommon.pyc
-
-
-ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
-TRIAL=trial$(cdbs_python_ver)
-TOPMODULES:=nevow formless
-$(patsubst %,binary-post-install/%,$(DEB_PYTHON_REAL_LIB_PACKAGES)):: binary-post-install/%:
-	PYTHONPATH='debian/$(cdbs_curpkg)/usr/lib/python$(cdbs_python_ver)/site-packages/' \
-		'$(TRIAL)' --bwverbose -R $(TOPMODULES)
-
-	# Importing the modules generates .pyc files, and dh_python (which
-	# normally cleans them) has already been run. Remove them manually.
-	find 'debian/$(cdbs_curpkg)' -name '*.py[co]' -print0 \
-	| xargs -0 rm -f --
-endif
-
-clean::
-	rm -rf _trial_temp
-
-
-# distutils is sloppy and only cleans with the default python version,
-# leaving all the other stuff still in build
-clean::
-	rm -rf build

=== removed directory 'Nevow/doc'
=== removed file 'Nevow/doc/README'
--- Nevow/doc/README	2010-04-06 11:05:45 +0000
+++ Nevow/doc/README	1970-01-01 00:00:00 +0000
@@ -1,5 +0,0 @@
-This is Nevow's documentation.  The preferred format is Lore XHTML.  You can
-generate the pretty version of the documentation with by running the
-following command in the howto directory:
-
-    lore

=== removed directory 'Nevow/doc/howto'
=== removed directory 'Nevow/doc/howto/chattutorial'
=== removed file 'Nevow/doc/howto/chattutorial/concepts.xhtml'
--- Nevow/doc/howto/chattutorial/concepts.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/concepts.xhtml	1970-01-01 00:00:00 +0000
@@ -1,136 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Concepts</title>
-  </head>
-<body>
-
-<h1>Concepts</h1>
-
-<h2>Servers and Clients</h2>
-
-<p>COMET applications can seem an almost impenetrable mess when one is first
-learning about them, much like when writing event-based desktop
-applications. However, there are some basic concepts that we can emphasize now
-to circumvent or alleviate most of the confusion.</p>
-
-<p>In principle, the problem is very simple:</p>
-<ul>
-<li>We want out users to interact with a <q>web page</q> with out having to refresh
-the page, and we want new data and/or views to be rendered in response to our
-users' actions;</li>
-<li>We want the ability to push updates to user pages from the server to the
-browser, when the server has new data or views that are ready.</li>
-</ul>
-
-<p>As usual, the implementation of the solution is much more complicated than
-the statement of the problem, but hopefully the way that we have designed
-Athena will hide those implementation details while providing powerful tools to
-build the applications you envision. So, let's take a look at what you need to
-know about servers and clients when building Athena web applications.</p>
-
-<p>It is crucial that one understands that when we write Athena applications,
-we are doing a few different things:</p>
-<ul>
-<li>Writing server code in Python that performs server actions</li>
-<li>Writing server code in Python that makes remote calls to the browser</li>
-<li>Writing browser code in JavaScript that performs browser actions</li>
-<li>Writing browser code in JavaScript that makes remote calls to the server</li>
-</ul>
-
-<p>Since server-on-server and client-on-client are rather common place and
-generally well understood, we will ignore those for now. As the other two
-are the focus of AJAX/COMET and thus also the primary domain of Athena, that is
-what we will discuss below.</p>
-
-<p>Browser-to-server calls are made by Athena via the now-famous
- XMLHttpRequest. Server-to-browser calls are opened by the browser ahead of
-time, and when the server is ready, the data is sent to the browser via that
-connection.</p>
-
-<h2>JavaScript: Making Calls to the Server</h2>
-
-<p>When creating the JavaScript portion of our applications, we subclass
-an Athena JavaScript widget, which has a method named
-<code>callRemote()</code>. By utilizing this method, we can send messages from
-our JavaScript client to the server (as long as the method we call exists in
-the server code).</p>
-
-<p>For example, in the chat application we will be building in this series
-of tutorials, we will have a JavaScript class called <code>ChatterBox</code> with a
-<code>say()</code> method, like the following:</p>
-<pre>
-function say(self, msg) {
-    self.callRemote("say", msg);
-    // Now show the text to the user somehow...
-}
-</pre>
-<p>This will make a remote call to the Python server code, executing the
-<code>say()</code> method and passing the <code>msg</code> variable as a
-parameter.</p>
-
-<p>In Athena, the relationship between the browser code and the server code is
-established by declaring the JavaScript module in the Python server code, in
-the following manner:</p>
-<pre class="python">
-class ChatterBox(LiveElement):
-    jsClass = u'ChatThing.ChatterBox'
-</pre>
-<p>Additionally, in order for the JS to be able to make a call to remote Python
-code, the Python method has to be exposed.  This is a security feature,
-implemented to ensure the JavaScript code can only call Python methods that
-have been specifically marked as safe.  Appropriately enough, this is done in
-your Python class with the <code>expose</code> decorator:</p>
-
-<pre class="python">
-def say(self, text):
-    for chatter in chatRoom:
-        chatter.youHeardSomething(text)
-say = expose(say)
-</pre>
-
-<h2>Python: Making Calls to the Browser</h2>
-
-<p>Now what about the COMET side of the equation? If we want our server to
-update data in the browser, we need to be able to call JavaScript code from our
-Python server. We use a similar Python method as the JavaScript one (when
-making calls from the browser to the server), acquired when our Python class
-inherited from <code>nevow.athena.LiveElement</code>:</p>
-
-<pre class="python">
-def hear(self, sayer, text):
-    self.callRemote("hear", sayer, text)
-</pre>
-
-<p>In order for this call to work, we need to have the <code>hear()</code>
-method defined in our <code>ChatterBox</code> JavaScript class, and that will
-look like this:</p>
-<pre>
-function hear(self, avatarName, text) {
-    // Here, you'd show the user some text.
-}
-</pre>
-
-<p>Unlike on our Python classes, no special annotations need to be made on the
-JavaScript side: all JavaScript methods on browser-side Widget objects are
-allowed to be called by the server. If you've sent code to the browser, you've
-already forfeited the ability to control when it's called. There wouldn't be a
-point to limiting the server's rights to run its code when the user can freely
-run it herself.</p>
-
-<h2>Summary</h2>
-
-<p>With the samples above, you should have a growing sense of how Python and
-JavaScript interact as servers and clients in the world of Athena. In
-particular, you should be getting a sense of how JavaScript and Python will be
-interacting in your Athena applications.</p>
-
-<p>This has just been a taste of Athena with a few peeks into the code we
-will be writing. We will cover these topics in greater detail in the following
-pages, within the context of creating a functional Athena application,
-complete with step-by-step instructions and rationale.</p>
-
-</body>
-</html>

=== removed file 'Nevow/doc/howto/chattutorial/env.xhtml'
--- Nevow/doc/howto/chattutorial/env.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/env.xhtml	1970-01-01 00:00:00 +0000
@@ -1,122 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Setting up an Environment</title>
-  </head>
-<body>
-
-<h1>Setting up an Environment</h1>
-
-<h2>Install</h2>
-
-To run this tutorial, you need to have nevow available to python and
-you'll need the files in the doc/howto tree. You don't even have to
-install nevow; the examples will run within the source tree.
-
-
-<h3>Combinator: The Divmod Way</h3>
-
-<p>Using SVN
-with <a href="http://divmod.org/trac/wiki/DivmodCombinator";>Combinator</a>
-is the best way to try out the example code in-place (and hop between
-other SVN branches in the future). This is how we develop and test our
-applications at Divmod. If you have a system installation of Twisted
-that you don't want to update or interfere with, you can use this
-method without installing anything.
-</p>
-
-<ol>
-
-<li>Create a projects directory or change to some other test directory
-of your choice:
-<pre class="shell">
-$ mkdir ~/Projects
-$ cd ~/Projects
-</pre>
-</li>
-
-
-<li>If you don't have the
-<a href="http://twistedmatrix.com/trac/";>twisted library</a>, check it out now:
-<pre class="shell">
-$ svn co svn://svn.twistedmatrix.com/svn/Twisted/trunk Twisted/trunk
-</pre>
-</li>
-
-<li>Then get Combinator and Nevow (and the rest of Divmod). See the
-<a href="http://divmod.org/trac/wiki/CombinatorTutorial";>Combinator
-Tutorial</a> for more about these special checkout paths.
-<pre class="shell">
-$ svn co http://divmod.org/svn/Divmod/trunk Divmod/trunk
-</pre>
-</li>
-
-<li>Set up the Combinator environment in this shell. You'll need this
-step in any future test shells since it adjusts PATH and PYTHONPATH:
-<pre class="shell">
-$ eval `python Divmod/trunk/Combinator/environment.py`
-(some "link:" lines are normal)
-</pre>
-</li>
-
-<li>Register both the Twisted and Divmod (and thus Nevow+Athena) codebases with
-Combinator:
-<pre class="shell">
-$ chbranch Twisted trunk
-$ chbranch Divmod trunk
-</pre>
-</li>
-
-<li>You can check to see if your environment is ready to go by running the
-tutorial tests (from any directory, after executing the previous command):
-<pre class="shell">
-$ trial nevow.test.test_howtolistings
-</pre>
-If they all pass, you're ready to begin the tutorial.
-</li>
-</ol>
-
-
-
-<h3>Standard distutils Installation</h3>
-
-<p>If you don't want to manage branches and environments with
-Combinator, you can install our code in the
-standard <code>site-packages</code> directory. You'll still need the
-source tree so you can use the files in doc/howto.</p>
-
-<p>For those that would prefer the <q>old way,</q> here's how you do it:</p>
-
-<ol>
-
-<li>Create a projects directory:
-<pre class="shell">
-$ mkdir ~/Projects
-$ cd ~/Projects
-</pre>
-</li>
-
-<li>Checkout and install the latest Twisted:
-<pre class="shell">
-$ svn co svn://svn.twistedmatrix.com/svn/Twisted/trunk Twisted
-$ cd Twisted
-$ sudo python setup.py install
-$ cd ../
-</pre>
-</li>
-
-<li>Checkout and install Nevow:
-<pre class="shell">
-$ svn co http://divmod.org/svn/Divmod/trunk/Nevow Nevow
-$ cd Nevow
-$ sudo python setup.py install
-$ cd ../
-</pre>
-</li>
-
-</ol>
-
-</body>
-</html>

=== removed file 'Nevow/doc/howto/chattutorial/index.xhtml'
--- Nevow/doc/howto/chattutorial/index.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/index.xhtml	1970-01-01 00:00:00 +0000
@@ -1,56 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Nevow Athena from Scratch, or The Evolution of a Chat Application</title>
-  </head>
-<body>
-
-  <h1>Nevow Athena from Scratch, or The Evolution of a Chat Application</h1>
-
-<h2>The <q>Chat Tutorial</q> Series</h2>
-
-<p>
-Athena is the JavaScript engine behind Nevow, providing a great deal of
-resources and power to the developer of asynchronous web applications. To
-demonstrate this, we are using a web chat application as our primary example
-in this tutorial. The tutorial is split into several parts: a few introductory
-pages and then independent (but related) tutorials of increasing complexity.
-</p>
-
-<ol>
-  <li>Basics
-    <ul>
-      <li><a href="intro.xhtml">Introduction</a></li>
-      <li><a href="concepts.xhtml">Concepts of Athena: AJAX, COMET, and Python</a></li>
-      <li><a href="env.xhtml">Setting Up the Tutorial Environment and Running Tutorial Source Code</a></li>
-    </ul>
-  </li>
-  <li><a href="part00/index.xhtml">Toy <q>Echo</q> Application </a></li>
-  <li><a href="part01/index.xhtml">Simple Chat and Two-Way Communications</a></li>
-</ol>
-
-<h2>History</h2>
-<p>
-Nevow's predecessor was Woven (and prior to that, WebMVC). Woven had something
-called <code>LivePage</code> that was doing DOM manipulation as far back as
-2002. In early 2003, Woven event handlers supported sending JavaScript back to
-the user's browser, allowing pages to be updated in response to user-generated
-events. The earliest publicly visible revisions of Nevow made use of XHR
-(XMLHttpRequest) in early 2004. These facts are notable because Nevow was using
-AJAX a year before the term was coined in 2005 and had working code in 2002 and
-2003 that predated Netscape publishing articles on what they called <q>Inner
-Browsing</q> where all navigation takes place withing a single page.
-</p>
-
-<p>
-Again taking the lead, Athena offers features which developers cannot find
-elsewhere. In this series, we attempt to expose these excellent qualities
-to the world of application
-developers.
-</p>
-
-</body>
-</html>
-

=== removed file 'Nevow/doc/howto/chattutorial/intro.xhtml'
--- Nevow/doc/howto/chattutorial/intro.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/intro.xhtml	1970-01-01 00:00:00 +0000
@@ -1,106 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Introduction</title>
-  </head>
-<body>
-
-<h1>Introduction</h1>
-
-<h2>Who is this tutorial for?</h2>
-
-<p>This tutorial is for people who want to build interactive client-server
-functionality where a web-browser is the client.  It will show you how to build
-a live, interactive chat application that requires nothing more than a web
-browser that supports JavaScript.</p>
-
-<p>The interesting thing about a chat application, which shows why Nevow Athena
-is special, is that it involves two-way communication.  In other words, it
-involves not only the recently-popular AJAX (the web browser sending commands
-to the server without loading a new page) but also the trickier and, in our
-opinion, somewhat cooler technique known as COMET (the web server
-sending commands to the <em>browser</em>).</p>
-
-<h2>Who is this tutorial <em>not</em> for?</h2>
-
-<p>Nevow Athena is <em>not</em> for people who want a normal web application
-framework.  If you want one of those, you should use
-non-Athena-<a href="http://divmod.org/trac/wiki/DivmodNevow";>Nevow</a>,
-<a href="http://www.djangoproject.com/";>Django</a>,
-<a href="http://turbogears.org/";>TurboGears</a>, or maybe even
-<a href="http://rubyonrails.org/";>Ruby On Rails</a>.  Athena doesn't work in terms
-of pages, links, or HTTP requests and responses; it is a client-server
-framework that works in terms of widgets, JavaScript objects, and symmetric
-asynchronous message queues.</p>
-
-<p>However, as alluded to above, Athena is part of a larger framework, Nevow,
-which can be used to build more general-purpose and <q>traditional</q>
-web applications.</p>
-
-<h2>AJAX</h2>
-
-<p>AJAX isn't a technology in and of itself, bur rather an amalgam of
-technologies used together in order to accomplish the goal of making web
-applications more responsive than traditional delivery and interactive
-mechanisms, such as HTML forms submitted to a server.</p>
-
-<p>In particular, AJAX consists of the following:</p>
-<ul>
-<li>Asynchronous communications from a user's browser to a server</li>
-<li>JavaScript</li>
-<li>Exchanged data (usually XML or JSON)</li>
-</ul>
-
-<h2>COMET</h2>
-
-<p>Historically, the focus of AJAX technologies was user-event driven. However,
-with the need to update the user's browser with events generated at the server,
-a solution more sophisticated than AJAX was needed; this has been dubbed COMET.
-Athena is implemented using both AJAX and COMET techniques, and therefore
-allows two-way browser &lt;-&gt; server communications.</p>
-
-<h2>Athena Basics</h2>
-
-<p>We've provided brief background information on AJAX/COMET, but what is the
-purpose of Athena? What makes Athena different than other solutions? Here are a
-few key points that should help with these questions::</p>
-<ul>
-<li>Athena exists to make writing COMET web applications easy.</li>
-<li>Athena is written in Python and JavaScript</li>
-<li>It is written to be used with Nevow, a <a
-href="http://twistedmatrix.com/";>Twisted</a>-based web framework.</li>
-<li>Similar to Twisted's <a
-href="http://twistedmatrix.com/projects/core/documentation/howto/pb-intro.html";>Perspective
-Broker</a>, Athena employs remote calls.</li>
-</ul>
-
-<p>Athena was written by Twisted and Divmod developers (in addition to
-contributing members of the community) in order to bring the outdated and
-Nevow-incompatible Woven LivePage technology to Nevow. In addition, it was an
-opportunity to improve upon the original design and incorporate new features to
-address the growing needs of developers.</p>
-
-<h2>Target Applications</h2>
-
-<p>Good candidates for Athena web applications would include those where the
-application needs to respond to user input and/or updates from servers, such
-as the following:</p>
-<ul>
-<li>conference software (e.g. whiteboard, shared text, chat, etc.)</li>
-<li>mail clients</li>
-<li>interactive, multi-player games</li>
-<li>social networking tools</li>
-<li>office applications (e.g., spreadsheets, word processors, etc.)</li>
-</ul>
-
-<h2>Target Developers</h2>
-
-<p>Anyone who wants to create interactive, web-based applications is a
-potential Nevow/Athena user. It's best to have some background in writing web
-applications, and in addition, to know how to use Nevow. However, we hope that
-this tutorial will be just as useful for beginners as experienced
-developers.</p>
-
-</body>
-</html>

=== removed directory 'Nevow/doc/howto/chattutorial/part00'
=== removed file 'Nevow/doc/howto/chattutorial/part00/index.xhtml'
--- Nevow/doc/howto/chattutorial/part00/index.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part00/index.xhtml	1970-01-01 00:00:00 +0000
@@ -1,230 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Nevow Athena from Scratch: Echo Application</title>
-  </head>
-<body>
-
-<h2>What is an "Echo Application?"</h2>
-
-<p>
-Our first foray into building an Athena application will be an easy venture:
-we want to type something in an input box and have it echoed back to us on
-the same page, without having to reload anything. Why? Well, our eventual
-goal is to have a working chat server, with all sorts of technical bells
-and whistles (persistent storage, authentication,
-etc.), but that's a bit heady for right now. Many of the same principles
-which we will eventually employ in our chat application exist for a simple
-case of sending textual messages between a web browser and a server. This
-is the essence of our "Echo" application.
-</p>
-
-<h2>Mental Preparation</h2>
-
-<p>In the
-<a href="../intro.html">Introduction</a> and the
-<a href="../concepts.html">Concepts</a> pages, we had a refresher on AJAX and
-COMET and we learned a little bit about what that looks like for Athena. But
-as we sit down to actually write an Athena application, what do we need to
-wrap our heads around?
-</p>
-
-<p>Given the introductory knowledge we have, we know that we will need to
-write some JavaScript, some Python, and if our past experience in developing
-web applications is any guide, some form of template. This indeed is the
-case, but here's something big: we're not working with pages and page
-templates; we're working with "elements", or parts of the DOM tree. We will
-not be creating page resources; we will be creating just the parts of a
-"traditional" page that will be dynamic and interactive.
-</p>
-
-<h2>Architecture</h2>
-
-<p>Now that we've pumped ourselves up and before we start clacking away at the
-keyboard, we need to get pointed in the right direction. We need a
-plan. Here's what we know:</p>
-
-<ol>
-<li>We will have a server that:
-    <ul>
-    <li>serves dynamic elements in a resource accessible via a URL;</li>
-    <li>communicates with a client.</li>
-    </ul>
-</li>
-<li>We will have a client that:
-    <ul>
-    <li>communicates with the server;</li>
-    <li>updates its DOM tree.</li>
-    </ul>
-</li>
-</ol>
-
-<p>The user experience of this application will be the following:</p>
-<ol>
-<li>they will type text in an input on a form; and</li>
-<li>the typed text will be rendered to a different part of the page upon
-hitting a submit button.</li>
-</ol>
-
-<p>We will not simply write user input to a <code>div</code> with JavaScript
-DOM manipulation, but will instead pass data like we expect will be necessary
-when we write our chat application. After all, it's probably best to build
-towards our goal. In order to accomplish this, the application will do
-something like the following:</p>
-
-<ol>
-<li>JavaScript client code will extract user input and send
-it to our server;</li>
-<li>Python code will receive messages from the client;</li>
-<li>Python code will send messages to the client; and</li>
-<li>a template file (or <code>stan</code> code) will be used for
-presentation.</li>
-</ol>
-
-<p></p>
-
-<h2>Let the Coding Begin</h2>
-
-<p>In a future installment, we will outline the development process from
-the perspective of test-driven development, in order to not only show how
-to write unit tests for Athena (Python and JavaScript), but to encourage
-good programming practices while working with Athena. For now, though, we will
-just dive right in.</p>
-
-<h3>Presentation</h3>
-
-<p>Let's start with the easy bit: what our app will look like. Here is the
-template for our echo application:</p>
-
-<a href="listings/echothing/template.html" class="html-listing" />
-
-<p>Things to note:</p>
-<ul>
-<li>This is not a complete HTML document, but is an XHTML template for an
-"element".</li>
-<li>The name space declarations in the top <code>div</code> tag are necessary
-for the operation of Athena.</li>
-<li>When we hit the "Send" button, our JavaScript class will call the
-<code>doSay()</code> method.</li>
-</ul>
-
-<h3>Writing the Client</h3>
-
-<p>Next up is the JavaScript. We need to send our data to the server. In a
-full chat application, it would be necessary to send the data to the server
-so that we could propagate the message to all connected clients. In this
-case, with the simple echo, we're not going to do anything with the data
-that gets sent to the server, except send it back, of course.</p>
-
-<p>Our JavaScript will need to do several things:</p>
-<ol>
-<li>import required modules;</li>
-<li>inherit <code>callRemote</code> functionality from the base
-<code>Widget</code> class;</li>
-<li>setup convenience attributes;</li>
-<li>implement the <code>doSay()</code> method we put in our template above;
-and</li>
-<li>implement a method for updating the DOM with data it receives from
-the server</li>
-</ol>
-
-<a href="listings/echothing/js/EchoThing.js" class="py-listing" />
-
-<p>Points to note:</p>
-<ul>
-<li>Those import statements aren't just pretty: they are necessary! In Athena,
-you need to treat those like you treat the import statements in Python.
-</li>
-<li>The attributes set in the <code>__init__()</code> method are for
-convenience when we reference them in other methods.</li>
-<li>Note the <code>callRemote()</code> method in <code>doSay()</code>,
-As mentioned in the <a href="../concepts.html">Concepts</a> section, this
-is how JavaScript is communicating with our Python server.</li>
-<li>Another thing about <code>doSay</code>: this is the submit handler. As
-such, it needs to return false so that the browser is prevented from doing a
-normal form submission.</li>
-<li><code>addText()</code> is the method that will be updating the browser
-DOM once the server sends the data back.</li>
-</ul>
-
-<p>There's not much to say about the next one. This is what sets up the
-relationship between our module name and the actual file itself (so that
-the JavaScript can be loaded):</p>
-
-<a href="listings/nevow/plugins/echothing_package.py" class="py-listing" />
-
-<h3>Writing the Server</h3>
-
-<p>Despite what one might think, writing the server may be the easiest
-part! If you've created  Nevow applications before, then this will look
-very familiar. The only method we need is one that will send data back to
-the client. Besides importing the necessary modules and creating a class
-with some boilerplate, that's about it.
-</p>
-
-<p>Let's take a look at the code:</p>
-
-<a href="listings/echothing/echobox.py" class="py-listing" />
-
-<p>As promised, simple as can be. We do make use of a Twisted utility that
-simplifies typing the path to our template. Some very important points:</p>
-<ul>
-<li>The <code>jsClass</code> assignment is what connects this code to your
-JavaScript code.</li>
-<li>As discussed in the <a href="../concepts.html">Concepts</a> section,
-the <code>expose</code> decorator is required if our JavaScript is going
-to be able to call the <code>say()</code> method.</li>
-</ul>
-
-<h3>Putting it All Together</h3>
-
-<p>Now that we've got all the code in front of us, we can trace out exactly
-what happens:</p>
-<ol>
-<li>the user loads the resource in their browser, and the template is
-rendered;</li>
-<li>after typing a message in the input box, the user hits submit;</li>
-<li>upon hitting submit, the client code <code>doSay()</code> method is
-called;</li>
-<li><code>doSay()</code> makes a remote call to the Python server method
-<code>say()</code>;</li>
-<li>the Python server receives the data when <code>say()</code> is called, and
-then it passes that data to the client code's <code>addText()</code> method;</li>
-<li>with control back in the client code and data fresh from the server,
-JavaScript can now update the page's DOM with the new data, and this is
-what the <code>addText()</code> method does;</li>
-<li>when <code>addText()</code> finishes, the cycle has completed and the
-browser now displays the latest data input by the user.</li>
-</ol>
-
-<h3>The Fruits of Our Labor</h3>
-
-<p>Now we get to run it! This is a little different than what you may be
-used to, if you have written Twisted applications in the past. We are using
-the plugin architecture of Twisted and Nevow such that <code>twistd</code>
-will publish our element in an HTTP service. To do this, we will use
-<code>twistd</code>'s <code>athena-widget</code> command:</p>
-
-<pre class="shell">
-cd Nevow/doc/howto/chattutorial/part00/listings
-twistd -n athena-widget --element=echothing.echobox.EchoElement
-</pre>
-
-<p>If you executed this against the tutorial code on your local machine,
-you can now visit <a href="http://localhost:8080";>localhost:8080</a> and start
-echoing to your heart's content.</p>
-
-<h2>Summary</h2>
-
-<p>As you can see, our echo application is a toy app that doesn't do
-anything very useful. However, it has provided us with a basis for learning how
-to write working Athena code that lets a browser and server communicate
-with each other, both sending and receiving data. As such, we now have a
-solid foundation upon which we can build a functional, useful <i>and</i>
-instructional chat application.</p>
-
-</body>
-</html>
-

=== removed directory 'Nevow/doc/howto/chattutorial/part00/listings'
=== removed directory 'Nevow/doc/howto/chattutorial/part00/listings/echothing'
=== removed file 'Nevow/doc/howto/chattutorial/part00/listings/echothing/__init__.py'
--- Nevow/doc/howto/chattutorial/part00/listings/echothing/__init__.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part00/listings/echothing/__init__.py	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-

=== removed file 'Nevow/doc/howto/chattutorial/part00/listings/echothing/echobox.py'
--- Nevow/doc/howto/chattutorial/part00/listings/echothing/echobox.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part00/listings/echothing/echobox.py	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-from twisted.python.util import sibpath
-from nevow.athena import LiveElement, expose
-from nevow.loaders import xmlfile
-
-class EchoElement(LiveElement):
-
-    docFactory = xmlfile(sibpath(__file__, 'template.html'))
-    jsClass = u'EchoThing.EchoWidget'
-
-    def say(self, message):
-        self.callRemote('addText', message)
-    say = expose(say)

=== removed directory 'Nevow/doc/howto/chattutorial/part00/listings/echothing/js'
=== removed file 'Nevow/doc/howto/chattutorial/part00/listings/echothing/js/EchoThing.js'
--- Nevow/doc/howto/chattutorial/part00/listings/echothing/js/EchoThing.js	2009-01-21 22:58:03 +0000
+++ Nevow/doc/howto/chattutorial/part00/listings/echothing/js/EchoThing.js	1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-// import Nevow.Athena
-
-Nevow.Athena.Widget.subclass(EchoThing, 'EchoWidget').methods(
-    function __init__(self, node) {
-        EchoThing.EchoWidget.upcall(self, "__init__", node);
-        self.echoWidget = self.nodeByAttribute('name', 'echoElement');
-        self.scrollArea = self.nodeByAttribute('name', 'scrollArea');
-        self.message = self.nodeByAttribute('name', 'message');
-    },  
-
-    function doSay(self) {
-        self.callRemote("say", self.message.value);
-        self.message.value = ""; 
-        return false;
-    },
- 
-    function addText(self, text) {
-        var newNode = document.createElement('div');
-        newNode.appendChild(document.createTextNode(text));
-        self.scrollArea.appendChild(newNode);
-        document.body.scrollTop = document.body.scrollHeight;
-    });

=== removed file 'Nevow/doc/howto/chattutorial/part00/listings/echothing/template.html'
--- Nevow/doc/howto/chattutorial/part00/listings/echothing/template.html	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part00/listings/echothing/template.html	1970-01-01 00:00:00 +0000
@@ -1,11 +0,0 @@
-<div xmlns:nevow="http://nevow.com/ns/nevow/0.1";
-    xmlns:athena="http://divmod.org/ns/athena/0.7";
-    nevow:render="liveElement">
-    <h2>Echo Element</h2>
-    <form name="echoElement">
-        <athena:handler event="onsubmit" handler="doSay" />
-        <div name="scrollArea">
-        </div>
-        <input name="message" /><input type="submit" value="Send" />
-    </form>
-</div>

=== removed directory 'Nevow/doc/howto/chattutorial/part00/listings/nevow'
=== removed directory 'Nevow/doc/howto/chattutorial/part00/listings/nevow/plugins'
=== removed file 'Nevow/doc/howto/chattutorial/part00/listings/nevow/plugins/echothing_package.py'
--- Nevow/doc/howto/chattutorial/part00/listings/nevow/plugins/echothing_package.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part00/listings/nevow/plugins/echothing_package.py	1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
-
-from twisted.python import util
-
-from nevow import athena
-
-import echothing
-
-chatthingPkg = athena.AutoJSPackage(util.sibpath(echothing.__file__, 'js'))

=== removed directory 'Nevow/doc/howto/chattutorial/part01'
=== removed file 'Nevow/doc/howto/chattutorial/part01/index.xhtml'
--- Nevow/doc/howto/chattutorial/part01/index.xhtml	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part01/index.xhtml	1970-01-01 00:00:00 +0000
@@ -1,236 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>Nevow Athena from Scratch: Chat Application</title>
-  </head>
-<body>
-
-<h2>Architecture</h2>
-
-<p>We'll assume that you've read all the preceding sections of this tutorial
-and have just finished the "Echo" application example. As such, we don't need
-to do any more "mental preparation" and can skip straight to a description of
-the architecture.</p>
-
-<p>Fundamentally, this is no different than our echo application: there is
-a little more chatter that takes place between the client and server;
-there's another object involved (a <code>ChatRoom</code>); and we'll have
-to run the server a little differently.
-</p>
-
-<p>Here are the new features we want to support:</p>
-<ul>
-<li>login form;</li>
-<li>in-memory user storage;</li>
-<li>the ability to send global alerts to all users; and</li>
-<li>the ability for all users to "hear" when another user speaks in the
-chat room;</li>
-</ul>
-
-<p>A general rule we can establish about our architecture is that if something
-has to happen for everyone, that code needs to appear on the server side,
-since it's the server that is keeping track of all users. If something is
-going to happen irrespective of other users or if browser DOM manipulation
-is required, then we know the client will be the recipient of the code.</p>
-
-<p>As such, in the features above, the login form will be client code. The
-user storage, global alerts, and "hearing" will be implemented in server
-code for the data; updating the DOM with that data will be implemented in
-client code.</p>
-
-<p>The user experience of this application will be the following:</p>
-<ol>
-<li>they will be presented with a login box (no password, only username);</li>
-<li>upon logging in, a message will be sent to all logged in users that
-this person has joined, they will see a message at the bottom of the
-chat that states their login name, and the login form will be replaced with
-a chat area and a text input field;</li>
-<li>they will type text in the input field; and</li>
-<li>the typed text will appear in the browser of every person who is
-logged in.</li>
-</ol>
-
-<p>Building upon our previous example, our application will do the
-following:</p>
-
-<ol>
-<li>JavaScript client code will extract user input and send
-it to our server;</li>
-<li>Python code will receive messages from the client;</li>
-<li>Python code will process these messages;</li>
-<li>Python code will send messages to the all clients; and</li>
-<li>a template file (or <code>stan</code> code) will be used for
-presentation.</li>
-</ol>
-
-<h2>More Coding</h2>
-
-<h3>Presentation</h3>
-
-<p>The template is very similar as it was in the previous example, with
-the differences being a new login box, a "logged in as"
-area, and some name changes:</p>
-
-<a href="listings/chatthing/template.html" class="html-listing" />
-
-<p>We've now got two JavaScript methods that need to be defined:
-<code>doSetUsername()</code> and <code>doSay()</code>. We can also infer
-from this template that elements will be hidden and shown after login
-(note the presence of <code>style="display:none"</code> in two places). With
-these observations in hand, let's proceed to the JavaScript code.</p>
-
-<h3>Writing the Client</h3>
-
-<p>Referring back to our thoughts in the "Architecture" section above, we
-can establish that the JavaScript code needs the following:</p>
-
-<ul>
-<li>have the same basic boilerplate as in the "echo" example (imports,
-inheritance, attribute-setting in the constructor);</li>
-<li>implement the <code>doSetUsername()</code> and <code>doSay()</code>
-methods;</li>
-<li>create a method that will send a message to all users; and</li>
-<li>create a method that will let everyone know when someone says
-something. Let's see how this is done.</li>
-</ul>
-
-<a href="listings/chatthing/js/ChatThing.js" class="py-listing" />
-
-<p>There is a little abstraction here:</p>
-<ul>
-<li>we need a general message-sending method (<code>displayMessage()</code>) for any
-message that gets sent to all users;</li>
-<li>for user chat messages, we need something that will prepend the username so
-that everyone knows who said what (<code>displayUserMessage()</code>), and once this method
-does its thing, it passes the adjusted message on to <code>displayMessage()</code>.</li>
-</ul>
-
-<p>Other than that, this is very straight-forward code; it's pretty much
-the same as the "Echo" tutorial. The <code>display*()</code> methods
-are only responsible for updating the UI, just as we would expect.</p>
-
-We also need the same glue that we demonstrated in the "Echo" example:
-
-<a href="listings/nevow/plugins/chatthing_package.py" class="py-listing" />
-
-<h3>Writing the Server</h3>
-
-<p>The server code is a bit more complicated. We
-anticipated this above in the "Architecture" section where we noted that
-the Python code needs to receive, process and send messages.</p>
-
-<a href="listings/chatthing/chatterbox.py" class="py-listing" />
-
-<p>There is something in our "Chat" code that is not at all present in the
-"Echo" application: the <code>ChatRoom</code> object. We need this object for the
-following functionality:</p>
-<ul>
-<li>a means of instantiating new <code>ChatterElement</code> clients;</li>
-<li>a "singleton" instance for keeping track of all <code>ChatterElement</code> clients;</li>
-<li>a means sending messages to all clients;</li>
-</ul>
-
-<p>Let's look at the second two reasons first. In our "Chat" application,
-a new <code>ChatterElement</code> is created whenever a user connects,
-so we will have potentially many of these instances. In order
-for our chat server to function as designed, it will need a way to
-communicate with each of these. If we create an object that can keep the
-<code>ChatterElement</code>es in a list, then it will be able to iterate that
-list and call methods that, in turn, make remote calls to the JavaScript.
-</p>
-
-<p>Because we need the chat room to be a singleton object, it
-can only be instantiated once. But we need many instantiations of
-<code>ChatterElement</code> -- one for each connection, in fact. So what do
-we do? Well, in this case, we make one of the methods
-of <code>ChatRoom</code> a factory for instantiating a
-<code>ChatterElement</code>. Before we return the instance, though, we
-append it to the list of instances that the <code>ChatRoom</code>
-is keeping track of.
-</p>
-
-<h3>Putting it All Together</h3>
-
-
-<p>Now that we've got all the code in front of us, we can trace out exactly what happens:</p>
-
-<ol>
-<li>the user loads the resource in their browser, and the template is rendered;</li>
-<li>after typing a message in the input box, the user hits submit;</li>
-<li>JavaScript client code calls to the server with the text the user submitted;</li>
-<li>the server gets the message and shares it with all the connected
-<code>ChatterElement</code>s;</li>
-<li>each <code>ChatterElement</code> hears this message and passes it back to the JavaScript client;</li>
-<li>the client prepends the username to the message and then updates the display with the complete message.</li>
-</ol>
-
-<p>
-Keep in mind that <code>ChatterElement</code> entails several duties: it
-establishes a relationship with a room object, it "registers" a user (there's a
-one-to-one mapping between users and <code>ChatterElement</code>), it sends
-messages to the browser, and it receives messages from the chat room. Being a
-<code>LiveElement</code> subclass, <code>ChatterElement</code> is also
-responsible for the view (via the document factory).
-</p>
-
-
-<h3>Running with <code>twistd</code></h3>
-
-<p>One last bit of code that may seem odd is the <code>chat</code>
-variable we define right after the <code>ChatRoom</code> class. What
-is this? This is how we make all this cleverness work as a twisted
-plugin. </p>
-
-<p>If you recall, in our "Echo" application, we ran the code with
-the following command:
-</p>
-
-<pre class="shell">
-twistd -n athena-widget --element=echothing.echobox.EchoElement
-</pre>
-
-<p>The value we pass as the <code>--element</code> argument is the dotted
-name of the <code>LiveElement</code> object of which our "web page"
-is primarily comprised: the <code>EchoElement</code> object. In
-our "Chat" application, we have more moving parts: not only
-do we have the <code>ChatterElement</code> object, but we have the
-<code>ChatRoom</code> object which is responsible for keeping track of
-many <code>ChatterElement</code>es. By defining the <code>chat</code>
-variable, we are accomplishing the following all at once:
-</p>
-
-<ul>
-<li>providing a variable that can be accessed as a dotted name and thus
-used when starting the server (<code>chatthing.chatterbox.chat</code>);</li>
-<li>creating a singleton of <code>ChatRoom</code> (via the "magic"
-of Python module-level instantiations);</li>
-<li>making use of a factory, that when called, will both return a
-new <code>ChatterElement</code> instance <i>and</i> add itself to the
-<code>ChatRoom</code>.</li>
-</ul>
-
-<p>Running this version of our code is a little bit different than the
-"Echo" version. This is because of the <code>ChatRoom</code> code we
-discussed above. As such, we pass a factory as our element, like so:</p>
-
-<pre class="shell">
-cd Nevow/doc/howto/chattutorial/part01/listings
-twistd -n athena-widget --element=chatthing.chatterbox.chat
-</pre>
-
-<p>If you executed this against the tutorial code on your local machine,
-you can now visit <a href="http://localhost:8080/";>http://localhost:8080/</a>
-and start chatting to your heart's content.</p>
-
-<h2>Summary</h2>
-<p>
-Unlike our echo application, the chat application has some real functionality
-and does some useful stuff: supporting user chats via browser/server two-way
-communications. It should be evident now how the echo application provided a
-basic conceptual and (partially) functional foundation upon which our chat work
-could be based.
-</p>
-</body>
-</html>

=== removed directory 'Nevow/doc/howto/chattutorial/part01/listings'
=== removed directory 'Nevow/doc/howto/chattutorial/part01/listings/chatthing'
=== removed file 'Nevow/doc/howto/chattutorial/part01/listings/chatthing/__init__.py'
--- Nevow/doc/howto/chattutorial/part01/listings/chatthing/__init__.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part01/listings/chatthing/__init__.py	1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
-

=== removed file 'Nevow/doc/howto/chattutorial/part01/listings/chatthing/chatterbox.py'
--- Nevow/doc/howto/chattutorial/part01/listings/chatthing/chatterbox.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part01/listings/chatthing/chatterbox.py	1970-01-01 00:00:00 +0000
@@ -1,48 +0,0 @@
-from twisted.python.util import sibpath
-from nevow.loaders import xmlfile
-from nevow.athena import LiveElement, expose
-
-class ChatRoom(object):
-
-    def __init__(self):
-        self.chatters = []
-
-    def wall(self, message):
-        for chatter in self.chatters:
-            chatter.wall(message)
-
-    def tellEverybody(self, who, what):
-        for chatter in self.chatters:
-            chatter.hear(who.username, what)
-
-    def makeChatter(self):
-        elem = ChatterElement(self)
-        self.chatters.append(elem)
-        return elem
-
-# element to be run with twistd
-chat = ChatRoom().makeChatter
-
-class ChatterElement(LiveElement):
-
-    docFactory = xmlfile(sibpath(__file__, 'template.html'))
-    jsClass = u'ChatThing.ChatterWidget'
-
-    def __init__(self, room):
-        self.room = room
-
-    def setUsername(self, username):
-        self.username = username
-        message = ' * user '+username+' has joined the room'
-        self.room.wall(message)
-    setUsername = expose(setUsername)
-
-    def say(self, message):
-        self.room.tellEverybody(self, message)
-    say = expose(say)
-
-    def wall(self, message):
-        self.callRemote('displayMessage', message)
-
-    def hear(self, username, what):
-        self.callRemote('displayUserMessage', username, what)

=== removed directory 'Nevow/doc/howto/chattutorial/part01/listings/chatthing/js'
=== removed file 'Nevow/doc/howto/chattutorial/part01/listings/chatthing/js/ChatThing.js'
--- Nevow/doc/howto/chattutorial/part01/listings/chatthing/js/ChatThing.js	2009-01-21 22:58:03 +0000
+++ Nevow/doc/howto/chattutorial/part01/listings/chatthing/js/ChatThing.js	1970-01-01 00:00:00 +0000
@@ -1,42 +0,0 @@
-// import Nevow.Athena
-
-Nevow.Athena.Widget.subclass(ChatThing, 'ChatterWidget').methods(
-    function __init__(self, node) {
-        ChatThing.ChatterWidget.upcall(self, "__init__", node);
-        self.chooseBox = self.nodeByAttribute('name', 'chooseBox');
-        self.scrollArea = self.nodeByAttribute('name', 'scrollArea');
-	self.sendLine = self.nodeByAttribute('name', 'sendLine');
-        self.usernameField = self.nodeByAttribute('name', 'username');
-        self.userMessage = self.nodeByAttribute('name', 'userMessage');
-        self.loggedInAs = self.nodeByAttribute('name', 'loggedInAs');
-    },
-
-    function doSetUsername(self) {
-        var username = self.usernameField.value;
-        self.callRemote("setUsername", username).addCallback(
-            function (result) {
-                self.chooseBox.style.display = "none";
-                self.sendLine.style.display = "block";
-                self.loggedInAs.appendChild(document.createTextNode(username));
-                self.loggedInAs.style.display = "block";
-            });
-        return false;
-    },
-
-    function doSay(self) {
-        self.callRemote("say", self.userMessage.value);
-        self.nodeByAttribute('name', 'userMessage').value = "";
-        return false;
-    },
-
-    function displayMessage(self, message) {
-        var newNode = document.createElement('div');
-        newNode.appendChild(document.createTextNode(message));
-        self.scrollArea.appendChild(newNode);
-        document.body.scrollTop = document.body.scrollHeight;
-    },
-
-    function displayUserMessage(self, avatarName, text) {
-        var msg = avatarName+': '+text;
-        self.displayMessage(msg);
-    });

=== removed file 'Nevow/doc/howto/chattutorial/part01/listings/chatthing/template.html'
--- Nevow/doc/howto/chattutorial/part01/listings/chatthing/template.html	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part01/listings/chatthing/template.html	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-<div xmlns:nevow="http://nevow.com/ns/nevow/0.1";
-    xmlns:athena="http://divmod.org/ns/athena/0.7";
-    nevow:render="liveElement">
-    <h2>Chatter Element</h2>
-    <form name="chatBox">
-        <athena:handler event="onsubmit" handler="doSay" />
-        <div name="scrollArea" 
-             style="border: 1px solid gray; padding: 5; margin: 5">
-        </div>
-        <div name="sendLine" style="display: none">
-	  <input name="userMessage" /><input type="submit" value="Send" />
-	</div>
-    </form>
-    <form name="chooseBox">
-        <athena:handler event="onsubmit" handler="doSetUsername" />
-        Choose your username: <input name="username" />
-        <input type="submit" name="GO" value="Enter"/>
-    </form>
-    <div name="loggedInAs" style="display:none"><span>Logged in as </span></div>
-</div>

=== removed directory 'Nevow/doc/howto/chattutorial/part01/listings/nevow'
=== removed directory 'Nevow/doc/howto/chattutorial/part01/listings/nevow/plugins'
=== removed file 'Nevow/doc/howto/chattutorial/part01/listings/nevow/plugins/chatthing_package.py'
--- Nevow/doc/howto/chattutorial/part01/listings/nevow/plugins/chatthing_package.py	2008-09-03 20:03:47 +0000
+++ Nevow/doc/howto/chattutorial/part01/listings/nevow/plugins/chatthing_package.py	1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
-
-from twisted.python import util
-
-from nevow import athena
-
-import chatthing
-
-chatthingPkg = athena.AutoJSPackage(util.sibpath(chatthing.__file__, 'js'))

=== removed file 'Nevow/doc/howto/deployment.xhtml'
--- Nevow/doc/howto/deployment.xhtml	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/deployment.xhtml	1970-01-01 00:00:00 +0000
@@ -1,300 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Deployment
-    </title>
-  </head>
-  <body>
-    <h1>Deployment</h1>
-
-    <p>
-      Nevow includes two major phases for deciding what HTML to render. <a
-      href="traversal.xhtml">Object Traversal</a> is the procedure by which a
-      URL is mapped to a Python object which will perform the HTML
-      generation. <a href="glossary.xhtml">Page Rendering</a> is the process by
-      which data objects are combined with an HTML template to produce the
-      final output.
-    </p>
-
-    <p>
-      Before any of this can take place, however, we must have an environment
-      in which our Python code can run in response to an HTTP request, and HTML
-      can be returned to the browser for rendering. This is called the
-      <a href="glossary.xhtml">Deployment Environment</a>.
-    </p>
-
-    <p>
-      There are various deployment options for Nevow page code:
-    </p>
-
-    <ul>
-      <li>
-        CGI: Simple deployment in almost any HTTP server
-      </li>
-      <li>
-        WSGI: A more complete and flexible way for deploying on many HTTP
-        servers
-      </li>
-      <li>
-        Twisted.Web: A standalone application server process which includes a
-        built-in HTTP server
-      </li>
-      <li>
-        Zomne: A small CGI which hands off HTTP requests to a long-running
-        application server process, similar to FastCGI or SCGI
-      </li>
-    </ul>
-
-    <h2>CGI</h2>
-
-    <p>
-      You can deploy Nevow on any webserver which uses the Common Gateway
-      Interface.  Using this method, your code is responsible for properly
-      formatting and outputting the HTTP response headers, and Nevow is used
-      only to generate the HTML body of your page. Here is the simplest
-      possible CGI:
-    </p>
-
-    <pre class="python">
-#!/usr/bin/env python
-
-print "Content-type: text/plain\r\n\r\n",
-
-from nevow import rend, loaders
-
-class HelloWorld(rend.Page):
-    docFactory = loaders.stan("Hello, world!")
-
-print HelloWorld().renderSynchronously()
-    </pre>
-
-    <p>
-      With this simple CGI you can use the Nevow template loaders and standard
-      nevow template interpolation techniques in your CGIs. However, you do not
-      get any <a href="traversal.xhtml">Object Traversal</a> features, and you
-      have to generate HTTP headers yourself.  WSGI is a slightly higher-level
-      deployment option which does not suffer these problems.
-    </p>
-
-    <h2>WSGI</h2>
-
-    <p>
-      WSGI is a python interface for plugging web applications into various
-      HTTP server architectures. It is described in <a
-      href="http://www.python.org/peps/pep-0333.html";>PEP 333</a>, the Python
-      Web Services Gateway Interface Python Enhancement Proposal. Nevow
-      includes the <code class="API">nevow.wsgi</code> module, which includes a
-      <code>createWSGIApplication</code> function which takes a Page and
-      returns a standard WSGI application callable. With the help of the
-      <code>run_with_cgi</code> example gateway from the PEP (which I will omit
-      here), our CGI example becomes shorter:
-    </p>
-
-    <pre class="python">
-#!/usr/bin/env python
-
-from nevow import rend, loaders, wsgi
-
-class HelloWorld(rend.Page):
-    docFactory = loaders.stan("Hello, world!")
-
-run_with_cgi(wsgi.createWSGIApplication(HelloWorld()))
-    </pre>
-
-    <p>
-      Of course, you can use any available WSGI gateway to publish your
-      application object, such as one of the gateways which comes with the <a
-      href="http://peak.telecommunity.com/";>PEAK</a> toolkit. For example, here
-      is a simple python module which creates a WSGI application which we will
-      then deploy with PEAK's SimpleHTTPServer gateway::
-    </p>
-
-    <pre class="python">
-## helloworld.py
-
-from nevow import rend, loaders, wsgi
-
-class HelloWorld(rend.Page):
-    docFactory = loaders.stan("Hello, world!")
-
-application = wsgi.createWSGIApplication(HelloWorld())
-    </pre>
-
-    <p>
-      Save this file as "helloworld.py" somewhere on your PYTHONPATH and then
-      run the following command:
-    </p>
-
-    <pre>peak launch WSGI import:helloworld.application</pre>
-
-    <p>
-      This will bring up a SimpleHTTPServer running your Nevow code and launch
-      a web browser to view the output. (TODO: I couldn't get this working
-      immediately but I will seek assistance with PEAK and update the
-      instructions once I do.)
-    </p>
-
-    <h2>Twisted.Web</h2>
-
-    <p>
-      A convenient and powerful way to deploy Nevow applications is inside a
-      process running the twisted.web HTTP server. With Python, Twisted, and
-      Nevow installed, you have all you need to run a Web Application, with no
-      other dependencies or external HTTP servers such as Apache
-      required. Running your Nevow applications under twisted.web also gives
-      you access to some of the more advanced "Live" features of Nevow, such as
-      <code>nevow.livepage</code> and <code>nevow.canvas</code>. Currently,
-      these modules require more control over the HTTP socket than CGI or WSGI
-      can provide.  (This may change in the future.)
-    </p>
-
-    <p>
-      Deploying a Nevow application under twisted.web requires a little more
-      boilerplate, but can be considerably easier to set up than other
-      deployment options because there are no external dependencies. Note that
-      normally you should declare your Page classes in modules external to the
-      twisted configuration file, but everything is included in one file here
-      for brevity.  Here is the minimal configuration file required to use
-      Nevow with twisted.web:
-    </p>
-
-    <pre class="python">
-from nevow import rend, loaders, appserver
-
-class HelloWorld(rend.Page):
-    docFactory = loaders.stan("Hello, world!")
-
-from twisted.application import service, internet
-application = service.Application("hello-world")
-internet.TCPServer(8080, appserver.NevowSite(HelloWorld())).setServiceParent(application)
-    </pre>
-
-    <p>
-      Save this file as "helloworld.tac" and start the server using the
-      command:
-    </p>
-
-    <pre>twistd -noy helloworld.tac</pre>
-
-    <p>
-      Then visit your twisted.web server by viewing the url
-      "http://localhost:8080/"; in your browser. See the twistd man page for
-      more information about what twistd is capable of, including daemonizing
-      the HTTP server.
-    </p>
-
-    <h2>Zomne</h2>
-
-    <p>
-      <em>Warning</em> Zomne is experimental. It may blow up your computer and
-      require your first born son as a sacrifice. Zomne also only works in
-      UNIX-like environments where unix domain sockets are available, and may
-      not work on windows.
-    </p>
-
-    <p>
-      Zomne, or "Zombie Nevow", is a CGI written in C which can start up a
-      long-running Application Server process if one is not already running. It
-      then uses a simple custom protocol to transmit information about the HTTP
-      request from the CGI process to the application server process.
-    </p>
-
-    <p>
-      Zomne combines the ease of deployment of the CGI environment with the
-      speed and flexibility of the twisted.web long-running application server
-      process model.
-    </p>
-
-    <p>
-      To use Zomne, you must first compile the CGI. cd into the directory
-      created when unpacking the Nevow tarball, and compile the CGI:
-    </p>
-
-    <pre>% gcc zomne.c</pre>
-
-    <p>
-      Move it into your cgi-bin:
-    </p>
-
-    <pre>% mv a.out /Library/WebServer/CGI-Executables/nevow.cgi</pre>
-
-    <p>
-      Create a file which tells the cgi where to look for the application:
-    </p>
-
-    <pre>
-% cat &gt; /Library/WebServer/CGI-Executables/.nevow.cgi.dir
-/Users/dp/zomne-test
-^D</pre>
-
-    <p>
-      The CGI name can be anything, as long as there is a file with a prepended
-      "."  and a postfixed ".dir" in the same directory which contains the full
-      path of a zomne application directory. Next, create the application
-      directory:
-    </p>
-
-    <pre>mkdir /Users/dp/zomne-test</pre>
-
-    <p>
-      Finally, create the zomne.tac file which the zomne.cgi will execute to
-      start the long-running application server process:
-    </p>
-
-    <pre class="python">
-from nevow import rend, loaders, zomnesrv
-
-class HelloWorld(rend.Page):
-    docFactory = loaders.stan("Hello, world!")
-
-from twisted.application import service, internet
-application = service.Application('nevow-zomne-test')
-internet.UNIXServer('zomne.socket', zomnesrv.ZomneFactory(HelloWorld())).setServiceParent(application)
-    </pre>
-
-    <p>
-      Now, visiting the nevow.cgi URL through the web should render the Hello
-      World page, after a pause while the server is starting up. Subsequent
-      requests should be very fast, because the application server is already
-      running, and the CGI merely has to forward the request to it.
-    </p>
-
-    <p>
-      Another useful capability of the zomne CGI process is the ability to
-      control environment variables the CGI will use. Create a directory named
-      "zomne_environ" in the application directory, and fill it with text files
-      whose name will be the environment key and whose contents will be the
-      environment value:
-    </p>
-
-    <pre>
-% cd zomne-test
-% mkdir zomne-environ
-% cd zomne-environ
-% cat &gt; PYTHONPATH
-/Users/dp/Projects/Nevow:/Users/dp/Projects/helloworld
-^D</pre>
-
-    <h2>Conclusion</h2>
-
-    <p>
-      Nevow may be deployed in a number of environments, from the most
-      restrictive to the most permissive. Writing a CGI can be an easy way to
-      try out the Nevow templating mechanism, but can be slow. A long-running
-      application server process can be a good way to get good performance as
-      well as additional features such as in-memory server-side sessions,
-      advanced automatic form handling with formless, and live page updating
-      features such as nevow.livepage and nevow.canvas.
-    </p>
-
-    <p>
-      Which deployment option you choose will depend on the amount of control
-      you have over your deployment environment, and what advanced features
-      your application will require.
-    </p>
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/gettingstarted.xhtml'
--- Nevow/doc/howto/gettingstarted.xhtml	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/gettingstarted.xhtml	1970-01-01 00:00:00 +0000
@@ -1,110 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Getting Started
-    </title>
-  </head>
-  <body>
-    <h1>Getting Started</h1>
-
-    <p>
-      Warning: This document has only just been started. It's not going to get
-      you very far right now.
-    </p>
-
-    <p>
-      Nevow is a reasonably large library and can be quite daunting at
-      first. This document's aim is to guide the first time user in building a
-      Nevow application.
-    </p>
-
-    <h2>Our First Application</h2>
-
-    <p>
-      Let's dive straight in, here's the code for our first (very, very simple)
-      application. Create the following module, helloworld.py:
-    </p>
-
-    <a href="listings/gettingstarted/helloworld.py" class="py-listing">
-      helloworld.py
-    </a>
-
-    <p>
-      It looks quite simple but let's walk through it anyway.
-    </p>
-
-    <p>
-      First, we import two Nevow modules. <code
-      class="API">nevow.loaders</code> contains template loaders of which the
-      two most useful are <code class="API" base="nevow.loaders">xmlfile</code>
-      and <code class="API" base="nevow.loaders">stan</code>.
-      <code>xmlfile</code> can load any well-formed XML (i.e. XHTML) file;
-      <code>stan</code> loads a stan tree (more on these later). The other
-      module, <code class="API">nevow.rend</code>, contains all Nevow's
-      standard renders, many of which we'll meet in this document.
-    </p>
-
-    <p>
-      We then define the <code>HelloWorld</code> class that subclasses <code
-      class="API" base="nevow">rend.Page</code>, Nevow's main resource
-      class. <code>HelloWorld</code> has two class
-      attributes. <code>addSlash</code> tells <code>rend.Page</code> to
-      redirect to a version of the request URL that ends in a <code>/</code> if
-      necessary. You generally want to set this to <code>True</code> for the
-      root resource.  <code>docFactory</code> tells the page instance where to
-      get the template from. In this case we're providing a loader that parses
-      an HTML file (not shown) from disk.
-    </p>
-
-    <p>
-      Hmm, ok I hear you say but how do I see it. Well, Twisted provides a good
-      web server which we can use. Twisted also includes a clever little
-      application for starting Twisted applications. Here's the helloworld.tac
-      file, a Twisted Application Configuration:
-    </p>
-
-    <a href="listings/gettingstarted/helloworld.tac" class="py-listing">
-      helloworld.tac
-    </a>
-
-    <p>
-      Give it a go, run the following and connect to <a
-      href="http://localhost:8080/";>http://localhost:8080/</a> to see your
-      application:
-    </p>
-
-    <pre>twistd -ny helloworld.tac</pre>
-
-    <p>
-      You'll probably notice that you get log output on the console. This is
-      just one of the good things that twistd does. It can also daemonize the
-      application, shed privileges if run as root, etc.
-    </p>
-
-    <p>
-      TAC files are covered in more detail in the Twisted documentation but
-      let's quickly explain what all this does anyway.
-    </p>
-
-    <p>
-      When <code class="shell">twistd</code> starts up it loads the
-      <code>.tac</code> file (it's just Python) and looks for the attribute
-      called <code>application</code>. When <code class="shell">twistd</code>
-      is all ready to go it starts the <code>application</code>.
-    </p>
-
-    <p>
-      The application is not much use unless it actually does something so the
-      next thing we do is create a <code class="API"
-      base="nevow.appserver">NevowSite</code> instance, <code>site</code>, and
-      pass it a root resource, a <code>HelloWorld</code> instance. Finally, we
-      create a TCP server that makes the site available on port 8080 and bind
-      the server to the application to ensure the server is started when the
-      application is started.
-    </p>
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/glossary.xhtml'
--- Nevow/doc/howto/glossary.xhtml	2010-04-06 11:05:45 +0000
+++ Nevow/doc/howto/glossary.xhtml	1970-01-01 00:00:00 +0000
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Glossary
-    </title>
-  </head>
-  <body>
-    <h1>Glossary</h1>
-
-    <h2>Object Traversal</h2>
-
-    <p>
-      The process by which a Python object is located to render HTML for a
-      given HTTP URL. For example, given the URL http://example.com/foo/bar,
-      Object Traversal will begin at the "Root Resource" object by asking it
-      for an object which is capable of rendering the page at ('foo',
-      'bar'). The "Root Resource" returns an object and a list of unhandled
-      path segments, and the traversal continues across this new Resource
-      object until all path segments have been consumed.
-    </p>
-
-    <h2>Page Rendering</h2>
-
-    <p>
-      The process by which a Python object, usually a rend.Page subclass, turns
-      itself into HTML. Page Rendering involves locating some page data,
-      loading a template document, and applying the template to the data, in
-      the process generating HTML.
-    </p>
-
-    <h2>Deployment Environment</h2>
-
-    <p>
-      The environment in which a Nevow application is deployed. Generally
-      involves an HTTP server which is configured to route certain (or all)
-      HTTP requests through the Nevow Object Traversal and Page Rendering
-      process. Deployment environments include CGI, WSGI, and twisted.web.
-    </p>
-
-    <h2>DOM</h2>
-
-    <p>
-      Document Object Model. A tree of objects which represent the structure of
-      an XHTML document in memory. Nevow uses a nonstandard DOM named "stan",
-      which is made up of simple Python lists, dicts, strings, and
-      nevow.stan.Tag instances.
-    </p>
-
-    <h2>Flattener</h2>
-
-    <p>
-      A Python function which knows how to translate from a rich type to a
-      string containing HTML. For example, the integer flattener calls str() on
-      the integer. The string flattener escapes characters which are unsafe in
-      HTML, such as &lt;, &gt;, and &amp;.
-    </p>
-
-    <h2>Tag</h2>
-
-    <p>
-      A class, defined at nevow.stan.Tag, which holds information about a
-      single HTML tag in a DOM. Tag instances have three attributes: tagName,
-      attributes, and children. tagName is a string indicating the tag
-      name. attributes is a dict indicating the HTML attributes of that
-      node. children is a list indicating the child nodes of that node.
-    </p>
-
-    <h2>Tag Specials</h2>
-
-    <p>
-      A Tag attribute which is "special" to nevow. Tag specials include data,
-      render, pattern, slot, and macro. Tag Specials will never be output as
-      HTML attributes of tags, but will be used by the internal Nevow rendering
-      process to influence how the Tag is rendered.
-    </p>
-
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/index.xhtml'
--- Nevow/doc/howto/index.xhtml	2008-09-20 01:06:47 +0000
+++ Nevow/doc/howto/index.xhtml	1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Manual
-    </title>
-  </head>
-  <body>
-    <h1>
-      Manual
-    </h1>
-    <ul class="toc">
-      <li>
-        <a href="intro.xhtml">Introduction</a>
-      </li>
-      <li>
-        <a href="gettingstarted.xhtml">Getting Started</a>
-        <p>A basic introduction to rendering a web page in Nevow.</p>
-      </li>
-      <li>
-        <a href="traversal.xhtml">Object Traversal</a>
-        <p>Getting from an URL to a Python page object you want to render.</p>
-      </li>
-      <li>
-        <a href="publishing.xhtml">Object Publishing</a>
-        <p>Exposing Python objects as parts of a web page in Nevow.</p>
-      </li>
-      <li>
-        <a href="xmltemplates.xhtml">XML Templates</a>
-        <p>Using standard XHTML as a template for Nevow.</p>
-      </li>
-      <li>
-        <a href="deployment.xhtml">Deployment</a>
-        <p>How to get your Nevow application running on different types of
-          servers.</p>
-      </li>
-      <li>
-        <a href="chattutorial/index.xhtml">Nevow Athena</a>
-        <p>Two-way communication with JavaScript in a web browser.</p>
-      </li>
-      <li>
-        <a href="glossary.xhtml">Glossary</a>
-      </li>
-    </ul>
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/intro.xhtml'
--- Nevow/doc/howto/intro.xhtml	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/intro.xhtml	1970-01-01 00:00:00 +0000
@@ -1,294 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      A Web Application Construction Kit
-    </title>
-  </head>
-  <body>
-    <h1>A Web Application Construction Kit</h1>
-
-    <h2>Summary</h2>
-
-    <p>
-      Nevow is a next-generation web application templating system, based on
-      the ideas developed in the Twisted Woven package. Its main focus is on
-      separating the HTML template from both the business logic and the display
-      logic, while allowing the programmer to write pure Python code as much as
-      possible. It separates your code into 'data' and 'render' functions, a
-      simplified implementation of traditional MVC. It has various parts which
-      can be used individually or as a whole, integrated web solution:
-    </p>
-
-    <ul>
-      <li>
-        XHTML templates: contain no programming logic, only nodes tagged with
-        nevow attributes
-      </li>
-      <li>
-        data/render methods: simplified MVC
-      </li>
-      <li>
-        stan: An s-expression-like syntax for expressing xml in pure python
-      </li>
-      <li>
-        formless: For describing the types of objects which may be passed to
-        methods of your classes, validating and coercing string input from
-        either web or command-line sources, and calling your methods
-        automatically once validation passes
-      </li>
-      <li>
-        formless.webform: For rendering web forms based on formless type
-        descriptions, accepting form posts and passing them to formless
-        validators, and rendering error forms in the event validation fails
-      </li>
-      <li>
-        livepage: Cross-browser JavaScript glue for sending client side events
-        to the server and server side events to the client after the page has
-        loaded, without causing the entire page to refresh
-      </li>
-    </ul>
-
-    <h2>Disk based templates</h2>
-
-    <p>
-      Nevow includes the ability to load templates off disk. These templates
-      may have processing directives which cause the execution of python
-      methods at render time. The attribute technique was inspired by the
-      attributes used by ZPT.  However, no actual code may be embedded in the
-      HTML template:
-    </p>
-
-    <pre>
-&lt;html xmlns:nevow="http://nevow.com/ns/nevow/0.1"&gt;
-  &lt;head&gt;
-    &lt;title&gt;Greetings!&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    &lt;h1 style="font-size: large"&gt;Now I will greet you:&lt;/h1&gt;
-    &lt;span nevow:render="greet" /&gt;
-  &lt;/body&gt;
-&lt;/html&gt;</pre>
-
-    <p>
-      This template can then be loaded and rendered like so:
-    </p>
-
-    <pre class="python">
-class Greeter(rend.Page):
-    docFactory = loaders.xmlfile("Greeting.html")
-
-    def render_greet(self, context, data):
-        return random.choice(["Hello", "Greetings", "Hi"]), " ", data
-
-Greeter("My name is").renderString()
-    </pre>
-
-    <h2>data/render methods</h2>
-
-    <p>
-      To allow clean isolation between code which fetches data from a data
-      source and code which renders the data into HTML, nevow allows you to
-      write both 'data' methods and 'render' methods. These concepts are
-      inspired by MVC, but simpler, since the framework can handle most of the
-      controller aspect. An example:
-    </p>
-
-    <pre>
-&lt;html xmlns:nevow="http://nevow.com/ns/nevow/0.1"&gt;
-  &lt;body&gt;
-    &lt;span nevow:data="name" nevow:render="colorful" /&gt;
-    &lt;span nevow:data="fun" nevow:render="colorful" /&gt;
-  &lt;/body&gt;
-&lt;/html&gt;</pre>
-
-    <p>
-      This template can be loaded and rendered using a class such as this:
-    </p>
-
-    <pre class="python">
-class Colorful(rend.Page):
-    docFactory = loaders.xmlfile("Colorful.html")
-
-    def render_colorful(self, context, data):
-        color = random.choice(['red', 'green', 'blue'])
-        return context.tag(style="color: %s" % color)
-
-    def data_name(self, context, data):
-        return "Your name here"
-
-    def data_fun(self, context, data):
-        return "Are we having fun yet?"
-    </pre>
-
-    <h2>Stan</h2>
-
-    <p>
-      One of the most powerful things about nevow is stan, an s-expression-like
-      syntax for producing XML fragments in pure Python syntax. Stan is not
-      required for using nevow, but it is both a simple and powerful way to
-      both lay out one's XHTML templates and express one's display logic. A
-      brief example will illustrate its utility:
-    </p>
-
-    <pre class="python">
-import random
-from nevow import rend, tags
-
-class Greeter(rend.Page):
-    def greet(self, context, data):
-        return random.choice(["Hello", "Greetings", "Hi"]), " ", data
-
-    docFactory = loaders.stan(
-        tags.html[
-        tags.head[ tags.title[ "Greetings!" ]],
-        tags.body[
-            tags.h1(style="font-size: large")[ "Now I will greet you:" ],
-            greet
-        ]
-    ])
-    </pre>
-
-    <p>
-      When the Greeter class is constructed, it is passed a Python object which
-      will be used as that page's data:
-    </p>
-
-    <pre class="python">
-Greeter("Your name here").renderString()
-    </pre>
-
-    <h2>Formless</h2>
-
-    <p>
-      Python is dynamically typed, which means it has no built-in controls for
-      enforcing the types of objects which are passed to one's methods. This is
-      great for programmers, but not necessarily great if you are going to be
-      passing user-entered input to those methods. Formless is a simple way to
-      describe the types of objects that can be passed to one's methods, as
-      well as coerce from string input to those types. Other code can then
-      accept user input from a command line or from a web form, validate the
-      input against the types described using formless, and call the method
-      once validation has passed. A simple example:
-    </p>
-
-    <pre class="python">
-from zope.interface import implements
-from formless.annotate import TypedInterface, Integer, String
-
-class ISimpleMethod(TypedInterface):
-    def simple(self,
-               name=String(description="Your name."),
-               age=Integer(description="Your age.")):
-        """
-        Simple
-
-        Please enter your name and age.
-        """
-
-class Implementation(object):
-    implements(ISimpleMethod)
-
-    def simple(self, name, age):
-        print "Hello, %s, who is %s" % (name, age)
-    </pre>
-
-    <h2>Webform</h2>
-
-    <p>
-      Webform is a nevow module which will automatically render web forms and
-      accept form posts based on types described using the classes in
-      formless. Used in conjunction with the twisted.web HTTP server, the
-      process is almost automatic:
-    </p>
-
-    <pre class="python">
-from nevow import rend, tags
-from formless import webform
-
-class WebForm(rend.Page):
-    document = rend.stan(
-    tags.html[
-    tags.body[
-        h1["Here is the form:"],
-        webform.renderForms('original')
-    ]
-])
-
-resource = WebForm(Implementation())
-    </pre>
-
-    <p>
-      Exposing this resource instance to the web using twisted.web and visiting
-      it will cause a form with two input boxes to be rendered. Posting the
-      form will cause form validation to occur. Upon error, the user will be
-      returned to the original page, with the form annotated with error
-      messages. Upon success, the "simple" method of the Implementation
-      instance will be called and passed a string and an integer.
-    </p>
-
-    <h2>LivePage</h2>
-
-    <p>
-      LivePage was a Woven technology which allowed programmers to receive
-      server-side notification of client-side JavaScript events, and to send
-      JavaScript to the client in response to a server-side event. New for
-      Nevow 0.3, LivePage has been updated to support Mozilla, Firefox, IE6
-      Win, and Safari. Using LivePage is very easy:
-    </p>
-
-    <pre class="python">
-from nevow.liveevil import handler
-
-def greeter(client, nodeName):
-    client.alert("Greetings. You clicked the %s node." % nodeName)
-
-# Any string arguments after the event handler function will be evaluated
-# as JavaScript in the context of the web browser and results passed to the
-# Python event handler
-handler = handler(greeter, 'node.name')
-
-class Live(rend.Page):
-    docFactory = loaders.stan(
-        tags.html[
-        tags.body[
-            ol[
-                li(onclick=handler, name="one")["One"]
-                li(onclick=handler, name="two")["Two"]
-                li(onclick=handler, name="three")["Three"]
-            ]
-        ]
-    ])
-    </pre>
-
-    <h2>More Information</h2>
-
-    <p>
-      The <a href="http://divmod.org/trac/wiki/DivmodNevow";>Nevow website</a>
-      has more information. Starting with 0.3, it contains a simple WSGI
-      implementation and can also be used to render CGIs. However, the
-      recommended mode of operation is using the <a
-      href="http://twistedmatrix.com/trac/wiki/TwistedWeb";>Twisted web</a>
-      server. Nevow is an active project, and many new bugfixes and features
-      are committed to the Nevow SVN repository. Information about Nevow
-      commits is available by subscribing to the <a
-      href="http://divmod.net/users/mailman.twistd/listinfo/divmod-commits";>
-      Divmod commits</a> mailing list. The Nevow SVN repository can be checked
-      out using:
-    </p>
-
-    <pre>svn co svn://divmod.org/svn/Nevow/trunk Nevow</pre>
-
-    <p>
-      Discussion of Nevow occurs on the <a
-      href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web";>
-      twisted.web mailing list</a>. The Nevow developers are also often
-      available for real-time help on the <a
-      href="irc://irc.freenode.net/#twisted.web">#twisted.web channel</a> on
-      irc.freenode.net.
-    </p>
-  </body>
-</html>

=== removed directory 'Nevow/doc/howto/listings'
=== removed directory 'Nevow/doc/howto/listings/gettingstarted'
=== removed file 'Nevow/doc/howto/listings/gettingstarted/helloworld.py'
--- Nevow/doc/howto/listings/gettingstarted/helloworld.py	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/listings/gettingstarted/helloworld.py	1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
-from nevow import loaders, rend
-
-class HelloWorld(rend.Page):
-    addSlash = True
-    docFactory = loaders.xmlfile('helloworld.html')
-

=== removed file 'Nevow/doc/howto/listings/gettingstarted/helloworld.tac'
--- Nevow/doc/howto/listings/gettingstarted/helloworld.tac	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/listings/gettingstarted/helloworld.tac	1970-01-01 00:00:00 +0000
@@ -1,10 +0,0 @@
-from twisted.application import internet
-from twisted.application import service
-from nevow import appserver
-import helloworld
-
-application = service.Application('helloworld')
-site = appserver.NevowSite(helloworld.HelloWorld())
-webServer = internet.TCPServer(8080, site)
-webServer.setServiceParent(application)
-

=== removed file 'Nevow/doc/howto/publishing.xhtml'
--- Nevow/doc/howto/publishing.xhtml	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/publishing.xhtml	1970-01-01 00:00:00 +0000
@@ -1,658 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Object Publishing
-    </title>
-  </head>
-  <body>
-    <h1>
-      Object Publishing
-    </h1>
-
-    <p>
-      In <a href="traversal.xhtml">Object Traversal</a>, we learned about the
-      <code class="API">nevow.inevow.IResource.renderHTTP</code> method, which
-      is the most basic way to send HTML to a browser when using
-      Nevow. However, it is not very convenient (or clean) to generate HTML
-      tags by concatenating strings in Python code. In the <a
-      href="deployment.xhtml">Deployment</a> documentation, we saw that it was
-      possible to render a <em>Hello World</em> page using a <code class="API">
-      nevow.rend.Page</code> subclass and providing a <code>docFactory</code>:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; from nevow import rend, loaders
-&gt;&gt;&gt; class HelloWorld(rend.Page):
-...     docFactory = loaders.stan("Hello, world!")
-...
-&gt;&gt;&gt; HelloWorld().renderSynchronously()
-'Hello, world!'</pre>
-
-    <p>
-      This example does nothing interesting, but the concept of a loader is
-      important in Nevow. The <code>rend.Page.renderHTTP</code> implementation
-      always starts rendering HTML by loading a template from the
-      <code>docFactory</code>.
-    </p>
-
-
-    <h2>The stan DOM</h2>
-
-    <p>
-      Nevow uses a DOM-based approach to rendering HTML. A tree of objects is
-      first constructed in memory by the template loader. This tree is then
-      processed one node at a time, applying functions which transform from
-      various Python types to HTML strings.
-    </p>
-
-    <p>
-      Nevow uses a nonstandard DOM named "stan". Unlike the W3C DOM, stan is
-      made up of simple python lists, strings, and instances of the
-      nevow.stan.Tag class.  During the rendering process, "Flattener"
-      functions convert from rich types to HTML strings. For example, we can
-      load a template made up of some nested lists and Python types, render it,
-      and see what happens:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; class PythonTypes(rend.Page):
-...     docFactory = loaders.stan(["Hello", 1, 1.5, True, ["Goodbye", 3]])
-...
-&gt;&gt;&gt; PythonTypes().renderSynchronously()
-'Hello11.5TrueGoodbye3'</pre>
-
-    <h2>Tag instances</h2>
-
-    <p>
-      So far, we have only rendered simple strings as output. However, the main
-      purpose of Nevow is HTML generation. In the stan DOM, HTML tags are
-      represented by instances of the <code class="API">nevow.stan.Tag</code>
-      class. <code>Tag</code> is a very simple class, whose instances have an
-      <code>attributes</code> dictionary and a <code>children</code> list. The
-      <code>Tag</code> flattener knows how to recursively flatten attributes
-      and children of the tag.  To show you how <code>Tag</code>s really work
-      before you layer Nevow's convenience syntax on top, try this horrible
-      example:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; from nevow import stan
-&gt;&gt;&gt; h = stan.Tag('html')
-&gt;&gt;&gt; d = stan.Tag('div')
-&gt;&gt;&gt; d.attributes['style'] = 'border: 1px solid black'
-&gt;&gt;&gt; h.children.append(d)
-&gt;&gt;&gt; class Tags(rend.Page):
-...     docFactory = loaders.stan(h)
-...
-&gt;&gt;&gt; Tags().renderSynchronously()
-'&lt;html&gt;&lt;div style="border: 1px solid black"&gt;&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      So, we see how it is possible to programatically generate HTML by
-      constructing and nesting stan <code>Tag</code> instances. However, it is
-      far more convenient to use the overloaded operators <code>Tag</code>
-      provides to manipulate them. <code>Tag</code> implements a
-      <code>__call__</code> method which takes any keyword arguments and values
-      and updates the attributes dictionary; it also implements a
-      <code>__getitem__</code> method which takes whatever is between the square
-      brackets and appends them to the children list. A simple example should
-      clarify things:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; class Tags2(rend.Page):
-...     docFactory = loaders.stan(stan.Tag('html')[stan.Tag('div')(style="border: 1px solid black")])
-...
-&gt;&gt;&gt; Tags2().renderSynchronously()
-'&lt;html&gt;&lt;div style="border: 1px solid black"&gt;&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      This isn't very easy to read, but luckily we can simplify the example
-      even further by using the nevow.tags module, which is full of "Tag
-      prototypes" for every tag type described by the XHTML 1.0 specification:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; class Tags3(rend.Page):
-...     docFactory = loaders.stan(tags.html[tags.div(style="border: 1px solid black")])
-...
-&gt;&gt;&gt; Tags3().renderSynchronously()
-'&lt;html&gt;&lt;div style="border: 1px solid black"&gt;&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      Using stan syntax is not the only way to construct template DOM for use
-      by the Nevow rendering process. Nevow also includes <code class="API"
-      base="nevow">loaders.xmlfile</code> which implements a simple tag
-      attribute language similar to the Zope Page Templates (ZPT) Tag Attribute
-      Language (TAL). However, experience with the stan DOM should give you
-      insight into how the Nevow rendering process really works. Rendering a
-      template into HTML in Nevow is really nothing more than iterating a tree
-      of objects and recursively applying "Flattener" functions to objects in
-      this tree, until all HTML has been generated.
-    </p>
-
-    <h2>Functions in the DOM</h2>
-
-    <p>
-      So far, all of our examples have generated static HTML pages, which is
-      not terribly interesting when discussing dynamic web applications. Nevow
-      takes a very simple approach to dynamic HTML generation. If you put a
-      Python function reference in the DOM, Nevow will call it when the page is
-      rendered. The return value of the function replaces the function itself
-      in the DOM, and the results are flattened further. This makes it easy to
-      express looping and branching structures in Nevow, because normal Python
-      looping and branching constructs are used to do the job:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; def repeat(ctx, data):
-...     return [tags.div(style="color: %s" % (color, ))
-...         for color in ['red', 'blue', 'green']]
-...
-&gt;&gt;&gt; class Repeat(rend.Page):
-...     docFactory = loaders.stan(tags.html[repeat])
-...
-&gt;&gt;&gt; Repeat().renderSynchronously()
-'&lt;html&gt;&lt;div style="color: red"&gt;&lt;/div&gt;&lt;div style="color: blue"&gt;&lt;/div&gt;&lt;div style="color: green"&gt;&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      However, in the example above, the repeat function isn't even necessary,
-      because we could have inlined the list comprehension right where we
-      placed the function reference in the DOM. Things only really become
-      interesting when we begin writing parameterized render functions which
-      cause templates to render differently depending on the input to the web
-      application.
-    </p>
-
-    <p>
-      The required signature of functions which we can place in the DOM is
-      (ctx, data). The "context" object is essentially opaque for now, and we
-      will learn how to extract useful information out of it later. The "data"
-      object is anything we want it to be, and can change during the rendering
-      of the page. By default, the data object is whatever we pass as the first
-      argument to the Page constructor, <em>or</em> the Page instance itself if
-      nothing is passed. Armed with this knowledge, we can create a Page which
-      renders differently depending on the data we pass to the Page
-      constructor:
-    </p>
-
-    <pre class="python">
-class Root(rend.Page):
-    docFactory = loaders.stan(tags.html[
-        tags.h1["Welcome."],
-        tags.a(href="foo")["Foo"],
-        tags.a(href="bar")["Bar"],
-        tags.a(href="baz")["Baz"]])
-
-    def childFactory(self, ctx, name):
-        return Leaf(name)
-
-def greet(ctx, name):
-    return "Hello. You are visiting the ", name, " page."
-
-class Leaf(rend.Page):
-    docFactory = loaders.stan(tags.html[greet])
-    </pre>
-
-    <p>
-      Armed with this knowledge and the information in the <a
-      href="traversal.xhtml">Object Traversal</a> documentation, we now have
-      enough information to create dynamic websites with arbitrary URL
-      hierarchies whose pages render dynamically depending on which URL was
-      used to access them.
-    </p>
-
-    <h2>Accessing query parameters and form post data</h2>
-
-    <p>
-      Before we move on to more advanced rendering techniques, let us first
-      examine how one could further customize the rendering of a Page based on
-      the URL query parameters and form post information provided to us by a
-      browser. Recall that URL parameters are expressed in the form:
-    </p>
-
-    <pre>http://example.com/foo/bar?baz=1&amp;quux=2</pre>
-
-    <p>
-      And form post data can be generated by providing a form to a browser:
-    </p>
-
-    <pre>
-&lt;form action="" method="POST"&gt;
-  &lt;input type="text" name="baz" /&gt;
-  &lt;input type="text" name="quux" /&gt;
-  &lt;input type="submit" /&gt;
-&lt;/form&gt;</pre>
-
-    <p>
-      Accessing this information is such a common procedure that Nevow provides
-      a convenience method on the context to do it. Let's examine a simple page
-      whose output can be influenced by the query parameters in the URL used to
-      access it:
-    </p>
-
-    <pre class="python">
-def showChoice(ctx, data):
-    choice = ctx.arg('choice')
-    if choice is None:
-        return ''
-    return "You chose ", choice, "."
-
-class Custom(rend.Page):
-    docFactory = loaders.stan(tags.html[
-        tags.a(href="?choice=baz")["Baz"],
-        tags.a(href="?choice=quux")["Quux"],
-        tags.p[showChoice]])
-    </pre>
-
-    <p>
-      The procedure is exactly the same for simple form post information:
-    </p>
-
-    <pre class="python">
-def greet(ctx, data):
-    name = ctx.arg('name')
-    if name is None:
-        return ''
-    return "Greetings, ", name, "!"
-
-class Form(rend.Page):
-    docFactory = loaders.stan(tags.html[
-        tags.form(action="", method="POST")[
-            tags.input(name="name"),
-            tags.input(type="submit")],
-        greet])
-</pre>
-
-    <p>
-      Note that <code>ctx.arg</code> returns only the first argument with the
-      given name. For complex cases where multiple arguments and lists of
-      argument values are required, you can access the request argument
-      dictionary directly using the syntax:
-    </p>
-
-    <pre class="python">
-def arguments(ctx, data):
-    args = inevow.IRequest(ctx).args
-    return "Request arguments are: ", str(args)
-    </pre>
-
-    <h2>Generators in the DOM</h2>
-
-    <p>
-      One common operation when building dynamic pages is iterating a list of
-      data and emitting some HTML for each item. Python generators are well
-      suited for expressing this sort of logic, and code which is written as a
-      python generator can perform tests (<code>if</code>) and loops of various
-      kinds (<code>while</code>, <code>for</code>) and emit a row of html
-      whenever it has enough data to do so. Nevow can handle generators in the
-      DOM just as gracefully as it can handle anything else:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; from nevow import rend, loaders, tags
-&gt;&gt;&gt; def generate(ctx, items):
-...     for item in items:
-...         yield tags.div[ item ]
-...
-&gt;&gt;&gt; class List(rend.Page):
-...     docFactory = loaders.stan(tags.html[ generate ])
-...
-&gt;&gt;&gt; List(['one', 'two', 'three']).renderSynchronously()
-'&lt;html&gt;&lt;div&gt;one&lt;/div&gt;&lt;div&gt;two&lt;/div&gt;&lt;div&gt;three&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      As you can see, generating HTML inside of functions or generators can be
-      very convenient, and can lead to very rapid application
-      development. However, it is also what I would call a "template
-      abstraction violation", and we will learn how we can keep knowledge of
-      HTML out of our python code when we learn about patterns and slots.
-    </p>
-
-    <h2>Methods in the DOM</h2>
-
-    <p>
-      Up until now, we have been placing our template manipulation logic inside
-      of simple Python functions and generators. However, it is often
-      appropriate to use a method instead of a function. Nevow makes it just as
-      easy to use a method to render HTML:
-    </p>
-
-    <pre class="python">
-class MethodRender(rend.Page):
-    def __init__(self, foo):
-        self.foo = foo
-
-    def render_foo(self, ctx, data):
-        return self.foo
-
-    docFactory = loaders.stan(tags.html[ render_foo ])
-    </pre>
-
-    <p>
-      Using render methods makes it possible to parameterize your Page class
-      with more parameters. With render methods, you can also use the Page
-      instance as a state machine to keep track of the state of the
-      render. While Nevow is designed to allow you to render the same Page
-      instance repeatedly, it can also be convenient to know that a Page
-      instance will only be used one time, and that the Page instance can be
-      used as a scratch pad to manage information about the render.
-    </p>
-
-    <h2>Data specials</h2>
-
-    <p>
-      Previously we saw how passing a parameter to the default Page constructor
-      makes it available as the "data" parameter to all of our render
-      methods. This "data" parameter can change as the page render proceeds,
-      and is a useful way to ensure that render functions are isolated and only
-      act upon the data which is available to them. Render functions which do
-      not pull information from sources other than the "data" parameter are
-      more easily reusable and can be composed into larger parts more easily.
-    </p>
-
-    <p>
-      Deciding which data gets passed as the data parameter is as simple as
-      changing the "Data special" for a Tag. See the <a
-      href="glossary.xhtml">Glossary</a> under "Tag Specials" for more
-      information about specials. Assigning to the data special is as simple as
-      assigning to a tag attribute:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; def hello(ctx, name):
-...     return "Hello, ", name
-...
-&gt;&gt;&gt; class DataSpecial(rend.Page):
-...     docFactory = loaders.stan(tags.html[
-...     tags.div(data="foo")[ hello ],
-...     tags.div(data="bar")[ hello ]])
-...
-&gt;&gt;&gt; DataSpecial().renderSynchronously()
-'&lt;html&gt;&lt;div&gt;Hello, foo&lt;/div&gt;&lt;div&gt;Hello, bar&lt;/div&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      Data specials may be assigned any python value. Data specials are only in
-      scope during the rendering of the tag they are assigned to, so if the
-      "hello" renderer were placed in the DOM inside the html node directly,
-      "Hello, None" would be output.
-    </p>
-
-    <p>
-      Before data is passed to a render function, Nevow first checks to see if
-      there is an <code class="API">IGettable</code> adapter for it. If there
-      is, it calls <code>IGettable.get()</code>, and passes the result of this
-      as the data parameter instead. Nevow includes an <code>IGettable</code>
-      adapter for python functions, which means you can set a Tag data special
-      to a function reference and Nevow will call it to obtain the data when
-      the Tag is rendered. The signature for data methods is similar to that of
-      render methods, (ctx, data). For example:
-    </p>
-
-    <pre class="python">
-def getName(ctx, data):
-    return ctx.arg('name')
-
-def greet(ctx, name):
-    return "Greetings, ", name
-
-class GreetName(rend.Page):
-    docFactory = loaders.stan(tags.html[
-        tags.form(action="")[
-            tags.input(name="name"),
-            tags.input(type="submit")],
-            tags.div(data=getName)[ greet ]])
-    </pre>
-
-    <p>
-      Data specials exist mainly to allow you to construct and enforce a
-      Model-View-Controller style separation of the Model code from the
-      View. Here we see that the greet function is capable of rendering a
-      greeting view for a name model, and that the implementation of getName
-      may change without the view code changing.
-    </p>
-
-    <h2>Render specials</h2>
-
-    <p>
-      Previously, we have seen how render functions can be placed directly in
-      the DOM, and the return value replaces the render function in the
-      DOM. However, these free functions and methods are devoid of any
-      contextual information about the template they are living in. The
-      render special is a way to associate a render function or method with a
-      particular Tag instance, which the render function can then examine to
-      decide how to render:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; def alignment(ctx, data):
-...     align = ctx.tag.attributes.get('align')
-...     if align == 'right':
-...         return ctx.tag["Aligned right"]
-...     elif align == 'center':
-...         return ctx.tag["Aligned center"]
-...     else:
-...         return ctx.tag["Aligned left"]
-...
-&gt;&gt;&gt; class AlignmentPage(rend.Page):
-...     docFactory = loaders.stan(tags.html[
-...     tags.p(render=alignment),
-...     tags.p(render=alignment, align="center"),
-...     tags.p(render=alignment, align="right")])
-...
-&gt;&gt;&gt; AlignmentPage().renderSynchronously()
-'&lt;html&gt;&lt;p&gt;Aligned left&lt;/p&gt;&lt;p align="center"&gt;Aligned center&lt;/p&gt;&lt;p align="right"&gt;Aligned right&lt;/p&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      Note how the alignment renderer has access to the template node as
-      <code>ctx.tag</code>. It can examine and change this node, and the return value of
-      the render function replaces the original node in the DOM. Note that
-      here we are returning the template node after changing it. We will see
-      later how we can instead mutate the context and use slots so that the
-      knowledge the renderer requires about the structure of the template is
-      reduced even more.
-    </p>
-
-    <h2>Pattern specials</h2>
-
-    <p>
-      When writing render methods, it is easy to inline the construction of
-      Tag instances to generate HTML programatically. However, this creates a
-      template abstraction violation, where part of the HTML which will show
-      up in the final page output is hidden away inside of render methods
-      instead of inside the template. Pattern specials are designed to avoid
-      this problem. A node which has been tagged with a pattern special can
-      then be located and copied by a render method. The render method does
-      not need to know anything about the structure or location of the
-      pattern, only it's name.
-    </p>
-
-    <p>
-      We can rewrite our previous generator example so that the generator
-      does not have to know what type of tag the template designer would like
-      repeated for each item in the list:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; from nevow import rend, loaders, tags, inevow
-&gt;&gt;&gt; def generate(ctx, items):
-...     pat = inevow.IQ(ctx).patternGenerator('item')
-...     for item in items:
-...         ctx.tag[ pat(data=item) ]
-...     return ctx.tag
-...
-&gt;&gt;&gt; def string(ctx, item):
-...     return ctx.tag[ str(item) ]
-...
-&gt;&gt;&gt; class List(rend.Page):
-...     docFactory = loaders.stan(tags.html[
-...     tags.ul(render=generate)[
-...         tags.li(pattern="item", render=string)]])
-...
-&gt;&gt;&gt; List([1, 2, 3]).renderSynchronously()
-'&lt;html&gt;&lt;ol&gt;&lt;li&gt;1&lt;/li&gt;&lt;li&gt;2&lt;/li&gt;&lt;li&gt;3&lt;/li&gt;&lt;/ol&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      Note that we have to mutate the tag in place and repeatedly copy the
-      item pattern, applying the item as the data special to the resulting
-      Tag. It turns out that this is such a common operation that nevow comes
-      out of the box with these two render functions:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; class List(rend.Page):
-...     docFactory = loaders.stan(tags.html[
-...     tags.ul(render=rend.sequence)[
-...         tags.li(pattern="item", render=rend.data)]])
-...
-&gt;&gt;&gt; List([1, 2, 3]).renderSynchronously()
-'&lt;html&gt;&lt;ul&gt;&lt;li&gt;1&lt;/li&gt;&lt;li&gt;2&lt;/li&gt;&lt;li&gt;3&lt;/li&gt;&lt;/ul&gt;&lt;/html&gt;'</pre>
-
-    <h2>Slot specials</h2>
-
-    <p>
-      The problem with render methods is that they are only capable of making
-      changes to their direct children. Because of the architecture of Nevow,
-      they should not attempt to change grandchildren or parent nodes. It is
-      possible to write one render method for every node you wish to change,
-      but there is a better way. A node with a slot special can be "filled"
-      with content by any renderer above the slot. Creating a slot special is
-      such a frequent task that there is a prototype in <code>nevow.tags</code>
-      which is usually used.
-    </p>
-
-    <p>
-      Let us examine a renderer which fills a template with information about
-      a person:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; from nevow import loaders, rend, tags
-...
-&gt;&gt;&gt; person = ('Donovan', 'Preston', 'Male', 'California')
-...
-&gt;&gt;&gt; def render_person(ctx, person):
-...     firstName, lastName, sex, location = person
-...     ctx.fillSlots('firstName', firstName)
-...     ctx.fillSlots('lastName', lastName)
-...     ctx.fillSlots('sex', sex)
-...     ctx.fillSlots('location', location)
-...     return ctx.tag
-...
-&gt;&gt;&gt; class PersonPage(rend.Page):
-...     docFactory = loaders.stan(tags.html(render=render_person)[
-...     tags.table[
-...         tags.tr[
-...             tags.td[tags.slot('firstName')],
-...             tags.td[tags.slot('lastName')],
-...             tags.td[tags.slot('sex')],
-...             tags.td[tags.slot('location')]]]])
-...
-&gt;&gt;&gt; PersonPage(person).renderSynchronously()
-'&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Donovan&lt;/td&gt;&lt;td&gt;Preston&lt;/td&gt;&lt;td&gt;Male&lt;/td&gt;&lt;td&gt;California&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;'</pre>
-
-    <p>
-      Using patterns in combination with slots can lead to very powerful
-      template abstraction. Nevow also includes another standard renderer
-      called "mapping" which takes any data which responds to the "items()"
-      message and inserts the items into appropriate slots:
-    </p>
-
-    <pre class="python-interpreter">
-&gt;&gt;&gt; class DictPage(rend.Page):
-...     docFactory = loaders.stan(tags.html(render=rend.mapping)[
-...         tags.span[ tags.slot('foo') ], tags.span[ tags.slot('bar') ]])
-...
-&gt;&gt;&gt; DictPage(dict(foo=1, bar=2)).renderSynchronously()
-'&lt;html&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/html&gt;'</pre>
-
-    <h2>Data directives</h2>
-
-    <p>
-      So far, we have always placed data functions directly in the Data
-      special attribute of a Tag. Sometimes, it is preferable to look up a
-      data method from the Page class as the Page has being rendered. For
-      example, a base class may define a template and a subclass may provide
-      the implementation of the data method. We can accomplish this effect by
-      using a data directive as a Tag's data special:
-    </p>
-
-    <pre class="python">
-class Base(rend.Page):
-    docFactory = loaders.stan(tags.html[
-        tags.div(data=tags.directive('name'), render=rend.data)])
-
-class Subclass(Base):
-    def data_name(self, ctx, data):
-        return "Your name"
-    </pre>
-
-    <p>
-      The data directive is resolved by searching for the
-      <code>IContainer</code> implementation in the context.
-      <code>rend.Page</code> implements <code>IContainer.get</code> by
-      performing an attribute lookup on the Page with the prefix 'data_*'. You
-      can provide your own <code>IContainer</code> implementation if you wish,
-      and also you should know that <code>IContainer</code> implementations for
-      list and dict are included in the <code class="API">nevow.accessors</code>
-      module.
-    </p>
-
-    <p>
-      A common gotcha is that the closest <code>IContainer</code> is used to
-      resolve data directives. This means that if a list is being used as the
-      data during the rendering process, data directives below this will be
-      resolved against the <code>IContainer</code> implementation in
-      <code>nevow.accessors.ListAccessor</code>. If you are expecting a data
-      directive to invoke a Page's data_* method but instead get a
-      <code>KeyError</code>, this is why.
-    </p>
-
-    <h2>Render directives</h2>
-
-    <p>
-      Render directives are almost exactly the same, except they are resolved
-      using the closest <code>IRendererFactory</code> implementation in the
-      context. Render directives can be used to allow subclasses to override
-      certain render methods, and also can be used to allow Fragments to
-      locate their own prefixed render methods.
-    </p>
-
-    <h2>Flatteners</h2>
-
-    <p>
-      TODO This section isn't done yet.
-    </p>
-
-    <p>
-      Nevow's flatteners use a type/function registry to determine how to
-      render objects which Nevow encounters in the DOM during the rendering
-      process.  "Explicit is better than implicit", so in most cases,
-      explicitly applying render methods to data will be better than
-      registering a flattener, but in some cases it can be useful:
-    </p>
-
-    <pre class="python">
-class Person(object):
-    def __init__(self, firstName, lastName):
-        self.firstName = firstName
-        self.lastName = lastName
-
-def flattenPerson(person, ctx):
-    return flat.partialflatten(ctx, (person.firstName, " ", person.lastName))
-
-from nevow import flat
-flat.registerFlattener(flattenPerson, Person)
-
-def insertData(ctx, data):
-    return data
-
-class PersonPage(rend.Page):
-    docFactory = loaders.stan(tags.html[insertData])
-    </pre>
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/stylesheet.css'
--- Nevow/doc/howto/stylesheet.css	2008-09-20 01:06:47 +0000
+++ Nevow/doc/howto/stylesheet.css	1970-01-01 00:00:00 +0000
@@ -1,129 +0,0 @@
-body
-{
-  margin-left: 2em;
-  margin-right: 2em;
-  border: 0px;
-  padding: 0px;
-  font-family: sans-serif;
-}
-
-pre
-{
-  padding: 1em;
-  font-family: Monospace, Neep Alt, Courier New, Courier;
-  font-size: 12pt;
-  border: thin black solid;
-}
-
-.python
-{
-  background-color: #dddddd;
-}
-
-.py-listing, .html-listing, .listing
-{
-  margin: 1ex;
-  border: thin solid black;
-  background-color: #eee;
-}
-
-.py-listing pre, .html-listing pre, .listing pre
-{
-  margin: 0px;
-  border: none;
-  border-bottom: thin solid black;
-}
-
-.py-listing .python
-{
-  margin-top: 0;
-  margin-bottom: 0;
-  border: none;
-  border-bottom: thin solid black;
-}
-
-.py-src-comment
-{
-  color: #1111CC
-}
-
-.py-src-keyword
-{
-  color: #3333CC;
-  font-weight: bold;
-}
-
-.py-src-parameter
-{
-  color: #000066;
-  font-weight: bold;
-}
-
-.py-src-identifier
-{
-  color: #CC0000
-}
-
-.py-src-string
-{
-  color: #115511
-}
-
-.py-src-endmarker
-{
-  display: block; /* IE hack; prevents following line from being sucked into the py-listing box. */
-}
-
-hr
-{
-  display: inline;
-}
-
-ul
-{
-  padding: 0px;
-  margin: 0px;
-  margin-left: 1em;
-  padding-left: 1em;
-  border-left: 1em;
-}
-
-li
-{
-  padding: 2px;
-}
-
-dt
-{
-  font-weight: bold;
-  margin-left: 1ex;
-}
-
-dd
-{
-  margin-bottom: 1em;
-}
-
-div.note
-{
-  background-color: #FFFFCC;
-  margin-top: 1ex;
-  margin-left: 5%;
-  margin-right: 5%;
-  padding-top: 1ex;
-  padding-left: 5%;
-  padding-right: 5%;
-  border: thin black solid;
-}
-
-.caption
-{
-  text-align: center;
-  padding-top: 0.5em;
-  padding-bottom: 0.5em;
-}
-
-.filename
-{
-  font-style: italic;
-}

=== removed file 'Nevow/doc/howto/template.tpl'
--- Nevow/doc/howto/template.tpl	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/template.tpl	1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml"; lang="en">
-  <head>
-    <title>
-      Nevow:
-    </title>
-    <link type="text/css" rel="stylesheet" href="stylesheet.css" />
-  </head>
-
-  <body bgcolor="white">
-    <h1 class="title"></h1>
-    <div class="toc"></div>
-    <div class="body">
-
-    </div>
-
-    <p><a href="index.html">Index</a></p>
-    <span class="version">Version: </span>
-  </body>
-</html>
-

=== removed file 'Nevow/doc/howto/traversal.xhtml'
--- Nevow/doc/howto/traversal.xhtml	2008-09-26 16:30:04 +0000
+++ Nevow/doc/howto/traversal.xhtml	1970-01-01 00:00:00 +0000
@@ -1,448 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      Object Traversal
-    </title>
-  </head>
-  <body>
-    <h1>Object Traversal</h1>
-
-    <p>
-      <strong>Object traversal</strong> is the process Nevow uses to determine
-      what object to use to render HTML for a particular URL. When an HTTP
-      request comes in to the web server, the object publisher splits the URL
-      into segments, and repeatedly calls methods which consume path segments
-      and return objects which represent that path, until all segments have
-      been consumed. At the core, the Nevow traversal API is very
-      simple. However, it provides some higher level functionality layered on
-      top of this to satisfy common use cases.
-    </p>
-
-    <h2>Object Traversal Basics</h2>
-
-    <p>
-      The <strong>root resource</strong> is the top-level object in the URL
-      space; it conceptually represents the URI <code>/</code>. The Nevow
-      <strong>object traversal</strong> and <strong>object publishing</strong>
-      machinery uses only two methods to locate an object suitable for
-      publishing and to generate the HTML from it; these methods are described
-      in the interface <code class="API">nevow.inevow.IResource</code>:
-    </p>
-
-    <pre class="python">
-class IResource(Interface):
-    def locateChild(self, ctx, segments):
-        """Locate another object which can be adapted to IResource
-        Return a tuple of resource, path segments
-        """
-
-    def renderHTTP(self, ctx):
-        """Render a request
-        """
-    </pre>
-
-    <p>
-      <code class="API" base="nevow.inevow.IResource">renderHTTP</code> can be
-      as simple as a method which simply returns a string of HTML.  Let's
-      examine what happens when object traversal occurs over a very simple root
-      resource:
-    </p>
-
-    <pre class="python">
-from zope.interface import implements
-
-class SimpleRoot(object):
-    implements(inevow.IResource)
-
-    def locateChild(self, ctx, segments):
-        return self, ()
-
-    def renderHTTP(self, ctx):
-        return "Hello, world!"
-    </pre>
-
-    <p>
-      This resource, when passed as the root resource to <code class="API"
-      base="nevow">appserver.NevowSite</code> or <code class="API"
-      base="nevow">wsgi.createWSGIApplication</code>, will immediately return
-      itself, consuming all path segments. This means that for every URI a user
-      visits on a web server which is serving this root resource, the text
-      <code>"Hello, world!"</code> will be rendered. Let's examine the value of
-      <code>segments</code> for various values of URI:
-    </p>
-
-    <ul>
-      <li><code>/</code> - <code>('',)</code></li>
-      <li><code>/foo/bar</code> - <code>('foo', 'bar')</code></li>
-      <li>
-        <code>/foo/bar/baz.html</code> -
-        <code>('foo', 'bar', 'baz.html')</code>
-      </li>
-      <li>
-        <code>/foo/bar/directory/</code> -
-        <code>('foo', 'bar', 'directory', '')</code>
-      </li>
-    </ul>
-
-    <p>
-      So we see that Nevow does nothing more than split the URI on the string
-      <code>/</code> and pass these path segments to our application for
-      consumption. Armed with these two methods alone, we already have enough
-      information to write applications which service any form of URL
-      imaginable in any way we wish. However, there are some common URL
-      handling patterns which Nevow provides higher level support for.
-    </p>
-
-    <h2><code>locateChild</code> In Depth</h2>
-
-    <p>
-      One common URL handling pattern involves parents which only know about
-      their direct children. For example, a ``Directory`` object may only know
-      about the contents of a single directory, but if it contains other
-      directories, it does not know about the contents of them. Let's examine a
-      simple ``Directory`` object which can provide directory listings and
-      serves up objects for child directories and files:
-    </p>
-
-    <pre class="python">
-from zope.interface import implements
-
-class Directory(object):
-    implements(inevow.IResource)
-
-    def __init__(self, directory):
-        self.directory = directory
-
-    def renderHTTP(self, ctx):
-        html = ['&lt;ul&gt;']
-        for child in os.listdir(self.directory):
-            fullpath = os.path.join(self.directory, child)
-            if os.path.isdir(fullpath):
-                child += '/'
-            html.extend(['&lt;li&gt;&lt;a href="', child, '"&gt;', child, '&lt;/a&gt;&lt;/li&gt;'])
-        html.append('&lt;/ul&gt;')
-        return ''.join(html)
-
-    def locateChild(self, ctx, segments):
-        name = segments[0]
-        fullpath = os.path.join(self.directory, name)
-        if not os.path.exists(fullpath):
-            return None, () # 404
-
-        if os.path.isdir(fullpath):
-            return Directory(fullpath), segments[1:]
-        if os.path.isfile(fullpath):
-            return static.File(fullpath), segments[1:]
-    </pre>
-
-    <p>
-      Because this implementation of <code>locateChild</code> only consumed one
-      segment and returned the rest of them (<code>segments[1:]</code>), the
-      object traversal process will continue by calling
-      <code>locateChild</code> on the returned resource and passing the
-      partially-consumed segments. In this way, a directory structure of any
-      depth can be traversed, and directory listings or file contents can be
-      rendered for any existing directories and files.
-    </p>
-
-    <p>
-      So, let us examine what happens when the URI
-      <code>"/foo/bar/baz.html"</code> is traversed, where <code>"foo"</code>
-      and <code>"bar"</code> are directories, and <code>"baz.html"</code> is a
-      file.
-    </p>
-
-    <ol>
-      <li>
-        <code>
-          Directory('/').locateChild(ctx, ('foo', 'bar', 'baz.html'))
-        </code>
-        returns
-        <code>Directory('/foo'), ('bar', 'baz.html')</code>
-      </li>
-      <li>
-        <code>
-          Directory('/foo').locateChild(ctx, ('bar', 'baz.html'))
-        </code>
-        returns
-        <code>Directory('/foo/bar'), ('baz.html, )</code>
-      </li>
-      <li>
-        <code>
-          Directory('/foo/bar').locateChild(ctx, ('baz.html'))
-        </code>
-        returns
-        <code>File('/foo/bar/baz.html'), ()</code>
-      </li>
-      <li>
-        No more segments to be consumed;
-        <code>File('/foo/bar/baz.html').renderHTTP(ctx)</code> is called, and
-        the result is sent to the browser.
-      </li>
-    </ol>
-
-
-    <h2><code>childFactory</code> Method</h2>
-
-    <p>
-      Consuming one URI segment at a time by checking to see if a requested
-      resource exists and returning a new object is a very common
-      pattern. Nevow's default implementation of <code class="API"
-      base="nevow.inevow">IResource</code>, <code
-      class="API">nevow.rend.Page</code>, contains an implementation of
-      <code>locateChild</code> which provides more convenient hooks for
-      implementing object traversal. One of these hooks is
-      <code>childFactory</code>. Let us imagine for the sake of example that we
-      wished to render a tree of dictionaries. Our data structure might look
-      something like this:
-    </p>
-
-    <pre class="python">
-tree = dict(
-    one=dict(
-        foo=None,
-        bar=None),
-    two=dict(
-        baz=dict(
-        quux=None)))
-    </pre>
-
-    <p>
-      Given this data structure, the valid URIs would be:
-    </p>
-
-    <ul>
-      <li>/</li>
-      <li>/one</li>
-      <li>/one/foo</li>
-      <li>/one/bar</li>
-      <li>/two</li>
-      <li>/two/baz</li>
-      <li>/two/baz/quux</li>
-    </ul>
-
-    <p>
-      Let us construct a <code class="API" base="nevow">rend.Page</code>
-      subclass which uses the default <code>locateChild</code> implementation
-      and overrides the <code>childFactory</code> hook instead:
-    </p>
-
-    <pre class="python">
-class DictTree(rend.Page):
-    def __init__(self, dataDict):
-        self.dataDict = dataDict
-
-    def renderHTTP(self, ctx):
-        if self.dataDict is None:
-            return "Leaf"
-        html = ['&lt;ul&gt;']
-        for key in self.dataDict.keys():
-            html.extend(['&lt;li&gt;&lt;a href="', key, '"&gt;', key, '&lt;/a&gt;&lt;/li&gt;'])
-        html.append('&lt;/ul&gt;')
-        return ''.join(html)
-
-    def childFactory(self, ctx, name):
-        if name not in self.dataDict:
-            return rend.NotFound # 404
-        return DictTree(self.dataDict[name])
-    </pre>
-
-    <p>
-      As you can see, the <code>childFactory</code> implementation is
-      considerably shorter than the equivalent <code>locateChild</code>
-      implementation would have been.
-    </p>
-
-    <h2><code>child_*</code> methods and attributes</h2>
-
-    <p>
-      Often we may wish to have some hardcoded URLs which are not dynamically
-      generated based on some data structure. For example, we might have an
-      application which uses an external CSS stylesheet, an external JavaScript
-      file, and a folder full of images. The <code class="API"
-      base="nevow">rend.Page.locateChild</code> implementation provides a
-      convenient way for us to express these relationships by using
-      child-prefixed methods:
-    </p>
-
-    <pre class="python">
-class Linker(rend.Page):
-    def renderHTTP(self, ctx):
-        return """&lt;html&gt;
-&lt;head&gt;
-    &lt;link href="css" rel="stylesheet" /&gt;
-    &lt;script type="text/javascript" src="scripts" /&gt;
-  &lt;body&gt;
-    &lt;img src="images/logo.png" /&gt;
-  &lt;/body&gt;
-&lt;/html&gt;"""
-
-    def child_css(self, ctx):
-        return static.File('styles.css')
-
-    def child_scripts(self, ctx):
-        return static.File('scripts.js')
-
-    def child_images(self, ctx):
-        return static.File('images/')
-    </pre>
-
-    <p>
-      One thing you may have noticed is that all of the examples so far have
-      returned new object instances whenever they were implementing a traversal
-      API. However, there is no reason these instances cannot be shared. One
-      could for example return a global resource instance, an instance which
-      was previously inserted in a dict, or lazily create and cache dynamic
-      resource instances on the fly. The <code>rend.Page.locateChild</code>
-      implementation also provides a convenient way to express that one global
-      resource instance should always be used for a particular URL, the
-      child-prefixed attribute:
-    </p>
-
-    <pre class="python">
-class FasterLinker(Linker):
-    child_css = static.File('styles.css')
-    child_scripts = static.File('scripts.js')
-    child_images = static.File('images/')
-    </pre>
-
-    <h2>Dots in child names</h2>
-
-    <p>
-      When a URL contains dots, which is quite common in normal URLs, it is
-      simple enough to handle these URL segments in <code>locateChild</code> or
-      <code>childFactory</code> -- one of the passed segments will simply be a
-      string containing a dot. However, it is not immediately obvious how one
-      would express a URL segment with a dot in it when using child-prefixed
-      methods. The solution is really quite simple:
-    </p>
-
-    <pre class="python">
-class DotChildren(rend.Page):
-    def renderHTTP(self, ctx):
-        return """
-        &lt;html&gt;
-          &lt;head&gt;
-            &lt;script type="text/javascript" src="scripts.js" /&gt;
-          &lt;/head&gt;
-        &lt;/html&gt;"""
-
-setattr(DotChildren, 'child_scripts.js', static.File('scripts.js'))
-    </pre>
-
-    <p>
-      The same technique could be used to install a child method with a dot in
-      the name.
-    </p>
-
-
-    <h2>children dictionary</h2>
-
-    <p>
-      The final hook supported by the default implementation of
-      <code>locateChild</code> is the <code>rend.Page.children</code>
-      dictionary:
-    </p>
-
-    <pre class="python">
-class Main(rend.Page):
-    children = {
-        'people': People(),
-        'jobs': Jobs(),
-        'events': Events()}
-
-    def renderHTTP(self, ctx):
-        return """
-        &lt;html&gt;
-          &lt;head&gt;
-            &lt;title&gt;Our Site&lt;/title&gt;
-          &lt;/head&gt;
-          &lt;body&gt;
-            &lt;p&gt;bla bla bla&lt;/p&gt;
-          &lt;/body&gt;
-        &lt;/html&gt;"""
-    </pre>
-
-    <p>
-      Hooks are checked in the following order:
-    </p>
-
-    <ol>
-      <li><code>self.children</code></li>
-      <li><code>self.child_*</code></li>
-      <li><code>self.childFactory</code></li>
-    </ol>
-
-    <h2>The default trailing slash handler</h2>
-
-    <p>
-      When a URI which is being handled ends in a slash, such as when the
-      <code>/</code> URI is being rendered or when a directory-like URI is
-      being rendered, the string <code>''</code> appears in the path segments
-      which will be traversed. Again, handling this case is trivial inside
-      either <code>locateChild</code> or <code>childFactory</code>, but it may
-      not be immediately obvious what child-prefixed method or attribute will
-      be looked up.  The method or attribute name which will be used is simply
-      <code>child</code> with a single trailing underscore.
-    </p>
-
-    <p>
-      The <code>rend.Page</code> class provides an implementation of this
-      method which can work in two different ways. If the attribute
-      <code>addSlash</code> is <code>True</code>, the default trailing slash
-      handler will return <code>self</code>. In the case when
-      <code>addSlash</code> is <code>True</code>, the default
-      <code>rend.Page.renderHTTP</code> implementation will simply perform a
-      redirect which adds the missing slash to the URL.
-    </p>
-
-    <p>
-      The default trailing slash handler also returns self if
-      <code>addSlash</code> is <code>False</code>, but emits a warning as it
-      does so. This warning may become an exception at some point in the
-      future.
-    </p>
-
-    <h2><code>ICurrentSegments</code> and <code>IRemainingSegments</code></h2>
-
-    <p>
-      During the object traversal process, it may be useful to discover which
-      segments have already been handled and which segments are remaining to be
-      handled. This information may be obtained from the <code>context</code>
-      object which is passed to all the traversal APIs. The interfaces <code
-      class="API">nevow.inevow.ICurrentSegments</code> and <code
-      class="API">nevow.inevow.IRemainingSegments</code> are used to retrieve
-      this information. To retrieve a tuple of segments which have previously
-      been consumed during object traversal, use this syntax:
-    </p>
-
-    <pre class="python">
-segs = ICurrentSegments(ctx)
-    </pre>
-
-    <p>
-      The same is true of <code>IRemainingSegments</code>.
-      <code>IRemainingSegments</code> is the same value which is passed as
-      <code>segments</code> to <code>locateChild</code>, but may also be useful
-      in the implementations of <code>childFactory</code> or a child-prefixed
-      method, where this information would not otherwise be available.
-    </p>
-
-    <h2>Conclusion</h2>
-
-    <p>
-      Nevow makes it easy to handle complex URL hierarchies. The most basic
-      object traversal interface, <code
-      class="API">nevow.inevow.IResource.locateChild</code>, provides powerful
-      and flexible control over the entire object traversal process. Nevow's
-      canonical <code>IResource</code> implementation, <code>rend.Page</code>,
-      also includes the convenience hooks <code>childFactory</code> along with
-      child-prefixed method and attribute semantics to simplify common use
-      cases.
-    </p>
-  </body>
-</html>

=== removed file 'Nevow/doc/howto/xmltemplates.xhtml'
--- Nevow/doc/howto/xmltemplates.xhtml	2008-08-26 13:45:59 +0000
+++ Nevow/doc/howto/xmltemplates.xhtml	1970-01-01 00:00:00 +0000
@@ -1,407 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<html xmlns="http://www.w3.org/1999/xhtml";>
-  <head>
-    <title>
-      XML Templates
-    </title>
-  </head>
-  <body>
-    <h1>Nevow XML Templates</h1>
-
-    <p>
-      Stan syntax is cool, but eventually you are going to want to integrate
-      your Python code with a template designed by an HTML monkey. Nevow
-      accomplishes this by providing an xmlfile loader which uses the built-in
-      Python SAX libraries to generate a tree of stan behind the scenes. The
-      general rule is anything that is possible in stan should be possible in a
-      pure XML template; of course, the XML syntax is generally going to be
-      much more verbose.
-    </p>
-
-    <h2>loaders.xmlfile</h2>
-
-    <p>
-      Wherever you have seen a loaders.stan being created in any of the example
-      code, a <code class="API" base="nevow">loaders.xmlfile</code> can be
-      substituted instead. At the most basic, <code>xmlfile</code> merely
-      requires the name of an xml template:
-    </p>
-
-    <pre class="python">
-class HelloXML(rend.Page):
-    docFactory = loaders.xmlfile('hello.xml')
-    </pre>
-
-    <p>
-      Placing the following xml in the <code>hello.xml</code> file will cause
-      <code>HelloXML</code> to display a static page when it is rendered:
-    </p>
-
-    <pre>&lt;html&gt;Hello, world!&lt;/html&gt;</pre>
-
-    <p>
-      The following additional keyword arguments may be given to
-      <code>xmlfile</code> to configure it:
-    </p>
-
-    <ul>
-      <li>
-        <code>templateDirectory</code>:
-        The path to the directory which contains the template file. Defaults to ''.
-      </li>
-      <li>
-        <code>ignoreDocType</code>:
-        If True, discard any DOCTYPE declaration when building the DOM from
-        this template. When false, preserve the DOCTYPE, causing it to show up
-        in the final output. Useful for when you are inserting an XML fragment
-        into a larger page and do not wish to generate invalid XML as
-        output. Defaults to False.
-      </li>
-      <li>
-        <code>ignoreComment</code>:
-        If True, discard XML comments, causing them to disappear from the
-        output. If False, preserve comments and render them in the final output
-        unchanged.  Defaults to False.
-      </li>
-      <li>
-        <code>pattern</code>:
-        If present, the given pattern name will be looked up and used as the
-        root of the template. If not present, the entire document will be used
-        as the template. Useful for embedding fragments of an XML document in a
-        larger page.  Defaults to None.
-      </li>
-    </ul>
-
-    <h2>Nevow's xmlns declaration</h2>
-
-    <p>
-      In order for Nevow to notice and process any XML directives in the
-      template file, you must declare the Nevow xmlns at the top of your XML
-      document. Nevow's xmlns is:
-    </p>
-
-    <pre>http://nevow.com/ns/nevow/0.1</pre>
-
-    <p>
-      The syntax for declaring that your xml document uses this namespace is:
-    </p>
-
-    <pre>&lt;html xmlns:nevow="http://nevow.com/ns/nevow/0.1"&gt;&lt;/html&gt;</pre>
-
-    <p>
-      You may replace the text "nevow" in the above example with any name you
-      choose.  For example, many people use "n" because it is shorter to
-      type. If you do so, be sure to replace all occurrences of the nevow
-      namespace in the examples with the namespace name you choose.
-    </p>
-
-    <h2>Nevow's Tag Attribute Language</h2>
-
-    <p>
-      The markup you will add to your XHTML file in order to invoke Nevow code
-      consists mostly of namespaced tag attributes. This approach was
-      influenced heavily by the Zope Page Templates (ZPT) Tag Attribute
-      Language (TAL). However, I felt that TAL did not go far enough in
-      removing control flow and branching possibilities from the XML
-      template. Nevow's main philosophy is that it should be as easy as
-      possible to move from the XML document into Python code, and that the
-      Python code should have ultimate control over manipulating the structure
-      of the XML template.
-    </p>
-
-    <p>
-      The key is that it is easy to expose Python methods that you write to
-      your XML template, and it is easy for the XML templates to mark nodes
-      which it wishes the Python method to manipulate. In this way, if either
-      the Python implementation changes or the location or content of the
-      marked nodes change in the XML template, the other side will be isolated
-      from these changes.
-    </p>
-
-    <p>
-      Nevow's XML templating has two attributes which invoke Python code:
-    </p>
-
-    <ul>
-      <li>
-        <code>nevow:render</code> --
-        Invokes a Python method and replaces the template node with the result
-      </li>
-      <li>
-        <code>nevow:data</code> --
-        Invokes a Python method and sets the data special for the node to the
-        result
-      </li>
-    </ul>
-
-    <p>
-      It has one attribute which marks nodes as manipulatable by Python code:
-    </p>
-
-    <ul>
-      <li>
-        <code>nevow:pattern</code> --
-        Gives a node a name so that Python code may clone and mutate copies of
-        this node
-      </li>
-    </ul>
-
-    <p>
-      It also has two namespaced tags:
-    </p>
-
-    <ul>
-      <li>
-        <code>nevow:slot</code> --
-        Works in the same way as the slot attribute
-      </li>
-      <li>
-        <code>nevow:attr</code> --
-        Indicates that an attribute of the parent tag should be manipulated by
-        Python code in some way
-      </li>
-    </ul>
-
-    <h2>nevow:render</h2>
-
-    <p>
-      When the <code>nevow:render</code> attribute is encountered, the xmlfile
-      loader sets the render special to a directive constructed with the
-      attribute value. When the template is rendered, this means that the
-      appropriate render_* method will be looked up on the
-      <code>IRendererFactory</code> (generally the Page instance):
-    </p>
-
-    <pre>&lt;html&gt;&lt;div nevow:render="foo" /&gt;&lt;/html&gt;</pre>
-
-    <p>
-      With the <code>render_foo</code> method::
-    </p>
-
-    <pre class="python">
-def render_foo(self, ctx, data):
-    return "Hello"
-    </pre>
-
-    <p>
-      Will result in the document:
-    </p>
-
-    <pre>&lt;html&gt;Hello&lt;/html&gt;</pre>
-
-    <p>
-      Note that the return value of the render method replaces the template
-      node in the DOM, so if you want the template node to remain, you should
-      use <code>ctx.tag</code>.
-    </p>
-
-    <h2>Built-in renderers</h2>
-
-    <p>
-      Nevow comes with various built in renderers on the Page class.
-    </p>
-
-    <ul>
-      <li>
-        <code>data</code>:
-        Renders the current data as-is inside the current node.
-      </li>
-      <li>
-        <code>string</code>:
-        Renders the current data as a string inside the current node.
-      </li>
-      <li>
-        <code>sequence</code>:
-        Iterates the current data, copying the "item" pattern for each
-        item. Sets the the data special of the new node to the item, and
-        inserts the result in the current node. See the nevow.rend.sequence
-        docstring for information about other used patterns, including
-        "header", "divider", "footer" and "empty".
-      </li>
-      <li>
-        <code>mapping</code>:
-        Calls .items() on the current data, and calls ctx.fillSlots(key, value)
-        for every key, value pair in the result. Returns the template tag.
-      </li>
-      <li>
-        <code>xml</code>:
-        Inserts the current data into the template after wrapping it in an xml
-        instance. Not very useful in practice.
-      </li>
-    </ul>
-
-    <h2>nevow:data</h2>
-
-    <p>
-      When the <code>nevow:data</code> attribute is encountered, the xmlfile
-      loader sets the data special of the current node to a directive
-      constructed with the attribute value.  When the template is rendered,
-      this means that the appropriate data_* method will be looked up on the
-      current <code>IContainer</code> (generally the Page instance). The data_*
-      method will be called, and the result will be set as the data special of
-      the current Tag:
-    </p>
-
-    <pre>&lt;html&gt;&lt;div nevow:data="name" nevow:render="data" /&gt;&lt;/html&gt;</pre>
-
-    <p>
-      With the <code>data_name</code> method:
-    </p>
-
-    <pre class="python">
-def data_name(self, ctx, data):
-    return "Hello!"
-    </pre>
-
-    <p>
-      Will result in the document:
-    </p>
-
-    <pre>&lt;html&gt;&lt;div&gt;Hello!&lt;/div&gt;&lt;/html&gt;</pre>
-
-    <p>
-      Note that with a data attribute on a node but no renderer, the result of
-      the data method will be set as the data special for that tag, and child
-      render methods will be passed this data.
-    </p>
-
-    <h2>nevow:pattern</h2>
-
-    <p>
-      When the <code>nevow:pattern</code> attribute is encountered, the xmlfile
-      loader sets the pattern special of the current node to the attribute
-      value as a string.  Renderers which are above this node may then make
-      copies of it using the <code class="API">nevow.inevow.IQ</code> of the
-      current context. With the template:
-    </p>
-
-    <pre>&lt;html nevow:render="stuff"&gt;&lt;div nevow:pattern="somePattern" nevow:render="data" /&gt;&lt;/html&gt;</pre>
-
-    <p>
-      And the renderer:
-    </p>
-
-    <pre class="python">
-def render_stuff(self, ctx, data):
-    pat = inevow.IQ(ctx).patternGenerator('somePattern')
-    return [pat(data=1), pat(data=2)]
-    </pre>
-
-    <p>
-      Will result in the document:
-    </p>
-
-    <pre>&lt;html&gt;&lt;div&gt;1&lt;/div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/html&gt;</pre>
-
-    <h2>nevow:slot</h2>
-
-    <p>
-      When the <code>nevow:slot</code> tag is encountered, the xmlfile loader
-      constructs a <code class="API">nevow.stan.slot</code> instance, passing
-      the name attribute value as the slot name. The children of the slot node
-      are added as children of the new slot instance. This is useful if you
-      wish to put patterns inside the slot. With the template:
-    </p>
-
-    <pre>&lt;html nevow:render="stuff"&gt;&lt;nevow:slot name="slotName" /&gt;&lt;/html&gt;</pre>
-
-    <p>
-      And the render method:
-    </p>
-
-    <pre class="python">
-def render_stuff(self, ctx, data):
-    ctx.fillSlots('slotName', "Hello.")
-    return ctx.tag
-    </pre>
-
-    <p>
-      This document will be produced:
-    </p>
-
-    <pre>&lt;html&gt;Hello.&lt;/html&gt;</pre>
-
-    <h2>nevow:attr</h2>
-
-    <p>
-      When the <code>nevow:attr</code> tag is encountered, the contents of the
-      nevow:attr node will be assigned to the attribute of the parent tag with
-      the name of the value of the name attribute. Perhaps an example will be a
-      little clearer:
-    </p>
-
-    <pre>&lt;html&gt;&lt;a&gt;&lt;nevow:attr name="href"&gt;HELLO!&lt;/nevow:attr&gt;Goodbye&lt;/a&gt;&lt;/html&gt;</pre>
-
-    <p>
-      This document will be produced:
-    </p>
-
-    <pre>&lt;html&gt;&lt;a href="HELLO!"&gt;Goodbye&lt;/a&gt;&lt;/html&gt;</pre>
-
-    <p>
-      While this syntax is somewhat awkward, every other type of nevow tag and
-      attribute may be used inside the <code>nevow:attr</code> node. This makes
-      setting attributes of tags uniform with every other method of
-      manipulating the XML template.
-    </p>
-
-    <h2>nevow:invisible</h2>
-
-    <p>
-      Sometimes you need to group some elements, because you need to use a
-      renderer for a group of children.
-    </p>
-
-    <p>
-      However, it may not be desirable to give these elements a parent/child
-      relationship in your XML structure.  For these cases, use
-      <code>nevow:invisible</code>.
-    </p>
-
-    <p>
-      As suggested by the name, a <code>nevow:invisible</code> tag is removed
-      in the rendered XML. Here is an example:
-    </p>
-
-    <pre>&lt;html&gt;&lt;nevow:invisible nevow:data="name" nevow:render="data" /&gt;&lt;/html&gt;</pre>
-
-    <p>
-      With the <code>data_name</code> method:
-    </p>
-
-    <pre class="python">
-def data_name(self, ctx, data):
-    return "Hello!"
-    </pre>
-
-    <p>
-      Will result in the document:
-    </p>
-
-    <pre>&lt;html&gt;Hello!&lt;/html&gt;</pre>
-
-    <h2>xmlstr, htmlfile, and htmlstr</h2>
-
-    <p>
-      xmlstr is a loader which is identical to xmlfile except it takes a string
-      of XML directly.
-    </p>
-
-    <p>
-      htmlfile and htmlstr should generally be avoided. They are similar to
-      xmlfile and xmlstr, except they use twisted.web.microdom in
-      beExtremelyLenient mode to attempt to parse badly-formed HTML (non-XHTML)
-      templates. See the nevow.loaders docstrings for more information.
-    </p>
-
-    <h2>Conclusions</h2>
-
-    <p>
-      Nevow's xmlfile tag attribute language allows you to integrate
-      externally-designed XHTML templates into the Nevow rendering process.
-    </p>
-  </body>
-</html>

=== removed directory 'Nevow/doc/html'
=== removed file 'Nevow/doc/html/default.css'
--- Nevow/doc/html/default.css	2005-10-14 17:36:24 +0000
+++ Nevow/doc/html/default.css	1970-01-01 00:00:00 +0000
@@ -1,209 +0,0 @@
-/*
- * Originally stolen from http://diveintopython.org
- * - R. Sridhar
- */
-
-body {
-  background-color: white;
-  color: #222;
-  font-family: "Book Antiqua", Georgia, Palatino, Times, "Times New Roman", serif;
-  line-height: 145%;
-}
-
-h1, h2, h3, h4, h5, h6, p#tagline, #menu, .Footer, #breadcrumb {
-  margin: 0;
-  padding: 0;
-  font-family: "Lucida Grande", Tahoma, "Trebuchet MS", Verdana, Lucida, Geneva, Helvetica, sans-serif;
-}
-
-.titlepage h1 {
-  margin-top: 1em;
-}
-
-h1 {
-  font-size: 180%;
-  background-color: white;
-  color: maroon;
-  text-shadow: 2px 2px 2px #990000;
-}
-
-h1 a {
-  background-color: white;
-  color: maroon;
-  text-decoration: none;
-}
-
-h2 {
-  margin-top: 1em;
-  font-size: 140%;
-  text-shadow: 2px 2px 2px #999999;
-}
-
-h3 {
-  margin-top: 1em;
-  font-size: 100%;
-}
-
-label, .divider {
-  display: none;
-}
-
-#Header {
-  border-bottom: 1px solid maroon;
-}
-
-p#tagline {
-  margin: 3px 0 6px 2px;
-  font-size: 90%;
-  font-weight: bold;
-  background-color: white;
-  color: maroon;
-}
-
-#breadcrumb {
-  font-size: 90%;
-}
-
-#navigation {
-  font-size: 90%;
-}
-
-.thispage {
-  font-weight: bold;
-}
-
-.Footer {
-  font-size: 90%;
-  border-top: 1px solid maroon;
-  background-color: white;
-  color: maroon;
-  width: 85%;
-}
-
-table.Footer {
-  margin-top: 1em;
-}
-
-#breadcrumb {
-  padding: 0 0 1em 2px;
-}
-
-.tip, .note, .warning, .caution, .important, .footnote {
-  margin: 1em 2em 1em 2em;
-}
-
-.furtherreading {
-  margin-top: 1em;
-}
-
-.screen, .programlisting, .example table {
-  margin: 1em 1em 0 1em;
-  padding: 0;
-}
-
-.example table {
-  margin-bottom: 1em;
-}
-
-.toc li {
-  list-style: none;
-}
-
-/* ----- Python code syntax coloring ----- */
-.computeroutput, .traceback, .pykeyword, .pystring, .pycomment, .pyfunction, .pyclass {
-  background-color: white;
-}
-
-.pykeyword, .pyfunction, .pyclass {
-  font-weight: bold;
-}
-
-.computeroutput {
-  color: teal;
-}
-
-.traceback {
-  color: red;
-}
-
-.pykeyword {
-  color: navy;
-}
-
-.pystring {
-  color: olive;
-}
-
-.pycomment {
-  color: green;
-  font-style: italic;
-}
-
-.pyfunction {
-  color: teal;
-}
-
-.pyclass {
-  color: blue;
-}
-
-/* ----- home page ----- */
-#wrapper {
-  float: left;
-  width: 66%;
-  border: 0;
-  background-color: white;
-  color: #222;
-  margin: 1em 2em 0 0;
-}
-
-#menu {
-  font-size: 90%;
-  margin-top: 1.5em;
-}
-
-#menu h2 {
-  background-color: white;
-  color: maroon;
-}
-  
-#menu ul {
-  list-style: none;
-}
-
-.selfad {
-  padding: 5px;
-  background-color: #ccc;
-  color: #222;
-  border: 1px solid #222;
-}
-
-.selfad p {
-  font-family: Tahoma, sans-serif;
-  font-size: 90%;
-  margin: 10px;
-  line-height: 140%;
-}
-
-#sponsoredlinks {
-  float: right;
-  margin-top: 20px;
-  margin-left: 20px;
-}
-
-.navbar a { 
-    font-size: 14px; margin-right: 25px;
-}
-
-.right { z-index: 99; position: absolute; right: 30px; }
-
-.docTitle { font-size: 20px; color: gray; }
-
-.directoryHeader { font-weight: bold;}
-
-.genNote { position: absolute; z-index: 99; right: 30px; font-style: italic;}
-
-.title { display: none; }
-
-.literal-block { margin: 0 2.5em; }
-

=== removed directory 'Nevow/doc/man'
=== removed file 'Nevow/doc/man/nevow-xmlgettext.1'
--- Nevow/doc/man/nevow-xmlgettext.1	2005-10-14 17:36:24 +0000
+++ Nevow/doc/man/nevow-xmlgettext.1	1970-01-01 00:00:00 +0000
@@ -1,27 +0,0 @@
-.TH NEVOW-XMLGETTEXT "1" "Feb 2005" "" ""
-.SH NAME
-nevow-xmlgettext \- extract translatable strings
-.SH SYNOPSIS
-.B nevow\-xmlgettext
-[\fIOPTION\fR]... [\fIFILE\fR]...
-.SH DESCRIPTION
-Extract translatable strings from Nevow XML template files.
-List files to process on command line.
-Will output strings in PO format to standard output.
-.TP
-\fB\--help\fR 
-Display usage information.
-.TP
-\fB\--version\fR 
-Output version information and exit.
-.SH AUTHOR
-Written by Tommi Virtanen.
-.SH "REPORTING BUGS"
-Report bugs to <twisted-web@xxxxxxxxxxxxxxxxx>.
-.SH COPYRIGHT
-Copyright \(co 2005 Tommi Virtanen
-.br
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-.SH "SEE ALSO"
-gettext(1)

=== removed directory 'Nevow/doc/old'
=== removed file 'Nevow/doc/old/nevow.doc'
--- Nevow/doc/old/nevow.doc	2005-10-14 17:36:24 +0000
+++ Nevow/doc/old/nevow.doc	1970-01-01 00:00:00 +0000
@@ -1,149 +0,0 @@
-Nevow draft documentation.
-James Knight
-March 5, 2004
-
-=====================
-=== Introduction ====
-=====================
-This is a rough draft doc, I'm trying to get all the information in here in hopes that someone better at docwriting can edit it and make it look pretty. Beware! I've been typing these examples in a text editor and not testing them, so they might not work!
-
-To run any of the examples here, copy them into a .py file and put this boilerplate at the end:
-application = service.Application('example')
-webServer = internet.TCPServer(8000, appserver.NevowSite(MyPage()))
-webServer.setServiceParent(application)
-
-Then, run 'twistd -ny myfile.py' and take your web browser to http://localhost:8000/
-
-=========================
-==== Basic Rendering ====
-=========================
-
-rend.Page: Rendering a document
--------------------------------
-
-rend.Page is the class all your pages should derive from. The docFactory attribute should be set to one of the predefined DocFactory types: stan, xmlstr, xmlfile, htmlstr, htmlfile. 
-
-- xmlstr and htmlstr take a string as an argument to render, e.g.:
-from nevow import rend
-class MyPage(rend.Page):
-    docFactory = rend.xmlstr("""
-    <html>
-      <head><title>Hello World</title></head>
-      <body>
-        <h1 style="border: 3px green">Hello World!</h1>
-      </body>
-    </html>
-    """)
-
-- xmlfile and htmlfile take a filename, and an optional 'templateDir' specifying a directory:
-
-from nevow import rend
-class MyPage(rend.Page):
-    docFactory = rend.xmlfile("index.xhtml", templateDir="/home/foom/web/stuff/")
-
-- The difference between the two html types and the two xml types is which parser they use, and how lenient it is. The xmlstr and xmlfile functions use the SAX XML parser, which absolutely requires valid XML input. htmlstr/htmlfile use the twisted microdom parser, which is less strict. However, SAX is much much faster than microdom. If microdom's default behavior is even too strict for you, you can use the optional 'beExtremelyLenient' argument, and give it any old trash HTML, e.g.:
-
-from nevow import rend
-class MyPage(rend.Page):
-    docFactory = rend.htmlstr("""
-    <html>
-      <hEAD><tITle>Hello World & Invalid Amperstands</head>
-      <body>
-        <H1>Hello World!</b>""", beExtremelyLenient=True)
-
-Note, it does clean up the code upon reading it in: this example results in an output of:
-'<html><head><title>Hello World &amp;Invalid Amperstands</title></head><body><h1>Hello World!</h1></body></html>'
-
-
-rend.Page: adding children
---------------------------
-Okay, so now you can make one page, maybe now you want it to have children pages.  There's a few ways of doing this:
-
-- The simplest is by defining child_<pagename> attributes. child_name can be set to either another page, or a function that returns another page. This following example shows both forms.
-
-from nevow import rend
-class OtherPage(rend.Page):
-    docFactory = rend.xmlstr("""<html><head><title>Other page!</title></head>
-                                <body><h1>Hi!</h1></body></html>""")
-
-class SecondPage(rend.Page):
-    def __init__(self, num):
-        self.num = num
-        self.docFactory = rend.xmlstr("""<html><head><title>Second page!</title></head>
-                                         <body><h1>Hi num = %d!</h1></body></html>""" % num)
-
-class MyPage(rend.Page):
-    child_otherpage = OtherPage
-
-    def child_secondpage(self, request):
-	return SecondPage(5)
-
-    docFactory = rend.xmlstr("""
-    <html>
-      <head><title>Hi there</title></head>
-      <body>
-        <h1>Hi!</h1>
-        <p>
-	  <a href="otherpage">OtherPage</a>
-	  <a href="secondpage">SecondPage</a>
-        </p>
-      </body>
-    </html>
-    """)
-
-
-- Another way to add children is via putChild. You can imagine the rest of the previous example is included again here.
-
-class MyPage(rend.Page):
-    def __init__(self):
-        self.putChild("otherpage", OtherPage)
-        self.putChild("secondpage", SecondPage)
-
-- Both those methods are great when the set of pages is pretty much constant. However, what if you want to have a page whose contents are totally dynamic? Then, you may want to override the getDynamicPage method.
-
-<FIXME: add example>
-
-- The most flexible method of all (through which all these other mechanisms are called) is the locateChild method. This method lets you look at the entire upcoming path, and return an entirely new path if necessary.
-
-<FIXME: add example>
-
-
-Stan: a much nicer way to write XML
--------------------------------------
-It's a big pain to write out XML documents as text. You always need to remember the closing tags, it's hard to manipulate programmatically and all around inconvenient. Stan is an s-expression-like syntax for producing XML fragments in pure Python syntax. Stan is not required for using nevow, but it is a very simple and powerful way to express your document.
-
-Going back to the first example, we can rewrite it as so:
-
-from nevow import rend
-from nevow.tags import *
-
-class MyPage(rend.Page):
-    docFactory = rend.stan(html[ head[ title["Hello World!"] ], 
-                                 body[
-                                   h1(style="border:3px green")["Hello World!"]
-                                 ]])
-
-
-You might ask how this can possibly be parsed by the python parser. The answer: magic. *grin*.
-
-===========================
-==== Dynamic Rendering ====
-===========================
-
-- render attribute
-
-- data attribute
-
-- context stack, remembering
-
-- sequence, mapping, pattern
-
-- slot, fillSlot
-
-- key
-
-
-==================
-==== Formless ====
-==================
-

=== removed file 'Nevow/doc/old/toc.html'
--- Nevow/doc/old/toc.html	2005-10-14 17:36:24 +0000
+++ Nevow/doc/old/toc.html	1970-01-01 00:00:00 +0000
@@ -1,83 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="em">
-	<head><title>Nevow: Table Of Contents</title>
-    <link rel="stylesheet" href="nevow.css" type="text/css" />
-    </head>
-	<body>
-		<h1>Nevow: Table Of Contents</h1>
-		<ul>
-			<li><a href="nevow-intro.html">Nevow Intro</a></li>
-			<li>appserver module</li>
-			<li>Rendering process overview</li>
-			<li>Rendering arbitrary objects: flatteners</li>
-			<li>Page class</li>
-			<ul>
-				<li>render_* methods</li>
-				<li>data_* methods</li>
-				<li>docFactory attribute</li>
-				<li>original attribute</li>
-				<li>configurable_* methods</li>
-				<li>beforeRender/afterRender</li>
-			</ul>
-			<li>Loaders</li>
-			<li>Stan</li>
-			<li>URL traversal API</li>
-			<ul>
-				<li>locateChild</li>
-				<li>child_* attributes</li>
-				<li>self.children dictionary</li>
-				<li>childFactory</li>
-				<li>URL module API</li>
-			</ul>
-			<li>Request object</li>
-			<ul>
-				<li>Cookies</li>
-				<li>Redirect</li>
-			</ul>
-			<li>Context</li>
-			<ul>
-				<li>tag object</li>
-				<li>locate/remember</li>
-				<li>IQ interface</li>
-			</ul>
-			<li>Default error pages</li>
-			<li>Customizing 404/505 error pages</li>
-			<li>Guard</li>
-			<ul>
-				<li>Basic authentication</li>
-				<li>Realm</li>
-				<li>Portal</li>
-				<li>Sessions</li>
-			</ul>
-			<li>Formless:</li>
-			<ul>
-				<li>Declaring formless typed interfaces</li>
-				<li>Formless rendering process</li>
-				<li>Configurables</li>
-				<li>Patterning formless</li>
-				<li>Adding new typed fields</li>
-				<li>Define different validation patterns</li>
-			</ul>
-			<li>LivePage</li>
-			<ul>
-				<li>Mind object</li>
-			</ul>
-			<li>Nevow's xmlfile reference</li>
-			<ul>
-				<li>Directives and special attributes:</li>
-				<ul>
-					<li>&lt;<em>TAG</em> nevow:render="" /&gt;</li>
-					<li>&lt;<em>TAG</em> nevow:data="" /&gt;</li>
-					<li>&lt;<em>TAG</em> nevow:pattern="" /&gt;</li>
-				</ul>
-				<li>Tags:</li>
-				<ul>
-					<li>&lt;nevow:slot name="" /&gt;</li>
-					<li>&lt;nevow:invisible /&gt;</li>
-					<li>&lt;nevow:attr name="" /&gt;</li>
-				</ul>
-			</ul>
-		</ul>	
-	</body>
-</html>

=== removed directory 'Nevow/examples'
=== removed directory 'Nevow/examples/advanced_manualform'
=== removed file 'Nevow/examples/advanced_manualform/__init__.py'
=== removed file 'Nevow/examples/advanced_manualform/advanced_manualform.py'
--- Nevow/examples/advanced_manualform/advanced_manualform.py	2006-03-08 14:28:41 +0000
+++ Nevow/examples/advanced_manualform/advanced_manualform.py	1970-01-01 00:00:00 +0000
@@ -1,106 +0,0 @@
-from time import time as now
-
-import twisted.python.components as tpc
-
-from nevow import rend, inevow, url, util, loaders, tags as t
-from nevow.rend import _CARRYOVER
-from formless import iformless
-
-#
-# This example is meant to be of some inspiration to those people
-# who need to have some inspiration to handle forms without using
-# formless. It _WILL_ raise an exception when you submit a form
-# without filling all values. This example should NOT be used as-is
-# but should be modified and enhanced to fit one's need.
-#
-# To sum up: it's just a starting point. 
-#
-
-SUBMIT="_submit"
-BUTTON = 'post_btn'
-
-class WebException(Exception): pass
-
-class ManualFormMixin(rend.Page):
-    def locateChild(self, ctx, segments):
-        # Handle the form post
-        if segments[0].startswith(SUBMIT):
-            # Get a method name from the action in the form plus
-            # the firt word in the button name (or simply the form action if
-            # no button name is specified
-            kwargs = {}
-            args = inevow.IRequest(ctx).args
-            bindingName = ''
-            for key in args:
-                if key != BUTTON: 
-                    if args[key] != ['']: 
-                        kwargs[key] = (args[key][0], args[key])[len(args[key])>1]
-                else: 
-                    bindingName = args[key][0]
-            name_prefix = segments[0].split('!!')[1]
-            if bindingName == '': name = name_prefix
-            else: name = name_prefix + '_' + bindingName.split()[0].lower()
-            method = getattr(self, 'form_'+name, None)            
-            if method is not None:
-                return self.onManualPost(ctx, method, bindingName, kwargs)
-            else: 
-                raise WebException("You should define a form_action_button method")
-        return super(ManualFormMixin, self).locateChild(ctx, segments)    
-
-    def onManualPost(self, ctx, method, bindingName, kwargs):
-        # This is copied from rend.Page.onWebFormPost
-        def redirectAfterPost(aspects):
-            redirectAfterPost = request.getComponent(iformless.IRedirectAfterPost, None)
-            if redirectAfterPost is None:
-                ref = request.getHeader('referer') or ''
-            else:
-                ## Use the redirectAfterPost url
-                ref = str(redirectAfterPost)
-            from nevow import url
-            refpath = url.URL.fromString(ref)
-            magicCookie = str(now())
-            refpath = refpath.replace('_nevow_carryover_', magicCookie)
-            _CARRYOVER[magicCookie] = C = tpc.Componentized()
-            for k, v in aspects.iteritems():
-                C.setComponent(k, v)
-            request.redirect(str(refpath))
-            from nevow import static
-            return static.Data('You posted a form to %s' % bindingName, 'text/plain'), ()
-        request = inevow.IRequest(ctx)
-        return util.maybeDeferred(method, **kwargs
-            ).addCallback(self.onPostSuccess, request, ctx, bindingName,redirectAfterPost
-            ).addErrback(self.onPostFailure, request, ctx, bindingName,redirectAfterPost)
-
-
-class Page(ManualFormMixin, rend.Page):
-    
-    addSlash = True
-    docFactory = loaders.stan(
-        t.html[
-            t.head[
-                t.title['Advanced Manualform']
-            ],
-            t.body[
-                t.p['Use the form to find out how to easily and manually handle them'],
-                t.form(action=url.here.child('_submit!!post'), 
-                       enctype="multipart/form-data",
-                       method='post'
-                      )[
-                          t.input(type='text', name='what'),
-                          # the name attribute must be present and must be
-                          # post_btn for all the buttons in the form
-                          t.input(type='submit', value='btn1', name=BUTTON),
-                          t.input(type='submit', value='btn2', name=BUTTON)
-                        ]
-            ]
-        ]
-    )
-    
-    def form_post_btn1(self, what=None):
-        # 'what' is a keyword argument, and must be the same name that you
-        # give to the widget.
-        print "btn1:", what
-    
-    def form_post_btn2(self, what=None):
-        # see above for 'what'.
-        print "btn2:", what

=== removed directory 'Nevow/examples/athenademo'
=== removed file 'Nevow/examples/athenademo/__init__.py'
=== removed file 'Nevow/examples/athenademo/benchmark.js'
--- Nevow/examples/athenademo/benchmark.js	2006-04-12 17:49:24 +0000
+++ Nevow/examples/athenademo/benchmark.js	1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-
-// import Nevow.Athena
-
-function timer() {
-    var d = new Date();
-    return d.getSeconds() + ':' + d.getMilliseconds();
-}
-
-document.documentElement.insertBefore(
-    document.createTextNode(timer()),
-    document.documentElement.firstChild);
-
-Nevow.Benchmarks.InitializationBenchmark = Nevow.Athena.Widget.subclass('Nevow.Benchmarks.InitializationBenchmark');
-Nevow.Benchmarks.InitializationBenchmark.methods(
-    function __init__(self, node) {
-	Nevow.Benchmarks.InitializationBenchmark.upcall(self, '__init__', node);
-	self.stamptime();
-	self.colorize('yellow');
-    },
-
-    function loaded(self) {
-	self.stamptime();
-	self.colorize('purple');
-	var d = self.callRemote('activate');
-	d.addCallback(function() { self.stamptime(); self.colorize('green'); });
-	d.addErrback(function() { self.stamptime(); self.colorize('red'); });
-    },
-
-    function stamptime(self) {
-	self.node.appendChild(document.createTextNode(' ' + timer()));
-    },
-
-    function colorize(self, color) {
-	self.node.style.color = color;
-    });

=== removed file 'Nevow/examples/athenademo/benchmark.py'
--- Nevow/examples/athenademo/benchmark.py	2006-03-30 16:16:29 +0000
+++ Nevow/examples/athenademo/benchmark.py	1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-
-from __future__ import division
-
-from twisted.python import filepath
-
-from nevow import tags, loaders, athena
-
-class Benchmark(athena.LivePage):
-    docFactory = loaders.stan(tags.html[
-        tags.head(render=tags.directive('liveglue')),
-        tags.body(render=tags.directive('body'))])
-
-    def __init__(self, maxNodes, maxDepth):
-        self.maxNodes = maxNodes
-        self.maxDepth = maxDepth
-        super(Benchmark, self).__init__()
-
-        here = filepath.FilePath(__file__).parent().child('benchmark.js')
-
-        self.jsModules.mapping.update({
-            'Nevow.Benchmarks': here.path})
-
-    def render_body(self, ctx, data):
-        for j in range(self.maxNodes // self.maxDepth):
-            top = t = tags.div()
-            for i in range(self.maxDepth):
-                m = tags.div()
-                t[m]
-                t = m
-            t[InitializationBenchmark(self)]
-            yield top
-
-class InitializationBenchmark(athena.LiveFragment):
-    jsClass = u'Nevow.Benchmarks.InitializationBenchmark'
-
-    docFactory = loaders.stan(
-        tags.div(render=tags.directive('liveFragment'))[
-            "Initialization Benchmark"])
-
-    def __init__(self, page):
-        super(InitializationBenchmark, self).__init__()
-        self.page = page
-
-
-    def activate(self):
-        pass
-    athena.expose(activate)

=== removed file 'Nevow/examples/athenademo/calculator.html'
--- Nevow/examples/athenademo/calculator.html	2008-05-20 20:21:26 +0000
+++ Nevow/examples/athenademo/calculator.html	1970-01-01 00:00:00 +0000
@@ -1,62 +0,0 @@
-<html xmlns:n="http://nevow.com/ns/nevow/0.1";>
-    <head>
-        <n:invisible n:render="liveglue" />
-        <style type="text/css">
-            .calculator {
-                font-family: monospace;
-                margin-top: 5em;
-                margin-left: auto;
-                margin-right: auto;
-            }
-            input {
-                width: 2em;
-                border: 1px solid #999;
-            }
-            .output {
-                border: 1px solid #999;
-                text-align: right;
-            }
-        </style>
-    </head>
-    <body>
-        <div n:render="calculator">Calculator Goes Here</div>
-
-        <table class="calculator" id="calculator" n:pattern="CalculatorPattern" n:render="liveElement"
-                xmlns:athena="http://divmod.org/ns/athena/0.7";>
-            <tr>
-                <td colspan="4" class="output" id="output">0</td>
-            </tr>
-            <tr>
-                <td></td>
-                <td></td>
-                <td></td>
-                <td><input type="button" value="C"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-            </tr>
-            <tr>
-                <td><input type="button" value="7"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="8"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="9"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="/"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-            </tr>
-            <tr>
-                <td><input type="button" value="4"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="5"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="6"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="*"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-            </tr>
-            <tr>
-                <td><input type="button" value="1"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="2"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="3"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="-"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-            </tr>
-            <tr>
-                <td><input type="button" value="0"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="."><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="="><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-                <td><input type="button" value="+"><athena:handler event="onclick" handler="buttonClicked" /></input></td>
-            </tr>
-        </table>
-    </body>
-</html>
-

=== removed file 'Nevow/examples/athenademo/calculator.js'
--- Nevow/examples/athenademo/calculator.js	2008-05-20 20:21:26 +0000
+++ Nevow/examples/athenademo/calculator.js	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-// import Nevow.Athena
-// import Divmod.Runtime
-
-CalculatorDemo.Calculator = Nevow.Athena.Widget.subclass("CalculatorDemo.Calculator");
-CalculatorDemo.Calculator.methods(
-    /**
-     * Handle click events on any of the calculator buttons.
-     */
-    function buttonClicked(self, node) {
-        var symbol = node.value;
-        d = self.callRemote("buttonClicked", symbol);
-        d.addCallback(
-            function(expression) {
-                var output = self.nodeById("output");
-                output.replaceChild(
-                    document.createTextNode(expression),
-                    output.firstChild);
-            });
-        return false;
-    });

=== removed file 'Nevow/examples/athenademo/calculator.py'
--- Nevow/examples/athenademo/calculator.py	2008-05-20 20:21:26 +0000
+++ Nevow/examples/athenademo/calculator.py	1970-01-01 00:00:00 +0000
@@ -1,149 +0,0 @@
-# Copyright (c) 2008 Divmod.  See LICENSE for details.
-
-"""
-Demonstration of an Athena Widget which accepts input from the browser and
-sends back responses.
-"""
-
-import sys
-
-from twisted.python.filepath import FilePath
-from twisted.python import log
-from twisted.internet import reactor
-
-from nevow.athena import LivePage, LiveElement, expose
-from nevow.loaders import xmlfile
-from nevow.appserver import NevowSite
-
-# Handy helper for finding external resources nearby.
-sibling = FilePath(__file__).sibling
-
-
-class Calculator(object):
-    """
-    The model object for the calculator demo.  This is the object which
-    actually knows how to perform calculations.
-
-    @ivar expression: A C{str} giving the current expression which has been
-        entered into the calculator.  For example, if the buttons '3', '5', and
-        '+' have been pressed (in that order), C{expression} will be C{'35+'}.
-    """
-    defaultExpression = u'0'
-    errorExpression = u'E'
-
-    def __init__(self):
-        self.expression = self.defaultExpression
-
-
-    def buttonClicked(self, symbol):
-        """
-        Change the current expression by performing the operation indicated by
-        C{symbol} (clearing it or computing it) or by extending it (with a
-        digit or operator).
-
-        @param symbol: C{'C'} to clear the expression, C{'='} to evaluate the
-            expression, or one of C{'0'}-C{'9'}.
-
-        @rtype: C{unicode}
-        @return: The expression after interpreting the new symbol.
-        """
-        # Clear
-        if symbol == 'C':
-            self.expression = self.defaultExpression
-            return self.expression
-        # Check the expression is currently valid
-        if self.expression == self.errorExpression:
-            return self.expression
-        # Evaluate the expression
-        if symbol == '=':
-            try:
-                self.expression = unicode(eval(self.expression))
-            except ZeroDivisionError:
-                self.expression = self.errorExpression
-            return self.expression
-        # Replace of add to the expression
-        if self.expression == self.defaultExpression:
-            self.expression = symbol
-        else:
-            self.expression += symbol
-        return self.expression
-
-
-
-class CalculatorElement(LiveElement):
-    """
-    A "live" calculator.
-
-    All buttons presses in the browser are sent to the server. The server
-    evaluates the expression and sets the output in the browser.
-
-    @ivar validSymbols: A C{str} giving all of the symbols which the browser is
-        allowed to submit to us.  Input is checked against this before being
-        submitted to the model.
-
-    @ivar calc: A L{Calculator} which will be used to handle all inputs and
-        generate computed outputs.
-    """
-    docFactory = xmlfile(sibling('calculator.html').path, 'CalculatorPattern')
-
-    jsClass = u"CalculatorDemo.Calculator"
-
-    validSymbols = '0123456789/*-=+.C'
-
-    def __init__(self, calc):
-        LiveElement.__init__(self)
-        self.calc = calc
-
-
-    def buttonClicked(self, symbol):
-        """
-        Accept a symbol from the browser, perform input validation on it,
-        provide it to the underlying L{Calculator} if appropriate, and return
-        the result.
-
-        @type symbol: C{unicode}
-        @rtype: C{unicode}
-        """
-        # Remember ... never trust a browser
-        if symbol not in self.validSymbols:
-            raise ValueError('Invalid symbol')
-        return self.calc.buttonClicked(symbol)
-    expose(buttonClicked)
-
-
-
-class CalculatorParentPage(LivePage):
-    """
-    A "live" container page for L{CalculatorElement}.
-    """
-    docFactory = xmlfile(sibling('calculator.html').path)
-
-    def __init__(self, *a, **kw):
-        LivePage.__init__(self)
-        # Update the mapping of known JavaScript modules so that the
-        # client-side code for this example can be found and served to the
-        # browser.
-        self.jsModules.mapping[u'CalculatorDemo'] = sibling(
-            'calculator.js').path
-
-
-    def render_calculator(self, ctx, data):
-        """
-        Replace the tag with a new L{CalculatorElement}.
-        """
-        c = CalculatorElement(Calculator())
-        c.setFragmentParent(self)
-        return c
-
-
-
-def main():
-    log.startLogging(sys.stdout)
-    site = NevowSite(CalculatorParentPage(calc=Calculator()))
-    reactor.listenTCP(8080, site)
-    reactor.run()
-
-
-
-if __name__ == '__main__':
-    main()

=== removed file 'Nevow/examples/athenademo/typeahead.html'
--- Nevow/examples/athenademo/typeahead.html	2006-10-06 18:48:29 +0000
+++ Nevow/examples/athenademo/typeahead.html	1970-01-01 00:00:00 +0000
@@ -1,103 +0,0 @@
-<!DOCTYPE html
-PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<html xmlns='http://www.w3.org/1999/xhtml'
-  xmlns:n='http://nevow.com/ns/nevow/0.1'>
-  <!-- vi:ft=html
-  -->
-  <head>
-    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
-    <n:invisible n:render="liveglue" />
-    <title>TypeAhead Demo</title>
-    <script type='text/javascript' language='javascript'>
-// <![CDATA[
-// add events in a cross-browser way
-function xbAddEvent(obj, evType, fn, useCapture){
-  if (obj.addEventListener){
-    obj.addEventListener(evType, fn, useCapture);
-    return true;
-  } else if (obj.attachEvent){
-    var r = obj.attachEvent("on"+evType, fn);
-    return r;
-  } else {
-    alert("Handler could not be attached");
-  }
-}
-
-function selectRange(ele, start, end)
-{
-    var orig = ele;
-    ele = $(ele);
-    if (ele == null)
-    {
-        alert("selectRange() can't find an element with id: " + orig + ".");
-        return;
-    }
-
-    if (ele.setSelectionRange)
-    {
-        ele.setSelectionRange(start, end);
-    }
-    else if (ele.createTextRange)
-    {
-        var range = ele.createTextRange();
-        range.moveStart("character", start);
-        range.moveEnd("character", end - ele.value.length);
-        range.select();
-    }
-
-    ele.focus();
-};
-
-// 
-function replaceDescription(result, node)
-{
-    var animal = result[0]; var descr = result[1];
-
-    var widget = Nevow.Athena.Widget.get(node);
-    var description = widget.nodeByAttribute('class', 'description');
-    description.innerHTML = descr;
-
-    // fill in the text field and select the portion that was guessed
-    if (animal != null)
-    {
-        var typehere = node;
-        var current = typehere.value;
-        typehere.value = animal;
-        selectRange(typehere, current.length, animal.length);
-    }
-}
-
-//
-function loadDescription(ev)
-{
-    // filter helpful keys like backspace
-    if (ev.keyCode < 32) return;
-    if (ev.keyCode >= 33 && ev.keyCode <= 46) return;
-    if (ev.keyCode >= 112 && ev.keyCode <= 123) return;
-
-    var typehere = ev.target;
-    var typed = typehere.value;
-    var d = Nevow.Athena.Widget.get(typehere).callRemote('loadDescription', typed);
-    d.addCallback(replaceDescription, typehere);
-}
-
-Divmod.Base.addToCallStack(window, 'onload', function() {
-    typeheres = MochiKit.DOM.getElementsByTagAndClassName('input', 'typehere');
-    for (n=0; n<typeheres.length; n++) {
-      xbAddEvent(typeheres[n], 'keyup', loadDescription, 1);
-    }
-});
-
-// ]]>
-    </script>
-  </head>
-  <body>
-    <h2>Start typing an animal to see the description.</h2>
-    <n:invisible n:render="typehereField" />
-    <h2>You can also type in this one.  It does the same thing, independently
-      of the other one.</h2>
-    <n:invisible n:render="typehereField" />
-  </body>
-</html>
-

=== removed file 'Nevow/examples/athenademo/typeahead.py'
--- Nevow/examples/athenademo/typeahead.py	2006-10-06 18:48:29 +0000
+++ Nevow/examples/athenademo/typeahead.py	1970-01-01 00:00:00 +0000
@@ -1,82 +0,0 @@
-# vi:ft=python
-from nevow import tags as T, rend, loaders, athena, url
-from formless import annotate, webform
-from twisted.python import util
-
-animals = {u'elf' : u'Pointy ears.  Bad attitude regarding trees.',
-           u'chipmunk': u'Cute.  Fuzzy.  Sings horribly.',
-           u'chupacabra': u'It sucks goats.',
-           u'ninja': u'Stealthy and invisible, and technically an animal.',
-           }
-
-
-class TypeAheadPage(athena.LivePage):
-    _tmpl = util.sibpath(__file__, "typeahead.html")
-    docFactory = loaders.xmlfile(_tmpl)
-    def render_typehereField(self, ctx, data):
-        frag = TypeAheadFieldFragment()
-        frag.page = self
-        return frag
-
-class TypeAheadFieldFragment(athena.LiveFragment):
-    docFactory = loaders.stan(
-            T.span(render=T.directive('liveFragment'))[ '\n',
-                T.input(type="text", _class="typehere"), '\n',
-                T.h3(_class="description"),
-                ])
-
-    def loadDescription(self, typed):
-        if typed == u'':
-            return None, u'--'
-        matches = []
-        for key in animals:
-            if key.startswith(typed):
-                 matches.append(key)
-        if len(matches) == 1:
-            return matches[0], animals[matches[0]]
-        elif len(matches) > 1:
-            return None, u"(Multiple found)"
-        else:
-            return None, u'--'
-    athena.expose(loadDescription)
-
-class DataEntry(rend.Page):
-    """Add Animal"""
-    addSlash = 1
-
-    docFactory = loaders.stan(
-            T.html[T.body[T.h1[
-                "First, a Setup Form."],
-                T.h2["Enter some animals as data.  Click 'Done' to test looking up these animals."],
-                T.h3["The neat stuff happens when you hit 'Done'."],
-                webform.renderForms(),
-                T.ol(data=T.directive("animals"), render=rend.sequence)[
-                        T.li(pattern="item", render=T.directive("string")),
-                                                                        ],
-                T.h1[T.a(href=url.here.child('typeahead'))["Done"]],
-                          ]
-                    ]
-                              )
-    def bind_animals(self, ctx, ):
-        """Add Animal"""
-        return annotate.MethodBinding(
-                'animals',
-                annotate.Method(arguments=
-                    [annotate.Argument('animal', annotate.String()),
-                     annotate.Argument('description', annotate.Text())]),
-                action="Add Animal",
-                                      )
-
-    def animals(self, animal, description):
-        """Add Animal"""
-        if not (animal and description):
-            return
-        animals[animal.decode('utf-8')] = description.decode('utf-8')
-        return url.here
-
-    def data_animals(self, ctx, data):
-        return animals.keys()
-
-    def child_typeahead(self, ctx):
-        return TypeAheadPage(None, None)
-

=== removed file 'Nevow/examples/athenademo/widgets.js'
--- Nevow/examples/athenademo/widgets.js	2006-04-12 17:49:24 +0000
+++ Nevow/examples/athenademo/widgets.js	1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-
-// import Nevow.Athena
-
-WidgetDemo.Clock = Nevow.Athena.Widget.subclass('WidgetDemo.Clock');
-WidgetDemo.Clock.methods(
-    function start(self, node, event) {
-        self.callRemote('start');
-        return false;
-    },
-
-    function stop(self, node, event) {
-        self.callRemote('stop');
-        return false;
-    },
-
-    function setTime(self, toWhat) {
-        Divmod.debug("clock", "Setting time " + toWhat);
-        var time = Nevow.Athena.NodeByAttribute(self.node, "class", "clock-time");
-        Divmod.debug("clock", "On " + time);
-        time.innerHTML = toWhat;
-        Divmod.debug("clock", "Hooray");
-    });

=== removed file 'Nevow/examples/athenademo/widgets.py'
--- Nevow/examples/athenademo/widgets.py	2006-03-30 16:16:29 +0000
+++ Nevow/examples/athenademo/widgets.py	1970-01-01 00:00:00 +0000
@@ -1,94 +0,0 @@
-
-import time, os
-
-from twisted.internet import task
-from twisted.python import log, util
-
-from nevow import athena, loaders, static
-
-class Clock(athena.LiveFragment):
-    jsClass = u"WidgetDemo.Clock"
-
-    docFactory = loaders.xmlstr('''\
-<div xmlns:nevow="http://nevow.com/ns/nevow/0.1";
-     xmlns:athena="http://divmod.org/ns/athena/0.7";
-     nevow:render="liveFragment">
-    <div>
-        <a href="#"><athena:handler event="onclick" handler="start" />
-            Start
-        </a>
-        <a href="#"><athena:handler event="onclick" handler="stop" />
-            Stop
-        </a>
-    </div>
-    <div class="clock-time" />
-</div>
-''')
-
-    running = False
-
-    def start(self):
-        if self.running:
-            return
-        self.loop = task.LoopingCall(self.updateTime)
-        self.loop.start(1)
-        self.running = True
-    athena.expose(start)
-
-    def stop(self):
-        if not self.running:
-            return
-        self.loop.stop()
-        self.running = False
-    athena.expose(stop)
-
-    def _oops(self, err):
-        log.err(err)
-        if self.running:
-            self.loop.stop()
-            self.running = False
-
-    def updateTime(self):
-        self.callRemote('setTime', unicode(time.ctime(), 'ascii')).addErrback(self._oops)
-
-class WidgetPage(athena.LivePage):
-    docFactory = loaders.xmlstr("""\
-<html xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-    <head>
-        <nevow:invisible nevow:render="liveglue" />
-    </head>
-    <body>
-        <div nevow:render="clock">
-            First Clock
-        </div>
-        <div nevow:render="clock">
-            Second Clock
-        </div>
-        <div nevow:render="debug" />
-    </body>
-</html>
-""")
-
-    addSlash = True
-
-    def __init__(self, *a, **kw):
-        super(WidgetPage, self).__init__(*a, **kw)
-        self.jsModules.mapping[u'WidgetDemo'] = util.sibpath(__file__, 'widgets.js')
-
-    def childFactory(self, ctx, name):
-        ch = super(WidgetPage, self).childFactory(ctx, name)
-        if ch is None:
-            p = util.sibpath(__file__, name)
-            if os.path.exists(p):
-                ch = static.File(file(p))
-        return ch
-
-    def render_clock(self, ctx, data):
-        c = Clock()
-        c.page = self
-        return ctx.tag[c]
-
-    def render_debug(self, ctx, data):
-        f = athena.IntrospectionFragment()
-        f.setFragmentParent(self)
-        return ctx.tag[f]

=== removed directory 'Nevow/examples/blogengine'
=== removed file 'Nevow/examples/blogengine/atom.xml'
--- Nevow/examples/blogengine/atom.xml	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/atom.xml	1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0"?>
-<feed version="0.3" xmlns="http://purl.org/atom/ns#"; xml:lang="en" xmlns:n="http://nevow.com/ns/nevow/0.1";>
-  <title mode="escaped">Subbacultcha</title>
-  <link rel="alternate" type="text/html" href="http://localhost:8080"; />
-  <tagline mode="escaped">Subbacultcha atom</tagline>
-  <modified n:data="getFirstPost" n:render="modified">Page modified</modified>
-  <id>tag:localhost,2004:/</id>  
-  <n:invisible n:data="get_posts" n:render="sequence">
-    <entry n:pattern="item" n:render="post">
-      <title mode="escaped"><n:slot name="title">Entry Title</n:slot></title>
-      <link rel="alternate" type="text/html" href="#">
-      	<n:attr name="href"> <n:slot name="link" /> </n:attr>
-      </link>
-      <id>tag:localhost,2004:/<n:slot name="id">id</n:slot></id>
-      <issued><n:slot name="created">Date created</n:slot></issued>
-      <modified><n:slot name="modified">Date modified</n:slot></modified>
-      <author>
-        <name><n:slot name="author">Author</n:slot></name>
-      </author>
-      <content type="text/plain" mode="escaped"><n:slot name="content">Content</n:slot></content>
-    </entry>
	</n:invisible>
-</feed>
\ No newline at end of file

=== removed file 'Nevow/examples/blogengine/axiomstore.py'
--- Nevow/examples/blogengine/axiomstore.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/blogengine/axiomstore.py	1970-01-01 00:00:00 +0000
@@ -1,76 +0,0 @@
-from iblogengine import IBlog
-from zope.interface import implements
-from axiom import item, store, attributes, sequence
-from epsilon.extime import Time
-
-class Post(item.Item):
-    typeName = "BlogenginePost"
-    schemaVersion = 1
-
-    id = attributes.integer(indexed=True, allowNone=False)
-    created = attributes.timestamp(indexed=True)
-    modified = attributes.timestamp(indexed=True)
-    title = attributes.text(indexed=True, allowNone=False)
-    author = attributes.text(indexed=True, allowNone=False)
-    category = attributes.text(indexed=True)
-    content = attributes.text(indexed=True)
-
-    def __init__(self, **kw):
-        now = Time()
-        kw.update({'created':now,
-                   'modified':now})
-        super(Post, self).__init__(**kw)
-
-    def setModified(self):
-        self.modified = Time()
-
-class Blog(item.Item, item.InstallableMixin):
-    implements(IBlog)
-
-    typeName = "BlogengineBlog"
-    schemaVersion = 1
-
-    posts = attributes.reference()
-    next_id = attributes.integer(default=0)
-    
-    def __init__(self, **kw):
-        super(Blog, self).__init__(**kw)
-        self.posts = sequence.List(store=self.store)
-        post = Post(store=self.store,
-                    id=self.getNextId(),
-                    author=u'mike',
-                    title=u'FIRST POST!!!!',
-                    category=u'Test',
-                    content=u'I guess it worked.')
-        self.addNewPost(post)
-
-    def installOn(self, other):
-        super(Blog, self).installOn(other)
-        other.powerUp(self, IBlog)
-
-    def addNewPost(self, post):
-        # Why even let posts manage their own ids?  Oh well.
-        assert post.id == self.next_id,\
-               "Bad post ID; is %r, should be %r" % (post.id, self.next_id)
-        self.posts.append(post)
-        self.next_id += 1
-
-    def getPosts(self, how_many = None):
-        """Return the latest 'how_many' posts, in reverse database order.
-
-        XXX Really, it should be based on modtime.  Which is broken.
-        """
-        if how_many is None or how_many > self.next_id:
-            how_many = self.next_id
-        return (self.getOne(self.next_id-id-1) for id in range(how_many))
-
-    def getOne(self, id):
-        return self.posts[id]
-
-    def getNextId(self):
-        return self.next_id
-    
-def initialize(storename):
-    s = store.Store(storename)
-    s.findOrCreate(Blog).installOn(s)
-    return s

=== removed file 'Nevow/examples/blogengine/blogengine.tac'
--- Nevow/examples/blogengine/blogengine.tac	2006-01-21 22:53:11 +0000
+++ Nevow/examples/blogengine/blogengine.tac	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-from twisted.application import service, strports
-from nevow import appserver
-
-import frontend, axiomstore as store, iblogengine
-from smtpserver import BlogSMTPFactory
-
-application = service.Application('blogengine')
-db = store.initialize('db.axiom')
-site = appserver.NevowSite(resource = frontend.UI())
-site.remember(db, iblogengine.IStore)
-strports.service("8080", site).setServiceParent(application)
-strports.service("2500", BlogSMTPFactory(db)).setServiceParent(application)

=== removed file 'Nevow/examples/blogengine/email_client.py'
--- Nevow/examples/blogengine/email_client.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/email_client.py	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-import sys, smtplib
-
-fromaddr = raw_input("From: ")
-toaddrs  = raw_input("To: ").split(',')
-print "Enter message, end with ^D:"
-msg = ''
-while 1:
-    line = sys.stdin.readline()
-    if not line:
-        break
-    msg = msg + line
-
-# The actual mail send
-server = smtplib.SMTP('localhost', 2500)
-server.sendmail(fromaddr, toaddrs, msg)
-server.quit()

=== removed file 'Nevow/examples/blogengine/frontend.py'
--- Nevow/examples/blogengine/frontend.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/blogengine/frontend.py	1970-01-01 00:00:00 +0000
@@ -1,241 +0,0 @@
-from time import time as now
-from zope.interface import implements, Interface
-
-from twisted.web import xmlrpc
-from twisted.python.components import registerAdapter
-
-from nevow import rend, loaders, url, static
-from nevow import tags as t, inevow
-from formless import annotate, iformless, webform
-
-from axiomstore import Post
-from iblogengine import IStore, IBlog
-
-def pptime(tt):
-    return tt.asHumanly()+" UTC"
-def atompptime(tt):
-    return tt.asISO8601TimeAndDate()
-class ITimer(Interface):
-    pass
-
-#####################################
-categories = ['Programming', 'Test', 'Sport', 'People', 'Python', 
-              'Databases', 'bench', 'woo', 'Friends']
-
-class IInsert(annotate.TypedInterface):
-    def insert(
-        ctx = annotate.Context(),
-        title = annotate.String(strip=True, required=True, \
-                                requiredFailMessage="Title must be provided", tabindex='1'),
-        author = annotate.String(strip=True, default="Anonymous", tabindex='2'),
-        id = annotate.String(hidden=True),
-        category = annotate.Choice(categories, tabindex='3'),
-        content = annotate.Text(required=True, \
-                                requiredFailMessage="Posts with no content are not allowed", tabindex='4'),
-        ):
-        pass
-    insert = annotate.autocallable(insert)
-
-#####################################
-class BaseUI(rend.Page):
-    addSlash = True
-    def renderHTTP(self, ctx):
-        return IStore(ctx).transact(rend.Page.renderHTTP, self, ctx)
-        
-    def locateChild(self, ctx, segments):
-        return IStore(ctx).transact(rend.Page.locateChild, self, ctx, segments)
-
-#############################
-class UI(BaseUI):
-    
-    docFactory = loaders.xmlfile ('ui.html')
-    child_styles = static.File('styles')
-    child_images = static.File('images')
-    child_webform_css = webform.defaultCSS
-
-    def render_starttimer(self, ctx, data):
-        ctx.remember(now(), ITimer)
-        return ctx.tag
-        
-    def render_stoptimer(self, ctx, data):
-        start = ITimer(ctx)
-        return ctx.tag['%s' % (now()-start)]
-
-    def render_needForms(self, ctx, data):
-        action = ctx.arg('action', 'view')
-        if action == 'edit':
-            form = inevow.IQ(ctx).onePattern('frm')
-            return ctx.tag[form]
-        return ctx.tag.clear()
-
-    def data_getEntries(self, ctx, data):
-        num = ctx.arg('num', '60')
-        return IBlog(IStore(ctx)).getPosts(int(num))
-
-    def render_entries(self, ctx, data):
-        ctx.tag.fillSlots('modification', pptime(data.modified))
-        ctx.tag.fillSlots('category', data.category)
-        ctx.tag.fillSlots('author', data.author)
-        ctx.tag.fillSlots('title', data.title)
-        ctx.tag.fillSlots('content', data.content)
-        ctx.tag.fillSlots('permaLink', url.root.child('%s' % (data.id)))
-        return ctx.tag
-
-    def render_insert(self, ctx, data):
-        return ctx.tag
-
-    def render_editer(self, ctx, data):
-        ctx.tag.fillSlots('editPost', url.root.child('%s' % (data.id)
-                                                         ).add('action','edit'))
-        return ctx.tag
-
-    def render_insert(self, ctx, data):
-        ctx.tag.fillSlots('insert', url.root.child('insertEntry'))
-        return ctx.tag
-
-    def child_insertEntry(self, ctx):
-        return NewEntry()
-
-    def childFactory(self, ctx, segment):
-        id = segment.isdigit() and segment or '-1'
-        if int(id) >= 0:
-            return IBlog(IStore(ctx)).getOne(int(id))
-        elif segment == 'rpc2':
-            return BlogRPC(IStore(ctx))
-        elif segment == 'atom.xml':
-            return Atom()
-
-    def child_thx(self, ctx):
-        return Thx()
-
-##################################
-class NewEntry(BaseUI):
-    implements(IInsert)
-                
-    docFactory = loaders.stan(
-        t.html[
-            t.head[
-                t.title['Insertion form'],
-                t.link(rel='stylesheet', type='text/css', href=url.root.child('webform_css')),
-            ],
-            t.body[
-                t.h1['Insertion'],
-                t.invisible(render=t.directive("forms"))
-            ]
-        ])    
-    def render_forms(self, ctx, data):
-        d = iformless.IFormDefaults(ctx).getAllDefaults('insert')
-        d['author'] = 'Anonymous'
-        d['id'] = IBlog(IStore(ctx)).getNextId()
-        return webform.renderForms()
-
-    def insert(self, ctx, id, title, author, category, content):
-        newPost = Post(store=IStore(ctx),
-                       id=int(id),
-                       author=unicode(author),
-                       title=unicode(title),
-                       category=unicode(category),
-                       content=unicode(content))
-        IBlog(IStore(ctx)).addNewPost(newPost)
-        inevow.IRequest(ctx).setComponent(iformless.IRedirectAfterPost, '/thx')
-
-#####################################
-class Thx(rend.Page):
-    docFactory = loaders.stan(
-            t.html[
-                t.body[
-                    t.h1['Succeeded'],                    
-                    t.a(href=url.root)["Back to main"]
-                ]
-            ])
-
-####################################
-class Entry(UI):
-    implements(IInsert)
-    def data_getEntries(self, ctx, data):
-        return [data]
-
-    def render_forms(self, ctx, data):
-        d = iformless.IFormDefaults(ctx).getAllDefaults('insert')
-        d['author'] = self.original.author
-        d['category'] = self.original.category
-        d['title'] = self.original.title
-        d['content'] = self.original.content
-        d['id'] = self.original.id
-        return webform.renderForms()
-
-    def insert(self, ctx, id, title, author, category, content):
-        self.original.author = unicode(author)
-        self.original.title = unicode(title)
-        self.original.category = unicode(category)
-        self.original.content = unicode(content)
-        inevow.IRequest(ctx).setComponent(iformless.IRedirectAfterPost, '/thx')
-
-#####################################
-class Atom(BaseUI):
-    docFactory = loaders.xmlfile('atom.xml')
-    
-    def beforeRender(self, ctx):
-        inevow.IRequest(ctx).setHeader("Content-Type", "application/application+xml; charset=UTF-8")
-    
-    def data_getFirstPost(self, ctx, data):
-        for post in IBlog(IStore(ctx)).getPosts(1):
-            return post
-
-    def render_modified(self, ctx, data): 
-        return ctx.tag.clear()[atompptime(data.modified)]
-    
-    def data_get_posts(self, ctx, data):
-        return IBlog(IStore(ctx)).getPosts(15)
-        
-    def render_post(self, ctx, data):
-        #id = data.poolToUID[IBlog(IStore(ctx)).postsPool]
-        # mkp: ...I don't know what that means or what it's for.
-        ctx.tag.fillSlots('title', data.title)
-        ctx.tag.fillSlots('link', url.root.child(data.id))
-        ctx.tag.fillSlots('id', data.id)
-        ctx.tag.fillSlots('created', atompptime(data.created))
-        ctx.tag.fillSlots('modified', atompptime(data.modified))        
-        ctx.tag.fillSlots('author', data.author)
-        ctx.tag.fillSlots('content', data.content)
-        return ctx.tag
-
-#####################################
-from axiom.item import transacted
-class BlogRPC(xmlrpc.XMLRPC):
-    """Publishes stuff"""
-
-    def __init__(self, store):
-        xmlrpc.XMLRPC.__init__(self)
-        self.store = store
-    
-    def xmlrpc_publish(self, author, title, category, content):
-        newid = IBlog(self.store).getNextId()
-        newPost = Post(store=self.store,
-                       id=newid,
-                       author=unicode(author),
-                       title=unicode(title),
-                       category=unicode(category),
-                       content=unicode(content))
-        IBlog(self.store).addNewPost(newPost)
-        return 'Successfully added post number %s' % newid
-    xmlrpc_publish = transacted(xmlrpc_publish)
-
-    def xmlrpc_edit(self, id, author, title, category, content):
-        post = IBlog(self.store).getOne(id)
-        post.author = author
-        post.title = title
-        post.category = category
-        post.content = content
-        post.setModified()
-        return 'Successfully modified post number %s' % id
-    xmlrpc_edit = transacted(xmlrpc_edit)
-        
-    def xmlrpc_entries(self, count):
-        return [(entry.id, entry.author, entry.category, entry.title, entry.content) \
-                for entry in IBlog(self.store).getPosts(count)]
-    
-    xmlrpc_entries = transacted(xmlrpc_entries)
-
-registerAdapter(Entry, Post, inevow.IResource)
-

=== removed file 'Nevow/examples/blogengine/iblogengine.py'
--- Nevow/examples/blogengine/iblogengine.py	2006-03-17 15:00:39 +0000
+++ Nevow/examples/blogengine/iblogengine.py	1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
-from zope.interface import Interface
-
-class IStore(Interface):
-    """ Interface used to remember the store in the site object """
-    
-class IBlog(Interface):
-    """ Represents the Blog Powerup in the Store """
-    def addNewPost(post):
-        """ Add the user provided post instance to the blog """
-    def getPosts(how_many = None):
-        """ Get the last X posts, if how_many is not specified, gets all of them """
-
-    def getOne(id):
-        """ Get the post with the corresponding id from the store """
-
-    def getNextId():
-        """ Get the next free id in the store """

=== removed directory 'Nevow/examples/blogengine/images'
=== removed file 'Nevow/examples/blogengine/images/bg-header2.jpg'
Binary files Nevow/examples/blogengine/images/bg-header2.jpg	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/bg-header2.jpg	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/images/blank.gif'
Binary files Nevow/examples/blogengine/images/blank.gif	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/blank.gif	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/images/geek-bullet.gif'
Binary files Nevow/examples/blogengine/images/geek-bullet.gif	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/geek-bullet.gif	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/images/here-bullet.gif'
Binary files Nevow/examples/blogengine/images/here-bullet.gif	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/here-bullet.gif	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/images/home-bullet.gif'
Binary files Nevow/examples/blogengine/images/home-bullet.gif	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/home-bullet.gif	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/images/top.gif'
Binary files Nevow/examples/blogengine/images/top.gif	2005-10-14 17:36:24 +0000 and Nevow/examples/blogengine/images/top.gif	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/blogengine/smtpserver.py'
--- Nevow/examples/blogengine/smtpserver.py	2006-01-21 22:53:11 +0000
+++ Nevow/examples/blogengine/smtpserver.py	1970-01-01 00:00:00 +0000
@@ -1,148 +0,0 @@
-
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-A toy email server.
-"""
-from zope.interface import implements
-
-from twisted.internet import defer
-from twisted.mail import smtp
-
-from axiom.item import transacted
-
-from axiomstore import Post
-from iblogengine import IBlog
-
-
-# You need to set this to your real SMTP_HOST
-SMTP_HOST = 'localhost'
-FROM = 'user@localhost'
-
-__doc__ = """
-This is the mail message format to post something via mail, no special
-order is required, but all those fields must be present:
-======
-[Id: ID] 
-Author: AUTHOR_NAME
-Category: CATEGORY_NAME
-Title: TITLE
-Content: CONTENT
-"""
-
-class BlogMessageDelivery:
-    implements(smtp.IMessageDelivery)
-    def __init__(self, store):
-        self.store = store
-    
-    def receivedHeader(self, helo, origin, recipients):
-        return recipients
-    
-    def validateFrom(self, helo, origin):
-        # All addresses are accepted
-        return origin
-    
-    def validateTo(self, user):
-        # Only messages directed to the "console" user are accepted.
-        if user.dest.local == "blog":
-            return lambda: BlogMessage(self.store)
-        raise smtp.SMTPBadRcpt(user)
-
-class BlogMessage:
-    implements(smtp.IMessage)
-    
-    def __init__(self, store):
-        self.lines = []
-        self.store = store
-    
-    def lineReceived(self, line):
-        self.lines.append(line)
-    
-    def eomReceived(self):
-        post = {}
-        isContent = False
-        ctnt_buff = []
-        recipients = self.lines[0]
-        addrs = []
-
-        for recipient in recipients:
-            if '@' not in recipient.orig.addrstr:
-                # Avoid answering to bounches
-                if not recipient.orig.addrstr == '<>':
-                    addrs.append(recipient.orig.addrstr[:-1]+'@'+recipient.orig.domain+'>')
-            else:
-                # Avoid answering to bounches
-                if not recipient.orig.addrstr == '<#@[]>':
-                    addrs.append(recipient.orig.addrstr)
-            
-        for line in self.lines[1:]:
-            if not isContent:
-                try:
-                    field, value = line.split(':', 1)
-                except ValueError:
-                    continue
-                if field.lower() != 'content':
-                    post[field.lower()] = value.strip()
-                else: 
-                    isContent = True
-                    ctnt_buff.append(value.strip())
-            else:
-                ctnt_buff.append(line.strip())
-        post['content'] = '\n'.join(ctnt_buff)
-        
-        for header in 'content author category title'.split():
-            if not post.has_key(header):
-                self.lines = []
-                return defer.fail(None) 
-        if post.has_key('id'):
-            oldpost = IBlog(self.store).getOne(int(post['id']))
-            oldpost.author = unicode(post['author'])
-            oldpost.title = unicode(post['title'])
-            oldpost.category = unicode(post['category'])
-            oldpost.content = unicode(post['content'])
-            oldpost.setModified()
-            action = 'modified'
-            id = post['id']
-        else:
-            newid = IBlog(self.store).getNextId()
-            newPost = Post(store=self.store,
-                           id=newid,
-                           author=unicode(post['author']),
-                           title=unicode(post['title']),
-                           category=unicode(post['category']),
-                           content=unicode(post['content']))
-            IBlog(self.store).addNewPost(newPost)
-            action = 'added'
-            id = newid
-        self.lines = []
-        msg = """From: <%s>
-Subject: Successfull Post
-
-Post number %s successfully %s
-""" % (FROM, id, action)
-        return self.sendNotify(addrs, msg)
-    eomReceived = transacted(eomReceived)
-    
-    def toLog(self, what):
-        print what
-        
-    def sendNotify(self, to_addr, msg):
-        d = smtp.sendmail(SMTP_HOST, FROM, to_addr, msg)
-        d.addCallback(self.toLog)
-        d.addErrback(self.toLog)
-        return d
-    
-    def connectionLost(self):
-        # There was an error, throw away the stored lines
-        self.lines = None
-
-class BlogSMTPFactory(smtp.SMTPFactory):
-    def __init__(self, store, *a, **kw):
-        smtp.SMTPFactory.__init__(self, *a, **kw)
-        self.delivery = BlogMessageDelivery(store)
-    
-    def buildProtocol(self, addr):
-        p = smtp.SMTPFactory.buildProtocol(self, addr)
-        p.delivery = self.delivery
-        return p

=== removed directory 'Nevow/examples/blogengine/styles'
=== removed file 'Nevow/examples/blogengine/styles/form.css'
--- Nevow/examples/blogengine/styles/form.css	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/styles/form.css	1970-01-01 00:00:00 +0000
@@ -1,78 +0,0 @@
-form {
-	margin: 0;
-}
-
-/*
-form div {
-	margin-top: 10px;
-}
-*/
-
-form .field {
-	margin-top: 10px;
-}
-
-fieldset {
-  margin: 0;
-  margin-top: 10px;
-
-/*border: 1px solid red;*/
-    border-style: none;
-    padding: 0;
-}
-
-
-label {
-    display: block; 
-    margin-bottom: 2px; 
-}
-
-label span {
-    font-size: 85%;
-    color: #666;
-}
-
-input, textarea {
-    /* f a t font to ease input */
-    font: bold 12px/100% "Lucida Console", Curier, monospace;  
-    color: #444;
-
-    padding: 4px 2px;
-    border: 1px solid #ccc;
-
-    margin: 0;
-}
-
-input:focus, textarea:focus {
-    border-color: #6cc;
-}
-
-
-input.btn {
-    margin: 0;
-    margin-right: 2px; /* space between the next button */
-
-    padding: 2px 4px;
-
-    color: #333;
-    background: #6cc;
-
-    /* raised 3d look */
-    border-top: 2px solid #ccc;
-    border-left: 2px solid #ccc;
-    border-bottom: 2px solid #444;
-    border-right: 2px solid #444;
-    
-    font-family: Verdana, Helvetica, sans-serif;
-    line-height: 150%;
-
-    font-size: xx-small; /* fake value for IE4/5.x */
-    voice-family: "\"}\""; 
-    voice-family: inherit; 
-    font-size: x-small; /* real inteded value for text size */
-}
-
-blah {
-    /* fake rule for IE */
-}
-

=== removed file 'Nevow/examples/blogengine/styles/site.css'
--- Nevow/examples/blogengine/styles/site.css	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/styles/site.css	1970-01-01 00:00:00 +0000
@@ -1,482 +0,0 @@
-@import url("typo.css");
-@import url("form.css");
-
-/* 
--------------------------------------------------
-Theme by Andrea Peltrin (http://www.deelan.com)
--------------------------------------------------
-*/
-
-
-/* basic elements */
-/*---------------------------------------------------*/
-
-body, html {
-	margin: 0;
-	padding: 0;
-}
-
-
-body { 
-	color: #222; 
-	
-	margin: 0;	
-/*	background: #903 url("images/background.gif"); */
-	background: #fafafa;
-}
-
-body, p, li, td, th, dd, dt, h1, h2, h3, h4, h5, h6 /* help browser to not forget */
-{		
-	font-family: verdana, geneva, arial, sans-serif;
-/*	line-height: 200%;*/
-
-	font-size: x-small;  	/* IE5 */
-	voice-family: "\"}\""; 
-	voice-family: inherit;
-	font-size: small; 
-}
-
-html>body {
-	font-size: small; 
-}
-
-
-a img {
-    border-style: none;
-}
-
-/* main contents */
-
-#main {	
-	/*border: 1px solid red; */ /* debug */
-	/*border-top: none;*/
-		
-
-
-	margin: 0 auto; 
-	padding: 0; 
-
-	position: absolute;
-
-	top: 30px;
-	left: 50%;
-	margin-left: -380px; 
-
-	width: 760px;
-}
-
-/* header */
-
-#header { 
-	background: #069 url("/images/bg-header2.jpg") top right no-repeat; 
-	
-	height: 235px;  
-	border: 1px solid #ccc;
-}
-
-
-#header h1 { 
-	margin: 0;
-	margin-top: 140px;
-	/*margin-right: 280px;*/
-
-    padding: 0;
-    padding-left:30px;
-
-
-	font: bold italic 52px/100% georgia, times, serif;
-	color: #fff;
-}
-
-#header p {
-	margin: 0;
-	/*margin-left: 280px;*/ /* == #header h1 */
-	
-    padding: 0;
-    padding-left:30px;
-
-
-	text-transform: lowercase;
-	font: bold 18px/100% verdana, arial, sans-serif;
-			
-	color: #fff;
-}
-
-
-/*---------------------------------------------------*/
-
-#content{
-	padding: 35px;
-	margin: 0;
-	
-	/*border: 1px solid red; */ /* debug */	
-	margin-right: 245px; 
-
-}
-
-#content p {
-	/* border: 1px solid red; */ /* debug */
-/*    text-align: justify;*/
-	line-height: 160%;
-
-	margin: 1em 0;		
-	padding: 0;
-}
-
-#content ul, #content ol, #content dl, #content blockquote {
-	line-height: 160%; 
-}
-
-
-#content dd {
-    margin: 0;
-    margin-bottom: 10px;
-}
-
-
-/* funky titles */
-#content h2 {
-
-/*	font: bold italic 24px/100% georgia, times, serif;*/
-	font: bold 18px/100% verdana, arial, sans-serif;
-	
-	color: #069;
-		
-	margin: 0;
-	margin-bottom: 4px; /* space up for datetime */
-
-	text-transform: lowercase;
-/*	font-variant: small-caps;*/
-
-}
-
-#content p.dtm {
-
-	margin: 0; 
-	margin-bottom: 1em;
-
-	font-size: 80%;
-
-	text-transform: uppercase;
-}
-
-
-div.entry {
-
-}
-
-
-#content hr {
-    visibility: hidden;
-

-

-	padding: 0;	

-    margin: 2.5em auto;

-    

-

-}
-
-
-
-/* ...and finally we place the list of links */
-
-#sidebar{
-	float: right;
-
-/*    border: 1px solid #069;*/
-
-	margin: 0;
-    padding: 35px; 
-	
-	width: 250px; 
-	voice-family: "\"}\"";   
-	voice-family: inherit;
-	width: 180px;
-}
-
-#main>#sidebar {
-	width: 180px;
-}
-
-
-#sidebar ul {
-	list-style: none;
-	
-	margin: 0;	
-	margin-bottom: 25px;
-
-	padding: 0;	
-}
-
-
-#sidebar ul li {
-	line-height: 150%; 
-
-	margin: 0;	
-	padding: 5px 0; 
-}
-
-
-#sidebar ul#nav li {
-	line-height: 160%;  /* restore global value */
-
-	border-style: none;
-	background: none;
-		
-	margin-bottom: 10px;
-	padding: 5px 0 5px 22px; /* space for arrow gfx */		
-
-	border-top: 1px solid #ccc;	
-	border-bottom: 1px solid #ccc;
-	
-	text-transform: lowercase;
-}
-
-
-/* funky titles */
-#sidebar h3 {
-	color: #069;
-		
-	margin: 0;	
-	margin-bottom: 15px;	
-    
-	padding: 0;
-    
-    
-}
-
-
-/* styles for in-line images/photos */
-/*---------------------------------------------------*/
-#content .image img {
-	display: block;		
-	border: 1px solid #444;
-}
-
-#content .image {
-	margin: 1em auto;  /* == #content p*/
-
-	width: 360px;
-	position: relative;
-}
-
-#content .image span {
- 	position: absolute;
-    
-	background: #069;
-	color: #fff;
-
-	padding: 4px 4px;
-
- 	bottom: 10px;
-	left: 10px;
-  
- 	z-index: 1;	
-
-	/* verdana looks better than arial if font is small */
-	font-family: verdana, arial, helvetica, sans-serif;  
-
-	/* @@ fix IE5 here */
-	font-size: x-small;
-}
-
-/* hyperlink */
-/*---------------------------------------------------*/
-
-a:link, a:visited, a:hover, a:active {
-	color: #099;
-	
-	text-decoration: none;
-	border-bottom: 1px solid #099;
-}
-
-a:visited {
-	color: #444;
-	border-bottom-color: #444;
-}
-
-a:hover {
-	color: #903;
-	/*border-bottom: 1px solid #903;*/
-	border-bottom: none;
-}
-
-
-#footer {
-	margin: 0; 
-	margin-top: 20px; 
-	padding: 15px 0;		
-
-/*	background: #903;*/
-
-	clear: both;	  /* float reset */
-	text-align: center;
- 	
-
-	border-top: 1px solid #ccc;
-
-	font-size: 85%;
-}
-
-
-
-/* utilities */
-/*---------------------------------------------------*/
-
-.cut {clear: both; height: 1px;}
-.hidden {display: none;}
-
-/*---------------------------------------------------*/
-
-ul#breadcrumb {
-	list-style: none;
-
-	/* reset both on Mozilla and IE */
-	padding: 0;	
-
-	margin: 0;
-	margin-bottom: 35px;		
-}
-
-ul#breadcrumb li {
-	display: inline;
-	margin-right: 5px;
-	
-	/*text-transform: lowercase;*/
-}
-
-ul#breadcrumb li:last-child {
-	font-weight: bold;
-}
-
-/*
-#searchBtn {
-	margin-left: 5px;
-}
-
-
-*/
-/* -------------------------------------------------- */
-
-.photo {
-
-	float: left;
-	
-	margin: 5px 0;
-	margin-right: 10px;
-
-    padding: 0;
-}
-
-.photo a:link, .photo a:visited {
-    border: 1px solid #0099CC;    
-    
-    display: block;
-}
-
-.photo a:link:hover, .photo a:visited:hover {
-    border: 1px solid #903;
-}
-
-.photo img {
-    display: block;
-    
-    margin:0;
-    
-    padding: 5px;
-    background: #fff;
-}
-
-
-
-.transport {
-
-
-    width: auto;
-
-    /*border: 2px solid  #069;*/
-    text-align: center;
-    
-    padding: 5px 0;
-}
-
-
-
-#alert {
-    background: #069;
-    color: white;
-    
-    font-weight: bold;
-
-    margin-bottom: 20px;
-}
-
-
-
-#alert ul {
-    list-style: none;
-
-    padding: 0;
-    margin: 0;    
-}
-
-
-#alert ul li {
-    margin: 5px 10px;
-}
-
-
-/* @@ fix, it's ugly looking */
-.comment:target {
-    border: 1px solid #099;
-    
-}
-
-
-
-
-
-#moblog{
-    text-align: center;
-    background: #ddd;
-    border: 1px solid #999999;
-    padding: 5px;
-}
-
-
-
-#moblog {	
-	margin: 5px 0;
-    padding: 10px;
-        
-}
-
-#moblog   a:link, #moblog   a:visited {
-    border: 1px solid #0099CC;    
-    
-    display: block;
-    width: 85px;
-    
-    margin: 5px auto;
-}
-
-#moblog  a:link:hover, #moblog  a:visited:hover {
-    border: 1px solid #903;
-}
-
-#moblog  img {
-    display: block;
-    
-    margin:0;    
-    padding: 5px;
-    
-    background: #fff;
-}
-
-
-#moblog  p {
-    padding: 0;
-    margin: 0;
-
-    text-align: center;
-}

=== removed file 'Nevow/examples/blogengine/styles/typo.css'
--- Nevow/examples/blogengine/styles/typo.css	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/styles/typo.css	1970-01-01 00:00:00 +0000
@@ -1,103 +0,0 @@
-/* --------------------
-definition list
----------------------*/
-
-dl {
-
-}
-
-dd {
-	margin-left: 1em;
-}
-
-dt {
-
-}
-
-/* --------------------
-phrase elements
----------------------*/
-
-abbr, acronym
-{	
-	cursor: help; 
-    border-bottom: dotted 1px;
-}
-
-
-ins, del 
-{
-	
-}
-
-ins
-{
-	text-decoration: none; /* some UAs reder as underlined, hence reset */
-}
-
-ins:before
-{
-	/* content: '[' */
-}
-
-ins:after
-{
-	/* content: ']' */
-}
-
-
-/* --------------------
-block/inline quotations, 
-check: http://diveintomark.org/archives/2002/05/04/the_q_tag.html
----------------------*/
-
-blockquote {
-   border-left: 4px double #6cc; 
-   
-   padding: 0;
-   padding-left: 10px; 
-   
-   margin: 0.5em 5%;
-}
-
-cite, q {
-  font-style: italic;
-}
-
-p>q, li>q, p>cite, li>cite { /* reset for mozilla, opera */
-  font-style: normal; 
-}
-
-cite, q {
-  quotes: '\201C' '\201D' '\2018' '\2019'; /* quote and quote within quote */
-}
-
-cite:before, q:before {
-  content: open-quote;
-}
-
-cite:after, q:after {
-  content: close-quote;
-}
-
-
-/* --------------------
-geeks'  markup codes
----------------------*/
-
-pre, code {
-	font-size: 100%; /* reset size for IE */
-}
-
-
-#content>pre {
-	width: auto; /* reset value for moz, opera */
-}
-
-
-
-/* mostly used to indicate markup/language keywords*/
-code {
-	color: #6cc; 
-	font-weight: bold;
-}

=== removed file 'Nevow/examples/blogengine/ui.html'
--- Nevow/examples/blogengine/ui.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/blogengine/ui.html	1970-01-01 00:00:00 +0000
@@ -1,79 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html
-    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-    
-<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en" xmlns:nevow="http://nevow.com/ns/nevow/0.1"; nevow:render="starttimer">
-
-    <head>
-        <title>Subbacultcha</title>
-        <style type="text/css">@import url('/styles/site.css');</style>
-        <style type="text/css">@import url('/webform_css');</style>
-    </head>
-
-    <body>
-                
-        <div id="main">
-        
-        <div id="header">
-            <h1>Subbacultcha</h1>
-            <p>not offending anyone</p>
-        </div>
-        
-        <div id="sidebar"> 
-            <ul id="nav">        
-                <li><a id="a_home" href="/">Home</a></li>
-               <!--  <li><a id="a_archives"  title="" href="#">Archives</a></li>        -->
-                <li nevow:render="insert"><a href="#">
-                        <nevow:attr name="href"><nevow:slot name="insert" /></nevow:attr>
-                        Insert a new entry
-                    </a>
-                </li>
-            </ul>
-        </div>
-
-        <div id="content">        
-        <div nevow:data="getEntries" nevow:render="sequence">
-   
-            <div nevow:pattern="item" nevow:render="entries">
-                <h2><nevow:slot name="title" /></h2>                
-                            
-                <!-- <p><nevow:slot name="modification"></nevow:slot></p> -->
-                
-                <p><nevow:slot name="content"></nevow:slot></p>
-                <p>
-                    <a href="#">
-                        <nevow:attr name="href"><nevow:slot name="permaLink" /></nevow:attr>
-                        PermaLink
-                    </a>
-                    &bull;
-                    <nevow:invisible nevow:render="editer">
-                    <a href="#">
-                    <nevow:attr name="href"><nevow:slot name="editPost" /></nevow:attr>
-                    Edit
-                    </a>
-                    </nevow:invisible>
-                </p>
-                
-                <p>Posted by <nevow:slot name="author"></nevow:slot> on <nevow:slot name="modification" />, filed under <nevow:slot name="category" /></p>
-            </div>
-                    
-        </div>
-        
-        <!-- /content -->
-        <nevow:invisible nevow:render="needForms">
-            <p>Edit Entry</p>
-            <div nevow:pattern="frm" nevow:render="forms" />
-        </nevow:invisible>
-        </div>
-        
-        <div id="footer">
-            <p>Served in <span nevow:render="stoptimer" /></p>
-            <p>CSS by Andrea 'deelan' Peltrin, <a href="http://www.deelan.com/";>website</a></p>
-        </div>        
-        
-        <!-- /main -->
-        </div>
-    </body>
-</html>
-

=== removed directory 'Nevow/examples/cal'
=== removed file 'Nevow/examples/cal/__init__.py'
=== removed file 'Nevow/examples/cal/cal.py'
--- Nevow/examples/cal/cal.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/cal/cal.py	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-from nevow import rend, loaders, tags as t
-from nevow.taglibrary import cal
-
-class Calendar(rend.Page):
-    addSlash = True
-    year = None
-    month = None
-    def __init__(self, year=None, month=None):
-        if year is not None and month is not None:
-            self.year = year
-            self.month = month
-
-    def locateChild(self, ctx, segments):
-        if len(segments) >= 2:
-            year, month = segments[:2]
-            return Calendar(int(year), int(month)), segments[2:]
-        return super(Calendar, self).locateChild(ctx, segments)
-
-    def data_date(self, ctx, data):
-        if self.year is None or  self.month is None:
-            return None
-        return int(self.year), int(self.month)
-        
-    docFactory = loaders.stan(
-        t.html[
-            t.head[
-                t.title["Calendar Example"],
-                cal.calendarCSS
-            ],
-            t.body[
-                t.invisible(data=t.directive('date'), render=cal.cal)
-            ]
-        ]
-    )

=== removed directory 'Nevow/examples/canvas'
=== removed file 'Nevow/examples/canvas/__init__.py'
=== removed file 'Nevow/examples/canvas/canvas.py'
--- Nevow/examples/canvas/canvas.py	2007-02-28 15:14:26 +0000
+++ Nevow/examples/canvas/canvas.py	1970-01-01 00:00:00 +0000
@@ -1,177 +0,0 @@
-import os, string, random
-
-from twisted.internet import task
-
-from nevow import canvas, rend
-
-
-DEBUG = False
-
-
-try:
-    words = open('/usr/share/dict/words').readlines()
-except:
-    words = open(os.path.join('.','files','words')).readlines()
-
-
-## Some random helpers
-rndpt = lambda w, h: (random.randint(-w/2, w/2), random.randint(-h/2, h/2))
-rndrct = lambda w, h: rndpt(w, h) + rndpt(w, h)
-rndtxt = lambda: ''.join([random.choice(string.letters) for x in range(random.randint(5, 10))])
-rndp = lambda: (random.randint(0, 100), )*2
-mv = lambda: random.choice( [1, -1, 2, -2, 3, -3, 4, -4, 5, -5] )
-
-
-class Looper(object):
-    def __init__(self, canvas):
-        self.canvas = canvas
-        self.stride = mv()
-        self.looper = task.LoopingCall(self.loop)
-        self.looper.start(0.25)
-
-    def loop(self):
-        if self.canvas.closed:
-            self.looper.stop()
-        else:
-            self.perform()
-
-
-class Textorizer(Looper):
-    firstTime = True
-    def __init__(self, T, w, h):
-        self.T = T
-        self.w = w
-        self.h = h
-        self.hstride = mv()
-        Looper.__init__(self, T.canvas)
-
-    def perform(self):
-        T = self.T
-        if not self.firstTime:
-            hw = self.w/2
-            hh = self.h/2
-            if T.x < -hw or T.x+400>hw:
-                self.hstride = -self.hstride
-            if T.y < -hh or T.y+100>hh:
-                self.stride = -self.stride
-            T.move(T.x+self.hstride, T.y+self.stride)
-        else:
-            self.firstTime = False
-            T.size(random.randint(9, 48))
-            T.listFonts().addCallback(lambda fnts: T.font(random.choice(fnts)))
-
-
-class Rotatorizer(Looper):
-    angle = 0
-    def perform(self):
-        self.canvas.rotate(self.angle)
-        self.angle += self.stride
-
-
-class Alphaerizer(Looper):
-    def __init__(self, canvas):
-        canvas.alpha(random.randint(0, 100))
-        Looper.__init__(self, canvas)
-
-    def perform(self):
-        self.canvas.alpha(self.canvas._alpha+self.stride)
-        if self.canvas._alpha < 0 or self.canvas._alpha > 100:
-            self.stride = -self.stride
-
-
-class CanvasDemo(canvas.Canvas):
-    def onload(self, canvas):
-        """Demo of drawing with a CanvasSocket object.
-        """
-        ## Create a bunch of groups
-        for x in xrange(random.randint(5, 15)):
-            newGroup = canvas.group()
-            if random.choice([True, False]):
-                Alphaerizer(newGroup)
-                self.manipulateACanvas(newGroup)
-            else:
-                newGroup.pen(2, 0, 100)
-                newGroup.reposition(*rndpt(self.width, self.height))
-                newGroup.move(-25, -25)
-                newGroup.line(25, 25)
-                newGroup.move(-25, 25)
-                newGroup.line(25, -25)
-                Rotatorizer(newGroup)
-
-    def manipulateACanvas(self, canvas):
-        canvas.reposition(*rndpt(self.width, self.height))
-        canvas.S = S = canvas.sound('http://localhost/amen.mp3')
-        S.play(timesLoop=5)
-        for x in range(random.randint(1, 4)):
-            canvas.pen( 
-                random.randint(1, 10),
-                random.randint(0, 0xffffff),
-                random.randint(0, 100))
-            canvas.move(*rndpt(self.width, self.height))
-            choice = random.randint(0, 4)
-            if choice == 0:
-                canvas.line(*rndpt(self.width, self.height))
-            elif choice == 1:
-                canvas.fill(random.randint(0, 0xffffff), random.randint(0, 100))
-                for x in range(random.randint(3, 20)):
-                    if random.randint(0, 1):
-                        canvas.line(*rndpt(self.width, self.height))
-                    else:
-                        canvas.curve(*rndrct(self.width, self.height))
-                canvas.close()
-            elif choice == 2:
-                canvas.curve(*rndrct(self.width, self.height))
-            elif choice == 3:
-                T = canvas.text(random.choice(self.original), *(0,0,400,100))
-                # This is an example of how you can hold on to drawing objects and continue to
-                # draw on them later, because the CanvasSocket holds itself open until done() is called
-                Textorizer(T, self.width, self.height)
-            else:
-                # This demo requires a folder of images which I don't want to put in
-                # the nevow source. Hooking this up is left as an exercise for the reader.
-                continue
-                imgname = random.choice(os.listdir("flsh/images"))
-                I = canvas.image('/images/%s' % imgname)
-                I.scale(*rndp())
-                I.alpha(random.randint(0, 100))
-                rotate = random.randint(-180, 180)
-                I.rotate(rotate)
-                I.move(*rndpt(self.width, self.height))
-
-    # See above comment
-    #from nevow import static
-    #child_images = static.File('images')
-
-    def onMouseDown(self, canvas, x, y):
-        canvas.x = x
-        canvas.y = y
-        canvas.pen(10, 0xDF34AB, 50)
-        canvas.move(x-25, y-25)
-        canvas.line(x+25, y+25)
-        canvas.move(x+25, y-25)
-        canvas.line(x-25, y+25)
-        #canvas.S.play()
-
-    def onKeyDown(self, canvas, key):
-        if hasattr(canvas, 'x'):
-            T = canvas.text(key, canvas.x, canvas.y, 200, 200)
-            T.size(random.randint(9, 48))
-            T.listFonts().addCallback(lambda fnts: T.font(random.choice(fnts)))
-            canvas.x += 15
-
-
-class Reloader(rend.Page):
-    canvas = None
-    def locateChild(self, ctx, segs):
-        if segs == ('',):
-            reload(__import__(__name__))
-            self.canvas = CanvasDemo(words)
-            self.canvas.addSlash = True
-            return self.canvas, segs
-        return self.canvas, segs
-
-
-def createResource():
-    if DEBUG:
-        return Reloader()
-    return CanvasDemo(words)

=== removed directory 'Nevow/examples/children'
=== removed file 'Nevow/examples/children/__init__.py'
=== removed file 'Nevow/examples/children/children.py'
--- Nevow/examples/children/children.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/children/children.py	1970-01-01 00:00:00 +0000
@@ -1,113 +0,0 @@
-"""
-Simple example of how child resources are located.
-"""
-
-from nevow import loaders
-from nevow import rend
-from nevow import tags as T
-from nevow import url
-
-
-class ChildPage(rend.Page):
-
-    def __init__(self, name):
-        rend.Page.__init__(self)
-        self.name = name
-
-    def child_childOfChild(self, context):
-        return ChildOfChildPage(self.name)
-
-    def render_name(self, context, data):
-        return self.name
-
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.h1['ChildPage'],
-                T.p['My name is: ', T.span(id="name")[render_name]],
-                T.p[
-                    'I have child too: ',
-                    T.a(id="child", href=url.here.child('childOfChild'))['my child']
-                    ],
-                ]
-            ]
-        )
-
-
-class ChildOfChildPage(rend.Page):
-
-    def __init__(self, parentName):
-        rend.Page.__init__(self)
-        self.parentName = parentName
-
-    def render_parentName(self, context, data):
-        return self.parentName
-
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.h1['ChildOfChildPage'],
-                T.p['My parent is the ChildPage called: ', T.span(id="parentName")[render_parentName]]
-                ]
-            ]
-        )
-
-
-class RootPage(rend.Page):
-
-    addSlash = True
-
-    # A resource that is always called 'foo' and only needs to be created once
-    child_foo = ChildPage('foo')
-
-    def child_bar(self, context):
-        """A resource that is always called 'bar' but is created per-request
-        """
-        return ChildPage('bar')
-
-    def childFactory(self, ctx, name):
-        """Create and return a child resource where the name is dynamic
-        """
-        if name in ['1', '2', '3']:
-            return ChildPage(name)
-
-    def locateChild(self, ctx, segments):
-        """Create and return a dynamically named child resource if child_ or
-        childFactory didn't help. However, this time we get the chance to
-        consume multiple path segments (inluding the childOfChild link).
-        
-        Note: locateChild is actually the main resource location API (see
-        inevow.IReource) and it is actually rend.Page's implementation of the
-        method that provides the child_ and childFactory functionality.
-        """
-
-        # Let parent class have a go first
-        # WARNING: This 3 lines work well until you use formless in this page
-        # because formless will make locateChild return only one return value
-        # (a deferred) on which you should add a callback that accepts a resource and 
-        # an empty tuple that represents no remaining segments.
-        child, remainingSegments = rend.Page.locateChild(self, ctx, segments)
-        if child:
-            return child, remainingSegments
-
-        # Consume all remaining path segments for the name
-        return ChildPage('/'.join(segments)), []
-    
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.h1['RootPage'],
-                T.p['Fixed name, singleton resource: ', T.a(id="foo", href=url.here.child('foo'))['foo']],
-                T.p['Fixed name, created per-request: ', T.a(id="bar", href=url.here.child('bar'))['bar']],
-                T.p[
-                    'Dynamically named resources, located via childFactory: ',
-                    [(T.a(id=("d", n), href=url.here.child(n))[n],' ') for n in ['1', '2', '3']]
-                    ],
-                T.p[
-                    'Dynamically named resources, located via locateChild: ',
-                    [(T.a(id=("d", n), href=url.here.child(n))[n],' ') for n in ['4', '5', '6/7']]
-                    ],
-                ]
-            ]
-        )
-

=== removed file 'Nevow/examples/children/childrenhtml.py'
--- Nevow/examples/children/childrenhtml.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/children/childrenhtml.py	1970-01-01 00:00:00 +0000
@@ -1,88 +0,0 @@
-"""
-Simple example of how child resources are located.
-"""
-
-from twisted.application import internet
-from twisted.application import service
-
-from twisted.python import util
-
-from nevow import appserver
-from nevow import loaders
-from nevow import rend
-from nevow import url
-
-
-class ChildPage(rend.Page):
-
-    docFactory = loaders.xmlfile(util.sibpath(__file__, "childrenhtml_ChildPage.html"))
-
-    def __init__(self, name):
-        rend.Page.__init__(self)
-        self.name = name
-
-    def child_childOfChild(self, context):
-        print "istanzaaa"
-        return ChildOfChildPage(self.name)
-
-    def render_name(self, context, data):
-        return context.tag[self.name]
-    
-    def render_link(self, context, data):
-        context.fillSlots('childLink', url.here.child('childOfChild'))
-        return context.tag
-
-
-class ChildOfChildPage(rend.Page):
-
-    docFactory = loaders.xmlfile(util.sibpath(__file__, "childrenhtml_ChildOfChildPage.html"))
-
-    def __init__(self, parentName):
-        rend.Page.__init__(self)
-        self.parentName = parentName
-
-    def render_parentName(self, context, data):
-        return context.tag[self.parentName]
-
-
-class RootPage(rend.Page):
-
-    addSlash = True
-
-    docFactory = loaders.xmlfile(util.sibpath(__file__, "childrenhtml_RootPage.html"))
-
-    # A resource that is always called 'foo' and only needs to be created once
-    child_foo = ChildPage('foo')
-
-    def child_bar(self, context):
-        """A resource that is always called 'bar' but is created per-request
-        """
-        return ChildPage('bar')
-
-    def childFactory(self, ctx, name):
-        """Create and return a child resource where the name is dynamic
-        """
-        if name in ['1', '2', '3']:
-            return ChildPage(name)
-
-    def locateChild(self, ctx, segments):
-        """Create and return a dynamically named child resource if child_ or
-        childFactory didn't help. However, this time we get the chance to
-        consume multiple path segments (inluding the childOfChild link).
-        
-        Note: locateChild is actually the main resource location API (see
-        inevow.IReource) and it is actually rend.Page's implementation of the
-        method that provides the child_ and childFactory functionality.
-        """
-
-        # Let parent class have a go first
-        child, remainingSegments = rend.Page.locateChild(self, ctx, segments)
-        if child:
-            return child, remainingSegments
-
-        # Consume all remaining path segments for the name
-        return ChildPage('/'.join(segments)), []
-
-
-application = service.Application('children')
-internet.TCPServer(8080, appserver.NevowSite(RootPage())).setServiceParent(application)

=== removed file 'Nevow/examples/children/childrenhtml_ChildOfChildPage.html'
--- Nevow/examples/children/childrenhtml_ChildOfChildPage.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/children/childrenhtml_ChildOfChildPage.html	1970-01-01 00:00:00 +0000
@@ -1,15 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<!-- xmlns:nevow="http://nevow.com/ns/nevow/0.1"; is REQUIRED for the
-          template to work, if you don't put it in, Nevow can't handle
-          the 'nevow'-prefixed attributes and tags correctly and won't
-          process the template as expected. -->
-<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en" xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-<head>
-<title></title>
-</head>
-<body>
-   <h1>ChildOfChildPage</h1>
-
-	<p>My parent is the ChildPage called: <nevow:invisible nevow:render="parentName" /></p>
-</body>
-</html>	   

=== removed file 'Nevow/examples/children/childrenhtml_ChildPage.html'
--- Nevow/examples/children/childrenhtml_ChildPage.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/children/childrenhtml_ChildPage.html	1970-01-01 00:00:00 +0000
@@ -1,24 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<!-- xmlns:nevow="http://nevow.com/ns/nevow/0.1"; is REQUIRED for the
-          template to work, if you don't put it in, Nevow can't handle
-          the 'nevow'-prefixed attributes and tags correctly and won't
-          process the template as expected. -->
-
-<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en" xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-<head>
-<title></title>
-</head>
-<body>
-   <h1>ChildPage</h1>
-   <p>My name is: <nevow:invisible nevow:render="name" /></p>
-   <p>I have a child too:
-   <a href="#" nevow:render="link">
-   	<nevow:attr name="href">
-   		<nevow:slot name="childLink" />
-   	</nevow:attr>
-   	my child
-   </a>
-   </p>
-</body>
-</html>	      

=== removed file 'Nevow/examples/children/childrenhtml_RootPage.html'
--- Nevow/examples/children/childrenhtml_RootPage.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/children/childrenhtml_RootPage.html	1970-01-01 00:00:00 +0000
@@ -1,27 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<!-- xmlns:nevow="http://nevow.com/ns/nevow/0.1"; is REQUIRED for the
-          template to work, if you don't put it in, Nevow can't handle
-          the 'nevow'-prefixed attributes and tags correctly and won't
-          process the template as expected. -->
-
-<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en" xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-<head>
-<title></title>
-</head>
-<body>
-<h1>RootPage</h1>
-<p>Fixed name, singleton resource: <a href="foo">foo</a></p>
-<p>Fixed name, created per-request: <a href="bar">bar</a></p>
-<p>
-   Dynamically named resources, located via childFactory: 
-   <a href="1">1</a> <a href="2">2</a> <a href="3">3</a>
-</p>
-<p>
-   Dynamically named resources, located via locateChild: 
-   <a href="4">4</a>
-   <a href="5">5</a>
-   <a href="6/7">6/7</a>
-</p>
-</body>
-</html>	

=== removed directory 'Nevow/examples/customform'
=== removed file 'Nevow/examples/customform/__init__.py'
=== removed file 'Nevow/examples/customform/customform.py'
--- Nevow/examples/customform/customform.py	2006-03-17 15:00:39 +0000
+++ Nevow/examples/customform/customform.py	1970-01-01 00:00:00 +0000
@@ -1,159 +0,0 @@
-#################################################################################
-# Example of using patterns to change the appearance of a webform.
-
-#from twisted.application import internet, service
-#from twisted.web import static
-
-from zope.interface import implements
-
-from nevow import rend
-from nevow import url
-from nevow import loaders
-from nevow import tags as T
-
-from formless import annotate
-from formless import webform
-
-
-#################################################################################
-# This beasty defines how I want the form to look. It's a table (eek!).
-# webform looks for patterns to use when rendering parts of the form and fills
-# slots with key information.
-#
-# Key patterns are:
-#   freeform-form   -- the form itself, mostly just the structure
-#   argument        -- the pattern to use for arguments when nothing better
-#                      is found
-#   argument!!fo    -- the pattern to use for the 'fo' argument
-#
-# Inside the patterns the following slots are filled:
-#   freeform-form:
-#     form-action       -- action attribute, where the form will be posted
-#     form-id           -- id of the form
-#     form-name         -- name of the form
-#     form-label        -- form label, extracted from the docstring
-#     form-description  -- description, also extracted from the docstring
-#     form-error        -- "global" error
-#     form-arguments    -- insertion point for the arguments' HTML
-#   argument:
-#     label             -- label
-#     input             -- the form element (input, textarea, etc)
-#     error             -- error message (if any)
-#     description       -- description of argument
-#
-# Note that you do not have to provide slots for all of the above. For
-# instance, you may not want to display the descriptions.
-#
-# Chances are that this block of text would be in a disk template or
-# perhaps defined using stan in a taglib module.
-
-
-FORM_LAYOUT = loaders.xmlstr(
-    """<?xml version="1.0"?>
-    <form xmlns:n="http://nevow.com/ns/nevow/0.1"; n:pattern="freeform-form">
-    
-      <!-- Replace/fill the form attributes -->
-      <n:attr name="action"><n:slot name="form-action"/></n:attr>
-      <n:attr name="id"><n:slot name="form-id"/></n:attr>
-      <n:attr name="name"><n:slot name="form-name"/></n:attr>
-      
-      <!-- General form information -->
-      <p><strong><n:slot name="form-label"/></strong></p>
-      <p><em><n:slot name="form-description"/></em></p>
-      <p><strong><em><n:slot name="form-error"/></em></strong></p>
-      
-      <!-- Start of the form layout table -->
-      <table style="background: #eee; border: 1px solid #bbb; padding: 1em;" >
-        <!-- Mark location arguments will be added -->
-        <n:slot name="form-arguments"/>
-        <!-- General argument layout pattern -->
-        <n:invisible n:pattern="argument" n:render="remove">
-          <tr>
-            <th><n:slot name="label"/>:</th>
-            <td><n:slot name="input"/><span class="freeform-error"><n:slot name="error"/></span></td>
-          </tr>
-          <tr>
-            <th></th>
-            <td><n:slot name="description"/></td>
-          </tr>
-        </n:invisible>
-        <!-- Argument layout, just for fum -->
-        <n:invisible n:pattern="argument!!fo" n:render="remove">
-          <tr>
-            <th><n:slot name="label"/>:</th>
-            <td>
-              <textarea cols="40" rows="5"><n:attr name="id"><n:slot name="id"/></n:attr><n:attr name="name"><n:slot name="name"/></n:attr><n:slot name="value"/></textarea>
-              <span class="freeform-error"><n:slot name="error"/></span></td>
-          </tr>
-          <tr>
-            <th></th>
-            <td><n:slot name="description"/></td>
-          </tr>
-        </n:invisible>
-        <!-- Button row -->
-        <tr>
-          <td colspan="2">
-            <n:slot name="form-button"/>
-          </td>
-        </tr>
-      </table>
-    </form>
-    """).load()
-
-
-#################################################################################
-# ISomething and Page are just something to test the form rendering on.
-
-class ISomething(annotate.TypedInterface):
-    
-    def doSomething(
-        ctx = annotate.Context(),
-        fee = annotate.String(required=True, description="Wee!"),
-        fi = annotate.Integer(description="Tra-la-la"),
-        fo = annotate.Text(),
-        fum = annotate.String(),
-        ):
-        """Do Something Really Exciting
-
-        Normally you would put a useful description of the interface here but,
-        since the inteface is useless anyway, I cannot think of anything
-        useful to say about it. Although ... did I mention it is useless?"""
-    doSomething = annotate.autocallable(doSomething)
-    
-
-class Root(rend.Page):
-    """Render a custom and normal form for an ISomething.
-    """
-    implements(ISomething)
-    addSlash = True
-    
-    child_webform_css = webform.defaultCSS
-    
-    def render_normalForm(self, ctx, data):
-        return webform.renderForms()
-    
-    def render_customForm(self, ctx, data):
-        return webform.renderForms()[FORM_LAYOUT]
-    
-    def doSomething(self, ctx, **kwargs):
-        print '***** doSomething called with:', kwargs
-    
-    docFactory = loaders.stan(
-        T.html[
-            T.head[
-                T.title['Example :: Custom Form Layout'],
-                T.link(rel='stylesheet', type='text/css', href=url.here.child("webform_css")),
-                ],
-            T.body[
-                T.h1['Custom'],
-                render_customForm,
-                T.h1['Default'],
-                render_normalForm,
-                ]
-            ]
-        )
-
-
-#application = service.Application('hellostan')
-#webServer = internet.TCPServer(8080, appserver.NevowSite(Root()))
-#webServer.setServiceParent(application)

=== removed directory 'Nevow/examples/db'
=== removed file 'Nevow/examples/db/__init__.py'
=== removed file 'Nevow/examples/db/db.py'
--- Nevow/examples/db/db.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/db/db.py	1970-01-01 00:00:00 +0000
@@ -1,132 +0,0 @@
-
-from zope.interface import implements
-
-from nevow import inevow
-from nevow import loaders
-from nevow import rend
-from nevow import tags
-from nevow.url import here
-
-from formless import annotate
-from formless import webform
-
-
-whole = [(1, 'one'), (2, 'two'), (3, 'buckle'), (4, 'my'), (5, 'shoe')]
-
-
-def doQuery(q, *args):
-    """Pretend like we have a database and we are accessing it through this hypothetical interface.
-    Ignore this. Use dbapi or adbapi instead, and build a real sql table. I hope that's obvious.
-    """
-    matchid = 'select * from foo where id ='
-    setsql = 'update foo set subject = '
-    insertsql = 'insert into foo values'
-    if q == 'select * from foo':
-        return whole
-    elif q.startswith(matchid):
-        theId = args[0]
-        for dbid, subj in whole:
-            if dbid == theId:
-                return [(dbid, subj)]
-        raise KeyError, theId
-    elif q.startswith(setsql):
-        newsubj, theId = args
-        for index, (dbid, subj) in enumerate(whole):
-            if dbid == theId:
-                whole[index] = (dbid, newsubj)
-    elif q.startswith(insertsql):
-        max = whole[-1][0]
-        subject, = args
-        whole.append((max + 1, subject))
-
-
-class IAddItem(annotate.TypedInterface):
-    def addItem(newSubject=annotate.String()):
-        pass
-    addItem = annotate.autocallable(addItem)
-
-
-class DBBrowser(rend.Page):
-    implements(IAddItem)
-    addSlash = True
-
-    def addItem(self, newSubject):
-        doQuery('insert into foo values subject = "%s"', newSubject)
-
-    def data_queryDatabase(self, context, data):
-        return doQuery('select * from foo')
-
-    def render_row(self, context, data):
-        theId, theSubj = data
-        return context.tag[ # put our anchor in the li provided by the template
-            tags.a(href=theId)[ theSubj ]
-        ]
-
-    docFactory = loaders.stan(
-        tags.html[
-            tags.body[
-                tags.h1["Welcome, user"],
-                tags.ul(data=tags.directive("queryDatabase"), render=tags.directive("sequence"))[
-                    tags.li(pattern="item", render=render_row)
-                    ],
-                webform.renderForms()
-                ]
-            ]
-        )
-
-    def childFactory(self, ctx, name):
-        """Since we created anchor tags linking to children of this resource
-        directly by id, when the anchor is clicked, childFactory will be called
-        with the appropriate id as the name argument."""
-        try:
-            ## Pass the id of the database item we want to be rendered on this page
-            ## to the DBItem constructor. This integer will be used as the default data
-            ## for this page.
-            return DBItem(int(name))
-        except ValueError:
-            pass
-            ## returning None results in a 404
-
-
-class IItemWithSubject(annotate.TypedInterface):
-    def setSubject(newSubject=annotate.String(label="Change Subject")):
-        pass
-    setSubject = annotate.autocallable(setSubject)
-
-
-class DBItem(rend.Page):
-    implements(IItemWithSubject)
-    addSlash=True
-
-    def setSubject(self, newSubject):
-        ## Self.original is the data that was passed to the DBItem constructor above; the id of this record
-        doQuery('update foo set subject = "%s" where id = %s', newSubject, self.original)
-
-    def render_viewSelector(self, context, data):
-        args = inevow.IRequest(context).args
-        view = args.get('view', ['view'])[0]
-        if view == 'view':
-            selector = "View | ", tags.a(href=here.add('view','edit'))[ "Edit" ]
-            editor = ''
-        else:
-            selector = tags.a(href=here.add('view','view'))["View"], " | Edit"
-            editor = context.onePattern('edit')() # get one copy of the edit pattern
-        viewer = context.onePattern('view')() # get one copy of the view pattern
-        return selector, viewer, editor
-
-    def render_itemDetail(self, context, data):
-        theId, theSubject = doQuery('select * from foo where id = %s', self.original)[0]
-        return tags.h2["Object ", theId], tags.span["Subject: ", theSubject]
-
-    docFactory = loaders.stan(
-        tags.html[
-            tags.body[
-                tags.p[tags.a(href=here.parent())["Up"]],
-                tags.div(render=render_viewSelector)[
-                    tags.p(pattern="edit")[webform.renderForms()],
-                    tags.p(pattern="view")[render_itemDetail]
-                    ]
-                ]
-            ]
-        )
-

=== removed directory 'Nevow/examples/disktemplates'
=== removed file 'Nevow/examples/disktemplates/__init__.py'
=== removed file 'Nevow/examples/disktemplates/disktemplates.html'
--- Nevow/examples/disktemplates/disktemplates.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/disktemplates/disktemplates.html	1970-01-01 00:00:00 +0000
@@ -1,50 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-
-<!-- xmlns:nevow="http://nevow.com/ns/nevow/0.1"; is REQUIRED for the
-          template to work, if you don't put it in, Nevow can't handle
-          the 'nevow'-prefixed attributes and tags correctly and won't
-          process the template as expected. -->
-
-<html xmlns="http://www.w3.org/1999/xhtml"; lang="en" xml:lang="en" xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-	<head>
-		<title>This is title</title>
-	</head>
-	<body>
-	   <h1 id="header">Welcome</h1>
-		<table nevow:data="theList" nevow:render="sequence">
-                <tr nevow:pattern="header"><th>First Column</th><th>Second Column</th></tr>
-
-                <tr nevow:pattern="item"><td>Stuff:</td><td><span nevow:render="string" /></td></tr>
-
-                <tr nevow:pattern="divider"><td>-----</td></tr>
-                <tr nevow:pattern="empty"><td>Nothing.</td></tr>
-
-                <tr nevow:pattern="footer"><td>First Column</td><td>Second Column</td></tr>
-            </table>
-            
-		<ul nevow:data="empty" nevow:render="sequence">
-			<li nevow:pattern="header">HEADER</li>
-			<li nevow:pattern="item">Stuff: <span nevow:render="string" />!</li>
-
-			<li nevow:pattern="divider">-----</li>
-			<li nevow:pattern="empty">Nothing.</li>
-			<li nevow:pattern="footer">FOOTER</li>
-		</ul>
-          <p nevow:render="foo">
-              This entire node, including the span tag, will be replaced by a randomly chosen node from below:
-              <span nevow:pattern="one" style="color: red">
-                  one
-              </span>
-
-              <table nevow:pattern="two">
-                  <tr><td>two</td><td>two</td><td>two</td></tr>
-              </table>
-              <ol nevow:pattern="three">
-                  <li>three</li>
-                  <li>three</li>
-
-                  <li>three</li>
-              </ol>
-          </p>
-	</body>
-</html>

=== removed file 'Nevow/examples/disktemplates/disktemplates.py'
--- Nevow/examples/disktemplates/disktemplates.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/disktemplates/disktemplates.py	1970-01-01 00:00:00 +0000
@@ -1,19 +0,0 @@
-import random
-
-from nevow import inevow, loaders, rend
-from twisted.python import util
-
-
-class Mine(rend.Page):
-
-    addSlash = True
-    docFactory = loaders.xmlfile(util.sibpath(__file__, 'disktemplates.html'))
-
-    def render_foo(self, context, data):
-        return inevow.IQ(context).onePattern(random.choice(['one', 'two', 'three']))
-
-    def data_theList(self, context, data):
-        return [random.randint(0, 5000) for x in range(random.randint(0, 10))]
-
-    def data_empty(self, context, data):
-        return []

=== removed file 'Nevow/examples/disktemplates/disktemplates_stan.py'
--- Nevow/examples/disktemplates/disktemplates_stan.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/disktemplates/disktemplates_stan.py	1970-01-01 00:00:00 +0000
@@ -1,74 +0,0 @@
-import random
-
-from twisted.application import service
-from twisted.application import internet
-
-from nevow import inevow
-from nevow import appserver
-from nevow import loaders
-from nevow import rend
-from nevow import tags as T
-from nevow.stan import directive
-
-
-class Mine(rend.Page):
-
-    addSlash = True
-    docFactory = loaders.stan(
-        T.html[
-            T.head[
-                T.title["This is title"]
-            ],
-            T.body[
-                T.h1(id="header")["Welcome"],
-                T.ol(data=directive("theList"), render=directive("sequence"))[
-                    T.span(pattern="header")["HEADER"],
-                    T.li(pattern="item")["Stuff: ",T.span(render=directive("string")), "!"],
-                    T.span(pattern="divider")["-----"],
-                    T.div(pattern="empty")["Nothing."],
-                    T.span(pattern="footer")["FOOTER"],
-                ],
-                T.ol(data=directive("empty"), render=directive("sequence"))[
-                    T.span(pattern="header")["HEADER"],
-                    T.li(pattern="item")["Stuff: ",T.span(render=directive("string")), "!"],
-                    T.span(pattern="divider")["-----"],
-                    T.div(pattern="empty")["Nothing."],
-                    T.span(pattern="footer")["FOOTER"],
-                ],
-                T.span(render=directive("foo"))[
-                    "This entire node, including the span tag, will be replaced by \
-                    a randomly chosen node from below:",
-                    T.div(pattern="one", style="color: red")["one"],
-                    
-                    T.table(pattern="two")[
-                        T.tr[T.td["two"],T.td["two"],T.td["two"]]
-                    ],
-                    
-                    T.ol(pattern="three")[
-                        T.li["three"],
-                        T.li["three"],
-                        T.li["three"],
-                    ]
-                ]
-            ]
-        ]
-    )
-        
-
-    def render_foo(self, context, data):
-        return inevow.IQ(context).onePattern(random.choice(['one', 'two', 'three']))
-
-    def data_theList(self, context, data):
-        return [random.randint(0, 5000) for x in range(random.randint(0, 10))]
-
-    def data_empty(self, context, data):
-        return []
-
-
-application = service.Application("disktemplates")
-internet.TCPServer(
-    8080, 
-    appserver.NevowSite(
-        Mine()
-    )
-).setServiceParent(application)

=== removed file 'Nevow/examples/examples.tac'
--- Nevow/examples/examples.tac	2009-07-06 12:22:09 +0000
+++ Nevow/examples/examples.tac	1970-01-01 00:00:00 +0000
@@ -1,187 +0,0 @@
-try:
-    import zope.interface
-except ImportError:
-    print """ Please install ZopeInterface product from
-    http://www.zope.org/Products/ZopeInterface/
-to run Nevow """
-    import sys
-    sys.exit(1)
-
-
-from twisted.python import components
-import warnings
-warnings.filterwarnings(
-    'ignore',
-    category=components.ComponentsDeprecationWarning)
-
-from twisted.application import service, strports
-from twisted.python import util
-
-from nevow import inevow, rend, loaders, url, tags, appserver, static, guard, athena
-
-import sys
-
-try:
-    from advanced_manualform import advanced_manualform
-    from customform import customform
-    from disktemplates import disktemplates
-    from disktemplates import disktemplates_stan
-    from simple import simple
-    from simple import simplehtml
-    from tree import tree
-    from formpost import formpost2
-    from formpost import formpost
-    from children import children
-    from children import childrenhtml
-    from table import tablehtml
-    from irenderer import irenderer
-    from irenderer import simple_irenderer
-    from formbuilder import formbuilder
-    from db import db
-    from hello import hellohtml
-    from hello import hellostan
-    from canvas import canvas
-    from manualform import manualform
-    from guarded import guarded
-    from guarded import guarded2
-    from xul import xul_nevow
-    from liveanimal import liveanimal
-    from most_basic import most_basic
-    from http_auth import http_auth
-    from logout_guard import logout_guard
-    from logout_guard import logout_guard2
-    from objcontainer import objcontainer
-    from nestedsequence import nestedsequence
-    from fragments import fragments
-    from macros import macros
-    from i18n import i18n, xmli18n
-    from cal import cal
-    from tabbed import tabbed
-    from progress import progress
-    from tests import testformless, testexamples
-    from nevow import livetest
-
-    from athenademo import calculator
-    from athenademo import typeahead
-    from athenademo import widgets
-    from athenademo import benchmark
-except ImportError, e:
-    if str(e).find('No module named') != -1:
-        msg = """
-Original error message:
-%s
-=======================================
-Please check the following things:
-* You are not root
-* You are running examples.tac from examples directory or examples
-    directory is in the PYTHONPATH
-
-A possible fix could be to run examples.tac with the following
-command:
-    PYTHONPATH=/path/to/examples/ twistd -noy examples.tac
-=======================================
-""" % str(e)
-        raise Exception(msg)
-    raise e
-except AttributeError, e:
-    if str(e).find("'module' object has no attribute") != -1:
-        msg = """
-Original error message:
-%s
-============================
-Please check that nevow and formless are correctly installed
-============================
-""" % str(e)
-        raise Exception(msg)
-    raise e
-
-class Sources(rend.Page):
-    def __init__(self, path, _):
-        rend.Page.__init__(self, path)
-
-    def render_htmlizer(self, ctx, path):
-        from twisted.python import htmlizer
-        from StringIO import StringIO
-        output = StringIO()
-        try:
-            htmlizer.filter(open(path), output, writer=htmlizer.SmallerHTMLWriter)
-        except AttributeError:
-            output = StringIO("""Starting after Nevow 0.4.1 Twisted
-2.0 is a required dependency. Please install it""")
-        return tags.xml(output.getvalue())
-
-    docFactory = loaders.stan(
-    tags.html[
-        tags.head[
-            tags.title["Python source file: ", str],
-            tags.link(type='text/css', rel='stylesheet', href='/cssfile')],
-        tags.body[
-            render_htmlizer]])
-
-import os
-class Examples(rend.Page):
-    addSlash = True ## This is a directory-like resource
-    docFactory = loaders.xmlfile(os.path.abspath('.')+'/index.html')
-    child_sources = static.File('.', defaultType='text/plain')
-    child_sources.processors['.py'] = Sources
-    child_sources.contentTypes = {}
-    child_cssfile = static.File('index.css')
-    children = dict(
-        customform=customform.Root(),
-        disktemplates=disktemplates.Mine(),
-        disktemplates_stan=disktemplates_stan.Mine(),
-        simple=simple.Simple(),
-        simplehtml=simplehtml.Simple(),
-        tree=tree.Tree('base', 'base'),
-        formpost2=formpost2.FormPage(formpost2.Implementation()),
-        formpost=formpost.FormPage(),
-        children=children.RootPage(),
-        childrenhtml=childrenhtml.RootPage(),
-        tablehtml=tablehtml.Table(),
-        irenderer=irenderer.Page(),
-        simple_irenderer=simple_irenderer.Page(),
-        formbuilder=formbuilder.FormBuilder(),
-        db=db.DBBrowser(),
-        hellohtml=hellohtml.Page(),
-        hellostan=hellostan.Page(),
-        canvas=canvas.createResource(),
-        manualform=manualform.Page(),
-        guarded=guarded.createResource(),
-        guarded2=guarded2.createResource(),
-        xul_nevow=xul_nevow.createResource(),
-        advanced_manualform=advanced_manualform.Page(),
-        liveanimal=liveanimal.createResource(),
-        http_auth=http_auth.AuthorizationRequired(),
-        most_basic=most_basic.root,
-        logout_guard=logout_guard.createResource(),
-        logout_guard2=logout_guard2.createResource(),
-        objcontainer=objcontainer.createResource(),
-        nestedsequence=nestedsequence.Root(),
-        i18n=i18n.createResource(),
-        xmli18n=xmli18n.createResource(),
-        calendar=cal.Calendar(),
-        tabbed=tabbed.TabbedPage(),
-        progress=progress.createResource(),
-        tests=testexamples.createResource(),
-        livetests=testexamples.createLiveSuite(),
-        testtests=livetest.createResource(),
-        testformless=testformless.NameWizard(),
-        formless_redirector=testformless.Redirector(),
-        formless_tests=testformless.formless_tests,
-        fragments=fragments.Root(),
-        macros=macros.Root(),
-        typeahead=typeahead.DataEntry(),
-        )
-
-    def child_calculator(self, ctx):
-        return calculator.CalculatorParentPage(calc=calculator.Calculator())
-
-    def child_widgets(self, ctx):
-        return widgets.WidgetPage(None, None)
-
-    def child_benchmark(self, ctx):
-        return benchmark.Benchmark(400, 20)
-
-
-application = service.Application("examples")
-strports.service("8080", appserver.NevowSite(Examples())).setServiceParent(application)

=== removed directory 'Nevow/examples/files'
=== removed file 'Nevow/examples/files/words'
--- Nevow/examples/files/words	2005-10-14 17:36:24 +0000
+++ Nevow/examples/files/words	1970-01-01 00:00:00 +0000
@@ -1,9297 +0,0 @@
-A
-a
-aa
-aal
-aalii
-aam
-Aani
-aardvark
-aardwolf
-Aaron
-Aaronic
-Aaronical
-Aaronite
-Aaronitic
-Aaru
-Ab
-aba
-Ababdeh
-Ababua
-abac
-abaca
-abacate
-abacay
-abacinate
-abacination
-abaciscus
-abacist
-aback
-abactinal
-abactinally
-abaction
-abactor
-abaculus
-abacus
-Abadite
-abaff
-abaft
-abaisance
-abaiser
-abaissed
-abalienate
-abalienation
-abalone
-Abama
-abampere
-abandon
-abandonable
-abandoned
-abandonedly
-abandonee
-abandoner
-abandonment
-Abanic
-Abantes
-abaptiston
-Abarambo
-Abaris
-abarthrosis
-abarticular
-abarticulation
-abas
-abase
-abased
-abasedly
-abasedness
-abasement
-abaser
-Abasgi
-abash
-abashed
-abashedly
-abashedness
-abashless
-abashlessly
-abashment
-abasia
-abasic
-abask
-Abassin
-abastardize
-abatable
-abate
-abatement
-abater
-abatis
-abatised
-abaton
-abator
-abattoir
-Abatua
-abature
-abave
-abaxial
-abaxile
-abaze
-abb
-Abba
-abbacomes
-abbacy
-Abbadide
-abbas
-abbasi
-abbassi
-Abbasside
-abbatial
-abbatical
-abbess
-abbey
-abbeystede
-Abbie
-abbot
-abbotcy
-abbotnullius
-abbotship
-abbreviate
-abbreviately
-abbreviation
-abbreviator
-abbreviatory
-abbreviature
-Abby
-abcoulomb
-abdal
-abdat
-Abderian
-Abderite
-abdest
-abdicable
-abdicant
-abdicate
-abdication
-abdicative
-abdicator
-Abdiel
-abditive
-abditory
-abdomen
-abdominal
-Abdominales
-abdominalian
-abdominally
-abdominoanterior
-abdominocardiac
-abdominocentesis
-abdominocystic
-abdominogenital
-abdominohysterectomy
-abdominohysterotomy
-abdominoposterior
-abdominoscope
-abdominoscopy
-abdominothoracic
-abdominous
-abdominovaginal
-abdominovesical
-abduce
-abducens
-abducent
-abduct
-abduction
-abductor
-Abe
-abeam
-abear
-abearance
-abecedarian
-abecedarium
-abecedary
-abed
-abeigh
-Abel
-abele
-Abelia
-Abelian
-Abelicea
-Abelite
-abelite
-Abelmoschus
-abelmosk
-Abelonian
-abeltree
-Abencerrages
-abenteric
-abepithymia
-Aberdeen
-aberdevine
-Aberdonian
-Aberia
-aberrance
-aberrancy
-aberrant
-aberrate
-aberration
-aberrational
-aberrator
-aberrometer
-aberroscope
-aberuncator
-abet
-abetment
-abettal
-abettor
-abevacuation
-abey
-abeyance
-abeyancy
-abeyant
-abfarad
-abhenry
-abhiseka
-abhominable
-abhor
-abhorrence
-abhorrency
-abhorrent
-abhorrently
-abhorrer
-abhorrible
-abhorring
-Abhorson
-abidal
-abidance
-abide
-abider
-abidi
-abiding
-abidingly
-abidingness
-Abie
-Abies
-abietate
-abietene
-abietic
-abietin
-Abietineae
-abietineous
-abietinic
-Abiezer
-Abigail
-abigail
-abigailship
-abigeat
-abigeus
-abilao
-ability
-abilla
-abilo
-abintestate
-abiogenesis
-abiogenesist
-abiogenetic
-abiogenetical
-abiogenetically
-abiogenist
-abiogenous
-abiogeny
-abiological
-abiologically
-abiology
-abiosis
-abiotic
-abiotrophic
-abiotrophy
-Abipon
-abir
-abirritant
-abirritate
-abirritation
-abirritative
-abiston
-Abitibi
-abiuret
-abject
-abjectedness
-abjection
-abjective
-abjectly
-abjectness
-abjoint
-abjudge
-abjudicate
-abjudication
-abjunction
-abjunctive
-abjuration
-abjuratory
-abjure
-abjurement
-abjurer
-abkar
-abkari
-Abkhas
-Abkhasian
-ablach
-ablactate
-ablactation
-ablare
-ablastemic
-ablastous
-ablate
-ablation
-ablatitious
-ablatival
-ablative
-ablator
-ablaut
-ablaze
-able
-ableeze
-ablegate
-ableness
-ablepharia
-ablepharon
-ablepharous
-Ablepharus
-ablepsia
-ableptical
-ableptically
-abler
-ablest
-ablewhackets
-ablins
-abloom
-ablow
-ablude
-abluent
-ablush
-ablution
-ablutionary
-abluvion
-ably
-abmho
-Abnaki
-abnegate
-abnegation
-abnegative
-abnegator
-Abner
-abnerval
-abnet
-abneural
-abnormal
-abnormalism
-abnormalist
-abnormality
-abnormalize
-abnormally
-abnormalness
-abnormity
-abnormous
-abnumerable
-Abo
-aboard
-Abobra
-abode
-abodement
-abody
-abohm
-aboil
-abolish
-abolisher
-abolishment
-abolition
-abolitionary
-abolitionism
-abolitionist
-abolitionize
-abolla
-aboma
-abomasum
-abomasus
-abominable
-abominableness
-abominably
-abominate
-abomination
-abominator
-abomine
-Abongo
-aboon
-aborad
-aboral
-aborally
-abord
-aboriginal
-aboriginality
-aboriginally
-aboriginary
-aborigine
-abort
-aborted
-aborticide
-abortient
-abortifacient
-abortin
-abortion
-abortional
-abortionist
-abortive
-abortively
-abortiveness
-abortus
-abouchement
-abound
-abounder
-abounding
-aboundingly
-about
-abouts
-above
-aboveboard
-abovedeck
-aboveground
-aboveproof
-abovestairs
-abox
-abracadabra
-abrachia
-abradant
-abrade
-abrader
-Abraham
-Abrahamic
-Abrahamidae
-Abrahamite
-Abrahamitic
-abraid
-Abram
-Abramis
-abranchial
-abranchialism
-abranchian
-Abranchiata
-abranchiate
-abranchious
-abrasax
-abrase
-abrash
-abrasiometer
-abrasion
-abrasive
-abrastol
-abraum
-abraxas
-abreact
-abreaction
-abreast
-abrenounce
-abret
-abrico
-abridge
-abridgeable
-abridged
-abridgedly
-abridger
-abridgment
-abrim
-abrin
-abristle
-abroach
-abroad
-Abrocoma
-abrocome
-abrogable
-abrogate
-abrogation
-abrogative
-abrogator
-Abroma
-Abronia
-abrook
-abrotanum
-abrotine
-abrupt
-abruptedly
-abruption
-abruptly
-abruptness
-Abrus
-Absalom
-absampere
-Absaroka
-absarokite
-abscess
-abscessed
-abscession
-abscessroot
-abscind
-abscise
-abscision
-absciss
-abscissa
-abscissae
-abscisse
-abscission
-absconce
-abscond
-absconded
-abscondedly
-abscondence
-absconder
-absconsa
-abscoulomb
-absence
-absent
-absentation
-absentee
-absenteeism
-absenteeship
-absenter
-absently
-absentment
-absentmindedly
-absentness
-absfarad
-abshenry
-Absi
-absinthe
-absinthial
-absinthian
-absinthiate
-absinthic
-absinthin
-absinthine
-absinthism
-absinthismic
-absinthium
-absinthol
-absit
-absmho
-absohm
-absolute
-absolutely
-absoluteness
-absolution
-absolutism
-absolutist
-absolutistic
-absolutistically
-absolutive
-absolutization
-absolutize
-absolutory
-absolvable
-absolvatory
-absolve
-absolvent
-absolver
-absolvitor
-absolvitory
-absonant
-absonous
-absorb
-absorbability
-absorbable
-absorbed
-absorbedly
-absorbedness
-absorbefacient
-absorbency
-absorbent
-absorber
-absorbing
-absorbingly
-absorbition
-absorpt
-absorptance
-absorptiometer
-absorptiometric
-absorption
-absorptive
-absorptively
-absorptiveness
-absorptivity
-absquatulate
-abstain
-abstainer
-abstainment
-abstemious
-abstemiously
-abstemiousness
-abstention
-abstentionist
-abstentious
-absterge
-abstergent
-abstersion
-abstersive
-abstersiveness
-abstinence
-abstinency
-abstinent
-abstinential
-abstinently
-abstract
-abstracted
-abstractedly
-abstractedness
-abstracter
-abstraction
-abstractional
-abstractionism
-abstractionist
-abstractitious
-abstractive
-abstractively
-abstractiveness
-abstractly
-abstractness
-abstractor
-abstrahent
-abstricted
-abstriction
-abstruse
-abstrusely
-abstruseness
-abstrusion
-abstrusity
-absume
-absumption
-absurd
-absurdity
-absurdly
-absurdness
-absvolt
-Absyrtus
-abterminal
-abthain
-abthainrie
-abthainry
-abthanage
-Abu
-abu
-abucco
-abulia
-abulic
-abulomania
-abuna
-abundance
-abundancy
-abundant
-Abundantia
-abundantly
-abura
-aburabozu
-aburban
-aburst
-aburton
-abusable
-abuse
-abusedly
-abusee
-abuseful
-abusefully
-abusefulness
-abuser
-abusion
-abusious
-abusive
-abusively
-abusiveness
-abut
-Abuta
-Abutilon
-abutment
-abuttal
-abutter
-abutting
-abuzz
-abvolt
-abwab
-aby
-abysm
-abysmal
-abysmally
-abyss
-abyssal
-Abyssinian
-abyssobenthonic
-abyssolith
-abyssopelagic
-acacatechin
-acacatechol
-acacetin
-Acacia
-Acacian
-acaciin
-acacin
-academe
-academial
-academian
-Academic
-academic
-academical
-academically
-academicals
-academician
-academicism
-academism
-academist
-academite
-academization
-academize
-Academus
-academy
-Acadia
-acadialite
-Acadian
-Acadie
-Acaena
-acajou
-acaleph
-Acalepha
-Acalephae
-acalephan
-acalephoid
-acalycal
-acalycine
-acalycinous
-acalyculate
-Acalypha
-Acalypterae
-Acalyptrata
-Acalyptratae
-acalyptrate
-Acamar
-acampsia
-acana
-acanaceous
-acanonical
-acanth
-acantha
-Acanthaceae
-acanthaceous
-acanthad
-Acantharia
-Acanthia
-acanthial
-acanthin
-acanthine
-acanthion
-acanthite
-acanthocarpous
-Acanthocephala
-acanthocephalan
-Acanthocephali
-acanthocephalous
-Acanthocereus
-acanthocladous
-Acanthodea
-acanthodean
-Acanthodei
-Acanthodes
-acanthodian
-Acanthodidae
-Acanthodii
-Acanthodini
-acanthoid
-Acantholimon
-acanthological
-acanthology
-acantholysis
-acanthoma
-Acanthomeridae
-acanthon
-Acanthopanax
-Acanthophis
-acanthophorous
-acanthopod
-acanthopodous
-acanthopomatous
-acanthopore
-acanthopteran
-Acanthopteri
-acanthopterous
-acanthopterygian
-Acanthopterygii
-acanthosis
-acanthous
-Acanthuridae
-Acanthurus
-acanthus
-acapnia
-acapnial
-acapsular
-acapu
-acapulco
-acara
-Acarapis
-acardia
-acardiac
-acari
-acarian
-acariasis
-acaricidal
-acaricide
-acarid
-Acarida
-Acaridea
-acaridean
-acaridomatium
-acariform
-Acarina
-acarine
-acarinosis
-acarocecidium
-acarodermatitis
-acaroid
-acarol
-acarologist
-acarology
-acarophilous
-acarophobia
-acarotoxic
-acarpelous
-acarpous
-Acarus
-Acastus
-acatalectic
-acatalepsia
-acatalepsy
-acataleptic
-acatallactic
-acatamathesia
-acataphasia
-acataposis
-acatastasia
-acatastatic
-acate
-acategorical
-acatery
-acatharsia
-acatharsy
-acatholic
-acaudal
-acaudate
-acaulescent
-acauline
-acaulose
-acaulous
-acca
-accede
-accedence
-acceder
-accelerable
-accelerando
-accelerant
-accelerate
-accelerated
-acceleratedly
-acceleration
-accelerative
-accelerator
-acceleratory
-accelerograph
-accelerometer
-accend
-accendibility
-accendible
-accension
-accensor
-accent
-accentless
-accentor
-accentuable
-accentual
-accentuality
-accentually
-accentuate
-accentuation
-accentuator
-accentus
-accept
-acceptability
-acceptable
-acceptableness
-acceptably
-acceptance
-acceptancy
-acceptant
-acceptation
-accepted
-acceptedly
-accepter
-acceptilate
-acceptilation
-acception
-acceptive
-acceptor
-acceptress
-accerse
-accersition
-accersitor
-access
-accessarily
-accessariness
-accessary
-accessaryship
-accessibility
-accessible
-accessibly
-accession
-accessional
-accessioner
-accessive
-accessively
-accessless
-accessorial
-accessorily
-accessoriness
-accessorius
-accessory
-accidence
-accidency
-accident
-accidental
-accidentalism
-accidentalist
-accidentality
-accidentally
-accidentalness
-accidented
-accidential
-accidentiality
-accidently
-accidia
-accidie
-accinge
-accipient
-Accipiter
-accipitral
-accipitrary
-Accipitres
-accipitrine
-accismus
-accite
-acclaim
-acclaimable
-acclaimer
-acclamation
-acclamator
-acclamatory
-acclimatable
-acclimatation
-acclimate
-acclimatement
-acclimation
-acclimatizable
-acclimatization
-acclimatize
-acclimatizer
-acclimature
-acclinal
-acclinate
-acclivitous
-acclivity
-acclivous
-accloy
-accoast
-accoil
-accolade
-accoladed
-accolated
-accolent
-accolle
-accombination
-accommodable
-accommodableness
-accommodate
-accommodately
-accommodateness
-accommodating
-accommodatingly
-accommodation
-accommodational
-accommodative
-accommodativeness
-accommodator
-accompanier
-accompaniment
-accompanimental
-accompanist
-accompany
-accompanyist
-accompletive
-accomplice
-accompliceship
-accomplicity
-accomplish
-accomplishable
-accomplished
-accomplisher
-accomplishment
-accomplisht
-accompt
-accord
-accordable
-accordance
-accordancy
-accordant
-accordantly
-accorder
-according
-accordingly
-accordion
-accordionist
-accorporate
-accorporation
-accost
-accostable
-accosted
-accouche
-accouchement
-accoucheur
-accoucheuse
-account
-accountability
-accountable
-accountableness
-accountably
-accountancy
-accountant
-accountantship
-accounting
-accountment
-accouple
-accouplement
-accouter
-accouterment
-accoy
-accredit
-accreditate
-accreditation
-accredited
-accreditment
-accrementitial
-accrementition
-accresce
-accrescence
-accrescent
-accretal
-accrete
-accretion
-accretionary
-accretive
-accroach
-accroides
-accrual
-accrue
-accruement
-accruer
-accubation
-accubitum
-accubitus
-accultural
-acculturate
-acculturation
-acculturize
-accumbency
-accumbent
-accumber
-accumulable
-accumulate
-accumulation
-accumulativ
-accumulative
-accumulatively
-accumulativeness
-accumulator
-accuracy
-accurate
-accurately
-accurateness
-accurse
-accursed
-accursedly
-accursedness
-accusable
-accusably
-accusal
-accusant
-accusation
-accusatival
-accusative
-accusatively
-accusatorial
-accusatorially
-accusatory
-accusatrix
-accuse
-accused
-accuser
-accusingly
-accusive
-accustom
-accustomed
-accustomedly
-accustomedness
-ace
-aceacenaphthene
-aceanthrene
-aceanthrenequinone
-acecaffine
-aceconitic
-acedia
-acediamine
-acediast
-acedy
-Aceldama
-Acemetae
-Acemetic
-acenaphthene
-acenaphthenyl
-acenaphthylene
-acentric
-acentrous
-aceologic
-aceology
-acephal
-Acephala
-acephalan
-Acephali
-acephalia
-Acephalina
-acephaline
-acephalism
-acephalist
-Acephalite
-acephalocyst
-acephalous
-acephalus
-Acer
-Aceraceae
-aceraceous
-Acerae
-Acerata
-acerate
-Acerates
-acerathere
-Aceratherium
-aceratosis
-acerb
-Acerbas
-acerbate
-acerbic
-acerbity
-acerdol
-acerin
-acerose
-acerous
-acerra
-acertannin
-acervate
-acervately
-acervation
-acervative
-acervose
-acervuline
-acervulus
-acescence
-acescency
-acescent
-aceship
-acesodyne
-Acestes
-acetabular
-Acetabularia
-acetabuliferous
-acetabuliform
-acetabulous
-acetabulum
-acetacetic
-acetal
-acetaldehydase
-acetaldehyde
-acetaldehydrase
-acetalization
-acetalize
-acetamide
-acetamidin
-acetamidine
-acetamido
-acetaminol
-acetanilid
-acetanilide
-acetanion
-acetaniside
-acetanisidide
-acetannin
-acetarious
-acetarsone
-acetate
-acetated
-acetation
-acetbromamide
-acetenyl
-acethydrazide
-acetic
-acetification
-acetifier
-acetify
-acetimeter
-acetimetry
-acetin
-acetize
-acetmethylanilide
-acetnaphthalide
-acetoacetanilide
-acetoacetate
-acetoacetic
-acetoamidophenol
-acetoarsenite
-Acetobacter
-acetobenzoic
-acetobromanilide
-acetochloral
-acetocinnamene
-acetoin
-acetol
-acetolysis
-acetolytic
-acetometer
-acetometrical
-acetometrically
-acetometry
-acetomorphine
-acetonaphthone
-acetonate
-acetonation
-acetone
-acetonemia
-acetonemic
-acetonic
-acetonitrile
-acetonization
-acetonize
-acetonuria
-acetonurometer
-acetonyl
-acetonylacetone
-acetonylidene
-acetophenetide
-acetophenin
-acetophenine
-acetophenone
-acetopiperone
-acetopyrin
-acetosalicylic
-acetose
-acetosity
-acetosoluble
-acetothienone
-acetotoluide
-acetotoluidine
-acetous
-acetoveratrone
-acetoxime
-acetoxyl
-acetoxyphthalide
-acetphenetid
-acetphenetidin
-acetract
-acettoluide
-acetum
-aceturic
-acetyl
-acetylacetonates
-acetylacetone
-acetylamine
-acetylate
-acetylation
-acetylator
-acetylbenzene
-acetylbenzoate
-acetylbenzoic
-acetylbiuret
-acetylcarbazole
-acetylcellulose
-acetylcholine
-acetylcyanide
-acetylenation
-acetylene
-acetylenediurein
-acetylenic
-acetylenyl
-acetylfluoride
-acetylglycine
-acetylhydrazine
-acetylic
-acetylide
-acetyliodide
-acetylizable
-acetylization
-acetylize
-acetylizer
-acetylmethylcarbinol
-acetylperoxide
-acetylphenol
-acetylphenylhydrazine
-acetylrosaniline
-acetylsalicylate
-acetylsalol
-acetyltannin
-acetylthymol
-acetyltropeine
-acetylurea
-ach
-Achaean
-Achaemenian
-Achaemenid
-Achaemenidae
-Achaemenidian
-Achaenodon
-Achaeta
-achaetous
-achage
-Achagua
-Achakzai
-achalasia
-Achamoth
-Achango
-achar
-Achariaceae
-Achariaceous
-achate
-Achates
-Achatina
-Achatinella
-Achatinidae
-ache
-acheilia
-acheilous
-acheiria
-acheirous
-acheirus
-Achen
-achene
-achenial
-achenium
-achenocarp
-achenodium
-acher
-Achernar
-Acheronian
-Acherontic
-Acherontical
-achete
-Achetidae
-Acheulean
-acheweed
-achievable
-achieve
-achievement
-achiever
-achigan
-achilary
-achill
-Achillea
-Achillean
-Achilleid
-achilleine
-Achillize
-achillobursitis
-achillodynia
-achime
-Achimenes
-Achinese
-aching
-achingly
-achira
-Achitophel
-achlamydate
-Achlamydeae
-achlamydeous
-achlorhydria
-achlorophyllous
-achloropsia
-Achmetha
-acholia
-acholic
-Acholoe
-acholous
-acholuria
-acholuric
-Achomawi
-achondrite
-achondritic
-achondroplasia
-achondroplastic
-achor
-achordal
-Achordata
-achordate
-Achorion
-Achras
-achree
-achroacyte
-Achroanthes
-achrodextrin
-achrodextrinase
-achroglobin
-achroiocythaemia
-achroiocythemia
-achroite
-achroma
-achromacyte
-achromasia
-achromat
-achromate
-Achromatiaceae
-achromatic
-achromatically
-achromaticity
-achromatin
-achromatinic
-achromatism
-Achromatium
-achromatizable
-achromatization
-achromatize
-achromatocyte
-achromatolysis
-achromatope
-achromatophile
-achromatopia
-achromatopsia
-achromatopsy
-achromatosis
-achromatous
-achromaturia
-achromia
-achromic
-Achromobacter
-Achromobacterieae
-achromoderma
-achromophilous
-achromotrichia
-achromous
-achronical
-achroodextrin
-achroodextrinase
-achroous
-achropsia
-achtehalber
-achtel
-achtelthaler
-Achuas
-achy
-achylia
-achylous
-achymia
-achymous
-Achyranthes
-Achyrodes
-acichloride
-acicula
-acicular
-acicularly
-aciculate
-aciculated
-aciculum
-acid
-Acidanthera
-Acidaspis
-acidemia
-acider
-acidic
-acidiferous
-acidifiable
-acidifiant
-acidific
-acidification
-acidifier
-acidify
-acidimeter
-acidimetric
-acidimetrical
-acidimetrically
-acidimetry
-acidite
-acidity
-acidize
-acidly
-acidness
-acidoid
-acidology
-acidometer
-acidometry
-acidophile
-acidophilic
-acidophilous
-acidoproteolytic
-acidosis
-acidosteophyte
-acidotic
-acidproof
-acidulate
-acidulent
-acidulous
-aciduric
-acidyl
-acier
-acierage
-Acieral
-acierate
-acieration
-aciform
-aciliate
-aciliated
-Acilius
-acinaceous
-acinaces
-acinacifolious
-acinaciform
-acinar
-acinarious
-acinary
-Acineta
-Acinetae
-acinetan
-Acinetaria
-acinetarian
-acinetic
-acinetiform
-Acinetina
-acinetinan
-acinic
-aciniform
-acinose
-acinotubular
-acinous
-acinus
-Acipenser
-Acipenseres
-acipenserid
-Acipenseridae
-acipenserine
-acipenseroid
-Acipenseroidei
-Acis
-aciurgy
-acker
-ackey
-ackman
-acknow
-acknowledge
-acknowledgeable
-acknowledged
-acknowledgedly
-acknowledger
-aclastic
-acle
-acleidian
-acleistous
-Aclemon
-aclidian
-aclinal
-aclinic
-acloud
-aclys
-Acmaea
-Acmaeidae
-acmatic
-acme
-acmesthesia
-acmic
-Acmispon
-acmite
-acne
-acneform
-acneiform
-acnemia
-Acnida
-acnodal
-acnode
-Acocanthera
-acocantherin
-acock
-acockbill
-acocotl
-Acoela
-Acoelomata
-acoelomate
-acoelomatous
-Acoelomi
-acoelomous
-acoelous
-Acoemetae
-Acoemeti
-Acoemetic
-acoin
-acoine
-Acolapissa
-acold
-Acolhua
-Acolhuan
-acologic
-acology
-acolous
-acoluthic
-acolyte
-acolythate
-Acoma
-acoma
-acomia
-acomous
-aconative
-acondylose
-acondylous
-acone
-aconic
-aconin
-aconine
-aconital
-aconite
-aconitia
-aconitic
-aconitin
-aconitine
-Aconitum
-Acontias
-acontium
-Acontius
-aconuresis
-acopic
-acopon
-acopyrin
-acopyrine
-acor
-acorea
-acoria
-acorn
-acorned
-Acorus
-acosmic
-acosmism
-acosmist
-acosmistic
-acotyledon
-acotyledonous
-acouasm
-acouchi
-acouchy
-acoumeter
-acoumetry
-acouometer
-acouophonia
-acoupa
-acousmata
-acousmatic
-acoustic
-acoustical
-acoustically
-acoustician
-acousticolateral
-Acousticon
-acoustics
-acquaint
-acquaintance
-acquaintanceship
-acquaintancy
-acquaintant
-acquainted
-acquaintedness
-acquest
-acquiesce
-acquiescement
-acquiescence
-acquiescency
-acquiescent
-acquiescently
-acquiescer
-acquiescingly
-acquirability
-acquirable
-acquire
-acquired
-acquirement
-acquirenda
-acquirer
-acquisible
-acquisite
-acquisited
-acquisition
-acquisitive
-acquisitively
-acquisitiveness
-acquisitor
-acquisitum
-acquist
-acquit
-acquitment
-acquittal
-acquittance
-acquitter
-Acrab
-acracy
-acraein
-Acraeinae
-acraldehyde
-Acrania
-acranial
-acraniate
-acrasia
-Acrasiaceae
-Acrasiales
-Acrasida
-Acrasieae
-Acraspeda
-acraspedote
-acratia
-acraturesis
-acrawl
-acraze
-acre
-acreable
-acreage
-acreak
-acream
-acred
-Acredula
-acreman
-acrestaff
-acrid
-acridan
-acridian
-acridic
-Acrididae
-Acridiidae
-acridine
-acridinic
-acridinium
-acridity
-Acridium
-acridly
-acridness
-acridone
-acridonium
-acridophagus
-acridyl
-acriflavin
-acriflavine
-acrimonious
-acrimoniously
-acrimoniousness
-acrimony
-acrindoline
-acrinyl
-acrisia
-Acrisius
-Acrita
-acritan
-acrite
-acritical
-acritol
-Acroa
-acroaesthesia
-acroama
-acroamatic
-acroamatics
-acroanesthesia
-acroarthritis
-acroasphyxia
-acroataxia
-acroatic
-acrobacy
-acrobat
-Acrobates
-acrobatholithic
-acrobatic
-acrobatical
-acrobatically
-acrobatics
-acrobatism
-acroblast
-acrobryous
-acrobystitis
-Acrocarpi
-acrocarpous
-acrocephalia
-acrocephalic
-acrocephalous
-acrocephaly
-Acrocera
-Acroceratidae
-Acroceraunian
-Acroceridae
-Acrochordidae
-Acrochordinae
-acrochordon
-Acroclinium
-Acrocomia
-acroconidium
-acrocontracture
-acrocoracoid
-acrocyanosis
-acrocyst
-acrodactylum
-acrodermatitis
-acrodont
-acrodontism
-acrodrome
-acrodromous
-Acrodus
-acrodynia
-acroesthesia
-acrogamous
-acrogamy
-acrogen
-acrogenic
-acrogenous
-acrogenously
-acrography
-Acrogynae
-acrogynae
-acrogynous
-acrolein
-acrolith
-acrolithan
-acrolithic
-acrologic
-acrologically
-acrologism
-acrologue
-acrology
-acromania
-acromastitis
-acromegalia
-acromegalic
-acromegaly
-acromelalgia
-acrometer
-acromial
-acromicria
-acromioclavicular
-acromiocoracoid
-acromiodeltoid
-acromiohumeral
-acromiohyoid
-acromion
-acromioscapular
-acromiosternal
-acromiothoracic
-acromonogrammatic
-acromphalus
-Acromyodi
-acromyodian
-acromyodic
-acromyodous
-acromyotonia
-acromyotonus
-acron
-acronarcotic
-acroneurosis
-acronical
-acronically
-acronyc
-acronych
-Acronycta
-acronyctous
-acronym
-acronymic
-acronymize
-acronymous
-acronyx
-acrook
-acroparalysis
-acroparesthesia
-acropathology
-acropathy
-acropetal
-acropetally
-acrophobia
-acrophonetic
-acrophonic
-acrophony
-acropodium
-acropoleis
-acropolis
-acropolitan
-Acropora
-acrorhagus
-acrorrheuma
-acrosarc
-acrosarcum
-acroscleriasis
-acroscleroderma
-acroscopic
-acrose
-acrosome
-acrosphacelus
-acrospire
-acrospore
-acrosporous
-across
-acrostic
-acrostical
-acrostically
-acrostichal
-Acrosticheae
-acrostichic
-acrostichoid
-Acrostichum
-acrosticism
-acrostolion
-acrostolium
-acrotarsial
-acrotarsium
-acroteleutic
-acroterial
-acroteric
-acroterium
-Acrothoracica
-acrotic
-acrotism
-acrotomous
-Acrotreta
-Acrotretidae
-acrotrophic
-acrotrophoneurosis
-Acrux
-Acrydium
-acryl
-acrylaldehyde
-acrylate
-acrylic
-acrylonitrile
-acrylyl
-act
-acta
-actability
-actable
-Actaea
-Actaeaceae
-Actaeon
-Actaeonidae
-Actiad
-Actian
-actification
-actifier
-actify
-actin
-actinal
-actinally
-actinautographic
-actinautography
-actine
-actinenchyma
-acting
-Actinia
-actinian
-Actiniaria
-actiniarian
-actinic
-actinically
-Actinidia
-Actinidiaceae
-actiniferous
-actiniform
-actinine
-actiniochrome
-actiniohematin
-Actiniomorpha
-actinism
-Actinistia
-actinium
-actinobacillosis
-Actinobacillus
-actinoblast
-actinobranch
-actinobranchia
-actinocarp
-actinocarpic
-actinocarpous
-actinochemistry
-actinocrinid
-Actinocrinidae
-actinocrinite
-Actinocrinus
-actinocutitis
-actinodermatitis
-actinodielectric
-actinodrome
-actinodromous
-actinoelectric
-actinoelectrically
-actinoelectricity
-actinogonidiate
-actinogram
-actinograph
-actinography
-actinoid
-Actinoida
-Actinoidea
-actinolite
-actinolitic
-actinologous
-actinologue
-actinology
-actinomere
-actinomeric
-actinometer
-actinometric
-actinometrical
-actinometry
-actinomorphic
-actinomorphous
-actinomorphy
-Actinomyces
-Actinomycetaceae
-Actinomycetales
-actinomycete
-actinomycetous
-actinomycin
-actinomycoma
-actinomycosis
-actinomycotic
-Actinomyxidia
-Actinomyxidiida
-actinon
-Actinonema
-actinoneuritis
-actinophone
-actinophonic
-actinophore
-actinophorous
-actinophryan
-Actinophrys
-Actinopoda
-actinopraxis
-actinopteran
-Actinopteri
-actinopterous
-actinopterygian
-Actinopterygii
-actinopterygious
-actinoscopy
-actinosoma
-actinosome
-Actinosphaerium
-actinost
-actinostereoscopy
-actinostomal
-actinostome
-actinotherapeutic
-actinotherapeutics
-actinotherapy
-actinotoxemia
-actinotrichium
-actinotrocha
-actinouranium
-Actinozoa
-actinozoal
-actinozoan
-actinozoon
-actinula
-action
-actionable
-actionably
-actional
-actionary
-actioner
-actionize
-actionless
-Actipylea
-Actium
-activable
-activate
-activation
-activator
-active
-actively
-activeness
-activin
-activism
-activist
-activital
-activity
-activize
-actless
-actomyosin
-acton
-actor
-actorship
-actress
-Acts
-actu
-actual
-actualism
-actualist
-actualistic
-actuality
-actualization
-actualize
-actually
-actualness
-actuarial
-actuarially
-actuarian
-actuary
-actuaryship
-actuation
-actuator
-acture
-acturience
-actutate
-acuaesthesia
-Acuan
-acuate
-acuation
-Acubens
-acuclosure
-acuductor
-acuesthesia
-acuity
-aculea
-Aculeata
-aculeate
-aculeated
-aculeiform
-aculeolate
-aculeolus
-aculeus
-acumen
-acuminate
-acumination
-acuminose
-acuminous
-acuminulate
-acupress
-acupressure
-acupunctuate
-acupunctuation
-acupuncturation
-acupuncturator
-acupuncture
-acurative
-acushla
-acutangular
-acutate
-acute
-acutely
-acutenaculum
-acuteness
-acutiator
-acutifoliate
-Acutilinguae
-acutilingual
-acutilobate
-acutiplantar
-acutish
-acutograve
-acutonodose
-acutorsion
-acyanoblepsia
-acyanopsia
-acyclic
-acyesis
-acyetic
-acyl
-acylamido
-acylamidobenzene
-acylamino
-acylate
-acylation
-acylogen
-acyloin
-acyloxy
-acyloxymethane
-acyrological
-acyrology
-acystia
-ad
-Ada
-adactyl
-adactylia
-adactylism
-adactylous
-Adad
-adad
-adage
-adagial
-adagietto
-adagio
-Adai
-Adaize
-Adam
-adamant
-adamantean
-adamantine
-adamantinoma
-adamantoblast
-adamantoblastoma
-adamantoid
-adamantoma
-adamas
-Adamastor
-adambulacral
-adamellite
-Adamhood
-Adamic
-Adamical
-Adamically
-adamine
-Adamite
-adamite
-Adamitic
-Adamitical
-Adamitism
-Adamsia
-adamsite
-adance
-adangle
-Adansonia
-Adapa
-adapid
-Adapis
-adapt
-adaptability
-adaptable
-adaptation
-adaptational
-adaptationally
-adaptative
-adaptedness
-adapter
-adaption
-adaptional
-adaptionism
-adaptitude
-adaptive
-adaptively
-adaptiveness
-adaptometer
-adaptor
-adaptorial
-Adar
-adarme
-adat
-adati
-adatom
-adaunt
-adaw
-adawe
-adawlut
-adawn
-adaxial
-aday
-adays
-adazzle
-adcraft
-add
-Adda
-adda
-addability
-addable
-addax
-addebted
-added
-addedly
-addend
-addenda
-addendum
-adder
-adderbolt
-adderfish
-adderspit
-adderwort
-addibility
-addible
-addicent
-addict
-addicted
-addictedness
-addiction
-Addie
-addiment
-Addisonian
-Addisoniana
-additament
-additamentary
-addition
-additional
-additionally
-additionary
-additionist
-addititious
-additive
-additively
-additivity
-additory
-addle
-addlebrain
-addlebrained
-addlehead
-addleheaded
-addleheadedly
-addleheadedness
-addlement
-addleness
-addlepate
-addlepated
-addlepatedness
-addleplot
-addlings
-addlins
-addorsed
-address
-addressee
-addresser
-addressful
-Addressograph
-addressor
-addrest
-Addu
-adduce
-adducent
-adducer
-adducible
-adduct
-adduction
-adductive
-adductor
-Addy
-Ade
-ade
-adead
-adeem
-adeep
-Adela
-Adelaide
-Adelarthra
-Adelarthrosomata
-adelarthrosomatous
-Adelbert
-Adelea
-Adeleidae
-Adelges
-Adelia
-Adelina
-Adeline
-adeling
-adelite
-Adeliza
-adelocerous
-Adelochorda
-adelocodonic
-adelomorphic
-adelomorphous
-adelopod
-Adelops
-Adelphi
-Adelphian
-adelphogamy
-Adelphoi
-adelpholite
-adelphophagy
-ademonist
-adempted
-ademption
-adenalgia
-adenalgy
-Adenanthera
-adenase
-adenasthenia
-adendric
-adendritic
-adenectomy
-adenectopia
-adenectopic
-adenemphractic
-adenemphraxis
-adenia
-adeniform
-adenine
-adenitis
-adenization
-adenoacanthoma
-adenoblast
-adenocancroid
-adenocarcinoma
-adenocarcinomatous
-adenocele
-adenocellulitis
-adenochondroma
-adenochondrosarcoma
-adenochrome
-adenocyst
-adenocystoma
-adenocystomatous
-adenodermia
-adenodiastasis
-adenodynia
-adenofibroma
-adenofibrosis
-adenogenesis
-adenogenous
-adenographer
-adenographic
-adenographical
-adenography
-adenohypersthenia
-adenoid
-adenoidal
-adenoidism
-adenoliomyofibroma
-adenolipoma
-adenolipomatosis
-adenologaditis
-adenological
-adenology
-adenolymphocele
-adenolymphoma
-adenoma
-adenomalacia
-adenomatome
-adenomatous
-adenomeningeal
-adenometritis
-adenomycosis
-adenomyofibroma
-adenomyoma
-adenomyxoma
-adenomyxosarcoma
-adenoncus
-adenoneural
-adenoneure
-adenopathy
-adenopharyngeal
-adenopharyngitis
-adenophlegmon
-Adenophora
-adenophore
-adenophorous
-adenophthalmia
-adenophyllous
-adenophyma
-adenopodous
-adenosarcoma
-adenosclerosis
-adenose
-adenosine
-adenosis
-adenostemonous
-Adenostoma
-adenotome
-adenotomic
-adenotomy
-adenotyphoid
-adenotyphus
-adenyl
-adenylic
-Adeodatus
-Adeona
-Adephaga
-adephagan
-adephagia
-adephagous
-adept
-adeptness
-adeptship
-adequacy
-adequate
-adequately
-adequateness
-adequation
-adequative
-adermia
-adermin
-Adessenarian
-adet
-adevism
-adfected
-adfix
-adfluxion
-adglutinate
-Adhafera
-adhaka
-adhamant
-Adhara
-adharma
-adhere
-adherence
-adherency
-adherent
-adherently
-adherer
-adherescence
-adherescent
-adhesion
-adhesional
-adhesive
-adhesively
-adhesivemeter
-adhesiveness
-adhibit
-adhibition
-adiabatic
-adiabatically
-adiabolist
-adiactinic
-adiadochokinesis
-adiagnostic
-adiantiform
-Adiantum
-adiaphon
-adiaphonon
-adiaphoral
-adiaphoresis
-adiaphoretic
-adiaphorism
-adiaphorist
-adiaphoristic
-adiaphorite
-adiaphoron
-adiaphorous
-adiate
-adiathermal
-adiathermancy
-adiathermanous
-adiathermic
-adiathetic
-adiation
-Adib
-Adicea
-adicity
-Adiel
-adieu
-adieux
-Adigei
-Adighe
-Adigranth
-adigranth
-Adin
-Adinida
-adinidan
-adinole
-adion
-adipate
-adipescent
-adipic
-adipinic
-adipocele
-adipocellulose
-adipocere
-adipoceriform
-adipocerous
-adipocyte
-adipofibroma
-adipogenic
-adipogenous
-adipoid
-adipolysis
-adipolytic
-adipoma
-adipomatous
-adipometer
-adipopexia
-adipopexis
-adipose
-adiposeness
-adiposis
-adiposity
-adiposogenital
-adiposuria
-adipous
-adipsia
-adipsic
-adipsous
-adipsy
-adipyl
-Adirondack
-adit
-adital
-aditus
-adjacency
-adjacent
-adjacently
-adjag
-adject
-adjection
-adjectional
-adjectival
-adjectivally
-adjective
-adjectively
-adjectivism
-adjectivitis
-adjiger
-adjoin
-adjoined
-adjoinedly
-adjoining
-adjoint
-adjourn
-adjournal
-adjournment
-adjudge
-adjudgeable
-adjudger
-adjudgment
-adjudicate
-adjudication
-adjudicative
-adjudicator
-adjudicature
-adjunct
-adjunction
-adjunctive
-adjunctively
-adjunctly
-adjuration
-adjuratory
-adjure
-adjurer
-adjust
-adjustable
-adjustably
-adjustage
-adjustation
-adjuster
-adjustive
-adjustment
-adjutage
-adjutancy
-adjutant
-adjutantship
-adjutorious
-adjutory
-adjutrice
-adjuvant
-adlay
-adless
-adlet
-Adlumia
-adlumidine
-adlumine
-adman
-admarginate
-admaxillary
-admeasure
-admeasurement
-admeasurer
-admedial
-admedian
-admensuration
-admi
-adminicle
-adminicula
-adminicular
-adminiculary
-adminiculate
-adminiculation
-adminiculum
-administer
-administerd
-administerial
-administrable
-administrant
-administrate
-administration
-administrational
-administrative
-administratively
-administrator
-administratorship
-administratress
-administratrices
-administratrix
-admirability
-admirable
-admirableness
-admirably
-admiral
-admiralship
-admiralty
-admiration
-admirative
-admirator
-admire
-admired
-admiredly
-admirer
-admiring
-admiringly
-admissibility
-admissible
-admissibleness
-admissibly
-admission
-admissive
-admissory
-admit
-admittable
-admittance
-admitted
-admittedly
-admittee
-admitter
-admittible
-admix
-admixtion
-admixture
-admonish
-admonisher
-admonishingly
-admonishment
-admonition
-admonitioner
-admonitionist
-admonitive
-admonitively
-admonitor
-admonitorial
-admonitorily
-admonitory
-admonitrix
-admortization
-adnascence
-adnascent
-adnate
-adnation
-adnephrine
-adnerval
-adneural
-adnex
-adnexal
-adnexed
-adnexitis
-adnexopexy
-adnominal
-adnominally
-adnomination
-adnoun
-ado
-adobe
-adolesce
-adolescence
-adolescency
-adolescent
-adolescently
-Adolph
-Adolphus
-Adonai
-Adonean
-Adonia
-Adoniad
-Adonian
-Adonic
-adonidin
-adonin
-Adoniram
-Adonis
-adonite
-adonitol
-adonize
-adoperate
-adoperation
-adopt
-adoptability
-adoptable
-adoptant
-adoptative
-adopted
-adoptedly
-adoptee
-adopter
-adoptian
-adoptianism
-adoptianist
-adoption
-adoptional
-adoptionism
-adoptionist
-adoptious
-adoptive
-adoptively
-adorability
-adorable
-adorableness
-adorably
-adoral
-adorally
-adorant
-Adorantes
-adoration
-adoratory
-adore
-adorer
-Adoretus
-adoringly
-adorn
-adorner
-adorningly
-adornment
-adosculation
-adossed
-adoulie
-adown
-Adoxa
-Adoxaceae
-adoxaceous
-adoxography
-adoxy
-adoze
-adpao
-adpress
-adpromission
-adradial
-adradially
-adradius
-Adramelech
-Adrammelech
-adread
-adream
-adreamed
-adreamt
-adrectal
-adrenal
-adrenalectomize
-adrenalectomy
-Adrenalin
-adrenaline
-adrenalize
-adrenalone
-adrenergic
-adrenin
-adrenine
-adrenochrome
-adrenocortical
-adrenocorticotropic
-adrenolysis
-adrenolytic
-adrenotropic
-Adrian
-Adriana
-Adriatic
-Adrienne
-adrift
-adrip
-adroit
-adroitly
-adroitness
-adroop
-adrop
-adrostral
-adrowse
-adrue
-adry
-adsbud
-adscendent
-adscititious
-adscititiously
-adscript
-adscripted
-adscription
-adscriptitious
-adscriptitius
-adscriptive
-adsessor
-adsheart
-adsignification
-adsignify
-adsmith
-adsmithing
-adsorb
-adsorbable
-adsorbate
-adsorbent
-adsorption
-adsorptive
-adstipulate
-adstipulation
-adstipulator
-adterminal
-adtevac
-adular
-adularescence
-adularia
-adulate
-adulation
-adulator
-adulatory
-adulatress
-Adullam
-Adullamite
-adult
-adulter
-adulterant
-adulterate
-adulterately
-adulterateness
-adulteration
-adulterator
-adulterer
-adulteress
-adulterine
-adulterize
-adulterous
-adulterously
-adultery
-adulthood
-adulticidal
-adulticide
-adultness
-adultoid
-adumbral
-adumbrant
-adumbrate
-adumbration
-adumbrative
-adumbratively
-adunc
-aduncate
-aduncated
-aduncity
-aduncous
-adusk
-adust
-adustion
-adustiosis
-Advaita
-advance
-advanceable
-advanced
-advancedness
-advancement
-advancer
-advancing
-advancingly
-advancive
-advantage
-advantageous
-advantageously
-advantageousness
-advection
-advectitious
-advective
-advehent
-advene
-advenience
-advenient
-Advent
-advential
-Adventism
-Adventist
-adventitia
-adventitious
-adventitiously
-adventitiousness
-adventive
-adventual
-adventure
-adventureful
-adventurement
-adventurer
-adventureship
-adventuresome
-adventuresomely
-adventuresomeness
-adventuress
-adventurish
-adventurous
-adventurously
-adventurousness
-adverb
-adverbial
-adverbiality
-adverbialize
-adverbially
-adverbiation
-adversant
-adversaria
-adversarious
-adversary
-adversative
-adversatively
-adverse
-adversely
-adverseness
-adversifoliate
-adversifolious
-adversity
-advert
-advertence
-advertency
-advertent
-advertently
-advertisable
-advertise
-advertisee
-advertisement
-advertiser
-advertising
-advice
-adviceful
-advisability
-advisable
-advisableness
-advisably
-advisal
-advisatory
-advise
-advised
-advisedly
-advisedness
-advisee
-advisement
-adviser
-advisership
-advisive
-advisiveness
-advisor
-advisorily
-advisory
-advocacy
-advocate
-advocateship
-advocatess
-advocation
-advocator
-advocatory
-advocatress
-advocatrice
-advocatrix
-advolution
-advowee
-advowson
-ady
-adynamia
-adynamic
-adynamy
-adyta
-adyton
-adytum
-adz
-adze
-adzer
-adzooks
-ae
-Aeacides
-Aeacus
-Aeaean
-Aechmophorus
-aecial
-Aecidiaceae
-aecidial
-aecidioform
-Aecidiomycetes
-aecidiospore
-aecidiostage
-aecidium
-aeciospore
-aeciostage
-aecioteliospore
-aeciotelium
-aecium
-aedeagus
-Aedes
-aedicula
-aedile
-aedileship
-aedilian
-aedilic
-aedilitian
-aedility
-aedoeagus
-aefald
-aefaldness
-aefaldy
-aefauld
-aegagropila
-aegagropile
-aegagrus
-Aegean
-aegerian
-aegeriid
-Aegeriidae
-Aegialitis
-aegicrania
-Aegina
-Aeginetan
-Aeginetic
-Aegipan
-aegirine
-aegirinolite
-aegirite
-aegis
-Aegisthus
-Aegithalos
-Aegithognathae
-aegithognathism
-aegithognathous
-Aegle
-Aegopodium
-aegrotant
-aegyptilla
-aegyrite
-aeluroid
-Aeluroidea
-aelurophobe
-aelurophobia
-aeluropodous
-aenach
-aenean
-aeneolithic
-aeneous
-aenigmatite
-aeolharmonica
-Aeolia
-Aeolian
-Aeolic
-Aeolicism
-aeolid
-Aeolidae
-Aeolididae
-aeolina
-aeoline
-aeolipile
-Aeolis
-Aeolism
-Aeolist
-aeolistic
-aeolodicon
-aeolodion
-aeolomelodicon
-aeolopantalon
-aeolotropic
-aeolotropism
-aeolotropy
-aeolsklavier
-aeon
-aeonial
-aeonian
-aeonist
-Aepyceros
-Aepyornis
-Aepyornithidae
-Aepyornithiformes
-Aequi
-Aequian
-Aequiculi
-Aequipalpia
-aequoreal
-aer
-aerage
-aerarian
-aerarium
-aerate
-aeration
-aerator
-aerenchyma
-aerenterectasia
-aerial
-aerialist
-aeriality
-aerially
-aerialness
-aeric
-aerical
-Aerides
-aerie
-aeried
-aerifaction
-aeriferous
-aerification
-aeriform
-aerify
-aero
-Aerobacter
-aerobate
-aerobatic
-aerobatics
-aerobe
-aerobian
-aerobic
-aerobically
-aerobiologic
-aerobiological
-aerobiologically
-aerobiologist
-aerobiology
-aerobion
-aerobiont
-aerobioscope
-aerobiosis
-aerobiotic
-aerobiotically
-aerobious
-aerobium
-aeroboat
-Aerobranchia
-aerobranchiate
-aerobus
-aerocamera
-aerocartograph
-Aerocharidae
-aerocolpos
-aerocraft
-aerocurve
-aerocyst
-aerodermectasia
-aerodone
-aerodonetic
-aerodonetics
-aerodrome
-aerodromics
-aerodynamic
-aerodynamical
-aerodynamicist
-aerodynamics
-aerodyne
-aeroembolism
-aeroenterectasia
-aerofoil
-aerogel
-aerogen
-aerogenes
-aerogenesis
-aerogenic
-aerogenically
-aerogenous
-aerogeologist
-aerogeology
-aerognosy
-aerogram
-aerograph
-aerographer
-aerographic
-aerographical
-aerographics
-aerography
-aerogun
-aerohydrodynamic
-aerohydropathy
-aerohydroplane
-aerohydrotherapy
-aerohydrous
-aeroides
-aerolite
-aerolith
-aerolithology
-aerolitic
-aerolitics
-aerologic
-aerological
-aerologist
-aerology
-aeromaechanic
-aeromancer
-aeromancy
-aeromantic
-aeromarine
-aeromechanical
-aeromechanics
-aerometeorograph
-aerometer
-aerometric
-aerometry
-aeromotor
-aeronat
-aeronaut
-aeronautic
-aeronautical
-aeronautically
-aeronautics
-aeronautism
-aeronef
-aeroneurosis
-aeropathy
-Aerope
-aeroperitoneum
-aeroperitonia
-aerophagia
-aerophagist
-aerophagy
-aerophane
-aerophilatelic
-aerophilatelist
-aerophilately
-aerophile
-aerophilic
-aerophilous
-aerophobia
-aerophobic
-aerophone
-aerophor
-aerophore
-aerophotography
-aerophysical
-aerophysics
-aerophyte
-aeroplane
-aeroplaner
-aeroplanist
-aeropleustic
-aeroporotomy
-aeroscepsis
-aeroscepsy
-aeroscope
-aeroscopic
-aeroscopically
-aeroscopy
-aerose
-aerosiderite
-aerosiderolite
-Aerosol
-aerosol
-aerosphere
-aerosporin
-aerostat
-aerostatic
-aerostatical
-aerostatics
-aerostation
-aerosteam
-aerotactic
-aerotaxis
-aerotechnical
-aerotherapeutics
-aerotherapy
-aerotonometer
-aerotonometric
-aerotonometry
-aerotropic
-aerotropism
-aeroyacht
-aeruginous
-aerugo
-aery
-aes
-Aeschylean
-Aeschynanthus
-Aeschynomene
-aeschynomenous
-Aesculaceae
-aesculaceous
-Aesculapian
-Aesculapius
-Aesculus
-Aesopian
-Aesopic
-aesthete
-aesthetic
-aesthetical
-aesthetically
-aesthetician
-aestheticism
-aestheticist
-aestheticize
-aesthetics
-aesthiology
-aesthophysiology
-Aestii
-aethalioid
-aethalium
-aetheogam
-aetheogamic
-aetheogamous
-aethered
-Aethionema
-aethogen
-aethrioscope
-Aethusa
-Aetian
-aetiogenic
-aetiotropic
-aetiotropically
-Aetobatidae
-Aetobatus
-Aetolian
-Aetomorphae
-aetosaur
-aetosaurian
-Aetosaurus
-aevia
-aface
-afaint
-Afar
-afar
-afara
-afear
-afeard
-afeared
-afebrile
-Afenil
-afernan
-afetal
-affa
-affability
-affable
-affableness
-affably
-affabrous
-affair
-affaite
-affect
-affectable
-affectate
-affectation
-affectationist
-affected
-affectedly
-affectedness
-affecter
-affectibility
-affectible
-affecting
-affectingly
-affection
-affectional
-affectionally
-affectionate
-affectionately
-affectionateness
-affectioned
-affectious
-affective
-affectively
-affectivity
-affeer
-affeerer
-affeerment
-affeir
-affenpinscher
-affenspalte
-afferent
-affettuoso
-affiance
-affiancer
-affiant
-affidation
-affidavit
-affidavy
-affiliable
-affiliate
-affiliation
-affinal
-affination
-affine
-affined
-affinely
-affinitative
-affinitatively
-affinite
-affinition
-affinitive
-affinity
-affirm
-affirmable
-affirmably
-affirmance
-affirmant
-affirmation
-affirmative
-affirmatively
-affirmatory
-affirmer
-affirmingly
-affix
-affixal
-affixation
-affixer
-affixion
-affixture
-afflation
-afflatus
-afflict
-afflicted
-afflictedness
-afflicter
-afflicting
-afflictingly
-affliction
-afflictionless
-afflictive
-afflictively
-affluence
-affluent
-affluently
-affluentness
-afflux
-affluxion
-afforce
-afforcement
-afford
-affordable
-afforest
-afforestable
-afforestation
-afforestment
-afformative
-affranchise
-affranchisement
-affray
-affrayer
-affreight
-affreighter
-affreightment
-affricate
-affricated
-affrication
-affricative
-affright
-affrighted
-affrightedly
-affrighter
-affrightful
-affrightfully
-affrightingly
-affrightment
-affront
-affronte
-affronted
-affrontedly
-affrontedness
-affronter
-affronting
-affrontingly
-affrontingness
-affrontive
-affrontiveness
-affrontment
-affuse
-affusion
-affy
-Afghan
-afghani
-afield
-Afifi
-afikomen
-afire
-aflagellar
-aflame
-aflare
-aflat
-aflaunt
-aflicker
-aflight
-afloat
-aflow
-aflower
-afluking
-aflush
-aflutter
-afoam
-afoot
-afore
-aforehand
-aforenamed
-aforesaid
-aforethought
-aforetime
-aforetimes
-afortiori
-afoul
-afraid
-afraidness
-Aframerican
-Afrasia
-Afrasian
-afreet
-afresh
-afret
-Afric
-African
-Africana
-Africanism
-Africanist
-Africanization
-Africanize
-Africanoid
-Africanthropus
-Afridi
-Afrikaans
-Afrikander
-Afrikanderdom
-Afrikanderism
-Afrikaner
-Afrogaea
-Afrogaean
-afront
-afrown
-Afshah
-Afshar
-aft
-aftaba
-after
-afteract
-afterage
-afterattack
-afterband
-afterbeat
-afterbirth
-afterblow
-afterbody
-afterbrain
-afterbreach
-afterbreast
-afterburner
-afterburning
-aftercare
-aftercareer
-aftercast
-aftercataract
-aftercause
-afterchance
-afterchrome
-afterchurch
-afterclap
-afterclause
-aftercome
-aftercomer
-aftercoming
-aftercooler
-aftercost
-aftercourse
-aftercrop
-aftercure
-afterdamp
-afterdate
-afterdays
-afterdeck
-afterdinner
-afterdrain
-afterdrops
-aftereffect
-afterend
-aftereye
-afterfall
-afterfame
-afterfeed
-afterfermentation
-afterform
-afterfriend
-afterfruits
-afterfuture
-aftergame
-aftergas
-afterglide
-afterglow
-aftergo
-aftergood
-aftergrass
-aftergrave
-aftergrief
-aftergrind
-aftergrowth
-afterguard
-afterguns
-afterhand
-afterharm
-afterhatch
-afterhelp
-afterhend
-afterhold
-afterhope
-afterhours
-afterimage
-afterimpression
-afterings
-afterking
-afterknowledge
-afterlife
-afterlifetime
-afterlight
-afterloss
-afterlove
-aftermark
-aftermarriage
-aftermass
-aftermast
-aftermath
-aftermatter
-aftermeal
-aftermilk
-aftermost
-afternight
-afternoon
-afternoons
-afternose
-afternote
-afteroar
-afterpain
-afterpart
-afterpast
-afterpeak
-afterpiece
-afterplanting
-afterplay
-afterpressure
-afterproof
-afterrake
-afterreckoning
-afterrider
-afterripening
-afterroll
-afterschool
-aftersend
-aftersensation
-aftershaft
-aftershafted
-aftershine
-aftership
-aftershock
-aftersong
-aftersound
-afterspeech
-afterspring
-afterstain
-afterstate
-afterstorm
-afterstrain
-afterstretch
-afterstudy
-afterswarm
-afterswarming
-afterswell
-aftertan
-aftertask
-aftertaste
-afterthinker
-afterthought
-afterthoughted
-afterthrift
-aftertime
-aftertimes
-aftertouch
-aftertreatment
-aftertrial
-afterturn
-aftervision
-afterwale
-afterwar
-afterward
-afterwards
-afterwash
-afterwhile
-afterwisdom
-afterwise
-afterwit
-afterwitted
-afterwork
-afterworking
-afterworld
-afterwrath
-afterwrist
-aftmost
-Aftonian
-aftosa
-aftward
-aftwards
-afunction
-afunctional
-afwillite
-Afzelia
-aga
-agabanee
-agacante
-agacella
-Agaces
-Agade
-Agag
-again
-against
-againstand
-agal
-agalactia
-agalactic
-agalactous
-agalawood
-agalaxia
-agalaxy
-Agalena
-Agalenidae
-Agalinis
-agalite
-agalloch
-agallochum
-agallop
-agalma
-agalmatolite
-agalwood
-Agama
-agama
-Agamae
-Agamemnon
-agamete
-agami
-agamian
-agamic
-agamically
-agamid
-Agamidae
-agamobium
-agamogenesis
-agamogenetic
-agamogenetically
-agamogony
-agamoid
-agamont
-agamospore
-agamous
-agamy
-aganglionic
-Aganice
-Aganippe
-Agao
-Agaonidae
-Agapanthus
-agape
-Agapemone
-Agapemonian
-Agapemonist
-Agapemonite
-agapetae
-agapeti
-agapetid
-Agapetidae
-Agapornis
-agar
-agaric
-agaricaceae
-agaricaceous
-Agaricales
-agaricic
-agariciform
-agaricin
-agaricine
-agaricoid
-Agaricus
-Agaristidae
-agarita
-Agarum
-agarwal
-agasp
-Agastache
-Agastreae
-agastric
-agastroneuria
-agate
-agateware
-Agatha
-Agathaea
-Agathaumas
-agathin
-Agathis
-agathism
-agathist
-agathodaemon
-agathodaemonic
-agathokakological
-agathology
-Agathosma
-agatiferous
-agatiform
-agatine
-agatize
-agatoid
-agaty
-Agau
-Agave
-agavose
-Agawam
-Agaz
-agaze
-agazed
-Agdistis
-age
-aged
-agedly
-agedness
-agee
-Agelacrinites
-Agelacrinitidae
-Agelaius
-Agelaus
-ageless
-agelessness
-agelong
-agen
-Agena
-agency
-agenda
-agendum
-agenesia
-agenesic
-agenesis
-agennetic
-agent
-agentess
-agential
-agentival
-agentive
-agentry
-agentship
-ageometrical
-ager
-Ageratum
-ageusia
-ageusic
-ageustia
-agger
-aggerate
-aggeration
-aggerose
-Aggie
-agglomerant
-agglomerate
-agglomerated
-agglomeratic
-agglomeration
-agglomerative
-agglomerator
-agglutinability
-agglutinable
-agglutinant
-agglutinate
-agglutination
-agglutinationist
-agglutinative
-agglutinator
-agglutinin
-agglutinize
-agglutinogen
-agglutinogenic
-agglutinoid
-agglutinoscope
-agglutogenic
-aggradation
-aggradational
-aggrade
-aggrandizable
-aggrandize
-aggrandizement
-aggrandizer
-aggrate
-aggravate
-aggravating
-aggravatingly
-aggravation
-aggravative
-aggravator
-aggregable
-aggregant
-Aggregata
-Aggregatae
-aggregate
-aggregately
-aggregateness
-aggregation
-aggregative
-aggregator
-aggregatory
-aggress
-aggressin
-aggression
-aggressionist
-aggressive
-aggressively
-aggressiveness
-aggressor
-aggrievance
-aggrieve
-aggrieved
-aggrievedly
-aggrievedness
-aggrievement
-aggroup
-aggroupment
-aggry
-aggur
-agha
-Aghan
-aghanee
-aghast
-aghastness
-Aghlabite
-Aghorapanthi
-Aghori
-Agialid
-Agib
-Agiel
-agilawood
-agile
-agilely
-agileness
-agility
-agillawood
-aging
-agio
-agiotage
-agist
-agistator
-agistment
-agistor
-agitable
-agitant
-agitate
-agitatedly
-agitation
-agitational
-agitationist
-agitative
-agitator
-agitatorial
-agitatrix
-agitprop
-Agkistrodon
-agla
-Aglaia
-aglance
-Aglaonema
-Aglaos
-aglaozonia
-aglare
-Aglaspis
-Aglauros
-agleaf
-agleam
-aglet
-aglethead
-agley
-aglimmer
-aglint
-Aglipayan
-Aglipayano
-aglitter
-aglobulia
-Aglossa
-aglossal
-aglossate
-aglossia
-aglow
-aglucon
-aglutition
-aglycosuric
-Aglypha
-aglyphodont
-Aglyphodonta
-Aglyphodontia
-aglyphous
-agmatine
-agmatology
-agminate
-agminated
-agnail
-agname
-agnamed
-agnate
-Agnatha
-agnathia
-agnathic
-Agnathostomata
-agnathostomatous
-agnathous
-agnatic
-agnatically
-agnation
-agnel
-Agnes
-agnification
-agnize
-Agnoetae
-Agnoete
-Agnoetism
-agnoiology
-Agnoite
-agnomen
-agnomical
-agnominal
-agnomination
-agnosia
-agnosis
-agnostic
-agnostically
-agnosticism
-Agnostus
-agnosy
-Agnotozoic
-agnus
-ago
-agog
-agoge
-agogic
-agogics
-agoho
-agoing
-agomensin
-agomphiasis
-agomphious
-agomphosis
-agon
-agonal
-agone
-agoniada
-agoniadin
-agoniatite
-Agoniatites
-agonic
-agonied
-agonist
-Agonista
-agonistarch
-agonistic
-agonistically
-agonistics
-agonium
-agonize
-agonizedly
-agonizer
-agonizingly
-Agonostomus
-agonothete
-agonothetic
-agony
-agora
-agoranome
-agoraphobia
-agouara
-agouta
-agouti
-agpaite
-agpaitic
-Agra
-agraffee
-agrah
-agral
-agrammatical
-agrammatism
-Agrania
-agranulocyte
-agranulocytosis
-agranuloplastic
-Agrapha
-agraphia
-agraphic
-agrarian
-agrarianism
-agrarianize
-agrarianly
-Agrauleum
-agre
-agree
-agreeability
-agreeable
-agreeableness
-agreeably
-agreed
-agreeing
-agreeingly
-agreement
-agreer
-agregation
-agrege
-agrestal
-agrestial
-agrestian
-agrestic
-agria
-agricere
-agricole
-agricolist
-agricolite
-agricolous
-agricultor
-agricultural
-agriculturalist
-agriculturally
-agriculture
-agriculturer
-agriculturist
-Agrilus
-Agrimonia
-agrimony
-agrimotor
-agrin
-Agriochoeridae
-Agriochoerus
-agriological
-agriologist
-agriology
-Agrionia
-agrionid
-Agrionidae
-Agriotes
-Agriotypidae
-Agriotypus
-agrise
-agrito
-agroan
-agrobiologic
-agrobiological
-agrobiologically
-agrobiologist
-agrobiology
-agrogeological
-agrogeologically
-agrogeology
-agrologic
-agrological
-agrologically
-agrology
-agrom
-Agromyza
-agromyzid
-Agromyzidae
-agronome
-agronomial
-agronomic
-agronomical
-agronomics
-agronomist
-agronomy
-agroof
-agrope
-Agropyron
-Agrostemma
-agrosteral
-Agrostis
-agrostographer
-agrostographic
-agrostographical
-agrostography
-agrostologic
-agrostological
-agrostologist
-agrostology
-agrotechny
-Agrotis
-aground
-agrufe
-agruif
-agrypnia
-agrypnotic
-agsam
-agua
-aguacate
-Aguacateca
-aguavina
-Agudist
-ague
-aguelike
-agueproof
-agueweed
-aguey
-aguilarite
-aguilawood
-aguinaldo
-aguirage
-aguish
-aguishly
-aguishness
-agunah
-agush
-agust
-agy
-Agyieus
-agynarious
-agynary
-agynous
-agyrate
-agyria
-Ah
-ah
-aha
-ahaaina
-ahankara
-Ahantchuyuk
-ahartalav
-ahaunch
-ahead
-aheap
-ahem
-Ahepatokla
-Ahet
-ahey
-ahimsa
-ahind
-ahint
-Ahir
-ahluwalia
-ahmadi
-Ahmadiya
-Ahnfeltia
-aho
-Ahom
-ahong
-ahorse
-ahorseback
-Ahousaht
-ahoy
-Ahrendahronon
-Ahriman
-Ahrimanian
-ahsan
-Aht
-ahu
-ahuatle
-ahuehuete
-ahull
-ahum
-ahungered
-ahungry
-ahunt
-ahura
-ahush
-ahwal
-ahypnia
-ai
-Aias
-Aiawong
-aichmophobia
-aid
-aidable
-aidance
-aidant
-aide
-Aidenn
-aider
-Aides
-aidful
-aidless
-aiel
-aigialosaur
-Aigialosauridae
-Aigialosaurus
-aiglet
-aigremore
-aigrette
-aiguille
-aiguillesque
-aiguillette
-aiguilletted
-aikinite
-ail
-ailantery
-ailanthic
-Ailanthus
-ailantine
-ailanto
-aile
-Aileen
-aileron
-ailette
-Ailie
-ailing
-aillt
-ailment
-ailsyte
-Ailuridae
-ailuro
-ailuroid
-Ailuroidea
-Ailuropoda
-Ailuropus
-Ailurus
-ailweed
-aim
-Aimak
-aimara
-Aimee
-aimer
-aimful
-aimfully
-aiming
-aimless
-aimlessly
-aimlessness
-Aimore
-aimworthiness
-ainaleh
-ainhum
-ainoi
-ainsell
-aint
-Ainu
-aion
-aionial
-air
-Aira
-airable
-airampo
-airan
-airbound
-airbrained
-airbrush
-aircraft
-aircraftman
-aircraftsman
-aircraftswoman
-aircraftwoman
-aircrew
-aircrewman
-airdock
-airdrome
-airdrop
-aire
-Airedale
-airedale
-airer
-airfield
-airfoil
-airframe
-airfreight
-airfreighter
-airgraphics
-airhead
-airiferous
-airified
-airily
-airiness
-airing
-airish
-airless
-airlift
-airlike
-airliner
-airmail
-airman
-airmanship
-airmark
-airmarker
-airmonger
-airohydrogen
-airometer
-airpark
-airphobia
-airplane
-airplanist
-airport
-airproof
-airscape
-airscrew
-airship
-airsick
-airsickness
-airstrip
-airt
-airtight
-airtightly
-airtightness
-airward
-airwards
-airway
-airwayman
-airwoman
-airworthiness
-airworthy
-airy
-aischrolatreia
-aiseweed
-aisle
-aisled
-aisleless
-aisling
-Aissaoua
-Aissor
-aisteoir
-Aistopoda
-Aistopodes
-ait
-aitch
-aitchbone
-aitchless
-aitchpiece
-aitesis
-aithochroi
-aition
-aitiotropic
-Aitkenite
-Aitutakian
-aiwan
-Aix
-aizle
-Aizoaceae
-aizoaceous
-Aizoon
-Ajaja
-ajaja
-ajangle
-ajar
-ajari
-Ajatasatru
-ajava
-ajhar
-ajivika
-ajog
-ajoint
-ajowan
-Ajuga
-ajutment
-ak
-Aka
-aka
-Akal
-akala
-Akali
-akalimba
-akamatsu
-Akamnik
-Akan
-Akanekunik
-Akania
-Akaniaceae
-akaroa
-akasa
-Akawai
-akazga
-akazgine
-akcheh
-ake
-akeake
-akebi
-Akebia
-akee
-akeki
-akeley
-akenobeite
-akepiro
-akerite
-akey
-Akha
-Akhissar
-Akhlame
-Akhmimic
-akhoond
-akhrot
-akhyana
-akia
-Akim
-akimbo
-akin
-akindle
-akinesia
-akinesic
-akinesis
-akinete
-akinetic
-Akiskemikinik
-Akiyenik
-Akka
-Akkad
-Akkadian
-Akkadist
-akmudar
-akmuddar
-aknee
-ako
-akoasm
-akoasma
-akoluthia
-akonge
-Akontae
-Akoulalion
-akov
-akpek
-Akra
-akra
-Akrabattine
-akroasis
-akrochordite
-akroterion
-Aktistetae
-Aktistete
-Aktivismus
-Aktivist
-aku
-akuammine
-akule
-akund
-Akwapim
-Al
-al
-ala
-Alabama
-Alabaman
-Alabamian
-alabamide
-alabamine
-alabandite
-alabarch
-alabaster
-alabastos
-alabastrian
-alabastrine
-alabastrites
-alabastron
-alabastrum
-alacha
-alack
-alackaday
-alacreatine
-alacreatinine
-alacrify
-alacritous
-alacrity
-Alactaga
-alada
-Aladdin
-Aladdinize
-Aladfar
-Aladinist
-alaihi
-alaite
-Alaki
-Alala
-alala
-alalite
-alalonga
-alalunga
-alalus
-Alamanni
-Alamannian
-Alamannic
-alameda
-alamo
-alamodality
-alamonti
-alamosite
-alamoth
-Alan
-alan
-aland
-Alangiaceae
-alangin
-alangine
-Alangium
-alani
-alanine
-alannah
-Alans
-alantic
-alantin
-alantol
-alantolactone
-alantolic
-alanyl
-alar
-Alarbus
-alares
-Alaria
-Alaric
-alarm
-alarmable
-alarmed
-alarmedly
-alarming
-alarmingly
-alarmism
-alarmist
-Alarodian
-alarum
-alary
-alas
-Alascan
-Alaska
-alaskaite
-Alaskan
-alaskite
-Alaster
-alastrim
-alate
-alated
-alatern
-alaternus
-alation
-Alauda
-Alaudidae
-alaudine
-Alaunian
-Alawi
-Alb
-alb
-alba
-albacore
-albahaca
-Albainn
-Alban
-alban
-Albanenses
-Albanensian
-Albania
-Albanian
-albanite
-Albany
-albarco
-albardine
-albarello
-albarium
-albaspidin
-albata
-Albatros
-albatross
-albe
-albedo
-albedograph
-albee
-albeit
-Alberene
-Albert
-Alberta
-albertin
-Albertina
-Albertine
-Albertinian
-Albertist
-albertite
-albertustaler
-albertype
-albescence
-albescent
-albespine
-albetad
-Albi
-Albian
-albicans
-albicant
-albication
-albiculi
-albification
-albificative
-albiflorous
-albify
-Albigenses
-Albigensian
-Albigensianism
-Albin
-albinal
-albiness
-albinic
-albinism
-albinistic
-albino
-albinoism
-albinotic
-albinuria
-Albion
-Albireo
-albite
-albitic
-albitite
-albitization
-albitophyre
-Albizzia
-albocarbon
-albocinereous
-Albococcus
-albocracy
-Alboin
-albolite
-albolith
-albopannin
-albopruinose
-alboranite
-Albrecht
-Albright
-albronze
-Albruna
-Albuca
-Albuginaceae
-albuginea
-albugineous
-albuginitis
-albugo
-album
-albumean
-albumen
-albumenization
-albumenize
-albumenizer
-albumimeter
-albumin
-albuminate
-albuminaturia
-albuminiferous
-albuminiform
-albuminimeter
-albuminimetry
-albuminiparous
-albuminization
-albuminize
-albuminocholia
-albuminofibrin
-albuminogenous
-albuminoid
-albuminoidal
-albuminolysis
-albuminometer
-albuminometry
-albuminone
-albuminorrhea
-albuminoscope
-albuminose
-albuminosis
-albuminous
-albuminousness
-albuminuria
-albuminuric
-albumoid
-albumoscope
-albumose
-albumosuria
-alburn
-alburnous
-alburnum
-albus
-albutannin
-Albyn
-Alca
-Alcaaba
-Alcae
-Alcaic
-alcaide
-alcalde
-alcaldeship
-alcaldia
-Alcaligenes
-alcalizate
-Alcalzar
-alcamine
-alcanna
-Alcantara
-Alcantarines
-alcarraza
-alcatras
-alcazar
-Alcedines
-Alcedinidae
-Alcedininae
-Alcedo
-alcelaphine
-Alcelaphus
-Alces
-alchemic
-alchemical
-alchemically
-Alchemilla
-alchemist
-alchemistic
-alchemistical
-alchemistry
-alchemize
-alchemy
-alchera
-alcheringa
-alchimy
-alchitran
-alchochoden
-Alchornea
-alchymy
-Alcibiadean
-Alcicornium
-Alcidae
-alcidine
-alcine
-Alcippe
-alclad
-alco
-alcoate
-alcogel
-alcogene
-alcohate
-alcohol
-alcoholate
-alcoholature
-alcoholdom
-alcoholemia
-alcoholic
-alcoholically
-alcoholicity
-alcoholimeter
-alcoholism
-alcoholist
-alcoholizable
-alcoholization
-alcoholize
-alcoholmeter
-alcoholmetric
-alcoholomania
-alcoholometer
-alcoholometric
-alcoholometrical
-alcoholometry
-alcoholophilia
-alcoholuria
-alcoholysis
-alcoholytic
-Alcor
-Alcoran
-Alcoranic
-Alcoranist
-alcornoco
-alcornoque
-alcosol
-Alcotate
-alcove
-alcovinometer
-Alcuinian
-alcyon
-Alcyonacea
-alcyonacean
-Alcyonaria
-alcyonarian
-Alcyone
-Alcyones
-Alcyoniaceae
-alcyonic
-alcyoniform
-Alcyonium
-alcyonoid
-aldamine
-aldane
-aldazin
-aldazine
-aldeament
-Aldebaran
-aldebaranium
-aldehol
-aldehydase
-aldehyde
-aldehydic
-aldehydine
-aldehydrol
-alder
-Alderamin
-alderman
-aldermanate
-aldermancy
-aldermaness
-aldermanic
-aldermanical
-aldermanity
-aldermanlike
-aldermanly
-aldermanry
-aldermanship
-aldern
-Alderney
-alderwoman
-Aldhafara
-Aldhafera
-aldim
-aldime
-aldimine
-Aldine
-aldine
-aldoheptose
-aldohexose
-aldoketene
-aldol
-aldolization
-aldolize
-aldononose
-aldopentose
-aldose
-aldoside
-aldoxime
-Aldrovanda
-Aldus
-ale
-Alea
-aleak
-aleatory
-alebench
-aleberry
-Alebion
-alec
-alecithal
-alecize
-Aleck
-aleconner
-alecost
-Alectoria
-alectoria
-Alectorides
-alectoridine
-alectorioid
-Alectoris
-alectoromachy
-alectoromancy
-Alectoromorphae
-alectoromorphous
-Alectoropodes
-alectoropodous
-Alectrion
-Alectrionidae
-alectryomachy
-alectryomancy
-Alectryon
-alecup
-alee
-alef
-alefnull
-aleft
-alefzero
-alegar
-alehoof
-alehouse
-alem
-alemana
-Alemanni
-Alemannian
-Alemannic
-Alemannish
-alembic
-alembicate
-alembroth
-Alemite
-alemite
-alemmal
-alemonger
-alen
-Alencon
-Aleochara
-aleph
-alephs
-alephzero
-alepidote
-alepole
-alepot
-Aleppine
-Aleppo
-alerce
-alerse
-alert
-alertly
-alertness
-alesan
-alestake
-aletap
-aletaster
-Alethea
-alethiology
-alethopteis
-alethopteroid
-alethoscope
-aletocyte
-Aletris
-alette
-aleukemic
-Aleurites
-aleuritic
-Aleurobius
-Aleurodes
-Aleurodidae
-aleuromancy
-aleurometer
-aleuronat
-aleurone
-aleuronic
-aleuroscope
-Aleut
-Aleutian
-Aleutic
-aleutite
-alevin
-alewife
-Alexander
-alexanders
-Alexandra
-Alexandreid
-Alexandrian
-Alexandrianism
-Alexandrina
-Alexandrine
-alexandrite
-Alexas
-Alexia
-alexia
-Alexian
-alexic
-alexin
-alexinic
-alexipharmacon
-alexipharmacum
-alexipharmic
-alexipharmical
-alexipyretic
-Alexis
-alexiteric
-alexiterical
-Alexius
-aleyard
-Aleyrodes
-aleyrodid
-Aleyrodidae
-Alf
-alf
-alfa
-alfaje
-alfalfa
-alfaqui
-alfaquin
-alfenide
-alfet
-alfilaria
-alfileria
-alfilerilla
-alfilerillo
-alfiona
-Alfirk
-alfonsin
-alfonso
-alforja
-Alfred
-Alfreda
-alfresco
-alfridaric
-alfridary
-Alfur
-Alfurese
-Alfuro
-alga
-algae
-algaecide
-algaeological
-algaeologist
-algaeology
-algaesthesia
-algaesthesis
-algal
-algalia
-Algaroth
-algarroba
-algarrobilla
-algarrobin
-Algarsife
-Algarsyf
-algate
-Algebar
-algebra
-algebraic
-algebraical
-algebraically
-algebraist
-algebraization
-algebraize
-Algedi
-algedo
-algedonic
-algedonics
-algefacient
-Algenib
-Algerian
-Algerine
-algerine
-Algernon
-algesia
-algesic
-algesis
-algesthesis
-algetic
-Algic
-algic
-algid
-algidity
-algidness
-Algieba
-algific
-algin
-alginate
-algine
-alginic
-alginuresis
-algiomuscular
-algist
-algivorous
-algocyan
-algodoncillo
-algodonite
-algoesthesiometer
-algogenic
-algoid
-Algol
-algolagnia
-algolagnic
-algolagnist
-algolagny
-algological
-algologist
-algology
-Algoman
-algometer
-algometric
-algometrical
-algometrically
-algometry
-Algomian
-Algomic
-Algonkian
-Algonquian
-Algonquin
-algophilia
-algophilist
-algophobia
-algor
-Algorab
-Algores
-algorism
-algorismic
-algorist
-algoristic
-algorithm
-algorithmic
-algosis
-algous
-algovite
-algraphic
-algraphy
-alguazil
-algum
-Algy
-Alhagi
-Alhambra
-Alhambraic
-Alhambresque
-Alhena
-alhenna
-alias
-Alibamu
-alibangbang
-alibi
-alibility
-alible
-Alicant
-Alice
-alichel
-Alichino
-Alicia
-Alick
-alicoche
-alictisal
-alicyclic
-Alida
-alidade
-Alids
-alien
-alienability
-alienable
-alienage
-alienate
-alienation
-alienator
-aliency
-alienee
-aliener
-alienicola
-alienigenate
-alienism
-alienist
-alienize
-alienor
-alienship
-aliethmoid
-aliethmoidal
-alif
-aliferous
-aliform
-aligerous
-alight
-align
-aligner
-alignment
-aligreek
-aliipoe
-alike
-alikeness
-alikewise
-Alikuluf
-Alikulufan
-alilonghi
-alima
-aliment
-alimental
-alimentally
-alimentariness
-alimentary
-alimentation
-alimentative
-alimentatively
-alimentativeness
-alimenter
-alimentic
-alimentive
-alimentiveness
-alimentotherapy
-alimentum
-alimonied
-alimony
-alin
-alinasal
-Aline
-alineation
-alintatao
-aliofar
-Alioth
-alipata
-aliped
-aliphatic
-alipterion
-aliptes
-aliptic
-aliquant
-aliquot
-aliseptal
-alish
-alisier
-Alisma
-Alismaceae
-alismaceous
-alismad
-alismal
-Alismales
-Alismataceae
-alismoid
-aliso
-Alison
-alison
-alisonite
-alisp
-alisphenoid
-alisphenoidal
-alist
-Alister
-alit
-alite
-alitrunk
-aliturgic
-aliturgical
-aliunde
-alive
-aliveness
-alivincular
-Alix
-aliyah
-alizarate
-alizari
-alizarin
-aljoba
-alk
-alkahest
-alkahestic
-alkahestica
-alkahestical
-Alkaid
-alkalamide
-alkalemia
-alkalescence
-alkalescency
-alkalescent
-alkali
-alkalic
-alkaliferous
-alkalifiable
-alkalify
-alkaligen
-alkaligenous
-alkalimeter
-alkalimetric
-alkalimetrical
-alkalimetrically
-alkalimetry
-alkaline
-alkalinity
-alkalinization
-alkalinize
-alkalinuria
-alkalizable
-alkalizate
-alkalization
-alkalize
-alkalizer
-alkaloid
-alkaloidal
-alkalometry
-alkalosis
-alkalous
-Alkalurops
-alkamin
-alkamine
-alkane
-alkanet
-Alkanna
-alkannin
-Alkaphrah
-alkapton
-alkaptonuria
-alkaptonuric
-alkargen
-alkarsin
-alkekengi
-alkene
-alkenna
-alkenyl
-alkermes
-Alkes
-alkide
-alkine
-alkool
-Alkoran
-Alkoranic
-alkoxide
-alkoxy
-alkoxyl
-alky
-alkyd
-alkyl
-alkylamine
-alkylate
-alkylation
-alkylene
-alkylic
-alkylidene
-alkylize
-alkylogen
-alkyloxy
-alkyne
-allabuta
-allactite
-allaeanthus
-allagite
-allagophyllous
-allagostemonous
-Allah
-allalinite
-Allamanda
-allamotti
-allan
-allanite
-allanitic
-allantiasis
-allantochorion
-allantoic
-allantoid
-allantoidal
-Allantoidea
-allantoidean
-allantoidian
-allantoin
-allantoinase
-allantoinuria
-allantois
-allantoxaidin
-allanturic
-Allasch
-allassotonic
-allative
-allatrate
-allay
-allayer
-allayment
-allbone
-Alle
-allecret
-allectory
-allegate
-allegation
-allegator
-allege
-allegeable
-allegedly
-allegement
-alleger
-Alleghenian
-Allegheny
-allegiance
-allegiancy
-allegiant
-allegoric
-allegorical
-allegorically
-allegoricalness
-allegorism
-allegorist
-allegorister
-allegoristic
-allegorization
-allegorize
-allegorizer
-allegory
-allegretto
-allegro
-allele
-allelic
-allelism
-allelocatalytic
-allelomorph
-allelomorphic
-allelomorphism
-allelotropic
-allelotropism
-allelotropy
-alleluia
-alleluiatic
-allemand
-allemande
-allemontite
-allenarly
-allene
-Allentiac
-Allentiacan
-aller
-allergen
-allergenic
-allergia
-allergic
-allergin
-allergist
-allergy
-allerion
-allesthesia
-alleviate
-alleviatingly
-alleviation
-alleviative
-alleviator
-alleviatory
-alley
-alleyed
-alleyite
-alleyway
-allgood
-Allhallow
-Allhallowtide
-allheal
-alliable
-alliably
-Alliaceae
-alliaceous
-alliance
-alliancer
-Alliaria
-allicampane
-allice
-allicholly
-alliciency
-allicient
-Allie
-allied
-Allies
-allies
-alligate
-alligator
-alligatored
-allineate
-allineation
-Allionia
-Allioniaceae
-allision
-alliteral
-alliterate
-alliteration
-alliterational
-alliterationist
-alliterative
-alliteratively
-alliterativeness
-alliterator
-Allium
-allivalite
-allmouth
-allness
-Allobroges
-allocable
-allocaffeine
-allocatable
-allocate
-allocatee
-allocation
-allocator
-allochetia
-allochetite
-allochezia
-allochiral
-allochirally
-allochiria
-allochlorophyll
-allochroic
-allochroite
-allochromatic
-allochroous
-allochthonous
-allocinnamic
-alloclase
-alloclasite
-allocochick
-allocrotonic
-allocryptic
-allocute
-allocution
-allocutive
-allocyanine
-allodelphite
-allodesmism
-alloeosis
-alloeostropha
-alloeotic
-alloerotic
-alloerotism
-allogamous
-allogamy
-allogene
-allogeneity
-allogeneous
-allogenic
-allogenically
-allograph
-alloiogenesis
-alloisomer
-alloisomeric
-alloisomerism
-allokinesis
-allokinetic
-allokurtic
-allomerism
-allomerous
-allometric
-allometry
-allomorph
-allomorphic
-allomorphism
-allomorphite
-allomucic
-allonomous
-allonym
-allonymous
-allopalladium
-allopath
-allopathetic
-allopathetically
-allopathic
-allopathically
-allopathist
-allopathy
-allopatric
-allopatrically
-allopatry
-allopelagic
-allophanamide
-allophanates
-allophane
-allophanic
-allophone
-allophyle
-allophylian
-allophylic
-Allophylus
-allophytoid
-alloplasm
-alloplasmatic
-alloplasmic
-alloplast
-alloplastic
-alloplasty
-alloploidy
-allopolyploid
-allopsychic
-alloquial
-alloquialism
-alloquy
-allorhythmia
-allorrhyhmia
-allorrhythmic
-allosaur
-Allosaurus
-allose
-allosematic
-allosome
-allosyndesis
-allosyndetic
-allot
-allotee
-allotelluric
-allotheism
-Allotheria
-allothigene
-allothigenetic
-allothigenetically
-allothigenic
-allothigenous
-allothimorph
-allothimorphic
-allothogenic
-allothogenous
-allotment
-allotriodontia
-Allotriognathi
-allotriomorphic
-allotriophagia
-allotriophagy
-allotriuria
-allotrope
-allotrophic
-allotropic
-allotropical
-allotropically
-allotropicity
-allotropism
-allotropize
-allotropous
-allotropy
-allotrylic
-allottable
-allottee
-allotter
-allotype
-allotypical
-allover
-allow
-allowable
-allowableness
-allowably
-allowance
-allowedly
-allower
-alloxan
-alloxanate
-alloxanic
-alloxantin
-alloxuraemia
-alloxuremia
-alloxuric
-alloxyproteic
-alloy
-alloyage
-allozooid
-allseed
-allspice
-allthing
-allthorn
-alltud
-allude
-allure
-allurement
-allurer
-alluring
-alluringly
-alluringness
-allusion
-allusive
-allusively
-allusiveness
-alluvia
-alluvial
-alluviate
-alluviation
-alluvion
-alluvious
-alluvium
-allwhere
-allwhither
-allwork
-Allworthy
-Ally
-ally
-allyl
-allylamine
-allylate
-allylation
-allylene
-allylic
-allylthiourea
-Alma
-alma
-Almach
-almaciga
-almacigo
-almadia
-almadie
-almagest
-almagra
-Almain
-Alman
-almanac
-almandine
-almandite
-alme
-almeidina
-almemar
-Almerian
-almeriite
-Almida
-almightily
-almightiness
-almighty
-almique
-Almira
-almirah
-almochoden
-Almohad
-Almohade
-Almohades
-almoign
-Almon
-almon
-almond
-almondy
-almoner
-almonership
-almonry
-Almoravid
-Almoravide
-Almoravides
-almost
-almous
-alms
-almsdeed
-almsfolk
-almsful
-almsgiver
-almsgiving
-almshouse
-almsman
-almswoman
-almucantar
-almuce
-almud
-almude
-almug
-Almuredin
-almuten
-aln
-alnage
-alnager
-alnagership
-Alnaschar
-Alnascharism
-alnein
-alnico
-Alnilam
-alniresinol
-Alnitak
-Alnitham
-alniviridol
-alnoite
-alnuin
-Alnus
-alo
-Aloadae
-Alocasia
-alochia
-alod
-alodial
-alodialism
-alodialist
-alodiality
-alodially
-alodian
-alodiary
-alodification
-alodium
-alody
-aloe
-aloed
-aloelike
-aloemodin
-aloeroot
-aloesol
-aloeswood
-aloetic
-aloetical
-aloewood
-aloft
-alogia
-Alogian
-alogical
-alogically
-alogism
-alogy
-aloid
-aloin
-Alois
-aloisiite
-aloma
-alomancy
-alone
-aloneness
-along
-alongshore
-alongshoreman
-alongside
-alongst
-Alonso
-Alonsoa
-Alonzo
-aloof
-aloofly
-aloofness
-aloose
-alop
-alopecia
-Alopecias
-alopecist
-alopecoid
-Alopecurus
-alopeke
-Alopias
-Alopiidae
-Alosa
-alose
-Alouatta
-alouatte
-aloud
-alow
-alowe
-Aloxite
-Aloysia
-Aloysius
-alp
-alpaca
-alpasotes
-Alpax
-alpeen
-Alpen
-alpenglow
-alpenhorn
-alpenstock
-alpenstocker
-alpestral
-alpestrian
-alpestrine
-alpha
-alphabet
-alphabetarian
-alphabetic
-alphabetical
-alphabetically
-alphabetics
-alphabetiform
-alphabetism
-alphabetist
-alphabetization
-alphabetize
-alphabetizer
-Alphard
-alphatoluic
-Alphean
-Alphecca
-alphenic
-Alpheratz
-alphitomancy
-alphitomorphous
-alphol
-Alphonist
-Alphonse
-Alphonsine
-Alphonsism
-Alphonso
-alphorn
-alphos
-alphosis
-alphyl
-Alpian
-Alpid
-alpieu
-alpigene
-Alpine
-alpine
-alpinely
-alpinery
-alpinesque
-Alpinia
-Alpiniaceae
-Alpinism
-Alpinist
-alpist
-Alpujarra
-alqueire
-alquier
-alquifou
-alraun
-alreadiness
-already
-alright
-alrighty
-alroot
-alruna
-Alsatia
-Alsatian
-alsbachite
-Alshain
-Alsinaceae
-alsinaceous
-Alsine
-also
-alsoon
-Alsophila
-Alstonia
-alstonidine
-alstonine
-alstonite
-Alstroemeria
-alsweill
-alt
-Altaian
-Altaic
-Altaid
-Altair
-altaite
-Altamira
-altar
-altarage
-altared
-altarist
-altarlet
-altarpiece
-altarwise
-altazimuth
-alter
-alterability
-alterable
-alterableness
-alterably
-alterant
-alterate
-alteration
-alterative
-altercate
-altercation
-altercative
-alteregoism
-alteregoistic
-alterer
-alterity
-altern
-alternacy
-alternance
-alternant
-Alternanthera
-Alternaria
-alternariose
-alternate
-alternately
-alternateness
-alternating
-alternatingly
-alternation
-alternationist
-alternative
-alternatively
-alternativeness
-alternativity
-alternator
-alterne
-alternifoliate
-alternipetalous
-alternipinnate
-alternisepalous
-alternize
-alterocentric
-Althaea
-althaein
-Althea
-althea
-althein
-altheine
-althionic
-altho
-althorn
-although
-Altica
-Alticamelus
-altigraph
-altilik
-altiloquence
-altiloquent
-altimeter
-altimetrical
-altimetrically
-altimetry
-altin
-altincar
-Altingiaceae
-altingiaceous
-altininck
-altiplano
-altiscope
-altisonant
-altisonous
-altissimo
-altitude
-altitudinal
-altitudinarian
-alto
-altogether
-altogetherness
-altometer
-altoun
-altrices
-altricial
-altropathy
-altrose
-altruism
-altruist
-altruistic
-altruistically
-altschin
-altun
-Aluco
-Aluconidae
-Aluconinae
-aludel
-Aludra
-alula
-alular
-alulet
-Alulim
-alum
-alumbloom
-Alumel
-alumic
-alumiferous
-alumina
-aluminaphone
-aluminate
-alumine
-aluminic
-aluminide
-aluminiferous
-aluminiform
-aluminish
-aluminite
-aluminium
-aluminize
-aluminoferric
-aluminographic
-aluminography
-aluminose
-aluminosilicate
-aluminosis
-aluminosity
-aluminothermic
-aluminothermics
-aluminothermy
-aluminotype
-aluminous
-aluminum
-aluminyl
-alumish
-alumite
-alumium
-alumna
-alumnae
-alumnal
-alumni
-alumniate
-Alumnol
-alumnus
-alumohydrocalcite
-alumroot
-Alundum
-aluniferous
-alunite
-alunogen
-alupag
-Alur
-alure
-alurgite
-alushtite
-aluta
-alutaceous
-Alvah
-Alvan
-alvar
-alvearium
-alveary
-alveloz
-alveola
-alveolar
-alveolariform
-alveolary
-alveolate
-alveolated
-alveolation
-alveole
-alveolectomy
-alveoli
-alveoliform
-alveolite
-Alveolites
-alveolitis
-alveoloclasia
-alveolocondylean
-alveolodental
-alveololabial
-alveololingual
-alveolonasal
-alveolosubnasal
-alveolotomy
-alveolus
-alveus
-alviducous
-Alvin
-Alvina
-alvine
-Alvissmal
-alvite
-alvus
-alway
-always
-aly
-Alya
-alycompaine
-alymphia
-alymphopotent
-alypin
-alysson
-Alyssum
-alytarch
-Alytes
-am
-ama
-amaas
-Amabel
-amability
-amacratic
-amacrinal
-amacrine
-amadavat
-amadelphous
-Amadi
-Amadis
-amadou
-Amaethon
-Amafingo
-amaga
-amah
-Amahuaca
-amain
-amaister
-amakebe
-Amakosa
-amala
-amalaita
-amalaka
-Amalfian
-Amalfitan
-amalgam
-amalgamable
-amalgamate
-amalgamation
-amalgamationist
-amalgamative
-amalgamatize
-amalgamator
-amalgamist
-amalgamization
-amalgamize
-Amalings
-Amalrician
-amaltas
-amamau
-Amampondo
-Amanda
-amandin
-Amandus
-amang
-amani
-amania
-Amanist
-Amanita
-amanitin
-amanitine
-Amanitopsis
-amanori
-amanous
-amantillo
-amanuenses
-amanuensis
-amapa
-Amapondo
-amar
-Amara
-Amarantaceae
-amarantaceous
-amaranth
-Amaranthaceae
-amaranthaceous
-amaranthine
-amaranthoid
-Amaranthus
-amarantite
-Amarantus
-amarelle
-amarevole
-amargoso
-amarillo
-amarin
-amarine
-amaritude
-amarity
-amaroid
-amaroidal
-amarthritis
-amaryllid
-Amaryllidaceae
-amaryllidaceous
-amaryllideous
-Amaryllis
-amasesis
-amass
-amassable
-amasser
-amassment
-Amasta
-amasthenic
-amastia
-amasty
-Amatembu
-amaterialistic
-amateur
-amateurish
-amateurishly
-amateurishness
-amateurism
-amateurship
-Amati
-amative
-amatively
-amativeness
-amatol
-amatorial
-amatorially
-amatorian
-amatorious
-amatory
-amatrice
-amatungula
-amaurosis
-amaurotic
-amaze
-amazed
-amazedly
-amazedness
-amazeful
-amazement
-amazia
-Amazilia
-amazing
-amazingly
-Amazon
-Amazona
-Amazonian
-Amazonism
-amazonite
-Amazulu
-amba
-ambage
-ambagiosity
-ambagious
-ambagiously
-ambagiousness
-ambagitory
-ambalam
-amban
-ambar
-ambaree
-ambarella
-ambary
-ambash
-ambassade
-Ambassadeur
-ambassador
-ambassadorial
-ambassadorially
-ambassadorship
-ambassadress
-ambassage
-ambassy
-ambatch
-ambatoarinite
-ambay
-ambeer
-amber
-amberfish
-ambergris
-amberiferous
-amberite
-amberoid
-amberous
-ambery
-ambicolorate
-ambicoloration
-ambidexter
-ambidexterity
-ambidextral
-ambidextrous
-ambidextrously
-ambidextrousness
-ambience
-ambiency
-ambiens
-ambient
-ambier
-ambigenous
-ambiguity
-ambiguous
-ambiguously
-ambiguousness
-ambilateral
-ambilateralaterally
-ambilaterality
-ambilevous
-ambilian
-ambilogy
-ambiopia
-ambiparous
-ambisinister
-ambisinistrous
-ambisporangiate
-ambisyllabic
-ambit
-ambital
-ambitendency
-ambition
-ambitionist
-ambitionless
-ambitionlessly
-ambitious
-ambitiously
-ambitiousness
-ambitty
-ambitus
-ambivalence
-ambivalency
-ambivalent
-ambivert
-amble
-ambler
-ambling
-amblingly
-amblotic
-amblyacousia
-amblyaphia
-Amblycephalidae
-Amblycephalus
-amblychromatic
-Amblydactyla
-amblygeusia
-amblygon
-amblygonal
-amblygonite
-amblyocarpous
-Amblyomma
-amblyope
-amblyopia
-amblyopic
-Amblyopsidae
-Amblyopsis
-amblyoscope
-amblypod
-Amblypoda
-amblypodous
-Amblyrhynchus
-amblystegite
-Amblystoma
-ambo
-amboceptoid
-amboceptor
-Ambocoelia
-Amboina
-Amboinese
-ambomalleal
-ambon
-ambonite
-Ambonnay
-ambos
-ambosexous
-ambosexual
-ambrain
-ambrein
-ambrette
-Ambrica
-ambrite
-ambroid
-ambrology
-Ambrose
-ambrose
-ambrosia
-ambrosiac
-Ambrosiaceae
-ambrosiaceous
-ambrosial
-ambrosially
-Ambrosian
-ambrosian
-ambrosiate
-ambrosin
-ambrosine
-Ambrosio
-ambrosterol
-ambrotype
-ambry
-ambsace
-ambulacral
-ambulacriform
-ambulacrum
-ambulance
-ambulancer
-ambulant
-ambulate
-ambulatio
-ambulation
-ambulative
-ambulator
-Ambulatoria
-ambulatorial
-ambulatorium
-ambulatory
-ambuling
-ambulomancy
-amburbial
-ambury
-ambuscade
-ambuscader
-ambush
-ambusher
-ambushment
-Ambystoma
-Ambystomidae
-amchoor
-ame
-amebiform
-ameed
-ameen
-Ameiuridae
-Ameiurus
-Ameiva
-Amelanchier
-amelcorn
-Amelia
-amelia
-amelification
-ameliorable
-ameliorableness
-ameliorant
-ameliorate
-amelioration
-ameliorativ
-ameliorative
-ameliorator
-amellus
-ameloblast
-ameloblastic
-amelu
-amelus
-Amen
-amen
-amenability
-amenable
-amenableness
-amenably
-amend
-amendable
-amendableness
-amendatory
-amende
-amender
-amendment
-amends
-amene
-amenia
-Amenism
-Amenite
-amenity
-amenorrhea
-amenorrheal
-amenorrheic
-amenorrhoea
-ament
-amentaceous
-amental
-amentia
-Amentiferae
-amentiferous
-amentiform
-amentulum
-amentum
-amerce
-amerceable
-amercement
-amercer
-amerciament
-America
-American
-Americana
-Americanese
-Americanism
-Americanist
-Americanistic
-Americanitis
-Americanization
-Americanize
-Americanizer
-Americanly
-Americanoid
-Americaward
-Americawards
-americium
-Americomania
-Americophobe
-Amerimnon
-Amerind
-Amerindian
-Amerindic
-amerism
-ameristic
-amesite
-Ametabola
-ametabole
-ametabolia
-ametabolian
-ametabolic
-ametabolism
-ametabolous
-ametaboly
-ametallous
-amethodical
-amethodically
-amethyst
-amethystine
-ametoecious
-ametria
-ametrometer
-ametrope
-ametropia
-ametropic
-ametrous
-Amex
-amgarn
-amhar
-amherstite
-amhran
-ami
-Amia
-amiability
-amiable
-amiableness
-amiably
-amianth
-amianthiform
-amianthine
-Amianthium
-amianthoid
-amianthoidal
-amianthus
-amic
-amicability
-amicable
-amicableness
-amicably
-amical
-amice
-amiced
-amicicide
-amicrobic
-amicron
-amicronucleate
-amid
-amidase
-amidate
-amidation
-amide
-amidic
-amidid
-amidide
-amidin
-amidine
-Amidism
-Amidist
-amido
-amidoacetal
-amidoacetic
-amidoacetophenone
-amidoaldehyde
-amidoazo
-amidoazobenzene
-amidoazobenzol
-amidocaffeine
-amidocapric
-amidofluorid
-amidofluoride
-amidogen
-amidoguaiacol
-amidohexose
-amidoketone
-amidol
-amidomyelin
-amidon
-amidophenol
-amidophosphoric
-amidoplast
-amidoplastid
-amidopyrine
-amidosuccinamic
-amidosulphonal
-amidothiazole
-amidoxime
-amidoxy
-amidoxyl
-amidrazone
-amidship
-amidships
-amidst
-amidstream
-amidulin
-Amiidae
-amil
-Amiles
-Amiloun
-amimia
-amimide
-amin
-aminate
-amination
-amine
-amini
-aminic
-aminity
-aminization
-aminize
-amino
-aminoacetal
-aminoacetanilide
-aminoacetic
-aminoacetone
-aminoacetophenetidine
-aminoacetophenone
-aminoacidemia
-aminoaciduria
-aminoanthraquinone
-aminoazobenzene
-aminobarbituric
-aminobenzaldehyde
-aminobenzamide
-aminobenzene
-aminobenzoic
-aminocaproic
-aminodiphenyl
-aminoethionic
-aminoformic
-aminogen
-aminoglutaric
-aminoguanidine
-aminoid
-aminoketone
-aminolipin
-aminolysis
-aminolytic
-aminomalonic
-aminomyelin
-aminophenol
-aminoplast
-aminoplastic
-aminopropionic
-aminopurine
-aminopyrine
-aminoquinoline
-aminosis
-aminosuccinamic
-aminosulphonic
-aminothiophen
-aminovaleric
-aminoxylol
-Aminta
-Amintor
-Amioidei
-amir
-Amiranha
-amiray
-amirship
-Amish
-Amishgo
-amiss
-amissibility
-amissible
-amissness
-Amita
-Amitabha
-amitosis
-amitotic
-amitotically
-amity
-amixia
-Amizilis
-amla
-amli
-amlikar
-amlong
-Amma
-amma
-amman
-Ammanite
-ammelide
-ammelin
-ammeline
-ammer
-ammeter
-Ammi
-Ammiaceae
-ammiaceous
-ammine
-amminochloride
-amminolysis
-amminolytic
-ammiolite
-ammo
-Ammobium
-ammochaeta
-ammochryse
-ammocoete
-ammocoetes
-ammocoetid
-Ammocoetidae
-ammocoetiform
-ammocoetoid
-Ammodytes
-Ammodytidae
-ammodytoid
-ammonal
-ammonate
-ammonation
-Ammonea
-ammonia
-ammoniacal
-ammoniacum
-ammoniate
-ammoniation
-ammonic
-ammonical
-ammoniemia
-ammonification
-ammonifier
-ammonify
-ammoniojarosite
-ammonion
-ammonionitrate
-Ammonite
-ammonite
-Ammonites
-Ammonitess
-ammonitic
-ammoniticone
-ammonitiferous
-Ammonitish
-ammonitoid
-Ammonitoidea
-ammonium
-ammoniuria
-ammonization
-ammono
-ammonobasic
-ammonocarbonic
-ammonocarbonous
-ammonoid
-Ammonoidea
-ammonoidean
-ammonolysis
-ammonolytic
-ammonolyze
-Ammophila
-ammophilous
-ammoresinol
-ammotherapy
-ammu
-ammunition
-amnemonic
-amnesia
-amnesic
-amnestic
-amnesty
-amniac
-amniatic
-amnic
-Amnigenia
-amnioallantoic
-amniochorial
-amnioclepsis
-amniomancy
-amnion
-Amnionata
-amnionate
-amnionic
-amniorrhea
-Amniota
-amniote
-amniotitis
-amniotome
-amober
-amobyr
-amoeba
-amoebae
-Amoebaea
-amoebaean
-amoebaeum
-amoebalike
-amoeban
-amoebian
-amoebiasis
-amoebic
-amoebicide
-amoebid
-Amoebida
-Amoebidae
-amoebiform
-Amoebobacter
-Amoebobacterieae
-amoebocyte
-Amoebogeniae
-amoeboid
-amoeboidism
-amoebous
-amoebula
-amok
-amoke
-amole
-amolilla
-amomal
-Amomales
-Amomis
-amomum
-among
-amongst
-amontillado
-amor
-amorado
-amoraic
-amoraim
-amoral
-amoralism
-amoralist
-amorality
-amoralize
-Amores
-amoret
-amoretto
-Amoreuxia
-amorism
-amorist
-amoristic
-Amorite
-Amoritic
-Amoritish
-amorosity
-amoroso
-amorous
-amorously
-amorousness
-Amorpha
-amorphia
-amorphic
-amorphinism
-amorphism
-Amorphophallus
-amorphophyte
-amorphotae
-amorphous
-amorphously
-amorphousness
-amorphus
-amorphy
-amort
-amortisseur
-amortizable
-amortization
-amortize
-amortizement
-Amorua
-Amos
-Amoskeag
-amotion
-amotus
-amount
-amour
-amourette
-amovability
-amovable
-amove
-Amoy
-Amoyan
-Amoyese
-ampalaya
-ampalea
-ampangabeite
-ampasimenite
-Ampelidaceae
-ampelidaceous
-Ampelidae
-ampelideous
-Ampelis
-ampelite
-ampelitic
-ampelographist
-ampelography
-ampelopsidin
-ampelopsin
-Ampelopsis
-Ampelosicyos
-ampelotherapy
-amper
-amperage
-ampere
-amperemeter
-Amperian
-amperometer
-ampersand
-ampery
-amphanthium
-ampheclexis
-ampherotokous
-ampherotoky
-amphetamine
-amphiarthrodial
-amphiarthrosis
-amphiaster
-amphibalus
-Amphibia
-amphibial
-amphibian
-amphibichnite
-amphibiety
-amphibiological
-amphibiology
-amphibion
-amphibiotic
-Amphibiotica
-amphibious
-amphibiously
-amphibiousness
-amphibium
-amphiblastic
-amphiblastula
-amphiblestritis
-Amphibola
-amphibole
-amphibolia
-amphibolic
-amphiboliferous
-amphiboline
-amphibolite
-amphibolitic
-amphibological
-amphibologically
-amphibologism
-amphibology
-amphibolous
-amphiboly
-amphibrach
-amphibrachic
-amphibryous
-Amphicarpa
-Amphicarpaea
-amphicarpic
-amphicarpium
-amphicarpogenous
-amphicarpous
-amphicentric
-amphichroic
-amphichrom
-amphichromatic
-amphichrome
-amphicoelian
-amphicoelous
-Amphicondyla
-amphicondylous
-amphicrania
-amphicreatinine
-amphicribral
-amphictyon
-amphictyonian
-amphictyonic
-amphictyony
-Amphicyon
-Amphicyonidae
-amphicyrtic
-amphicyrtous
-amphicytula
-amphid
-amphide
-amphidesmous
-amphidetic
-amphidiarthrosis
-amphidiploid
-amphidiploidy
-amphidisc
-Amphidiscophora
-amphidiscophoran
-amphierotic
-amphierotism
-Amphigaea
-amphigam
-Amphigamae
-amphigamous
-amphigastrium
-amphigastrula
-amphigean
-amphigen
-amphigene
-amphigenesis
-amphigenetic
-amphigenous
-amphigenously
-amphigonic
-amphigonium
-amphigonous
-amphigony
-amphigoric
-amphigory
-amphigouri
-amphikaryon
-amphilogism
-amphilogy
-amphimacer
-amphimictic
-amphimictical
-amphimictically
-amphimixis
-amphimorula
-Amphinesian
-Amphineura
-amphineurous
-amphinucleus
-Amphion
-Amphionic
-Amphioxi
-Amphioxidae
-Amphioxides
-Amphioxididae
-amphioxus
-amphipeptone
-amphiphloic
-amphiplatyan
-Amphipleura
-amphiploid
-amphiploidy
-amphipneust
-Amphipneusta
-amphipneustic
-Amphipnous
-amphipod
-Amphipoda
-amphipodal
-amphipodan
-amphipodiform
-amphipodous
-amphiprostylar
-amphiprostyle
-amphiprotic
-amphipyrenin
-Amphirhina
-amphirhinal
-amphirhine
-amphisarca
-amphisbaena
-amphisbaenian
-amphisbaenic
-Amphisbaenidae
-amphisbaenoid
-amphisbaenous
-amphiscians
-amphiscii
-Amphisile
-Amphisilidae
-amphispermous
-amphisporangiate
-amphispore
-Amphistoma
-amphistomatic
-amphistome
-amphistomoid
-amphistomous
-Amphistomum
-amphistylar
-amphistylic
-amphistyly
-amphitene
-amphitheater
-amphitheatered
-amphitheatral
-amphitheatric
-amphitheatrical
-amphitheatrically
-amphithecial
-amphithecium
-amphithect
-amphithyron
-amphitokal
-amphitokous
-amphitoky
-amphitriaene
-amphitrichous
-Amphitrite
-amphitropal
-amphitropous
-Amphitruo
-Amphitryon
-Amphiuma
-Amphiumidae
-amphivasal
-amphivorous
-Amphizoidae
-amphodarch
-amphodelite
-amphodiplopia
-amphogenous
-ampholyte
-amphopeptone
-amphophil
-amphophile
-amphophilic
-amphophilous
-amphora
-amphoral
-amphore
-amphorette
-amphoric
-amphoricity
-amphoriloquy
-amphorophony
-amphorous
-amphoteric
-Amphrysian
-ample
-amplectant
-ampleness
-amplexation
-amplexicaudate
-amplexicaul
-amplexicauline
-amplexifoliate
-amplexus
-ampliate
-ampliation
-ampliative
-amplicative
-amplidyne
-amplification
-amplificative
-amplificator
-amplificatory
-amplifier
-amplify
-amplitude
-amply
-ampollosity
-ampongue
-ampoule
-ampul
-ampulla
-ampullaceous
-ampullar
-Ampullaria
-Ampullariidae
-ampullary
-ampullate
-ampullated
-ampulliform
-ampullitis
-ampullula
-amputate
-amputation
-amputational
-amputative
-amputator
-amputee
-ampyx
-amra
-amreeta
-amrita
-Amritsar
-amsath
-amsel
-Amsonia
-Amsterdamer
-amt
-amtman
-Amuchco
-amuck
-Amueixa
-amuguis
-amula
-amulet
-amuletic
-amulla
-amunam
-amurca
-amurcosity
-amurcous
-Amurru
-amusable
-amuse
-amused
-amusedly
-amusee
-amusement
-amuser
-amusette
-Amusgo
-amusia
-amusing
-amusingly
-amusingness
-amusive
-amusively
-amusiveness
-amutter
-amuyon
-amuyong
-amuze
-amvis
-Amy
-amy
-Amyclaean
-Amyclas
-amyelencephalia
-amyelencephalic
-amyelencephalous
-amyelia
-amyelic
-amyelinic
-amyelonic
-amyelous
-amygdal
-amygdala
-Amygdalaceae
-amygdalaceous
-amygdalase
-amygdalate
-amygdalectomy
-amygdalic
-amygdaliferous
-amygdaliform
-amygdalin
-amygdaline
-amygdalinic
-amygdalitis
-amygdaloid
-amygdaloidal
-amygdalolith
-amygdaloncus
-amygdalopathy
-amygdalothripsis
-amygdalotome
-amygdalotomy
-Amygdalus
-amygdonitrile
-amygdophenin
-amygdule
-amyl
-amylaceous
-amylamine
-amylan
-amylase
-amylate
-amylemia
-amylene
-amylenol
-amylic
-amylidene
-amyliferous
-amylin
-amylo
-amylocellulose
-amyloclastic
-amylocoagulase
-amylodextrin
-amylodyspepsia
-amylogen
-amylogenesis
-amylogenic
-amylohydrolysis
-amylohydrolytic
-amyloid
-amyloidal
-amyloidosis
-amyloleucite
-amylolysis
-amylolytic
-amylom
-amylometer
-amylon
-amylopectin
-amylophagia
-amylophosphate
-amylophosphoric
-amyloplast
-amyloplastic
-amyloplastid
-amylopsin
-amylose
-amylosis
-amylosynthesis
-amylum
-amyluria
-Amynodon
-amynodont
-amyosthenia
-amyosthenic
-amyotaxia
-amyotonia
-amyotrophia
-amyotrophic
-amyotrophy
-amyous
-Amyraldism
-Amyraldist
-Amyridaceae
-amyrin
-Amyris
-amyrol
-amyroot
-Amytal
-amyxorrhea
-amyxorrhoea
-an
-Ana
-ana
-Anabaena
-Anabantidae
-Anabaptism
-Anabaptist
-Anabaptistic
-Anabaptistical
-Anabaptistically
-Anabaptistry
-anabaptize
-Anabas
-anabasine
-anabasis
-anabasse
-anabata
-anabathmos
-anabatic
-anaberoga
-anabibazon
-anabiosis
-anabiotic
-Anablepidae
-Anableps
-anabo
-anabohitsite
-anabolic
-anabolin
-anabolism
-anabolite
-anabolize
-anabong
-anabranch
-anabrosis
-anabrotic
-anacahuita
-anacahuite
-anacalypsis
-anacampsis
-anacamptic
-anacamptically
-anacamptics
-anacamptometer
-anacanth
-anacanthine
-Anacanthini
-anacanthous
-anacara
-anacard
-Anacardiaceae
-anacardiaceous
-anacardic
-Anacardium
-anacatadidymus
-anacatharsis
-anacathartic
-anacephalaeosis
-anacephalize
-Anaces
-Anacharis
-anachorism
-anachromasis
-anachronic
-anachronical
-anachronically
-anachronism
-anachronismatical
-anachronist
-anachronistic
-anachronistical
-anachronistically
-anachronize
-anachronous
-anachronously
-anachueta
-anacid
-anacidity
-anaclasis
-anaclastic
-anaclastics
-Anaclete
-anacleticum
-anaclinal
-anaclisis
-anaclitic
-anacoenosis
-anacoluthia
-anacoluthic
-anacoluthically
-anacoluthon
-anaconda
-Anacreon
-Anacreontic
-Anacreontically
-anacrisis
-Anacrogynae
-anacrogynae
-anacrogynous
-anacromyodian
-anacrotic
-anacrotism
-anacrusis
-anacrustic
-anacrustically
-anaculture
-anacusia
-anacusic
-anacusis
-Anacyclus
-anadem
-anadenia
-anadicrotic
-anadicrotism
-anadidymus
-anadiplosis
-anadipsia
-anadipsic
-anadrom
-anadromous
-Anadyomene
-anaematosis
-anaemia
-anaemic
-anaeretic
-anaerobation
-anaerobe
-anaerobia
-anaerobian
-anaerobic
-anaerobically
-anaerobies
-anaerobion
-anaerobiont
-anaerobiosis
-anaerobiotic
-anaerobiotically
-anaerobious
-anaerobism
-anaerobium
-anaerophyte
-anaeroplastic
-anaeroplasty
-anaesthesia
-anaesthesiant
-anaesthetically
-anaesthetizer
-anaetiological
-anagalactic
-Anagallis
-anagap
-anagenesis
-anagenetic
-anagep
-anagignoskomena
-anaglyph
-anaglyphic
-anaglyphical
-anaglyphics
-anaglyphoscope
-anaglyphy
-anaglyptic
-anaglyptical
-anaglyptics
-anaglyptograph
-anaglyptographic
-anaglyptography
-anaglypton
-anagnorisis
-anagnost
-anagoge
-anagogic
-anagogical
-anagogically
-anagogics
-anagogy
-anagram
-anagrammatic
-anagrammatical
-anagrammatically
-anagrammatism
-anagrammatist
-anagrammatize
-anagrams
-anagraph
-anagua
-anagyrin
-anagyrine
-Anagyris
-anahau
-Anahita
-Anaitis
-Anakes
-anakinesis
-anakinetic
-anakinetomer
-anakinetomeric
-anakoluthia
-anakrousis
-anaktoron
-anal
-analabos
-analav
-analcime
-analcimite
-analcite
-analcitite
-analecta
-analectic
-analects
-analemma
-analemmatic
-analepsis
-analepsy
-analeptic
-analeptical
-analgen
-analgesia
-analgesic
-Analgesidae
-analgesis
-analgesist
-analgetic
-analgia
-analgic
-analgize
-analkalinity
-anallagmatic
-anallantoic
-Anallantoidea
-anallantoidean
-anallergic
-anally
-analogic
-analogical
-analogically
-analogicalness
-analogion
-analogism
-analogist
-analogistic
-analogize
-analogon
-analogous
-analogously
-analogousness
-analogue
-analogy
-analphabet
-analphabete
-analphabetic
-analphabetical
-analphabetism
-analysability
-analysable
-analysand
-analysation
-analyse
-analyser
-analyses
-analysis
-analyst
-analytic
-analytical
-analytically
-analytics
-analyzability
-analyzable
-analyzation
-analyze
-analyzer
-Anam
-anam
-anama
-anamesite
-anametadromous
-Anamirta
-anamirtin
-Anamite
-anamite
-anammonid
-anammonide
-anamnesis
-anamnestic
-anamnestically
-Anamnia
-Anamniata
-Anamnionata
-anamnionic
-Anamniota
-anamniote
-anamniotic
-anamorphic
-anamorphism
-anamorphoscope
-anamorphose
-anamorphosis
-anamorphote
-anamorphous
-anan
-anana
-ananaplas
-ananaples
-ananas
-ananda
-anandrarious
-anandria
-anandrous
-ananepionic
-anangioid
-anangular
-Ananias
-Ananism
-Ananite
-anankastic
-Anansi
-Ananta
-anantherate
-anantherous
-ananthous
-ananym
-anapaest
-anapaestic
-anapaestical
-anapaestically
-anapaganize
-anapaite
-anapanapa
-anapeiratic
-anaphalantiasis
-Anaphalis
-anaphase
-Anaphe
-anaphia
-anaphora
-anaphoral
-anaphoria
-anaphoric
-anaphorical
-anaphrodisia
-anaphrodisiac
-anaphroditic
-anaphroditous
-anaphylactic
-anaphylactin
-anaphylactogen
-anaphylactogenic
-anaphylactoid
-anaphylatoxin
-anaphylaxis
-anaphyte
-anaplasia
-anaplasis
-anaplasm
-Anaplasma
-anaplasmosis
-anaplastic
-anaplasty
-anaplerosis
-anaplerotic
-anapnea
-anapneic
-anapnoeic
-anapnograph
-anapnoic
-anapnometer
-anapodeictic
-anapophysial
-anapophysis
-anapsid
-Anapsida
-anapsidan
-Anapterygota
-anapterygote
-anapterygotism
-anapterygotous
-Anaptomorphidae
-Anaptomorphus
-anaptotic
-anaptychus
-anaptyctic
-anaptyctical
-anaptyxis
-anaqua
-anarcestean
-Anarcestes
-anarch
-anarchal
-anarchial
-anarchic
-anarchical
-anarchically
-anarchism
-anarchist
-anarchistic
-anarchize
-anarchoindividualist
-anarchosocialist
-anarchosyndicalism
-anarchosyndicalist
-anarchy
-anarcotin
-anareta
-anaretic
-anaretical
-anargyros
-anarthria
-anarthric
-anarthropod
-Anarthropoda
-anarthropodous
-anarthrosis
-anarthrous
-anarthrously
-anarthrousness
-anartismos
-anarya
-Anaryan
-Anas
-Anasa
-anasarca
-anasarcous
-Anasazi
-anaschistic
-anaseismic
-Anasitch
-anaspadias
-anaspalin
-Anaspida
-Anaspidacea
-Anaspides
-anastalsis
-anastaltic
-Anastasia
-Anastasian
-anastasimon
-anastasimos
-anastasis
-Anastasius
-anastate
-anastatic
-Anastatica
-Anastatus
-anastigmat
-anastigmatic
-anastomose
-anastomosis
-anastomotic
-Anastomus
-anastrophe
-Anastrophia
-Anat
-anatase
-anatexis
-anathema
-anathematic
-anathematical
-anathematically
-anathematism
-anathematization
-anathematize
-anathematizer
-anatheme
-anathemize
-Anatherum
-Anatidae
-anatifa
-Anatifae
-anatifer
-anatiferous
-Anatinacea
-Anatinae
-anatine
-anatocism
-Anatolian
-Anatolic
-anatomic
-anatomical
-anatomically
-anatomicobiological
-anatomicochirurgical
-anatomicomedical
-anatomicopathologic
-anatomicopathological
-anatomicophysiologic
-anatomicophysiological
-anatomicosurgical
-anatomism
-anatomist
-anatomization
-anatomize
-anatomizer
-anatomopathologic
-anatomopathological
-anatomy
-anatopism
-anatox
-anatoxin
-anatreptic
-anatripsis
-anatripsology
-anatriptic
-anatron
-anatropal
-anatropia
-anatropous
-Anatum
-anaudia
-anaunter
-anaunters
-Anax
-Anaxagorean
-Anaxagorize
-anaxial
-Anaximandrian
-anaxon
-anaxone
-Anaxonia
-anay
-anazoturia
-anba
-anbury
-Ancerata
-ancestor
-ancestorial
-ancestorially
-ancestral
-ancestrally
-ancestress
-ancestrial
-ancestrian
-ancestry
-Ancha
-Anchat
-Anchietea
-anchietin
-anchietine
-anchieutectic
-anchimonomineral
-Anchisaurus
-Anchises
-Anchistea
-Anchistopoda
-anchithere
-anchitherioid
-anchor
-anchorable
-anchorage
-anchorate
-anchored
-anchorer
-anchoress
-anchoret
-anchoretic
-anchoretical
-anchoretish
-anchoretism
-anchorhold
-anchorite
-anchoritess
-anchoritic
-anchoritical
-anchoritish
-anchoritism
-anchorless
-anchorlike
-anchorwise
-anchovy
-Anchtherium
-Anchusa
-anchusin
-anchusine
-anchylose
-anchylosis
-ancience
-anciency
-ancient
-ancientism
-anciently
-ancientness
-ancientry
-ancienty
-ancile
-ancilla
-ancillary
-ancipital
-ancipitous
-Ancistrocladaceae
-ancistrocladaceous
-Ancistrocladus
-ancistroid
-ancon
-Ancona
-anconad
-anconagra
-anconal
-ancone
-anconeal
-anconeous
-anconeus
-anconitis
-anconoid
-ancony
-ancora
-ancoral
-Ancyloceras
-Ancylocladus
-Ancylodactyla
-ancylopod
-Ancylopoda
-Ancylostoma
-ancylostome
-ancylostomiasis
-Ancylostomum
-Ancylus
-Ancyrean
-Ancyrene
-and
-anda
-andabatarian
-Andalusian
-andalusite
-Andaman
-Andamanese
-andante
-andantino
-Andaqui
-Andaquian
-Andarko
-Andaste
-Ande
-Andean
-Andesic
-andesine
-andesinite
-andesite
-andesitic
-Andevo
-Andhra
-Andi
-Andian
-Andine
-Andira
-andirin
-andirine
-andiroba
-andiron
-Andoke
-andorite
-Andorobo
-Andorran
-andouillet
-andradite
-andranatomy
-andrarchy
-Andre
-Andreaea
-Andreaeaceae
-Andreaeales
-Andrena
-andrenid
-Andrenidae
-Andrew
-andrewsite
-Andria
-Andriana
-Andrias
-andric
-androcentric
-androcephalous
-androcephalum
-androclinium
-Androclus
-androconium
-androcracy
-androcratic
-androcyte
-androdioecious
-androdioecism
-androdynamous
-androecial
-androecium
-androgametangium
-androgametophore
-androgen
-androgenesis
-androgenetic
-androgenic
-androgenous
-androginous
-androgone
-androgonia
-androgonial
-androgonidium
-androgonium
-Andrographis
-andrographolide
-androgynal
-androgynary
-androgyne
-androgyneity
-androgynia
-androgynism
-androgynous
-androgynus
-androgyny
-android
-androidal
-androkinin
-androl
-androlepsia
-androlepsy
-Andromache
-andromania
-Andromaque
-Andromeda
-Andromede
-andromedotoxin
-andromonoecious
-andromonoecism
-andromorphous
-andron
-Andronicus
-andronitis
-andropetalar
-andropetalous
-androphagous
-androphobia
-androphonomania
-androphore
-androphorous
-androphorum
-androphyll
-Andropogon
-Androsace
-Androscoggin
-androseme
-androsin
-androsphinx
-androsporangium
-androspore
-androsterone
-androtauric
-androtomy
-Andy
-anear
-aneath
-anecdota
-anecdotage
-anecdotal
-anecdotalism
-anecdote
-anecdotic
-anecdotical
-anecdotically
-anecdotist
-anele
-anelectric
-anelectrode
-anelectrotonic
-anelectrotonus
-anelytrous
-anematosis
-Anemia
-anemia
-anemic
-anemobiagraph
-anemochord
-anemoclastic
-anemogram
-anemograph
-anemographic
-anemographically
-anemography
-anemological
-anemology
-anemometer
-anemometric
-anemometrical
-anemometrically
-anemometrograph
-anemometrographic
-anemometrographically
-anemometry
-anemonal
-anemone
-Anemonella
-anemonin
-anemonol
-anemony
-anemopathy
-anemophile
-anemophilous
-anemophily
-Anemopsis
-anemoscope
-anemosis
-anemotaxis
-anemotropic
-anemotropism
-anencephalia
-anencephalic
-anencephalotrophia
-anencephalous
-anencephalus
-anencephaly
-anend
-anenergia
-anenst
-anent
-anenterous
-anepia
-anepigraphic
-anepigraphous
-anepiploic
-anepithymia
-anerethisia
-aneretic
-anergia
-anergic
-anergy
-anerly
-aneroid
-aneroidograph
-anerotic
-anerythroplasia
-anerythroplastic
-anes
-anesis
-anesthesia
-anesthesiant
-anesthesimeter
-anesthesiologist
-anesthesiology
-anesthesis
-anesthetic
-anesthetically
-anesthetist
-anesthetization
-anesthetize
-anesthetizer
-anesthyl
-anethole
-Anethum
-anetiological
-aneuploid
-aneuploidy
-aneuria
-aneuric
-aneurilemmic
-aneurin
-aneurism
-aneurismally
-aneurysm
-aneurysmal
-aneurysmally
-aneurysmatic
-anew
-Anezeh
-anfractuose
-anfractuosity
-anfractuous
-anfractuousness
-anfracture
-Angami
-Angara
-angaralite
-angaria
-angary
-Angdistis
-angekok
-angel
-Angela
-angelate
-angeldom
-Angeleno
-angelet
-angeleyes
-angelfish
-angelhood
-angelic
-Angelica
-angelica
-Angelical
-angelical
-angelically
-angelicalness
-Angelican
-angelicic
-angelicize
-angelico
-angelin
-Angelina
-angeline
-angelique
-angelize
-angellike
-Angelo
-angelocracy
-angelographer
-angelolater
-angelolatry
-angelologic
-angelological
-angelology
-angelomachy
-Angelonia
-angelophany
-angelot
-angelship
-Angelus
-anger
-angerly
-Angerona
-Angeronalia
-Angers
-Angetenar
-Angevin
-angeyok
-angiasthenia
-angico
-Angie
-angiectasis
-angiectopia
-angiemphraxis
-angiitis
-angild
-angili
-angina
-anginal
-anginiform
-anginoid
-anginose
-anginous
-angioasthenia
-angioataxia
-angioblast
-angioblastic
-angiocarditis
-angiocarp
-angiocarpian
-angiocarpic
-angiocarpous
-angiocavernous
-angiocholecystitis
-angiocholitis
-angiochondroma
-angioclast
-angiocyst
-angiodermatitis
-angiodiascopy
-angioelephantiasis
-angiofibroma
-angiogenesis
-angiogenic
-angiogeny
-angioglioma
-angiograph
-angiography
-angiohyalinosis
-angiohydrotomy
-angiohypertonia
-angiohypotonia
-angioid
-angiokeratoma
-angiokinesis
-angiokinetic
-angioleucitis
-angiolipoma
-angiolith
-angiology
-angiolymphitis
-angiolymphoma
-angioma
-angiomalacia
-angiomatosis
-angiomatous
-angiomegaly
-angiometer
-angiomyocardiac
-angiomyoma
-angiomyosarcoma
-angioneoplasm
-angioneurosis
-angioneurotic
-angionoma
-angionosis
-angioparalysis
-angioparalytic
-angioparesis
-angiopathy
-angiophorous
-angioplany
-angioplasty
-angioplerosis
-angiopoietic
-angiopressure
-angiorrhagia
-angiorrhaphy
-angiorrhea
-angiorrhexis
-angiosarcoma
-angiosclerosis
-angiosclerotic
-angioscope
-angiosis
-angiospasm
-angiospastic
-angiosperm
-Angiospermae
-angiospermal
-angiospermatous
-angiospermic
-angiospermous
-angiosporous
-angiostegnosis
-angiostenosis
-angiosteosis
-angiostomize
-angiostomy
-angiostrophy
-angiosymphysis
-angiotasis
-angiotelectasia
-angiothlipsis
-angiotome
-angiotomy
-angiotonic
-angiotonin
-angiotribe
-angiotripsy
-angiotrophic
-Angka
-anglaise
-angle
-angleberry
-angled
-anglehook
-anglepod
-angler
-Angles
-anglesite
-anglesmith
-angletouch
-angletwitch
-anglewing
-anglewise
-angleworm
-Anglian
-Anglic
-Anglican
-Anglicanism
-Anglicanize
-Anglicanly
-Anglicanum
-Anglicism
-Anglicist
-Anglicization
-anglicization
-Anglicize
-anglicize
-Anglification
-Anglify
-anglimaniac
-angling
-Anglish
-Anglist
-Anglistics
-Anglogaea
-Anglogaean
-angloid
-Angloman
-Anglomane
-Anglomania
-Anglomaniac
-Anglophile
-Anglophobe
-Anglophobia
-Anglophobiac
-Anglophobic
-Anglophobist
-ango
-Angola
-angolar
-Angolese
-angor
-Angora
-angostura
-Angouleme
-Angoumian
-Angraecum
-angrily
-angriness
-angrite
-angry
-angst
-angster
-Angstrom
-angstrom
-anguid
-Anguidae
-anguiform
-Anguilla
-Anguillaria
-Anguillidae
-anguilliform
-anguilloid
-Anguillula
-Anguillulidae
-Anguimorpha
-anguine
-anguineal
-anguineous
-Anguinidae
-anguiped
-Anguis
-anguis
-anguish
-anguished
-anguishful
-anguishous
-anguishously
-angula
-angular
-angulare
-angularity
-angularization
-angularize
-angularly
-angularness
-angulate
-angulated
-angulately
-angulateness
-angulation
-angulatogibbous
-angulatosinuous
-anguliferous
-angulinerved
-Anguloa
-angulodentate
-angulometer
-angulosity
-angulosplenial
-angulous
-anguria
-Angus
-angusticlave
-angustifoliate
-angustifolious
-angustirostrate
-angustisellate
-angustiseptal
-angustiseptate
-angwantibo
-anhalamine
-anhaline
-anhalonine
-Anhalonium
-anhalouidine
-anhang
-Anhanga
-anharmonic
-anhedonia
-anhedral
-anhedron
-anhelation
-anhelous
-anhematosis
-anhemolytic
-anhidrosis
-anhidrotic
-anhima
-Anhimae
-Anhimidae
-anhinga
-anhistic
-anhistous
-anhungered
-anhungry
-anhydrate
-anhydration
-anhydremia
-anhydremic
-anhydric
-anhydride
-anhydridization
-anhydridize
-anhydrite
-anhydrization
-anhydrize
-anhydroglocose
-anhydromyelia
-anhydrous
-anhydroxime
-anhysteretic
-ani
-Aniba
-Anice
-aniconic
-aniconism
-anicular
-anicut
-anidian
-anidiomatic
-anidiomatical
-anidrosis
-Aniellidae
-aniente
-anigh
-anight
-anights
-anil
-anilao
-anilau
-anile
-anileness
-anilic
-anilid
-anilide
-anilidic
-anilidoxime
-aniline
-anilinism
-anilinophile
-anilinophilous
-anility
-anilla
-anilopyrin
-anilopyrine
-anima
-animability
-animable
-animableness
-animadversion
-animadversional
-animadversive
-animadversiveness
-animadvert
-animadverter
-animal
-animalcula
-animalculae
-animalcular
-animalcule
-animalculine
-animalculism
-animalculist
-animalculous
-animalculum
-animalhood
-Animalia
-animalian
-animalic
-animalier
-animalish
-animalism
-animalist
-animalistic
-animality
-Animalivora
-animalivore
-animalivorous
-animalization
-animalize
-animally
-animastic
-animastical
-animate
-animated
-animatedly
-animately
-animateness
-animater
-animating
-animatingly
-animation
-animatism
-animatistic
-animative
-animatograph
-animator
-anime
-animi
-Animikean
-animikite
-animism
-animist
-animistic
-animize
-animosity
-animotheism
-animous
-animus
-anion
-anionic
-aniridia
-anis
-anisal
-anisalcohol
-anisaldehyde
-anisaldoxime
-anisamide
-anisandrous
-anisanilide
-anisate
-anischuria
-anise
-aniseed
-aniseikonia
-aniseikonic
-aniselike
-aniseroot
-anisette
-anisic
-anisidin
-anisidine
-anisil
-anisilic
-anisobranchiate
-anisocarpic
-anisocarpous
-anisocercal
-anisochromatic
-anisochromia
-anisocoria
-anisocotyledonous
-anisocotyly
-anisocratic
-anisocycle
-anisocytosis
-anisodactyl
-Anisodactyla
-Anisodactyli
-anisodactylic
-anisodactylous
-anisodont
-anisogamete
-anisogamous
-anisogamy
-anisogenous
-anisogeny
-anisognathism
-anisognathous
-anisogynous
-anisoin
-anisole
-anisoleucocytosis
-Anisomeles
-anisomelia
-anisomelus
-anisomeric
-anisomerous
-anisometric
-anisometrope
-anisometropia
-anisometropic
-anisomyarian
-Anisomyodi
-anisomyodian
-anisomyodous
-anisopetalous
-anisophyllous
-anisophylly
-anisopia
-anisopleural
-anisopleurous
-anisopod
-Anisopoda
-anisopodal
-anisopodous
-anisopogonous
-Anisoptera
-anisopterous
-anisosepalous
-anisospore
-anisostaminous
-anisostemonous
-anisosthenic
-anisostichous
-Anisostichus
-anisostomous
-anisotonic
-anisotropal
-anisotrope
-anisotropic
-anisotropical
-anisotropically
-anisotropism
-anisotropous
-anisotropy
-anisoyl
-anisum
-anisuria
-anisyl
-anisylidene
-Anita
-anither
-anitrogenous
-anjan
-Anjou
-ankaramite
-ankaratrite
-ankee
-anker
-ankerite
-ankh
-ankle
-anklebone
-anklejack
-anklet
-anklong
-Ankoli
-Ankou
-ankus
-ankusha
-ankylenteron
-ankyloblepharon
-ankylocheilia
-ankylodactylia
-ankylodontia
-ankyloglossia
-ankylomele
-ankylomerism
-ankylophobia
-ankylopodia
-ankylopoietic
-ankyloproctia
-ankylorrhinia
-Ankylosaurus
-ankylose
-ankylosis
-ankylostoma
-ankylotia
-ankylotic
-ankylotome
-ankylotomy
-ankylurethria
-ankyroid
-anlace
-anlaut
-Ann
-ann
-Anna
-anna
-Annabel
-annabergite
-annal
-annale
-annaline
-annalism
-annalist
-annalistic
-annalize
-annals
-Annam
-Annamese
-Annamite
-Annamitic
-Annapurna
-annat
-annates
-annatto
-anneal
-annealer
-annectent
-annection
-annelid
-Annelida
-annelidan
-Annelides
-annelidian
-annelidous
-annelism
-Annellata
-anneloid
-annerodite
-Anneslia
-annet
-Annette
-annex
-annexa
-annexable
-annexal
-annexation
-annexational
-annexationist
-annexer
-annexion
-annexionist
-annexitis
-annexive
-annexment
-annexure
-annidalin
-Annie
-Anniellidae
-annihilability
-annihilable
-annihilate
-annihilation
-annihilationism
-annihilationist
-annihilative
-annihilator
-annihilatory
-Annist
-annite
-anniversarily
-anniversariness
-anniversary
-anniverse
-annodated
-Annona
-annona
-Annonaceae
-annonaceous
-annotate
-annotater
-annotation
-annotative
-annotator
-annotatory
-annotine
-annotinous
-announce
-announceable
-announcement
-announcer
-annoy
-annoyance
-annoyancer
-annoyer
-annoyful
-annoying
-annoyingly
-annoyingness
-annoyment
-annual
-annualist
-annualize
-annually
-annuary
-annueler
-annuent
-annuitant
-annuity
-annul
-annular
-Annularia
-annularity
-annularly
-annulary
-Annulata
-annulate
-annulated
-annulation
-annulet
-annulettee
-annulism
-annullable
-annullate
-annullation
-annuller
-annulment
-annuloid
-Annuloida
-Annulosa
-annulosan
-annulose
-annulus
-annunciable
-annunciate
-annunciation
-annunciative
-annunciator
-annunciatory
-anoa
-Anobiidae
-anocarpous
-anociassociation
-anococcygeal
-anodal
-anode
-anodendron
-anodic
-anodically
-anodize
-Anodon
-Anodonta
-anodontia
-anodos
-anodyne
-anodynia
-anodynic
-anodynous
-anoegenetic
-anoesia
-anoesis
-anoestrous
-anoestrum
-anoestrus
-anoetic
-anogenic
-anogenital
-Anogra
-anoil
-anoine
-anoint
-anointer
-anointment
-anole
-anoli
-anolian
-Anolis
-Anolympiad
-anolyte
-Anomala
-anomaliflorous
-anomaliped
-anomalism
-anomalist
-anomalistic
-anomalistical
-anomalistically
-anomalocephalus
-anomaloflorous
-Anomalogonatae
-anomalogonatous
-Anomalon
-anomalonomy
-Anomalopteryx
-anomaloscope
-anomalotrophy
-anomalous
-anomalously
-anomalousness
-anomalure
-Anomaluridae
-Anomalurus
-anomaly
-Anomatheca
-Anomia
-Anomiacea
-Anomiidae
-anomite
-anomocarpous
-anomodont
-Anomodontia
-Anomoean
-Anomoeanism
-anomophyllous
-anomorhomboid
-anomorhomboidal
-anomphalous
-Anomura
-anomural
-anomuran
-anomurous
-anomy
-anon
-anonang
-anoncillo
-anonol
-anonychia
-anonym
-anonyma
-anonymity
-anonymous
-anonymously
-anonymousness
-anonymuncule
-anoopsia
-anoperineal
-anophele
-Anopheles
-Anophelinae
-anopheline
-anophoria
-anophthalmia
-anophthalmos
-Anophthalmus
-anophyte
-anopia
-anopisthographic
-Anopla
-Anoplanthus
-anoplocephalic
-anoplonemertean
-Anoplonemertini
-anoplothere
-Anoplotheriidae
-anoplotherioid
-Anoplotherium
-anoplotheroid
-Anoplura
-anopluriform
-anopsia
-anopubic
-anorak
-anorchia
-anorchism
-anorchous
-anorchus
-anorectal
-anorectic
-anorectous
-anorexia
-anorexy
-anorgana
-anorganic
-anorganism
-anorganology
-anormal
-anormality
-anorogenic
-anorth
-anorthic
-anorthite
-anorthitic
-anorthitite
-anorthoclase
-anorthographic
-anorthographical
-anorthographically
-anorthography
-anorthophyre
-anorthopia
-anorthoscope
-anorthose
-anorthosite
-anoscope
-anoscopy
-Anosia
-anosmatic
-anosmia
-anosmic
-anosphrasia
-anosphresia
-anospinal
-anostosis
-Anostraca
-anoterite
-another
-anotherkins
-anotia
-anotropia
-anotta
-anotto
-anotus
-anounou
-Anous
-anovesical
-anoxemia
-anoxemic
-anoxia
-anoxic
-anoxidative
-anoxybiosis
-anoxybiotic
-anoxyscope
-ansa
-ansar
-ansarian
-Ansarie
-ansate
-ansation
-Anseis
-Ansel
-Anselm
-Anselmian
-Anser
-anserated
-Anseres
-Anseriformes
-Anserinae
-anserine
-anserous
-anspessade
-ansu
-ansulate
-answer
-answerability
-answerable
-answerableness
-answerably
-answerer
-answeringly
-answerless
-answerlessly
-ant
-Anta
-anta
-antacid
-antacrid
-antadiform
-Antaean
-Antaeus
-antagonism
-antagonist
-antagonistic
-antagonistical
-antagonistically
-antagonization
-antagonize
-antagonizer
-antagony
-Antaimerina
-Antaios
-Antaiva
-antal
-antalgesic
-antalgol
-antalkali
-antalkaline
-antambulacral
-antanacathartic
-antanaclasis
-Antanandro
-antanemic
-antapex
-antaphrodisiac
-antaphroditic
-antapocha
-antapodosis
-antapology
-antapoplectic
-Antar
-Antara
-antarchism
-antarchist
-antarchistic
-antarchistical
-antarchy
-Antarctalia
-Antarctalian
-antarctic
-Antarctica
-antarctica
-antarctical
-antarctically
-Antarctogaea
-Antarctogaean
-Antares
-antarthritic
-antasphyctic
-antasthenic
-antasthmatic
-antatrophic
-antdom
-ante
-anteact
-anteal
-anteambulate
-anteambulation
-anteater
-antebaptismal
-antebath
-antebrachial
-antebrachium
-antebridal
-antecabinet
-antecaecal
-antecardium
-antecavern
-antecedaneous
-antecedaneously
-antecede
-antecedence
-antecedency
-antecedent
-antecedental
-antecedently
-antecessor
-antechamber
-antechapel
-Antechinomys
-antechoir
-antechurch
-anteclassical
-antecloset
-antecolic

=== removed directory 'Nevow/examples/formbuilder'
=== removed file 'Nevow/examples/formbuilder/__init__.py'
=== removed file 'Nevow/examples/formbuilder/formbuilder.py'
--- Nevow/examples/formbuilder/formbuilder.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/formbuilder/formbuilder.py	1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
-## formbuilder
-
-from zope.interface import implements
-
-from nevow import rend
-from nevow import loaders
-from nevow import tags as T
-from nevow import util
-
-from formless import annotate
-from formless import webform
-from formless import configurable
-
-from twisted.python import reflect
-
-
-class BuilderCore(configurable.Configurable):
-    def __init__(self):
-        configurable.Configurable.__init__(self, None)
-        self.formElements = []
-
-    def getBindingNames(self, ctx):
-        return ['form']
-
-    def bind_form(self, ctx):
-        return annotate.MethodBinding(
-            'action',
-            annotate.Method(arguments=self.formElements))
-
-    def action(self, **kw):
-        print "ACTION!", kw
-
-    def addElement(self, name, type):
-        self.formElements.append(
-            annotate.Argument(name, type()))
-
-
-allTypes = [annotate.String, annotate.Text, annotate.Integer, annotate.Real, annotate.Password]
-typeChoice = annotate.Choice(choices=allTypes, valueToKey=reflect.qual, keyToValue=reflect.namedAny, stringify=lambda x: x.__name__)
-
-
-class IFormBuilder(annotate.TypedInterface):
-    def addElement(name=annotate.String(required=True), type=typeChoice):
-        """Add Element
-        
-        Add an element to this form.
-        """
-        pass
-    addElement = annotate.autocallable(addElement)
-
-    def clearForm():
-        """Clear Form
-        
-        Clear this form.
-        """
-    clearForm = annotate.autocallable(clearForm)
-        
-
-class FormBuilder(rend.Page):
-    implements(IFormBuilder)
-    addSlash = True
-
-    def __init__(self):
-        rend.Page.__init__(self)
-        self.clearForm()
-
-    def configurable_formBuilder(self, ctx):
-        return configurable.TypedInterfaceConfigurable(self)
-
-    def configurable_dynamicForm(self, ctx):
-        return self.builderCore
-
-    def addElement(self, name, type):
-        self.builderCore.addElement(name, type)
-
-    def clearForm(self):
-        self.builderCore = BuilderCore()
-
-    docFactory = loaders.stan(T.html[
-    T.head[
-        T.title["Form builder!"]],
-        T.style(type="text/css")[
-            open(util.resource_filename('formless', 'freeform-default.css')).read()],
-    T.body[
-        T.h1["Welcome to form builder"],
-        webform.renderForms('formBuilder'),
-        T.h2["Here is your form:"],
-        webform.renderForms('dynamicForm')]])
-
-
-## Startup glue
-from nevow import appserver
-from twisted.application import service
-from twisted.application import internet
-
-application = service.Application('formbuilder')
-internet.TCPServer(8080, appserver.NevowSite(FormBuilder())).setServiceParent(application)
-

=== removed directory 'Nevow/examples/formpost'
=== removed file 'Nevow/examples/formpost/__init__.py'
=== removed file 'Nevow/examples/formpost/formpost.py'
--- Nevow/examples/formpost/formpost.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/formpost/formpost.py	1970-01-01 00:00:00 +0000
@@ -1,41 +0,0 @@
-# -*- python -*-
-
-from zope.interface import implements
-
-from nevow import loaders
-from nevow import rend
-from nevow import tags
-from nevow import url
-
-from formless import annotate
-from formless import webform
-
-class IMyForm(annotate.TypedInterface):
-    foo = annotate.Integer()
-
-
-class FormPage(rend.Page):
-    implements(IMyForm)
-
-    addSlash = True
-
-    child_webform_css = webform.defaultCSS
-
-    # We need this to implement IMyForm
-    foo = 5
-
-    docFactory = loaders.stan(
-        tags.html[
-            tags.head[
-                tags.link(rel='stylesheet', type='text/css', href=url.here.child('webform_css')),
-                ],
-            tags.body[
-                "Hello! Here is a form:",
-
-                # We want to render the "default" configurable.
-                # This is located in Page.configurable_() and is going to be
-                # 'self' (which, as you see above, implements IMyForm).
-                webform.renderForms(),
-                ],
-            ],
-        )

=== removed file 'Nevow/examples/formpost/formpost2.py'
--- Nevow/examples/formpost/formpost2.py	2006-03-22 18:03:26 +0000
+++ Nevow/examples/formpost/formpost2.py	1970-01-01 00:00:00 +0000
@@ -1,83 +0,0 @@
-# -*- python -*-
-
-from zope.interface import implements
-
-from nevow import loaders
-from nevow import rend
-from nevow import tags
-from nevow import inevow
-from nevow import url
-
-from formless import annotate
-from formless import webform
-
-from twisted.internet import defer
-
-
-#oldChoicesWay = annotate.Choice(choicesAttribute='theChoices') # Doing this gives you a DeprecationWarning now
-
-# If you still want to use an attribute or method of some other object, you should use a function as shown below,
-# but look up IResource(ctx) or IConfigurable(ctx), whichever is more appropriate.
-newChoicesWay = annotate.Choice(lambda c, d: range(30))
-deferChoicesWay = annotate.Choice(lambda c, d: defer.succeed(['abcd', 'efgh', 'ijkl']))
-radioChoices = annotate.Radio(["Old", "Tyme", "Radio"])
-
-## An example of using custom valueToKey and keyToValue functions to serialize/deserialize items
-values = {0: dict(name="Zero", stuff=1234), 1: dict(name="One", stuff=1234), 2: dict(name="Two", stuff=2345435)}
-customValueToKey = annotate.Choice(
-    [0, 1, 2], # Perhaps these are primary keys in a database
-    stringify=lambda x: values[x]['name'], # Do a database lookup to render a nice label in the ui
-    valueToKey=str,                                  # Convert the primary key to a value suitable for sending across the web
-    keyToValue=lambda x: values[int(x)]) # Do a database lookup to get the actual value to pass to the binding
-
-
-class IMyForm(annotate.TypedInterface):
-    foo = annotate.Integer()
-
-    def bar(baz=annotate.Integer(), 
-        slam=newChoicesWay, ham=deferChoicesWay, radio=radioChoices, custom=customValueToKey):
-        pass
-    bar = annotate.autocallable(bar)
-
-
-class Implementation(object):
-    implements(IMyForm)
-
-    foo = 5
-
-    def bar(self, baz, slam, ham, radio, custom):
-        return "You called bar! %s %s %s %s %r" % (baz, slam, ham, radio, custom)
-
-    theChoices = [1, 2, 3]
-
-
-class FormPage(rend.Page):
-
-    addSlash = True
-
-    child_webform_css = webform.defaultCSS
-
-    def render_hand(self, ctx, data):
-        hand = inevow.IHand(ctx, None)
-        if hand is not None:
-            return ctx.tag[hand]
-        return ''
-
-    docFactory = loaders.stan(
-        tags.html[
-            tags.head[
-                tags.link(rel='stylesheet', type='text/css', href=url.here.child('webform_css')),
-                ],
-            tags.body[
-                tags.h3(render=render_hand, style="color: red; font-size: xx-large"),
-                "Hello! Here is a form:",
-
-                # We want to render forms defined by the Implementation instance.
-                # When we pass the Implementation instance to FormPage below,
-                # rend.Page sets it as the .original attribute. To tell webform to render
-                # forms described by this object, we use the configurable name "original".
-                webform.renderForms('original'),
-                ],
-            ],
-        )
-

=== removed directory 'Nevow/examples/fragments'
=== removed file 'Nevow/examples/fragments/__init__.py'
=== removed file 'Nevow/examples/fragments/fragments.py'
--- Nevow/examples/fragments/fragments.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/fragments/fragments.py	1970-01-01 00:00:00 +0000
@@ -1,52 +0,0 @@
-from twisted.python import util
-from nevow import inevow, rend, tags as t, loaders
-
-class Root(rend.Page):
-    addSlash = True
-    docFactory = loaders.xmlfile(util.sibpath(__file__, 'main.html'))
-
-    def data_ip(self, ctx, data):
-        return inevow.IRequest(ctx).client.host
-
-    def render_header(self, ctx, data):
-        return ctx.tag[Header(data)]
-
-    def render_sidebar(self, ctx, data):
-        # This is only a different way of using a Fragment
-        # you can either fill a slot or return it from a
-        # render_* method
-        ctx.tag.fillSlots('main_sidebar', SideBar())
-        return ctx.tag
-
-    def render_content(self, ctx, data):
-        return ctx.tag[Content()]
-
-class Header(rend.Fragment):
-    docFactory = loaders.stan(
-        t.invisible[
-            t.p(render=t.directive("ip"))["Welcome IP: "]
-        ]
-    )
-
-    def render_ip(self, ctx, data):
-        return ctx.tag[data]
-            
-class SideBar(rend.Fragment):
-    docFactory = loaders.stan(
-        t.ul[
-            t.li["Menuitem 1"],
-            t.li["Menuitem 2"],
-            t.li["Menuitem 3"],
-        ]
-    )
-
-class Content(rend.Fragment):
-    docFactory = loaders.stan(
-        t.p["""Hi, this page is composed thanks to Fragments.
-A Fragment allows the programmer to dispatch the composition of the
-page to many different objects that represent a logical entity inside
-the page. The Fragment can be used just like any other piece of stan
-plus it understands render_* and data_* methods.
-
-For additional questions come in #twisted.web"""]
-    )

=== removed file 'Nevow/examples/fragments/main.html'
--- Nevow/examples/fragments/main.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/fragments/main.html	1970-01-01 00:00:00 +0000
@@ -1,40 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml"; lang="en" xmlns:n="http://nevow.com/ns/nevow/0.1";>
-  <head>
-    <title>Fragments Example</title>
-    <style type="text/css">
-#header {
-font-size: 30px;
-border-bottom: 1px solid #000;
-}
-
-#sidebar {
-float:left;
-}
-
-#sidebar ul{
-list-style: none;
-margin-right: 30px;
-margin-left: 15px;
-padding: 5px;
-}
-#content {
-margin-left: 50px;
-border-left: 50px;
-padding: 5px;
-}
-    </style>
-  </head>
-  <body>
-    <div id="header" n:data="ip" n:render="header" />
-    <div id="sidebar" n:render="sidebar">
-      <!-- you can also avoid using the slot by just 
-      returning ctx.tag[The_Fragment_Instance]
-      from the render_* like it is done with the 
-      others in this page -->
-      <n:slot name="main_sidebar" />
-    </div>
-    <div id="content" n:render="content" />
-  </body>
-</html>
\ No newline at end of file

=== removed directory 'Nevow/examples/guarded'
=== removed file 'Nevow/examples/guarded/__init__.py'
=== removed file 'Nevow/examples/guarded/guarded.py'
--- Nevow/examples/guarded/guarded.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/guarded/guarded.py	1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
-
-from zope.interface import implements
-
-from twisted.cred import portal, checkers, credentials
-
-from nevow import inevow, rend, tags, guard, loaders
-
-
-### Renderers
-class NotLoggedIn(rend.Page):
-    """The resource that is returned when you are not logged in"""
-    addSlash = True
-    docFactory = loaders.stan(
-    tags.html[
-        tags.head[tags.title["Not Logged In"]],
-        tags.body[
-            tags.form(action=guard.LOGIN_AVATAR, method='post')[
-                tags.table[
-                    tags.tr[
-                        tags.td[ "Username:" ],
-                        tags.td[ tags.input(type='text',name='username') ],
-                    ],
-                    tags.tr[
-                        tags.td[ "Password:" ],
-                        tags.td[ tags.input(type='password',name='password') ],
-                    ]
-                ],
-                tags.input(type='submit'),
-                tags.p,
-            ]
-        ]
-    ]
-)
-
-
-class LoggedIn(rend.Page):
-    """The resource that is returned when you login"""
-    addSlash = True
-    docFactory = loaders.stan(
-    tags.html[
-        tags.head[tags.title["Logged In"]],
-        tags.body[
-            tags.h3(render=tags.directive("welcome")),
-            tags.a(href=guard.LOGOUT_AVATAR)["Logout"]
-        ]
-    ]
-)
-
-    def render_welcome(self, context, data):
-        return context.tag[ "Hello, %s!" % data]
-
-    def logout(self):
-        ## self.original is the page's main data -- the object that was passed in to the constructor, and
-        ## the object that is initially passed as the 'data' parameter to renderers
-        print "%s logged out!" % self.original
-
-
-### Authentication
-def noLogout():
-    return None
-
-
-class MyRealm:
-    """A simple implementor of cred's IRealm.
-       For web, this gives us the LoggedIn page.
-    """
-    implements(portal.IRealm)
-
-    def requestAvatar(self, avatarId, mind, *interfaces):
-        for iface in interfaces:
-            if iface is inevow.IResource:
-                # do web stuff
-                if avatarId is checkers.ANONYMOUS:
-                    resc = NotLoggedIn()
-                    resc.realm = self
-                    return (inevow.IResource, resc, noLogout)
-                else:
-                    resc = LoggedIn(avatarId)
-                    resc.realm = self
-                    return (inevow.IResource, resc, resc.logout)
-
-        raise NotImplementedError("Can't support that interface.")
-
-
-### Application setup
-
-def createResource():
-    realm = MyRealm()
-    porta = portal.Portal(realm)
-
-    myChecker = checkers.InMemoryUsernamePasswordDatabaseDontUse()
-    myChecker.addUser("user","password")
-    myChecker.addUser("fred", "flintstone")
-    porta.registerChecker(checkers.AllowAnonymousAccess(), credentials.IAnonymous)
-    porta.registerChecker(myChecker)
-    res = guard.SessionWrapper(porta)
-    
-    return res

=== removed file 'Nevow/examples/guarded/guarded2.py'
--- Nevow/examples/guarded/guarded2.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/guarded/guarded2.py	1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
-from zope.interface import implements
-
-from twisted.cred import portal, checkers, credentials
- 
-from nevow import inevow, rend, tags, guard, loaders
- 
-class MyPage(rend.Page):
-    addSlash = True
-    docFactory = loaders.stan(
-    tags.html[
-        tags.head[tags.title["Hi Boy"]],
-        tags.body[
-            tags.invisible(render=tags.directive("isLogged"))[
-                tags.div(pattern="False")[
-                    tags.form(action=guard.LOGIN_AVATAR, method='post')[
-                        tags.table[
-                            tags.tr[
-                                tags.td[ "Username:" ],
-                                tags.td[ tags.input(type='text',name='username') ],
-                            ],
-                            tags.tr[
-                                tags.td[ "Password:" ],
-                                tags.td[ tags.input(type='password',name='password') ],
-                            ]
-                        ],
-                        tags.input(type='submit'),
-                        tags.p,
-                    ]
-                ],
-                tags.invisible(pattern="True")[
-                    tags.h3["Hi bro"],
-                    tags.invisible(render=tags.directive("sessionId")),
-                    tags.br,
-                    tags.a(href=guard.LOGOUT_AVATAR)["Logout"]
-                ]
-            ]
-        ]
-    ])
- 
-    def __init__(self, avatarId=None):
-        rend.Page.__init__(self)
-        self.avatarId=avatarId
- 
-    def render_isLogged(self, context, data):
-        q = inevow.IQ(context)
-        true_pattern = q.onePattern('True')
-        false_pattern = q.onePattern('False')
-        if self.avatarId: return true_pattern or context.tag().clear()
-        else: return false_pattern or context.tag().clear()
- 
-    def render_sessionId(self, context, data):
-        sess = inevow.ISession(context)
-        return context.tag[sess.uid]
- 
-    def logout(self):
-        print "Bye"
- 
-### Authentication
-def noLogout():
-    return None
- 
- 
-class MyRealm:
-    """A simple implementor of cred's IRealm.
-       For web, this gives us the LoggedIn page.
-    """
-    implements(portal.IRealm)
- 
-    def requestAvatar(self, avatarId, mind, *interfaces):
-        for iface in interfaces:
-            if iface is inevow.IResource:
-                # do web stuff
-                if avatarId is checkers.ANONYMOUS:
-                    resc = MyPage()
-                    resc.realm = self
-                    return (inevow.IResource, resc, noLogout)
-                else:
-                    resc = MyPage(avatarId)
-                    resc.realm = self
-                    return (inevow.IResource, resc, resc.logout)
- 
-        raise NotImplementedError("Can't support that interface.")
- 
- 
-### Application setup
-
-def createResource():
-    realm = MyRealm()
-    porta = portal.Portal(realm)
-
-    myChecker = checkers.InMemoryUsernamePasswordDatabaseDontUse()
-    myChecker.addUser("user","password")
-    myChecker.addUser("fred", "flintstone")
-    porta.registerChecker(checkers.AllowAnonymousAccess(), credentials.IAnonymous)
-    porta.registerChecker(myChecker)
-    res = guard.SessionWrapper(porta)
-    
-    return res

=== removed directory 'Nevow/examples/hello'
=== removed file 'Nevow/examples/hello/__init__.py'
=== removed file 'Nevow/examples/hello/hellohtml.html'
--- Nevow/examples/hello/hellohtml.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/hello/hellohtml.html	1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
-<html>
-  <head>
-    <title>Hello</title>
-  </head>
-  <body>
-    <p id="body">Welcome to the wonderful world of Nevow!</p>
-  </body>
-</html>

=== removed file 'Nevow/examples/hello/hellohtml.py'
--- Nevow/examples/hello/hellohtml.py	2006-01-08 23:05:11 +0000
+++ Nevow/examples/hello/hellohtml.py	1970-01-01 00:00:00 +0000
@@ -1,12 +0,0 @@
-from twisted.python import util
-
-from nevow import loaders
-from nevow import rend
-
-
-class Page(rend.Page):
-    """Example of using an HTML template to render a page.
-    """
-    addSlash = True
-    docFactory = loaders.xmlfile(util.sibpath(__file__, 'hellohtml.html'))
-

=== removed file 'Nevow/examples/hello/hellostan.py'
--- Nevow/examples/hello/hellostan.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/hello/hellostan.py	1970-01-01 00:00:00 +0000
@@ -1,26 +0,0 @@
-from twisted.application import internet, service
-
-from nevow import appserver
-from nevow import loaders
-from nevow import rend
-from nevow import tags as T
-
-
-class Page(rend.Page):
-    """Example of using stan to render a page.
-    """
-    addSlash = True
-    docFactory = loaders.stan(
-        T.html[
-            T.head[
-                T.title['Hello'],
-                ],
-            T.body[
-                T.p(id="body")['Welcome to the wonderful world of Nevow!'],
-                ],
-            ]
-        )
-
-application = service.Application('hellostan')
-webServer = internet.TCPServer(8080, appserver.NevowSite(Page()))
-webServer.setServiceParent(application)

=== removed directory 'Nevow/examples/http_auth'
=== removed file 'Nevow/examples/http_auth/__init__.py'
=== removed file 'Nevow/examples/http_auth/http_auth.py'
--- Nevow/examples/http_auth/http_auth.py	2005-11-07 01:41:24 +0000
+++ Nevow/examples/http_auth/http_auth.py	1970-01-01 00:00:00 +0000
@@ -1,39 +0,0 @@
-
-"""
-Example of using HTTP Auth directly to require authentication before
-rendering a page for a client.
-
-This is an example of extremely low-level authentication.  Most applications
-are better served by using L{nevow.guard} instead of manually managing HTTP
-Auth.  See the C{guarded/} example for more information.
-"""
-
-try:
-    from twisted.web import http
-except ImportError:
-    from twisted.protocols import http
-
-from nevow import rend, loaders, tags, inevow
-
-class AuthorizationRequired(rend.Page):
-    ## We are a directory-like resource because we are at the root
-    addSlash = True
-    def renderHTTP(self, ctx):
-        request = inevow.IRequest(ctx)
-        username, password = request.getUser(), request.getPassword()
-        if (username, password) == ('', ''):
-            request.setHeader('WWW-Authenticate', 'Basic realm="Whatever"')
-            request.setResponseCode(http.UNAUTHORIZED)
-            return "Authentication required."
-        ## They provided a username and password, so let's let them in! horray
-        self.data_username, self.data_password = username, password
-        return rend.Page.renderHTTP(self, ctx)
-
-    docFactory = loaders.stan(tags.html[
-    tags.body[
-        tags.h1["Welcome user!"],
-        tags.div["You said: ",
-            tags.span(data=tags.directive('username'), render=str),
-            " ",
-            tags.span(data=tags.directive('password'), render=str)]]])
-

=== removed directory 'Nevow/examples/i18n'
=== removed file 'Nevow/examples/i18n/__init__.py'
=== removed file 'Nevow/examples/i18n/hello.html'
--- Nevow/examples/i18n/hello.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/hello.html	1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml";
-      xmlns:nevow="http://nevow.com/ns/nevow/0.1";>
-  <head>
-    <title nevow:render="i18n">Greeting</title>
-  </head>
-  <body>
-    <p>
-      Select you preferred language:
-      <span nevow:render="langs"/>
-    </p>
-    <p nevow:render="i18n">Good morning</p>
-
-    <p>
-      We'll repeat a translatable string, just to
-      trigger bugs:
-      <span nevow:render="i18n">Greeting</span>
-    </p>
-
-  </body>
-</html>

=== removed file 'Nevow/examples/i18n/i18n.py'
--- Nevow/examples/i18n/i18n.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/i18n.py	1970-01-01 00:00:00 +0000
@@ -1,78 +0,0 @@
-import os
-
-from twisted.python import util
-
-from nevow import inevow, loaders, rend, tags as T, url
-from nevow.i18n import _, I18NConfig
-
-
-LOCALE_DIR = util.sibpath(__file__, 'locale')
-
-
-langs = [d for d in os.listdir(LOCALE_DIR) if d != '.svn']
-langs.sort()
-
-class Common(rend.Page):
-    
-    addSlash = True
-    
-    def renderHTTP(self, ctx):
-        
-        # We're only overriding renderHTTP to look for a 'lang' query parameter
-        # without cluttering up the messages renderer, below.
-        
-        # If 'lang' is present then we "force" the translation language. This
-        # simulates how user preferences from the session might be used to
-        # override the browser's language settings.
-        lang = ctx.arg('lang')
-        if lang is not None:
-            ctx.remember([lang], inevow.ILanguages)
-            
-        # Let the base class handle it, really.
-        return rend.Page.renderHTTP(self, ctx)
-
-    def render_langs(self, ctx, data):
-        """Render a list of links to select from the available translations.
-        """
-        out = [T.a(href=url.here.remove('lang'))['default'], ' | ']
-        for lang in langs:
-            out.append(T.a(href=url.here.replace('lang', lang))[lang])
-            out.append(' | ')
-        return out[:-1]
-
-class Page(Common):
-    def render_message(self, ctx, data):
-        """Render a localised message. The _(..) construct looks the
-        translation up at render time.
-        """
-        return ctx.tag.clear()[_('Hello')]
-
-    def render_formatstrings(self, ctx, data):
-        return ctx.tag.clear()[
-            "Demonstration of i18n'ed string formatting: ",
-            _("%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers")
-            % { 'first': 1,
-                'second': '1',
-                'result': 50,
-                'roman': 'II',
-                },
-            ]
-
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.p['Select your preferred language: ', T.directive('langs')],
-                T.p[render_message],
-                T.p[render_formatstrings],
-                ],
-            ],
-        )
-
-def preparePage(pageFactory):
-    root = pageFactory()
-    # Configure the I18N stuff
-    root.remember(I18NConfig(domain='test', localeDir=LOCALE_DIR), inevow.II18NConfig)
-    return root
-
-def createResource():
-    return preparePage(Page)

=== removed directory 'Nevow/examples/i18n/locale'
=== removed directory 'Nevow/examples/i18n/locale/de'
=== removed directory 'Nevow/examples/i18n/locale/de/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/de/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/de/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/de/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/de/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/de/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/de/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: 2005-02-18 20:50+0200\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Guten Morgen"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Der Gruß"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Guten Tag"

=== removed directory 'Nevow/examples/i18n/locale/en'
=== removed directory 'Nevow/examples/i18n/locale/en-us'
=== removed directory 'Nevow/examples/i18n/locale/en-us/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/en-us/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: 2005-09-02 21:11+0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-"Add %(first)d to %(second)c and you get %(result)c. Romans would call that %"
-"(roman)s."
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Morning, man"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Say hi"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Yo, dude!"

=== removed directory 'Nevow/examples/i18n/locale/en/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/en/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/en/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/en/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/en/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/en/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/en/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: 2005-02-18 20:49+0200\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Good morning"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Greeting"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Hello"

=== removed directory 'Nevow/examples/i18n/locale/fi'
=== removed directory 'Nevow/examples/i18n/locale/fi/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/fi/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: 2005-09-02 21:10+0300\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-"%(first)d ynnä %(second)c on yhtä kuin %(result)c, tai %(roman)s "
-"roomalaisina numeroina"
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Hyvää huomenta"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Tervehdys"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Hyvää päivää"

=== removed directory 'Nevow/examples/i18n/locale/fr'
=== removed directory 'Nevow/examples/i18n/locale/fr/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/fr/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Bon matin"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Salutation"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Bonjour"

=== removed directory 'Nevow/examples/i18n/locale/it'
=== removed directory 'Nevow/examples/i18n/locale/it/LC_MESSAGES'
=== removed file 'Nevow/examples/i18n/locale/it/LC_MESSAGES/test.mo'
Binary files Nevow/examples/i18n/locale/it/LC_MESSAGES/test.mo	2005-10-14 17:36:24 +0000 and Nevow/examples/i18n/locale/it/LC_MESSAGES/test.mo	1970-01-01 00:00:00 +0000 differ
=== removed file 'Nevow/examples/i18n/locale/it/LC_MESSAGES/test.po'
--- Nevow/examples/i18n/locale/it/LC_MESSAGES/test.po	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/locale/it/LC_MESSAGES/test.po	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR ORGANIZATION
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-02-18 00:27+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@xxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: utf-8\n"
-"Generated-By: pygettext.py 1.5\n"
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-
-#: hello.html:13
-msgid "Good morning"
-msgstr "Buona mattina"
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr "Saluto"
-
-#: i18n.py:48
-msgid "Hello"
-msgstr "Buon giorno"

=== removed file 'Nevow/examples/i18n/test.pot'
--- Nevow/examples/i18n/test.pot	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/test.pot	1970-01-01 00:00:00 +0000
@@ -1,17 +0,0 @@
-#: i18n.py:48
-msgid "Hello"
-msgstr ""
-
-#: i18n.py:53
-#, python-format
-msgid ""
-"%(first)d plus %(second)c equals %(result)c, or %(roman)s in roman numbers"
-msgstr ""
-
-#: hello.html:6 hello.html:18
-msgid "Greeting"
-msgstr ""
-
-#: hello.html:13
-msgid "Good morning"
-msgstr ""

=== removed file 'Nevow/examples/i18n/update-l10n'
--- Nevow/examples/i18n/update-l10n	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/update-l10n	1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-#!/bin/sh
-set -e
-
-xgettext \
-    --omit-header \
-    --output - \
-    --language=Python \
-    -- \
-    i18n.py \
->test-stan.pot.tmp
-
-../../bin/nevow-xmlgettext hello.html \
->test-xml.pot.tmp
-
-msgcat -o - test-stan.pot.tmp test-xml.pot.tmp \
->test.pot.tmp
-mv test.pot.tmp test.pot
-
-rm test-stan.pot.tmp test-xml.pot.tmp
-
-for PO in locale/*/LC_MESSAGES/test.po; do
-    msgmerge --quiet "$PO" test.pot \
-	| msgattrib --no-obsolete --sort-output \
-	>"$PO.tmp"
-    mv "$PO.tmp" "$PO"
-
-    msgfmt -o "${PO%.po}.mo" "$PO"
-done
-
-tobedone() {
-    DESCRIPTION="$1"; shift
-
-    for PO in locale/*/LC_MESSAGES/test.po; do
-	msgattrib --no-obsolete "$@" "$PO"
-    done \
-	>"l10n-update.$$.tmp"
-    
-    if [ -s "l10n-update.$$.tmp" ]; then
-	echo "# $DESCRIPTION"
-	cat "l10n-update.$$.tmp"
-    fi
-    rm "l10n-update.$$.tmp"
-}
-
-tobedone 'UNTRANSLATED' --untranslated
-tobedone 'FUZZY' --only-fuzzy
-

=== removed file 'Nevow/examples/i18n/xmli18n.py'
--- Nevow/examples/i18n/xmli18n.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/i18n/xmli18n.py	1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-import os
-from nevow import loaders
-from nevow.i18n import render as i18nrender
-from i18n import Common, preparePage
-
-class Page(Common):
-    docFactory = loaders.xmlfile(
-        'hello.html',
-        templateDir=os.path.split(os.path.abspath(__file__))[0])
-
-    render_i18n = i18nrender()
-        
-def createResource():
-    return preparePage(Page)

=== removed directory 'Nevow/examples/image_uploader'
=== removed file 'Nevow/examples/image_uploader/images.py'
--- Nevow/examples/image_uploader/images.py	2006-01-22 00:10:42 +0000
+++ Nevow/examples/image_uploader/images.py	1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-from zope.interface import implements, Interface
-
-from axiom import store, item
-from axiom.attributes import text, bytes
-
-class IImages(Interface):
-    pass
-
-class Image(item.Item):
-    title = text()
-    author = text()
-    image = bytes()
-    hash = text()
-
-class Application(item.Item, item.InstallableMixin):
-    implements(IImages)
-
-    name = text()
-
-    def installOn(self, other):
-        super(Application, self).installOn(other)
-        other.powerUp(self, IImages)
-
-    def getImages(self, how_many=None):
-        return self.store.query(Image, limit=how_many, sort=Image.storeID.descending)
-
-    def getOne(self, hash):
-        return self.store.findUnique(Image, Image.hash==hash)
-
-def initialize():
-   s = store.Store('imagination.axiom')
-   images = IImages(s, None)
-   if not images:
-       Application(store=s, name=u'Imagination').installOn(s)
-   return s

=== removed file 'Nevow/examples/image_uploader/imagination.py'
--- Nevow/examples/image_uploader/imagination.py	2006-03-17 15:00:39 +0000
+++ Nevow/examples/image_uploader/imagination.py	1970-01-01 00:00:00 +0000
@@ -1,85 +0,0 @@
-from zope.interface import implements
-
-from nevow import loaders, rend, tags as t, static, url
-from formless import webform, annotate
-
-from images import Image, IImages
-
-import random
-from string import ascii_letters as alpha # ohhh...
-
-alphaDigit = alpha + '0123456789'
-
-def label(length=None):
-   """
-   Return one of 183,123,959,522,816 possible labels.
-   """
-
-   first = random.choice(alpha)
-   rest = [random.choice(alphaDigit) for i in xrange(length or 7)]
-   newLabel = first + ''.join(rest)
-   return newLabel
-
-class IInsert(annotate.TypedInterface):
-    def insert(ctx = annotate.Context(),
-               title = annotate.String(),
-               author = annotate.String(),
-               image = annotate.FileUpload(required=True,
-                                           requiredFailMessage="Must upload something")
-               ):
-        """ Insert a new image """
-    insert = annotate.autocallable(insert, action="New Image")
-
-class TransactionalPage(rend.Page):
-    adaptsToStore = False
-    def __init__(self, store, *args, **kwargs):
-        super(TransactionalPage, self).__init__(*args, **kwargs)
-        self.store = store
-
-    def locateChild(self, ctx, segments):
-        return self.store.transact(super(TransactionalPage, self).locateChild, ctx, segments)
-
-    def renderHTTP(self, ctx):
-        return self.store.transact(super(TransactionalPage, self).renderHTTP, ctx)
-
-
-class Root(TransactionalPage):
-    child_webform_css = webform.defaultCSS
-    implements(IInsert)
-
-    docFactory = loaders.stan(
-        t.html[
-            t.head[
-                t.title['Imagination'],
-                t.link(rel='stylesheet', type='text/css', href=url.root.child('webform_css'))
-            ],
-            t.body[
-                webform.renderForms(),
-                t.ul(render=t.directive("sequence"), 
-                     data=t.directive("images"))[
-                         t.li(pattern="item", render=t.directive("image")),
-                         t.li(pattern="empty")["No images yet"]
-                ]
-            ]
-        ]
-    )
-
-    def data_images(self, ctx, data):
-        return IImages(self.store).getImages(15)
-
-    def render_image(self, ctx, data):
-        return t.a(href=url.root.child('fs').child(data.hash))[data.title]
-
-    def insert(self, ctx, title, author, image):
-        img = Image(store=self.store,
-                    image=image.value,
-                    title=title.decode('utf-8'),
-                    author=author.decode('utf-8'),
-                    hash=label().decode('utf-8'))
-
-    def locateChild(self, ctx, segments):
-        if segments[0] == 'fs':
-            data = IImages(self.store).getOne(segments[1].decode('utf-8'))
-            return static.Data(data.image, 'image/jpeg'), ()
-        return super(Root, self).locateChild(ctx, segments)
-

=== removed file 'Nevow/examples/image_uploader/imagination.tac'
--- Nevow/examples/image_uploader/imagination.tac	2006-01-22 00:10:42 +0000
+++ Nevow/examples/image_uploader/imagination.tac	1970-01-01 00:00:00 +0000
@@ -1,9 +0,0 @@
-from twisted.application import service, strports
-from nevow import appserver
-
-import imagination, images
-
-application = service.Application('image_uploader')
-db = images.initialize()
-site = appserver.NevowSite(resource = imagination.Root(db))
-strports.service("8080", site).setServiceParent(application)

=== removed file 'Nevow/examples/index.css'
--- Nevow/examples/index.css	2005-10-14 17:36:24 +0000
+++ Nevow/examples/index.css	1970-01-01 00:00:00 +0000
@@ -1,76 +0,0 @@
-
-
-
-body {
-    margin: 1em 1em;
-}
- 
-blockquote {
-    background-color: #E5E5E5;
-    text-align: center;
-}
- 
-.source {
-    padding: 0.25em 0.5em;
-    border: 1px solid #CCC;
-    background-color: #FFF9D9;
-    margin-top: 2px;
-}
- 
-li {
-    margin-top: 20px;
-}	
- 
-h1 {
-   background-color: #E6F4FF;
-   border-top: 2px solid #B2DDFF;
-   border-bottom: 2px solid #B2DDFF;
-   padding: 0 0.5em;
-}
- 
- 
-table {
-    border-bottom: 1px solid #CCC;
-}
- 
-table td {
-    white-space: nowrap;
-    padding: 0px 5px 0px 0px;
-}
-
-
-
-
-
-.py-src-comment
-{
-  color: #1111CC
-}
-
-.py-src-keyword
-{
-  color: #3333CC;
-  font-weight: bold;
-}
-
-.py-src-parameter
-{
-  color: #000066;
-  font-weight: bold;
-}
-
-.py-src-identifier
-{
-  color: #CC0000
-}
-
-.py-src-string
-{
-  
-  color: #115511
-}
-
-.py-src-endmarker
-{
-  display: block; /* IE hack; prevents following line from being sucked into the py-listing box. */
-}

=== removed file 'Nevow/examples/index.html'
--- Nevow/examples/index.html	2009-07-06 12:22:09 +0000
+++ Nevow/examples/index.html	1970-01-01 00:00:00 +0000
@@ -1,1007 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-
-<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"; lang="en">
-<head>
-  <meta name="generator" content=
-  "HTML Tidy for Mac OS X (vers 12 April 2005), see www.w3.org" />
-
-  <title>Nevow Examples</title>
-  <link href="cssfile" type="text/css" rel="stylesheet" title=
-  "MainTheme" />
-</head>
-
-<body>
-  <div id="main">
-    <h1>Welcome to Nevow</h1>
-
-    <p>This page contains examples of how to build web applications
-    on top of Nevow, in order of increasing complexity. To get a
-    feel of how to structure your Python code while using Nevow,
-    the source of all examples is linked for easy reference. In
-    order to run each example, you will need Zope Interface,
-    Twisted, and Nevow installed, and then you will need to run the
-    example server.</p>
-
-    <p>Under <strong>windows</strong>: you need to run the Twisted
-    Shell from Start--&gt;Applications--&gt;Twisted menu. Under a
-    unix like operating system, make sure that the twistd binary is
-    on your PATH. Installing Twisted will do this for you.</p>
-
-    <p>To run the example server, go to the Nevow examples
-    directory (eg: C:\Nevow\examples or /usr/src/Nevow/examples)
-    and run the following command:</p>
-
-    <blockquote>
-      twistd -noy examples.tac
-    </blockquote>
-
-    <p>Then, to view the running examples, point your web browser
-    at: <a class="linkification-ext" href=
-    "http://localhost:8080/";>http://localhost:8080/</a></p>
-
-    <p>Once you are viewing this page as served by the example
-    server, all of the "live" links below will work.</p>
-
-    <h2>Table of Contents</h2>
-
-    <ol>
-      <li><a href="#tests">Test Suite</a></li>
-
-      <li><a href="#examples">Examples</a></li>
-
-      <li><a href="#livepage">LivePage/Canvas/XUL</a></li>
-
-      <li><a href="#taglibrary">Tag Library Examples</a></li>
-
-      <li><a href="#demoapp">Demo Applications</a></li>
-    </ol>
-
-    <h1 id="tests">Test Suite</h1>
-
-    <p>Nevow 0.4 now includes a live test runner which operates
-    inside of your web browser. The test runner currently operates
-    only under Firefox, and not IE or Safari. This will be fixed in
-    a future release. Test suites for some of the examples provided
-    here have been written. The following test suites may be
-    executed by visiting their respective pages:</p>
-
-    <ol>
-      <li><a href="/tests/">Run basic tests</a></li>
-
-      <li><a href="/formless_tests/">Run formless tests</a></li>
-
-      <li><a href="/livetests/">Run livepage example tests</a></li>
-
-      <li><a href="/testtests/tests/">Test test harness</a></li>
-    </ol>
-
-    <p>Athena also has <a href="/athenatest/">some tests</a>, although
-    there is not yet a fancy test runner like the one demonstrated
-    above.</p>
-
-    <h1 id="examples">Examples Listing</h1>
-
-    <ol>
-      <li>
-        <span>A Nevow example that doesn't use any of Nevow
-        automations</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/most_basic/most_basic.py">most_basic.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href=
-          "most_basic/">most_basic</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Hello world in Nevow</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/hello/hellostan.py">hellostan.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td><a href=
-                "sources/hello/hellohtml.py">hellohtml.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td><a href=
-                "sources/hello/hellohtml.html">hellohtml.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href="hellohtml/">xmlfile</a>,
-          <a href="hellostan/">Stan</a>
-        </div>
-      </li><!--
-
-  <li>
-
-                <span>Hello world in Nevow</span>
-
-                <div class="source">            
-
-                        <table width="100%"  border="0" cellspacing="0" cellpadding="0">
-
-                <tr>
-
-                        <td><a href="sources/hellostan.py">Stan Source</a></td>
-
-                        <td width="100%"></td>
-
-                        </tr>
-
-                <tr>
-
-                        <td><a href="b">xmlfile Source</a></td>
-
-                        <td></td>
-
-                        </tr>
-
-                <tr>
-
-                        <td><a href="c">xmlfile Template</a></td>
-
-                        <td></td>
-
-                        </tr>
-
-                </table>                        
-
-                    Live examples: <a href="hellohtml/">xmlfile</a>, <a href="hellostan/">Stan</a></div>
-
-  </li>
-
--->
-
-      <li>
-        <span>How to get Session and Request objects from the
-        context</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/simple/simple.py">simple.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td><a href=
-                "sources/simple/simplehtml.py">simplehtml.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td><a href=
-                "sources/simple/simplehtml.html">simplehtml.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href="simplehtml/">xmlfile</a>,
-          <a href="simple/">Stan</a><br />
-        </div>
-      </li>
-
-      <li>
-        <span>Render tables in Nevow</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td width="100%"><a href=
-                "sources/table/tablehtml.py">tablehtml.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td><a href=
-                "sources/table/tablehtml.html">tablehtml.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="tablehtml/">tables</a>
-        </div>
-      </li>
-
-      <li>
-        <span>How to use xmlfile directives</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/disktemplates/disktemplates_stan.py">disktemplates_stan.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td><a href=
-                "sources/disktemplates/disktemplates.py">disktemplates.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td><a href=
-                "sources/disktemplates/disktemplates.html">disktemplates.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href=
-          "disktemplates/">xmlfile</a>, <a href=
-          "disktemplates_stan/">Stan</a>
-        </div>
-      </li>
-
-      <li>
-        <span>How to handles page children with Nevow, and how to
-        use the &lt;nevow:attr&gt; tag</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/children/children.py">children.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td><a href=
-                "sources/children/childrenhtml.py">childrenhtml.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Templates</td>
-
-                <td><a href=
-                "sources/children/childrenhtml_RootPage.html">childrenhtml_RootPage.html</a><br />
-
-                <a href=
-                "sources/children/childrenhtml_ChildPage.html">childrenhtml_ChildPage.html</a><br />
-
-                <a href=
-                "sources/children/childrenhtml_ChildOfChildPage.html">
-                childrenhtml_ChildOfChildPage.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href="children/">stan</a>,
-          <a href="childrenhtml/">xmlfile</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Use Fragments to divide a page in logical
-        components</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/fragments/fragments.py">fragments.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td width="100%"><a href=
-                "sources/fragments/main.html">main.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="fragments/">fragments</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Use Macro directive to compose pages by transforming
-        the docFactory at precompile time</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/macros/macros.py">macros.py</a></td>
-              </tr>
-
-              <tr>
-                <td>xmlfile Template</td>
-
-                <td><a href=
-                "sources/macros/main.html">main.html</a><br />
-                <a href=
-                "sources/macros/root_macro.html">root_macro.html</a><br />
-
-                <a href=
-                "sources/macros/child_macro.html">child_macro.html</a><br />
-                </td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="macros/">macros</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Allow data= directives to look inside application
-        objects</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/objcontainer/objcontainer.py">objcontainer.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "objcontainer/">objcontainer</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Use nested sequences to render an attribute of type
-        list of an object</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/nestedsequence/nestedsequence.py">nestedsequence.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "nestedsequence/">nestedsequence</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Manual form example</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/manualform/manualform.py">manualform.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="manualform/">form</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Advanced manual form example</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/advanced_manualform/advanced_manualform.py">
-                advanced_manualform.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "advanced_manualform/">form</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Formless example</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/formpost/formpost.py">formpost.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="formpost/">formpost</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Another formless example, but a little bit more
-        complex</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/formpost/formpost2.py">formpost2.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="formpost2/">formpost2</a>
-        </div>
-      </li>
-
-      <li>
-        <span><b>[0.5]</b>Using formless to create multi-step
-        wizards by returning Page instances from
-        autocallables</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/tests/testformless.py">tests/testformless.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "testformless">testformless</a>
-        </div>
-      </li>
-
-      <li>
-        <span><b>[0.5]</b>Using formless, return a URL instance
-        from an autocallable to redirect to it</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/tests/testformless.py">tests/testformless.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "formless_redirector">formless_redirector</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Example of interacting with a database</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source:</td>
-
-                <td width="100%"><a href=
-                "sources/db/db.py">db.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href="db/">db</a>
-        </div>
-      </li>
-
-      <li>
-        <span>An example of using HTTP Basic Auth for simple
-        authentication</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/http_auth/http_auth.py">http_auth.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="http_auth/">http_auth</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Various examples of how to integrate twisted.guard
-        with Nevow for authentication</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/guarded/guarded.py">guarded.py</a></td>
-              </tr>
-
-              <tr>
-                <td>Stan Source</td>
-
-                <td><a href=
-                "sources/guarded/guarded2.py">guarded2.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href="guarded/">guarded</a>,
-          <a href="guarded2/">guarded2</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Examples of how to access the session when a user
-        logs out of guarded sites</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/logout_guard/logout_guard.py">logout_guard.py</a></td>
-              </tr>
-
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/logout_guard/logout_guard2.py">logout_guard2.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live examples: <a href=
-          "logout_guard/">logout_guard</a>, <a href=
-          "logout_guard2/">logout_guard2</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Use Configurables to render a form with Formless in a
-        customized template</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td width="100%"><a href=
-                "sources/customform/customform.py">customform.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "customform/">customform</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Dynamically build your forms</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/formbuilder/formbuilder.py">formbuilder.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "formbuilder/">formbuilder</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Adapting an object to the IRenderer interface in
-        order to make it render itself</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/irenderer/simple_irenderer.py">simple_irenderer.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="simple_irenderer/">simple
-          IRenderer</a>
-        </div>
-      </li>
-
-      <li>
-        <span>More complex example of adapting objects to IRenderer
-        and to different interfaces</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/irenderer/irenderer.py">irenderer.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="irenderer/">IRenderer</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Handling and building a Tree structure dynamically on
-        yor site</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/tree/tree.py">tree.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="tree/">tree</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Simple example of text localisation</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/i18n/i18n.py">i18n.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="i18n/">i18n</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Localisation of disk templates</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>xmlfile Source</td>
-
-                <td width="100%"><a href=
-                "sources/i18n/hello.html">hello.html</a></td>
-              </tr>
-
-              <tr>
-                <td>Python Source</td>
-
-                <td width="100%"><a href=
-                "sources/i18n/diski18n.py">xmli18n.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="xmli18n/">xmli18n</a>
-        </div>
-      </li>
-    </ol>
-
-    <h1 id="livepage">LivePage/Canvas/XUL</h1>
-
-    <ul>
-      <li>
-        <span>LiveAnimal: A small LivePage game</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Python Source</td>
-
-                <td width="100%"><a href=
-                "sources/liveanimal/liveanimal.py">liveanimal.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href=
-          "liveanimal/">liveanimal</a>
-        </div>
-      </li>
-
-      <li>
-      <span>TypeAhead: Using asynchronous remote method invocation from
-        JavaScript to complete what the user is typing.
-      </span>
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Python Source</td>
-                <td width="100%"><a
-                    href="sources/athenademo/typeahead.py">typeahead.py</a></td>
-              </tr>
-              <tr><td>HTML Template</td>
-
-                <td><a href=
-                    "sources/athenademo/typeahead.html">tablehtml.html</a></td></tr>
-            </tbody>
-          </table>Live example: <a href="typeahead/">typeahead</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Calculator: A simple server-side calculator. All button presses and calculations
-        are processed at the server.</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Python Source</td>
-                <td width="100%"><a href="sources/athenademo/calculator.py">calculator.py</a></td>
-              </tr>
-              <tr>
-                <td>HTML Template</td>
-                <td width="!00%"><a href="sources/athenademo/calculator.html">calculator.html</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="calculator">calculator</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Widgets: An example of using Athena Widgets to define custom
-        methods for manipulating particular sections of a page's DOM, as
-        well as communicating in both directions between the client and
-        server.</span>
-        
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Python Source</td>
-                <td width="100%"><a href="sources/athenademo/widgets.py">widgets.py</a></td>
-              </tr>
-              <tr>
-                <td>JavaScript Source</td>
-                <td width="100%"><a href="sources/athenademo/widgets.js">widgets.js</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="widgets">widgets</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Integration between Flash(TM) and Nevow</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/canvas/canvas.py">canvas.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="canvas/">canvas</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Integration between XUL and Nevow</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/xul/xul_nevow.py">xul_nevow.py</a></td>
-              </tr>
-
-              <tr>
-                <td>XUL Source</td>
-
-                <td width="100%"><a href=
-                "sources/xul/xul_example.xul">xul_example.xul</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="xul_nevow/">xul_nevow</a>
-        </div>
-      </li>
-    </ul>
-
-    <h1 id="taglibrary">Tag Library Examples</h1>
-
-    <ul>
-      <li>
-        <span>How to use the Calendar tag from the
-        taglibrary</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/cal/cal.py">cal.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="calendar/">calendar</a>
-        </div>
-      </li>
-
-      <li>
-        <span>How to use the TabbedPane tag from the
-        taglibrary</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/tabbed/tabbed.py">tabbed.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="tabbed/">tabbed</a>
-        </div>
-      </li>
-
-      <li>
-        <span>How to use the Progressbar tag from the
-        taglibrary</span>
-
-        <div class="source">
-          <table border="0" cellpadding="0" cellspacing="0" width=
-          "100%">
-            <tbody>
-              <tr>
-                <td>Stan Source</td>
-
-                <td width="100%"><a href=
-                "sources/progress/progress.py">progress.py</a></td>
-              </tr>
-            </tbody>
-          </table>Live example: <a href="progress/">progress</a>
-        </div>
-      </li>
-    </ul>
-
-    <h1 id="demoapp">Demo Applications</h1>
-
-    <ul>
-      <li>
-        <span>Extremely basic library, made with axiom (redesigned atop)</span>
-
-        <div class="source">
-          xmlfile Source: <a href="sources/with_axiom">with_axiom</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Handling users in a web site</span>
-
-        <div class="source">
-          Stan Source: <a href="sources/userdb">userdb</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Pastebin example with nevow</span>
-
-        <div class="source">
-          Source: <a href="sources/pastebin">pastebin</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Blog engine</span>
-
-        <div class="source">
-          Source: <a href="sources/blogengine">blogengine</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Link storage webservice (uses Twisted's
-        XML-RPC)</span>
-
-        <div class="source">
-          Source: <a href="sources/postit">postit</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Todo list with rails like file structure (requires
-        pgasync 1.3b and postgres)</span>
-
-        <div class="source">
-          Source: <a href="sources/todo">todo</a>
-        </div>
-      </li>
-
-      <li>
-        <span>Image uploader that uses axiom</span>
-
-        <div class="source">
-          Source: <a href="sources/image_uploader">imagination</a>
-        </div>
-      </li>
-    </ul>
-  </div>
-</body>
-</html>

=== removed directory 'Nevow/examples/irenderer'
=== removed file 'Nevow/examples/irenderer/__init__.py'
=== removed file 'Nevow/examples/irenderer/irenderer.py'
--- Nevow/examples/irenderer/irenderer.py	2006-03-08 14:28:41 +0000
+++ Nevow/examples/irenderer/irenderer.py	1970-01-01 00:00:00 +0000
@@ -1,143 +0,0 @@
-############################################################################
-# Example of registering rendering adapters for object types so that
-# the page doesn't have to know anything about about the objects, only
-# that it wants to render some particular view of the object.
-############################################################################
-
-
-import random
-from zope.interface import implements, Interface
-from twisted.python.components import registerAdapter, Adapter
-
-from nevow import inevow
-from nevow import loaders
-from nevow import rend
-from nevow import tags as T
-
-
-############################################################################
-# Define some simple classes for out application data.
-
-class Person:
-    def __init__(self, firstName, lastName, email):
-        self.firstName = firstName
-        self.lastName = lastName
-        self.email = email
-
-class Bookmark:
-    def __init__(self, name, url):
-        self.name = name
-        self.url = url
-
-
-############################################################################
-# Create interfaces for the different views of application objects.
-# These are nothing but marker interfaces to register a rendering adapt
-# for simplicity sake you can consider them to be named views.
-
-class ISummaryView(Interface):
-    """Render a summary of an object.
-    """
-
-class IFullView(Interface):
-    """Full view of the object.
-    """
-
-
-############################################################################
-# Define the rendering adapters that do the real work of rendering an
-# object.
-
-class PersonSummaryView(Adapter):
-    """Render a summary of a Person.
-    """
-    implements(inevow.IRenderer, ISummaryView)
-    def rend(self, data):
-        return T.div(_class="summaryView person")[
-            T.a(href=['mailto:',self.original.email])[
-                self.original.firstName, ' ', self.original.lastName
-                ]
-            ]
-
-class PersonFullView(Adapter):
-    """Render a full view of a Person.
-    """
-    implements(inevow.IRenderer, IFullView)
-    def rend(self, data):
-        attrs = ['firstName', 'lastName', 'email']
-        return T.div(_class="fullView person")[
-            T.p['Person'],
-            T.dl[
-                [(T.dt[attr], T.dd[getattr(self.original, attr)])
-                for attr in attrs]
-                ]
-            ]
-    
-class BookmarkSummaryView(Adapter):
-    """Render a summary of a Person.
-    """
-    implements(inevow.IRenderer, ISummaryView)
-    def rend(self, data):
-        return T.div(_class="summaryView bookmark")[
-            T.a(href=self.original.url)[self.original.name]
-            ]
-    
-class BookmarkFullView(Adapter):
-    """Render a full view of a Bookmark.
-    """
-    implements(inevow.IRenderer, IFullView)
-    def rend(self, data):
-        attrs = ['name', 'url']
-        return T.div(_class="fullView bookmark")[
-            T.p['Bookmark'],
-            T.dl[
-                [(T.dt[attr], T.dd[getattr(self.original, attr)])
-                for attr in attrs]
-                ]
-            ]
-    
-
-############################################################################
-# Register the rendering adapters. Note, these could easily be defined in
-# a text file and registered by name rather than class object.
-
-registerAdapter(PersonSummaryView, Person, ISummaryView)
-registerAdapter(PersonFullView, Person, IFullView)
-registerAdapter(BookmarkSummaryView, Bookmark, ISummaryView)
-registerAdapter(BookmarkFullView, Bookmark, IFullView)
-
-
-############################################################################
-# Create some data for the application to do something with.
-
-objs = [
-    Person('Matt', 'Goodall', 'matt@xxxxxxxxxxxxxxx'),
-    Bookmark('Nevow', 'http://www.nevow.com'),
-    Person('Somebody', 'Else', 'somebody@xxxxxxxx'),
-    Bookmark('Twisted', 'http://twistedmatrix.com/'),
-    Bookmark('Python', 'http://www.python.org'),
-    ]
-
-
-############################################################################
-# Page that simply renders a summary of the objects and chooses one at
-# random to display a full view of.
-
-class Page(rend.Page):
-
-    addSlash = True
-
-    def render_one(self, ctx, data):
-        return IFullView(random.choice(objs))
-
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.ul(data=objs, render=rend.sequence)[
-                T.li(pattern='item')[lambda c,d: ISummaryView(d)]
-                    ],
-                T.hr,
-                render_one,
-                ],
-            ]
-        )

=== removed file 'Nevow/examples/irenderer/simple_irenderer.py'
--- Nevow/examples/irenderer/simple_irenderer.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/irenderer/simple_irenderer.py	1970-01-01 00:00:00 +0000
@@ -1,127 +0,0 @@
-from zope.interface import implements
-
-from twisted.python.components import registerAdapter, Adapter
-
-from nevow import inevow
-from nevow import loaders
-from nevow import rend
-from nevow import tags as T
-
-##  Let's start from the beginning (apart from the various imports):
-
-##  We are provided 2 different classes, Person and Bookmark which contain some information (maybe built from a RDBMS 
-##  or directly from an OODB).
-
-##  Then the hard stuff begins (I'm not going to explain extensively how adaptation works since there's not enough room, 
-##  but I'm going to give you just a fast overview of how objects and adapter relate to each other):
-
-##  We need 2 different adapters since Person and Bookmark are not directly renderable and need some extra 
-##  transformations. What we do here with PersonView and BookmarkView is to define a class that inherits from
-##  Adapter and define a rend method.
-
-##  What is Adapter? Basically it is a class that accepts an argument in the constructor which is the object that 
-##  needs to be adapted to some other interface. Obviously the adapter will implement the interface we need (ie: inevow.
-##  IRenderer).
-
-##  Why do we need to implement IRenderer? An object that implements IRenderer is an object upon which a rend() method
-##  can be called safely. Since Nevow rendering pipeline uses rend() to serialize objects to html (remember that html tags 
-##  are objects too in Nevow) we need to implement that interface, which is built-in. The adapters we wrote, directly 
-##  implement IRenderer thus we can use them inside the rendering pipeline. Also each adapter holds a reference to the 
-##  corresponding object in self.original.
-
-##  Then 2 interesting lines:
-
-##  registerAdapter(PersonView, Person, inevow.IRenderer)
-##  registerAdapter(BookmarkView, Bookmark, inevow.IRenderer)
-
-##  Basically we are registering in Nevow object space, that PersonView and BookmarkView are the adapters for classes/
-##  objects Person and Bookmark to inevow.IRenderer. What does this mean? It means that when we will call inevow.
-##  IRenderer() interface [later in the Page class] with an instance of Person or Bookmark as argument we will receive the 
-##  right adapter as a result. Without these 2 lines, Nevow doesn't know anything about the way your objects are adapted 
-##  or referenced by each other.
-
-##  Then as usual we are creating a bunch of example objects in a list.
-
-##  And, last, but not least, we wrote a Page class that uses stan to render the objects list.
-
-############################################################################
-# Define some simple classes for out application data.
-
-class Person:
-    def __init__(self, firstName, lastName, nickname):
-        self.firstName = firstName
-        self.lastName = lastName
-        self.nickname = nickname
-
-class Bookmark:
-    def __init__(self, name, url):
-        self.name = name
-        self.url = url
-
-class PersonView(Adapter):
-    """Render a full view of a Person.
-    """
-    implements(inevow.IRenderer)
-    def rend(self, data):
-        attrs = ['firstName', 'lastName', 'nickname']
-        return T.div(_class="View person")[
-            T.p['Person'],
-            T.dl[
-                [(T.dt[attr], T.dd[getattr(self.original, attr)])
-                    for attr in attrs]
-                ]
-            ]
-
-class BookmarkView(Adapter):
-    """Render a full view of a Bookmark.
-    """
-    implements(inevow.IRenderer)
-    def rend(self, data):
-        attrs = ['name', 'url']
-        return T.div(_class="View bookmark")[
-            T.p['Bookmark'],
-            T.dl[
-                [(T.dt[attr], T.dd[getattr(self.original, attr)])
-                    for attr in attrs]
-                ]
-            ]
-    
-
-############################################################################
-# Register the rendering adapters. Note, these could easily be defined in
-# a text file and registered by name rather than class object.
-
-registerAdapter(PersonView, Person, inevow.IRenderer)
-registerAdapter(BookmarkView, Bookmark, inevow.IRenderer)
-
-############################################################################
-# Create some data for the application to do something with.
-
-objs = [
-    Person('Valetino', 'Volonghi', 'dialtone'),
-    Person('Matt', 'Goodall', 'mg'),
-    Bookmark('Nevow', 'http://www.nevow.com'),
-    Person('Somebody', 'Else', 'Nevow2004'),
-    Bookmark('Twisted', 'http://twistedmatrix.com/'),
-    Bookmark('Python', 'http://www.python.org'),
-    ]
-
-############################################################################
-# PSimple Page that renders objs list
-
-class Page(rend.Page):
-    
-    addSlash = True
-
-    def render_item(self, ctx, data):
-        return inevow.IRenderer(data)
-
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.ul(data=objs, render=rend.sequence)[
-                T.li(pattern='item')[render_item]
-                    ],
-                ],
-            ]
-        )

=== removed directory 'Nevow/examples/liveanimal'
=== removed file 'Nevow/examples/liveanimal/__init__.py'
=== removed file 'Nevow/examples/liveanimal/liveanimal.py'
--- Nevow/examples/liveanimal/liveanimal.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/liveanimal/liveanimal.py	1970-01-01 00:00:00 +0000
@@ -1,120 +0,0 @@
-
-
-import atexit, pickle
-from nevow import loaders, tags, livepage, inevow
-
-
-class node:
-    def __init__(self, question, positive=None, negative=None):
-        self.question = question
-        self.positive = positive
-        self.negative = negative
-
-    def clone(self):
-        return self.__class__(**vars(self))
-
-    def isLeaf(self):
-        return not (self.positive or self.negative)
-
-
-win = 'winnar'
-lose = lambda: node("I give up. What is the animal, and what question describes it?")
-
-
-def guess(animal):
-    return node("Is it " + animal + "?", win, lose())
-
-
-try:
-    knowledge = pickle.load(file('knowledge', 'rb'))
-except:
-    knowledge = lose()
-atexit.register(lambda: pickle.dump(knowledge, file('knowledge', 'wb')))
-
-
-class AnimalPage(livepage.LivePage):
-    addSlash = True
-    def locateChild(self, ctx, segments):
-        if ctx.arg('fresh') is not None:
-            global knowledge
-            knowledge = lose()
-        return super(AnimalPage, self).locateChild(ctx, segments)
-
-    def goingLive(self, ctx, client):
-        client.oldNode = knowledge
-        client.node = knowledge
-        client.send(self.handle_updateDom(ctx))
-
-    docFactory = loaders.stan(
-        tags.html[
-            tags.head[
-                tags.directive('liveglue')],
-            tags.body[
-                tags.h1["Live Animal"],
-                tags.div(id='question')[""],
-                tags.div(id='answer-inputs')[
-                    tags.form(
-                        name='new-question',
-                        pattern="leaf",
-                        onsubmit=[
-                            livepage.server.handle(
-                                'newquestion',
-                                livepage.get('animal').value,
-                                livepage.get('new-question').value),
-                            livepage.stop])[
-                        tags.input(name='animal', id='animal'),
-                        tags.input(name='new-question', id='new-question'),
-                        tags.button['Submit']],
-                    tags.invisible(pattern='branch')[
-                        tags.button(
-                            id="yes-response",
-                            onclick=livepage.server.handle('positiveResponse'))['Yes'],
-                        tags.button(
-                            id="no-response",
-                                onclick=livepage.server.handle('negativeResponse'))['No']]]]])
-
-    def handle_updateDom(self, ctx):
-        client = livepage.IClientHandle(ctx)
-        yield livepage.set('question', client.node.question), livepage.eol
-        if client.node.isLeaf():
-            yield livepage.set('answer-inputs', inevow.IQ(AnimalPage.docFactory).onePattern('leaf')), livepage.eol
-        else:
-            yield livepage.set('answer-inputs', inevow.IQ(AnimalPage.docFactory).onePattern('branch')), livepage.eol
-
-    def handle_newquestion(self, ctx, animal, question):
-        client = livepage.IClientHandle(ctx)
-        newNegative = client.oldNode.clone()
-    
-        client.oldNode.question = question
-        client.oldNode.positive = guess(animal)
-        client.oldNode.negative = newNegative
-    
-        client.node = knowledge
-        return self.handle_updateDom(ctx)
-
-    def handle_positiveResponse(self, ctx):
-        client = livepage.IClientHandle(ctx)
-        client.oldNode = client.node
-        client.node = client.node.positive
-        if client.node == win:
-            client.node = knowledge
-            yield livepage.set('question', "I win!"), livepage.eol
-            yield livepage.set(
-                'answer-inputs',
-                tags.button(
-                    id="start-over",
-                    onclick=livepage.server.handle('updateDom'))["Start over"]), livepage.eol
-        else:
-            yield self.handle_updateDom(ctx), livepage.eol
-    
-    def handle_negativeResponse(self, ctx):
-        client = livepage.IClientHandle(ctx)
-        client.oldNode = client.node
-        client.node = client.node.negative
-        return self.handle_updateDom(ctx)
-
-
-def createResource():
-    return AnimalPage()
-
-

=== removed file 'Nevow/examples/liveanimal/liveanimal.tac'
--- Nevow/examples/liveanimal/liveanimal.tac	2005-10-14 17:36:24 +0000
+++ Nevow/examples/liveanimal/liveanimal.tac	1970-01-01 00:00:00 +0000
@@ -1,13 +0,0 @@
-
-from nevow.appserver import NevowSite
-from liveanimal import createResource
-
-from twisted.application import service, internet
-
-application = service.Application('HADHF')
-internet.TCPServer(
-    4242,
-    NevowSite(
-        createResource(),
-        logPath="web.log")
-).setServiceParent(application)

=== removed directory 'Nevow/examples/livepage'
=== removed file 'Nevow/examples/livepage/__init__.py'
=== removed file 'Nevow/examples/livepage/livepage.py'
--- Nevow/examples/livepage/livepage.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/livepage/livepage.py	1970-01-01 00:00:00 +0000
@@ -1,25 +0,0 @@
-"""
-A short LivePage server.  Text inputted into the input box on the page is
-routed to the server, and the server echoes it back in an alert box.
-"""
-
-from twisted.internet import reactor
-
-from nevow import livepage, tags, loaders, appserver
-
-class LiveExamplePage(livepage.LivePage):
-    docFactory = loaders.stan(
-        tags.html[
-            tags.head[
-                livepage.glue],
-            tags.body[
-                tags.input(
-                    type="text",
-                    onchange="server.handle('change', this.value)")]])
-
-    def handle_change(self, ctx, value):
-        return livepage.alert(value)
-
-site = appserver.NevowSite(LiveExamplePage())
-reactor.listenTCP(8080, site)
-reactor.run()

=== removed directory 'Nevow/examples/logout_guard'
=== removed file 'Nevow/examples/logout_guard/__init__.py'
=== removed file 'Nevow/examples/logout_guard/logout_guard.py'
--- Nevow/examples/logout_guard/logout_guard.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/logout_guard/logout_guard.py	1970-01-01 00:00:00 +0000
@@ -1,68 +0,0 @@
-"""
-How to access the session from guard's logout function.
-"""
-
-# Some resource for our site
-from zope.interface import implements
-
-from nevow import guard
-from nevow import rend
-from nevow import loaders
-from nevow import tags as T
-from nevow import url
-
-class MyRootResource(rend.Page):
-    addSlash = True
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-               T.a(href=url.here.child(guard.LOGOUT_AVATAR))['Click here to log out']
-               ]
-            ]
-        )
-
-# Cred-specific implementation
-#
-
-from twisted.cred.portal import IRealm
-from nevow.inevow import IResource
-
-class Mind:
-    def __init__(self, request, credentials):
-        self.request = request
-        self.credentials = credentials
-
-class MyRealm:
-    implements(IRealm)
-    
-    def requestAvatar(self, avatar_id, mind, *interfaces):
-        if IResource in interfaces:
-            return (
-                IResource, 
-                MyRootResource(),
-                self.createLogout(avatar_id, mind)
-                )
-        raise NotImplementedError
-            
-    def createLogout(self, avatar_id, mind):
-        def logout():
-            # This will be a nevow.guard.GuardSession instance
-            session = mind.request.getSession()
-            print 'Logging avatar', avatar_id, 'out of session', session
-        return logout
-
-# Code for examples.tac
-#
-
-from twisted.cred.portal import Portal
-from twisted.cred.checkers import AllowAnonymousAccess
-from twisted.cred.credentials import IAnonymous
-from nevow.guard import SessionWrapper
-
-def createResource():
-    portal = Portal(MyRealm())
-    portal.registerChecker(AllowAnonymousAccess(), IAnonymous)
-
-    # Here is the vital part: specifying a mindFactory for guard to use
-    return SessionWrapper(portal, mindFactory=Mind)
-

=== removed file 'Nevow/examples/logout_guard/logout_guard2.py'
--- Nevow/examples/logout_guard/logout_guard2.py	2006-03-08 14:28:41 +0000
+++ Nevow/examples/logout_guard/logout_guard2.py	1970-01-01 00:00:00 +0000
@@ -1,108 +0,0 @@
-"""
-How to access the session from guard's logout function,
-with an example of remembering values within the session.
-"""
-
-# A resource for our site
-#
-
-import random
-from zope.interface import implements, Interface
-
-from nevow import guard
-from nevow import rend
-from nevow import loaders
-from nevow import tags as T
-from nevow import url
-from nevow.inevow import ISession
-
-class IValueHistory(Interface):
-    pass
-
-class ISessionValue(Interface):
-    pass
-
-class MyRootResource(rend.Page):
-    """Some resource."""
-
-    addSlash = True
-
-    def render_randomNumber(self, ctx, data):
-        session = ISession(ctx)
-        
-        number = random.randrange(0, 100)
-        session.setComponent(ISessionValue, number)
-        
-        history = session.getComponent(IValueHistory)
-        if history is None:
-            history = []
-        history.append(number)
-        session.setComponent(IValueHistory, history)
-        
-        return str(number)
-    
-    def render_valueHistory(self, ctx, data):
-        session = ISession(ctx)
-        history = session.getComponent(IValueHistory, default=[])
-        return repr(history[:-1])
-        
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-               T.p['Your random number is: ', render_randomNumber],
-               T.p['Previous random numbers were: ', render_valueHistory],
-               T.div[T.a(href=url.here)['Click here to get a new number']],
-               T.div[T.a(href=url.here.child(guard.LOGOUT_AVATAR))['Click here to log out']],
-               ]
-            ]
-        )
-
-# Cred-specific implementation
-#
-
-from twisted.cred.portal import IRealm
-from nevow.inevow import IResource
-
-class Mind:
-    def __init__(self, request, credentials):
-        self.request = request
-        self.credentials = credentials
-
-class MyRealm:
-    implements(IRealm)
-    
-    def requestAvatar(self, avatar_id, mind, *interfaces):
-        if IResource in interfaces:
-            return (
-                IResource, 
-                MyRootResource(),
-                self.createLogout(avatar_id, mind)
-                )
-        raise NotImplementedError
-            
-    def createLogout(self, avatar_id, mind):
-        def logout():
-            # This will be a nevow.guard.GuardSession instance
-            session = mind.request.getSession()
-            values = session.getComponent(IValueHistory)
-            session.unsetComponent(IValueHistory)
-            print 'Logging avatar', avatar_id, 'out of session', session
-            print 'Random numbers generated were', values
-        return logout
-
-# Code for examples.tac
-#
-
-from twisted.cred.portal import Portal
-from twisted.cred.checkers import AllowAnonymousAccess
-from twisted.cred.credentials import IAnonymous
-from nevow.guard import SessionWrapper
-
-def createResource():
-    portal = Portal(MyRealm())
-    portal.registerChecker(AllowAnonymousAccess(), IAnonymous)
-
-    # Here is the vital part: specifying a mindFactory for guard to use
-    return SessionWrapper(portal, mindFactory=Mind)
-
-    

=== removed directory 'Nevow/examples/macros'
=== removed file 'Nevow/examples/macros/__init__.py'
=== removed file 'Nevow/examples/macros/child_macro.html'
--- Nevow/examples/macros/child_macro.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/macros/child_macro.html	1970-01-01 00:00:00 +0000
@@ -1,16 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<n:invisible xmlns="http://www.w3.org/1999/xhtml"; lang="en" xmlns:n="http://nevow.com/ns/nevow/0.1";>
-  <p>
-    Again, as you see this page has run the macro
-    for this page. If you try to refresh you will see that the counter
-    won't increase. That's because the macro is called only once, but
-    different pages don't share the same expanded macro when you use
-    xhtml templates with xmlfile. Currently loaders.stan,
-    loaders.htmlfile, loaders.htmlstr, loaders.xmlstr do not allow
-    this 'macro sharing' functionality because of the way they handle
-    template cache. This will be fixed in the future.
-  </p>
-  <p n:render="advice" />
-  <p><a href="../">Back</a></p>
-</n:invisible>
\ No newline at end of file

=== removed file 'Nevow/examples/macros/macros.py'
--- Nevow/examples/macros/macros.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/macros/macros.py	1970-01-01 00:00:00 +0000
@@ -1,41 +0,0 @@
-from twisted.python import util
-from nevow import rend, tags as t, loaders
-
-import itertools
-counter1 = itertools.count()
-counter2 = itertools.count()
-
-inside_counter = itertools.count()
-
-class Base(rend.Page):
-    docFactory = loaders.xmlfile(util.sibpath(__file__, 'main.html'), ignoreDocType=True)
-    def render_advice(self, ctx, data):
-        return ctx.tag[
-            t.p["This counter has been called:"],
-            t.p(style="text-align: center")["===>",t.strong[inside_counter.next()+1],"<==="]
-        ]
-
-class Root(Base):
-    addSlash = True
-    
-    def macro_content(self, ctx):
-        return t.invisible[
-                   t.p["This macro has been called ",
-                       counter1.next()+1,
-                       " time(s)"],
-                   loaders.xmlfile(util.sibpath(__file__,'root_macro.html'), ignoreDocType=True).load()
-               ]
-
-    def childFactory(self, ctx, segment):
-        if segment == 'child':
-            return Child()
-
-class Child(Base):
-    addSlash=True
-    def macro_content(self, ctx):
-        return t.invisible[
-                   t.p["This macro has been called ",
-                       counter2.next()+1,
-                       " time(s)"],
-                   loaders.xmlfile(util.sibpath(__file__,'child_macro.html'), ignoreDocType=True).load()
-            ]

=== removed file 'Nevow/examples/macros/main.html'
--- Nevow/examples/macros/main.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/macros/main.html	1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<html xmlns="http://www.w3.org/1999/xhtml"; lang="en" xmlns:n="http://nevow.com/ns/nevow/0.1";>
-  <head>
-    <title>Macros Example</title>
-    <style type="text/css">
-p {
-text-align: justify;
-}
-#copyright {
-border-top: 1px solid #000;
-text-align: center;
-font-size: 10px;
-}
-h3 {
-border-bottom: 1px solid #000;
-}
-    </style>
-  </head>
-  <body>
-    <h3>FooBar Inc.</h3>
-    <div id="main">
-      <n:invisible n:macro="content" />
-      <p>
-        Instead of remaining constant this is incremented at
-        each reload, this means you can use macros also to return
-        complex templates that will be rendered using the other well knows
-        ways
-      </p>
-      <p>
-        If you wanna see the number above rise, just
-        modify 'macros_html.html' file in examples/ and save it, then
-        reload the page and look at that number again.
-      </p>
-    </div>
-    <p id="copyright">Copyright by FooBar Inc. bla bla</p>
-  </body>
-</html>
\ No newline at end of file

=== removed file 'Nevow/examples/macros/root_macro.html'
--- Nevow/examples/macros/root_macro.html	2005-10-14 17:36:24 +0000
+++ Nevow/examples/macros/root_macro.html	1970-01-01 00:00:00 +0000
@@ -1,22 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
-<n:invisible xmlns="http://www.w3.org/1999/xhtml"; lang="en" xmlns:n="http://nevow.com/ns/nevow/0.1";>
-  <p>
-    As you can see the macro has been expanded since
-    you can see this message in the template inside the main
-    div. Macros are expanded only during the first load at precompile
-    time. Expanding a macro means that each macro marked tag is
-    substituted with the result of a macro_somename call. In this case
-    the result is this text. This is particularly useful when you want
-    to create something alike MasterPage, or you want to dynamically
-    load some code for different components of a page, but only one
-    time. It may seem that macros solve the same problems that
-    Fragments do, this is true but only to a certain degree. While
-    Fragments are rendered each time, macros are only rendered
-    once and before everything else. Use macros when you
-    need to transform the main template once (or each time the
-    main template changes on disk)
-  </p>
-  <p n:render="advice" />
-  <p><a href="child">a child</a></p>
-</n:invisible>
\ No newline at end of file

=== removed directory 'Nevow/examples/manualform'
=== removed file 'Nevow/examples/manualform/__init__.py'
=== removed file 'Nevow/examples/manualform/manualform.py'
--- Nevow/examples/manualform/manualform.py	2007-02-28 15:14:26 +0000
+++ Nevow/examples/manualform/manualform.py	1970-01-01 00:00:00 +0000
@@ -1,35 +0,0 @@
-# Demonstrates one way of manually handling form post. This example uses a
-# "pretend" segment, _submit, for the form to post to (the action attribute).
-
-
-from nevow import loaders, rend, tags as T, url
-
-
-SUBMIT = '_submit'
-
-
-class Page(rend.Page):
-    
-    addSlash = True
-    
-    def locateChild(self, ctx, segments):
-
-        # Handle the form post
-        if segments[0] == SUBMIT:
-            # Just print out the name
-            print '*** name:', ctx.arg('name')
-            # Redirect away from the POST
-            return url.URL.fromContext(ctx), ()
-        
-        return rend.Page.locateChild(self, ctx, segments)
-    
-    docFactory = loaders.stan(
-        T.html[
-            T.body[
-                T.form(action=url.here.child(SUBMIT), method="post")[
-                    T.label['Name:'], T.input(type="text", name="name"),
-                    ],
-                ],
-            ]
-        )
-

=== removed directory 'Nevow/examples/most_basic'
=== removed file 'Nevow/examples/most_basic/__init__.py'
=== removed file 'Nevow/examples/most_basic/most_basic.py'
--- Nevow/examples/most_basic/most_basic.py	2005-10-14 17:36:24 +0000
+++ Nevow/examples/most_basic/most_basic.py	1970-01-01 00:00:00 +0000
@@ -1,72 +0,0 @@
-from zope.interface import implements
-
-from nevow import inevow
-
-##
-## How does a request come to the Page?
-##
-## or How to use Nevow without all the fancy automations
-##
-
-# This is a simple Root page object, the inevow.IResource interface
-# tells us that it must implement 2 methods:
-# locateChild and renderHTTP.
-# locateChild is used to find children of the current page, it must return a 
-# tuple of (page, remaining_segments)
-# if there is no page, and you want to display a 404 page, you will need to return
-# a None, () tuple.
-class Root(object):
-    implements(inevow.IResource)
-
-    def locateChild(self, ctx, segments):
-        # This locateChild is 'stupid' since it can only work if the tree of
-        # pages is static. Anyway it will work for our simple example
-        if segments[0] == '':
-            # If the server is looking for the root page segments will be ('',)
-            # then renderHTTP will be called on self
-            return self, ()
-        elif segments[0] == 'foo':
-            # Now we received a request whose segments had in the first position
-            # the string foo
-            # like http://example.org/foo/baz/ -> ('foo', 'baz')
-            # after the page has been located we return it with the remaining segments
-            # ('baz')
-            return self.foo, segments[1:]
-        else:
-            return None, ()
-        
-    def renderHTTP(self, ctx):
-        # When the server needs to return a response to the request it will call
-        # the renderHTTP method that will return a string of what needs to be sent.
-        return """<html><body>Hello world!<br />
-        <a href="./foo" id="foo">foo</a></body></html>
-"""
-
-class Foo(object):
-    implements(inevow.IResource)
-    
-    def locateChild(self, ctx, segments):
-        # segments is the remaining segments returned by the root locateChild
-        # see segments[1:]
-        if segments[0] == 'baz':
-            return self.baz, segments[1:]
-        else:
-            return None, ()
-    
-    def renderHTTP(self, ctx):
-        return """<html><body><h1 id="heading">You are in Foo</h1>
-        <a href="./foo/baz" id="baz">baz</a></body></html>
-"""
-
-class Baz(object):
-    implements(inevow.IResource)
-    def locateChild(self, ctx, segments):
-        return None, ()
-    def renderHTTP(self, ctx):
-        return '<html><body><h1 id="heading">You are in Baz</h1></body></html>'
-
-# We are adding children to the pages.
-# This could also happen inside the class.
-root = Root()
-root.foo = Foo()
-root.foo.baz = Baz()

=== removed directory 'Nevow/examples/nestedsequence'
=== removed file 'Nevow/examples/nestedsequence/__init__.py'
=== removed file 'Nevow/examples/nestedsequence/nestedsequence.py'
--- Nevow/examples/nestedsequence/nestedsequence.py	2006-04-14 17:23:46 +0000
+++ Nevow/examples/nestedsequence/nestedsequence.py	1970-01-01 00:00:00 +0000
@@ -1,40 +0,0 @@
-from twisted.python.components import registerAdapter
-from nevow import rend, loaders, tags as t, inevow, accessors
-
-class Edge(object):
-    pass
-
-class Vertex(object):
-    def __init__(self, name):
-        self.name = name
-        self.edges = []
-
-v1 = Vertex('v1')
-v2 = Vertex('v2')
-v3 = Vertex('v3')
-v1.edges = [Edge(), Edge(), Edge(), Edge()]
-v2.edges = [Edge(), Edge(), Edge(), Edge()]
-v3.edges = [Edge(), Edge(), Edge(), Edge()]
-
-class Root(rend.Page):
-    addSlash = True
-    docFactory = loaders.stan(
-        t.html[
-            t.head[t.title["Nested Sequence"]],
-            t.body[
-                t.ul(data=t.directive("vertexes"), render=t.directive("sequence"))[
-                    t.li(pattern="item")[

Follow ups