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
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 94 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"), pPr: Uniword::Wordprocessingml::ParagraphProperties.new( indentation: Uniword::Properties::Indentation.new( left: 720 * (i + 1), 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 90 91 |
# 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"), pPr: Uniword::Wordprocessingml::ParagraphProperties.new( indentation: Uniword::Properties::Indentation.new( left: 720 * (i + 1), hanging: 360, ), ), ) end end end |
.letter(abstract_num_id:, name: "Letter", upper: true) ⇒ Object
Create a letter numbering definition
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 144 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"), pPr: Uniword::Wordprocessingml::ParagraphProperties.new( indentation: Uniword::Properties::Indentation.new( left: 720 * (i + 1), hanging: 360, ), ), ) end end end |
.roman(abstract_num_id:, name: "Roman", upper: true) ⇒ Object
Create a roman numeral numbering definition
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/uniword/wordprocessingml/numbering_definition.rb', line 124 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"), pPr: Uniword::Wordprocessingml::ParagraphProperties.new( indentation: Uniword::Properties::Indentation.new( left: 720 * (i + 1), 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 |