module IsoDoc::Function::Lists

Constants

OL_STYLE

Public Instance Methods

dl_attrs(node) click to toggle source
# File lib/isodoc/function/lists.rb, line 80
def dl_attrs(node)
  attr_code(id: node["id"], style: keep_style(node))
end
dl_parse(node, out) click to toggle source
# File lib/isodoc/function/lists.rb, line 84
def dl_parse(node, out)
  out.dl **dl_attrs(node) do |v|
    node.elements.select { |n| dt_dd? n }.each_slice(2) do |dt, dd|
      v.dt **attr_code(id: dt["id"]) do |term|
        dt_parse(dt, term)
      end
      v.dd **attr_code(id: dd["id"]) do |listitem|
        dd.children.each { |n| parse(n, listitem) }
      end
    end
  end
  node.elements.reject { |n| dt_dd? n }.each { |n| parse(n, out) }
end
dt_dd?(node) click to toggle source
# File lib/isodoc/function/lists.rb, line 76
def dt_dd?(node)
  %w{dt dd}.include? node.name
end
dt_parse(dterm, term) click to toggle source
# File lib/isodoc/function/lists.rb, line 65
def dt_parse(dterm, term)
  if dterm.elements.empty?
    # term.p **attr_code(class: note? ? "Note" : nil) do |p|
    term.p do |p|
      p << dterm.text
    end
  else
    dterm.children.each { |n| parse(n, term) }
  end
end
li_parse(node, out) click to toggle source
# File lib/isodoc/function/lists.rb, line 52
def li_parse(node, out)
  out.li **attr_code(id: node["id"]) do |li|
    if node["uncheckedcheckbox"] == "true"
      li << '<span class="zzMoveToFollowing">'\
            '<input type="checkbox" checked="checked"/></span>'
    elsif node["checkedcheckbox"] == "true"
      li << '<span class="zzMoveToFollowing">'\
            '<input type="checkbox"/></span>'
    end
    node.children.each { |n| parse(n, li) }
  end
end
ol_attrs(node) click to toggle source
# File lib/isodoc/function/lists.rb, line 41
def ol_attrs(node)
  { type: node["type"] ? ol_style(node["type"].to_sym) : ol_depth(node),
    id: node["id"], style: keep_style(node) }
end
ol_depth(node) click to toggle source

We don't really want users to specify type of ordered list; we will use a fixed hierarchy as practiced by ISO (though not fully spelled out): a) 1) i) A) I)

# File lib/isodoc/function/lists.rb, line 31
def ol_depth(node)
  depth = node.ancestors("ul, ol").size + 1
  type = :alphabet
  type = :arabic if [2, 7].include? depth
  type = :roman if [3, 8].include? depth
  type = :alphabet_upper if [4, 9].include? depth
  type = :roman_upper if [5, 10].include? depth
  ol_style(type)
end
ol_parse(node, out) click to toggle source
# File lib/isodoc/function/lists.rb, line 46
def ol_parse(node, out)
  out.ol **attr_code(ol_attrs(node)) do |ol|
    node.children.each { |n| parse(n, ol) }
  end
end
ol_style(type) click to toggle source
# File lib/isodoc/function/lists.rb, line 22
def ol_style(type)
  type ||= :alphabet
  OL_STYLE[type.to_sym]
end
ul_attrs(node) click to toggle source
# File lib/isodoc/function/lists.rb, line 4
def ul_attrs(node)
  { id: node["id"], style: keep_style(node) }
end
ul_parse(node, out) click to toggle source
# File lib/isodoc/function/lists.rb, line 8
def ul_parse(node, out)
  out.ul **attr_code(ul_attrs(node)) do |ul|
    node.children.each { |n| parse(n, ul) }
  end
end