class Gibier::Renderer

Public Class Methods

create(name) click to toggle source
# File lib/gibier/renderer.rb, line 27
def self.create(name)
  Class.new(Renderer) do
    def self.page_name
      @page_name
    end

    def self.page_name=(name)
      @page_name = name
    end

    def page_name
      self.class.page_name
    end
  end.tap{|c| c.page_name = name }
end
new() click to toggle source
Calls superclass method
# File lib/gibier/renderer.rb, line 43
def initialize
  super
  @enter_title_page = false
  @enter_page = false
  @page_count = 0
  clear_list_state
end
page_name() click to toggle source
# File lib/gibier/renderer.rb, line 29
def self.page_name
  @page_name
end
page_name=(name) click to toggle source
# File lib/gibier/renderer.rb, line 33
def self.page_name=(name)
  @page_name = name
end

Public Instance Methods

block_code(code, language) click to toggle source
# File lib/gibier/renderer.rb, line 189
def block_code(code, language)
  clear_list_state

  formatter = Rouge::Formatters::HTML.new(css_class: 'highlight', line_numbers: true)
  lexer = case language
          when 'ruby'
            Rouge::Lexers::Ruby.new
          when 'javascript'
            Rouge::Lexers::Javascript.new
          else
            Rouge::Lexers::PlainText.new
          end
  highlight = formatter.format(lexer.lex(code))
  "      children << code({ dangerouslySetInnerHTML: { __html: %q{#{highlight}} } })\n"
end
block_html(html) click to toggle source
# File lib/gibier/renderer.rb, line 205
def block_html(html)
  clear_list_state
  "      children << code({ dangerouslySetInnerHTML: { __html: %q{#{html}} } })\n"
end
clear_list_state() click to toggle source
# File lib/gibier/renderer.rb, line 51
def clear_list_state
  @enter_list = false
  @list_depth = 0
end
codespan(code) click to toggle source
# File lib/gibier/renderer.rb, line 226
def codespan(code)
  "<code>#{code}</code>"
end
double_emphasis(text) click to toggle source
# File lib/gibier/renderer.rb, line 218
def double_emphasis(text)
  "<strong>#{text}</strong>"
end
emphasis(text) click to toggle source
# File lib/gibier/renderer.rb, line 214
def emphasis(text)
  "<i>#{text}</i>"
end
header(text, header_level) click to toggle source
# File lib/gibier/renderer.rb, line 101
    def header(text, header_level)
      clear_list_state

      if header_level > 3
        return "      children << h#{header_level}(nil, #{text.expand_tag})\n"
      end

      "".tap do |result|
        if @enter_title_page || @enter_page
          result <<
<<EOD
  end
end
end

EOD
          @enter_title_page = @enter_page = false
        end

        if header_level == 1
          @enter_title_page = true
          @title = text.escape
        else
          @enter_page = true
        end


        result <<
<<EOD
class Gibier::Page#{@page_count} < Gibier::PageBase
def header
  h#{header_level}(nil, #{text.expand_tag})
end

def content
  [].tap do |children|
EOD

        @page_count += 1
      end
    end
hrule() click to toggle source
# File lib/gibier/renderer.rb, line 76
    def hrule
      clear_list_state
      "".tap do |result|
        if @enter_title_page || @enter_page
          result <<
<<EOD
  end
end
end

EOD
          @enter_title_page = @enter_page = false
        end

        result << <<EOD
class Gibier::Page#{@page_count} < Gibier::PageBase
def content
  [].tap do |children|
EOD

        @enter_page = true
        @page_count += 1
      end
    end
image(link, title, alt_text) click to toggle source
# File lib/gibier/renderer.rb, line 184
def image(link, title, alt_text)
  href = "\#{Gibier.assets_path}/images/#{link}"
  "<p {class:\"#{alt_text}\"}><img {src:#{href.escape}}></img></p>"
end
list(text, ordered) click to toggle source
# File lib/gibier/renderer.rb, line 166
def list(text, ordered)
  "".tap do |result|
    result << "      children << ul(nil,\n"
    result << text.sub(/,\n\z/, "\n")
    result << "      )\n"
    @enter_list = false
  end
end
list_item(item, orderd) click to toggle source
# File lib/gibier/renderer.rb, line 154
def list_item(item, orderd)
  "".tap do |result|
    if item =~ /.*\n +children << /
      result << item.sub(/(.*)\n +children << /) { "                  li(nil, #{$1.strip.expand_tag}),\n                  " }.rstrip
      result << ",\n"
      @enter_list = false
    else
      result << "                    li(nil, #{item.strip.expand_tag}),\n"
    end
  end
end
normal_text(text) click to toggle source
# File lib/gibier/renderer.rb, line 230
def normal_text(text)
  text
end
page_name() click to toggle source
# File lib/gibier/renderer.rb, line 37
def page_name
  self.class.page_name
end
paragraph(text) click to toggle source
# File lib/gibier/renderer.rb, line 234
def paragraph(text)
  lines = text.split(/  $/)
  if text =~ /\A%\w+:/
    class_name = text[1...text.index(':')]
    lines[0] = lines.first[(lines.first.index(':') + 1)...lines.first.length].lstrip
    "      children << p({className:\"#{class_name}\"}, #{lines.map{|l| l.expand_tag}.join(',Hyalite.create_element(\'br\'),')})\n"
  else
    "      children << p(nil, #{lines.map{|l| l.expand_tag}.join(',Hyalite.create_element(\'br\'),')})\n"
  end
end
raw_html(html) click to toggle source
# File lib/gibier/renderer.rb, line 210
def raw_html(html)
  html
end
stikethrough(text) click to toggle source
# File lib/gibier/renderer.rb, line 222
def stikethrough(text)
  "<s>#{text}</s>"
end
table(header, body) click to toggle source
# File lib/gibier/renderer.rb, line 245
    def table(header, body)
      code = <<-CODE
        children << table(nil,
          tr(nil,
            *[
              #{header.split("\t").map{|c| "th(nil, #{c.expand_tag})"}.join(",\n")}
            ]
          ),
          *[
            #{body.split("\n").map{|row| "tr(nil, [#{row.split("\t").map{|c| "td(nil, #{c.expand_tag})"}.join(", ")}])" }.join(",\n")}
          ]
        )
      CODE
      code
    end
table_cell(content, alignment) click to toggle source
# File lib/gibier/renderer.rb, line 265
def table_cell(content, alignment)
  content + "\t"
end
table_row(content) click to toggle source
# File lib/gibier/renderer.rb, line 261
def table_row(content)
  content + "\n"
end