translate (REXML::Functions)

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