class HTMLGenerator

Generates HTML for a given AST token.

Public Class Methods

new() click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 5
def initialize
  define_header_generators
end

Public Instance Methods

generate(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 9
def generate(token)
  token.accept(self)
end
generate_basic_list(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 13
def generate_basic_list(token)
  generate_list(token.children, 'ul')
end
generate_block_quote(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 25
def generate_block_quote(token)
  child_tokens = token.children.map { |child_token| generate(child_token) }

  ["<pre><blockquote>\n", child_tokens, "</blockquote></pre>\n"].join
end
generate_bold(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 71
def generate_bold(token)
  "<b>#{token.value}</b>"
end
generate_break(_token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 49
def generate_break(_token)
  "</br>\n"
end
generate_code_block(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 31
def generate_code_block(token)
  child_tokens = token.children.map { |child_token| generate(child_token) }

  ["<pre><code>\n", child_tokens, "</code></pre>\n"].compact.join
end
generate_inline_code(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 67
def generate_inline_code(token)
  "<code>#{token.value}</code>"
end
generate_italics(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 63
def generate_italics(token)
  "<em>#{token.value}</em>"
end
generate_list_item(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 21
def generate_list_item(token)
  "<li>#{token.value}</li>\n"
end
generate_new_line(_token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 37
def generate_new_line(_token)
  "\n"
end
generate_numbered_list(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 17
def generate_numbered_list(token)
  generate_list(token.children, 'ol')
end
generate_paragraph(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 53
def generate_paragraph(token)
  child_tokens = token.children.map { |child_token| generate(child_token) }

  ["<p>\n", child_tokens, "</p>\n"].join
end
generate_quote(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 41
def generate_quote(token)
  "#{token.value}\n"
end
generate_strikethrough(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 59
def generate_strikethrough(token)
  "<del>#{token.value}</del>"
end
generate_text(token) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 45
def generate_text(token)
  token.value
end

Private Instance Methods

define_header_generators() click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 81
def define_header_generators
  (1..6).each do |header_level|
    method_name = "generate_header_#{header_level}"

    self.class.define_method(method_name) do |token|
      "<h#{header_level}>#{token.value}</h#{header_level}>\n"
    end
  end
end
generate_list(child_tokens, tag) click to toggle source
# File lib/rosetta/formatters/html/html_generator.rb, line 91
def generate_list(child_tokens, tag)
  child_token_strings = child_tokens.map { |child_token| generate_list_item(child_token) }

  ["<#{tag}>\n", child_token_strings, "</#{tag}>\n"].join
end