blob: 3e1e6356dc844729305bc7a1e83dc8a71a9d8137 [file] [log] [blame]
#
# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
#
"""Simple lexer for shell sessions.
Highlights command lines (lines starting with $ prompt) and comments starting
with #. For example:
# This is a comment
$ this-is-a-command
This is output of the command
$ this-is-a-multiline-command with-some-arguments \
and more arguments \
and more arguments
And some output.
"""
from pygments.lexer import RegexLexer, words
from pygments.token import Comment, Generic, Keyword
_comment_style = Comment
# Note: there is a slight inversion of styles to make it easier to read.
# We highlight output with Prompt style and command as a normal text.
_output_style = Generic.Prompt
_command_style = Generic.Text
_prompt_style = Keyword
class CustomShellSessionLexer(RegexLexer):
name = 'CustomShellSession'
aliases = ['custom-shell-session']
filenames = ['*.log']
tokens = {
'root': [
(r'#.*\n', _comment_style),
(r'^\$', _prompt_style, 'command'),
(r'.', _output_style),
],
'command': [
(r'\\\n', _command_style), # Continue in 'command' state.
(r'$', _command_style, '#pop'), # End of line without escape.
(r'.',
_command_style), # Anything else continue in 'command' state.
]
}