Changeset 518:91051b36b9cc in documentViewer for MpdlXmlTextServer.py


Ignore:
Timestamp:
Mar 12, 2012, 6:01:14 PM (12 years ago)
Author:
casties
Branch:
default
Message:

uses xml info from doc-info.xql for table of contents now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • MpdlXmlTextServer.py

    r517 r518  
    7474    def getTextInfo(self, mode='', docinfo=None):
    7575        """reads document info, including page concordance, from text server"""
    76         logging.debug("getDocInfo")
    77         #TODO: check cached info
     76        logging.debug("getTextInfo mode=%s"%mode)
     77        if mode not in ['toc', 'figures', '']:
     78            mode = ''
     79        # check cached info
     80        if mode:
     81            # cached toc-request?
     82            if 'full_%s'%mode in docinfo:
     83                return docinfo
     84           
     85        else:
     86            # no toc-request
     87            if 'numTextPages' in docinfo:
     88                return docinfo
     89               
    7890        docpath = docinfo.get('textURLPath', None)
    7991        if docpath is None:
     
    8496        pagesize = 10000
    8597        pn = 1
    86         # fetch docinfo
     98        # fetch docinfo           
    8799        pagexml = self.getServerData("doc-info.xql","document=%s&info=%s&pageSize=%s&pn=%s"%(docpath,mode,pagesize,pn))
    88100        dom = ET.fromstring(pagexml)
     
    127139                            if p.tag == 'n':
    128140                                n = getInt(p.text)
    129                                 page['n'] = n
     141                                page['pn'] = n
    130142                            elif p.tag == 'no':
    131143                                page['no'] = p.text
     
    141153                # toc
    142154                elif name == 'toc':
    143                     # contains tags with table of contents
    144                     # TODO: implement
    145                     pass
     155                    # contains tags with table of contents/figures
     156                    # <toc-entry><page>13</page><level>3</level><content>Chapter I</content><level-string>1.</level-string><real-level>1</real-level></toc-entry>
     157                    tocs = []
     158                    for te in tag:
     159                        toc = {}
     160                        for t in te:
     161                            if t.tag == 'page':
     162                                toc['pn'] = getInt(t.text)
     163                            elif t.tag == 'level':
     164                                toc['level'] = t.text
     165                            elif t.tag == 'content':
     166                                toc['content'] = t.text
     167                            elif t.tag == 'level-string':
     168                                toc['level-string'] = t.text
     169                            elif t.tag == 'real-level':
     170                                toc['real-level'] = t.text
     171                               
     172                        tocs.append(toc)
     173                   
     174                    # save as full_toc/full_figures
     175                    docinfo['full_%s'%mode] = tocs
    146176
    147177        return docinfo
     
    430460
    431461
    432     def getToc(self, mode="text", docinfo=None):
     462    def getToc(self, mode='text', docinfo=None):
     463        """returns list of table of contents from docinfo"""
     464        logging.debug("getToc mode=%s"%mode)
     465        if mode == 'text':
     466            queryType = 'toc'
     467        else:
     468            queryType = mode
     469           
     470        if not 'full_%s'%queryType in docinfo:
     471            # get new toc
     472            docinfo = self.getTextInfo(queryType, docinfo)
     473           
     474        return docinfo.get('full_%s'%queryType, [])
     475
     476    def getTocPage(self, mode='text', pn=None, start=None, size=None, pageinfo=None, docinfo=None):
     477        """returns single page from the table of contents"""
     478        logging.debug("getTocPage mode=%s, pn=%s start=%s size=%s"%(mode,repr(pn),repr(start),repr(size)))
     479        fulltoc = self.getToc(mode=mode, docinfo=docinfo)
     480        if len(fulltoc) < 1:
     481            logging.error("getTocPage: unable to find toc!")
     482            return "Error: no table of contents!"       
     483       
     484        if size is None:
     485            size = pageinfo.get('tocPageSize', 30)
     486           
     487        if start is None:
     488            start = (pn - 1) * size
     489
     490        # paginate
     491        first = (start - 1)
     492        last = first + size
     493        tocs = fulltoc[first:last]
     494        tp = '<div>'
     495        for toc in tocs:
     496            pageurl = self.getLink('pn', toc['pn'])
     497            tp += '<div class="tocline">'
     498            tp += '<div class="toc name">[%s %s]</div>'%(toc['level-string'], toc['content'])
     499            tp += '<div class="toc float right page"><a href="%s">Page: %s</a></div>'%(pageurl, toc['pn'])
     500            tp += '</div>\n'
     501           
     502        tp += '</div>'
     503       
     504        return tp
     505       
     506
     507    def getToc_old(self, mode="text", docinfo=None):
    433508        """loads table of contents and stores XML in docinfo"""
    434509        logging.debug("getToc mode=%s"%mode)
     
    473548        return docinfo
    474549   
    475     def getTocPage(self, mode="text", pn=None, start=None, size=None, pageinfo=None, docinfo=None):
     550    def getTocPage_old(self, mode="text", pn=None, start=None, size=None, pageinfo=None, docinfo=None):
    476551        """returns single page from the table of contents"""
    477552        logging.debug("getTocPage mode=%s, pn=%s"%(mode,pn))
Note: See TracChangeset for help on using the changeset viewer.