Diff for /documentViewer/MpdlXmlTextServer.py between versions 1.238.2.6 and 1.238.2.14

version 1.238.2.6, 2011/08/03 19:04:18 version 1.238.2.14, 2011/08/16 16:27:08
Line 1 Line 1
   
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
 from Products.PageTemplates.PageTemplateFile import PageTemplateFile   from Products.PageTemplates.PageTemplateFile import PageTemplateFile 
   
Line 30  def getTextFromNode(node): Line 29  def getTextFromNode(node):
     """get the cdata content of a node"""      """get the cdata content of a node"""
     if node is None:      if node is None:
         return ""          return ""
     # ET:  
 #    text = node.text or ""  
 #    for e in node:  
 #        text += gettext(e)  
 #        if e.tail:  
 #            text += e.tail  
   
     # 4Suite:      # 4Suite:
     nodelist=node.childNodes      nodelist=node.childNodes
Line 96  class MpdlXmlTextServer(SimpleItem): Line 89  class MpdlXmlTextServer(SimpleItem):
         url = docinfo['url']          url = docinfo['url']
         pagesize = pageinfo['queryPageSize']          pagesize = pageinfo['queryPageSize']
         pn = pageinfo.get('searchPN',1)          pn = pageinfo.get('searchPN',1)
         sn = pageinfo['sn']          sn = pageinfo.get('sn',None) #TODO: is this s now?
         highlightQuery = pageinfo['highlightQuery']          highlightQuery = pageinfo['highlightQuery']
         query =pageinfo['query']          query =pageinfo['query']
         queryType =pageinfo['queryType']          queryType =pageinfo['queryType']
Line 188  class MpdlXmlTextServer(SimpleItem): Line 181  class MpdlXmlTextServer(SimpleItem):
         if not docpath:          if not docpath:
             return None              return None
   
         url = docinfo['url']  
         selfurl = self.absolute_url()  
         pn = pageinfo['current']          pn = pageinfo['current']
         hrefList=[]          hrefList=[]
         myList= ""          myList= ""
Line 207  class MpdlXmlTextServer(SimpleItem): Line 198  class MpdlXmlTextServer(SimpleItem):
     def getAllGisPlaces (self, docinfo=None, pageinfo=None):      def getAllGisPlaces (self, docinfo=None, pageinfo=None):
         """Show all Gis Places of whole Book """          """Show all Gis Places of whole Book """
         xpath ='//echo:place'          xpath ='//echo:place'
         docpath =docinfo['textURLPath']  
         url = docinfo['url']  
         selfurl =self.absolute_url()  
         pn =pageinfo['current']  
         hrefList=[]          hrefList=[]
         myList=""          myList=""
         text=self.getServerData("xpath.xql", "document=%s&xpath=%s"%(docinfo['textURLPath'],xpath))          text=self.getServerData("xpath.xql", "document=%s&xpath=%s"%(docinfo['textURLPath'],xpath))
Line 229  class MpdlXmlTextServer(SimpleItem): Line 216  class MpdlXmlTextServer(SimpleItem):
         """processes page info divs from dom and stores in docinfo and pageinfo"""          """processes page info divs from dom and stores in docinfo and pageinfo"""
         # assume first second level div is pageMeta          # assume first second level div is pageMeta
         alldivs = dom.find("div")          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:          for div in alldivs:
             dc = div.get('class')              dc = div.get('class')
                           
