# File rexml/functions.rb, line 165
  def Functions::substring( string, start, length=nil )
			ruby_string = string(string)
			ruby_length = if length.nil? 
											ruby_string.length.to_f
										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