Module szyfrow.support.text_prettify
Various functions for prettifying text, useful when cipher routines generate strings of letters without spaces.
Expand source code
"""Various functions for prettifying text, useful when cipher routines generate
strings of letters without spaces.
"""
import string
from szyfrow.support.segment import segment
from szyfrow.support.utilities import cat, lcat, sanitise
def prettify(text, width=100):
"""Segment a text into words, then pack into lines, and combine the lines
into a single string for printing."""
return lcat(tpack(segment(text), width=width))
def tpack(text, width=100):
"""Pack a list of words into lines, so long as each line (including
intervening spaces) is no longer than _width_"""
lines = [text[0]]
for word in text[1:]:
if len(lines[-1]) + 1 + len(word) <= width:
lines[-1] += (' ' + word)
else:
lines += [word]
return lines
def depunctuate_character(c):
"""Record the punctuation of a character"""
if c in string.ascii_uppercase:
return 'UPPER'
elif c in string.ascii_lowercase:
return 'LOWER'
else:
return c
def depunctuate(text):
"""Record the punctuation of a string, so it can be applied to a converted
version of the string.
For example,
punct = depunctuate(ciphertext)
plaintext = decipher(sanitise(ciphertext))
readable_plaintext = repunctuate(plaintext, punct)
"""
return [depunctuate_character(c) for c in text]
def repunctuate_character(letters, punctuation):
"""Apply the recorded punctuation to a character. The letters must be
an iterator of base characters."""
if punctuation == 'UPPER':
return next(letters).upper()
elif punctuation == 'LOWER':
return next(letters).lower()
else:
return punctuation
def repunctuate(text, punctuation):
"""Apply the recored punctuation to a sanitised string.
For example,
punct = depunctuate(ciphertext)
plaintext = decipher(sanitise(ciphertext))
readable_plaintext = repunctuate(plaintext, punct)
"""
letters = iter(sanitise(text))
return cat(repunctuate_character(letters, p) for p in punctuation)
Functions
def cat(iterable, /)
-
Concatenate any number of strings.
The string whose method is called is inserted in between each given string. The result is returned as a new string.
Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'
def depunctuate(text)
-
Record the punctuation of a string, so it can be applied to a converted version of the string.
For example, punct = depunctuate(ciphertext) plaintext = decipher(sanitise(ciphertext)) readable_plaintext = repunctuate(plaintext, punct)
Expand source code
def depunctuate(text): """Record the punctuation of a string, so it can be applied to a converted version of the string. For example, punct = depunctuate(ciphertext) plaintext = decipher(sanitise(ciphertext)) readable_plaintext = repunctuate(plaintext, punct) """ return [depunctuate_character(c) for c in text]
def depunctuate_character(c)
-
Record the punctuation of a character
Expand source code
def depunctuate_character(c): """Record the punctuation of a character""" if c in string.ascii_uppercase: return 'UPPER' elif c in string.ascii_lowercase: return 'LOWER' else: return c
def lcat(iterable, /)
-
Concatenate any number of strings.
The string whose method is called is inserted in between each given string. The result is returned as a new string.
Example: '.'.join(['ab', 'pq', 'rs']) -> 'ab.pq.rs'
def prettify(text, width=100)
-
Segment a text into words, then pack into lines, and combine the lines into a single string for printing.
Expand source code
def prettify(text, width=100): """Segment a text into words, then pack into lines, and combine the lines into a single string for printing.""" return lcat(tpack(segment(text), width=width))
def repunctuate(text, punctuation)
-
Apply the recored punctuation to a sanitised string.
For example, punct = depunctuate(ciphertext) plaintext = decipher(sanitise(ciphertext)) readable_plaintext = repunctuate(plaintext, punct)
Expand source code
def repunctuate(text, punctuation): """Apply the recored punctuation to a sanitised string. For example, punct = depunctuate(ciphertext) plaintext = decipher(sanitise(ciphertext)) readable_plaintext = repunctuate(plaintext, punct) """ letters = iter(sanitise(text)) return cat(repunctuate_character(letters, p) for p in punctuation)
def repunctuate_character(letters, punctuation)
-
Apply the recorded punctuation to a character. The letters must be an iterator of base characters.
Expand source code
def repunctuate_character(letters, punctuation): """Apply the recorded punctuation to a character. The letters must be an iterator of base characters.""" if punctuation == 'UPPER': return next(letters).upper() elif punctuation == 'LOWER': return next(letters).lower() else: return punctuation
def tpack(text, width=100)
-
Pack a list of words into lines, so long as each line (including intervening spaces) is no longer than width
Expand source code
def tpack(text, width=100): """Pack a list of words into lines, so long as each line (including intervening spaces) is no longer than _width_""" lines = [text[0]] for word in text[1:]: if len(lines[-1]) + 1 + len(word) <= width: lines[-1] += (' ' + word) else: lines += [word] return lines