| Class | SM::ToFlow |
| In: |
markup/simple_markup/to_flow.rb
|
| Parent: | Object |
| LIST_TYPE_TO_HTML | = | { SM::ListBase::BULLET => [ "<ul>", "</ul>" ], SM::ListBase::NUMBER => [ "<ol>", "</ol>" ], SM::ListBase::UPPERALPHA => [ "<ol>", "</ol>" ], SM::ListBase::LOWERALPHA => [ "<ol>", "</ol>" ], SM::ListBase::LABELED => [ "<dl>", "</dl>" ], SM::ListBase::NOTE => [ "<table>", "</table>" ], } |
| InlineTag | = | Struct.new(:bit, :on, :off) |
# File markup/simple_markup/to_flow.rb, line 111
111: def accept_blank_line(am, fragment)
112: # @res << annotate("<p />") << "\n"
113: end
# File markup/simple_markup/to_flow.rb, line 115
115: def accept_heading(am, fragment)
116: @res << Flow::H.new(fragment.head_level, convert_flow(am.flow(fragment.txt)))
117: end
# File markup/simple_markup/to_flow.rb, line 103
103: def accept_list_end(am, fragment)
104: @res = @list_stack.pop
105: end
# File markup/simple_markup/to_flow.rb, line 107
107: def accept_list_item(am, fragment)
108: @res << Flow::LI.new(fragment.param, convert_flow(am.flow(fragment.txt)))
109: end
# File markup/simple_markup/to_flow.rb, line 96
96: def accept_list_start(am, fragment)
97: @list_stack.push(@res)
98: list = Flow::LIST.new(fragment.type)
99: @res << list
100: @res = list
101: end
# File markup/simple_markup/to_flow.rb, line 82
82: def accept_paragraph(am, fragment)
83: @res << Flow::P.new((convert_flow(am.flow(fragment.txt))))
84: end
# File markup/simple_markup/to_flow.rb, line 90
90: def accept_rule(am, fragment)
91: size = fragment.param
92: size = 10 if size > 10
93: @res << Flow::RULE.new(size)
94: end
# File markup/simple_markup/to_flow.rb, line 86
86: def accept_verbatim(am, fragment)
87: @res << Flow::VERB.new((convert_flow(am.flow(fragment.txt))))
88: end
Given an HTML tag, decorate it with class information and the like if required. This is a no-op in the base class, but is overridden in HTML output classes that implement style sheets
# File markup/simple_markup/to_flow.rb, line 66
66: def annotate(tag)
67: tag
68: end
# File markup/simple_markup/to_flow.rb, line 148
148: def convert_flow(flow)
149: res = ""
150: flow.each do |item|
151: case item
152: when String
153: res << convert_string(item)
154: when AttrChanger
155: off_tags(res, item)
156: on_tags(res, item)
157: when Special
158: res << convert_special(item)
159: else
160: raise "Unknown flow element: #{item.inspect}"
161: end
162: end
163: res
164: end
# File markup/simple_markup/to_flow.rb, line 172
172: def convert_special(special)
173: handled = false
174: Attribute.each_name_of(special.type) do |name|
175: method_name = "handle_special_#{name}"
176: if self.respond_to? method_name
177: special.text = send(method_name, special)
178: handled = true
179: end
180: end
181: raise "Unhandled special: #{special}" unless handled
182: special.text
183: end
some of these patterns are taken from SmartyPants...
# File markup/simple_markup/to_flow.rb, line 168
168: def convert_string(item)
169: CGI.escapeHTML(item)
170: end
Set up the standard mapping of attributes to HTML tags
# File markup/simple_markup/to_flow.rb, line 44
44: def init_tags
45: @attr_tags = [
46: InlineTag.new(SM::Attribute.bitmap_for(:BOLD), "<b>", "</b>"),
47: InlineTag.new(SM::Attribute.bitmap_for(:TT), "<tt>", "</tt>"),
48: InlineTag.new(SM::Attribute.bitmap_for(:EM), "<em>", "</em>"),
49: ]
50: end
# File markup/simple_markup/to_flow.rb, line 137
137: def off_tags(res, item)
138: attr_mask = item.turn_off
139: return if attr_mask.zero?
140:
141: @attr_tags.reverse_each do |tag|
142: if attr_mask & tag.bit != 0
143: res << annotate(tag.off)
144: end
145: end
146: end
# File markup/simple_markup/to_flow.rb, line 126
126: def on_tags(res, item)
127: attr_mask = item.turn_on
128: return if attr_mask.zero?
129:
130: @attr_tags.each do |tag|
131: if attr_mask & tag.bit != 0
132: res << annotate(tag.on)
133: end
134: end
135: end