Example #1
0
    def pageLink(self, txt=None, arr=None, node=None):
        """The link can be given as text or as a path.

        If it is given as text then also HTTP/FTP links are allowed, otherwise,
        it can only be a link to an entity in the tree.
        """
        # Compute source file name and line.
        location_candidates = []
        if node and node.entry:
            for entry in node.tree.entries[node.entry[0]:node.entry[1]]:
                if entry.line_no_begin + 1 == entry.line_no_end:
                    line = entry.line_no_begin + 1
                else:
                    line = '%s-%s' % (entry.line_no_begin + 1, entry.line_no_end)
                location_candidates.append((entry.filename, line))
        # Now, switch between txt and arr.
        is_dead = False
        if txt:
            # Split out titles from "$reference|$title".
            title = None
            if '|' in txt:
                txt, title = txt.split('|', 1)
            # Handle the different link types.
            if txt.startswith('glos:'):
                return self._glossaryLink(txt)
            elif txt.split(':')[0] in ['http', 'https', 'ftp']:
                if not title: title = txt
                return '<a href="%s" target="_top">%s</a>' % (pyratemp.escape(txt), pyratemp.escape(title))
            elif txt.startswith('nolink:'):
                if not title: title = txt[len('nolink:'):]
                return self.translateMarkup(title, node=node)
            else:
                # Is not a special link, compute two-element path and title.  We
                # will use the link generation code shared with paths as arrays.
                lst = core.splitKeys(txt[txt.startswith('.'):], '.')  # The startswith removes one leading dot if any.
                lst = core.cleanPath(lst)
                if len(lst) == 1:  # Is link to index.
                    cat, subcat = 'indexpage', lst[0]
                    if not title:
                        if self.tree.find(['globals', 'indexes', subcat]):
                            title = self.tree.find(['globals', 'indexes', subcat]).text()
                        else:
                            title = subcat
                    if not self.tree.find(subcat):
                        is_dead = True
                        self.error_logger.invalidReference(txt, location_candidates)
                else:
                    cat, subcat = lst[0], lst[1]
                    if not title: title = lst[-1]
                    if not self.tree.find([cat, subcat]):
                        is_dead = True
                        self.error_logger.invalidReference(txt, location_candidates)
        else:
            # Code for array paths.
            cat, subcat, title = arr[0], arr[1], arr[1]
        # Shared link generation code.
        title = self.translateId(title)
        filename = cat.upper() + escapeFiles(subcat) + ".html"
        dead_attr = {True: ' class="dead"', False: ''}[is_dead]
        return '<a href="%s"%s>%s</a>' % (pyratemp.escape(filename), dead_attr, title)
Example #2
0
    def pageLink(self, txt=None, arr=None, node=None):
        """The link can be given as text or as a path.

        If it is given as text then also HTTP/FTP links are allowed, otherwise,
        it can only be a link to an entity in the tree.
        """
        # Compute source file name and line.
        location_candidates = []
        if node and node.entry:
            for entry in node.tree.entries[node.entry[0]:node.entry[1]]:
                if entry.line_no_begin + 1 == entry.line_no_end:
                    line = entry.line_no_begin + 1
                else:
                    line = '%s-%s' % (entry.line_no_begin + 1, entry.line_no_end)
                location_candidates.append((entry.filename, line))
        # Now, switch between txt and arr.
        is_dead = False
        if txt:
            # Split out titles from "$reference|$title".
            title = None
            if '|' in txt:
                txt, title = txt.split('|', 1)
            # Handle the different link types.
            if txt.startswith('glos:'):
                return self._glossaryLink(txt)
            elif txt.split(':')[0] in ['http', 'https', 'ftp']:
                if not title: title = txt
                return '<a href="%s" target="_top">%s</a>' % (pyratemp.escape(txt), pyratemp.escape(title))
            elif txt.startswith('nolink:'):
                if not title: title = txt[len('nolink:'):]
                return self.translateMarkup(title, node=node)
            else:
                # Is not a special link, compute two-element path and title.  We
                # will use the link generation code shared with paths as arrays.
                lst = core.splitKeys(txt[txt.startswith('.'):], '.')  # The startswith removes one leading dot if any.
                lst = core.cleanPath(lst)
                if len(lst) == 1:  # Is link to index.
                    cat, subcat = 'indexpage', lst[0]
                    if not title:
                        if self.tree.find(['globals', 'indexes', subcat]):
                            title = self.tree.find(['globals', 'indexes', subcat]).text()
                        else:
                            title = subcat
                    if not self.tree.find(subcat):
                        is_dead = True
                        self.error_logger.invalidReference(txt, location_candidates)
                else:
                    cat, subcat = lst[0], lst[1]
                    if not title: title = lst[-1]
                    if not self.tree.find([cat, subcat]):
                        is_dead = True
                        self.error_logger.invalidReference(txt, location_candidates)
        else:
            # Code for array paths.
            cat, subcat, title = arr[0], arr[1], arr[1]
        # Shared link generation code.
        title = self.translateId(title)
        filename = cat.upper() + escapeFiles(subcat) + ".html"
        dead_attr = {True: ' class="dead"', False: ''}[is_dead]
        return '<a href="%s"%s>%s</a>' % (pyratemp.escape(filename), dead_attr, title)
