Class: RedQuilt::FootnoteRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/red_quilt/footnote_registry.rb,
sig/red_quilt.rbs

Overview

Shared footnote state (created per parse when footnotes: true).

Instance Method Summary collapse

Constructor Details

#initializeFootnoteRegistry

Returns a new instance of FootnoteRegistry.



14
15
16
17
18
19
# File 'lib/red_quilt/footnote_registry.rb', line 14

def initialize
  @definitions = {}            # normalized label => FOOTNOTE_DEFINITION node id
  @numbers = {}                # normalized label => footnote number
  @occurrences = Hash.new(0)   # normalized label => reference count
  @order = []                  # normalized labels in first-reference order
end

Instance Method Details

#any_referenced?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/red_quilt/footnote_registry.rb', line 64

def any_referenced?
  !@order.empty?
end

#define(label, node_id) ⇒ Boolean

Records a definition node for a label during block parsing. Returns false when the label is already defined (duplicate), true otherwise.

Parameters:

  • label (String)
  • node_id (Integer)

Returns:

  • (Boolean)


23
24
25
26
27
28
# File 'lib/red_quilt/footnote_registry.rb', line 23

def define(label, node_id)
  return false if @definitions.key?(label)

  @definitions[label] = node_id
  true
end

#defined?(label) ⇒ Boolean

Parameters:

  • label (String)

Returns:

  • (Boolean)


30
31
32
# File 'lib/red_quilt/footnote_registry.rb', line 30

def defined?(label)
  @definitions.key?(label)
end

#definition_node(label) ⇒ Integer?

Parameters:

  • label (String)

Returns:

  • (Integer, nil)


34
35
36
# File 'lib/red_quilt/footnote_registry.rb', line 34

def definition_node(label)
  @definitions[label]
end

#number(label) ⇒ Integer?

Parameters:

  • label (String)

Returns:

  • (Integer, nil)


51
52
53
# File 'lib/red_quilt/footnote_registry.rb', line 51

def number(label)
  @numbers[label]
end

#occurrences(label) ⇒ Integer

Parameters:

  • label (String)

Returns:

  • (Integer)


55
56
57
# File 'lib/red_quilt/footnote_registry.rb', line 55

def occurrences(label)
  @occurrences[label]
end

#reference(label) ⇒ [ Integer, Integer ]?

Records an inline reference to a label. Returns [number, occurrence] (assigning the number on first reference, in encounter order), or nil when the label has no definition.

Parameters:

  • label (String)

Returns:

  • ([ Integer, Integer ], nil)


41
42
43
44
45
46
47
48
49
# File 'lib/red_quilt/footnote_registry.rb', line 41

def reference(label)
  return nil unless @definitions.key?(label)

  unless @numbers.key?(label)
    @order << label
    @numbers[label] = @order.length
  end
  [@numbers[label], @occurrences[label] += 1]
end

#referenced_labelsArray[String]

Referenced labels in first-reference order (the render order).

Returns:

  • (Array[String])


60
61
62
# File 'lib/red_quilt/footnote_registry.rb', line 60

def referenced_labels
  @order
end