mirror of https://github.com/alibaba/arthas.git
new site style
parent
c2f7f3e811
commit
f83d6b6743
@ -0,0 +1,69 @@
|
||||
import html
|
||||
|
||||
from docutils import nodes
|
||||
from pygments.formatters.html import HtmlFormatter
|
||||
from six import text_type
|
||||
from sphinx.pygments_styles import NoneStyle
|
||||
from sphinx.writers.html import HTMLTranslator
|
||||
|
||||
|
||||
# Applies syntax highlighting to a literal block if it has a class 'highlight-<language>'.
|
||||
def parsed_literal_visit_literal_block(self, node, next_visitor):
|
||||
classes = node.get('classes', [])
|
||||
lang = ''
|
||||
for c in classes:
|
||||
if c.startswith('highlight-'):
|
||||
lang = c[10:].strip()
|
||||
break
|
||||
|
||||
if len(lang) == 0:
|
||||
return next_visitor(self, node)
|
||||
|
||||
def warner(msg):
|
||||
self.builder.warn(msg, (self.builder.current_docname, node.line))
|
||||
|
||||
self.body.append(self.highlighter.highlight_block(node.astext(), lang, warn=warner))
|
||||
|
||||
raise nodes.SkipNode
|
||||
|
||||
|
||||
class HljsHighlighter(object):
|
||||
|
||||
def __init__(self, dest='html', stylename='', trim_doctest_flags=False):
|
||||
self.dest = dest
|
||||
self.trim_doctest_flags = trim_doctest_flags
|
||||
self.formatter_args = {'style': NoneStyle}
|
||||
self.formatter = HtmlFormatter
|
||||
|
||||
def get_formatter(self, **kwargs):
|
||||
return self.formatter
|
||||
|
||||
def unhighlighted(self, source):
|
||||
return '<pre>' + html.escape(source) + '</pre>\n'
|
||||
|
||||
def highlight_block(self, source, lang, opts=None, location=None, force=False, **kwargs):
|
||||
if not isinstance(source, text_type):
|
||||
source = source.decode()
|
||||
|
||||
if lang != None and lang != 'default':
|
||||
return '<div class="highlight hljs"><pre class="' + lang + '">' + html.escape(source) + '</pre></div>\n'
|
||||
else:
|
||||
return '<pre class="literal-block">' + html.escape(source) + '</pre>\n'
|
||||
|
||||
def get_stylesheet(self):
|
||||
return ''
|
||||
|
||||
|
||||
def override_highlighter(app):
|
||||
if app.builder.name == 'html':
|
||||
app.builder.highlighter = HljsHighlighter()
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.connect('builder-inited', override_highlighter)
|
||||
|
||||
# Intercept the rendering of HTML literals.
|
||||
old_visitor = HTMLTranslator.visit_literal_block
|
||||
HTMLTranslator.visit_literal_block = lambda self, node: parsed_literal_visit_literal_block(self, node, old_visitor)
|
||||
|
||||
pass
|
@ -0,0 +1 @@
|
||||
../_extensions/
|
Loading…
Reference in New Issue