Sha256: d40175c9195d46e3dbc70127e7da9553a6acc9a45ae5d3ac293541b8186dffb7

Contents?: true

Size: 1.24 KB

Versions: 2

Compression:

Stored size: 1.24 KB

Contents

require 'rouge'

class FrenchPress
  class Post
    class Code < Generic
      def lang
        case @file_type
        when 'rb'
          'ruby'
        when 'c'
          'c'
        when 'css'
          'css'
        when 'py'
          'python'
        when 'yml'
          'yaml'
        when 'swift'
          'swift'
        when 'rs'
          'rust'
        when 'go'
          'go'
        when 'cpp'
          'cpp'
        else
          ''
        end
      end

      def lexer
        case lang
        when 'ruby'
          Rouge::Lexers::Ruby.new
        when 'c'
          Rouge::Lexers::C.new
        when 'css'
          Rouge::Lexers::Css.new
        when 'python'
          Rouge::Lexers::Python.new
        when 'yaml'
          Rouge::Lexers::Yaml.new
        when 'swift'
          Rouge::Lexers::Swift.new
        when 'rust'
          Rouge::Lexers::Rust.new
        when 'go'
          Rouge::Lexers::Go.new
        when 'cpp'
          Rouge::Lexers::Cpp.new
        end
      end

      def render
        return "<code class=\"code\">#{@content}</code>" unless lexer
        renderer = Rouge::Formatters::HTML.new(css_class: 'highlight')
        "<div class=\"code\">#{renderer.format(lexer.lex(@content))}</div>"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
frenchpress-0.2.1 lib/frenchpress/post/code.rb
frenchpress-0.2 lib/frenchpress/post/code.rb