SHbYyJskmQm(9pmy5<>#}<
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
diff --git a/doc/logo.lineform/data b/doc/logo.lineform/data
index c206a90bed5034ddb1e23820377548d525cce187..f836e7144ec22c73b80c41d7a346dae4d66307e9
GIT binary patch
literal 8990
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
vu&=Y1p`+)5ToB?`8i3YutKT
diff --git a/doc/logo.png b/doc/logo.png
index e5bd44e66edfaabfd27366e681bc510c3db7d894..7b290a6dac09aa4be51289e983fc33240d45f812
GIT binary patch
literal 5170
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
diff --git a/doc/streams.txt b/doc/streams.txt
--- a/doc/streams.txt
+++ b/doc/streams.txt
@@ -25,12 +25,12 @@
For example, the functions ``XML()`` and ``HTML()`` can be used to convert
literal XML or HTML text to a markup stream::
- >>> from markup import XML
+ >>> from genshi import XML
>>> stream = XML('Some text and '
... 'a link.'
... '
')
>>> stream
-
+
The stream is the result of parsing the text into events. Each event is a tuple
of the form ``(kind, data, pos)``, where:
@@ -62,7 +62,7 @@
=========
One important feature of markup streams is that you can apply *filters* to the
-stream, either filters that come with Markup, or your own custom filters.
+stream, either filters that come with Genshi, or your own custom filters.
A filter is simply a callable that accepts the stream as parameter, and returns
the filtered stream::
@@ -87,8 +87,8 @@
stream = stream | noop
-One example of a filter included with Markup is the ``HTMLSanitizer`` in
-``markup.filters``. It processes a stream of HTML markup, and strips out any
+One example of a filter included with Genshi is the ``HTMLSanitizer`` in
+``genshi.filters``. It processes a stream of HTML markup, and strips out any
potentially dangerous constructs, such as Javascript event handlers.
``HTMLSanitizer`` is not a function, but rather a class that implements
``__call__``, which means instances of the class are callable.
@@ -96,7 +96,7 @@
Both the ``filter()`` method and the pipe operator allow easy chaining of
filters::
- from markup.filters import HTMLSanitizer
+ from genshi.filters import HTMLSanitizer
stream = stream.filter(noop, HTMLSanitizer())
That is equivalent to::
@@ -109,8 +109,9 @@
The ``Stream`` class provides two methods for serializing this list of events:
``serialize()`` and ``render()``. The former is a generator that yields chunks
-of ``Markup`` objects (which are basically unicode strings). The latter returns
-a single string, by default UTF-8 encoded.
+of ``Markup`` objects (which are basically unicode strings that are considered
+safe for output on the web). The latter returns a single string, by default
+UTF-8 encoded.
Here's the output from ``serialize()``::
@@ -144,11 +145,11 @@
In addition, the ``render()`` method takes an ``encoding`` parameter, which
defaults to “UTF-8”. If set to ``None``, the result will be a unicode string.
-The different serializer classes in ``markup.output`` can also be used
+The different serializer classes in ``genshi.output`` can also be used
directly::
- >>> from markup.filters import HTMLSanitizer
- >>> from markup.output import TextSerializer
+ >>> from genshi.filters import HTMLSanitizer
+ >>> from genshi.output import TextSerializer
>>> print TextSerializer()(HTMLSanitizer()(stream))
Some text and a link.
@@ -165,7 +166,7 @@
>>> substream = stream.select('a')
>>> substream
-
+
>>> print substream
a link
@@ -174,10 +175,10 @@
and cannot be rendered again. To work around this, you can wrap such a stream
in a ``list``::
- >>> from markup import Stream
+ >>> from genshi import Stream
>>> substream = Stream(list(stream.select('a')))
>>> substream
-
+
>>> print substream
a link
>>> print substream.select('@href')
diff --git a/doc/xml-templates.txt b/doc/xml-templates.txt
--- a/doc/xml-templates.txt
+++ b/doc/xml-templates.txt
@@ -1,10 +1,10 @@
.. -*- mode: rst; encoding: utf-8 -*-
============================
-Markup XML Template Language
+Genshi XML Template Language
============================
-Markup provides a simple XML-based template language that is heavily inspired
+Genshi provides a simple XML-based template language that is heavily inspired
by Kid_, which in turn was inspired by a number of existing template languages,
namely XSLT_, TAL_, and PHP_.
@@ -15,7 +15,7 @@
.. _php: http://www.php.net/
This document describes the template language and will be most useful as
-reference to those developing Markup templates. Templates are XML files of some
+reference to those developing Genshi templates. Templates are XML files of some
kind (such as XHTML) that include processing directives_ (elements or
attributes identified by a separate namespace) that affect how the template is
rendered, and template expressions_ that are dynamically substituted by
@@ -30,7 +30,7 @@
Python API
----------
-The Python code required for templating with Markup is generally based on the
+The Python code required for templating with Genshi is generally based on the
following pattern:
* Attain a ``Template`` object from a string or file object containing the
@@ -42,7 +42,7 @@
For example::
- from markup.template import Template
+ from genshi.template import Template
tmpl = Template('$title
')
stream = tmpl.generate(title='Hello, world!')
@@ -55,7 +55,7 @@
However, if you want includes_ to work, you should attain the template instance
through a ``TemplateLoader``, and load the template from a file::
- from markup.template import TemplateLoader
+ from genshi.template import TemplateLoader
loader = TemplateLoader([templates_dir])
tmpl = loader.load('test.html')
@@ -78,7 +78,7 @@
the curly braces may be omitted. In all other cases, the braces are required so
that the template processors knows where the expression ends::
- >>> from markup.template import Context, Template
+ >>> from genshi.template import Context, Template
>>> tmpl = Template('${items[0].capitalize()} item')
>>> print tmpl.generate(Context(items=['first', 'second']))
First item
@@ -88,7 +88,7 @@
attributes), and vice-versa (i.e. access attributes as if they were items in a
dictionary)::
- >>> from markup.template import Context, Template
+ >>> from genshi.template import Context, Template
>>> tmpl = Template('${dict.foo}')
>>> print tmpl.generate(Context(dict={'foo': 'bar'}))
bar
@@ -101,28 +101,28 @@
-------------------
Directives are elements and/or attributes in the template that are identified
-by the namespace ``http://markup.edgewall.org/``. They can affect how the
-template is rendered in a number of ways: Markup provides directives for
+by the namespace ``http://genshi.edgewall.org/``. They can affect how the
+template is rendered in a number of ways: Genshi provides directives for
conditionals and looping, among others.
To use directives in a template, the namespace should be declared, which is
usually done on the root element::
...
In this example, the default namespace is set to the XHTML namespace, and the
-namespace for Markup directives is bound to the prefix “py”.
+namespace for Genshi directives is bound to the prefix “py”.
All directives can be applied as attributes, and some can also be used as
elements. The ``if`` directives for conditionals, for example, can be used in
both ways::
...
@@ -134,7 +134,7 @@
This is basically equivalent to the following::
...
@@ -385,7 +385,7 @@
Inside the body of a ``py:match`` directive, the ``select(path)`` function is
made available so that parts or all of the original element can be incorporated
-in the output of the match template. See [wiki:MarkupStream#UsingXPath] for
+in the output of the match template. See [wiki:GenshiStream#UsingXPath] for
more information about this function.
This directive can also be used as an element::
@@ -474,7 +474,7 @@
Note that if a variable of the same name already existed outside of the scope
of the ``py:with`` directive, it will **not** be overwritten. Instead, it
will have the same value it had prior to the ``py:with`` assignment.
-Effectively, this means that variables are immutable in Markup.
+Effectively, this means that variables are immutable in Genshi.
.. _order:
@@ -516,7 +516,7 @@
file to be pulled in::
...
@@ -540,10 +540,10 @@
-See the XInclude_ for more about fallback content. Note though that Markup
+See the XInclude_ for more about fallback content. Note though that Genshi
currently only supports a small subset of XInclude.
-Incudes in Markup are fully dynamic: Just like normal attributes, the `href`
+Incudes in Genshi are fully dynamic: Just like normal attributes, the `href`
attribute accepts expressions_, and directives_ can be used on the
```` element just as on any other element, meaning you can do
things like conditional includes::
diff --git a/doc/xpath.txt b/doc/xpath.txt
--- a/doc/xpath.txt
+++ b/doc/xpath.txt
@@ -1,10 +1,10 @@
.. -*- mode: rst; encoding: utf-8 -*-
=====================
-Using XPath in Markup
+Using XPath in Genshi
=====================
-Markup provides basic XPath_ support for matching and querying event streams.
+Genshi provides basic XPath_ support for matching and querying event streams.
.. _xpath: http://www.w3.org/TR/xpath
@@ -18,7 +18,7 @@
Limitations
-----------
-Due to the streaming nature of the processing model, Markup uses only a subset
+Due to the streaming nature of the processing model, Genshi uses only a subset
of the `XPath 1.0`_ language.
.. _`XPath 1.0`: http://www.w3.org/TR/xpath
@@ -31,7 +31,7 @@
* ``descendant-or-self``
* ``self``
-This means you can't use the ``parent``, ancestor, or sibling axes in Markup
+This means you can't use the ``parent``, ancestor, or sibling axes in Genshi
(the ``namespace`` axis isn't supported either, but what you'd ever need that
for I don't know). Basically, any path expression that would require buffering
of the stream is not supported.
@@ -64,7 +64,7 @@
::
- from markup.input import XML
+ from genshi.input import XML
doc = XML('''
diff --git a/examples/basic/layout.html b/examples/basic/layout.html
--- a/examples/basic/layout.html
+++ b/examples/basic/layout.html
@@ -1,4 +1,4 @@
-
+
Hello ${hello}
diff --git a/examples/basic/run.py b/examples/basic/run.py
--- a/examples/basic/run.py
+++ b/examples/basic/run.py
@@ -5,7 +5,7 @@
import sys
import time
-from markup.template import TemplateLoader
+from genshi.template import TemplateLoader
def test():
base_path = os.path.dirname(os.path.abspath(__file__))
diff --git a/examples/basic/test.html b/examples/basic/test.html
--- a/examples/basic/test.html
+++ b/examples/basic/test.html
@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
diff --git a/examples/bench/basic.py b/examples/bench/basic.py
--- a/examples/bench/basic.py
+++ b/examples/bench/basic.py
@@ -4,10 +4,10 @@
import sys
import timeit
-__all__ = ['clearsilver', 'django', 'kid', 'markup', 'simpletal']
+__all__ = ['clearsilver', 'django', 'kid', 'genshi', 'simpletal']
-def markup(dirname, verbose=False):
- from markup.template import TemplateLoader
+def genshi(dirname, verbose=False):
+ from genshi.template import TemplateLoader
loader = TemplateLoader([dirname], auto_reload=False)
template = loader.load('template.html')
def render():
diff --git a/examples/bench/bigtable.py b/examples/bench/bigtable.py
--- a/examples/bench/bigtable.py
+++ b/examples/bench/bigtable.py
@@ -11,8 +11,8 @@
import cElementTree as cet
from elementtree import ElementTree as et
-from markup.builder import tag
-from markup.template import Template
+from genshi.builder import tag
+from genshi.template import Template
import neo_cgi
import neo_cs
import neo_util
@@ -38,16 +38,16 @@
table = [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10)
for x in range(1000)]
-markup_tmpl = Template("""
-
+genshi_tmpl = Template("""
+
""")
-markup_tmpl2 = Template("""
-
+genshi_tmpl2 = Template("""
+
""")
if DjangoTemplate:
@@ -64,22 +64,22 @@
context = DjangoContext({'table': table})
django_tmpl.render(context)
-def test_markup():
- """Markup template"""
- stream = markup_tmpl.generate(table=table)
+def test_genshi():
+ """Genshi template"""
+ stream = genshi_tmpl.generate(table=table)
stream.render('html', strip_whitespace=False)
-def test_markup_builder():
- """Markup template + tag builder"""
+def test_genshi_builder():
+ """Genshi template + tag builder"""
stream = tag.TABLE([
tag.tr([tag.td(c) for c in row.values()])
for row in table
]).generate()
- stream = markup_tmpl2.generate(table=stream)
+ stream = genshi_tmpl2.generate(table=stream)
stream.render('html', strip_whitespace=False)
def test_builder():
- """Markup tag builder"""
+ """Genshi tag builder"""
stream = tag.TABLE([
tag.tr([
tag.td(c) for c in row.values()
@@ -154,7 +154,7 @@
def run(which=None, number=10):
- tests = ['test_builder', 'test_markup', 'test_markup_builder', 'test_kid',
+ tests = ['test_builder', 'test_genshi', 'test_genshi_builder', 'test_kid',
'test_kid_et', 'test_et', 'test_cet', 'test_clearsilver',
'test_django']
if which:
diff --git a/examples/bench/markup/base.html b/examples/bench/genshi/base.html
rename from examples/bench/markup/base.html
rename to examples/bench/genshi/base.html
--- a/examples/bench/markup/base.html
+++ b/examples/bench/genshi/base.html
@@ -1,5 +1,5 @@
diff --git a/examples/bench/markup/template.html b/examples/bench/genshi/template.html
rename from examples/bench/markup/template.html
rename to examples/bench/genshi/template.html
--- a/examples/bench/markup/template.html
+++ b/examples/bench/genshi/template.html
@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
diff --git a/examples/includes/common/macros.html b/examples/includes/common/macros.html
--- a/examples/includes/common/macros.html
+++ b/examples/includes/common/macros.html
@@ -1,4 +1,4 @@
-
reference me, please
diff --git a/examples/includes/module/test.html b/examples/includes/module/test.html
--- a/examples/includes/module/test.html
+++ b/examples/includes/module/test.html
@@ -2,7 +2,7 @@
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
diff --git a/examples/includes/run.py b/examples/includes/run.py
--- a/examples/includes/run.py
+++ b/examples/includes/run.py
@@ -5,7 +5,7 @@
import sys
import timing
-from markup.template import Context, TemplateLoader
+from genshi.template import Context, TemplateLoader
def test():
base_path = os.path.dirname(os.path.abspath(__file__))
diff --git a/examples/includes/skins/default/layout.html b/examples/includes/skins/default/layout.html
--- a/examples/includes/skins/default/layout.html
+++ b/examples/includes/skins/default/layout.html
@@ -1,5 +1,5 @@
diff --git a/examples/transform/run.py b/examples/transform/run.py
--- a/examples/transform/run.py
+++ b/examples/transform/run.py
@@ -4,8 +4,8 @@
import os
import sys
-from markup.input import HTMLParser
-from markup.template import Context, Template
+from genshi.input import HTMLParser
+from genshi.template import Context, Template
def transform(html_filename, tmpl_filename):
tmpl_fileobj = open(tmpl_filename)
diff --git a/examples/transform/template.xml b/examples/transform/template.xml
--- a/examples/transform/template.xml
+++ b/examples/transform/template.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/examples/turbogears/README.txt b/examples/turbogears/README.txt
--- a/examples/turbogears/README.txt
+++ b/examples/turbogears/README.txt
@@ -1,4 +1,4 @@
-MarkupTest
+GenshiTest
This is a TurboGears (http://www.turbogears.org) project. It can be
started by running the start-markuptest.py script.
diff --git a/examples/turbogears/dev.cfg b/examples/turbogears/dev.cfg
--- a/examples/turbogears/dev.cfg
+++ b/examples/turbogears/dev.cfg
@@ -2,7 +2,7 @@
# This is where all of your settings go for your development environment
# Settings that are the same for both development and production
# (such as template engine, encodings, etc.) all go in
-# markuptest/config/app.cfg
+# genshitest/config/app.cfg
# DATABASE
@@ -33,7 +33,7 @@
# log_debug_info_filter.on = False
server.environment="development"
-autoreload.package="markuptest"
+autoreload.package="genshitest"
# Set to True if you'd like to abort execution if a controller gets an
# unexpected parameter. False by default
@@ -43,13 +43,13 @@
# Logging configuration generally follows the style of the standard
# Python logging module configuration. Note that when specifying
# log format messages, you need to use *() for formatting variables.
-# Deployment independent log configuration is in markuptest/config/log.cfg
+# Deployment independent log configuration is in genshitest/config/log.cfg
[logging]
[[loggers]]
-[[[markuptest]]]
+[[[gehsnitest]]]
level='DEBUG'
-qualname='markuptest'
+qualname='genshitest'
handlers=['debug_out']
[[[allinfo]]]
diff --git a/examples/turbogears/markuptest/__init__.py b/examples/turbogears/genshitest/__init__.py
rename from examples/turbogears/markuptest/__init__.py
rename to examples/turbogears/genshitest/__init__.py
diff --git a/examples/turbogears/markuptest/config/__init__.py b/examples/turbogears/genshitest/config/__init__.py
rename from examples/turbogears/markuptest/config/__init__.py
rename to examples/turbogears/genshitest/config/__init__.py
diff --git a/examples/turbogears/markuptest/config/app.cfg b/examples/turbogears/genshitest/config/app.cfg
rename from examples/turbogears/markuptest/config/app.cfg
rename to examples/turbogears/genshitest/config/app.cfg
--- a/examples/turbogears/markuptest/config/app.cfg
+++ b/examples/turbogears/genshitest/config/app.cfg
@@ -10,7 +10,7 @@
# which view (template engine) to use if one is not specified in the
# template name
-tg.defaultview = "markup"
+tg.defaultview = "genshi"
# The following kid settings determine the settings used by the kid serializer.
@@ -60,7 +60,7 @@
visit.manager="sqlobject"
# Database class to use for visit tracking
-visit.soprovider.model = "markuptest.model.Visit"
+visit.soprovider.model = "genshitest.model.Visit"
# IDENTITY
# General configuration of the TurboGears Identity management module
@@ -96,9 +96,9 @@
# The classes you wish to use for your Identity model. Remember to not use reserved
# SQL keywords for class names (at least unless you specify a different table
# name using sqlmeta).
-identity.soprovider.model.user="markuptest.model.User"
-identity.soprovider.model.group="markuptest.model.Group"
-identity.soprovider.model.permission="markuptest.model.Permission"
+identity.soprovider.model.user="genshitest.model.User"
+identity.soprovider.model.group="genshitest.model.Group"
+identity.soprovider.model.permission="genshitest.model.Permission"
# The password encryption algorithm used when comparing passwords against what's
# stored in the database. Valid values are 'md5' or 'sha1'. If you do not
diff --git a/examples/turbogears/markuptest/config/log.cfg b/examples/turbogears/genshitest/config/log.cfg
rename from examples/turbogears/markuptest/config/log.cfg
rename to examples/turbogears/genshitest/config/log.cfg
diff --git a/examples/turbogears/markuptest/controllers.py b/examples/turbogears/genshitest/controllers.py
rename from examples/turbogears/markuptest/controllers.py
rename to examples/turbogears/genshitest/controllers.py
--- a/examples/turbogears/markuptest/controllers.py
+++ b/examples/turbogears/genshitest/controllers.py
@@ -6,12 +6,12 @@
from turbogears import controllers, expose, validate, redirect, widgets
from turbogears import identity
-from markuptest import json
+from genshitest import json
-log = logging.getLogger("markuptest.controllers")
+log = logging.getLogger("genshitest.controllers")
class Root(controllers.RootController):
- @expose(template="markuptest.templates.welcome")
+ @expose(template="genshitest.templates.welcome")
def index(self):
import time
log.debug("Happy TurboGears Controller Responding For Duty")
@@ -19,11 +19,11 @@
widget=widgets.TextArea(name="widget_test",
default="This is a test of using "
"TurboGears widgets with "
- "Markup",
+ "Genshi",
rows=5, cols=40))
- @expose(template="markuptest.templates.login")
+ @expose(template="genshitest.templates.login")
def login(self, forward_url=None, previous_url=None, *args, **kw):
if not identity.current.anonymous \
diff --git a/examples/turbogears/markuptest/json.py b/examples/turbogears/genshitest/json.py
rename from examples/turbogears/markuptest/json.py
rename to examples/turbogears/genshitest/json.py
diff --git a/examples/turbogears/markuptest/model.py b/examples/turbogears/genshitest/model.py
rename from examples/turbogears/markuptest/model.py
rename to examples/turbogears/genshitest/model.py
--- a/examples/turbogears/markuptest/model.py
+++ b/examples/turbogears/genshitest/model.py
@@ -5,7 +5,7 @@
from turbogears import identity
from turbogears.database import PackageHub
-hub = PackageHub("markuptest")
+hub = PackageHub("genshitest")
__connection__ = hub
# class YourDataClass(SQLObject):
diff --git a/examples/turbogears/markuptest/release.py b/examples/turbogears/genshitest/release.py
rename from examples/turbogears/markuptest/release.py
rename to examples/turbogears/genshitest/release.py
--- a/examples/turbogears/markuptest/release.py
+++ b/examples/turbogears/genshitest/release.py
@@ -1,4 +1,4 @@
-# Release information about MarkupTest
+# Release information about GenshiTest
version = "1.0"
diff --git a/examples/turbogears/markuptest/static/images/favicon.ico b/examples/turbogears/genshitest/static/images/favicon.ico
rename from examples/turbogears/markuptest/static/images/favicon.ico
rename to examples/turbogears/genshitest/static/images/favicon.ico
diff --git a/examples/turbogears/markuptest/static/images/tg_under_the_hood.png b/examples/turbogears/genshitest/static/images/tg_under_the_hood.png
rename from examples/turbogears/markuptest/static/images/tg_under_the_hood.png
rename to examples/turbogears/genshitest/static/images/tg_under_the_hood.png
diff --git a/examples/turbogears/markuptest/templates/__init__.py b/examples/turbogears/genshitest/templates/__init__.py
rename from examples/turbogears/markuptest/templates/__init__.py
rename to examples/turbogears/genshitest/templates/__init__.py
diff --git a/examples/turbogears/markuptest/templates/login.html b/examples/turbogears/genshitest/templates/login.html
rename from examples/turbogears/markuptest/templates/login.html
rename to examples/turbogears/genshitest/templates/login.html
--- a/examples/turbogears/markuptest/templates/login.html
+++ b/examples/turbogears/genshitest/templates/login.html
@@ -1,7 +1,7 @@
diff --git a/examples/turbogears/markuptest/templates/master.html b/examples/turbogears/genshitest/templates/master.html
rename from examples/turbogears/markuptest/templates/master.html
rename to examples/turbogears/genshitest/templates/master.html
--- a/examples/turbogears/markuptest/templates/master.html
+++ b/examples/turbogears/genshitest/templates/master.html
@@ -1,6 +1,6 @@
diff --git a/examples/turbogears/markuptest/templates/sitetemplate.html b/examples/turbogears/genshitest/templates/sitetemplate.html
rename from examples/turbogears/markuptest/templates/sitetemplate.html
rename to examples/turbogears/genshitest/templates/sitetemplate.html
--- a/examples/turbogears/markuptest/templates/sitetemplate.html
+++ b/examples/turbogears/genshitest/templates/sitetemplate.html
@@ -1,6 +1,6 @@
diff --git a/examples/turbogears/markuptest/templates/welcome.html b/examples/turbogears/genshitest/templates/welcome.html
rename from examples/turbogears/markuptest/templates/welcome.html
rename to examples/turbogears/genshitest/templates/welcome.html
--- a/examples/turbogears/markuptest/templates/welcome.html
+++ b/examples/turbogears/genshitest/templates/welcome.html
@@ -1,6 +1,6 @@
diff --git a/examples/turbogears/markuptest/tests/__init__.py b/examples/turbogears/genshitest/tests/__init__.py
rename from examples/turbogears/markuptest/tests/__init__.py
rename to examples/turbogears/genshitest/tests/__init__.py
diff --git a/examples/turbogears/markuptest/tests/test_controllers.py b/examples/turbogears/genshitest/tests/test_controllers.py
rename from examples/turbogears/markuptest/tests/test_controllers.py
rename to examples/turbogears/genshitest/tests/test_controllers.py
--- a/examples/turbogears/markuptest/tests/test_controllers.py
+++ b/examples/turbogears/genshitest/tests/test_controllers.py
@@ -1,5 +1,5 @@
from turbogears import testutil
-from markuptest.controllers import Root
+from genshitest.controllers import Root
import cherrypy
cherrypy.root = Root()
diff --git a/examples/turbogears/markuptest/tests/test_model.py b/examples/turbogears/genshitest/tests/test_model.py
rename from examples/turbogears/markuptest/tests/test_model.py
rename to examples/turbogears/genshitest/tests/test_model.py
--- a/examples/turbogears/markuptest/tests/test_model.py
+++ b/examples/turbogears/genshitest/tests/test_model.py
@@ -5,7 +5,7 @@
# which is very fast.
from turbogears import testutil
-# from markuptest.model import YourDataClass, User
+# from genshitest.model import YourDataClass, User
# database.set_db_uri("sqlite:///:memory:")
diff --git a/examples/turbogears/sample-prod.cfg b/examples/turbogears/sample-prod.cfg
--- a/examples/turbogears/sample-prod.cfg
+++ b/examples/turbogears/sample-prod.cfg
@@ -4,7 +4,7 @@
# as a command-line option to your start script.
# Settings that are the same for both development and production
# (such as template engine, encodings, etc.) all go in
-# markuptest/config/app.cfg
+# genshitest/config/app.cfg
# pick the form for your database
# sqlobject.dburi="postgres://username@hostname/databasename"
@@ -44,7 +44,7 @@
# Logging configuration generally follows the style of the standard
# Python logging module configuration. Note that when specifying
# log format messages, you need to use *() for formatting variables.
-# Deployment independent log configuration is in markuptest/config/log.cfg
+# Deployment independent log configuration is in genshitest/config/log.cfg
[logging]
[[handlers]]
@@ -57,9 +57,9 @@
formatter='message_only'
[[loggers]]
-[[[markuptest]]]
+[[[genshitest]]]
level='ERROR'
-qualname='markuptest'
+qualname='genshitest'
handlers=['error_out']
[[[access]]]
diff --git a/examples/turbogears/setup.py b/examples/turbogears/setup.py
--- a/examples/turbogears/setup.py
+++ b/examples/turbogears/setup.py
@@ -2,10 +2,10 @@
from turbogears.finddata import find_package_data
import os
-execfile(os.path.join("markuptest", "release.py"))
+execfile(os.path.join("genshitest", "release.py"))
setup(
- name="MarkupTest",
+ name="GenshiTest",
version=version,
# uncomment the following lines if you fill them out in release.py
@@ -19,11 +19,11 @@
install_requires = [
"TurboGears >= 0.9a9dev-r1686",
],
- scripts = ["start-markuptest.py"],
+ scripts = ["start-genshitest.py"],
zip_safe=False,
packages=find_packages(),
- package_data = find_package_data(where='markuptest',
- package='markuptest'),
+ package_data = find_package_data(where='genshitest',
+ package='genshitest'),
keywords = [
# Use keywords if you'll be adding your package to the
# Python Cheeseshop
diff --git a/examples/turbogears/start-markuptest.py b/examples/turbogears/start-genshitest.py
rename from examples/turbogears/start-markuptest.py
rename to examples/turbogears/start-genshitest.py
--- a/examples/turbogears/start-markuptest.py
+++ b/examples/turbogears/start-genshitest.py
@@ -15,14 +15,14 @@
# probably installed
if len(sys.argv) > 1:
turbogears.update_config(configfile=sys.argv[1],
- modulename="markuptest.config")
+ modulename="genshitest.config")
elif exists(join(dirname(__file__), "setup.py")):
turbogears.update_config(configfile="dev.cfg",
- modulename="markuptest.config")
+ modulename="genshitest.config")
else:
turbogears.update_config(configfile="prod.cfg",
- modulename="markuptest.config")
+ modulename="genshitest.config")
-from markuptest.controllers import Root
+from genshitest.controllers import Root
turbogears.start_server(Root())
diff --git a/markup/__init__.py b/genshi/__init__.py
rename from markup/__init__.py
rename to genshi/__init__.py
--- a/markup/__init__.py
+++ b/genshi/__init__.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""This package provides various means for generating and processing web markup
(XML or HTML).
@@ -23,9 +23,9 @@
------------------
Literal XML and HTML text can be used to easily produce markup streams
-via helper functions in the `markup.input` module:
+via helper functions in the `genshi.input` module:
->>> from markup.input import XML
+>>> from genshi.input import XML
>>> doc = XML('
My document')
This results in a `Stream` object that can be used in a number of way.
@@ -33,7 +33,7 @@
>>> doc.render(method='html', encoding='utf-8')
'
My document'
->>> from markup.input import HTML
+>>> from genshi.input import HTML
>>> doc = HTML('
My document')
>>> doc.render(method='html', encoding='utf-8')
'My document'
@@ -44,13 +44,13 @@
Markup streams can also be generated programmatically using the
-`markup.builder` module:
+`genshi.builder` module:
->>> from markup.builder import tag
+>>> from genshi.builder import tag
>>> doc = tag.doc(tag.title('My document'), lang='en')
>>> doc.generate().render(method='html')
'My document'
"""
-from markup.core import *
-from markup.input import ParseError, XML, HTML
+from genshi.core import *
+from genshi.input import ParseError, XML, HTML
diff --git a/markup/builder.py b/genshi/builder.py
rename from markup/builder.py
rename to genshi/builder.py
--- a/markup/builder.py
+++ b/genshi/builder.py
@@ -5,13 +5,13 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
-from markup.core import Attrs, Namespace, QName, Stream, START, END, TEXT
+from genshi.core import Attrs, Namespace, QName, Stream, START, END, TEXT
__all__ = ['Fragment', 'Element', 'tag']
@@ -147,7 +147,7 @@
Elements with a namespace can be generated using the `Namespace` and/or
`QName` classes:
- >>> from markup.core import Namespace
+ >>> from genshi.core import Namespace
>>> xhtml = Namespace('http://www.w3.org/1999/xhtml')
>>> print Element(xhtml.html, lang='en')
diff --git a/markup/core.py b/genshi/core.py
rename from markup/core.py
rename to genshi/core.py
--- a/markup/core.py
+++ b/genshi/core.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Core classes for markup processing."""
@@ -72,7 +72,7 @@
Assume the following stream produced by the `HTML` function:
- >>> from markup.input import HTML
+ >>> from genshi.input import HTML
>>> html = HTML('''
Hello, world!
''')
>>> print html
Hello, world!
@@ -80,7 +80,7 @@
A filter such as the HTML sanitizer can be applied to that stream using
the pipe notation as follows:
- >>> from markup.filters import HTMLSanitizer
+ >>> from genshi.filters import HTMLSanitizer
>>> sanitizer = HTMLSanitizer()
>>> print html | sanitizer
Hello, world!
@@ -98,7 +98,7 @@
Serializers can also be used with this notation:
- >>> from markup.output import TextSerializer
+ >>> from genshi.output import TextSerializer
>>> output = TextSerializer()
>>> print html | sanitizer | uppercase | output
HELLO, WORLD!
@@ -152,7 +152,7 @@
@param path: a string containing the XPath expression
"""
- from markup.path import Path
+ from genshi.path import Path
return Path(path).select(self)
def serialize(self, method='xml', **kwargs):
@@ -170,7 +170,7 @@
Any additional keyword arguments are passed to the serializer, and thus
depend on the `method` parameter value.
"""
- from markup import output
+ from genshi import output
cls = method
if isinstance(method, basestring):
cls = {'xml': output.XMLSerializer,
diff --git a/markup/eval.py b/genshi/eval.py
rename from markup/eval.py
rename to genshi/eval.py
--- a/markup/eval.py
+++ b/genshi/eval.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Support for "safe" evaluation of Python expressions."""
diff --git a/markup/filters.py b/genshi/filters.py
rename from markup/filters.py
rename to genshi/filters.py
--- a/markup/filters.py
+++ b/genshi/filters.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Implementation of a number of stream filters."""
@@ -19,8 +19,8 @@
from sets import ImmutableSet as frozenset
import re
-from markup.core import Attrs, Namespace, stripentities
-from markup.core import END, END_NS, START, START_NS
+from genshi.core import Attrs, Namespace, stripentities
+from genshi.core import END, END_NS, START, START_NS
__all__ = ['HTMLSanitizer', 'IncludeFilter']
@@ -137,7 +137,7 @@
@param stream: the markup event stream to filter
@param ctxt: the template context
"""
- from markup.template import TemplateError, TemplateNotFound
+ from genshi.template import TemplateError, TemplateNotFound
ns_prefixes = []
in_fallback = False
diff --git a/markup/input.py b/genshi/input.py
rename from markup/input.py
rename to genshi/input.py
--- a/markup/input.py
+++ b/genshi/input.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
from itertools import chain
from xml.parsers import expat
@@ -21,8 +21,8 @@
import htmlentitydefs
from StringIO import StringIO
-from markup.core import Attrs, QName, Stream
-from markup.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, \
+from genshi.core import Attrs, QName, Stream
+from genshi.core import DOCTYPE, START, END, START_NS, END_NS, TEXT, \
START_CDATA, END_CDATA, PI, COMMENT
__all__ = ['ParseError', 'XMLParser', 'XML', 'HTMLParser', 'HTML']
diff --git a/markup/output.py b/genshi/output.py
rename from markup/output.py
rename to genshi/output.py
--- a/markup/output.py
+++ b/genshi/output.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""This module provides different kinds of serialization methods for XML event
streams.
@@ -22,8 +22,8 @@
from sets import ImmutableSet as frozenset
import re
-from markup.core import escape, Markup, Namespace, QName, StreamEventKind
-from markup.core import DOCTYPE, START, END, START_NS, TEXT, START_CDATA, \
+from genshi.core import escape, Markup, Namespace, QName, StreamEventKind
+from genshi.core import DOCTYPE, START, END, START_NS, TEXT, START_CDATA, \
END_CDATA, PI, COMMENT, XML_NAMESPACE
__all__ = ['DocType', 'XMLSerializer', 'XHTMLSerializer', 'HTMLSerializer',
@@ -49,7 +49,7 @@
class XMLSerializer(object):
"""Produces XML text from an event stream.
- >>> from markup.builder import tag
+ >>> from genshi.builder import tag
>>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True))
>>> print ''.join(XMLSerializer()(elem.generate()))
@@ -169,7 +169,7 @@
class XHTMLSerializer(XMLSerializer):
"""Produces XHTML text from an event stream.
- >>> from markup.builder import tag
+ >>> from genshi.builder import tag
>>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True))
>>> print ''.join(XHTMLSerializer()(elem.generate()))
@@ -292,7 +292,7 @@
class HTMLSerializer(XHTMLSerializer):
"""Produces HTML text from an event stream.
- >>> from markup.builder import tag
+ >>> from genshi.builder import tag
>>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True))
>>> print ''.join(HTMLSerializer()(elem.generate()))
@@ -396,7 +396,7 @@
Only text events are included in the output. Unlike the other serializer,
special XML characters are not escaped:
- >>> from markup.builder import tag
+ >>> from genshi.builder import tag
>>> elem = tag.div(tag.a('
', href='foo'), tag.br)
>>> print elem
diff --git a/markup/path.py b/genshi/path.py
rename from markup/path.py
rename to genshi/path.py
--- a/markup/path.py
+++ b/genshi/path.py
@@ -5,15 +5,15 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Basic support for evaluating XPath expressions against streams.
->>> from markup.input import XML
+>>> from genshi.input import XML
>>> doc = XML('''
...
... -
@@ -34,8 +34,8 @@
from math import ceil, floor
import re
-from markup.core import Stream, Attrs, Namespace, QName
-from markup.core import START, END, TEXT, COMMENT, PI
+from genshi.core import Stream, Attrs, Namespace, QName
+from genshi.core import START, END, TEXT, COMMENT, PI
__all__ = ['Path', 'PathSyntaxError']
@@ -96,7 +96,7 @@
If there are no matches, this method returns an empty stream.
- >>> from markup.input import XML
+ >>> from genshi.input import XML
>>> xml = XML('Text')
>>> print Path('.//child').select(xml)
@@ -146,7 +146,7 @@
If the path matches the event, the function returns the match (for
example, a `START` or `TEXT` event.) Otherwise, it returns `None`.
- >>> from markup.input import XML
+ >>> from genshi.input import XML
>>> xml = XML('')
>>> test = Path('child').test()
>>> for kind, data, pos in xml:
diff --git a/markup/plugin.py b/genshi/plugin.py
rename from markup/plugin.py
rename to genshi/plugin.py
--- a/markup/plugin.py
+++ b/genshi/plugin.py
@@ -6,11 +6,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Basic support for the template engine plugin API used by TurboGears and
CherryPy/Buffet.
@@ -18,10 +18,10 @@
from pkg_resources import resource_filename
-from markup.core import Attrs, Stream, QName
-from markup.eval import Undefined
-from markup.input import HTML, XML
-from markup.template import Context, Template, TemplateLoader
+from genshi.core import Attrs, Stream, QName
+from genshi.eval import Undefined
+from genshi.input import HTML, XML
+from genshi.template import Context, Template, TemplateLoader
def ET(element):
"""Converts the given ElementTree element to a markup stream."""
diff --git a/markup/template.py b/genshi/template.py
rename from markup/template.py
rename to genshi/template.py
--- a/markup/template.py
+++ b/genshi/template.py
@@ -5,11 +5,11 @@
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
-# are also available at http://markup.edgewall.org/wiki/License.
+# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
-# history and logs, available at http://markup.edgewall.org/log/.
+# history and logs, available at http://genshi.edgewall.org/log/.
"""Implementation of the template engine."""
@@ -24,11 +24,11 @@
import re
from StringIO import StringIO
-from markup.core import Attrs, Namespace, Stream, StreamEventKind, _ensure
-from markup.core import START, END, START_NS, END_NS, TEXT, COMMENT
-from markup.eval import Expression
-from markup.input import XMLParser
-from markup.path import Path
+from genshi.core import Attrs, Namespace, Stream, StreamEventKind, _ensure
+from genshi.core import START, END, START_NS, END_NS, TEXT, COMMENT
+from genshi.eval import Expression
+from genshi.input import XMLParser
+from genshi.path import Path
__all__ = ['BadDirectiveError', 'TemplateError', 'TemplateSyntaxError',
'TemplateNotFound', 'Template', 'TemplateLoader']
@@ -216,7 +216,7 @@
of `(name, value)` tuples. The items in that dictionary or sequence are
added as attributes to the element:
- >>> tmpl = Template('''
+ >>> tmpl = Template('''''')
>>> print tmpl.generate(foo={'class': 'collapse'})
@@ -269,7 +269,7 @@
This directive replaces the content of the element with the result of
evaluating the value of the `py:content` attribute:
- >>> tmpl = Template('''