]> Git Repo - qemu.git/blob - docs/sphinx/qmp_lexer.py
Merge remote-tracking branch 'remotes/bonzini-gitlab/tags/for-upstream' into staging
[qemu.git] / docs / sphinx / qmp_lexer.py
1 # QEMU Monitor Protocol Lexer Extension
2 #
3 # Copyright (C) 2019, Red Hat Inc.
4 #
5 # Authors:
6 #  Eduardo Habkost <[email protected]>
7 #  John Snow <[email protected]>
8 #
9 # This work is licensed under the terms of the GNU GPLv2 or later.
10 # See the COPYING file in the top-level directory.
11 """qmp_lexer is a Sphinx extension that provides a QMP lexer for code blocks."""
12
13 from pygments.lexer import RegexLexer, DelegatingLexer
14 from pygments.lexers.data import JsonLexer
15 from pygments import token
16 from sphinx import errors
17
18 class QMPExampleMarkersLexer(RegexLexer):
19     """
20     QMPExampleMarkersLexer lexes QMP example annotations.
21     This lexer adds support for directionality flow and elision indicators.
22     """
23     tokens = {
24         'root': [
25             (r'-> ', token.Generic.Prompt),
26             (r'<- ', token.Generic.Prompt),
27             (r' ?\.{3} ?', token.Generic.Prompt),
28         ]
29     }
30
31 class QMPExampleLexer(DelegatingLexer):
32     """QMPExampleLexer lexes annotated QMP examples."""
33     def __init__(self, **options):
34         super(QMPExampleLexer, self).__init__(JsonLexer, QMPExampleMarkersLexer,
35                                               token.Error, **options)
36
37 def setup(sphinx):
38     """For use by the Sphinx extensions API."""
39     try:
40         sphinx.require_sphinx('2.1')
41         sphinx.add_lexer('QMP', QMPExampleLexer)
42     except errors.VersionRequirementError:
43         sphinx.add_lexer('QMP', QMPExampleLexer())
This page took 0.024662 seconds and 4 git commands to generate.