substring (REXML::Functions)

    # File rexml/functions.rb, line 153
      def Functions::substring( string, start, length=0 )
    			ruby_string = string(string)
    			ruby_length = if length.nil?
    											string.length
    										else
    											number(length)
    										end
    			ruby_start = number(start)

    			# Handle the special cases
    			return '' if (
    				ruby_length.nan? or
    				ruby_start.nan? or
    				ruby_start.infinite?
    			)

    			infinite_length = ruby_length.infinite? == 1
    			ruby_length = ruby_string.length if infinite_length

    			# Now, get the bounds.  The XPath bounds are 1..length; the ruby bounds
    			# are 0..length.  Therefore, we have to offset the bounds by one.
    			ruby_start = ruby_start.round - 1
    			ruby_length = ruby_length.round

    			if ruby_start < 0
    			 ruby_length += ruby_start unless infinite_length
    			 ruby_start = 0
    			end
    			return '' if ruby_length <= 0
    			ruby_string[ruby_start,ruby_length]
    		end