# QEMU Monitor Protocol Lexer Extension # # Copyright (C) 2019, Red Hat Inc. # # Authors: # Eduardo Habkost # John Snow # # 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())