Class: Html2fortitude::HTML::ERB

Inherits:
Erubis::Basic::Engine
  • Object
show all
Defined in:
lib/html2fortitude/html/erb.rb

Overview

A class for converting ERB code into a format that's easier for the Html2fortitude::HTML Nokogiri-based parser to understand.

Uses Erubis's extensible parsing powers to parse the ERB in a reliable way, and ruby_parser's Ruby knowledge to figure out whether a given chunk of Ruby code starts a block or not.

The ERB tags are converted to HTML tags in the following way. <% ... %> is converted into <fortitude_silent> ... </fortitude_silent>. <%= ... %> is converted into <fortitude_loud> ... </fortitude_loud>. <%== ... %> is converted into <fortitude_loud raw=raw> ... </fortitude_loud>. Finally, if either of these opens a Ruby block, <fortitude_block> ... </fortitude_block> will wrap the entire contents of the block - that is, everything that should be indented beneath the previous silent or loud tag.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.compile(template) ⇒ String

Compiles an ERB template into a HTML document containing fortitude_* tags.

Parameters:

  • template (String)

    The ERB template

Returns:

  • (String)

    The output document

See Also:



28
29
30
# File 'lib/html2fortitude/html/erb.rb', line 28

def self.compile(template)
  new(template).src
end

Instance Method Details

#add_expr_debug(src, code) ⇒ Object

html2fortitude doesn't support debugging expressions.



81
82
83
84
# File 'lib/html2fortitude/html/erb.rb', line 81

def add_expr_debug(src, code)
  # TODO ageweke
  # raise Haml::Error.new("html2haml doesn't support debugging expressions.")
end

#add_expr_escaped(src, code) ⇒ Object



76
77
78
# File 'lib/html2fortitude/html/erb.rb', line 76

def add_expr_escaped(src, code)
  src << "<fortitude_loud raw=raw>" << h(code) << "</fortitude_loud>"
end

#add_expr_literal(src, code) ⇒ Object

Concatenates a Ruby expression that's printed to the document onto the source buffer. This uses the <fortitude:silent> tag, and may open a Ruby block with the <fortitude:block> tag. An expression never closes a block.

Parameters:

  • src (String)

    The source buffer

  • code (String)

    The Ruby expression to add to the buffer



71
72
73
74
# File 'lib/html2fortitude/html/erb.rb', line 71

def add_expr_literal(src, code)
  src << '<fortitude_loud>' << h(code) << '</fortitude_loud>'
  src << '<fortitude_block>' if block_opener?(code)
end

#add_postamble(src) ⇒ Object

The ERB-to-Fortitudeized-HTML conversion has no postamble.



36
# File 'lib/html2fortitude/html/erb.rb', line 36

def add_postamble(src); end

#add_preamble(src) ⇒ Object

The ERB-to-Fortitudeized-HTML conversion has no preamble.



33
# File 'lib/html2fortitude/html/erb.rb', line 33

def add_preamble(src); end

#add_stmt(src, code) ⇒ Object

Concatenates a silent Ruby statement onto the source buffer. This uses the <fortitude_silent> tag, and may close and/or open a Ruby block with the <fortitude_block> tag.

In particular, a block is closed if this statement is some form of end, opened if it's a block opener like do, if, or begin, and both closed and opened if it's a mid-block keyword like else or when.

Parameters:

  • src (String)

    The source buffer

  • code (String)

    The Ruby statement to add to the buffer



57
58
59
60
61
# File 'lib/html2fortitude/html/erb.rb', line 57

def add_stmt(src, code)
  src << '</fortitude_block>' if block_closer?(code) || mid_block?(code)
  src << '<fortitude_silent>' << h(code) << '</fortitude_silent>' unless code.strip == "end"
  src << '<fortitude_block>' if block_opener?(code) || mid_block?(code)
end

#add_text(src, text) ⇒ Object

Concatenates the text onto the source buffer.

Parameters:

  • src (String)

    The source buffer

  • text (String)

    The raw text to add to the buffer



42
43
44
# File 'lib/html2fortitude/html/erb.rb', line 42

def add_text(src, text)
  src << text
end