Builds IPython lexers depending on the value of `python3`. The lexer inherits from an appropriate Python lexer and then adds information about IPython specific keywords (i.e. magic commands, shell commands, etc.) Parameters ---------- python3 : bool If `True`, then
(python3)
| 55 | |
| 56 | |
| 57 | def build_ipy_lexer(python3): |
| 58 | """Builds IPython lexers depending on the value of `python3`. |
| 59 | |
| 60 | The lexer inherits from an appropriate Python lexer and then adds |
| 61 | information about IPython specific keywords (i.e. magic commands, |
| 62 | shell commands, etc.) |
| 63 | |
| 64 | Parameters |
| 65 | ---------- |
| 66 | python3 : bool |
| 67 | If `True`, then build an IPython lexer from a Python 3 lexer. |
| 68 | |
| 69 | """ |
| 70 | # It would be nice to have a single IPython lexer class which takes |
| 71 | # a boolean `python3`. But since there are two Python lexer classes, |
| 72 | # we will also have two IPython lexer classes. |
| 73 | if python3: |
| 74 | PyLexer = Python3Lexer |
| 75 | name = 'IPython3' |
| 76 | aliases = ['ipython3'] |
| 77 | doc = """IPython3 Lexer""" |
| 78 | else: |
| 79 | PyLexer = PythonLexer |
| 80 | name = 'IPython' |
| 81 | aliases = ['ipython2', 'ipython'] |
| 82 | doc = """IPython Lexer""" |
| 83 | |
| 84 | ipython_tokens = [ |
| 85 | (r'(?s)(\s*)(%%capture)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 86 | (r'(?s)(\s*)(%%debug)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 87 | (r'(?is)(\s*)(%%html)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(HtmlLexer))), |
| 88 | (r'(?s)(\s*)(%%javascript)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(JavascriptLexer))), |
| 89 | (r'(?s)(\s*)(%%js)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(JavascriptLexer))), |
| 90 | (r'(?s)(\s*)(%%latex)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(TexLexer))), |
| 91 | (r'(?s)(\s*)(%%perl)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PerlLexer))), |
| 92 | (r'(?s)(\s*)(%%prun)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 93 | (r'(?s)(\s*)(%%pypy)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 94 | (r'(?s)(\s*)(%%python)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 95 | (r'(?s)(\s*)(%%python2)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PythonLexer))), |
| 96 | (r'(?s)(\s*)(%%python3)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(Python3Lexer))), |
| 97 | (r'(?s)(\s*)(%%ruby)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(RubyLexer))), |
| 98 | (r'(?s)(\s*)(%%time)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 99 | (r'(?s)(\s*)(%%timeit)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 100 | (r'(?s)(\s*)(%%writefile)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 101 | (r'(?s)(\s*)(%%file)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(PyLexer))), |
| 102 | (r"(?s)(\s*)(%%)(\w+)(.*)", bygroups(Text, Operator, Keyword, Text)), |
| 103 | (r'(?s)(^\s*)(%%!)([^\n]*\n)(.*)', bygroups(Text, Operator, Text, using(BashLexer))), |
| 104 | (r"(%%?)(\w+)(\?\??)$", bygroups(Operator, Keyword, Operator)), |
| 105 | (r"\b(\?\??)(\s*)$", bygroups(Operator, Text)), |
| 106 | (r'(%)(sx|sc|system)(.*)(\n)', bygroups(Operator, Keyword, |
| 107 | using(BashLexer), Text)), |
| 108 | (r'(%)(\w+)(.*\n)', bygroups(Operator, Keyword, Text)), |
| 109 | (r'^(!!)(.+)(\n)', bygroups(Operator, using(BashLexer), Text)), |
| 110 | (r'(!)(?!=)(.+)(\n)', bygroups(Operator, using(BashLexer), Text)), |
| 111 | (r'^(\s*)(\?\??)(\s*%{0,2}[\w\.\*]*)', bygroups(Text, Operator, Text)), |
| 112 | (r'(\s*%{0,2}[\w\.\*]*)(\?\??)(\s*)$', bygroups(Text, Operator, Text)), |
| 113 | ] |
| 114 |