Diff for /ECHO_content/ECHO_xslt.py between versions 1.13 and 1.18

version 1.13, 2006/10/12 16:37:33 version 1.18, 2007/01/09 17:01:01
Line 7  from ECHO_Nav import ECHO_pageTemplate Line 7  from ECHO_Nav import ECHO_pageTemplate
 from threading import Thread,Timer  from threading import Thread,Timer
 import threading  import threading
 from ECHO_helpers import *  from ECHO_helpers import *
 import ECHO_language  try:
       from ECHO_language import *
   except:
       print "no echo language"
       class ECHO_language:
           """leere Klasse"""
           pass
 import sys  import sys
 import urllib  import urllib
 import urlparse  import urlparse
Line 19  import transaction Line 25  import transaction
   
 import os.path  import os.path
   
 import urllib  import urllib,cgi
   
 try:  try:
     from Ft.Xml.Xslt.Processor import Processor      from Ft.Xml.Xslt.Processor import Processor
Line 100  from ZODB.FileStorage import FileStorage Line 106  from ZODB.FileStorage import FileStorage
 class ECHO_cache:  class ECHO_cache:
     def __init__(self):      def __init__(self):
         """init the storage"""          """init the storage"""
         self.storage=FileStorage("/var/tmp/echo_cache.fs")          self.storage=FileStorage(os.path.join(INSTANCE_HOME,"var/echo_cache.fs"))       
         self.db=DB(self.storage)              self.db=DB(self.storage)    
         self.connection=self.db.open()          self.connection=self.db.open()
         self.root=self.connection.root()          self.root=self.connection.root()
Line 141  class ECHO_cache: Line 147  class ECHO_cache:
             return self.root[name].get(pn,None)              return self.root[name].get(pn,None)
                   
   
 class ECHO_xslt(ECHO_pageTemplate,ECHO_language.ECHO_language):  class ECHO_xslt(ECHO_pageTemplate,ECHO_language):
     """ECHO_xslt classe"""      """ECHO_xslt classe"""
   
     meta_type="ECHO_xslt"      meta_type="ECHO_xslt"
Line 283  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 289  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         if type=="target":          if type=="target":
             for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):              for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                 fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       return urllib.unquote(fn)  # dann gibt diese zurueck 
                   
                 ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                   
                 ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                                             
                 lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s'%(ref2,selectionNodeIndex)                
                 lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=target'                  
                   lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target')
                   lstr+="&_links="+urllib.quote(url)
                                   
         else:          else:
             for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):              for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                 fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       return urllib.unquote(fn)  # dann gibt diese zurueck 
                   
                 ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                   
                 ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                                             
                 lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s'%(ref2,selectionNodeIndex)                  lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'source')
                 lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=source'                  lstr+="&_links="+urllib.quote(url)
         return lstr          return lstr
         
       def addLinksUrl(self,txt,url):
           """add reference to links to  url"""
           ret=[]
           dom=NonvalidatingReader.parseUri(url)
           textDom=NonvalidatingReader.parseString(txt)
   
           #find ids in txt
           ids=textDom.xpath("//*[@id]")
           
           for textid in ids:
               xp="//mpiwg:link[mpiwg:source/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   linkid=link.xpath("@id")[0].value         
                   ret.append('%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'source'))
              
               xp="//mpiwg:link[mpiwg:target/@refid='%s']"%textid.xpath("@id")[0].value
               for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                   ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   linkid=link.xpath("@id")[0].value         
                   ret.append('%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target'))
              
              
           return ret
             
     def addLinks(self,txt,url="http://127.0.0.1:8080/HFQP/linkCreator/getCollectionXML?collection=commentary2"):      def addLinks(self,txt,url="http://127.0.0.1:8080/HFQP/linkCreator/getCollectionXML?collection=commentary2"):
         """add links to a page from xml linkfile"""          """add links to a page from xml linkfile"""
                   
