Show More
@@ -202,7 +202,7 b' class InputSplitter(object):' | |||||
202 | # object; it will be None if the source doesn't compile to valid Python. |
|
202 | # object; it will be None if the source doesn't compile to valid Python. | |
203 | code = None |
|
203 | code = None | |
204 | # Input mode |
|
204 | # Input mode | |
205 |
input_mode = ' |
|
205 | input_mode = 'line' | |
206 |
|
206 | |||
207 | # Private attributes |
|
207 | # Private attributes | |
208 |
|
208 | |||
@@ -222,14 +222,18 b' class InputSplitter(object):' | |||||
222 | ---------- |
|
222 | ---------- | |
223 | input_mode : str |
|
223 | input_mode : str | |
224 |
|
224 | |||
225 |
One of [' |
|
225 | One of ['line', 'block']; default is 'line'. | |
226 | new inputs are used: in 'append' mode, they are appended to the |
|
|||
227 | existing buffer and the whole buffer is compiled; in 'replace' mode, |
|
|||
228 | each new input completely replaces all prior inputs. Replace mode is |
|
|||
229 | thus equivalent to prepending a full reset() to every push() call. |
|
|||
230 |
|
226 | |||
231 | In practice, line-oriented clients likely want to use 'append' mode |
|
227 | The input_mode parameter controls how new inputs are used when fed via | |
232 | while block-oriented ones will want to use 'replace'. |
|
228 | the :meth:`push` method: | |
|
229 | ||||
|
230 | - 'line': meant for line-oriented clients, inputs are appended one at a | |||
|
231 | time to the internal buffer and the whole buffer is compiled. | |||
|
232 | ||||
|
233 | - 'block': meant for clients that can edit multi-line blocks of text at | |||
|
234 | a time. Each new input new input completely replaces all prior | |||
|
235 | inputs. Block mode is thus equivalent to prepending a full reset() | |||
|
236 | to every push() call. | |||
233 | """ |
|
237 | """ | |
234 | self._buffer = [] |
|
238 | self._buffer = [] | |
235 | self._compile = codeop.CommandCompiler() |
|
239 | self._compile = codeop.CommandCompiler() | |
@@ -275,7 +279,7 b' class InputSplitter(object):' | |||||
275 | this value is also stored as a private attribute (_is_complete), so it |
|
279 | this value is also stored as a private attribute (_is_complete), so it | |
276 | can be queried at any time. |
|
280 | can be queried at any time. | |
277 | """ |
|
281 | """ | |
278 |
if self.input_mode == ' |
|
282 | if self.input_mode == 'block': | |
279 | self.reset() |
|
283 | self.reset() | |
280 |
|
284 | |||
281 | # If the source code has leading blanks, add 'if 1:\n' to it |
|
285 | # If the source code has leading blanks, add 'if 1:\n' to it | |
@@ -829,18 +833,18 b' class IPythonInputSplitter(InputSplitter):' | |||||
829 | # |
|
833 | # | |
830 | # FIXME: try to find a cleaner approach for this last bit. |
|
834 | # FIXME: try to find a cleaner approach for this last bit. | |
831 |
|
835 | |||
832 |
# If we were in ' |
|
836 | # If we were in 'block' mode, since we're going to pump the parent | |
833 | # class by hand line by line, we need to temporarily switch out to |
|
837 | # class by hand line by line, we need to temporarily switch out to | |
834 |
# ' |
|
838 | # 'line' mode, do a single manual reset and then feed the lines one | |
835 | # by one. Note that this only matters if the input has more than one |
|
839 | # by one. Note that this only matters if the input has more than one | |
836 | # line. |
|
840 | # line. | |
837 | changed_input_mode = False |
|
841 | changed_input_mode = False | |
838 |
|
842 | |||
839 |
if len(lines_list)>1 and self.input_mode == ' |
|
843 | if len(lines_list)>1 and self.input_mode == 'block': | |
840 | self.reset() |
|
844 | self.reset() | |
841 | changed_input_mode = True |
|
845 | changed_input_mode = True | |
842 |
saved_input_mode = ' |
|
846 | saved_input_mode = 'block' | |
843 |
self.input_mode = ' |
|
847 | self.input_mode = 'line' | |
844 |
|
848 | |||
845 | try: |
|
849 | try: | |
846 | push = super(IPythonInputSplitter, self).push |
|
850 | push = super(IPythonInputSplitter, self).push |
@@ -204,7 +204,7 b' class InputSplitterTestCase(unittest.TestCase):' | |||||
204 |
|
204 | |||
205 | def test_replace_mode(self): |
|
205 | def test_replace_mode(self): | |
206 | isp = self.isp |
|
206 | isp = self.isp | |
207 |
isp.input_mode = ' |
|
207 | isp.input_mode = 'block' | |
208 | isp.push('x=1') |
|
208 | isp.push('x=1') | |
209 | self.assertEqual(isp.source, 'x=1\n') |
|
209 | self.assertEqual(isp.source, 'x=1\n') | |
210 | isp.push('x=2') |
|
210 | isp.push('x=2') | |
@@ -556,7 +556,7 b' class IPythonInputTestCase(InputSplitterTestCase):' | |||||
556 | """ |
|
556 | """ | |
557 |
|
557 | |||
558 | def setUp(self): |
|
558 | def setUp(self): | |
559 |
self.isp = isp.IPythonInputSplitter(input_mode=' |
|
559 | self.isp = isp.IPythonInputSplitter(input_mode='line') | |
560 |
|
560 | |||
561 | def test_syntax(self): |
|
561 | def test_syntax(self): | |
562 | """Call all single-line syntax tests from the main object""" |
|
562 | """Call all single-line syntax tests from the main object""" | |
@@ -590,7 +590,7 b' class BlockIPythonInputTestCase(IPythonInputTestCase):' | |||||
590 | test_push3 = test_split = lambda s: None |
|
590 | test_push3 = test_split = lambda s: None | |
591 |
|
591 | |||
592 | def setUp(self): |
|
592 | def setUp(self): | |
593 |
self.isp = isp.IPythonInputSplitter(input_mode=' |
|
593 | self.isp = isp.IPythonInputSplitter(input_mode='block') | |
594 |
|
594 | |||
595 | def test_syntax_multiline(self): |
|
595 | def test_syntax_multiline(self): | |
596 | isp = self.isp |
|
596 | isp = self.isp |
@@ -103,7 +103,7 b' class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin):' | |||||
103 | self._completion_lexer = CompletionLexer(PythonLexer()) |
|
103 | self._completion_lexer = CompletionLexer(PythonLexer()) | |
104 | self._hidden = False |
|
104 | self._hidden = False | |
105 | self._highlighter = self._highlighter_class(self) |
|
105 | self._highlighter = self._highlighter_class(self) | |
106 |
self._input_splitter = self._input_splitter_class(input_mode=' |
|
106 | self._input_splitter = self._input_splitter_class(input_mode='block') | |
107 | self._kernel_manager = None |
|
107 | self._kernel_manager = None | |
108 |
|
108 | |||
109 | # Configure the ConsoleWidget. |
|
109 | # Configure the ConsoleWidget. |
General Comments 0
You need to be logged in to leave comments.
Login now