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