--- ECHO_content/vlp_xmlhelpers.py 2004/10/05 07:34:58 1.1 +++ ECHO_content/vlp_xmlhelpers.py 2006/11/22 17:21:10 1.10 @@ -9,13 +9,15 @@ from Ft.Xml import XPath from Ft.Xml.XPath import Evaluate from Ft.Xml.XLink import XLINK_NAMESPACE from Ft.Xml.XLink import XLinkElements - -#from Ft.Xml.Domlette import NonvalidatingReader,InputSource -#from Ft.Xml import EMPTY_NAMESPACE +import cStringIO +from Ft.Xml.Domlette import NonvalidatingReader, PrettyPrint,Print +from Ft.Xml import EMPTY_NAMESPACE from Ft.Lib import Uri import urllib import re +patternTXT=r"<\s*txt.*?>(.*?)" +regexpTXT = re.compile(patternTXT, re.IGNORECASE + re.DOTALL) patternPage=r"<\s*page.*?>(.*?)" regexpPage = re.compile(patternPage, re.IGNORECASE + re.DOTALL) @@ -63,9 +65,9 @@ def proj2hash(self,xmlstring): addToDict(list,'WEB_project_header',sec[1]) # store title addToDict(list,'WEB_project_description',sec[2]) #store description else: # no information in heading - level=sec[3] - aTag=""%level - eTag=""%level + level=int(sec[3])+2 + aTag=""%level + eTag=""%level addToDict(list,"text",aTag+sec[1]+eTag) addToDict(list,"text",sec[2]) sectionXPath+="/section" @@ -149,6 +151,7 @@ def par2html(self,pars,tags=None): elif tagName=="pb": html+="" + try: @@ -166,52 +169,150 @@ def getXlink(nodes): return ret 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\'' + } res=None for db in dbs.keys(): - - res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db]))) + searchStr=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])) + res=res or self.search(var=searchStr) return res - -def xml2html(self,str,quote="yes"): - """link2html fuer VLP muss hier noch raus""" - - + +def link2html(self,str): + """link2html liks in html wandeln""" if str: - if quote=="yes2": - str=re.sub("\&","&",str) - - str=re.sub("ref\=([^>]*)\>",'ref=\"\g<1>\">',str)# einfuegen anfuehrungszeichen um ref attribut, falls fehlt. - #str=re.sub("ref\=([.[*^[>]]])",'XX',str) - #print "STR::",str - dom=xml.dom.minidom.parseString(str) + + str=re.sub("\&","&",str) + dom=xml.dom.minidom.parseString(""+str+"") links=dom.getElementsByTagName("link") + for link in links: link.tagName="a" ref=link.getAttribute("ref") - pn=link.getAttribute("page") + 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) - if checkRef(self,ref): - if pn: - link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref+"&p="+pn) - else: - link.setAttribute("href",self.aq_parent.absolute_url()+"/vlp_coll?id="+ref) - - str= dom.toxml() - - #print link.toxml('utf-8') - retStr=regexpPage.search(str) + return retStr.group(1) - try: - return retStr.group(1) + + return "" + +def related2html(self,str): + """related library items: xlinks in html wandeln / mb 22.11.2006""" + if str: + + str=re.sub("\&","&",str) + dom=xml.dom.minidom.parseString(""+str+"") + links=dom.getElementsByTagName("link") + + for link in links: + link.tagName = "a" + ref = link.getAttribute("ref") + pn = link.getAttribute("page") + + 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: + 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: + # 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) + + return retStr.group(1) + + return "" + + + + +def xml2html(self,str,quote="yes"): + """link2html fuer VLP muss hier noch raus""" + if str: + if quote=="yes2": + str=re.sub("\&","&",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) + + + + 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 type(str) + retStr=regexpPage.search(str) + + try: # hack warum fehtl manchmal page?? + return retStr.group(1) except: - exStr="""""" - str=re.sub("\n","",str) - #str= - #print repr(str) - return str.replace(exStr,'') + return str return "" + def xlink2html(self,xlink,parClass=None): ret=""