--- documentViewer/MpdlXmlTextServer.py 2011/08/03 19:04:18 1.238.2.6 +++ documentViewer/MpdlXmlTextServer.py 2011/08/09 18:27:41 1.238.2.11 @@ -1,4 +1,3 @@ - from OFS.SimpleItem import SimpleItem from Products.PageTemplates.PageTemplateFile import PageTemplateFile @@ -30,12 +29,6 @@ def getTextFromNode(node): """get the cdata content of a node""" if node is None: return "" - # ET: -# text = node.text or "" -# for e in node: -# text += gettext(e) -# if e.tail: -# text += e.tail # 4Suite: nodelist=node.childNodes @@ -188,8 +181,6 @@ class MpdlXmlTextServer(SimpleItem): if not docpath: return None - url = docinfo['url'] - selfurl = self.absolute_url() pn = pageinfo['current'] hrefList=[] myList= "" @@ -207,10 +198,6 @@ class MpdlXmlTextServer(SimpleItem): def getAllGisPlaces (self, docinfo=None, pageinfo=None): """Show all Gis Places of whole Book """ xpath ='//echo:place' - docpath =docinfo['textURLPath'] - url = docinfo['url'] - selfurl =self.absolute_url() - pn =pageinfo['current'] hrefList=[] myList="" text=self.getServerData("xpath.xql", "document=%s&xpath=%s"%(docinfo['textURLPath'],xpath)) @@ -229,6 +216,11 @@ class MpdlXmlTextServer(SimpleItem): """processes page info divs from dom and stores in docinfo and pageinfo""" # assume first second level div is pageMeta alldivs = dom.find("div") + + if alldivs is None or alldivs.get('class', '') != 'pageMeta': + logging.error("processPageInfo: pageMeta div not found!") + return + for div in alldivs: dc = div.get('class') @@ -240,18 +232,22 @@ class MpdlXmlTextServer(SimpleItem): elif dc == 'pageNumberOrigNorm': pageinfo['pageNumberOrigNorm'] = div.text - # pageNumberOrigNorm + # pageHeaderTitle + elif dc == 'pageHeaderTitle': + pageinfo['pageHeaderTitle'] = div.text + + # numFigureEntries elif dc == 'countFigureEntries': docinfo['numFigureEntries'] = getInt(div.text) - # pageNumberOrigNorm + # numTocEntries elif dc == 'countTocEntries': # WTF: s1 = int(s)/30+1 docinfo['numTocEntries'] = getInt(div.text) - # pageHeaderTitle - elif dc == 'pageHeaderTitle': - docinfo['pageHeaderTitle'] = div.text + # numPlaces + elif dc == 'countPlaces': + docinfo['numPlaces'] = getInt(div.text) # numTextPages elif dc == 'countPages': @@ -265,11 +261,12 @@ class MpdlXmlTextServer(SimpleItem): pageinfo['numgroups'] = int(np / pageinfo['groupsize']) if np % pageinfo['groupsize'] > 0: pageinfo['numgroups'] += 1 - + + #logging.debug("processPageInfo: pageinfo=%s"%repr(pageinfo)) return - def getTextPage(self, mode="text_dict", pn=1, docinfo=None, pageinfo=None): + def getTextPage(self, mode="text", pn=1, docinfo=None, pageinfo=None): """returns single page from fulltext""" logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn)) # check for cached text -- but this shouldn't be called twice @@ -292,9 +289,13 @@ class MpdlXmlTextServer(SimpleItem): characterNormalization = pageinfo.get('characterNormalization', None) selfurl = docinfo['viewerUrl'] - if mode == "text_dict": - # text_dict is called textPollux in the backend + if mode == "dict" or mode == "text_dict": + # dict is called textPollux in the backend textmode = "textPollux" + elif not mode: + # default is text + mode = "text" + textmode = "text" else: textmode = mode @@ -321,7 +322,7 @@ class MpdlXmlTextServer(SimpleItem): # plain text mode if mode == "text": - if pagediv: + if pagediv is not None: links = pagediv.findall(".//a") for l in links: href = l.get('href') @@ -332,8 +333,8 @@ class MpdlXmlTextServer(SimpleItem): return serialize(pagediv) # text-with-links mode - elif mode == "text_dict": - if pagediv: + elif mode == "dict": + if pagediv is not None: # check all a-tags links = pagediv.findall(".//a") for l in links: @@ -363,18 +364,18 @@ class MpdlXmlTextServer(SimpleItem): # xml mode elif mode == "xml": - if pagediv: + if pagediv is not None: return serialize(pagediv) # pureXml mode elif mode == "pureXml": - if pagediv: + if pagediv is not None: return serialize(pagediv) # gis mode elif mode == "gis": name = docinfo['name'] - if pagediv: + if pagediv is not None: # check all a-tags links = pagediv.findall(".//a") for l in links: @@ -491,7 +492,7 @@ class MpdlXmlTextServer(SimpleItem): return docinfo - def getTocPage(self, mode="text", pn=1, pageinfo=None, docinfo=None): + def getTocPage(self, mode="text", pn=0, pageinfo=None, docinfo=None): """returns single page from the table of contents""" logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn)) if mode == "text": @@ -508,14 +509,10 @@ class MpdlXmlTextServer(SimpleItem): logging.error("getTocPage: unable to find tocXML") return "No ToC" - pagesize = int(pageinfo['tocPageSize']) - url = docinfo['url'] - urlmode = docinfo['mode'] - selfurl = docinfo['viewerUrl'] - viewMode= pageinfo['viewMode'] - tocMode = pageinfo['tocMode'] - tocPN = int(pageinfo['tocPN']) - pn = tocPN + pagesize = pageinfo['tocPageSize'] + tocPN = pageinfo['tocPN'] + if not pn: + pn = tocPN fulltoc = ET.fromstring(tocxml) @@ -535,8 +532,9 @@ class MpdlXmlTextServer(SimpleItem): # take pn from href m = re.match(r'page-fragment\.xql.*pn=(\d+)', href) if m is not None: - # and create new url - l.set('href', '%s?mode=%s&url=%s&viewMode=%s&pn=%s&tocMode=%s&tocPN=%s'%(selfurl, urlmode, url, viewMode, m.group(1), tocMode, tocPN)) + # and create new url (assuming parent is documentViewer) + url = self.getLink('pn', m.group(1)) + l.set('href', url) else: logging.warning("getTocPage: Problem with link=%s"%href)