@@ -41,7 +41,7 @@ except NameError:
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use an absolute path starting from qemu_docdir.
#
-# sys.path.insert(0, os.path.join(qemu_docdir, "my_subdir"))
+sys.path.insert(0, os.path.join(qemu_docdir, "sphinx"))
# -- General configuration ------------------------------------------------
@@ -54,7 +54,7 @@ needs_sphinx = '1.3'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
-extensions = []
+extensions = ['qmp_lexer']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
new file mode 100644
@@ -0,0 +1,34 @@
+# QEMU Monitor Protocol Lexer Extension
+#
+# Copyright (C) 2019, Red Hat Inc.
+#
+# Authors:
+# Eduardo Habkost <ehabkost@redhat.com>
+# John Snow <jsnow@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPLv2 or later.
+# See the COPYING file in the top-level directory.
+"""qmp_lexer is a Sphinx extension that provides a QMP lexer for code blocks."""
+
+from pygments.lexer import RegexLexer, DelegatingLexer
+from pygments.lexers.data import JsonLexer
+import pygments.token
+
+class QMPExampleMarkersLexer(RegexLexer):
+ """QMPExampleMarkersLexer lexes directionality flow indicators."""
+ tokens = {
+ 'root': [
+ (r'-> ', pygments.token.Generic.Prompt),
+ (r'<- ', pygments.token.Generic.Prompt),
+ ]
+ }
+
+class QMPExampleLexer(DelegatingLexer):
+ """QMPExampleLexer lexes annotated QMP examples."""
+ def __init__(self, **options):
+ super(QMPExampleLexer, self).__init__(JsonLexer, QMPExampleMarkersLexer,
+ pygments.token.Error, **options)
+
+def setup(sphinx):
+ """For use by the Sphinx extensions API."""
+ sphinx.add_lexer("QMP", QMPExampleLexer())