-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Closed
Milestone
Description
Hi there,
I've noticed that when using this filter to (for example) ensuring an email message is always wrapped to 72 characters (where possible) to ensure a nice display of it as often as possible, we noticed that wordwrap would not use existing newlines in the message as clue but would instead insert newlines strictly every 72 characters.
This is our workaround
## Workaround bug in do_wordwrap where it disregards existing linebreaks
## when wrapping text
from jinja2.filters import environmentfilter
import re
@environmentfilter
def do_wordwrap(environment, s, width=79, break_long_words=True):
"""
Return a copy of the string passed to the filter wrapped after
``79`` characters. You can override this default using the first
parameter. If you set the second parameter to `false` Jinja will not
split words apart if they are longer than `width`.
"""
import textwrap
accumulator = []
# Workaround: pre-split the string
for component in re.split(r"\r?\n", s):
# textwrap will eat empty strings for breakfirst. Therefore we route them around it.
if len(component) is 0:
accumulator.append(component)
continue
accumulator.extend(
textwrap.wrap(component, width=width, expand_tabs=False,
replace_whitespace=False,
break_long_words=break_long_words)
)
return environment.newline_sequence.join(accumulator)Not nice and complete but works for us.
I'd like this (or something similar) to be included in jinja2 proper, as it makes the wordrwap filter much more usefull.
What do you think?
Metadata
Metadata
Assignees
Labels
No labels