Show More
@@ -141,8 +141,6 b' def num_ini_spaces(s):' | |||
|
141 | 141 | else: |
|
142 | 142 | return 0 |
|
143 | 143 | |
|
144 | last_blank_re = re.compile(r'^.*\n\s+$', re.MULTILINE) | |
|
145 | ||
|
146 | 144 | def last_blank(src): |
|
147 | 145 | """Determine if the input source ends in a blank. |
|
148 | 146 | |
@@ -153,11 +151,13 b' def last_blank(src):' | |||
|
153 | 151 | src : string |
|
154 | 152 | A single or multiline string. |
|
155 | 153 | """ |
|
156 | return src == '\n' or bool(last_blank_re.match(src)) | |
|
154 | if not src: return False | |
|
155 | ll = src.splitlines()[-1] | |
|
156 | return (ll == '') or ll.isspace() | |
|
157 | 157 | |
|
158 | 158 | |
|
159 |
last_two_blanks_re = re.compile(r' |
|
|
160 |
last_two_blanks_re2 = re.compile(r' |
|
|
159 | last_two_blanks_re = re.compile(r'\n\s*\n\s*$', re.MULTILINE) | |
|
160 | last_two_blanks_re2 = re.compile(r'.+\n\s*\n\s+$', re.MULTILINE) | |
|
161 | 161 | |
|
162 | 162 | def last_two_blanks(src): |
|
163 | 163 | """Determine if the input source ends in two blanks. |
@@ -169,8 +169,17 b' def last_two_blanks(src):' | |||
|
169 | 169 | src : string |
|
170 | 170 | A single or multiline string. |
|
171 | 171 | """ |
|
172 | return (bool(last_two_blanks_re.match(src)) or | |
|
173 | bool(last_two_blanks_re2.match(src)) ) | |
|
172 | if not src: return False | |
|
173 | # The logic here is tricky: I couldn't get a regexp to work and pass all | |
|
174 | # the tests, so I took a different approach: split the source by lines, | |
|
175 | # grab the last two and prepend '###\n' as a stand-in for whatever was in | |
|
176 | # the body before the last two lines. Then, with that structure, it's | |
|
177 | # possible to analyze with two regexps. Not the most elegant solution, but | |
|
178 | # it works. If anyone tries to change this logic, make sure to validate | |
|
179 | # the whole test suite first! | |
|
180 | new_src = '\n'.join(['###\n'] + src.splitlines()[-2:]) | |
|
181 | return (bool(last_two_blanks_re.match(new_src)) or | |
|
182 | bool(last_two_blanks_re2.match(new_src)) ) | |
|
174 | 183 | |
|
175 | 184 | |
|
176 | 185 | def remove_comments(src): |
@@ -786,6 +795,7 b' class IPythonInputSplitter(InputSplitter):' | |||
|
786 | 795 | return False |
|
787 | 796 | |
|
788 | 797 | if self.cell_magic_mode: |
|
798 | #print('c2 lines', repr(lines)) # dbg | |
|
789 | 799 | # Find out if the last stored block has a whitespace line as its |
|
790 | 800 | # last line and also this line is whitespace, case in which we're |
|
791 | 801 | # done (two contiguous blank lines signal termination). Note that |
@@ -842,7 +852,7 b' class IPythonInputSplitter(InputSplitter):' | |||
|
842 | 852 | |
|
843 | 853 | This means that we get the entire cell with each call. Between resets, |
|
844 | 854 | the calls simply add more text to the input.""" |
|
845 | ||
|
855 | print('lines', repr(lines)) # dbg | |
|
846 | 856 | if lines.startswith('%%'): |
|
847 | 857 | # Cell magics bypass all further transformations |
|
848 | 858 | self.cell_magic_mode = True |
@@ -859,6 +869,7 b' class IPythonInputSplitter(InputSplitter):' | |||
|
859 | 869 | self._store(tlines) |
|
860 | 870 | self._store(lines, self._buffer_raw, 'source_raw') |
|
861 | 871 | self._is_complete = last_two_blanks(lines) |
|
872 | print('IC', self._is_complete) # dbg | |
|
862 | 873 | return self._is_complete |
|
863 | 874 | |
|
864 | 875 | lines_list = lines.splitlines() |
@@ -609,6 +609,9 b' def test_last_blank():' | |||
|
609 | 609 | nt.assert_true(isp.last_blank('\n ')) |
|
610 | 610 | nt.assert_true(isp.last_blank('abc\n ')) |
|
611 | 611 | nt.assert_true(isp.last_blank('abc\n\n')) |
|
612 | nt.assert_true(isp.last_blank('abc\nd\n\n')) | |
|
613 | nt.assert_true(isp.last_blank('abc\nd\ne\n\n')) | |
|
614 | nt.assert_true(isp.last_blank('abc \n \n \n\n')) | |
|
612 | 615 | |
|
613 | 616 | |
|
614 | 617 | def test_last_two_blanks(): |
@@ -627,6 +630,8 b' def test_last_two_blanks():' | |||
|
627 | 630 | nt.assert_true(isp.last_two_blanks('abc\n\n \n')) |
|
628 | 631 | nt.assert_true(isp.last_two_blanks('abc\n\n \n ')) |
|
629 | 632 | nt.assert_true(isp.last_two_blanks('abc\n\n \n \n')) |
|
633 | nt.assert_true(isp.last_two_blanks('abc\nd\n\n\n')) | |
|
634 | nt.assert_true(isp.last_two_blanks('abc\nd\ns\nds\n\n\n')) | |
|
630 | 635 | |
|
631 | 636 | |
|
632 | 637 | def test_cell_magics_line_mode(): |
General Comments 0
You need to be logged in to leave comments.
Login now