utils.py
changeset 7187 496f51b92154
parent 7140 ba51dac1115d
child 7268 cd14e03124be
child 7277 acd7f0e9f276
equal deleted inserted replaced
7184:59d953d8694e 7187:496f51b92154
   359         # main stream
   359         # main stream
   360         self.body = UStringIO()
   360         self.body = UStringIO()
   361         self.doctype = u''
   361         self.doctype = u''
   362         # xmldecl and html opening tag
   362         # xmldecl and html opening tag
   363         self.xmldecl = u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding
   363         self.xmldecl = u'<?xml version="1.0" encoding="%s"?>\n' % req.encoding
   364         self.htmltag = u'<html xmlns="http://www.w3.org/1999/xhtml" ' \
   364         self._namespaces = [('xmlns', 'http://www.w3.org/1999/xhtml'),
   365                        'xmlns:cubicweb="http://www.logilab.org/2008/cubicweb" ' \
   365                             ('xmlns:cubicweb','http://www.logilab.org/2008/cubicweb')]
   366                        'xml:lang="%s" lang="%s">' % (req.lang, req.lang)
   366         self._htmlattrs = [('xml:lang', req.lang),
       
   367                            ('lang', req.lang)]
   367         # keep main_stream's reference on req for easier text/html demoting
   368         # keep main_stream's reference on req for easier text/html demoting
   368         req.main_stream = self
   369         req.main_stream = self
       
   370 
       
   371     def add_namespace(self, prefix, uri):
       
   372         self._namespaces.append( (prefix, uri) )
       
   373 
       
   374     def set_namespaces(self, namespaces):
       
   375         self._namespaces = namespaces
       
   376 
       
   377     def add_htmlattr(self, attrname, attrvalue):
       
   378         self._htmlattrs.append( (attrname, attrvalue) )
       
   379 
       
   380     def set_htmlattrs(self, attrs):
       
   381         self._htmlattrs = attrs
       
   382 
       
   383     def set_doctype(self, doctype, reset_xmldecl=True):
       
   384         self.doctype = doctype
       
   385         if reset_xmldecl:
       
   386             self.xmldecl = u''
   369 
   387 
   370     def write(self, data):
   388     def write(self, data):
   371         """StringIO interface: this method will be assigned to self.w
   389         """StringIO interface: this method will be assigned to self.w
   372         """
   390         """
   373         self.body.write(data)
   391         self.body.write(data)
       
   392 
       
   393     @property
       
   394     def htmltag(self):
       
   395         attrs = ' '.join('%s="%s"' % (attr, xml_escape(value))
       
   396                          for attr, value in (self._namespaces + self._htmlattrs))
       
   397         if attrs:
       
   398             return '<html %s>' % attrs
       
   399         return '<html>'
   374 
   400 
   375     def getvalue(self):
   401     def getvalue(self):
   376         """writes HTML headers, closes </head> tag and writes HTML body"""
   402         """writes HTML headers, closes </head> tag and writes HTML body"""
   377         return u'%s\n%s\n%s\n%s\n%s\n</html>' % (self.xmldecl, self.doctype,
   403         return u'%s\n%s\n%s\n%s\n%s\n</html>' % (self.xmldecl, self.doctype,
   378                                                  self.htmltag,
   404                                                  self.htmltag,
   379                                                  self.head.getvalue(),
   405                                                  self.head.getvalue(),
   380                                                  self.body.getvalue())
   406                                                  self.body.getvalue())
   381 
       
   382 
   407 
   383 try:
   408 try:
   384     # may not be there if cubicweb-web not installed
   409     # may not be there if cubicweb-web not installed
   385     if sys.version_info < (2, 6):
   410     if sys.version_info < (2, 6):
   386         import simplejson as json
   411         import simplejson as json