Sha256: f9b800e873295c7e16843969f3964d328e7818254fe024df94e52ff631f993be

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

module MdEmoji
  class Render < Redcarpet::Render::HTML
    def preprocess(document)
      if include_emoji?(document)
        replace_emoji(document)
      else
        document
      end
    end

    def block_code(text, lang)
      "<pre><code#{%{ class="#{lang}"} if lang}>#{revert_emoji(text)}</code></pre>"
    end

    def codespan(text)
      "<code>#{revert_emoji(text)}</code>"
    end

    # Replaces valid emoji characters, ie :smile:, with img tags
    #
    # Valid emoji charaters are listed in +MdEmoji::EMOJI+
    def replace_emoji(text)
      text.gsub(/:(\S+):/) do |emoji|

        emoji_code = emoji #.gsub("|", "_")
        emoji      = emoji_code.gsub(":", "")

        if MdEmoji::EMOJI.include?(emoji)
          file_name    = "#{emoji.gsub('+', 'plus')}.png"
          default_size = %{height="20" width="20"}

          %{<img src="/assets/emojis/#{file_name}" class="emoji" } +
            %{title="#{emoji_code}" alt="#{emoji_code}" #{default_size}>}
        else
          emoji_code
        end
      end
    end

    private

    # Returns +true+ if emoji are present in +text+, otherwise returns +false+
    def include_emoji?(text)
      text && text[/:\S+:/]
    end

    # Replaces emoji images with plain text
    def revert_emoji(text)
      text.gsub(/<[^>]+class="emoji"\stitle="(:\S+:)"[^>]+>/) do |emoji|
        ":#{$1}:"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
md_emoji-0.0.4 lib/md_emoji/render.rb