Line 240  class MpdlXmlTextServer(SimpleItem): Line 232  class MpdlXmlTextServer(SimpleItem):
             elif dc == 'pageNumberOrigNorm':              elif dc == 'pageNumberOrigNorm':
                 pageinfo['pageNumberOrigNorm'] = div.text                  pageinfo['pageNumberOrigNorm'] = div.text
                                   
             # pageNumberOrigNorm              # pageHeaderTitle
               elif dc == 'pageHeaderTitle':
                   pageinfo['pageHeaderTitle'] = div.text
                   
               # numFigureEntries
             elif dc == 'countFigureEntries':              elif dc == 'countFigureEntries':
                 docinfo['numFigureEntries'] = getInt(div.text)                  docinfo['numFigureEntries'] = getInt(div.text)
                                   
             # pageNumberOrigNorm              # numTocEntries
             elif dc == 'countTocEntries':              elif dc == 'countTocEntries':
                 # WTF: s1 = int(s)/30+1                  # WTF: s1 = int(s)/30+1
                 docinfo['numTocEntries'] = getInt(div.text)                  docinfo['numTocEntries'] = getInt(div.text)
                                   
             # pageHeaderTitle              # numPlaces
             elif dc == 'pageHeaderTitle':              elif dc == 'countPlaces':
                 docinfo['pageHeaderTitle'] = div.text                  docinfo['numPlaces'] = getInt(div.text)
                                   
             # numTextPages              # numTextPages
             elif dc == 'countPages':              elif dc == 'countPages':
