Class: Uniword::Wordprocessingml::NumberingDefinition
- Inherits:
-
Lutaml::Model::Serializable
- Object
- Lutaml::Model::Serializable
- Uniword::Wordprocessingml::NumberingDefinition
- Defined in:
- lib/uniword/wordprocessingml/numbering_definition.rb
Overview
Represents an abstract numbering definition with up to 9 levels (0-8) This is the template that NumberingInstance references
Represents <w:abstractNum w:abstractNumId=“…”> element
Constant Summary collapse
- MAX_LEVELS =
9
Class Method Summary collapse
-
.bullet(abstract_num_id:, name: "Bullet", character: "\u2022") ⇒ Object
Create a bullet numbering definition.
-
.decimal(abstract_num_id:, name: "Decimal") ⇒ Object
Create a simple decimal numbering definition.
-
.letter(abstract_num_id:, name: "Letter", upper: true) ⇒ Object
Create a letter numbering definition.
-
.roman(abstract_num_id:, name: "Roman", upper: true) ⇒ Object
Create a roman numeral numbering definition.
Instance Method Summary collapse
-
#add_level(level_obj = nil, **level_attrs) ⇒ Object
Add a level to this definition.
-
#initialize(attrs = {}) ⇒ NumberingDefinition
constructor
A new instance of NumberingDefinition.
-
#level(index) ⇒ Object
Get a specific level by index.
Constructor Details
#initialize(attrs = {}) ⇒ NumberingDefinition
Returns a new instance of NumberingDefinition.
41 42 43 44 45 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 41 def initialize(attrs = {}) super @levels ||= [] validate_levels end |
Class Method Details
.bullet(abstract_num_id:, name: "Bullet", character: "\u2022") ⇒ Object
Create a bullet numbering definition
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 92 def self.bullet(abstract_num_id:, name: "Bullet", character: "\u2022") new(abstract_num_id: abstract_num_id, name: name).tap do |defn| 9.times do |i| level_char = case i % 3 when 0 then character when 1 then "\u25CB" # hollow circle else "\u25A0" # square end defn.add_level( ilvl: i, start: Uniword::Wordprocessingml::Start.new(val: 1), numFmt: Uniword::Wordprocessingml::NumFmt.new(val: "bullet"), lvlText: Uniword::Wordprocessingml::LvlText.new(val: level_char), lvlJc: Uniword::Wordprocessingml::LvlJc.new(val: "left"), ind: Uniword::Wordprocessingml::Ind.new( left: (720 * (i + 1)).to_s, hanging: "360", ), rPr: Uniword::Wordprocessingml::RunProperties.new( fonts: Properties::RunFonts.new(ascii: "Symbol", h_ansi: "Symbol", hint: "default"), ), ) end end end |
.decimal(abstract_num_id:, name: "Decimal") ⇒ Object
Create a simple decimal numbering definition
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 75 def self.decimal(abstract_num_id:, name: "Decimal") new(abstract_num_id: abstract_num_id, name: name).tap do |defn| 9.times do |i| defn.add_level( ilvl: i, start: Uniword::Wordprocessingml::Start.new(val: 1), numFmt: Uniword::Wordprocessingml::NumFmt.new(val: "decimal"), lvlJc: Uniword::Wordprocessingml::LvlJc.new(val: "left"), ind: Uniword::Wordprocessingml::Ind.new( left: (720 * (i + 1)).to_s, hanging: "360", ), ) end end end |
.letter(abstract_num_id:, name: "Letter", upper: true) ⇒ Object
Create a letter numbering definition
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 138 def self.letter(abstract_num_id:, name: "Letter", upper: true) format = upper ? "upperLetter" : "lowerLetter" new(abstract_num_id: abstract_num_id, name: name).tap do |defn| 9.times do |i| defn.add_level( ilvl: i, start: Uniword::Wordprocessingml::Start.new(val: 1), numFmt: Uniword::Wordprocessingml::NumFmt.new(val: format), lvlJc: Uniword::Wordprocessingml::LvlJc.new(val: "left"), ind: Uniword::Wordprocessingml::Ind.new( left: (720 * (i + 1)).to_s, hanging: "360", ), ) end end end |
.roman(abstract_num_id:, name: "Roman", upper: true) ⇒ Object
Create a roman numeral numbering definition
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 120 def self.roman(abstract_num_id:, name: "Roman", upper: true) format = upper ? "upperRoman" : "lowerRoman" new(abstract_num_id: abstract_num_id, name: name).tap do |defn| 9.times do |i| defn.add_level( ilvl: i, start: Uniword::Wordprocessingml::Start.new(val: 1), numFmt: Uniword::Wordprocessingml::NumFmt.new(val: format), lvlJc: Uniword::Wordprocessingml::LvlJc.new(val: "left"), ind: Uniword::Wordprocessingml::Ind.new( left: (720 * (i + 1)).to_s, hanging: "360", ), ) end end end |
Instance Method Details
#add_level(level_obj = nil, **level_attrs) ⇒ Object
Add a level to this definition
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 48 def add_level(level_obj = nil, **level_attrs) if levels.size >= MAX_LEVELS raise ArgumentError, "Cannot add more than #{MAX_LEVELS} levels" end # Auto-assign level index based on position in array level_index = levels.size if level_obj level = level_obj level.ilvl = level_index else level_attrs[:ilvl] = level_index unless level_attrs.key?(:ilvl) level = Level.new(**level_attrs) end levels << level level end |
#level(index) ⇒ Object
Get a specific level by index
70 71 72 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 70 def level(index) levels[index] end |