##// END OF EJS Templates
Improve input transformation docs
Thomas Kluyver -
Show More
@@ -13,25 +13,34 b' interactive interface. Using them carelessly can easily break IPython!'
13 String based transformations
13 String based transformations
14 ============================
14 ============================
15
15
16 .. currentmodule:: IPython.core.inputtransforms
17
16 When the user enters a line of code, it is first processed as a string. By the
18 When the user enters a line of code, it is first processed as a string. By the
17 end of this stage, it must be valid Python syntax.
19 end of this stage, it must be valid Python syntax.
18
20
19 These transformers all subclass :class:`IPython.core.inputtransformer.InputTransformer`,
21 These transformers all subclass :class:`IPython.core.inputtransformer.InputTransformer`,
20 and are used by :class:`IPython.core.inputsplitter.IPythonInputSplitter`,
22 and are used by :class:`IPython.core.inputsplitter.IPythonInputSplitter`.
21 the ``transform`` attribute of which is a list of instances.
23
22
24 These transformers act in three groups, stored separately as lists of instances
23 By default, these transformers are skipped when :class:`~IPython.core.inputsplitter.IPythonInputSplitter`
25 in attributes of :class:`~IPython.core.inputsplitter.IPythonInputSplitter`:
24 detects that the line starts inside a multi-line string. Some transformers, such
26
25 as those that remove the prompt markers from pasted examples, need to look
27 * ``physical_line_transforms`` act on the lines as the user enters them. For
26 inside multiline strings as well - these set the attribute ``look_in_string`` to
28 example, these strip Python prompts from examples pasted in.
27 ``True``.
29 * ``logical_line_transforms`` act on lines as connected by explicit line
30 continuations, i.e. ``\`` at the end of physical lines. They are skipped
31 inside multiline Python statements. This is the point where IPython recognises
32 ``%magic`` commands, for instance.
33 * ``python_line_transforms`` act on blocks containing complete Python statements.
34 Multi-line strings, lists and function calls are reassembled before being
35 passed to these, but note that function and class *definitions* are still a
36 series of separate statements. IPython does not use any of these by default.
28
37
29 Stateless transformations
38 Stateless transformations
30 -------------------------
39 -------------------------
31
40
32 The simplest kind of transformations work one line at a time. Write a function
41 The simplest kind of transformations work one line at a time. Write a function
33 which takes a line and returns a line, and decorate it with
42 which takes a line and returns a line, and decorate it with
34 :meth:`~IPython.core.inputtransformer.StatelessInputTransformer.wrap`::
43 :meth:`StatelessInputTransformer.wrap`::
35
44
36 @StatelessInputTransformer.wrap
45 @StatelessInputTransformer.wrap
37 def my_special_commands(line):
46 def my_special_commands(line):
@@ -83,6 +92,15 b' line in a cell::'
83
92
84 leading_indent.look_in_string = True
93 leading_indent.look_in_string = True
85
94
95 Token-based transformers
96 ------------------------
97
98 There is an experimental framework that takes care of tokenizing and
99 untokenizing lines of code. Define a function that accepts a list of tokens, and
100 returns an iterable of output tokens, and decorate it with
101 :meth:`TokenInputTransformer.wrap`. These should only be used in
102 ``python_line_transforms``.
103
86 AST transformations
104 AST transformations
87 ===================
105 ===================
88
106
General Comments 0
You need to be logged in to leave comments. Login now