##// END OF EJS Templates
Use correct Pygments lexers for different %%magics.
Jonathan Slenders -
Show More
@@ -7,7 +7,8 b' from prompt_toolkit.completion import Completer, Completion'
7 from prompt_toolkit.layout.lexers import Lexer
7 from prompt_toolkit.layout.lexers import Lexer
8 from prompt_toolkit.layout.lexers import PygmentsLexer
8 from prompt_toolkit.layout.lexers import PygmentsLexer
9
9
10 from pygments.lexers import Python3Lexer, BashLexer, PythonLexer
10 import pygments.lexers as pygments_lexers
11
11
12
12 class IPythonPTCompleter(Completer):
13 class IPythonPTCompleter(Completer):
13 """Adaptor to provide IPython completions to prompt_toolkit"""
14 """Adaptor to provide IPython completions to prompt_toolkit"""
@@ -56,11 +57,32 b' class IPythonPTLexer(Lexer):'
56 Wrapper around PythonLexer and BashLexer.
57 Wrapper around PythonLexer and BashLexer.
57 """
58 """
58 def __init__(self):
59 def __init__(self):
59 self.python_lexer = PygmentsLexer(Python3Lexer if PY3 else PythonLexer)
60 l = pygments_lexers
60 self.shell_lexer = PygmentsLexer(BashLexer)
61 self.python_lexer = PygmentsLexer(l.Python3Lexer if PY3 else l.PythonLexer)
62 self.shell_lexer = PygmentsLexer(l.BashLexer)
63
64 self.magic_lexers = {
65 'HTML': PygmentsLexer(l.HtmlLexer),
66 'html': PygmentsLexer(l.HtmlLexer),
67 'javascript': PygmentsLexer(l.JavascriptLexer),
68 'js': PygmentsLexer(l.JavascriptLexer),
69 'perl': PygmentsLexer(l.PerlLexer),
70 'ruby': PygmentsLexer(l.RubyLexer),
71 'latex': PygmentsLexer(l.TexLexer),
72 }
61
73
62 def lex_document(self, cli, document):
74 def lex_document(self, cli, document):
63 if document.text.startswith('!'):
75 text = document.text.lstrip()
64 return self.shell_lexer.lex_document(cli, document)
76
65 else:
77 lexer = self.python_lexer
66 return self.python_lexer.lex_document(cli, document)
78
79 if text.startswith('!') or text.startswith('%%bash'):
80 lexer = self.shell_lexer
81
82 elif text.startswith('%%'):
83 for magic, l in self.magic_lexers.items():
84 if text.startswith('%%' + magic):
85 lexer = l
86 break
87
88 return lexer.lex_document(cli, document)
General Comments 0
You need to be logged in to leave comments. Login now