From f91316a9fa3ecbb1944b12246b66f22ef5ae4f26 Mon Sep 17 00:00:00 2001 From: ppwwyyxx Date: Mon, 15 Dec 2014 22:40:42 +0800 Subject: [PATCH] emoji works for only some format... --- lib/emoji.py | 23 +++++++++++++++-------- lib/render.py | 5 ++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/lib/emoji.py b/lib/emoji.py index d7a4e25..8c42e03 100755 --- a/lib/emoji.py +++ b/lib/emoji.py @@ -1,7 +1,7 @@ #!/usr/bin/env python2 # -*- coding: UTF-8 -*- # File: emoji.py -# Date: Sun Dec 14 01:56:45 2014 +0800 +# Date: Mon Dec 15 22:30:24 2014 +0800 # Author: Yuxin Wu import os @@ -11,9 +11,17 @@ LIB_PATH = os.path.dirname(os.path.abspath(__file__)) from emojiname import gQQFaceMap as gBracketFace from emojiname import gUnicodeFaceMap as gUnicodeFace from emojiname import gEmojiCodeMap as gUnicodeCodeMap +UNICODE_EMOJI_RE = re.compile(u'[\U00010000-\U0010ffff]|[\u2600-\u2764]|\u2122|\u00a9|\u00ae') class EmojiProvider(object): - def __init__(self): + def __init__(self, html_replace=True): + """ html_replace: replace emojicode by html. + otherwise, replace by plain text + """ + self.html_replace = html_replace + if not html_replace: + raise NotImplementedError() + # [微笑] -> 0 self.bracket_face = dict([(('[' + k + ']').decode('utf-8'), v) for k, v in gBracketFace.iteritems()]) @@ -24,21 +32,20 @@ class EmojiProvider(object): # u'\U0001f35c' -> "e340" self.unicode_face = dict([(unichr(int(k, 16)), v[2:]) for k, v in gUnicodeCodeMap.iteritems()]) - self.unicode_re = re.compile(u'[\U00010000-\U0010ffff]|[\u2600-\u2764]|\u2122|\u00a9|\u00ae') self.used_emoji_id = set() - @staticmethod - def gen_html_elem(emoji_id): + + def gen_replace_elem(self, emoji_id): return ''.format(emoji_id) def _replace_unicode(self, msg): + if not UNICODE_EMOJI_RE.findall(msg): # didn't find the code - if not self.unicode_re.findall(msg): return msg for k, v in self.unicode_face.iteritems(): if k in msg: self.used_emoji_id.add(v) - msg = msg.replace(k, EmojiProvider.gen_html_elem(v)) + msg = msg.replace(k, self.gen_replace_elem(v)) return msg def _replace_bracket(self, msg): @@ -47,7 +54,7 @@ class EmojiProvider(object): for k, v in self.bracket_face.iteritems(): if k in msg: self.used_emoji_id.add(v) - msg = msg.replace(k, EmojiProvider.gen_html_elem(v)) + msg = msg.replace(k, self.gen_replace_elem(v)) return msg def replace_emojicode(self, msg): diff --git a/lib/render.py b/lib/render.py index 977e9d8..3020247 100755 --- a/lib/render.py +++ b/lib/render.py @@ -1,7 +1,7 @@ #!/usr/bin/env python2 # -*- coding: UTF-8 -*- # File: render.py -# Date: Sun Dec 14 00:12:43 2014 +0800 +# Date: Mon Dec 15 21:44:07 2014 +0800 # Author: Yuxin Wu import os @@ -21,6 +21,7 @@ except: from .msg import * from .utils import ensure_unicode +from emoji import EmojiProvider TEMPLATES_FILES = {TYPE_MSG: "TP_MSG", TYPE_IMG: "TP_IMG", @@ -34,6 +35,7 @@ class HTMLRender(object): self.html = ensure_unicode(open(HTML_FILE).read()) self.parser = parser self.res = res + self.emoji = EmojiProvider() csss = glob.glob(os.path.join(LIB_PATH, 'static/*.css')) css_string = [] @@ -106,6 +108,7 @@ class HTMLRender(object): except: template = ensure_unicode(TEMPLATES[1]) content = msg.msg_str() + content = self.emoji.replace_emojicode(content) return template.format(sender_label=sender, content=content)