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