+++ /dev/null
-from segment import segment
-from utilities import cat, sanitise
-import string
-
-
-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)