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)
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>'
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)
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)
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>"
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:'):])
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>'
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:") :])