Diff for /ECHO_content/vlp_xmlhelpers.py between versions 1.2 and 1.11

version 1.2, 2004/10/05 14:58:56 version 1.11, 2007/07/24 09:11:46
Line 1 Line 1
 from sys import argv  from sys import argv
   
 import string  import string
   import logging
 import xml.dom.minidom  import xml.dom.minidom
 import Ft.Xml.XLink.Processor  import Ft.Xml.XLink.Processor
 import Ft.Xml.XLink.XLinkElements  import Ft.Xml.XLink.XLinkElements
Line 9  from Ft.Xml import XPath Line 10  from Ft.Xml import XPath
 from Ft.Xml.XPath import Evaluate  from Ft.Xml.XPath import Evaluate
 from Ft.Xml.XLink import XLINK_NAMESPACE  from Ft.Xml.XLink import XLINK_NAMESPACE
 from Ft.Xml.XLink import XLinkElements  from Ft.Xml.XLink import XLinkElements
   import cStringIO
 #from Ft.Xml.Domlette import NonvalidatingReader,InputSource  from Ft.Xml.Domlette import NonvalidatingReader, PrettyPrint,Print
 #from Ft.Xml import EMPTY_NAMESPACE  from Ft.Xml import EMPTY_NAMESPACE
 from Ft.Lib import Uri  from Ft.Lib import Uri
 import urllib  import urllib
 import re  import re
   from ECHO_collection import unicodify,utf8ify
   
   patternTXT=r"<\s*txt.*?>(.*?)</txt>"
   regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL)
 patternPage=r"<\s*page.*?>(.*?)</page>"  patternPage=r"<\s*page.*?>(.*?)</page>"
 regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)  regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL)
   
Line 63  def proj2hash(self,xmlstring): Line 67  def proj2hash(self,xmlstring):
                 addToDict(list,'WEB_project_header',sec[1]) # store title                  addToDict(list,'WEB_project_header',sec[1]) # store title
                 addToDict(list,'WEB_project_description',sec[2]) #store description                  addToDict(list,'WEB_project_description',sec[2]) #store description
             else: # no information in heading              else: # no information in heading
                 level=sec[3]                  level=int(sec[3])+2
                 aTag="<h%s>"%level                  aTag="<h%i>"%level
                 eTag="</h%s>"%level                  eTag="</h%i>"%level
                 addToDict(list,"text",aTag+sec[1]+eTag)                  addToDict(list,"text",aTag+sec[1]+eTag)
                 addToDict(list,"text",sec[2])                  addToDict(list,"text",sec[2])
         sectionXPath+="/section"          sectionXPath+="/section"
Line 149  def par2html(self,pars,tags=None): Line 153  def par2html(self,pars,tags=None):
                           
         elif tagName=="pb":          elif tagName=="pb":
             html+="<pb/>"              html+="<pb/>"
         elif tagName=="img":          
             html+="XXX"  
           
     try:      try:
   
Line 168  def getXlink(nodes): Line 171  def getXlink(nodes):
     return ret      return ret
   
 def checkRef(self,ref):  def checkRef(self,ref):
         dbs={'vl_literature':'AND CD LIKE \'%lise%\'','vl_technology':'','vl_people':'','vl_sites':''}          """teste ob reference angezeigt werden sollen"""
           dbs={'vl_literature':'AND online = \'1\'',
                'vl_technology':'AND complete =\'yes\'',
                'vl_people':'AND complete =\'yes\'',
                'vl_sites':'AND complete =\'yes\'',
                'vl_transcript':'AND complete =\'yes\'',
                'vl_essays':'AND online =\'yes\'',
            'vl_categories':''
                }
         res=None          res=None
         for db in dbs.keys():          for db in dbs.keys():
               searchStr=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db]))
             res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))              res=res or self.search(var=searchStr)
         return res          return res
   
 def xml2html(self,str,quote="yes"):  def link2html(self,str):
         """link2html fuer VLP muss hier noch raus"""          """link2html liks in html wandeln"""
           if str:
   
               str=re.sub("\&","&amp;",str)
               dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+utf8ify(str)+"</txt>")
               links=dom.getElementsByTagName("link")
               
   
               for link in links:
                   link.tagName="a"
                   ref=link.getAttribute("ref")
                   pn=link.getAttribute("page")
                           
                   if self.checkRef(ref):
                           if pn:
                                   link.setAttribute("href",self.REQUEST['SERVER_URL']+"/references?id="+ref+"&page="+pn)
                           else:
                                   link.setAttribute("href",self.REQUEST['SERVER_URL']+"/references?id="+ref)
   
   
               newxml=dom.toxml('utf-8')
             
               retStr=regexpTXT.search(newxml)
               retStr = retStr.group(1)
           
               return retStr.decode('utf-8') # we return unicode
                   
           return u""
   
   def related2html(self,str):
       """related library items: xlinks in html wandeln / mb 22.11.2006"""
         if str:          if str:
             if quote=="yes2":  
                 str=re.sub("\&","&amp;",str)  
                           
             str=re.sub("ref\=([^>]*)\>",'ref=\"\g<1>\">',str)# einfuegen anfuehrungszeichen um ref attribut, falls fehlt.          str=re.sub("\&","&amp;",str)
             #str=re.sub("ref\=([.[*^[>]]])",'XX',str)          dom=xml.dom.minidom.parseString("<?xml version='1.0' encoding='utf-8'?><txt>"+str+"</txt>")
             #print "STR::",str  
             dom=xml.dom.minidom.parseString(str)  
             links=dom.getElementsByTagName("link")              links=dom.getElementsByTagName("link")
                           
             for link in links:              for link in links:
