diff doc/builder.txt @ 226:4d8a9e03b23d trunk

Add reStructuredText documentation files.
author cmlenz
date Fri, 08 Sep 2006 08:44:31 +0000
parents
children 84168828b074
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/doc/builder.txt
@@ -0,0 +1,72 @@
+.. -*- mode: rst; encoding: utf-8 -*-
+
+==================================
+Generating Markup Programmatically
+==================================
+
+Markup provides a ``builder`` module which lets you generate markup from Python
+code using a very simple syntax. The main entry point to the ``builder`` module
+is the ``tag`` object (which is actually an instance of the ``ElementFactory``
+class). You should rarely (if ever) need to directly import and use any of the
+other classes in the ``builder`` module.
+
+
+.. contents:: Contents
+   :depth: 2
+.. sectnum::
+
+
+Creating Elements
+=================
+
+Elements can be created through the `tag` object using attribute access, for
+example::
+
+  >>> from markup.builder import tag
+  >>> doc = tag.p('Some text and ', tag.a('a link', href='http://example.org/'), '.')
+  >>> doc
+  <Element "p">
+
+This produces an ``Element`` instance which can be further modified to add child
+nodes and attributes. This is done by “calling” the element: positional
+arguments are added as child nodes (alternatively, the ``append`` method can be
+used for that purpose), whereas keywords arguments are added as attributes::
+
+  >>> doc(tag.br)
+  <Element "p">
+  >>> print doc
+  <p>Some text and <a href="http://example.org/">a link</a>.<br/></p>
+
+If an attribute name collides with a Python keyword, simply append an underscore
+to the name::
+
+  >>> doc(class_='intro')
+  <Element "p">
+  >>> print doc
+  <p class="intro">Some text and <a href="http://example.org/">a link</a>.<br/></p>
+
+As shown above, an ``Element`` can easily be directly rendered to XML text by
+printing it or using the Python ``str()`` function. This is basically a
+shortcut for converting the ``Element`` to a stream and serializing that
+stream::
+
+  >>> stream = doc.generate()
+  >>> stream
+  <markup.core.Stream object at 0x72d230>
+  >>> print stream
+  <p class="intro">Some text and <a href="http://example.org/">a link</a>.<br/></p>
+
+
+Creating Fragments
+==================
+
+The ``tag`` object also allows creating “fragments”, which are basically lists
+of nodes (elements or text) that don't have a parent element. This can be useful
+for creating snippets of markup that are attached to a parent element later (for
+example in a template). Fragments are created by calling the ``tag`` object:
+
+  >>> fragment = tag('Hello, ', tag.em('word'), '!')
+  >>> fragment
+  <Fragment>
+  >>> print fragment
+  Hello, <em>world</em>!
Copyright (C) 2012-2017 Edgewall Software