Implement nested lists
All checks were successful
CI Pipeline / build (pull_request) Successful in 13s
All checks were successful
CI Pipeline / build (pull_request) Successful in 13s
This commit is contained in:
@@ -69,7 +69,7 @@ module Notare
|
||||
xml["w"].p do
|
||||
xml["w"].pPr do
|
||||
xml["w"].numPr do
|
||||
xml["w"].ilvl("w:val" => "0")
|
||||
xml["w"].ilvl("w:val" => item.level.to_s)
|
||||
xml["w"].numId("w:val" => item.num_id.to_s)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,6 +4,8 @@ module Notare
|
||||
module Xml
|
||||
class Numbering
|
||||
NAMESPACE = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"
|
||||
BULLET_CHARS = ["•", "○", "■"].freeze
|
||||
NUMBER_FORMATS = %w[decimal lowerLetter lowerRoman].freeze
|
||||
|
||||
def initialize(lists)
|
||||
@lists = lists
|
||||
@@ -28,13 +30,16 @@ module Notare
|
||||
|
||||
def render_abstract_num(xml, list)
|
||||
xml["w"].abstractNum("w:abstractNumId" => list.num_id.to_s) do
|
||||
xml["w"].lvl("w:ilvl" => "0") do
|
||||
xml["w"].start("w:val" => "1")
|
||||
xml["w"].numFmt("w:val" => num_format(list.type))
|
||||
xml["w"].lvlText("w:val" => lvl_text(list.type))
|
||||
xml["w"].lvlJc("w:val" => "left")
|
||||
xml["w"].pPr do
|
||||
xml["w"].ind("w:left" => "720", "w:hanging" => "360")
|
||||
9.times do |level|
|
||||
xml["w"].lvl("w:ilvl" => level.to_s) do
|
||||
xml["w"].start("w:val" => "1")
|
||||
xml["w"].numFmt("w:val" => num_format_for_level(list.type, level))
|
||||
xml["w"].lvlText("w:val" => lvl_text_for_level(list.type, level))
|
||||
xml["w"].lvlJc("w:val" => "left")
|
||||
xml["w"].pPr do
|
||||
left = 720 * (level + 1)
|
||||
xml["w"].ind("w:left" => left.to_s, "w:hanging" => "360")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -46,12 +51,20 @@ module Notare
|
||||
end
|
||||
end
|
||||
|
||||
def num_format(type)
|
||||
type == :bullet ? "bullet" : "decimal"
|
||||
def num_format_for_level(type, level)
|
||||
if type == :bullet
|
||||
"bullet"
|
||||
else
|
||||
NUMBER_FORMATS[level % NUMBER_FORMATS.length]
|
||||
end
|
||||
end
|
||||
|
||||
def lvl_text(type)
|
||||
type == :bullet ? "•" : "%1."
|
||||
def lvl_text_for_level(type, level)
|
||||
if type == :bullet
|
||||
BULLET_CHARS[level % BULLET_CHARS.length]
|
||||
else
|
||||
"%#{level + 1}."
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user