Class: IsoDoc::XrefGen::Counter

Inherits:
Object
  • Object
show all
Defined in:
lib/isodoc/xref/xref_counter.rb

Instance Method Summary collapse

Constructor Details

#initializeCounter



5
6
7
8
9
10
11
# File 'lib/isodoc/xref/xref_counter.rb', line 5

def initialize
  @num = 0
  @letter = ""
  @subseq = ""
  @letter_override = nil
  @number_override = nil
end

Instance Method Details

#increment(node) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/isodoc/xref/xref_counter.rb', line 47

def increment(node)
  return self if node["unnumbered"]
  @letter_override = nil
  @number_override = nil
  if node["subsequence"] != @subseq
    new_subseq_increment(node)
  elsif @letter.empty?
    sequence_increment(node)
  else
    subsequence_increment(node)
  end
  self
end

#listlabel(depth) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/isodoc/xref/xref_counter.rb', line 65

def listlabel(depth)
  return @num.to_s if [2, 7].include? depth
  return (96 + @num).chr.to_s if [1, 6].include? depth
  return (64 + @num).chr.to_s if [4, 9].include? depth
  return RomanNumerals.to_roman(@num).downcase if [3, 8].include? depth
  return RomanNumerals.to_roman(@num).upcase if [5, 10].include? depth
  return @num.to_s
end

#new_subseq_increment(node) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/isodoc/xref/xref_counter.rb', line 13

def new_subseq_increment(node)
  @subseq = node["subsequence"]
  @num += 1
  @letter = node["subsequence"] ? "a" : ""
  if node["number"]
    /^(?<n>\d*)(?<a>[a-z]*)$/ =~ node["number"]
    if n || a
      @letter_override = @letter = a if a
      @number_override = @num = n.to_i if n
    else
      @letter_override = node["number"]
      @letter = @letter_override if /^[a-z]$/.match(@letter_override)
    end
  end
end


61
62
63
# File 'lib/isodoc/xref/xref_counter.rb', line 61

def print
  "#{@number_override || @num}#{@letter_override || @letter}"
end

#sequence_increment(node) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/isodoc/xref/xref_counter.rb', line 29

def sequence_increment(node)
  if node["number"]
    @number_override = node["number"]
    @num = @number_override.to_i if /^\d+$/.match(@number_override)
  else
    @num += 1
  end
end

#subsequence_increment(node) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/isodoc/xref/xref_counter.rb', line 38

def subsequence_increment(node)
  if node["number"]
    @letter_override = node["number"]
    @letter = @letter_override if /^[a-z]$/.match(@letter_override)
  else
    @letter = (@letter.ord + 1).chr.to_s
  end
end