Line 261  class MpdlXmlTextServer(SimpleItem): Line 257  class MpdlXmlTextServer(SimpleItem):
                     if docinfo.get('numPages', 0) == 0:                      if docinfo.get('numPages', 0) == 0:
                         # seems to be text-only - update page count                          # seems to be text-only - update page count
                         docinfo['numPages'] = np                          docinfo['numPages'] = np
                         pageinfo['end'] = min(pageinfo['end'], np)                          #pageinfo['end'] = min(pageinfo['end'], np)
                         pageinfo['numgroups'] = int(np / pageinfo['groupsize'])                          pageinfo['numgroups'] = int(np / pageinfo['groupsize'])
                         if np % pageinfo['groupsize'] > 0:                          if np % pageinfo['groupsize'] > 0:
                             pageinfo['numgroups'] += 1                              pageinfo['numgroups'] += 1
                                                           
           #logging.debug("processPageInfo: pageinfo=%s"%repr(pageinfo))
         return          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"""          """returns single page from fulltext"""
         logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn))          logging.debug("getTextPage mode=%s, pn=%s"%(mode,pn))
         # check for cached text -- but this shouldn't be called twice          # check for cached text -- but ideally this shouldn't be called twice
         if pageinfo.has_key('textPage'):          if pageinfo.has_key('textPage'):
             logging.debug("getTextPage: using cached text")              logging.debug("getTextPage: using cached text")
             return pageinfo['textPage']              return pageinfo['textPage']
Line 290  class MpdlXmlTextServer(SimpleItem): Line 287  class MpdlXmlTextServer(SimpleItem):
         tocMode = pageinfo.get('tocMode', None)          tocMode = pageinfo.get('tocMode', None)
         tocPN = pageinfo.get('tocPN',None)          tocPN = pageinfo.get('tocPN',None)
         characterNormalization = pageinfo.get('characterNormalization', None)          characterNormalization = pageinfo.get('characterNormalization', None)
           
         selfurl = docinfo['viewerUrl']             selfurl = docinfo['viewerUrl']   
                   
         if mode == "text_dict":          if mode == "dict" or mode == "text_dict":
             # text_dict is called textPollux in the backend              # dict is called textPollux in the backend
             textmode = "textPollux"              textmode = "textPollux"
           elif not mode:
               # default is text
               mode = "text"
               textmode = "text"
         else:          else:
             textmode = mode              textmode = mode
                   
Line 321  class MpdlXmlTextServer(SimpleItem): Line 323  class MpdlXmlTextServer(SimpleItem):
                   
         # plain text mode          # plain text mode
         if mode == "text":          if mode == "text":
             if pagediv:              # get full url assuming documentViewer is parent
               selfurl = self.getLink()
               if pagediv is not None:
                 links = pagediv.findall(".//a")                  links = pagediv.findall(".//a")
                 for l in links:                  for l in links:
                     href = l.get('href')                      href = l.get('href')
                     if href and href.startswith('#note-'):                      if href and href.startswith('#note-'):
                         href = href.replace('#note-',"?mode=%s&url=%s&viewMode=text&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn))                          href = href.replace('#note-',"%s#note-"%selfurl)
                         l.set('href', href)                          l.set('href', href)
   
                 return serialize(pagediv)                  return serialize(pagediv)
                           
         # text-with-links mode          # text-with-links mode
         elif mode == "text_dict":          elif mode == "dict":
             if pagediv:              if pagediv is not None:
                   viewerurl = docinfo['viewerUrl']
                   selfurl = self.getLink()
                 # check all a-tags                  # check all a-tags
                 links = pagediv.findall(".//a")                  links = pagediv.findall(".//a")
                 for l in links:                  for l in links:
Line 342  class MpdlXmlTextServer(SimpleItem): Line 348  class MpdlXmlTextServer(SimpleItem):
                     if href:                      if href:
                         # is link with href                          # is link with href
                         if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'):                          if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql'):
                             # is pollux link                              # is dictionary link - change href (keeping parameters)
                             selfurl = self.absolute_url()                              l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/template/viewer_wordinfo'%viewerurl))
                             # change href                              # add target to open new page
                             l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/interface/lt/wordInfo.xql','%s/head_main_voc'%selfurl))  
                             # add target  
                             l.set('target', '_blank')                              l.set('target', '_blank')
                                                                                                                       
                           # TODO: is this needed?
                         if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'):                              if href.startswith('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql'):    
                             selfurl = self.absolute_url()                              selfurl = self.absolute_url()
                             l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl))                              l.set('href', href.replace('http://mpdl-proto.mpiwg-berlin.mpg.de/mpdl/lt/lemma.xql','%s/head_main_lemma'%selfurl))
Line 357  class MpdlXmlTextServer(SimpleItem): Line 362  class MpdlXmlTextServer(SimpleItem):
                             l.set('ondblclick', 'popupWin.focus();')                                 l.set('ondblclick', 'popupWin.focus();')   
                                           
                         if href.startswith('#note-'):                          if href.startswith('#note-'):
                             l.set('href', href.replace('#note-',"?mode=%s&url=%s&viewMode=text_dict&tocMode=%s&tocPN=%s&pn=%s#note-"%(urlmode,url,tocMode,tocPN,pn)))                              # note link
                               l.set('href', href.replace('#note-',"%s#note-"%selfurl))
                                                               
                 return serialize(pagediv)                  return serialize(pagediv)
                           
         # xml mode          # xml mode
         elif mode == "xml":          elif mode == "xml":
             if pagediv:              if pagediv is not None:
                 return serialize(pagediv)                  return serialize(pagediv)
                           
         # pureXml mode          # pureXml mode
         elif mode == "pureXml":          elif mode == "pureXml":
             if pagediv:              if pagediv is not None:
                 return serialize(pagediv)                  return serialize(pagediv)
                                       
         # gis mode          # gis mode
         elif mode == "gis":          elif mode == "gis":
             name = docinfo['name']              name = docinfo['name']
             if pagediv:              if pagediv is not None:
                 # check all a-tags                  # check all a-tags
                 links = pagediv.findall(".//a")                  links = pagediv.findall(".//a")
                 for l in links:                  for l in links:
Line 388  class MpdlXmlTextServer(SimpleItem): Line 394  class MpdlXmlTextServer(SimpleItem):
                                           
         return "no text here"          return "no text here"
           
     # WTF: is this needed?  
     def getOrigPages(self, docinfo=None, pageinfo=None):  
         logging.debug("CALLED: getOrigPages!")  
         if not pageinfo.has_key('pageNumberOrig'):  
             logging.warning("getOrigPages: not in pageinfo!")  
             return None  
           
         return pageinfo['pageNumberOrig']  
       
     # WTF: is this needed?  
     def getOrigPagesNorm(self, docinfo=None, pageinfo=None):  
         logging.debug("CALLED: getOrigPagesNorm!")  
         if not pageinfo.has_key('pageNumberOrigNorm'):  
             logging.warning("getOrigPagesNorm: not in pageinfo!")  
             return None  
           
         return pageinfo['pageNumberOrigNorm']  
                   
     # TODO: should be getWordInfo      # TODO: should be getWordInfo
     def getTranslate(self, word=None, language=None):      def getWordInfo(self, word='', language='', display=''):
         """translate into another languages"""          """show information (like dictionaries) about word"""
         data = self.getServerData("lt/wordInfo.xql","language="+str(language)+"&word="+urllib.quote(word)+"&output=html")          data = self.getServerData("lt/wordInfo.xql","language=%s&word=%s&display=%s&output=html"%(language,urllib.quote(word),urllib.quote(display)))
         return data          return data
           
     # WTF: what does this do?      # WTF: what does this do?
Line 491  class MpdlXmlTextServer(SimpleItem): Line 479  class MpdlXmlTextServer(SimpleItem):
   
         return docinfo          return docinfo
           
     def getTocPage(self, mode="text", pn=1, pageinfo=None, docinfo=None):      def getTocPage(self, mode="text", pn=None, start=None, size=None, pageinfo=None, docinfo=None):
         """returns single page from the table of contents"""          """returns single page from the table of contents"""
         logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn))          logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn))
         if mode == "text":          if mode == "text":
Line 506  class MpdlXmlTextServer(SimpleItem): Line 494  class MpdlXmlTextServer(SimpleItem):
         tocxml = docinfo.get('tocXML_%s'%mode, None)          tocxml = docinfo.get('tocXML_%s'%mode, None)
         if not tocxml:          if not tocxml:
             logging.error("getTocPage: unable to find tocXML")              logging.error("getTocPage: unable to find tocXML")
             return "No ToC"              return "Error: no table of contents!"
                   
         pagesize = int(pageinfo['tocPageSize'])          if size is None:
         url = docinfo['url']              size = pageinfo.get('tocPageSize', 30)
         urlmode = docinfo['mode']              
         selfurl = docinfo['viewerUrl']          if start is None:
         viewMode=  pageinfo['viewMode']              start = (pn - 1) * size
         tocMode = pageinfo['tocMode']  
         tocPN = int(pageinfo['tocPN'])  
         pn = tocPN  
   
         fulltoc = ET.fromstring(tocxml)          fulltoc = ET.fromstring(tocxml)
                   
         if fulltoc:          if fulltoc:
             # paginate              # paginate
             start = (pn - 1) * pagesize * 2              first = (start - 1) * 2
             len = pagesize * 2              len = size * 2
             del fulltoc[:start]              del fulltoc[:first]
             del fulltoc[len:]              del fulltoc[len:]
             tocdivs = fulltoc              tocdivs = fulltoc
                           
Line 535  class MpdlXmlTextServer(SimpleItem): Line 520  class MpdlXmlTextServer(SimpleItem):
                     # take pn from href                      # take pn from href
                     m = re.match(r'page-fragment\.xql.*pn=(\d+)', href)                      m = re.match(r'page-fragment\.xql.*pn=(\d+)', href)
                     if m is not None:                      if m is not None:
                         # and create new url                          # and create new url (assuming parent is documentViewer)
                         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))                          url = self.getLink('pn', m.group(1))
                           l.set('href', url)
                     else:                      else:
                         logging.warning("getTocPage: Problem with link=%s"%href)                          logging.warning("getTocPage: Problem with link=%s"%href)
                                                   
             return serialize(tocdivs)              # fix two-divs-per-row with containing div
               newtoc = ET.Element('div', {'class':'queryResultPage'})
               for (d1,d2) in zip(tocdivs[::2],tocdivs[1::2]):
                   e = ET.Element('div',{'class':'tocline'})
                   e.append(d1)
                   e.append(d2)
                   newtoc.append(e)
                   
               return serialize(newtoc)
           
           return "ERROR: no table of contents!"
           
           
     def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):      def manage_changeMpdlXmlTextServer(self,title="",serverUrl="http://mpdl-text.mpiwg-berlin.mpg.de/mpdl/interface/",timeout=40,RESPONSE=None):

Removed from v.1.238.2.6  
changed lines
  Added in v.1.238.2.14


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