Skip to content

Commit 3421709

Browse files
committed
Added new codec: ipsum
1 parent f48fcac commit 3421709

4 files changed

Lines changed: 114 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ o
181181
`gray` | text <-> gray encoded text | aka reflected binary code
182182
`gzip` | text <-> Gzip-compressed text | standard Gzip compression/decompression
183183
`html` | text <-> HTML entities | implements entities according to [this reference](https://dev.w3.org/html5/html-author/charref)
184+
`ipsum` | text <-> latin words | aka lorem ipsum
184185
`leetspeak` | text <-> leetspeak encoded text | based on minimalistic elite speaking rules
185186
`letter-indices` | text <-> text with letter indices | encodes consonants and/or vowels with their corresponding indices
186187
`manchester` | text <-> manchester encoded text | XORes each bit of the input with `01`

codext/languages/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: UTF-8 -*-
22
from .braille import *
3+
from .ipsum import *
34
from .leetspeak import *
45
from .morse import *
56
from .navajo import *

codext/languages/ipsum.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# -*- coding: UTF-8 -*-
2+
"""Letters Codec - letter indices-related content encoding.
3+
4+
This codec:
5+
- en/decodes strings from str to str
6+
- en/decodes strings from bytes to bytes
7+
- decodes file content to str (read)
8+
- encodes file content from str to bytes (write)
9+
"""
10+
import random
11+
12+
from ..__common__ import *
13+
14+
15+
__examples__ = {
16+
'enc-dec(ipsum|lorem-ipsum)': ["This is a test."],
17+
'enc(ipsum)': {'Bad test#': None},
18+
}
19+
20+
21+
DICT = {
22+
'a': ['a', 'ac', 'accumsan', 'ad', 'adipiscing', 'aenean', 'aliquam', 'aliquet', 'amet', 'ante', 'aptent', 'arcu',
23+
'at', 'auctor', 'augue'],
24+
'b': ['babel', 'bibendum', 'blandit', 'bomba', 'botum', 'buxus'],
25+
'c': ['class', 'commodo', 'condimentum', 'congue', 'consectetur', 'consequat', 'conubia', 'convallis', 'cras',
26+
'cubilia', 'curabitur', 'curae', 'cursus'],
27+
'd': ['dapibus', 'diam', 'dictum', 'dictumst', 'dignissim', 'dis', 'dolor', 'donec', 'dui', 'duis'],
28+
'e': ['efficitur', 'egestas', 'eget', 'eleifend', 'elementum', 'elit', 'enim', 'erat', 'eros', 'est', 'et', 'etiam',
29+
'eu', 'euismod', 'ex'],
30+
'f': ['facilisis', 'fames', 'faucibus', 'felis', 'fermentum', 'feugiat', 'finibus', 'fringilla', 'fusce'],
31+
'g': ['gadus', 'galliarus', 'ganeo', 'garba', 'gemma', 'gener', 'genuine', 'gestus', 'gramma', 'gravida', 'grex',
32+
'gusto', 'guttur', 'gyro'],
33+
'h': ['habitant', 'habitasse', 'hac', 'haicu', 'halo', 'helleborum', 'hendrerit', 'hilarius', 'himenaeos',
34+
'horreum', 'hydrus', 'hystericus'],
35+
'i': ['iaculis', 'id', 'imperdiet', 'in', 'inceptos', 'integer', 'interdum', 'ipsum'],
36+
'j': ['jaccae', 'jacio', 'jecur', 'jocundiatas', 'jovis', 'juctim', 'juger', 'juno', 'jussum', 'justo'],
37+
'k': ['kal', 'kalatorium', 'kalium', 'kaput', 'kardo', 'kenia', 'koppa', 'kum'],
38+
'l': ['lacinia', 'lacus', 'laoreet', 'lectus', 'leo', 'libero', 'ligula', 'litora', 'lobortis', 'lorem', 'luctus'],
39+
'm': ['maecenas', 'magna', 'magnis', 'malesuada', 'massa', 'mattis', 'mauris', 'maximus', 'metus', 'mi', 'molestie',
40+
'mollis', 'montes', 'morbi', 'mus'],
41+
'n': ['nam', 'nascetur', 'natoque', 'nec', 'neque', 'netus', 'nibh', 'nisi', 'nisl', 'non', 'nostra', 'nulla',
42+
'nullam', 'nunc'],
43+
'o': ['odio', 'orci', 'ornare'],
44+
'p': ['parturient', 'pellentesque', 'penatibus', 'per', 'pharetra', 'phasellus', 'placerat', 'platea', 'porta',
45+
'porttitor', 'posuere', 'potenti', 'praesent', 'pretium', 'primis', 'proin', 'pulvinar', 'purus'],
46+
'q': ['qua', 'quadrum', 'quam', 'quasi', 'quintum', 'quis', 'quisque', 'quo', 'quom', 'quota', 'qur'],
47+
'r': ['radicitus', 'radius', 'ratio', 'recidivus', 'rectio', 'rhoncus', 'ridiculus', 'risus', 'ros', 'rutrum'],
48+
's': ['sagittis', 'sapien', 'scelerisque', 'sed', 'sem', 'semper', 'senectus', 'sit', 'sociosqu', 'sodales',
49+
'sollicitudin', 'suscipit', 'suspendisse'],
50+
't': ['taciti', 'tellus', 'tempor', 'tempus', 'tincidunt', 'torquent', 'tortor', 'tristique', 'turpis'],
51+
'u': ['ullamcorper', 'ultrices', 'ultricies', 'urna', 'ut'],
52+
'v': ['varius', 'vehicula', 'vel', 'velit', 'venenatis', 'vestibulum', 'vitae', 'vivamus', 'volutpat', 'vulputate'],
53+
'w': ['wadiarus', 'warantus', 'warra', 'werumensium', 'wormicia'],
54+
'x': ['xandicus', 'xenon', 'xenium', 'xiphias', 'xvir', 'xylon', 'xysticus', 'xystus'],
55+
'y': ['yata', 'yatum', 'yatus', 'ypra'],
56+
'z': ['zamia', 'zelosus', 'zerum', 'zonatus', 'zymus'],
57+
}
58+
SCHARS = ".,:;+=-*/\\ "
59+
60+
61+
def ipsum_encode(text, errors="strict"):
62+
s = ""
63+
for i, c in enumerate(text):
64+
try:
65+
if c in SCHARS:
66+
s = s.rstrip(" ") + c + " "
67+
else:
68+
w = random.choice(DICT[c.lower()])
69+
s += (w.capitalize() if c.isupper() else w) + " "
70+
except KeyError:
71+
s += handle_error("ipsum", errors, " ")(c, i)
72+
return s[:-1], len(text)
73+
74+
75+
def ipsum_decode(text, errors="strict"):
76+
s = ""
77+
words = text.split(" ")
78+
for i, w in enumerate(words[:-1] if words[-1] == "" else words):
79+
if w.strip() == "":
80+
s += " "
81+
elif w in SCHARS:
82+
s += w
83+
else:
84+
try:
85+
DICT[w[0].lower()]
86+
s += w[0]
87+
except KeyError:
88+
s += handle_error("ipsum", errors, decode=True, item="word")(w, i)
89+
if w[-1] in SCHARS:
90+
s += w[-1]
91+
return s, len(text)
92+
93+
94+
add("ipsum", ipsum_encode, ipsum_decode, pattern=r"^(?:lorem[-_]?)?ipsum$")
95+

docs/enc/languages.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,23 @@ It supports letters, digits and some special characters.
2121

2222
-----
2323

24+
### Ipsum
25+
26+
This implements a codec that uses lorem ipsum words. It selects random words per letter and keeps the following punctuations: "`.,:;+=-*/\\`".
27+
28+
**Codec** | **Conversions** | **Aliases** | **Comment**
29+
:---: | :---: | --- | ---
30+
`ipsum` | text <-> latin words | `loremipsum`, `lorem-ipsum` | words from the classical lorem ipsum
31+
32+
```python
33+
>>> codext.encode("This is a test.", "ipsum")
34+
'Torquent hystericus id sit interdum sit aliquam tempor erat scelerisque taciti.'
35+
>>> codext.decode("Torquent hystericus id sit interdum sit aliquam tempor erat scelerisque taciti.", "lorem-ipsum")
36+
'This is a test.'
37+
```
38+
39+
-----
40+
2441
### Leetspeak
2542

2643
This implements a very basic ruleset of elite speaking.

0 commit comments

Comments
 (0)