Exemple #1
0
    def toZippedXml(self, REQUEST, get_data=True, incl_embedded=False):

        #-- Create temporary folder.
        tempfolder = tempfile.mktemp()
        ressources = self.exportRessources(tempfolder,
                                           REQUEST,
                                           incl_embedded=incl_embedded)

        #-- Get xml-export.
        xml = self.toXml(REQUEST, incl_embedded)

        #-- Write xml-export to file.
        xmlfilename = _fileutil.getOSPath(
            '%s/%s_%s.xml' % (tempfolder, self.getHome().id, self.meta_id))
        _fileutil.exportObj(xml, xmlfilename)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not _globals.debug(self):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
def processCommand(self, filename, command):
  _globals.writeLog( self, '[processCommand]: infilename=%s'%filename)
  infilename = _fileutil.getOSPath( filename)
  outfilename = _fileutil.getOSPath( filename)
  mZmsHome = '{zms_home}'
  mCurDir = '{cur_dir}'
  mIn = '{in}'
  mOut = '{out}'
  i = command.find(mOut[:-1])
  if i >= 0:
    j = command.find('}',i)
    mExt = command[i+len(mOut[:-1]):j]
    mOut = command[i:j+1]
    if len(mExt) > 0:
      outfilename = outfilename[:outfilename.rfind('.')] + mExt
    else:
      outfilename += '.tmp'
  tmpoutfilename = outfilename + '~'
  instance_home = INSTANCE_HOME
  software_home = os.path.join(SOFTWARE_HOME, '..%s..' % os.sep)
  software_home = os.path.normpath(software_home)  
  command = command.replace( '{software_home}', software_home)
  command = command.replace( '{instance_home}', instance_home)
  command = command.replace( mZmsHome,_fileutil.getOSPath(package_home(globals())))
  command = command.replace( mCurDir,_fileutil.getFilePath(infilename))
  command = command.replace( mIn,infilename)
  command = command.replace( mOut,tmpoutfilename)
  path = _fileutil.getFilePath(filename)
  _globals.writeLog( self, '[processCommand]: path=%s'%path)
  os.chdir(path)
  _globals.writeLog( self, '[processCommand]: command=%s'%command)
  os.system(command)
  # Check if output file exists.
  try: 
    os.stat( _fileutil.getOSPath( tmpoutfilename)) 
    _globals.writeLog( self, '[processCommand]: rename %s to %s'%( tmpoutfilename, outfilename))
    try:
      os.remove( outfilename)
    except OSError:
      pass
    os.rename( tmpoutfilename, outfilename)
  except OSError:
    outfilename = infilename
  # Remove input file if it is the result of a transformation of output file.
  if outfilename != infilename:
    os.remove( infilename)
  # Return filename.
  _globals.writeLog( self, '[processCommand]: outfilename=%s'%( outfilename))
  return outfilename
Exemple #3
0
    def toZippedHtml(self, REQUEST, get_data=True):
        REQUEST.set('ZMS_INDEX_HTML', 1)
        REQUEST.set('ZMS_HTML_EXPORT', 1)

        #-- Create temporary folder.
        tempfolder = tempfile.mktemp()
        ressources = self.exportRessources(tempfolder,
                                           REQUEST,
                                           from_zms=self.getLevel() == 0,
                                           from_home=True)

        #-- Download HTML-pages.
        for lang in self.getLangIds():
            REQUEST.set('lang', lang)
            REQUEST.set('preview', None)
            self.recurse_downloadHtmlPages(self, tempfolder, lang, REQUEST)

        #-- Get zip-file.
        zipfiles = _fileutil.getOSPath('%s/*' % tempfolder)
        rtn = _fileutil.buildZipArchive(zipfiles, get_data)

        #-- Remove temporary folder.
        if not _globals.debug(self):
            _fileutil.remove(tempfolder, deep=1)

        return rtn
