Package ganeti :: Package build :: Module shell_example_lexer
[hide private]
[frames] | no frames]

Source Code for Module ganeti.build.shell_example_lexer

 1  # 
 2  # 
 3   
 4  # Copyright (C) 2012 Google Inc. 
 5  # All rights reserved. 
 6  # 
 7  # Redistribution and use in source and binary forms, with or without 
 8  # modification, are permitted provided that the following conditions are 
 9  # met: 
10  # 
11  # 1. Redistributions of source code must retain the above copyright notice, 
12  # this list of conditions and the following disclaimer. 
13  # 
14  # 2. Redistributions in binary form must reproduce the above copyright 
15  # notice, this list of conditions and the following disclaimer in the 
16  # documentation and/or other materials provided with the distribution. 
17  # 
18  # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
19  # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
20  # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
21  # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
22  # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
23  # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
24  # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
25  # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
26  # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
27  # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
28  # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
29   
30   
31  """Pygments lexer for our custom shell example sessions. 
32   
33  The lexer support the following custom markup: 
34   
35    - comments: # this is a comment 
36    - command lines: '$ ' at the beginning of a line denotes a command 
37    - variable input: %input% (works in both commands and screen output) 
38    - otherwise, regular text output from commands will be plain 
39   
40  """ 
41   
42  from pygments.lexer import RegexLexer, bygroups, include 
43  from pygments.token import Name, Text, Generic, Comment 
44   
45   
46 -class ShellExampleLexer(RegexLexer):
47 name = "ShellExampleLexer" 48 aliases = "shell-example" 49 filenames = [] 50 51 tokens = { 52 "root": [ 53 include("comments"), 54 include("userinput"), 55 # switch to state input on '$ ' at the start of the line 56 (r"^\$ ", Text, "input"), 57 (r"\s+", Text), 58 (r"[^#%\s\\]+", Text), 59 (r"\\", Text), 60 ], 61 "input": [ 62 include("comments"), 63 include("userinput"), 64 (r"[^#%\s\\]+", Generic.Strong), 65 (r"\\\n", Generic.Strong), 66 (r"\\", Generic.Strong), 67 # switch to prev state at non-escaped new-line 68 (r"\n", Text, "#pop"), 69 (r"\s+", Text), 70 ], 71 "comments": [ 72 (r"#.*\n", Comment.Single), 73 ], 74 "userinput": [ 75 (r"(\\)(%)", bygroups(None, Text)), 76 (r"(%)([^%]*)(%)", bygroups(None, Name.Variable, None)), 77 ], 78 }
79 80
81 -def setup(app):
82 app.add_lexer("shell-example", ShellExampleLexer())
83