--- 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=""