Exemple #4
0
def initTheme(self, theme, new_id, REQUEST):

    filename = _fileutil.extractFilename(theme)
    id = filename[:filename.rfind('.')]

    ### Store copy of ZEXP in INSTANCE_HOME/import-folder.
    filepath = INSTANCE_HOME + '/import/' + filename
    if theme.startswith('http://'):
        initutil = _globals.initutil()
        initutil.setConfProperty('HTTP.proxy', REQUEST.get('http_proxy', ''))
        zexp = _globals.http_import(initutil, theme)
        _fileutil.exportObj(zexp, filepath)
    else:
        packagepath = package_home(globals()) + '/import/' + filename
        try:
            os.stat(_fileutil.getOSPath(filepath))
        except OSError:
            shutil.copy(packagepath, filepath)

    ### Import theme from ZEXP.
    _fileutil.importZexp(self, filename)

    ### Assign folder-id.
    if id != new_id:
        self.manage_renameObject(id=id, new_id=new_id)

    ### Return new ZMS home instance.
    return getattr(self, new_id)
Exemple #5
0
    def rotate(self, img, direction, qual=75):
        """
    Rotate image.
    """
        try:
            from PIL import Image
        except:
            import Image

        # Save image in temp-folder
        tempfolder = tempfile.mktemp()
        filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
        _fileutil.exportObj(img, filepath)

        # Rotate image
        im = Image.open(filepath)
        im = im.rotate(direction)
        im.save(filepath, "JPEG", quality=qual)

        # Read resized image from file-system
        f = open(filepath, 'rb')
        result_data = f.read()
        result_filename = _fileutil.extractFilename(filepath)
        result = {'data': result_data, 'filename': result_filename}
        f.close()

        # Remove temp-folder and images
        _fileutil.remove(tempfolder, deep=1)

        # Returns resulting image
        image = self.context.ImageFromData(result['data'], result['filename'])
        return image


################################################################################
Exemple #6
0
 def storeFile(self, file):
     filename = _fileutil.extractFilename(file.filename)
     if len(filename) > 0:
         fileext = _fileutil.extractFileExt(file.filename)
         filename = filename[:-(len(fileext) + 1)] + '_' + str(
             time.time()).replace('.', '') + '.' + fileext
         filepath = _fileutil.getOSPath('%s/%s' % (self.location, filename))
         _fileutil.exportObj(file, filepath)
     return filename
Exemple #7
0
 def __init__(self):
     """
   Constructor.
   """
     self.id = 'content'
     file = open(
         _fileutil.getOSPath(package_home(globals()) + '/www/spacer.gif'),
         'rb')
     self.zmi_logo = Image(id='logo', title='', file=file.read())
     file.close()
Exemple #8
0
 def retrieveFile(self, filename):
     try:
         local_filename = _fileutil.getOSPath('%s/%s' %
                                              (self.location, filename))
         f = open(local_filename, 'rb')
         data = f.read()
         f.close()
     except:
         data = ''
     return data
Exemple #9
0
 def getConfXmlFile(self, file):
     if type(file) is dict:
         filename = file['filename']
         xmlfile = StringIO(file['data'])
     elif type(file) is str and file.startswith('http://'):
         filename = _fileutil.extractFilename(file)
         xmlfile = StringIO(self.http_import(file))
     else:
         filename = _fileutil.extractFilename(file)
         xmlfile = open(_fileutil.getOSPath(file), 'rb')
     return filename, xmlfile
Exemple #10
0
 def importConfPackage(self, file, REQUEST, createIfNotExists=0):
     if type(file) is str:
         if file.startswith('http://'):
             file = StringIO(self.http_import(file))
         else:
             file = open(_fileutil.getOSPath(file), 'rb')
     files = _fileutil.getZipArchive(file)
     for f in files:
         if not f.get('isdir'):
             self.importConf(f, REQUEST, createIfNotExists)
     self.synchronizeObjAttrs()
Exemple #11
0
def processData(self, processId, data, trans=None):
  # Create temporary folder.
  folder = tempfile.mktemp()
  # Save data to file.
  filename = _fileutil.getOSPath('%s/in.dat'%folder)
  _fileutil.exportObj(data, filename)
  # Save transformation to file.
  if trans is not None and trans != '':
    transfilename = _fileutil.getOSPath('%s/%s'%(folder,trans.getFilename()))
    _fileutil.exportObj(trans, transfilename)
  # Process file.
  filename = processFile(self, processId, filename, trans)
  # Read data from file.
  f = open(filename, 'rb')
  data = f.read()
  f.close()
  # Remove temporary folder.
  if not _globals.debug( self):
    _fileutil.remove(folder, deep=1)
  # Return data.
  return data
