Class: Eggshell::Bundles::Basic::TextBlocks

Inherits:
Object
  • Object
show all
Includes:
Eggshell::BlockHandler, Eggshell::BlockHandler::BlockParams, Eggshell::BlockHandler::HtmlUtils
Defined in:
lib/eggshell/bundles/basics.rb

Constant Summary collapse

HTML_BLOCK =
TODO:

what else should be treated?

HTML tags that have end-block checks. any block starting with one of these tags will have its contents passed through until end of the tag (essentially, raw)

/^<(style|script|table|dl|select|textarea|\!--|\?)/
HTML_BLOCK_END =
{
  '<!--' => '-->',
  '<?' => '\\?>'
}.freeze
HTML_PASSTHRU =

For lines starting with only these tags, accept as-is

/^\s*<(\/?(html|head|meta|link|title|body|br|section|div|blockquote|p|pre))/
START_TEXT =
/^(p|bq|pre|raw|div)[(.]/

Constants included from Eggshell::BlockHandler::HtmlUtils

Eggshell::BlockHandler::HtmlUtils::HASH_HTML_ESCAPE

Constants included from Eggshell::BlockHandler::BlockParams

Eggshell::BlockHandler::BlockParams::ATTRIBUTES, Eggshell::BlockHandler::BlockParams::CLASS, Eggshell::BlockHandler::BlockParams::ID, Eggshell::BlockHandler::BlockParams::KEYS, Eggshell::BlockHandler::BlockParams::STYLE

Constants included from Eggshell::BlockHandler

Eggshell::BlockHandler::COLLECT, Eggshell::BlockHandler::COLLECT_RAW, Eggshell::BlockHandler::DONE, Eggshell::BlockHandler::RETRY

Instance Method Summary collapse

Methods included from Eggshell::BlockHandler::HtmlUtils

#attrib_string, #create_tag, #css_string, #html_escape

Methods included from Eggshell::BlockHandler::BlockParams

#get_block_params, #set_block_params

Methods included from Eggshell::BlockHandler

#current_type, #reset, #set_processor

Methods included from Eggshell::BaseHandler

#set_processor

Constructor Details

#initializeTextBlocks

Returns a new instance of TextBlocks.



40
41
42
# File 'lib/eggshell/bundles/basics.rb', line 40

def initialize
  @block_types = ['p', 'bq', 'pre', 'div', 'raw', 'html_pass', 'html_block']
end

Instance Method Details

#can_handle(line) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/eggshell/bundles/basics.rb', line 46

def can_handle(line)
  match = START_TEXT.match(line)
  if match
    @block_type = match[1]
    if @block_type == 'pre' || @block_type == 'raw'
      return BH::COLLECT_RAW
    else
      return BH::COLLECT
    end
  end
  
  if line.match(HTML_PASSTHRU)
    @block_type = 'html_pass'
    return BH::DONE
  end
  
  html = line.match(HTML_BLOCK)
  if html
    @block_type = 'html_block'

    end_html = HTML_BLOCK_END["<#{html[1]}"]
    end_html = "</#{html[1]}>$" if !end_html
    if line.match(end_html)
      return BH::DONE
    end

    @end_html = end_html
    return BH::COLLECT_RAW
  end

  return BH::RETRY
end

#continue_with(line) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/eggshell/bundles/basics.rb', line 79

def continue_with(line)
  if @block_type == 'html_block'
    done = line.match(@end_html)
    if done
      return BH::DONE
    else
      return BH::COLLECT
    end
  else
    if @block_type == 'pre' || @block_type == 'raw'
      if line && line != ''
        return BH::COLLECT
      end
    elsif line
      if line == '' || line.match(HTML_PASSTHRU) != nil || line.match(HTML_BLOCK) != nil
        return BH::RETRY
      end
      return BH::COLLECT
    end
  end

  return BH::RETRY
end

#process(type, args, lines, out, call_depth = 0) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/eggshell/bundles/basics.rb', line 103

def process(type, args, lines, out, call_depth = 0)
  buff = []

  if type == 'html_pass' || type == 'html_block'
    out << @eggshell.expand_expr(lines.join("\n"))
  else
    tagname = type == 'bq' ? 'blockquote' : type
    args = [] if !args
    bp = get_block_params(type, args[0])
    raw = type == 'pre' || type == 'raw'

    line_break = raw ? '' : '<br />'
    lines.each do |line|
      str = line.is_a?(Eggshell::Line) ? line.to_s : line
      str.chomp!
      buff << str
    end

    # @todo don't call expand_expr if raw && args[0]['no_expand']?
    buff = buff.join("#{line_break}\n")
    buff = @eggshell.expand_formatting(buff) if !raw
    buff = @eggshell.unescape(@eggshell.expand_expr(buff))
    
    if type != 'raw'
      out << [create_tag(type, bp), buff, "</#{type}>"].join('')
    else
      out << buff
    end
  end
end