You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					39 lines
				
				1.2 KiB
			
		
		
			
		
	
	
					39 lines
				
				1.2 KiB
			| 
								 
											8 years ago
										 
									 | 
							
								import textwrap
							 | 
						||
| 
								 | 
							
								from contextlib import contextmanager
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TextWrapper(textwrap.TextWrapper):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def _handle_long_word(self, reversed_chunks, cur_line, cur_len, width):
							 | 
						||
| 
								 | 
							
								        space_left = max(width - cur_len, 1)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if self.break_long_words:
							 | 
						||
| 
								 | 
							
								            last = reversed_chunks[-1]
							 | 
						||
| 
								 | 
							
								            cut = last[:space_left]
							 | 
						||
| 
								 | 
							
								            res = last[space_left:]
							 | 
						||
| 
								 | 
							
								            cur_line.append(cut)
							 | 
						||
| 
								 | 
							
								            reversed_chunks[-1] = res
							 | 
						||
| 
								 | 
							
								        elif not cur_line:
							 | 
						||
| 
								 | 
							
								            cur_line.append(reversed_chunks.pop())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @contextmanager
							 | 
						||
| 
								 | 
							
								    def extra_indent(self, indent):
							 | 
						||
| 
								 | 
							
								        old_initial_indent = self.initial_indent
							 | 
						||
| 
								 | 
							
								        old_subsequent_indent = self.subsequent_indent
							 | 
						||
| 
								 | 
							
								        self.initial_indent += indent
							 | 
						||
| 
								 | 
							
								        self.subsequent_indent += indent
							 | 
						||
| 
								 | 
							
								        try:
							 | 
						||
| 
								 | 
							
								            yield
							 | 
						||
| 
								 | 
							
								        finally:
							 | 
						||
| 
								 | 
							
								            self.initial_indent = old_initial_indent
							 | 
						||
| 
								 | 
							
								            self.subsequent_indent = old_subsequent_indent
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def indent_only(self, text):
							 | 
						||
| 
								 | 
							
								        rv = []
							 | 
						||
| 
								 | 
							
								        for idx, line in enumerate(text.splitlines()):
							 | 
						||
| 
								 | 
							
								            indent = self.initial_indent
							 | 
						||
| 
								 | 
							
								            if idx > 0:
							 | 
						||
| 
								 | 
							
								                indent = self.subsequent_indent
							 | 
						||
| 
								 | 
							
								            rv.append(indent + line)
							 | 
						||
| 
								 | 
							
								        return '\n'.join(rv)
							 |