changeset 230:84168828b074 trunk

Renamed Markup to Genshi in repository.
author cmlenz
date Mon, 11 Sep 2006 15:07:07 +0000
parents 58d974683419
children 996e9cf249b0
files ChangeLog INSTALL.txt README.txt doc/builder.txt doc/index.txt doc/logo.gif doc/logo.lineform/data doc/logo.png doc/streams.txt doc/xml-templates.txt doc/xpath.txt examples/basic/layout.html examples/basic/run.py examples/basic/test.html examples/bench/basic.py examples/bench/bigtable.py examples/bench/genshi/base.html examples/bench/genshi/template.html examples/bench/markup/base.html examples/bench/markup/template.html examples/includes/common/macros.html examples/includes/module/test.html examples/includes/run.py examples/includes/skins/default/layout.html examples/transform/run.py examples/transform/template.xml examples/turbogears/README.txt examples/turbogears/dev.cfg examples/turbogears/genshitest/__init__.py examples/turbogears/genshitest/config/__init__.py examples/turbogears/genshitest/config/app.cfg examples/turbogears/genshitest/config/log.cfg examples/turbogears/genshitest/controllers.py examples/turbogears/genshitest/json.py examples/turbogears/genshitest/model.py examples/turbogears/genshitest/release.py examples/turbogears/genshitest/static/images/favicon.ico examples/turbogears/genshitest/static/images/tg_under_the_hood.png examples/turbogears/genshitest/templates/__init__.py examples/turbogears/genshitest/templates/login.html examples/turbogears/genshitest/templates/master.html examples/turbogears/genshitest/templates/sitetemplate.html examples/turbogears/genshitest/templates/welcome.html examples/turbogears/genshitest/tests/__init__.py examples/turbogears/genshitest/tests/test_controllers.py examples/turbogears/genshitest/tests/test_model.py examples/turbogears/markuptest/__init__.py examples/turbogears/markuptest/config/__init__.py examples/turbogears/markuptest/config/app.cfg examples/turbogears/markuptest/config/log.cfg examples/turbogears/markuptest/controllers.py examples/turbogears/markuptest/json.py examples/turbogears/markuptest/model.py examples/turbogears/markuptest/release.py examples/turbogears/markuptest/static/images/favicon.ico examples/turbogears/markuptest/static/images/tg_under_the_hood.png examples/turbogears/markuptest/templates/__init__.py examples/turbogears/markuptest/templates/login.html examples/turbogears/markuptest/templates/master.html examples/turbogears/markuptest/templates/sitetemplate.html examples/turbogears/markuptest/templates/welcome.html examples/turbogears/markuptest/tests/__init__.py examples/turbogears/markuptest/tests/test_controllers.py examples/turbogears/markuptest/tests/test_model.py examples/turbogears/sample-prod.cfg examples/turbogears/setup.py examples/turbogears/start-genshitest.py examples/turbogears/start-markuptest.py genshi/__init__.py genshi/builder.py genshi/core.py genshi/eval.py genshi/filters.py genshi/input.py genshi/output.py genshi/path.py genshi/plugin.py genshi/template.py genshi/tests/__init__.py genshi/tests/builder.py genshi/tests/core.py genshi/tests/eval.py genshi/tests/filters.py genshi/tests/input.py genshi/tests/output.py genshi/tests/path.py genshi/tests/template.py markup/__init__.py markup/builder.py markup/core.py markup/eval.py markup/filters.py markup/input.py markup/output.py markup/path.py markup/plugin.py markup/template.py markup/tests/__init__.py markup/tests/builder.py markup/tests/core.py markup/tests/eval.py markup/tests/filters.py markup/tests/input.py markup/tests/output.py markup/tests/path.py markup/tests/template.py setup.py
diffstat 67 files changed, 323 insertions(+), 320 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,5 @@
 Version 0.3
-http://svn.edgewall.org/repos/markup/tags/0.3.0/
+http://svn.edgewall.org/repos/genshi/tags/0.3.0/
 (?, from branches/stable/0.3.x)
 
  * Expression evaluation now differentiates between undefined variables and
@@ -37,7 +37,7 @@
 
 
 Version 0.2
