diff --git a/app/models/emoji.rb b/app/models/emoji.rb index 10313e4a45b..4d695f09ff7 100644 --- a/app/models/emoji.rb +++ b/app/models/emoji.rb @@ -118,4 +118,16 @@ class Emoji "#{Discourse.base_uri}/uploads/#{db}/_emoji" end + def self.unicode_replacements + @unicode_replacements ||= Hash[db.map {|e| [e['emoji'], e['aliases'][0]] }] + end + + def self.unicode_regexp + @unicode_regexp ||= Regexp.union(unicode_replacements.keys) + end + + def self.sub_unicode!(text) + text.gsub!(unicode_regexp) {|m| ":#{unicode_replacements[m]}:"} + end + end diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb index ebe1503c977..aefd4bed006 100644 --- a/lib/pretty_text.rb +++ b/lib/pretty_text.rb @@ -246,23 +246,14 @@ module PrettyText end end - def self.emoji_unicode(text) - return text unless SiteSetting.enable_emoji? - - Emoji.db.each do |e| - text.gsub!(e['emoji'], ":#{e['aliases'][0]}:") - end - - text - end - def self.cook(text, opts={}) options = opts.dup # we have a minor inconsistency options[:topicId] = opts[:topic_id] - working_text = emoji_unicode(text.dup) + working_text = text.dup + Emoji.sub_unicode!(working_text) if SiteSetting.enable_emoji? sanitized = markdown(working_text, options) doc = Nokogiri::HTML.fragment(sanitized)