summaryrefslogtreecommitdiff
path: root/textutils.py
diff options
context:
space:
mode:
Diffstat (limited to 'textutils.py')
-rw-r--r--textutils.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/textutils.py b/textutils.py
new file mode 100644
index 0000000..4cd5b2e
--- /dev/null
+++ b/textutils.py
@@ -0,0 +1,69 @@
+import re
+
+__all__ = ('preprocess', 'remove_formatting', 'replace_emotes',
+ 'simplify_links', 'expand_links', 'links_to_markup')
+
+formatting_re = re.compile(r'##[0-9bB]')
+emotes_re = re.compile(r'%%[^%]')
+mplus_link_re = re.compile(r'@@([^|]+)\|([^@]+)@@')
+url_re = re.compile(r'(^|[^@|])((http|https|ftp)://([^\t ]+))')
+
+
+def remove_formatting(text):
+ return re.sub(formatting_re, '', text)
+
+
+def replace_emotes(text):
+
+ emotes = ( ":-D", ":-)", ";-)", ":-(", ":-o", ":-|", ":-/", "B-)",
+ ":-D", ":-[", ":-P", "*blush*", ":'-(", "*:-]*",
+ "*weird emote*", "*ninja*", ":-)", "*star*", "*?*", "*!*", "*idea*",
+ "*->*", "<3", "^_^", ":-)", ";-)", ":-(", ":-O", ":-(",
+ "*mimi*", ":-D", ":-D", "*perturbed*", ":-P",
+ "*shame*", ":-(", ">:-D", "0_o", "*ninja*", "*bad geek*",
+ "*star*", "*?*", "*!*", "*bubble*", ">_>", "*in love*",
+ "*disgust*", ">:-D", ":-(", "xD", "u.u", "x_x",
+ "*facepalm*", ">:-D", "*angry*", ":-D", "*metal*",
+ ":'-(", "*...*", "*@:=*", ":3", "*zZzZz*", "-.-'",
+ "*alien*")
+
+ def emote_repl(m):
+ code = ord(m.group(0)[2]) - 48
+ if code > len(emotes):
+ return m.group(0)
+ else:
+ return emotes[code]
+
+ return re.sub(emotes_re, emote_repl, text)
+
+
+def simplify_links(text):
+
+ def simplify(m):
+ return m.group(2)
+
+ return re.sub(mplus_link_re, simplify, text)
+
+
+def expand_links(text):
+
+ def expand(m):
+ return '{}[@@{}|{}@@]'.format(m.group(1), m.group(2), m.group(4))
+
+ # text = ' ' + text
+ return re.sub(url_re, expand, text)
+
+
+def links_to_markup(text):
+ return re.sub(mplus_link_re,
+ r'[ref=\1][color=2F3Fff]\2[/color][/ref]',
+ text)
+
+
+def preprocess(text, actions=(simplify_links,
+ remove_formatting,
+ replace_emotes)):
+ for f in actions:
+ text = f(text)
+
+ return text