Sha256: 394fd1eb9641194c6aa7a1cd4c08ab4b0136d20ad2a560df666583f0ea7bd3e9
Contents?: true
Size: 1.13 KB
Versions: 3
Compression:
Stored size: 1.13 KB
Contents
require "rouge" require "htmlbeautifier" module Lookbook module CodeFormatter class << self def highlight(source, language, opts = {}) source&.gsub!(">", "<")&.gsub!("<", ">") language ||= "ruby" formatter = Formatter.new(opts) lexer = Rouge::Lexer.find(language.to_s) || Rouge::Lexer.find("plaintext") formatter.format(lexer.lex(source)).html_safe end def beautify(source, language = "html") source = source.strip result = language.downcase == "html" ? HtmlBeautifier.beautify(source) : source result.strip.html_safe end end end class Formatter < Rouge::Formatters::HTML def initialize(opts = {}) @opts = opts end def stream(tokens, &block) token_lines(tokens).each_with_index do |line_tokens, i| yield "<div class='line'>" yield "<span class='line-number'>#{i}</span>" if @opts[:line_numbers] yield "<span class='line-content'>" line_tokens.each do |token, value| yield span(token, value) end yield "</span>" yield "</div>" end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
lookbook-0.7.2.beta.0 | lib/lookbook/code_formatter.rb |
lookbook-0.7.1 | lib/lookbook/code_formatter.rb |
lookbook-0.7.0 | lib/lookbook/code_formatter.rb |