--- ECHO_content/ECHO_xslt.py 2006/09/11 14:43:23 1.10 +++ ECHO_content/ECHO_xslt.py 2006/09/14 14:31:53 1.11 @@ -252,7 +252,7 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l fn=self.REQUEST['fn'] self.cache.deleteObject(fn) - def getPageLex(self,_pn="1",_caching=None): + def getPageLex(self,_pn="1",_id=None,_caching=None): """getpage mit lexikalischer analyse und xslt transform if _caching=yes dann wird die lwxikalisch analysierte seite in einem cache abgespeichert """ @@ -262,18 +262,20 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l fn=self.REQUEST['fn'] - - fromCache=self.cache.retrieveObject(fn,_pn) - - if fromCache and _caching=="yes": - - txt = fromCache + if not _id: + fromCache=self.cache.retrieveObject(fn,_pn) + + if fromCache and _caching=="yes": + + txt = fromCache + else: + txt=self.tagLex(nr=_pn) + + self.cache.storeObject(fn,_pn,txt[0:]) + else: - txt=self.tagLex(nr=_pn) - - self.cache.storeObject(fn,_pn,txt[0:]) - - + txt=self.tagLex(id=_id) + xsl=self.xslt() xsltproc=Processor() @@ -284,7 +286,8 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l stylesheet = InputSource.DefaultFactory.fromString(xsl) xsltproc.appendStylesheet(stylesheet) tmp=xsltproc.run(document) - + #bugfix for digilib images which doesn't accept & + tmp=tmp.replace("&","&") return tmp[0:] def getTextInput(self): @@ -309,14 +312,14 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l #return InputSource.InputSource(fact) #xmlt=urllib.urlopen(qs).read() - def getPage(self,_pn,REQUEST=None,_caching=None): + def getPage(self,_pn="-1",_id=None,REQUEST=None,_caching=None): """get a page from an xml""" if not _caching: _caching=self.caching pn=int(_pn)-1 - if pn<0: + if pn<0 and (not _id): if REQUEST: return "Sorry, pagenumbers have to be greater than 0" else: @@ -338,11 +341,29 @@ class ECHO_xslt(ECHO_pageTemplate,ECHO_l dom=NonvalidatingReader.parseString(txt,self.baseUri) #pb should have a namespache - + pbs=dom.xpath("//mpiwg:pb",explicitNss={'mpiwg':'http://www.mpiwg-berlin.mpg.de/namespace'}) + if len(pbs)==0: # versuche nochmal ohne pbs=dom.xpath("//pb") + if _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'}) + if len(idpb)==0: + idpb=dom.xpath("//*[@id='%s']/preceding::node()/pb"%_id) + + if len(idpb)==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'}): + if getattr(node,'tagName',"")=="mpiwg:pb": + k+=1 + else: + k=len(idpb) + pn=k-1 #-1 wegen Seitenzahlzaehlung startet mit 0 + if pn > len(pbs): if REQUEST: return "Sorry, pagenumber %s does not exit"%(pn+1)