Dolda2000 GitWeb
/
wrw.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Try to unwrap functions passed to funplex.
[wrw.git]
/
wrw
/
sp
/
util.py
diff --git
a/wrw/sp/util.py
b/wrw/sp/util.py
index
96e9880
..
3ea7a8a
100644
(file)
--- a/
wrw/sp/util.py
+++ b/
wrw/sp/util.py
@@
-1,3
+1,5
@@
+import StringIO
+from wrw import dispatch
import cons
def findnsnames(el):
import cons
def findnsnames(el):
@@
-44,6
+46,9
@@
class formatter(object):
def text(self, el):
self.quotewrite(el)
def text(self, el):
self.quotewrite(el)
+ def rawcode(self, el):
+ self.write(el)
+
def attrval(self, buf):
qc, qt = (u"'", u"'") if u'"' in buf else (u'"', u""")
self.write(qc)
def attrval(self, buf):
qc, qt = (u"'", u"'") if u'"' in buf else (u'"', u""")
self.write(qc)
@@
-95,7
+100,7
@@
class formatter(object):
def endtag(self, el):
self.write(u'</' + self.elname(el) + u'>')
def endtag(self, el):
self.write(u'</' + self.elname(el) + u'>')
- def longtag(self, el):
+ def longtag(self, el
, **extra
):
self.starttag(el, **extra)
for ch in el.children:
self.node(ch)
self.starttag(el, **extra)
for ch in el.children:
self.node(ch)
@@
-112,6
+117,8
@@
class formatter(object):
self.element(el)
elif isinstance(el, cons.text):
self.text(el)
self.element(el)
elif isinstance(el, cons.text):
self.text(el)
+ elif isinstance(el, cons.raw):
+ self.rawcode(el)
else:
raise Exception("Unknown object in element tree: " + el)
else:
raise Exception("Unknown object in element tree: " + el)
@@
-135,6
+142,16
@@
class formatter(object):
def output(cls, out, el, *args, **kw):
cls(out=out, root=el, *args, **kw).start()
def output(cls, out, el, *args, **kw):
cls(out=out, root=el, *args, **kw).start()
+ @classmethod
+ def fragment(cls, out, el, *args, **kw):
+ cls(out=out, root=el, *args, **kw).node(el)
+
+ @classmethod
+ def format(cls, el, *args, **kw):
+ buf = StringIO.StringIO()
+ cls.output(buf, el, *args, **kw)
+ return buf.getvalue()
+
def update(self, **ch):
ret = type(self).__new__(type(self))
ret.__dict__.update(self.__dict__)
def update(self, **ch):
ret = type(self).__new__(type(self))
ret.__dict__.update(self.__dict__)
@@
-183,19
+200,39
@@
class indenter(formatter):
reind = False
if not self.simple(el):
sub = self.update(curind=self.curind + self.indent)
reind = False
if not self.simple(el):
sub = self.update(curind=self.curind + self.indent)
- sub.
out.indent(sub.curind
)
+ sub.
reindent(
)
reind = True
for ch in el.children:
sub.node(ch)
if reind:
reind = True
for ch in el.children:
sub.node(ch)
if reind:
- self.
out.indent(self.curind
)
+ self.
reindent(
)
self.endtag(el)
def element(self, el, **extra):
super(indenter, self).element(el, **extra)
if self.out.col > 80 and self.simple(el):
self.endtag(el)
def element(self, el, **extra):
super(indenter, self).element(el, **extra)
if self.out.col > 80 and self.simple(el):
- self.out.indent(self.curind)
+ self.reindent()
+
+ def reindent(self):
+ self.out.indent(self.curind.encode(self.charset))
def start(self):
super(indenter, self).start()
self.write('\n')
def start(self):
super(indenter, self).start()
self.write('\n')
+
+class response(dispatch.restart):
+ charset = "utf-8"
+ doctype = None
+ formatter = indenter
+
+ def __init__(self, root):
+ super(response, self).__init__()
+ self.root = root
+
+ @property
+ def ctype(self):
+ raise Exception("a subclass of wrw.sp.util.response must override ctype")
+
+ def handle(self, req):
+ req.ohead["Content-Type"] = self.ctype
+ return [self.formatter.format(self.root, doctype=self.doctype, charset=self.charset)]