Class: IsoDoc::XrefGen::Counter

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

Instance Method Summary collapse

Constructor Details

#initializeCounter

Returns a new instance of Counter.



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

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

Instance Method Details

#increment(node) ⇒ Object



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

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



79
80
81
82
83
84
85
86
# File 'lib/isodoc/xref/xref_counter.rb', line 79

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



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

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


75
76
77
# File 'lib/isodoc/xref/xref_counter.rb', line 75

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

#sequence_increment(node) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/isodoc/xref/xref_counter.rb', line 32

def sequence_increment(node)
  if node["number"]
    @base = ""
    @number_override = node["number"]
    /^(?<b>.*?)(?<n>\d+)$/ =~ node["number"]
    unless n.nil? || n.empty?
      @num = n.to_i
      @base = b
    end
  else
    @num += 1
  end
end

#subsequence_increment(node) ⇒ Object



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

def subsequence_increment(node)
  if node["number"]
    @base = ""
    @letter_override = node["number"]
    /^(?<b>.*?)(?<n>\d*)(?<a>[a-z]+)$/ =~ node["number"]
    unless a.empty?
      @letter = a
      @base = b
      @number_override = @num = n.to_i unless n.empty?
    end
  else
    @letter = (@letter.ord + 1).chr.to_s
  end
end