##// END OF EJS Templates
Merge pull request #4060 from minrk/multiprompt...
Thomas Kluyver -
r12329:11babdf1 merge
parent child Browse files
Show More
@@ -359,8 +359,26 b' def cellmagic(end_on_blank_line=False):'
359 359 line = tpl % (magic_name, first, u'\n'.join(body))
360 360
361 361
362 def _strip_prompts(prompt_re):
363 """Remove matching input prompts from a block of input."""
362 def _strip_prompts(prompt_re, initial_re=None):
363 """Remove matching input prompts from a block of input.
364
365 Parameters
366 ----------
367 prompt_re : regular expression
368 A regular expression matching any input prompt (including continuation)
369 initial_re : regular expression, optional
370 A regular expression matching only the initial prompt, but not continuation.
371 If no initial expression is given, prompt_re will be used everywhere.
372 Used mainly for plain Python prompts, where the continuation prompt
373 ``...`` is a valid Python expression in Python 3, so shouldn't be stripped.
374
375 If initial_re and prompt_re differ,
376 only initial_re will be tested against the first line.
377 If any prompt is found on the first two lines,
378 prompts will be stripped from the rest of the block.
379 """
380 if initial_re is None:
381 initial_re = prompt_re
364 382 line = ''
365 383 while True:
366 384 line = (yield line)
@@ -368,18 +386,19 b' def _strip_prompts(prompt_re):'
368 386 # First line of cell
369 387 if line is None:
370 388 continue
371 out, n1 = prompt_re.subn('', line, count=1)
389 out, n1 = initial_re.subn('', line, count=1)
372 390 line = (yield out)
373 391
374 # Second line of cell, because people often copy from just after the
375 # first prompt, so we might not see it in the first line.
376 392 if line is None:
377 393 continue
394 # check for any prompt on the second line of the cell,
395 # because people often copy from just after the first prompt,
396 # so we might not see it in the first line.
378 397 out, n2 = prompt_re.subn('', line, count=1)
379 398 line = (yield out)
380 399
381 400 if n1 or n2:
382 # Found the input prompt in the first two lines - check for it in
401 # Found a prompt in the first two lines - check for it in
383 402 # the rest of the cell as well.
384 403 while line is not None:
385 404 line = (yield prompt_re.sub('', line, count=1))
@@ -394,7 +413,8 b' def classic_prompt():'
394 413 """Strip the >>>/... prompts of the Python interactive shell."""
395 414 # FIXME: non-capturing version (?:...) usable?
396 415 prompt_re = re.compile(r'^(>>> ?|\.\.\. ?)')
397 return _strip_prompts(prompt_re)
416 initial_re = re.compile(r'^(>>> ?)')
417 return _strip_prompts(prompt_re, initial_re)
398 418
399 419 @CoroutineInputTransformer.wrap
400 420 def ipy_prompt():
@@ -183,9 +183,18 b' syntax_ml = \\'
183 183 ('... 456"""','456"""'),
184 184 ],
185 185 [('a="""','a="""'),
186 ('>>> 123','123'),
187 ('... 456"""','456"""'),
188 ],
189 [('a="""','a="""'),
186 190 ('123','123'),
187 191 ('... 456"""','... 456"""'),
188 192 ],
193 [('....__class__','....__class__'),
194 ],
195 [('a=5', 'a=5'),
196 ('...', ''),
197 ],
189 198 [('>>> def f(x):', 'def f(x):'),
190 199 ('...', ''),
191 200 ('... return x', ' return x'),
@@ -205,6 +214,10 b' syntax_ml = \\'
205 214 (' ...: 456"""','456"""'),
206 215 ],
207 216 [('a="""','a="""'),
217 ('In [1]: 123','123'),
218 (' ...: 456"""','456"""'),
219 ],
220 [('a="""','a="""'),
208 221 ('123','123'),
209 222 (' ...: 456"""',' ...: 456"""'),
210 223 ],
General Comments 0
You need to be logged in to leave comments. Login now