substring (REXML::Functions)

    # File src/rexml/functions.rb, line 178
                    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