Show More
@@ -217,10 +217,8 b' class IPythonConsoleLexer(Lexer):' | |||||
217 | aliases = ['ipythoncon'] |
|
217 | aliases = ['ipythoncon'] | |
218 | mimetypes = ['text/x-ipython-console'] |
|
218 | mimetypes = ['text/x-ipython-console'] | |
219 |
|
219 | |||
220 |
# The regexps used to determine what is input and what is output. |
|
220 | # The regexps used to determine what is input and what is output. | |
221 | # input regex should be consistent with and also be the combination of |
|
221 | # The default prompts for IPython are: | |
222 | # the values of the `in_template` and `in2_templates`. For example, the |
|
|||
223 | # defaults prompts are: |
|
|||
224 | # |
|
222 | # | |
225 | # c.PromptManager.in_template = 'In [\#]: ' |
|
223 | # c.PromptManager.in_template = 'In [\#]: ' | |
226 | # c.PromptManager.in2_template = ' .\D.: ' |
|
224 | # c.PromptManager.in2_template = ' .\D.: ' | |
@@ -322,11 +320,24 b' class IPythonConsoleLexer(Lexer):' | |||||
322 | self.buffer = u'' |
|
320 | self.buffer = u'' | |
323 | self.insertions = [] |
|
321 | self.insertions = [] | |
324 |
|
322 | |||
325 |
def get_m |
|
323 | def get_mci(self, line): | |
326 | """ |
|
324 | """ | |
327 | Returns the next mode and code to be added to the next mode's buffer. |
|
325 | Parses the line and returns a 3-tuple: (mode, code, insertion). | |
328 |
|
326 | |||
329 | The next mode depends on current mode and contents of line. |
|
327 | `mode` is the next mode (or state) of the lexer, and is always equal | |
|
328 | to 'input', 'output', or 'tb'. | |||
|
329 | ||||
|
330 | `code` is a portion of the line that should be added to the buffer | |||
|
331 | corresponding to the next mode and eventually lexed by another lexer. | |||
|
332 | For example, `code` could be Python code if `mode` were 'input'. | |||
|
333 | ||||
|
334 | `insertion` is a 3-tuple (index, token, text) representing an | |||
|
335 | unprocessed "token" that will be inserted into the stream of tokens | |||
|
336 | that are created from the buffer once we change modes. This is usually | |||
|
337 | the input or output prompt. | |||
|
338 | ||||
|
339 | In general, the next mode depends on current mode and on the contents | |||
|
340 | of `line`. | |||
330 |
|
341 | |||
331 | """ |
|
342 | """ | |
332 | # To reduce the number of regex match checks, we have multiple |
|
343 | # To reduce the number of regex match checks, we have multiple | |
@@ -436,7 +447,7 b' class IPythonConsoleLexer(Lexer):' | |||||
436 | self.reset() |
|
447 | self.reset() | |
437 | for match in line_re.finditer(text): |
|
448 | for match in line_re.finditer(text): | |
438 | line = match.group() |
|
449 | line = match.group() | |
439 |
mode, code, insertion = self.get_m |
|
450 | mode, code, insertion = self.get_mci(line) | |
440 |
|
451 | |||
441 | if mode != self.mode: |
|
452 | if mode != self.mode: | |
442 | # Yield buffered tokens before transitioning to new mode. |
|
453 | # Yield buffered tokens before transitioning to new mode. |
@@ -27,32 +27,36 b' available at :module:`IPython.nbconvert.utils.lexers`. These include:' | |||||
27 | Previously, the :class:`IPythonConsoleLexer` class was available at |
|
27 | Previously, the :class:`IPythonConsoleLexer` class was available at | |
28 | :module:`IPython.sphinxext.ipython_console_hightlight`. It was inserted |
|
28 | :module:`IPython.sphinxext.ipython_console_hightlight`. It was inserted | |
29 | into Pygments' list of available lexers under the name `ipython`. It should |
|
29 | into Pygments' list of available lexers under the name `ipython`. It should | |
30 |
be mentioned that this name is inaccurate |
|
30 | be mentioned that this name is inaccurate, since an IPython console session | |
31 | is not the same as IPython code (which itself is a superset of the Python |
|
31 | is not the same as IPython code (which itself is a superset of the Python | |
32 | language). |
|
32 | language). | |
33 |
|
33 | |||
34 |
Now, the Sphinx extension inserts two console lexers into Pygment |
|
34 | Now, the Sphinx extension inserts two console lexers into Pygments' list of | |
35 |
available lexers. |
|
35 | available lexers. Both are IPyLexer instances under the names: `ipython` and | |
36 | `ipython3`. As mentioned above, these names are misleading, but they are kept |
|
36 | `ipython3`. Although the names can be confusing (as mentioned above), their | |
37 | for backwards compatibility and typical usage. If a project needs to make |
|
37 | continued use is, in part, to maintain backwards compatibility and to | |
38 | Pygments aware of more than just the IPyLexer class, then one should not |
|
38 | aid typical usage. If a project needs to make Pygments aware of more than just | |
39 | make the IPyLexer class available under the name `ipython` and use `ipy` or |
|
39 | the IPyLexer class, then one should not make the IPyLexer class available under | |
40 | some other non-conflicting value. |
|
40 | the name `ipython` and use `ipy` or some other non-conflicting value. | |
41 |
|
41 | |||
42 |
Code blocks such as: |
|
42 | Code blocks such as: | |
|
43 | ||||
|
44 | .. code-block:: rst | |||
43 |
|
45 | |||
44 | .. code-block:: ipython |
|
46 | .. code-block:: ipython | |
45 |
|
|
47 | ||
46 | In [1]: 2**2 |
|
48 | In [1]: 2**2 | |
47 |
|
|
49 | Out[1]: 4 | |
48 |
|
50 | |||
49 | will continue to work as before, but now, they will also properly highlight |
|
51 | will continue to work as before, but now, they will also properly highlight | |
50 |
tracebacks. For pure IPython code, the same lexer will work: |
|
52 | tracebacks. For pure IPython code, the same lexer will also work: | |
|
53 | ||||
|
54 | .. code-block:: rst | |||
51 |
|
55 | |||
52 | .. code-block:: ipython |
|
56 | .. code-block:: ipython | |
53 |
|
|
57 | ||
54 | x = ''.join(map(str, range(10))) |
|
58 | x = ''.join(map(str, range(10))) | |
55 |
|
|
59 | !echo $x | |
56 |
|
60 | |||
57 | Since the first line of the block did not begin with a standard IPython console |
|
61 | Since the first line of the block did not begin with a standard IPython console | |
58 |
prompt, the entire block is assumed to |
|
62 | prompt, the entire block is assumed to consist of IPython code instead. |
General Comments 0
You need to be logged in to leave comments.
Login now