Line 194  def xml2html(self,str,quote="yes"): Line 229  def xml2html(self,str,quote="yes"):
                 ref=link.getAttribute("ref")                  ref=link.getAttribute("ref")
         pn=link.getAttribute("page")          pn=link.getAttribute("page")
   
                 if checkRef(self,ref):              searchStr="select fullreference, online from vl_literature where reference =\'%s\' and authorized = 1"%(ref)
               res = self.search(var=searchStr)
                                           
               if res:
                   if res[0]['online'] == 1: 
                       # item online verfuegbar
             if pn:              if pn:
                 link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn)                          link.setAttribute("href",self.REQUEST['SERVER_URL']+"/references?id="+ref+"&page="+pn)
                       else:
                           link.setAttribute("href",self.REQUEST['SERVER_URL']+"/references?id="+ref)
                           
                       link.setAttribute("title", "click to view")
                       link.removeAttribute("ref")
                       
                       # prefix preceding the link
                       prefix = dom.createTextNode(U"\u2013\u0020") # = ndash + space
                       dom.documentElement.insertBefore(prefix, link)
   
             else:              else:
                 link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref)                      # item nur als bibliographische angabe vorhanden
                       link.setAttribute("alt", res[0]['fullreference'].decode('utf-8'))
                       link.setAttribute("title", "click to expand")
                       link.setAttribute("onclick", "return toggle(this);")
                       link.setAttribute("class", "x_offline")
                       
                       # prefix inside link text
                       link.firstChild.data = '+ ' + link.firstChild.data
                       
               
           newxml=dom.toxml('utf-8')
                   
           retStr=regexpTXT.search(newxml)
           retStr = retStr.group(1)
   
           return retStr.decode('utf-8') # we return unicode
                                              
       return u""
   
       
   
   
   def xml2html(self,str,quote="yes"):
           """link2html fuer VLP muss hier noch raus"""
           if str:
               if quote=="yes2":
                   str=re.sub("\&","&amp;",str)
               #dom=xml.dom.minidom.parseString(str)
               dom = NonvalidatingReader.parseString(str,"http://www.mpiwg-berlin.mpg.de/")
               #links=dom.getElementsByTagName("link")
               links=Ft.Xml.XPath.Evaluate(".//link", contextNode=dom)
               for link in links:
                   #link.tagName="a"
           
                   ref=link.getAttributeNS(EMPTY_NAMESPACE,"ref")
                   pn=link.getAttributeNS(EMPTY_NAMESPACE,"page")
   
                   cns=link.childNodes[0:]
                   
                   newLink=dom.createElementNS(EMPTY_NAMESPACE,"a")
                   for x in cns:
                           newLink.appendChild(x)
   
             str= dom.toxml()  
                   
                   
                   link.parentNode.replaceChild(newLink,link)
   
                   if self.checkRef(ref):
                           if pn:
                                   newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.REQUEST['SERVER_URL']+"/references?id="+ref+"&page="+pn)
                           else:
                                   newLink.setAttributeNS(EMPTY_NAMESPACE,"href",self.REQUEST['SERVER_URL']+"/references?id="+ref)
   
               #str= dom.toxml('utf-8')
               buf = cStringIO.StringIO()
               PrettyPrint(dom, stream=buf)
               str = buf.getvalue()
               buf.close()
               #str=PrettyPrint(dom.documentElement,encoding='UTF-8')
         #print link.toxml('utf-8')          #print link.toxml('utf-8')
               #print type(str)
         retStr=regexpPage.search(str)          retStr=regexpPage.search(str)
   
             try:              try: # hack warum fehtl manchmal page??
                 return retStr.group(1)                      return retStr.group(1).decode('utf-8')
             except:              except:
                 exStr="""<?xml version="1.0" ?>"""                      return str
                 str=re.sub("\n","",str)  
                 #str=  
                 #print repr(str)  
                 return str.replace(exStr,'')  
         return ""          return ""
           
       
 def xlink2html(self,xlink,parClass=None):  def xlink2html(self,xlink,parClass=None):
     ret=""      ret=""
     attributes=xlink.attributes      attributes=xlink.attributes

Removed from v.1.2  
changed lines
  Added in v.1.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>