From a5f85e256d5f443bbc979969b37bc268122fb6e3 Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 9 Oct 2020 00:27:22 -0400 Subject: [PATCH] Default to a basic DFHack-specific pygments lexer (supporting comments and prompts) --- conf.py | 3 ++- docs/sphinx_extensions/dfhack/lexer.py | 34 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 docs/sphinx_extensions/dfhack/lexer.py diff --git a/conf.py b/conf.py index d8f86c7ae..280b2f81f 100644 --- a/conf.py +++ b/conf.py @@ -195,6 +195,7 @@ needs_sphinx = '1.8' extensions = [ 'sphinx.ext.extlinks', 'dfhack.changelog', + 'dfhack.lexer', ] # This config value must be a dictionary of external sites, mapping unique @@ -283,7 +284,7 @@ default_role = 'ref' pygments_style = 'sphinx' # The default language to highlight source code in. -highlight_language = 'none' +highlight_language = 'dfhack' # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False diff --git a/docs/sphinx_extensions/dfhack/lexer.py b/docs/sphinx_extensions/dfhack/lexer.py new file mode 100644 index 000000000..96397e241 --- /dev/null +++ b/docs/sphinx_extensions/dfhack/lexer.py @@ -0,0 +1,34 @@ +# adapted from: +# https://stackoverflow.com/a/16470058 +# https://pygments.org/docs/lexerdevelopment/ + +import re + +from pygments.lexer import RegexLexer +from pygments.token import Comment, Generic, Text +from sphinx.highlighting import lexers + +class DFHackLexer(RegexLexer): + name = 'DFHack' + aliases = ['dfhack'] + flags = re.IGNORECASE | re.MULTILINE + + tokens = { + 'root': [ + (r'\#.+$', Comment.Single), + (r'^\[[a-z]+\]\# ', Generic.Prompt), + (r'.+?', Text), + ] + } + +def register_lexer(app): + lexers['dfhack'] = DFHackLexer() + +def setup(app): + app.connect('builder-inited', register_lexer) + + return { + 'version': '0.1', + 'parallel_read_safe': True, + 'parallel_write_safe': True, + }