From 22ae39a8c3d25f512605806646e166d6a87e0eb2 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Wed, 3 Aug 2011 11:59:19 -0500 Subject: [PATCH] Faster 1.8 codepoint encoder --- lib/execjs/external_runtime.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/execjs/external_runtime.rb b/lib/execjs/external_runtime.rb index bf58b0a..f3257ce 100644 --- a/lib/execjs/external_runtime.rb +++ b/lib/execjs/external_runtime.rb @@ -74,9 +74,11 @@ def encode_unicode_codepoints(str) end else def encode_unicode_codepoints(str) - str.unpack("U*").map { |b| - b >= 128 ? "\\u%04x" % b : b.chr - }.join("") + str.gsub(/([\xC0-\xDF][\x80-\xBF]| + [\xE0-\xEF][\x80-\xBF]{2}| + [\xF0-\xF7][\x80-\xBF]{3})+/nx) do |ch| + "\\u%04x" % ch.unpack("U*") + end end end end