| Class | Text::Format::Roman |
| In: |
lib/text/format/roman.rb
|
| Parent: | Object |
Provides a numbering object that will produce numbers. Accepts three parameters for numbering that will control how the numbers are presented when given as #[](index).
| :offset: | The number to add to the index in order to produce the proper index. This is because tag_text indexes from 0, not 1. This defaults to 1. Any value less than 1 will be set to 1 (because Romans did not know about zero or negative numbers). |
| :lower: | Renders the Roman numerals in lowercase if true. Defaults to false. |
| :postfix: | The value that will be appended to the number presented by #[]. Defaults to nil. |
| :prefix: | The value that will be prepended to the number presented by #[]. Defaults to nil. |
r1 = Text::Format::Roman.new(:postfix => ".") puts r1[0] # => "I." puts r1[8] # => "IX. r2 = Text::Format::Roman.new(:prefix => "M.") puts r2[0] # => "M.I" puts r2[8] # => "M.IX" r3 = Text::Format::Roman.new(:offset => 3) puts r3[0] # => "III" puts r3[9] # => "XII" r4 = Text::Format::Roman.new(:offset => 0) puts r4[0] # => "I" puts r4[8] # => "IX" r5 = Text::Format::Roman.new(:lower => true) puts r5[0] # => "i" puts r5[8] # => "ix"
# File lib/text/format/roman.rb, line 97
97: def initialize(options = {})
98: @offset = options[:offset].to_i || 1
99: @lower = options[:lower] || false
100: @postfix = options[:postfix] || nil
101: @prefix = options[:prefix] || nil
102:
103: @offset = 1 if @offset < 1
104: end
# File lib/text/format/roman.rb, line 37
37: def [](index)
38: roman = ""
39: index += @offset
40:
41: # Do 1,000s
42: roman << "M" * (index / 1000)
43: index %= 1000
44:
45: # Do 900s
46: roman << "CM" * (index / 900)
47: index %= 900
48:
49: # Do 500s
50: roman << "D" * (index / 500)
51: index %= 500
52:
53: # Do 400s
54: roman << "CD" * (index / 400)
55: index %= 400
56:
57: # Do 100s
58: roman << "C" * (index / 100)
59: index %= 100
60:
61: # Do 90s
62: roman << "XC" * (index / 90)
63: index %= 90
64:
65: # Do 50s
66: roman << "L" * (index / 50)
67: index %= 50
68:
69: # Do 40s
70: roman << "XL" * (index / 40)
71: index %= 40
72:
73: # Do 10s
74: roman << "X" * (index / 10)
75: index %= 10
76:
77: # Do 9s
78: roman << "IX" * (index / 9)
79: index %= 9
80:
81: # Do 5s
82: roman << "V" * (index / 5)
83: index %= 5
84:
85: # Do 4s
86: roman << "IV" * (index / 4)
87: index %= 4
88:
89: # Do 1s
90: roman << "I" * index
91:
92: roman.downcase! if @lower
93:
94: "#{@prefix}#{roman}#{@postfix}"
95: end