Line 319  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 361  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
             xp="//mpiwg:link[mpiwg:source/@refid='%s']"%textid.xpath("@id")[0].value              xp="//mpiwg:link[mpiwg:source/@refid='%s']"%textid.xpath("@id")[0].value
             for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):              for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                 fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  fn=link.xpath("mpiwg:target/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   print fn
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       lstr=urllib.unquote(fn)  # dann gibt diese zurueck 
                   else:
                       try:
                 ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref=link.xpath("mpiwg:target/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                   
                 ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref2=link.xpath("mpiwg:target/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  selectionNodeIndex=link.xpath("mpiwg:target/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 linkid=link.xpath("@id")[0].value                           linkid=link.xpath("@id")[0].value         
                 lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s'%(ref2,selectionNodeIndex)                          lstr=slaveurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,'target')
                 lstr+="&_links="+urllib.quote(url)+'&_url='+url+'&_linkid='+linkid+'&_linktype=target'                          lstr+="&_links="+urllib.quote(url)
                       except:
                           lstr=""
                 node=self.createLinkNode(lstr,textDom)                  node=self.createLinkNode(lstr,textDom)
                 textid.parentNode.insertBefore(node,textid)                  textid.parentNode.insertBefore(node,textid)
                               
Line 333  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 382  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
             xp="//mpiwg:link[mpiwg:target/@refid='%s']"%textid.xpath("@id")[0].value              xp="//mpiwg:link[mpiwg:target/@refid='%s']"%textid.xpath("@id")[0].value
             for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):              for link in dom.xpath(xp,explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                 fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  fn=link.xpath("mpiwg:source/@filename",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                   if urlparse.urlparse(urllib.unquote(fn))[0]=="http": # fn ist eine url
                       lstr=urllib.unquote(fn)  # dann gibt diese zurueck 
                   else:
                   
                 ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref=link.xpath("mpiwg:source/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                                   
                 ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  ref2=link.xpath("mpiwg:source/mpiwg:pagelink/@refid",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value                  selectionNodeIndex=link.xpath("mpiwg:source/mpiwg:pagelink/@selectionNodeIndex",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})[0].value
                 linkid=link.xpath("@id")[0].value                                      linkid=link.xpath("@id")[0].value                    
                 lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s'%(ref2,selectionNodeIndex)                      lstr=masterurl+'fn='+fn+'&_id='+ref+'&_pagelink=%s///%s/%s/%s'%(ref2,selectionNodeIndex,linkid,"source")
                 lstr+="&_links="+urllib.quote(url)+'&_linkid='+linkid+'&_linktype=source'                      lstr+="&_links="+urllib.quote(url)
                                   
                 node=self.createLinkNode(lstr,textDom)                  node=self.createLinkNode(lstr,textDom)
                 textid.parentNode.insertBefore(node,textid)                  textid.parentNode.insertBefore(node,textid)
Line 354  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 407  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
   
                           
                   
     def getPageLex(self,_pn="1",_id=None,_caching=None,_links=None):      def getPageLex(self,_pn="1",_id=None,_caching=None,_links=None,_showall="no",_displaylinks="yes"):
         """getpage mit lexikalischer analyse und xslt transform          """getpage mit lexikalischer analyse und xslt transform
         if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert          if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert
         """          """
           def encode(hash):
               ret=[]
               for x in hash.keys():
                   value=hash[x]
                   
                   if type(value) is ListType:
                       for z in value:
                           ret.append("%s=%s"%(x,z))
                   else:
                       ret.append("%s=%s"%(x,value))
               return "&".join(ret)
                       
                           
   
         if not _caching:          if not _caching:
             _caching=self.caching              _caching=self.caching
Line 379  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 445  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         else:          else:
            txt=self.tagLex(id=_id)             txt=self.tagLex(id=_id)
               
           if _showall=="yes":
              params=cgi.parse_qs(self.REQUEST['QUERY_STRING'])
              
              params['_pagelink']=self.addLinksUrl(txt,url=_links)
              params['_showall']='no'
             
              print self.absolute_url()+"?"+encode(params)
              self.REQUEST.RESPONSE.redirect(self.absolute_url()+"/getPageLex?"+encode(params))
              
              
         xsl=self.xslt()          xsl=self.xslt()
                   
         xsltproc=Processor()          xsltproc=Processor()
Line 390  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 466  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         xsltproc.appendStylesheet(stylesheet)          xsltproc.appendStylesheet(stylesheet)
         tmp=xsltproc.run(document)          tmp=xsltproc.run(document)
                   
         if _links:          if _links and (_displaylinks=='yes'):
             _links=urllib.unquote(_links)              _links=urllib.unquote(_links)
             tmp=self.addLinks(tmp,url=_links)              tmp=self.addLinks(tmp,url=_links)
                           
Line 438  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 514  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
         xmlt,self.baseUri=self.getTextInput()          xmlt,self.baseUri=self.getTextInput()
                   
         #get the text from cache, if existing          #get the text from cache, if existing
           try:
         fromCache=self.cache.retrieveObject(self.baseUri,"-1")          fromCache=self.cache.retrieveObject(self.baseUri,"-1")
           except:
               fromCache=None
         if fromCache and _caching=="yes":          if fromCache and _caching=="yes":
                       
             txt = fromCache              txt = fromCache
Line 462  class ECHO_xslt(ECHO_pageTemplate,ECHO_l Line 541  class ECHO_xslt(ECHO_pageTemplate,ECHO_l
             #suche wieviele pb for der id              #suche wieviele pb for der id
                           
                           
             idpb=dom.xpath("//*[@id='%s']/preceding::node()/mpiwg:pb"%_id,explicitNss={'html':'http://test.de','mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})              idpb=dom.xpath("//*[@id='%s']/preceding::node()/mpiwg:pb"%_id,explicitNss={'html':'http://www.w3.org/1999/xhtml','mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'})
             if len(idpb)==0:              if len(idpb)==0:
                 idpb=dom.xpath("//*[@id='%s']/preceding::node()/pb"%_id)                  idpb=dom.xpath("//*[@id='%s']/preceding::node()/pb"%_id)
                     
             if len(idpb)==0:              if len(idpb)==0:
                         k=0                          k=0
                         for node in dom.xpath("//*[@id='%s']//preceding::node()"%_id,explicitNss={'html':'http://test.de','mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):                          for node in dom.xpath("//*[@id='%s']//preceding::node()"%_id,explicitNss={'html':'http://www.w3.org/1999/xhtml','mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}):
                             if getattr(node,'tagName',"")=="mpiwg:pb":                              if getattr(node,'tagName',"")=="mpiwg:pb":
                                 k+=1                                  k+=1
             else:              else:
                 k=len(idpb)                  k=len(idpb)
               #pn=k-1 #-1 wegen Seitenzahlzaehlung startet mit 0
             pn=k-1 #-1 wegen Seitenzahlzaehlung startet mit 0              pn=k-1 #-1 wegen Seitenzahlzaehlung startet mit 0
               
         if pn > len(pbs):          if pn > len(pbs):
             if REQUEST:              if REQUEST:
                 return "Sorry, pagenumber %s does not exit"%(pn+1)                  return "Sorry, pagenumber %s does not exit"%(pn+1)
Line 556  def manage_addECHO_xslt(self, id, label, Line 635  def manage_addECHO_xslt(self, id, label,
             u = "%s/%s" % (u, quote(id))              u = "%s/%s" % (u, quote(id))
         REQUEST.RESPONSE.redirect(u+'/manage_main')          REQUEST.RESPONSE.redirect(u+'/manage_main')
     return ''      return ''
   

Removed from v.1.13  
changed lines
  Added in v.1.18


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