class BlueDoc::SML::Rules::List
Constants
- INDENT_PX
Public Class Methods
match?(node)
click to toggle source
# File lib/bluedoc/sml/rules/list.rb, line 5 def self.match?(node) tag_name(node) == "list" end
to_html(node, opts = {})
click to toggle source
# File lib/bluedoc/sml/rules/list.rb, line 11 def self.to_html(node, opts = {}) renderer = opts[:renderer] attrs = attributes(node) nid = attrs[:nid] list = renderer.list current = list[nid] html = [] return "" if !current return "" if opts[:next] && nid == attributes(opts[:next])[:nid] nid_attr = name_by_attrs(attrs) current.length.times do |i| current_node = current[i] prev_node = current[i - 1] next_node = current[i + 1] current_attrs = attributes(current_node) prev_attrs = attributes(prev_node) next_attrs = attributes(next_node) current_tag = list_tag_by_type(current_attrs[:type]) current_level = current_attrs[:level] prev_tag = nil prev_level = nil next_tag = nil next_level = nil if prev_node prev_tag = list_tag_by_type(prev_attrs[:type]) prev_level = prev_attrs[:level] end if next_node next_tag = list_tag_by_type(next_attrs[:type]) next_level = next_attrs[:level] end if ( i == 0 || prev_level < current_level || ( prev_level == current_level && current_tag != prev_tag ) ) tag_attr = %( data-level="#{current_level}") tag_attr += nid_attr if current_level == 1 html << %(<#{current_tag}#{tag_attr}>) end children = renderer.children_to_html(current_node) li = %(<li>#{children}) if i < current.length - 1 if next_level < current_level (current_level - next_level).times do |j| prev_item = current[i - j] prev_item_attrs = attributes(prev_item) prev_item_tag = list_tag_by_type(prev_item_attrs[:type]) li += %(</li></#{prev_item_tag}>) end li += %(</li>) elsif next_level == current_level if next_tag == current_tag li += %(</li>) else li += %(</li></#{current_tag}>) end end else current_level.times do |j| prev_item = current[i - j] prev_item_attrs = attributes(prev_item) prev_item_tag = list_tag_by_type(prev_item_attrs[:type]) li += %(</li></#{prev_item_tag}>) end end html << li end html.join("\n") end