def c_tokenizer( self, token, match, style, ): """ Callback for C specific highlighting. """ value = _local_html_escape(match.group(), quote=False) self.change_style(token, style) self.output.append(value)
def html_tokenizer( self, token, match, style, ): """ Callback for HTML specific highlighting. """ value = _local_html_escape(match.group(), quote=False) self.change_style(token, style) self.output.append(value) if token == 'GOTOPYTHON': return 'PYTHON' return None
def python_tokenizer( self, token, match, style, ): """ Callback for python specific highlighting. """ value = _local_html_escape(match.group(), quote=False) if token == 'MULTILINESTRING': self.change_style(token, style) self.output.append(value) self.strMultilineString = match.group(1) return 'PYTHONMultilineString' elif token == 'ENDMULTILINESTRING': if match.group(1) == self.strMultilineString: self.output.append(value) self.strMultilineString = '' return 'PYTHON' if style and style[:5] == 'link:': self.change_style(None, None) (url, style) = style[5:].split(';', 1) if url == 'None' or url == '': self.output.append('<span style="%s">%s</span>' % (style, value)) else: self.output.append('<a href="%s%s" style="%s">%s</a>' % (url, value, style, value)) else: self.change_style(token, style) self.output.append(value) if token == 'GOTOHTML': return 'HTML' return None
def highlight( code, language, link='/examples/globals/vars/', counter=1, styles=None, highlight_line=None, context_lines=None, attributes=None, ): styles = styles or {} attributes = attributes or {} if not 'CODE' in styles: code_style = """ font-size: 11px; font-family: Bitstream Vera Sans Mono,monospace; background-color: transparent; margin: 0; padding: 5px; border: none; overflow: auto; white-space: pre !important;\n""" else: code_style = styles['CODE'] if not 'LINENUMBERS' in styles: linenumbers_style = """ font-size: 11px; font-family: Bitstream Vera Sans Mono,monospace; background-color: transparent; margin: 0; padding: 5px; border: none; color: #A0A0A0;\n""" else: linenumbers_style = styles['LINENUMBERS'] if not 'LINEHIGHLIGHT' in styles: linehighlight_style = "background-color: #EBDDE2;" else: linehighlight_style = styles['LINEHIGHLIGHT'] if language and language.upper() in ['PYTHON', 'C', 'CPP', 'HTML', 'WEB2PY']: code = Highlighter(language, link, styles).highlight(code) else: code = _local_html_escape(code, quote=False) lines = code.split('\n') if counter is None: linenumbers = [''] * len(lines) elif isinstance(counter, str): linenumbers = [_local_html_escape(counter, quote=False)] * len(lines) else: linenumbers = [str(i + counter) + '.' for i in xrange(len(lines))] if highlight_line: if counter and not isinstance(counter, str): lineno = highlight_line - counter else: lineno = highlight_line if lineno < len(lines): lines[lineno] = '<div style="%s">%s</div>' % ( linehighlight_style, lines[lineno]) linenumbers[lineno] = '<div style="%s">%s</div>' % ( linehighlight_style, linenumbers[lineno]) if context_lines: if lineno + context_lines < len(lines): del lines[lineno + context_lines:] del linenumbers[lineno + context_lines:] if lineno - context_lines > 0: del lines[0:lineno - context_lines] del linenumbers[0:lineno - context_lines] code = '<br/>'.join(lines) numbers = '<br/>'.join(linenumbers) items = attributes.items() fa = ' '.join([key[1:].lower() for (key, value) in items if key[:1] == '_' and value is None] + ['%s="%s"' % (key[1:].lower(), str(value).replace('"', "'")) for (key, value) in attributes.items() if key[:1] == '_' and value]) if fa: fa = ' ' + fa return '<table%s><tr style="vertical-align:top;"><td style="min-width:40px; text-align: right;"><pre style="%s">%s</pre></td><td><pre style="%s">%s</pre></td></tr></table>'\ % (fa, linenumbers_style, numbers, code_style, code)
def xml(self): return str(self) if self.M else _local_html_escape(str(self), quote=False)