-http://svn.edgewall.org/repos/markup/tags/0.2.0/
+http://svn.edgewall.org/repos/genshi/tags/0.2.0/
 (Aug 22 2006, from branches/stable/0.2.x)
 
  * XPath syntax errors now contain position info (ticket #20).
@@ -76,7 +76,7 @@
 
 
 Version 0.1
-http://svn.edgewall.org/repos/markup/tags/0.1.0/
+http://svn.edgewall.org/repos/genshi/tags/0.1.0/
 (Aug 3 2006, from branches/stable/0.1.x)
 
  * First public release
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -1,4 +1,4 @@
-Installing Markup
+Installing Genshi
 =================
 
 Prerequisites
@@ -11,13 +11,13 @@
 Installation
 ------------
 
-Once you've downloaded and unpacked a Markup source release, enter the
+Once you've downloaded and unpacked a Genshi source release, enter the
 directory where the archive was unpacked, and run:
 
   $ python setup.py install
 
 Note that you may need administrator/root privileges for this step, as
-this command will by default attempt to install Markup to the Python
+this command will by default attempt to install Genshi to the Python
 site-packages directory on your system.
 
 For advanced options, please refer to the easy_install and/or the distutils
@@ -30,8 +30,8 @@
 Support
 -------
 
-If you encounter any problems with Markup, please don't hesitate to ask
-questions on the Markup mailing list or IRC channel:
+If you encounter any problems with Genshi, please don't hesitate to ask
+questions on the Genshi mailing list or IRC channel:
 
-  http://markup.edgewall.org/wiki/MailingList
-  http://markup.edgewall.org/wiki/IrcChannel
+  http://genshi.edgewall.org/wiki/MailingList
+  http://genshi.edgewall.org/wiki/IrcChannel
--- a/README.txt
+++ b/README.txt
@@ -1,11 +1,11 @@
-About Markup
+About Genshi
 ============
 
-Markup is a Python library that provides an integrated set of components
-for parsing, generating, and processing HTML or XML content in a uniform
-manner. The major feature is a template language that is heavily inspired
-by Kid.
+Genshi is a Python library that provides an integrated set of components
+for parsing, generating, and processing HTML, XML or other textual
+content for output generation on the web. The major feature is a
+template language, which is heavily inspired by Kid.
 
-For more information please visit the Markup web site:
+For more information please visit the Genshi web site:
 
-  <http://markup.edgewall.org/>
+  <http://genshi.edgewall.org/>
--- a/doc/builder.txt
+++ b/doc/builder.txt
@@ -4,7 +4,7 @@
 Generating Markup Programmatically
 ==================================
 
-Markup provides a ``builder`` module which lets you generate markup from Python
+Genshi 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
@@ -22,7 +22,7 @@
 Elements can be created through the `tag` object using attribute access, for
 example::
 
-  >>> from markup.builder import tag
+  >>> from genshi.builder import tag
   >>> doc = tag.p('Some text and ', tag.a('a link', href='http://example.org/'), '.')
   >>> doc
   <Element "p">
@@ -52,7 +52,7 @@
 
   >>> stream = doc.generate()
   >>> stream
-  <markup.core.Stream object at 0x72d230>
+  <genshi.core.Stream object at 0x72d230>
   >>> print stream
   <p class="intro">Some text and <a href="http://example.org/">a link</a>.<br/></p>
 
--- a/doc/index.txt
+++ b/doc/index.txt
@@ -1,23 +1,24 @@
 .. -*- mode: rst; encoding: utf-8 -*-
 
 ======
-Markup
+Genshi
 ======
 
----------------------------------------------------------
-Toolkit for stream-based generation of markup for the web
----------------------------------------------------------
+-----------------------------------------------------------
+A toolkit for stream-based generation of output for the web
+-----------------------------------------------------------
 
-Markup is a Python library that provides an integrated set of components for
-parsing, generating, and processing HTML or XML content in a uniform manner.
-The major feature is a template language that is heavily inspired by Kid.
+Genshi is a Python library that provides an integrated set of components
+for parsing, generating, and processing HTML, XML or other textual content
+for output generation on the web. The major feature is a template language,
+which is heavily inspired by Kid.
 
 * `Markup Streams`_
 * `Generating Markup Programmatically`_
-* `Markup XML Template Language`_
-* `Using XPath in Markup`_
+* `Genshi XML Template Language`_
+* `Using XPath in Genshi`_
 
 .. _`Markup Streams`: streams.html
 .. _`Generating Markup Programmatically`: builder.html
-.. _`Markup XML Template Language`: xml-templates.html
-.. _`Using XPath in Markup`: xpath.html
+.. _`Genshi XML Template Language`: xml-templates.html
+.. _`Using XPath in Genshi`: xpath.html
index dcbd1d5e9c45187d866f3cf02fdeb94c5b5ebcef..05edacd14f1ae6f2cdf29559104655b815fba1bd
GIT binary patch
literal 5268
zc$^iKd00$~AI8sqru{UfO*GS{L`}I#3r@vt5;d)oWQtbF8PTFHM@^{|6QLxgn&_fT
z3l+r_5rs)Al1$dP7gM<5a{Kvx|9{`-eV)(f`FeT(zQj3l9PkHT1OLCVv9XMd3>O!d
zix)2%8XA_HxGAUqxe~Lh5Mal|#FUklbsj$4*VlK>BkZqte+2{te3_YHFc^y#EgEjT
zbSWVtEG(>aj&osQ;kE4Ieu<=hef+cTzH0l`Zxt_-lap&|YP!3-*=+WzRjaOM77_$8
zQ1R!)qtT(Eq49yC8b?3nvlks59S`d2>sN33I`z3?zWYD#-rvbTRv#536bkF=>W15|
zdw6(QTU*PIN}gQrIZW8KCkubAy2Ka!nkPGWu=e-hxAzC-ryE{99XsyeGWGJ!$oWe%
zGc$c<W%U7Zue$GEj8A&n-0|__$BDtgu`Aavg$srxb<-b|<)-AV?8Dbn3#y%0A5yXY
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
index c206a90bed5034ddb1e23820377548d525cce187..f836e7144ec22c73b80c41d7a346dae4d66307e9
GIT binary patch
literal 8990
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
index e5bd44e66edfaabfd27366e681bc510c3db7d894..7b290a6dac09aa4be51289e983fc33240d45f812
GIT binary patch
literal 5170
zc$}?K1yd9Zv;|SvMG;s)MRJKnqy-jOdO<*18sVc`Lb^j(kXS;I2I-d0rMtV8uBB^{
zTI%us!kc$y&OI~d&OLKxZkVdFED_;rLL3|%q7QP?Y7e^lz>fgDhe?*tBl;kC&hQT!
z003ZqRb>SS2RA@fQRDrCy|lFC?d=VN!D?!1C@CpZ=tPb$&KoVfkT_rq3yY+rr1sd@
zp`oE-_@}+yJvBA8v-|sp5MEy1*~;2l8}Cn_J|)r!A(6<|pzq^3Ii-5m%iTlSJc>Ij
z8_v$oxw*OB-Q8d?SYBSf#Ro}3LNb|FxIMQpGc&U~Ig`t;a=g6W+}u1-Qd+8LdWrd$
z_Ez$I_h29_q140zfk2d$l*~4D!r^dMR@SljocYeaSQ4%#XT(FRS|i7YdTr6s1u~jD
zqtjz~6`PAo$?ss8jjg}GYwz#xhmw*?)vPwVhik0u7pt3(j*hmcr<WQ#YxNyxa!M`^
zk5d>VdV^v+-NUnm6n_9&|DkuzZ?Ngya$~=8yOBvvHoixT%ZL9kL&%i+F9AieI=|Rt
z4rUe}Vlg*Yy+6|O;h&~T>ek!(;wX4FhDMhLN2hCA&}ej*H!?*^YHwn8D!sTj^5;T%
zW3&C&*@CJXUHeKkt2!5#i;Igk@8FS~k{p=&i3QaB;RgXOYRc;O|4+dAKi<{m3RyjL
z0e+Fwb;iMwef7V@bq-uYJ(ysZ_c|`>4i+x%#!luqO2(#64tC~d*2eTQ)=uW`4o;t)
z>G?RhcOfjUI5?y+AEYHUJW>}^ueGTJUIg4CSq*r5p7&Tw*{%yZwndnPo5~5Mau^3e
z`6go|Xk!Vao)V~GUOBu0|7UkOtKE?NEoa<FvC?u>_jXLGmv`be=XzpV(d6>Jx%+O9
zQRjYL>~0Uy#oaHkjraXjO&(F5UPd8fS1UO``z{&(pGo>tbx6));?^&ArK);c!+tAD
zKi(aNXLE7#Rz3=HCWMt~>7<lSREpDl2x`m%Mq1u&NsNPWLGgMhdJotde4=BaQ|i1E
zQUc~f@+z>97RB0UmsuH0{2f~fU~2L^r|<C~%+%__O)j(!5#r8d=xHl*B?MO}JM3;G
z-_iy^-(<WSSdphEm2W;vvoqgs*WOYrIePR%tn{7@ut_2QEjTUr1FT40b#Q+jn+=RC
zqrIWx`^cczs8LFuN5kBH1<d6>Bf_b9>e3KsVx7!LKU$XCF}xMw?3DfYMF{uxaWHiW
zWM1fLrr71<uYv=Q2?p0W$dg$%qDgpy`v5gD%MYu<v=qM&{0j2JUvE^J^b0kdAA5^>
zt!)#Le8!C&%diAj+eJR|xTq}tWSB>DSRK#NV^RT!r8A0L)nStYXjN;<cu79-t(8NL
zgkp*_nD|pwAdOeQndIE+cU;}HdR7zXLyVnt9+}PMvo<7`F?jI;-Y&brGAYX-@{48_
zi9@5)IwKV9FW#_1i@O8abY!>lK@rn5t#!Q2pD2jSV~(?$tkE{g8+b*r6>4W@O3sFS
z;2!0gy|7UkT4;<gD#o}{FZpccLdf>iusn84;VZRh_K0&_W^})qXu1^x@t4w%a@tNX
zk$md`1cX(f09l9&r~tZwYlVJ^UlR4MM)iAz)vo4smoX3vvnf}Vbu#JoZxt845_)UE
zZfN%@klZ6`)K<4y$bgnpd8EIQcL>L{Lbdlh0#fSgdB2F#$QL2@XZc<!VDwotaj@dE
zmMY0-sGxB+nkBB|bs#F2Vw2IfymA)zWsrImC2~+edkYmFiqNtH<!IVRLiil{iJE8i
z0?1V=?>~?vaVxmiXC~EXg|S^UnFhQ3lxVen|AXBM#ZC~`2-8T2r6A+XcZMq~6RcS1
zPubqqAT$akdt@kY=rgf$ET|3*Lwegha}>hQW+C7dKv{H(Pr*6xd0RCz!XzH>g!Ttp
z13ssDF!YV~65%@-glTrWp~vAf5LkEZ(%Y)Iw)vbmqJ0qvv5~g#O;ck3suV{85$3v1
zwy`Q|>#N_TP?O%plbqdbdnAFn8i?l;Q<M!A_IaYdW{%LmJ^Lg=w8WG(-4;ry`5W|Z
zI&TB?Tu;0E=_3Z?*ttH^adl%g6B_q&Mm-4vq<Sok72pH)Z|Jc?Rs>Pku#JceeMT%2
zg<k7Ju*%GR=j8vx%>R@0OAL~G<nEsYJ3IvS(%I~(``j0b$TzRy0*wW45;Qx!x>8Zm
zU-)y;?>FppIFX&`w=;z9s~~7Fe-1FM`=3u`7?IFsbT7Pt^nIvahS7iOEx$oMRM_Ke
z61B+~yP)nL)zsZ&JS8oRcyq=?N`@dRc9a~~01)*t^w=8=H;ZcvRKskN7{>(@+O@RP
zWh&^WZiq?RoOnXgT?&6Yiv3QCSCP}VfZ(LWl$ruBCiR2bkl%jb(SS#CHOrVty~qTp
z-LM@o5;~=UtOH_Q8Omjx-%5URO2dmA5IzP<oh(DeR5WB5ytH+7peI2ET&dtK!lv@s
zPtP9>ksacaQpyQCirr^WIPXpnvo1bMiMG0OViXyUOBEm0V-2s2dCSldbEO(JX6Zhn
z0=LIt6){w6ZhuYb{?k^L_O}x2u~`D<x5b>q`g+=AgK9+a)ubN*>I!l->A;`wU8-g*
zqg8CI1s1k}qQ)t)q&A}|-D;)m!%FnQq??k9<x<=AHe@#ZXlOgRkGZ5rX&YM04q;xb
zOQOkXR)AP=<)xz|VIVTz)6gEEk$*w;LWT1Q*T@e}O>o*(s8J7lHQ<`)h!63lmmDJf
zK3$bFqe#>D=}?SaRWLhTs!xq<(SGQ&ZKN(d$XO8!Z|mCUHgn=GX!v#v*wKO=Lcf(h
zm%jNiuA!zX#l(j&lK}H6^@SBlvqx{wls_}5geH8MPX!4U$cFqJ#?cGszX=!tZ2rV=
zobQCs&2o3hG|wMEGN(`f9l?0Bd(5Q54r3Cva=Yna@W<CVE(`Ha{}F-Bknb}eXUs9h
zp~k=NzhbboUDBh6%_i3n7{)&P&mM?Zp!88=Y~m+6QHr6OXd;z>m+zWXYwCntMTf0?
zC`}x<zjjNt@GBJYY}oaP-%WvW<Fn0pfX4I{Fmb+ZMR?bf2bhLS7J9+lKt>+uWZ2PT
z29K1&1)uqeSUUn)Om_mh)>gkIerRErhM8?D$JfCbMTHC%-S#qacYIWb)}0(Xjvb4B
z#T>Xkk&0rlWr9sBzm2omOy1pyK!i}eK$Ycq7A8Kb&jri|_nHGaWOU@7vs9*O6vq$p
zr#SZV>GtS#NOMAxl|(bY!VyF0En81*8p*^cMTPdj2@YjB-}vz}rMN5=!ci0hDJ^$V
zC5^6TZFxvaqjTg2RG9iL#0jnlC#ZW1mc|I>fRdL`P1PX{n4Ebv5E%c|-bE0$h%G?i
z6Tj+|22leB*&RVMU2BL()D%%Vzd;@D=7d@DfZf#c?k{~K977h9$KB@U{4%d-h&j*_
zqVR3P^P3@@;&+*KFCJs$UxPXk@A#KR$NA05<Ve?8vJkpX3j1nOeb4KS47H8BRV4wF
zihL74@K0E|iW@*T%D0vc7Ecf{(!7CAiV9Y6dhLbgsF<zX)l~d7V})IHsqHWWH2`qF
zwjtcO$^!FO>%CaUzZC2BN{K!S+Fx&A&V-p|dF9{a<tEyze{ytb4LaldY<~%10m(ax
z=RLzugDC9?2EVjaDEB3;g6@t#_S^{2i7G_A*vH0x2p)?t0yL3M(OsP*(grk4{V-Jf
z90Oh*5(>HRncjjCH!k`xEAC7mjYoDT9ZVZ0{es~PW(v&Kh1$oa4R0M@p;mnCe&9no
zM(8O{)kXaOqc8slCXcva00**lsy-%X6lBni9vjs%7M`)v{fGeK!zDa#OFhmcBH#6S
zCkka}>DLzZ-0=C*cdT4$jab{-6GtB7PcFKI&y~}!orEgt;F@c^OZ%<x<~`-wj@Tgk
zR@xXIxTEM-IU5K>r^@iynpD`~qYYcmD>uWKS_&d^NkMj|c}a0kA~03FN9#K{h&sXs
zD2xjpzG(8c3yVpw=yU+X@pgSbe1vI)2LttZn1SDcd*M=!bZgx%DCjPQqRyML`4z9G
zbqfx#Ga<#-PG9GGPSVN=o_i_!f3}3!G-55D?oqtc_#BrP;=(TMvJe+xP8;AA0~9`O
z=&uC|1dcPm*#qc3kyNm|(0Uqv+Yt2xj+&W#6Q{1kV!)QLVA|9amg61+Mof-<FoWN%
z;R{bCPUVysg`Hv<9;)Z&=-_X?kgrw+_(lX(Wr*c3wC`m06Km}FnNM_QmmL00&6h-Q
z*|FN6G>r=YLI<Asnv5(IRwf9@Uy(<&C>>gLg+_yT{6Eu>yh~@>ulvuE0O32sy*=N>
zafV2VONwKVi=ta0FCMbssQ4{KPc#ET_v=U&R`XQJLk1}PUbE&7L!B*k88pehmXk&m
zJfEESnQPmX4cM`>K&7CW5iSjL=Gh7<0^0@Mq^AAyP|ZR9plq*}&0NGP*4A9Dq^J53
ze-aDk5XjR(e#A_V9QAJ8F;ccJ=Eh^mpH>K78KxU_9S9rH=TC5!i%8NWJ2cXx;M%kD
z>gCeNoDAH?-;dMDrT>=|MoI|o$x)e8d*>N3GF8r@di+O;c}lrJ#XP@3q*oQ62oS`{
z_idH=XhUD@nY8YzD;Zen4U0lp)U}iRvI<oZtqEncd;kQZy9mz9BOYX;K|i}q3y&gs
zqRt}v%y%NSqOI1O5@i^eHl^Q^XwUb$J6y2B7800{h2`!U{9r?Js@vpx9bT{d-F{*U
zm>ZHR-<-#qK#1^L#(*%|L6t@%A!nC#=`XzLf<Ef1tqPuaR8eZn#I-_pI<0y>3*m_i
zdY*#UkG6sqhkL(!4~+ar`Pmgss|S|-^HvrlKXGhFDJb%~_^)^*HJv}KW9hooI|*sL
zuN!aPc*Wn?bc1t8*aG-l#Y?HOw5aKNr|rHdK6b0nmr-Y-h+P)FSUa7D`qfS13rPA`
zN-<O(mMYaG6=3VIzHtAj92=DPblzRWH2a<CYFN!B$$Ff-yMMF!{77!aMN-`I@@>Vn
z&uTxOqVf_g<IQn&1oUO^kPoG|tGPq46Ia=4rse#>7Qttg=R5{_otNN0UQkTHh38&}
z!%N-~^jv}>`u1Cd|0c%H|6*t9aH{c7L|?5q`@ty%l&iJV>Wuc6K_{K}Q-JtuPeJcU
z#M9?a2H`G$k4*J8uV6J*VY+_4Zf3?CIIVud(5fnv1-eGB%1X>y_g+cRpMyxocTT6T
zg_3nI9gT^xRR1m1!%jo=fBo%NIb2s+Z$1yQ+>2PBzdVJ>ung)s$VM3#41E)3p+gEd
za4t3>F7EHvAF-r1^HvKt^PFy^C&(QA+E3RH)*WQO2_bILYb&eEmpvC3Zzo>zJG8S6
zF+i`gi)CK0jpI(p96XK%!p`a=^SRh-WoJ%CRSwu*+An*ZZ(`CC*tonhG=x(;oN3l$
zGZ%ByGe*a$+znQ#9Q<2(&S>ww@#&&Td_-D;>sXGlAQ^Q655!sj&oRGK!lP(Iy8q^^
z#J#W!6vhW;Fa4XoAn(tEuI7;y)sAUrNuC$g&De9YWZgq0I}YUf^ohAoeNacJiRN-d
z$Qme|*{SqO-6iXItY-1#>`(5Ko3i&!n6>joOVie+R@ZgJr>%DEeh-w<=VonmX@ZVh
zDx0pyAri(?rj^IJo^VkJ2WR*Q27e3T&P(QYB5GVFSM8_}INvTw={d1f2?>gg_VCP#
zyst1*Y(il>%h*)qJ#S9;&(9}LNDR{d>Qi?_EC0P*A89_8HIk#3el5WhxqbjlDfqtB
z965Y$3currdYNvWm(&r@A2eUE^v)#<`iNCVdiziC?~hX%Det^)>6-10_D6XxVjc16
zeu?z-PVv}AuZ&80*qIWk(0ECush%yM0=c5<i0}UaS>jJH5!N>e%+3}&SEtCv&g;7o
zkU>_}l~>;FtJTghYxzQ(wD#LV+3h$E*8oXd$yU+ZyR~7Z8%ziKj>iHaAilqt{<qcZ
zs%MIE;Lh_J{Y=QKF@Ww+<d4A$7e116sfq6tV%k(M4sB89w<i_%sI5O<d&Q;y3VZsf
z23<IRxXq$18<|Ac;@=SV(xQp<NXhrt(qbk;eBXEO)x3XANA@h&s8{`kE#;B2k63EA
ztb53dywWf>3Iiz+(RTde!W4Ehe~EE7d6x6`<f+?|WvLIU!g9a0#ibMFO|xFIwA*_C
z6-#}8xrjzfiDlUNU!6_IDWcEUPB>40iB`iLoBD6IYL+nV&Nr8vjP3=?T=TDdm$StW
zXfK`E9XMkN9vh;}Cum<BVHV$jWhXr%&Kw<T-I4jxQPAj(T*5z@`jx$_E4U5^<CkLc
zeQ)M}Mn^?;km5cy@P-mSBVGQTC_?*}J=t^iIm?E3lbRK}x+$Qy6Un4875c-myQ%jq
zKr$0aB9J8$hdRq93|ZZh*HfFih)wT{ex8weXBsRcjSHT56atbTWWW-$s8I6P8xpTr
zmidB&ub-K+hEf9n98XBBuS68Hz9Bup%dlH_cWZ3xNZGK^*>F6X9ZkfDlYAR8#UoRS
zD|BFas<`)Z!4m?n6WMed0B``u-d+0-lw5@iVS#Rypv>po3HkHsv-seyuAlBIn3Mra
zEVZ~xvd^#4)4rssNiqesL|mD$le#}$j-xzAt)liCFY$b8ZzvENnj;lBa&5xPTX8c+
wrx*&vhW>puj!tn{U)_y1pRygpss!ksfEr^iwN+g93g-bI-YZL&!i@s|2l3!S)Bpeg
--- 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('<p class="intro">Some text and '
   ...              '<a href="http://example.org/">a link</a>.'
   ...              '<br/></p>')
   >>> stream
-  <markup.core.Stream object at 0x6bef0>
+  <genshi.core.Stream object at 0x6bef0>
 
 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
-  <markup.core.Stream object at 0x7118b0>
+  <genshi.core.Stream object at 0x7118b0>
   >>> print substream
   <a href="http://example.org/">a link</a>
 
@@ -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
-  <markup.core.Stream object at 0x7118b0>
+  <genshi.core.Stream object at 0x7118b0>
   >>> print substream
   <a href="http://example.org/">a link</a>
   >>> print substream.select('@href')
--- 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('<h1>$title</h1>')
   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('<em>${items[0].capitalize()} item</em>')
   >>> print tmpl.generate(Context(items=['first', 'second']))
   <em>First item</em>
@@ -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('<em>${dict.foo}</em>')
   >>> print tmpl.generate(Context(dict={'foo': 'bar'}))
   <em>bar</em>
@@ -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::
 
   <html xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:py="http://markup.edgewall.org/"
+        xmlns:py="http://genshi.edgewall.org/"
         lang="en">
     ...
   </html>
 
 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::
 
   <html xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:py="http://markup.edgewall.org/"
+        xmlns:py="http://genshi.edgewall.org/"
         lang="en">
     ...
     <div py:if="foo">
@@ -134,7 +134,7 @@
 This is basically equivalent to the following::
 
   <html xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:py="http://markup.edgewall.org/"
+        xmlns:py="http://genshi.edgewall.org/"
         lang="en">
     ...
     <py:if test="foo">
@@ -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::
 
   <html xmlns="http://www.w3.org/1999/xhtml"
-        xmlns:py="http://markup.edgewall.org/"
+        xmlns:py="http://genshi.edgewall.org/"
         xmlns:xi="http://www.w3.org/2001/XInclude">
     <xi:include href="base.html" />
     ...
@@ -540,10 +540,10 @@
 
   <xi:include href="base.html"><xi:fallback /></xi:include>
 
-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
 ``<xi:include />`` element just as on any other element, meaning you can do
 things like conditional includes::
--- 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('''<doc>
    <items count="2">
--- a/examples/basic/layout.html
+++ b/examples/basic/layout.html
@@ -1,4 +1,4 @@
-<div xmlns:py="http://markup.edgewall.org/" py:strip="">
+<div xmlns:py="http://genshi.edgewall.org/" py:strip="">
   <head>
     <title>Hello ${hello}</title>
     <style type="text/css">@import(style.css)</style>
--- 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__))
--- 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">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       lang="en">
  <xi:include href="layout.html" />
--- 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():
--- 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("""
-<table xmlns:py="http://markup.edgewall.org/">
+genshi_tmpl = Template("""
+<table xmlns:py="http://genshi.edgewall.org/">
 <tr py:for="row in table">
 <td py:for="c in row.values()" py:content="c"/>
 </tr>
 </table>
 """)
 
-markup_tmpl2 = Template("""
-<table xmlns:py="http://markup.edgewall.org/">$table</table>
+genshi_tmpl2 = Template("""
+<table xmlns:py="http://genshi.edgewall.org/">$table</table>
 """)
 
 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:
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 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       py:strip="">
 
   <p py:def="greeting(name)">
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">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       lang="en">
   <xi:include href="base.html" />
--- a/examples/includes/common/macros.html
+++ b/examples/includes/common/macros.html
@@ -1,4 +1,4 @@
-<div xmlns:py="http://markup.edgewall.org/"
+<div xmlns:py="http://genshi.edgewall.org/"
      py:strip="">
   <div py:def="macro1">reference me, please</div>
   <div py:def="macro2(name, classname='expanded')" class="${classname}">
--- 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">
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude">
  <xi:include href="${skin}/layout.html" />
  <xi:include href="custom_stuff.html"><xi:fallback/></xi:include>
--- 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__))
--- a/examples/includes/skins/default/layout.html
+++ b/examples/includes/skins/default/layout.html
@@ -1,5 +1,5 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       py:strip="">
  <xi:include href="../macros.html" />
--- 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)
--- a/examples/transform/template.xml
+++ b/examples/transform/template.xml
@@ -1,7 +1,7 @@
 <!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns:py="http://markup.edgewall.org/" py:strip="">
+<html xmlns:py="http://genshi.edgewall.org/" py:strip="">
 
   <!--! Add a header DIV on top of every page with a logo image -->
   <body py:match="BODY|body">
--- 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.
--- 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]]]
rename from examples/turbogears/markuptest/__init__.py
rename to examples/turbogears/genshitest/__init__.py
rename from examples/turbogears/markuptest/config/__init__.py
rename to examples/turbogears/genshitest/config/__init__.py
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
rename from examples/turbogears/markuptest/config/log.cfg
rename to examples/turbogears/genshitest/config/log.cfg
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 \
rename from examples/turbogears/markuptest/json.py
rename to examples/turbogears/genshitest/json.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):
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"
 
rename from examples/turbogears/markuptest/static/images/favicon.ico
rename to examples/turbogears/genshitest/static/images/favicon.ico
rename from examples/turbogears/markuptest/static/images/tg_under_the_hood.png
rename to examples/turbogears/genshitest/static/images/tg_under_the_hood.png
rename from examples/turbogears/markuptest/templates/__init__.py
rename to examples/turbogears/genshitest/templates/__init__.py
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 @@
 <!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"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude">
 
 <xi:include href="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 @@
 <!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"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       py:strip="">
 
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 @@
 <!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"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude"
       py:strip="">
 <head py:match="head" py:attrs="select('@*')">
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 @@
 <!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"
-      xmlns:py="http://markup.edgewall.org/"
+      xmlns:py="http://genshi.edgewall.org/"
       xmlns:xi="http://www.w3.org/2001/XInclude">
 <xi:include href="master.html" />
 
rename from examples/turbogears/markuptest/tests/__init__.py
rename to examples/turbogears/genshitest/tests/__init__.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()
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:")
 
--- 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]]]
--- 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
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())
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('<html lang="en"><head><title>My document</title></head></html>')
 
 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')
 '<html lang="en"><head><title>My document</title></head></html>'
 
->>> from markup.input import HTML
+>>> from genshi.input import HTML
 >>> doc = HTML('<HTML lang=en><HEAD><TITLE>My document</HTML>')
 >>> doc.render(method='html', encoding='utf-8')
 '<html lang="en"><head><title>My document</title></head></html>'
@@ -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')
 '<doc lang="en"><title>My document</title></doc>'
 """
 
-from markup.core import *
-from markup.input import ParseError, XML, HTML
+from genshi.core import *
+from genshi.input import ParseError, XML, HTML
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')
     <html lang="en" xmlns="http://www.w3.org/1999/xhtml"/>
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('''<p onclick="alert('Whoa')">Hello, world!</p>''')
         >>> print html
         <p onclick="alert('Whoa')">Hello, world!</p>
@@ -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
         <p>Hello, world!</p>
@@ -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,
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."""
 
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
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']
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()))
     <div><a href="foo"/><br/><hr noshade="True"/></div>
@@ -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()))
     <div><a href="foo"></a><br /><hr noshade="noshade" /></div>
@@ -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()))
     <div><a href="foo"></a><br><hr noshade></div>
@@ -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('<Hello!>', href='foo'), tag.br)
     >>> print elem
     <div><a href="foo">&lt;Hello!&gt;</a><br/></div>
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('''<doc>
 ...  <items count="2">
 ...       <item status="new">
@@ -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('<root><elem><child>Text</child></elem></root>')
         
         >>> 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('<root><elem><child id="1"/></elem><child id="2"/></root>')
         >>> test = Path('child').test()
         >>> for kind, data, pos in xml:
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."""
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('''<ul xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<ul xmlns:py="http://genshi.edgewall.org/">
     ...   <li py:attrs="foo">Bar</li>
     ... </ul>''')
     >>> 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('''<ul xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<ul xmlns:py="http://genshi.edgewall.org/">
     ...   <li py:content="bar">Hello</li>
     ... </ul>''')
     >>> print tmpl.generate(bar='Bye')
@@ -305,7 +305,7 @@
     A named template function can be used just like a normal Python function
     from template expressions:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <p py:def="echo(greeting, name='world')" class="message">
     ...     ${greeting}, ${name}!
     ...   </p>
@@ -321,7 +321,7 @@
     If a function does not require parameters, the parenthesis can be omitted
     both when defining and when calling it:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <p py:def="helloworld" class="message">
     ...     Hello, world!
     ...   </p>
@@ -394,7 +394,7 @@
     """Implementation of the `py:for` template directive for repeating an
     element based on an iterable in the context data.
     
-    >>> tmpl = Template('''<ul xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<ul xmlns:py="http://genshi.edgewall.org/">
     ...   <li py:for="item in items">${item}</li>
     ... </ul>''')
     >>> print tmpl.generate(items=[1, 2, 3])
@@ -439,7 +439,7 @@
     """Implementation of the `py:if` template directive for conditionally
     excluding elements from being output.
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <b py:if="foo">${bar}</b>
     ... </div>''')
     >>> print tmpl.generate(foo=True, bar='Hello')
@@ -460,7 +460,7 @@
 class MatchDirective(Directive):
     """Implementation of the `py:match` template directive.
 
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <span py:match="greeting">
     ...     Hello ${select('@name')}
     ...   </span>
@@ -496,7 +496,7 @@
     This directive replaces the element with the result of evaluating the
     value of the `py:replace` attribute:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <span py:replace="bar">Hello</span>
     ... </div>''')
     >>> print tmpl.generate(bar='Bye')
@@ -507,7 +507,7 @@
     This directive is equivalent to `py:content` combined with `py:strip`,
     providing a less verbose way to achieve the same effect:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <span py:content="bar" py:strip="">Hello</span>
     ... </div>''')
     >>> print tmpl.generate(bar='Bye')
@@ -528,7 +528,7 @@
     When the value of the `py:strip` attribute evaluates to `True`, the element
     is stripped from the output
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <div py:strip="True"><b>foo</b></div>
     ... </div>''')
     >>> print tmpl.generate()
@@ -541,7 +541,7 @@
     This directive is particulary interesting for named template functions or
     match templates that do not generate a top-level element:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <div py:def="echo(what)" py:strip="">
     ...     <b>${what}</b>
     ...   </div>
@@ -582,7 +582,7 @@
     If no `py:when` directive is matched then the fallback directive
     `py:otherwise` will be used.
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/"
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/"
     ...   py:choose="">
     ...   <span py:when="0 == 1">0</span>
     ...   <span py:when="1 == 1">1</span>
@@ -596,7 +596,7 @@
     If the `py:choose` directive contains an expression, the nested `py:when`
     directives are tested for equality to the `py:choose` expression:
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/"
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/"
     ...   py:choose="2">
     ...   <span py:when="1">1</span>
     ...   <span py:when="2">2</span>
@@ -679,7 +679,7 @@
     """Implementation of the `py:with` template directive, which allows
     shorthand access to variables and expressions.
     
-    >>> tmpl = Template('''<div xmlns:py="http://markup.edgewall.org/">
+    >>> tmpl = Template('''<div xmlns:py="http://genshi.edgewall.org/">
     ...   <span py:with="y=7; z=x+10">$x $y $z</span>
     ... </div>''')
     >>> print tmpl.generate(x=42)
@@ -733,7 +733,7 @@
     """Can parse a template and transform it into the corresponding output
     based on context data.
     """
-    NAMESPACE = Namespace('http://markup.edgewall.org/')
+    NAMESPACE = Namespace('http://genshi.edgewall.org/')
 
     EXPR = StreamEventKind('EXPR') # an expression
     SUB = StreamEventKind('SUB') # a "subprogram"
@@ -1151,7 +1151,7 @@
             template is being loaded, or `None` if the template is being loaded
             directly
         """
-        from markup.filters import IncludeFilter
+        from genshi.filters import IncludeFilter
 
         if relative_to:
             filename = os.path.join(os.path.dirname(relative_to), filename)
rename from markup/tests/__init__.py
rename to genshi/tests/__init__.py
--- a/markup/tests/__init__.py
+++ b/genshi/tests/__init__.py
@@ -5,21 +5,21 @@
 #
 # 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/.
 
 import doctest
 import unittest
 
 def suite():
-    import markup
-    from markup.tests import builder, core, eval, filters, input, output, \
+    import genshi
+    from genshi.tests import builder, core, eval, filters, input, output, \
                              path, template
     suite = unittest.TestSuite()
-    suite.addTest(doctest.DocTestSuite(markup))
+    suite.addTest(doctest.DocTestSuite(genshi))
     suite.addTest(builder.suite())
     suite.addTest(core.suite())
     suite.addTest(eval.suite())
rename from markup/tests/builder.py
rename to genshi/tests/builder.py
--- a/markup/tests/builder.py
+++ b/genshi/tests/builder.py
@@ -5,18 +5,18 @@
 #
 # 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/.
 
 import doctest
 from HTMLParser import HTMLParseError
 import unittest
 
-from markup.builder import Element, tag
-from markup.core import Stream
+from genshi.builder import Element, tag
+from genshi.core import Stream
 
 
 class ElementFactoryTestCase(unittest.TestCase):
rename from markup/tests/core.py
rename to genshi/tests/core.py
--- a/markup/tests/core.py
+++ b/genshi/tests/core.py
@@ -5,17 +5,17 @@
 #
 # 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/.
 
 import doctest
 import unittest
 
-from markup.core import *
-from markup.input import XML, ParseError
+from genshi.core import *
+from genshi.input import XML, ParseError
 
 
 class StreamTestCase(unittest.TestCase):
rename from markup/tests/eval.py
rename to genshi/tests/eval.py
--- a/markup/tests/eval.py
+++ b/genshi/tests/eval.py
@@ -5,17 +5,17 @@
 #
 # 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 hhttp://markup.edgewall.org/log/.
+# history and logs, available at hhttp://genshi.edgewall.org/log/.
 
 import doctest
 import sys
 import unittest
 
-from markup.eval import Expression, Undefined
+from genshi.eval import Expression, Undefined
 
 
 class ExpressionTestCase(unittest.TestCase):
rename from markup/tests/filters.py
rename to genshi/tests/filters.py
--- a/markup/tests/filters.py
+++ b/genshi/tests/filters.py
@@ -5,18 +5,18 @@
 #
 # 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/.
 
 import doctest
 import unittest
 
-from markup.core import Stream
-from markup.input import HTML, ParseError
-from markup.filters import HTMLSanitizer
+from genshi.core import Stream
+from genshi.input import HTML, ParseError
+from genshi.filters import HTMLSanitizer
 
 
 class HTMLSanitizerTestCase(unittest.TestCase):
rename from markup/tests/input.py
rename to genshi/tests/input.py
--- a/markup/tests/input.py
+++ b/genshi/tests/input.py
@@ -5,19 +5,19 @@
 #
 # 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/.
 
 import doctest
 from StringIO import StringIO
 import sys
 import unittest
 
-from markup.core import Stream
-from markup.input import XMLParser, HTMLParser, ParseError
+from genshi.core import Stream
+from genshi.input import XMLParser, HTMLParser, ParseError
 
 
 class XMLParserTestCase(unittest.TestCase):
rename from markup/tests/output.py
rename to genshi/tests/output.py
--- a/markup/tests/output.py
+++ b/genshi/tests/output.py
@@ -5,19 +5,19 @@
 #
 # 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/.
 
 import doctest
 import unittest
 import sys
 
-from markup.core import Stream
-from markup.input import HTML, XML
-from markup.output import DocType, XMLSerializer, XHTMLSerializer, \
+from genshi.core import Stream
+from genshi.input import HTML, XML
+from genshi.output import DocType, XMLSerializer, XHTMLSerializer, \
                           HTMLSerializer, EmptyTagFilter
 
 
rename from markup/tests/path.py
rename to genshi/tests/path.py
--- a/markup/tests/path.py
+++ b/genshi/tests/path.py
@@ -5,17 +5,17 @@
 #
 # 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/.
 
 import doctest
 import unittest
 
-from markup.input import XML
-from markup.path import Path, PathSyntaxError
+from genshi.input import XML
+from genshi.path import Path, PathSyntaxError
 
 
 class PathTestCase(unittest.TestCase):
rename from markup/tests/template.py
rename to genshi/tests/template.py
--- a/markup/tests/template.py
+++ b/genshi/tests/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/.
 
 import doctest
 import os
@@ -18,8 +18,8 @@
 import sys
 import tempfile
 
-from markup.core import Markup, Stream
-from markup.template import BadDirectiveError, Template, TemplateLoader, \
+from genshi.core import Markup, Stream
+from genshi.template import BadDirectiveError, Template, TemplateLoader, \
                             TemplateSyntaxError
 
 
@@ -30,7 +30,7 @@
         """
         Verify that the directive has access to the loop variables.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem py:for="item in items" py:attrs="item"/>
         </doc>""")
         items = [{'id': 1, 'class': 'foo'}, {'id': 2, 'class': 'bar'}]
@@ -43,7 +43,7 @@
         Verify that an attribute value that evaluates to `None` removes an
         existing attribute of that name.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem class="foo" py:attrs="{'class': 'bar'}"/>
         </doc>""")
         self.assertEqual("""<doc>
@@ -55,7 +55,7 @@
         Verify that an attribute value that evaluates to `None` removes an
         existing attribute of that name.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem class="foo" py:attrs="{'class': None}"/>
         </doc>""")
         self.assertEqual("""<doc>
@@ -72,7 +72,7 @@
         Verify that, if multiple `py:when` bodies match, only the first is
         output.
         """
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/" py:choose="">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/" py:choose="">
           <span py:when="1 == 1">1</span>
           <span py:when="2 == 2">2</span>
           <span py:when="3 == 3">3</span>
@@ -82,7 +82,7 @@
         </div>""", str(tmpl.generate()))
 
     def test_otherwise(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/" py:choose="">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/" py:choose="">
           <span py:when="False">hidden</span>
           <span py:otherwise="">hello</span>
         </div>""")
@@ -94,7 +94,7 @@
         """
         Verify that `py:choose` blocks can be nested:
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="1">
             <div py:when="1" py:choose="3">
               <span py:when="2">2</span>
@@ -114,7 +114,7 @@
         """
         Verify more complex nesting.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="1">
             <div py:when="1" py:choose="">
               <span py:when="2">OK</span>
@@ -134,7 +134,7 @@
         """
         Verify more complex nesting using otherwise.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="1">
             <div py:when="1" py:choose="2">
               <span py:when="1">FAIL</span>
@@ -155,7 +155,7 @@
         Verify that a when directive with a strip directive actually strips of
         the outer element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="" py:strip="">
             <span py:otherwise="">foo</span>
           </div>
@@ -169,7 +169,7 @@
         Verify that a `when` directive outside of a `choose` directive is
         reported as an error.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:when="xy" />
         </doc>""")
         self.assertRaises(TemplateSyntaxError, str, tmpl.generate())
@@ -179,7 +179,7 @@
         Verify that an `otherwise` directive outside of a `choose` directive is
         reported as an error.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:otherwise="" />
         </doc>""")
         self.assertRaises(TemplateSyntaxError, str, tmpl.generate())
@@ -189,7 +189,7 @@
         Verify that an `when` directive that doesn't have a `test` attribute
         is reported as an error.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="" py:strip="">
             <py:when>foo</py:when>
           </div>
@@ -201,7 +201,7 @@
         Verify that an `otherwise` directive can be used without a `test`
         attribute.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:choose="" py:strip="">
             <py:otherwise>foo</py:otherwise>
           </div>
@@ -214,7 +214,7 @@
         """
         Verify that the directive can also be used as an element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:choose>
             <py:when test="1 == 1">1</py:when>
             <py:when test="2 == 2">2</py:when>
@@ -234,7 +234,7 @@
         Verify that a named template function with a strip directive actually
         strips of the outer element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:def="echo(what)" py:strip="">
             <b>${what}</b>
           </div>
@@ -245,7 +245,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_exec_in_replace(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <p py:def="echo(greeting, name='world')" class="message">
             ${greeting}, ${name}!
           </p>
@@ -261,7 +261,7 @@
         """
         Verify that the directive can also be used as an element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:def function="echo(what)">
             <b>${what}</b>
           </py:def>
@@ -276,7 +276,7 @@
         Verify that a template function defined inside a conditional block can
         be called from outside that block.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:if test="semantic">
             <strong py:def="echo(what)">${what}</strong>
           </py:if>
@@ -293,7 +293,7 @@
         """
         Verify that keyword arguments work with `py:def` directives.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <b py:def="echo(what, bold=False)" py:strip="not bold">${what}</b>
           ${echo('foo')}
         </doc>""")
@@ -302,7 +302,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_invocation_in_attribute(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:def function="echo(what)">${what or 'something'}</py:def>
           <p class="${echo('foo')}">bar</p>
         </doc>""")
@@ -311,7 +311,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_invocation_in_attribute_none(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:def function="echo()">${None}</py:def>
           <p class="${echo()}">bar</p>
         </doc>""")
@@ -322,7 +322,7 @@
     def test_function_raising_typeerror(self):
         def badfunc():
             raise TypeError
-        tmpl = Template("""<html xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<html xmlns:py="http://genshi.edgewall.org/">
           <div py:def="dobadfunc()">
             ${badfunc()}
           </div>
@@ -331,7 +331,7 @@
         self.assertRaises(TypeError, list, tmpl.generate(badfunc=badfunc))
 
     def test_def_in_matched(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <head py:match="head">${select('*')}</head>
           <head>
             <py:def function="maketitle(test)"><b py:replace="test" /></py:def>
@@ -351,7 +351,7 @@
         Verify that the combining the `py:for` directive with `py:strip` works
         correctly.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:for="item in items" py:strip="">
             <b>${item}</b>
           </div>
@@ -368,7 +368,7 @@
         """
         Verify that the directive can also be used as an element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:for each="item in items">
             <b>${item}</b>
           </py:for>
@@ -385,7 +385,7 @@
         """
         Verify that assignment to tuples works correctly.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:for each="k, v in items">
             <p>key=$k, value=$v</p>
           </py:for>
@@ -399,7 +399,7 @@
         """
         Verify that assignment to nested tuples works correctly.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:for each="idx, (k, v) in items">
             <p>$idx: key=$k, value=$v</p>
           </py:for>
@@ -418,7 +418,7 @@
         Verify that the combining the `py:if` directive with `py:strip` works
         correctly.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <b py:if="foo" py:strip="">${bar}</b>
         </doc>""")
         self.assertEqual("""<doc>
@@ -429,7 +429,7 @@
         """
         Verify that the directive can also be used as an element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:if test="foo">${bar}</py:if>
         </doc>""")
         self.assertEqual("""<doc>
@@ -445,7 +445,7 @@
         Verify that a match template can produce the same kind of element that
         it matched without entering an infinite recursion.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem py:match="elem" py:strip="">
             <div class="elem">${select('text()')}</div>
           </elem>
@@ -460,7 +460,7 @@
         Verify that a match template can produce the same kind of element that
         it matched without entering an infinite recursion.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem py:match="elem">
             <div class="elem">${select('text()')}</div>
           </elem>
@@ -476,7 +476,7 @@
         """
         Verify that the directive can also be used as an element.
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:match path="elem">
             <div class="elem">${select('text()')}</div>
           </py:match>
@@ -491,7 +491,7 @@
         Match directives are applied recursively, meaning that they are also
         applied to any content they may have produced themselves:
         """
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <elem py:match="elem">
             <div class="elem">
               ${select('*')}
@@ -522,7 +522,7 @@
         themselves output the element they match, avoiding recursion is even
         more complex, but should work.
         """
-        tmpl = Template("""<html xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<html xmlns:py="http://genshi.edgewall.org/">
           <body py:match="body">
             <div id="header"/>
             ${select('*')}
@@ -543,7 +543,7 @@
         </html>""", str(tmpl.generate()))
 
     def test_select_all_attrs(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:match="elem" py:attrs="select('@*')">
             ${select('text()')}
           </div>
@@ -556,7 +556,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_select_all_attrs_empty(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:match="elem" py:attrs="select('@*')">
             ${select('text()')}
           </div>
@@ -569,7 +569,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_select_all_attrs_in_body(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <div py:match="elem">
             Hey ${select('text()')} ${select('@*')}
           </div>
@@ -582,7 +582,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_def_in_match(self):
-        tmpl = Template("""<doc xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<doc xmlns:py="http://genshi.edgewall.org/">
           <py:def function="maketitle(test)"><b py:replace="test" /></py:def>
           <head py:match="head">${select('*')}</head>
           <head><title>${maketitle(True)}</title></head>
@@ -592,7 +592,7 @@
         </doc>""", str(tmpl.generate()))
 
     def test_match_with_xpath_variable(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <span py:match="*[name()=$tagname]">
             Hello ${select('@name')}
           </span>
@@ -608,7 +608,7 @@
         </div>""", str(tmpl.generate(tagname='sayhello')))
 
     def test_content_directive_in_match(self):
-        tmpl = Template("""<html xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<html xmlns:py="http://genshi.edgewall.org/">
           <div py:match="foo">I said <q py:content="select('text()')">something</q>.</div>
           <foo>bar</foo>
         </html>""")
@@ -617,7 +617,7 @@
         </html>""", str(tmpl.generate()))
 
     def test_cascaded_matches(self):
-        tmpl = Template("""<html xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<html xmlns:py="http://genshi.edgewall.org/">
           <body py:match="body">${select('*')}</body>
           <head py:match="head">${select('title')}</head>
           <body py:match="body">${select('*')}<hr /></body>
@@ -630,7 +630,7 @@
         </html>""", str(tmpl.generate()))
 
     def test_multiple_matches(self):
-        tmpl = Template("""<html xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<html xmlns:py="http://genshi.edgewall.org/">
           <input py:match="form//input" py:attrs="select('@*')"
                  value="${values[str(select('@name'))]}" />
           <form><p py:for="field in fields">
@@ -661,7 +661,7 @@
 
     # FIXME
     #def test_match_after_step(self):
-    #    tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+    #    tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
     #      <span py:match="div/greeting">
     #        Hello ${select('@name')}
     #      </span>
@@ -678,7 +678,7 @@
     """Tests for the `py:strip` template directive."""
 
     def test_strip_false(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <div py:strip="False"><b>foo</b></div>
         </div>""")
         self.assertEqual("""<div>
@@ -686,7 +686,7 @@
         </div>""", str(tmpl.generate()))
 
     def test_strip_empty(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <div py:strip=""><b>foo</b></div>
         </div>""")
         self.assertEqual("""<div>
@@ -698,7 +698,7 @@
     """Tests for the `py:with` template directive."""
 
     def test_shadowing(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           ${x}
           <span py:with="x = x * 2" py:replace="x"/>
           ${x}
@@ -710,7 +710,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_as_element(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="x = x * 2">${x}</py:with>
         </div>""")
         self.assertEqual("""<div>
@@ -718,7 +718,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_multiple_vars_same_name(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="
             foo = 'bar';
             foo = foo.replace('r', 'z')
@@ -731,7 +731,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_multiple_vars_single_assignment(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="x = y = z = 1">${x} ${y} ${z}</py:with>
         </div>""")
         self.assertEqual("""<div>
@@ -739,7 +739,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_nested_vars_single_assignment(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="x, (y, z) = (1, (2, 3))">${x} ${y} ${z}</py:with>
         </div>""")
         self.assertEqual("""<div>
@@ -747,7 +747,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_multiple_vars_trailing_semicolon(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="x = x * 2; y = x / 2;">${x} ${y}</py:with>
         </div>""")
         self.assertEqual("""<div>
@@ -755,7 +755,7 @@
         </div>""", str(tmpl.generate(x=42)))
 
     def test_semicolon_escape(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:with vars="x = 'here is a semicolon: ;'; y = 'here are two semicolons: ;;' ;">
             ${x}
             ${y}
@@ -843,7 +843,7 @@
         self.assertEqual('<root attr=""/>', str(tmpl.generate()))
 
     def test_bad_directive_error(self):
-        xml = '<p xmlns:py="http://markup.edgewall.org/" py:do="nothing" />'
+        xml = '<p xmlns:py="http://genshi.edgewall.org/" py:do="nothing" />'
         try:
             tmpl = Template(xml, filename='test.html')
         except BadDirectiveError, e:
@@ -852,7 +852,7 @@
                 self.assertEqual(1, e.lineno)
 
     def test_directive_value_syntax_error(self):
-        xml = """<p xmlns:py="http://markup.edgewall.org/" py:if="bar'" />"""
+        xml = """<p xmlns:py="http://genshi.edgewall.org/" py:if="bar'" />"""
         try:
             tmpl = Template(xml, filename='test.html')
             self.fail('Expected SyntaxError')
@@ -892,7 +892,7 @@
         Verify that outputting context data that is a `Markup` instance is not
         escaped.
         """
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           $myvar
         </div>""")
         self.assertEqual("""<div>
@@ -903,7 +903,7 @@
         """
         Verify that outputting context data in text nodes doesn't escape quotes.
         """
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           $myvar
         </div>""")
         self.assertEqual("""<div>
@@ -914,7 +914,7 @@
         """
         Verify that outputting context data in attribtes escapes quotes.
         """
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <elem class="$myvar"/>
         </div>""")
         self.assertEqual("""<div>
@@ -922,7 +922,7 @@
         </div>""", str(tmpl.generate(myvar='"foo"')))
 
     def test_directive_element(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <py:if test="myvar">bar</py:if>
         </div>""")
         self.assertEqual("""<div>
@@ -930,7 +930,7 @@
         </div>""", str(tmpl.generate(myvar='"foo"')))
 
     def test_normal_comment(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <!-- foo bar -->
         </div>""")
         self.assertEqual("""<div>
@@ -938,7 +938,7 @@
         </div>""", str(tmpl.generate()))
 
     def test_template_comment(self):
-        tmpl = Template("""<div xmlns:py="http://markup.edgewall.org/">
+        tmpl = Template("""<div xmlns:py="http://genshi.edgewall.org/">
           <!-- !foo -->
           <!--!bar-->
         </div>""")
--- a/setup.py
+++ b/setup.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/.
 
 try:
     from setuptools import setup
@@ -18,18 +18,19 @@
     from distutils.core import setup
 
 setup(
-    name = 'Markup',
+    name = 'Genshi',
     version = '0.3',
-    description = 'Toolkit for stream-based generation of markup for the web',
+    description = 'A toolkit for stream-based generation of output for the web',
     long_description = \
-"""Markup is a Python library that provides an integrated set of components for
-parsing, generating, and processing HTML or XML content in a uniform manner.
-The major feature is a template language that is heavily inspired by Kid.""",
+"""Genshi is a Python library that provides an integrated set of components
+for parsing, generating, and processing HTML, XML or other textual content for
+output generation on the web. The major feature is a template language, which
+is heavily inspired by Kid.""",
     author = 'Edgewall Software',
     author_email = 'info@edgewall.org',
     license = 'BSD',
-    url = 'http://markup.edgewall.org/',
-    download_url = 'http://markup.edgewall.org/wiki/MarkupDownload',
+    url = 'http://genshi.edgewall.org/',
+    download_url = 'http://genshi.edgewall.org/wiki/GenshiDownload',
     zip_safe = True,
 
     classifiers = [
@@ -45,12 +46,12 @@
         'Topic :: Text Processing :: Markup :: XML'
     ],
     keywords = ['python.templating.engines'],
-    packages = ['markup'],
-    test_suite = 'markup.tests.suite',
+    packages = ['genshi'],
+    test_suite = 'genshi.tests.suite',
 
     extras_require = {'plugin': ['setuptools>=0.6a2']},
     entry_points = """
     [python.templating.engines]
-    markup = markup.plugin:TemplateEnginePlugin[plugin]
+    genshi = genshi.plugin:TemplateEnginePlugin[plugin]
     """,
 )
Copyright (C) 2012-2017 Edgewall Software