12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- # 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
- from pygments import token
- from sphinx import errors
- class QMPExampleMarkersLexer(RegexLexer):
- """
- QMPExampleMarkersLexer lexes QMP example annotations.
- This lexer adds support for directionality flow and elision indicators.
- """
- tokens = {
- 'root': [
- (r'-> ', token.Generic.Prompt),
- (r'<- ', token.Generic.Prompt),
- (r' ?\.{3} ?', token.Generic.Prompt),
- ]
- }
- class QMPExampleLexer(DelegatingLexer):
- """QMPExampleLexer lexes annotated QMP examples."""
- def __init__(self, **options):
- super(QMPExampleLexer, self).__init__(JsonLexer, QMPExampleMarkersLexer,
- token.Error, **options)
- def setup(sphinx):
- """For use by the Sphinx extensions API."""
- try:
- sphinx.require_sphinx('2.1')
- sphinx.add_lexer('QMP', QMPExampleLexer)
- except errors.VersionRequirementError:
- sphinx.add_lexer('QMP', QMPExampleLexer())
|