    # File temp/functions.rb, line 180
        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