56 lines
1.4 KiB
Python
56 lines
1.4 KiB
Python
|
import random
|
||
|
import io
|
||
|
import json
|
||
|
import re
|
||
|
from .const import marsey_mappings
|
||
|
|
||
|
WORD_DELIMITER = " "
|
||
|
MAX_EMOJIS_PER_BLOCK = 2
|
||
|
BLOCK_REGEX = re.compile(r"\s*[^\s]*")
|
||
|
TRIM_REGEX = re.compile(r"^\W*|\W*$")
|
||
|
|
||
|
def split_into_blocks(text):
|
||
|
if text == "" or BLOCK_REGEX.search(text) is None:
|
||
|
return [text]
|
||
|
blocks = []
|
||
|
start = 0
|
||
|
while start < len(text):
|
||
|
block_match = BLOCK_REGEX.search(text, start)
|
||
|
blocks.append(block_match.group())
|
||
|
start = block_match.end()
|
||
|
return blocks
|
||
|
|
||
|
def trim_nonalphabetical_characters(text):
|
||
|
return TRIM_REGEX.sub("", text)
|
||
|
|
||
|
def marsify(text):
|
||
|
blocks = split_into_blocks(text)
|
||
|
new_blocks = []
|
||
|
for i, block in enumerate(blocks):
|
||
|
new_blocks.append(block)
|
||
|
emojis = generate_emojis_from(block)
|
||
|
if emojis:
|
||
|
new_blocks.append(" " + emojis)
|
||
|
return "".join(new_blocks)
|
||
|
|
||
|
def generate_emojis_from(block):
|
||
|
trimmed_block = trim_nonalphabetical_characters(block)
|
||
|
matching_emojis = get_matching_emojis(trimmed_block)
|
||
|
emojis = []
|
||
|
if matching_emojis:
|
||
|
num_emojis = random.randint(0, MAX_EMOJIS_PER_BLOCK)
|
||
|
for x in range(num_emojis):
|
||
|
emojis.append(random.choice(matching_emojis))
|
||
|
return "".join(emojis)
|
||
|
|
||
|
def get_matching_emojis(trimmed_block):
|
||
|
key = get_alphanumeric_prefix(trimmed_block.lower())
|
||
|
if key in marsey_mappings:
|
||
|
return marsey_mappings[get_alphanumeric_prefix(key)]
|
||
|
return []
|
||
|
|
||
|
def get_alphanumeric_prefix(s):
|
||
|
i = 0
|
||
|
while i < len(s) and s[i].isalnum():
|
||
|
i += 1
|
||
|
return s[:i]
|