42 lines
1 KiB
Python
Executable file
42 lines
1 KiB
Python
Executable file
#!/bin/env python
|
|
|
|
# Simple text-wrapping script for email.
|
|
# Preserves code blocks, quotes, and signature.
|
|
# Automatically joins and re-wraps paragraphs to
|
|
# ensure even spacing & avoid ugly wrapping.
|
|
# Author: Daniel Fichtinger
|
|
# License: MIT
|
|
|
|
import textwrap
|
|
import sys
|
|
import re
|
|
|
|
paragraph = []
|
|
skipping = False
|
|
|
|
def flush_paragraph():
|
|
if paragraph:
|
|
joined = " ".join(paragraph)
|
|
wrapped = textwrap.wrap(joined, width=74, break_long_words=False, replace_whitespace=True)
|
|
print("\n".join(wrapped))
|
|
paragraph.clear()
|
|
|
|
for line in sys.stdin:
|
|
line = line.rstrip()
|
|
if line.startswith("```"):
|
|
flush_paragraph()
|
|
skipping = not skipping
|
|
print(line)
|
|
elif line.startswith("--"):
|
|
flush_paragraph()
|
|
skipping = True
|
|
print(line)
|
|
elif not line or re.match(r"^(\s+|-\s+|\+\s+|\*\s+|>\s*)", line):
|
|
flush_paragraph()
|
|
print(line)
|
|
elif skipping:
|
|
print(line)
|
|
else:
|
|
paragraph.append(line)
|
|
else:
|
|
flush_paragraph()
|