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 def initialize(options = {}) @offset = options[:offset].to_i || 1 @lower = options[:lower] || false @postfix = options[:postfix] || nil @prefix = options[:prefix] || nil @offset = 1 if @offset < 1 end
# File lib/text/format/roman.rb, line 37 def [](index) roman = "" index += @offset # Do 1,000s roman << "M" * (index / 1000) index = 1000 # Do 900s roman << "CM" * (index / 900) index = 900 # Do 500s roman << "D" * (index / 500) index = 500 # Do 400s roman << "CD" * (index / 400) index = 400 # Do 100s roman << "C" * (index / 100) index = 100 # Do 90s roman << "XC" * (index / 90) index = 90 # Do 50s roman << "L" * (index / 50) index = 50 # Do 40s roman << "XL" * (index / 40) index = 40 # Do 10s roman << "X" * (index / 10) index = 10 # Do 9s roman << "IX" * (index / 9) index = 9 # Do 5s roman << "V" * (index / 5) index = 5 # Do 4s roman << "IV" * (index / 4) index = 4 # Do 1s roman << "I" * index roman.downcase! if @lower "#{@prefix}#{roman}#{@postfix}" end