# File src/rexml/functions.rb, line 220
                def Functions::translate( string, tr1, tr2 )
                        from = string(tr1)
                        to = string(tr2)

                        # the map is our translation table.
                        #
                        # if a character occurs more than once in the
                        # from string then we ignore the second &
                        # subsequent mappings
                        #
                        # if a charactcer maps to nil then we delete it
                        # in the output.  This happens if the from
                        # string is longer than the to string
                        #
                        # there's nothing about - or ^ being special in
                        # http://www.w3.org/TR/xpath#function-translate
                        # so we don't build ranges or negated classes

                        map = Hash.new
                        0.upto(from.length - 1) { |pos|
                                from_char = from[pos]
                                unless map.has_key? from_char
                                        map[from_char] = 
                                        if pos < to.length
                                                to[pos]
                                        else
                                                nil
                                        end
                                end
                        }

                        string(string).unpack('U*').collect { |c|
                                if map.has_key? c then map[c] else c end
                        }.compact.pack('U*')
                end