You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
"""
 | 
						|
Utilities imported from ipython_genutils
 | 
						|
"""
 | 
						|
from __future__ import annotations
 | 
						|
 | 
						|
import re
 | 
						|
import textwrap
 | 
						|
from textwrap import dedent
 | 
						|
from textwrap import indent as _indent
 | 
						|
from typing import List
 | 
						|
 | 
						|
 | 
						|
def indent(val: str) -> str:
 | 
						|
    return _indent(val, "    ")
 | 
						|
 | 
						|
 | 
						|
def wrap_paragraphs(text: str, ncols: int = 80) -> List[str]:
 | 
						|
    """Wrap multiple paragraphs to fit a specified width.
 | 
						|
 | 
						|
    This is equivalent to textwrap.wrap, but with support for multiple
 | 
						|
    paragraphs, as separated by empty lines.
 | 
						|
 | 
						|
    Returns
 | 
						|
    -------
 | 
						|
 | 
						|
    list of complete paragraphs, wrapped to fill `ncols` columns.
 | 
						|
    """
 | 
						|
    paragraph_re = re.compile(r"\n(\s*\n)+", re.MULTILINE)
 | 
						|
    text = dedent(text).strip()
 | 
						|
    paragraphs = paragraph_re.split(text)[::2]  # every other entry is space
 | 
						|
    out_ps = []
 | 
						|
    indent_re = re.compile(r"\n\s+", re.MULTILINE)
 | 
						|
    for p in paragraphs:
 | 
						|
        # presume indentation that survives dedent is meaningful formatting,
 | 
						|
        # so don't fill unless text is flush.
 | 
						|
        if indent_re.search(p) is None:
 | 
						|
            # wrap paragraph
 | 
						|
            p = textwrap.fill(p, ncols)
 | 
						|
        out_ps.append(p)
 | 
						|
    return out_ps
 |