Exemple #12
0
 def importExample(self, ext=None, context=None, request=None):
   """
     Import example file of given extension at given context
   """
   import _fileutil
   import _importable
   example = self.getExample(ext)
   if example is not None:
     filename = self.getExampleToImport(ext)
     contents = open(_fileutil.getOSPath(filename), 'rb')
     _importable.importFile(context, contents, request, _importable.importContent)
     contents.close()
Exemple #13
0
 def initExportFilter(self, id, REQUEST):
   # Set environment variables.
   instance_home = INSTANCE_HOME
   software_home = os.path.join(SOFTWARE_HOME, '..%s..' % os.sep)
   software_home = os.path.normpath(software_home)  
   REQUEST.set( 'ZMS_FILTER', True)
   REQUEST.set( 'ZMS_FILTER_SOFTWARE_HOME', software_home)
   REQUEST.set( 'ZMS_FILTER_INSTANCE_HOME', instance_home)
   REQUEST.set( 'ZMS_FILTER_PACKAGE_HOME', _fileutil.getOSPath(package_home(globals())))
   # Set local variables.
   ob_filter = self.getFilter(id)
   ob_filter_format = ob_filter.get('format','')
   incl_embedded = ob_filter_format == 'XML_incl_embedded'
   # Create temporary folder.
   tempfolder = tempfile.mktemp()
   ressources = self.exportRessources( tempfolder, REQUEST, from_zms=ob_filter_format=='XHTML', from_home=ob_filter_format=='XHTML', incl_embedded=incl_embedded)
   # Export data to file.
   if ob_filter_format == 'export':
     outfilename = _fileutil.getOSPath('%s/INDEX0'%tempfolder)
   elif ob_filter_format in ['XML','XML_incl_embedded']:
     # Set XML.
     data = self.toXml( REQUEST, incl_embedded)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'XHTML':
     # Set XHTML.
     data = self.toXhtml( REQUEST)
     outfilename = _fileutil.getOSPath('%s/export.html'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   elif ob_filter_format == 'myXML':
     # Set myXML.
     data = self.getXmlHeader() + getattr( self, 'getObjToXml_DocElmnt')(context=self)
     outfilename = _fileutil.getOSPath('%s/export.xml'%tempfolder)
     _fileutil.exportObj( data, outfilename)
   else:
     raise zExceptions.InternalError("Unknown format '%s'"%ob_filter.get('format',''))
   return tempfolder, outfilename
Exemple #14
0
 def retrieveFileStreamIterator(self, filename, REQUEST=None):
     threshold = 2 << 16  # 128 kb
     local_filename = _fileutil.getOSPath('%s/%s' %
                                          (self.location, filename))
     fsize = os.path.getsize(local_filename)
     REQUEST.RESPONSE.setHeader('content-length', fsize)
     if fsize < threshold or REQUEST.RESPONSE is None:
         try:
             f = open(local_filename, 'rb')
             data = f.read()
         finally:
             f.close()
     else:
         data = filestream_iterator(local_filename, 'rb')
     return data
Exemple #15
0
def uploadRessources(self, folder='.', mediadbStorable=True):
    langs = self.getLangIds()
    prim_lang = self.getPrimaryLanguage()
    obj_attrs = self.getObjAttrs()
    for key in obj_attrs.keys():
        obj_attr = self.getObjAttr(key)
        datatype = obj_attr['datatype_key']
        if datatype in _globals.DT_BLOBS:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang:
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = self.getObjVersion(req)
                        blob = self._getObjAttrValue(obj_attr, obj_vers, lang)
                        if blob is not None:
                            filename = _fileutil.getOSPath(
                                '%s/%s' % (folder, blob.filename))
                            _globals.writeBlock(
                                self,
                                '[uploadRessources]: filename=%s' % filename)
                            # Backup properties (otherwise manage_upload sets it).
                            bk = {}
                            for __xml_attr__ in blob.__xml_attrs__:
                                bk[__xml_attr__] = getattr(
                                    blob, __xml_attr__, '')
                            # Read file to ZODB.
                            f = open(filename, 'rb')
                            try:
                                blob = createBlobField(self,
                                                       datatype,
                                                       file={
                                                           'data': f,
                                                           'filename': filename
                                                       })
                            finally:
                                f.close()
                            # Restore properties.
                            for __xml_attr__ in blob.__xml_attrs__:
                                if bk.get(__xml_attr__, '') not in [
                                        '', 'text/x-unknown-content-type'
                                ]:
                                    setattr(blob, __xml_attr__,
                                            bk[__xml_attr__])
                            blob.getFilename()  # Normalize filename
                            self.setObjProperty(key, blob, lang)
                except:
                    _globals.writeError(self, "[uploadRessources]")
Exemple #16
0
def importFile(self, file, REQUEST, handler):
  message = ''

  # Get filename.
  if isinstance(file,ZPublisher.HTTPRequest.FileUpload):
    filename = file.filename
  else: 
    filename = file.name
  _globals.writeBlock( self, '[importFile]: filename='+filename)

  # Create temporary folder.
  folder = tempfile.mktemp()
  os.mkdir(folder)
  
  # Save to temporary file.
  filename = _fileutil.getOSPath('%s/%s'%(folder,_fileutil.extractFilename(filename)))
  _fileutil.exportObj(file,filename)
  
  # Find XML-file.
  if _fileutil.extractFileExt(filename) == 'zip':
    _fileutil.extractZipArchive(filename)
    filename = None
    for deep in [0,1]:
      for ext in ['xml', 'htm', 'html' ]:
        if filename is None:
          filename = _fileutil.findExtension(ext, folder, deep)
	  break
    if filename is None:
      raise zExceptions.InternalError('XML-File not found!')
  
  # Import Filter.
  if REQUEST.get('filter','') in self.getFilterIds():
    filename = _filtermanager.importFilter(self, filename, REQUEST.get('filter',''), REQUEST)
  
  # Import XML-file.
  _globals.writeBlock( self, '[importFile]: filename='+filename)
  f = open(filename, 'r')
  message += handler(self, f)
  f.close()
  
  # Remove temporary files.
  _fileutil.remove(folder, deep=1)
  
  # Return with message.
  message += self.getZMILangStr('MSG_IMPORTED')%('<i>%s</i>'%_fileutil.extractFilename(filename))
  return message
Exemple #17
0
 def toXml(self, sender=None, base_path='', data2hex=True):
     data = ''
     objtype = ''
     filename = _fileutil.getOSPath(
         _fileutil.extractFilename(getattr(self, 'filename', '')))
     if data2hex:
         if getattr(self, 'content_type', '').find('text/') == 0:
             data = '<![CDATA[%s]]>' % str(self.getData(sender))
         else:
             data = _globals.bin2hex(self.getData(sender))
         objtype = ' type="file"'
     else:
         filename = self.getFilename()
         filename = getLangFilename(sender, filename, self.lang)
         filename = '%s%s' % (base_path, filename)
     xml = '\n<%s' % self.xmlGetTagName()
     xml += ' content_type="%s"' % str(getattr(self, 'content_type', ''))
     xml += ' filename="%s"' % filename
     xml += objtype + '>' + data
     xml += '</%s>' % self.xmlGetTagName()
     return xml
 def __init__(self, filename='_language.xml'):
   """
   Constructor 
   """
   manage_langs = []
   lang_dict = {}
   filepath = package_home(globals())+'/import/'
   xmlfile = open(_fileutil.getOSPath(filepath+filename),'rb')
   builder = _xmllib.XmlBuilder()
   nWorkbook = builder.parse(xmlfile)
   for nWorksheet in _xmllib.xmlNodeSet(nWorkbook,'Worksheet'):
     for nTable in _xmllib.xmlNodeSet(nWorksheet,'Table'):
       for nRow in _xmllib.xmlNodeSet(nTable,'Row'):
         lRow = []
         currIndex = 0
         for nCell in _xmllib.xmlNodeSet(nRow,'Cell'):
           ssIndex = int(nCell.get('attrs',{}).get('ss:Index',currIndex+1))
           currData = None
           for i in range(currIndex+1,ssIndex):
             lRow.append(currData)
           for nData in _xmllib.xmlNodeSet(nCell,'Data'):
             currData = nData['cdata']
           lRow.append(currData)
           currIndex = ssIndex
         if len(manage_langs) == 0:
           del lRow[0]
           manage_langs = lRow
         else:
           if len(lRow) > 0:
             key = lRow[0]
             value = {}
             for i in range(len(manage_langs)):
               if i+1 < len(lRow):
                 if lRow[i+1] is not None:
                   value[manage_langs[i]] = lRow[i+1] # unicode(lRow[i+1],'utf-8').encode('utf-8')
             lang_dict[key] = value
   xmlfile.close()
   self.manage_langs = manage_langs
   self.langdict = lang_dict
Exemple #19
0
 def destroyFile(self, filename):
     try:
         filepath = _fileutil.getOSPath('%s/%s' % (self.location, filename))
         _fileutil.remove(filepath)
     except:
         pass
Exemple #20
0
 def getFileSize(self, filename):
     local_filename = _fileutil.getOSPath('%s/%s' %
                                          (self.location, filename))
     fsize = os.path.getsize(local_filename)
     return fsize
Exemple #21
0
def initContent(self, filename, REQUEST):
    file = open(
        _fileutil.getOSPath(package_home(globals()) + '/import/' + filename),
        'rb')
    _importable.importFile(self, file, REQUEST, _importable.importContent)
    file.close()
Exemple #22
0
 def zms_version(self):
     file = open(
         _fileutil.getOSPath(package_home(globals()) + '/version.txt'), 'r')
     rtn = file.read()
     file.close()
     return rtn
Exemple #23
0
def recurse_downloadRessources(self, base_path, REQUEST, incl_embedded):
    ressources = []
    # Check Constraints.
    root = getattr(self, '__root__', None)
    if root is not None:
        return ressources
    ob = self
    if ob.meta_id == 'ZMSLinkElement' and ob.isEmbedded(
            REQUEST) and incl_embedded:
        ob = ob.getRefObj()
    # Attributes.
    langs = ob.getLangIds()
    prim_lang = ob.getPrimaryLanguage()
    obj_attrs = ob.getObjAttrs()
    for key in obj_attrs.keys():
        obj_attr = ob.getObjAttr(key)
        datatype = obj_attr['datatype_key']
        if datatype in _globals.DT_BLOBS:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang or (
                            obj_attr['multilang'] == 0 and lang != prim_lang):
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = ob.getObjVersion(req)
                        blob = ob._getObjAttrValue(obj_attr, obj_vers, lang)
                        if blob is not None:
                            filename = blob.getFilename()
                            filename = getLangFilename(ob, filename, lang)
                            filename = '%s%s' % (base_path, filename)
                            filename = _fileutil.getOSPath(filename)
                            _fileutil.exportObj(blob, filename)
                            ressources.append({
                                'filepath':
                                filename,
                                'content_type':
                                blob.getContentType()
                            })
                except:
                    _globals.writeError(
                        ob,
                        "[recurse_downloadRessources]: Can't export %s" % key)
        elif datatype == _globals.DT_LIST:
            for lang in langs:
                try:
                    if obj_attr['multilang'] or lang == prim_lang or (
                            obj_attr['multilang'] == 0 and lang != prim_lang):
                        req = {'lang': lang, 'preview': 'preview'}
                        obj_vers = ob.getObjVersion(req)
                        v = ob._getObjAttrValue(obj_attr, obj_vers, lang)
                        i = 0
                        for r in v:
                            uu = []
                            if type(r) is dict:
                                for k in r.keys():
                                    u = r[k]
                                    if isinstance(u, MyImage) or isinstance(
                                            u, MyFile):
                                        uu.append(u)
                            elif isinstance(r, MyImage) or isinstance(
                                    r, MyFile):
                                uu.append(r)
                            for u in uu:
                                filename = u.getFilename()
                                filename = getLangFilename(ob, filename, lang)
                                filename = '%s@%i/%s' % (base_path, i,
                                                         filename)
                                filename = _fileutil.getOSPath(filename)
                                _fileutil.exportObj(u, filename)
                                ressources.append({
                                    'filepath':
                                    filename,
                                    'content_type':
                                    u.getContentType()
                                })
                            i = i + 1
                except:
                    _globals.writeError(
                        ob,
                        "[recurse_downloadRessources]: Can't export %s" % key)
    # Process children.
    for child in ob.getChildNodes():
        ressources.extend(
            recurse_downloadRessources(child, base_path + child.id + '/',
                                       REQUEST, incl_embedded))
    # Return list of ressources.
    return ressources
def initConf(self, filename, REQUEST):
    xmlfile = open(_fileutil.getOSPath(filename), 'rb')
    importXml(self, xmlfile, REQUEST)
    # Return filename.
    return filename
Exemple #25
0
    def resize(self, img, size, mode='resize', sffx='_thumbnail', qual=75):
        """
    Resize image.
    """
        try:
            from PIL import Image
        except:
            import Image

        # Save image in temp-folder
        tempfolder = tempfile.mktemp()
        filepath = _fileutil.getOSPath('%s/%s' % (tempfolder, img.filename))
        _fileutil.exportObj(img, filepath)

        # Resize image
        im = Image.open(filepath)
        im = im.convert('RGB')
        maxdim = max(list(size))
        if mode == 'thumbnail':
            try:
                im.thumbnail((maxdim, maxdim), Image.ANTIALIAS)
            except:
                im.thumbnail((maxdim, maxdim))
                im.save(infile, "JPEG", quality=qual)
        elif mode == 'resize':
            try:
                im = im.resize(size, Image.ANTIALIAS)
            except:
                im = im.resize(size)
        elif mode == 'square':
            try:
                width, height = im.size
                dst_width, dst_height = maxdim, maxdim
                if width > height:
                    delta = width - height
                    left = int(delta / 2)
                    upper = 0
                    right = height + left
                    lower = height
                else:
                    delta = height - width
                    left = 0
                    upper = int(delta / 2)
                    right = width
                    lower = width + upper
                im = im.crop((left, upper, right, lower))
                im = im.resize((dst_width, dst_height), Image.ANTIALIAS)
            except:
                im.resize(size)
        im.save(filepath, "JPEG", quality=qual)

        # Read resized image from file-system
        f = open(filepath, 'rb')
        result_data = f.read()
        thumb_sffx = str(sffx)
        getfilename = _fileutil.extractFilename(filepath).split('.')
        filename = getfilename[0:-1]
        filename = ".".join(filename)
        filename = filename.replace('.', '_')
        extension = _fileutil.extractFileExt(filepath)
        result_filename = filename + thumb_sffx + '.' + extension
        result = {'data': result_data, 'filename': result_filename}
        f.close()

        # Remove temp-folder and images
        _fileutil.remove(tempfolder, deep=1)

        # Returns resulting image
        image = self.context.ImageFromData(result['data'], result['filename'])
        return image
Exemple #26
0
def toCdata(self, s, xhtml=0):
    rtn = ''

    # Return Text (HTML) in CDATA as XHTML.
    from _filtermanager import processCommand
    processId = 'tidy'
    if xhtml == 0 \
       and self.getConfProperty('ZMS.export.xml.tidy',0) \
       and processId in self.getProcessIds():

        # Create temporary folder.
        folder = tempfile.mktemp()
        os.mkdir(folder)

        # Save <HTML> to file.
        filename = _fileutil.getOSPath('%s/xhtml.html' % folder)
        _fileutil.exportObj(s, filename)

        # Call <HTML>Tidy
        processOb = self.getProcess(processId)
        command = processOb.get('command')
        if command.find('{trans}') >= 0:
            trans = _fileutil.getOSPath(
                package_home(globals()) + '/conf/xsl/tidy.html2xhtml.conf')
            command = command.replace('{trans}', trans)
        filename = processCommand(self, filename, command)

        # Read <XHTML> from file.
        f = open(htmfilename, 'rb')
        rtn = f.read().strip()
        f.close()

        # Read Error-Log from file.
        f = open(logfilename, 'rb')
        log = f.read().strip()
        f.close()

        # Remove temporary files.
        _fileutil.remove(folder, deep=1)

        # Process <XHTML>.
        prefix = '<p>'
        if s[:len(prefix)] != prefix and rtn[:len(prefix)] == prefix:
            rtn = rtn[len(prefix):]
            suffix = '</p>'
            if s[-len(suffix):] != suffix and rtn[-len(suffix):] == suffix:
                rtn = rtn[:-len(suffix)]
        f.close()

        # Process Error-Log.
        if log.find('0 errors') < 0:
            rtn += '<!-- ' + log + '-->'

    # Return Text.
    elif xhtml == -1 \
       or type(s) is float \
       or type(s) is int:
        rtn = s

    # Return Text in CDATA.
    elif s is not None:
        # Hack for invalid characters
        s = s.replace(chr(30), '')
        # Hack for nested CDATA
        s = re.compile('\<\!\[CDATA\[(.*?)\]\]\>').sub('<!{CDATA{\\1}}>', s)
        rtn = '<![CDATA[%s]]>' % s

    # Return.
    return rtn