Example #3
0
 def _formatCode(self, txt, linenostart=1):
     try:
         import pygments, pygments.lexers, pygments.formatters
         return pygments.highlight(
             txt, pygments.lexers.CppLexer(),
             pygments.formatters.HtmlFormatter(linenos='table',
                                               style='friendly',
                                               linenostart=linenostart))
     except ImportError:
         return '<pre>' + pyratemp.escape(txt) + '</pre>'
Example #4
0
 def toHtml(self, parseTree, node=None):
     """Translate parse tree into HTML."""
     ## print 'toHtml'
     result = []
     for type_, txt in parseTree:
         ## print '  ', type_, txt
         if type_ == 'TEXT':
             result.append(pyratemp.escape(txt))
         elif type_ == 'LINK':
             result.append(self.html.pageLink(txt, node=node))
         elif type_ == 'PRE':
             result += ['<tt>', pyratemp.escape(txt), '</tt>']
         elif type_ == 'CELL_SPLITTER':
             result.append('|')
         else:
             raise Error('Invalid type: %s' % type_)
     ## print 'DONE'
     ## print parseTree, result
     return ''.join(result)
Example #5
0
 def toHtml(self, parseTree, node=None):
     """Translate parse tree into HTML."""
     ## print 'toHtml'
     result = []
     for type_, txt in parseTree:
         ## print '  ', type_, txt
         if type_ == 'TEXT':
             result.append(pyratemp.escape(txt))
         elif type_ == 'LINK':
             result.append(self.html.pageLink(txt, node=node))
         elif type_ == 'PRE':
             result += ['<tt>', pyratemp.escape(txt), '</tt>']
         elif type_ == 'CELL_SPLITTER':
             result.append('|')
         else:
             raise Error('Invalid type: %s' % type_)
     ## print 'DONE'
     ## print parseTree, result
     return ''.join(result)
Example #6
0
 def toHtml(self, parseTree, node=None):
     """Translate parse tree into HTML."""
     ## print 'toHtml'
     result = []
     for type_, txt in parseTree:
         ## print '  ', type_, txt
         if type_ == "TEXT":
             result.append(pyratemp.escape(txt))
         elif type_ == "LINK":
             result.append(self.html.pageLink(txt, node=node))
         elif type_ == "PRE":
             result += ["<tt>", pyratemp.escape(txt), "</tt>"]
         elif type_ == "CELL_SPLITTER":
             result.append("|")
         else:
             raise Error("Invalid type: %s" % type_)
     ## print 'DONE'
     ## print parseTree, result
     return "".join(result)
Example #7
0
    def _formatCode(self, txt, linenostart=1):
        try:
            import pygments, pygments.lexers, pygments.formatters

            return pygments.highlight(
                txt,
                pygments.lexers.CppLexer(),
                pygments.formatters.HtmlFormatter(linenos="table", style="friendly", linenostart=linenostart),
            )
        except ImportError:
            return "<pre>" + pyratemp.escape(txt) + "</pre>"
Example #8
0
 def imageFilename(self, text):
     if '|' in text:
         return pyratemp.escape(text[len('type=image:'):].split('|', 1)[0])
     else:
         return pyratemp.escape(text[len('type=image:'):])
Example #9
0
 def _formatCode(self, txt, linenostart=1):
     try:
         import pygments, pygments.lexers, pygments.formatters
         return pygments.highlight(txt, pygments.lexers.CppLexer(), pygments.formatters.HtmlFormatter(linenos='table', style='friendly', linenostart=linenostart))
     except ImportError:
         return '<pre>' + pyratemp.escape(txt) + '</pre>'
Example #10
0
 def imageFilename(self, text):
     if '|' in text:
         return pyratemp.escape(text[len('type=image:'):].split('|', 1)[0])
     else:
         return pyratemp.escape(text[len('type=image:'):])
Example #11
0
 def imageFilename(self, text):
     if "|" in text:
         return pyratemp.escape(text[len("type=image:") :].split("|", 1)[0])
     else:
         return pyratemp.escape(text[len("type=image:") :])