class Bob::Compiler::Template
Public Class Methods
new(name, template_string)
click to toggle source
Calls superclass method
Bob::Compiler::Base::new
# File lib/bob/compiler/template.rb, line 10 def initialize(name, template_string) super() @name = name @template_string = template_string end
Private Instance Methods
compile()
click to toggle source
# File lib/bob/compiler/template.rb, line 17 def compile doc = Nokogiri::HTML(@template_string) key = sanitize_identifier(@name) doc.errors.each do |error| warn(error.message, error.line) end unless doc.root error("Parse error", 0) return end @buffer << 'Bob.registerTemplate(' << quote(key) << ', {' @buffer.indented do if @template_string =~ /<!DOCTYPE/i @buffer.blankline! @buffer << "doctype: " << quote(doc.internal_subset.to_xhtml) << "," end @buffer.blankline! @buffer << "name: " << quote(@name) << "," @buffer.blankline! @buffer << "layout: " compiled_layout = Layout.new(doc.root) @warnings += compiled_layout.warnings @errors += compiled_layout.errors @buffer.merge(compiled_layout.buffer) << "," @buffer.blankline! @buffer << "blocks: {" if compiled_layout.container @buffer.indented do compiled_layout.container.children.each do |block_element| next unless block_element.element? compiled_block = Block.new(block_element) @warnings += compiled_block.warnings @errors += compiled_block.errors next unless compiled_block.name @buffer.blankline! @buffer << quote(compiled_block.name) << ": " @buffer.merge(compiled_block.buffer) << "," end @buffer.blankline! end end @buffer << "}" end @buffer.blankline! @buffer << "});" end