Class: Coradoc::Docx::Transform::NumberingResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/docx/transform/numbering_resolver.rb

Overview

Resolves OOXML numbering definitions to list style information.

OOXML stores list formatting in numbering definitions (abstractNum). Each numPr reference (numId + ilvl) points to a specific numbering format (bullet, decimal, lowerLetter, etc.).

The resolver walks Uniword’s NumberingConfiguration to build a map of numId → { ordered, marker_type, format }.

Constant Summary collapse

ORDERED_FORMATS =
%w[decimal lowerLetter upperLetter lowerRoman upperRoman
russianLower russianUpper hebrew1 hebrew2 thaiLetters
japaneseDigitalTenji japaneseKorean chineseCounting].freeze

Instance Method Summary collapse

Constructor Details

#initialize(numbering_configuration) ⇒ NumberingResolver

Returns a new instance of NumberingResolver.

Parameters:

  • numbering_configuration (Object, nil)

    Uniword numbering config



20
21
22
23
# File 'lib/coradoc/docx/transform/numbering_resolver.rb', line 20

def initialize(numbering_configuration)
  @config = numbering_configuration
  @num_map = build_num_map(numbering_configuration)
end

Instance Method Details

#list_style(num_id) ⇒ Symbol

Get the list style for a numId

Parameters:

  • num_id (Integer, String, nil)

Returns:

  • (Symbol)

    :ordered, :unordered



42
43
44
# File 'lib/coradoc/docx/transform/numbering_resolver.rb', line 42

def list_style(num_id)
  ordered?(num_id) ? :ordered : :unordered
end

#marker_type(num_id) ⇒ String

Get marker type string for a numId

Parameters:

  • num_id (Integer, String, nil)

Returns:

  • (String)

    “numbered”, “asterisk”, “lower_alpha”, etc.



50
51
52
53
54
55
56
57
# File 'lib/coradoc/docx/transform/numbering_resolver.rb', line 50

def marker_type(num_id)
  return 'asterisk' unless num_id

  info = @num_map[num_id.to_i]
  return 'asterisk' unless info

  info[:marker_type]
end

#ordered?(num_id) ⇒ Boolean

Determine if a numId represents an ordered list

Parameters:

  • num_id (Integer, String, nil)

    numbering definition ID

Returns:

  • (Boolean)

    true if ordered, false if unordered



29
30
31
32
33
34
35
36
# File 'lib/coradoc/docx/transform/numbering_resolver.rb', line 29

def ordered?(num_id)
  return false unless num_id

  info = @num_map[num_id.to_i]
  return false unless info

  info[:ordered]
end