Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
wrap or not? solution in Clear category for Text Formatting by CDG.Axel
from textwrap import wrap
def format_line(line, width, style):
# all-in-one for left-right-center
if style in 'lcr':
return f"{line:{'<^>'['lcr'.find(style)]}{width}}".rstrip()
# justify at last
lst, indent = line.split(), 0
line, spaces = '', width - len(line) + len(lst) - 1
while lst:
# first add word to line with previously counted indent
line, spaces = line + ' ' * indent + lst.pop(0), spaces - indent
# (spaces + len(lst) - 1) // len(lst) is math.ceil(spaces/len(lst)) alterative
indent = (spaces + len(lst) - 1) // len(lst) if lst else spaces
return line
def text_formatting(text: str, width: int, style: str) -> str:
lst = wrap(text, width=width)
return '\n'.join(line if style == 'j' and i+1 == len(lst) else
format_line(line, width, style) for i, line in enumerate(lst))
"""
# no wordwrap.wrap alternative with comments
res = line = ''
for w in text.split():
# if new word can't be placed in line
if len(line) + len(w) + 1 > width:
# format the line and start to form new one
line, res = '', res + format_line(line, width, style) + '\n'
# add word to line with space before for word 2+
line += ' ' * bool(line) + w
# last line need no pagebreak and format for 'j'-style
res += line if style == 'j' else format_line(line, width, style)
return res
"""
if __name__ == '__main__':
LINE = ('Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iure '
'harum suscipit aperiam aliquam ad, perferendis ex molestias '
'reiciendis accusantium quos, tempore sunt quod veniam, eveniet '
'et necessitatibus mollitia. Quasi, culpa.')
print('Example:')
print(text_formatting(LINE, 38, 'l'))
assert text_formatting(LINE, 38, 'l') == \
'''Lorem ipsum dolor sit amet,
consectetur adipisicing elit. Iure
harum suscipit aperiam aliquam ad,
perferendis ex molestias reiciendis
accusantium quos, tempore sunt quod
veniam, eveniet et necessitatibus
mollitia. Quasi, culpa.''', 'Left 38'
assert text_formatting(LINE, 30, 'c') == \
''' Lorem ipsum dolor sit amet,
consectetur adipisicing elit.
Iure harum suscipit aperiam
aliquam ad, perferendis ex
molestias reiciendis
accusantium quos, tempore sunt
quod veniam, eveniet et
necessitatibus mollitia.
Quasi, culpa.''', 'Center 30'
assert text_formatting(LINE, 50, 'r') == \
''' Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Iure harum suscipit aperiam
aliquam ad, perferendis ex molestias reiciendis
accusantium quos, tempore sunt quod veniam,
eveniet et necessitatibus mollitia. Quasi, culpa.''', 'Right 50'
assert text_formatting(LINE, 45, 'j') == \
'''Lorem ipsum dolor sit amet, consectetur
adipisicing elit. Iure harum suscipit aperiam
aliquam ad, perferendis ex molestias
reiciendis accusantium quos, tempore sunt
quod veniam, eveniet et necessitatibus
mollitia. Quasi, culpa.''', 'Justify 45'
Oct. 12, 2021
Comments: