Show More
@@ -165,19 +165,6 b' def test_dollar_formatter():' | |||||
165 | nt.assert_equal(s, "$HOME") |
|
165 | nt.assert_equal(s, "$HOME") | |
166 |
|
166 | |||
167 |
|
167 | |||
168 | def test_long_substr(): |
|
|||
169 | data = ['hi'] |
|
|||
170 | nt.assert_equal(text.long_substr(data), 'hi') |
|
|||
171 |
|
||||
172 |
|
||||
173 | def test_long_substr2(): |
|
|||
174 | data = ['abc', 'abd', 'abf', 'ab'] |
|
|||
175 | nt.assert_equal(text.long_substr(data), 'ab') |
|
|||
176 |
|
||||
177 | def test_long_substr_empty(): |
|
|||
178 | data = [] |
|
|||
179 | nt.assert_equal(text.long_substr(data), '') |
|
|||
180 |
|
||||
181 | def test_strip_email(): |
|
168 | def test_strip_email(): | |
182 | src = """\ |
|
169 | src = """\ | |
183 | >> >>> def f(x): |
|
170 | >> >>> def f(x): |
@@ -10,6 +10,7 b' Inheritance diagram:' | |||||
10 |
|
10 | |||
11 | import os |
|
11 | import os | |
12 | import re |
|
12 | import re | |
|
13 | import string | |||
13 | import sys |
|
14 | import sys | |
14 | import textwrap |
|
15 | import textwrap | |
15 | from string import Formatter |
|
16 | from string import Formatter | |
@@ -405,22 +406,6 b' def wrap_paragraphs(text, ncols=80):' | |||||
405 | return out_ps |
|
406 | return out_ps | |
406 |
|
407 | |||
407 |
|
408 | |||
408 | def long_substr(data): |
|
|||
409 | """Return the longest common substring in a list of strings. |
|
|||
410 |
|
||||
411 | Credit: http://stackoverflow.com/questions/2892931/longest-common-substring-from-more-than-two-strings-python |
|
|||
412 | """ |
|
|||
413 | substr = '' |
|
|||
414 | if len(data) > 1 and len(data[0]) > 0: |
|
|||
415 | for i in range(len(data[0])): |
|
|||
416 | for j in range(len(data[0])-i+1): |
|
|||
417 | if j > len(substr) and all(data[0][i:i+j] in x for x in data): |
|
|||
418 | substr = data[0][i:i+j] |
|
|||
419 | elif len(data) == 1: |
|
|||
420 | substr = data[0] |
|
|||
421 | return substr |
|
|||
422 |
|
||||
423 |
|
||||
424 | def strip_email_quotes(text): |
|
409 | def strip_email_quotes(text): | |
425 | """Strip leading email quotation characters ('>'). |
|
410 | """Strip leading email quotation characters ('>'). | |
426 |
|
411 | |||
@@ -447,27 +432,30 b' def strip_email_quotes(text):' | |||||
447 | In [4]: strip_email_quotes('> > text\\n> > more\\n> more...') |
|
432 | In [4]: strip_email_quotes('> > text\\n> > more\\n> more...') | |
448 | Out[4]: '> text\\n> more\\nmore...' |
|
433 | Out[4]: '> text\\n> more\\nmore...' | |
449 |
|
434 | |||
450 |
So if any line has no quote marks ('>') |
|
435 | So if any line has no quote marks ('>'), then none are stripped from any | |
451 | of them :: |
|
436 | of them :: | |
452 |
|
437 | |||
453 | In [5]: strip_email_quotes('> > text\\n> > more\\nlast different') |
|
438 | In [5]: strip_email_quotes('> > text\\n> > more\\nlast different') | |
454 | Out[5]: '> > text\\n> > more\\nlast different' |
|
439 | Out[5]: '> > text\\n> > more\\nlast different' | |
455 | """ |
|
440 | """ | |
456 | lines = text.splitlines() |
|
441 | lines = text.splitlines() | |
457 | matches = set() |
|
442 | strip_len = 0 | |
458 | for line in lines: |
|
443 | ||
459 | prefix = re.match(r'^(\s*>[ >]*)', line) |
|
444 | for characters in zip(*lines): | |
460 | if prefix: |
|
445 | # Check if all characters in this position are the same | |
461 | matches.add(prefix.group(1)) |
|
446 | if len(set(characters)) > 1: | |
|
447 | break | |||
|
448 | prefix_char = characters[0][0] | |||
|
449 | ||||
|
450 | if prefix_char in string.whitespace or prefix_char == ">": | |||
|
451 | strip_len += 1 | |||
462 | else: |
|
452 | else: | |
463 | break |
|
453 | break | |
464 | else: |
|
454 | ||
465 | prefix = long_substr(list(matches)) |
|
455 | text = "\n".join([ln[strip_len:] for ln in lines]) | |
466 | if prefix: |
|
|||
467 | strip = len(prefix) |
|
|||
468 | text = '\n'.join([ ln[strip:] for ln in lines]) |
|
|||
469 | return text |
|
456 | return text | |
470 |
|
457 | |||
|
458 | ||||
471 | def strip_ansi(source): |
|
459 | def strip_ansi(source): | |
472 | """ |
|
460 | """ | |
473 | Remove ansi escape codes from text. |
|
461 | Remove ansi escape codes from text. |
General Comments 0
You need to be logged in to leave comments.
Login now