From mboxrd@z Thu Jan 1 00:00:00 1970
Path: news.gmane.org!.POSTED!not-for-mail
From: Philipp Stephani
Newsgroups: gmane.emacs.devel
Subject: [PATCH] Allow inserting non-BMP characters
Date: Mon, 25 Dec 2017 22:01:15 +0100
Message-ID: <20171225210115.13789-1-phst@google.com>
References:
NNTP-Posting-Host: blaine.gmane.org
X-Trace: blaine.gmane.org 1514235618 22064 195.159.176.226 (25 Dec 2017 21:00:18 GMT)
X-Complaints-To: usenet@blaine.gmane.org
NNTP-Posting-Date: Mon, 25 Dec 2017 21:00:18 +0000 (UTC)
Cc: Philipp Stephani
To: emacs-devel@gnu.org
Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Dec 25 22:00:14 2017
Return-path:
Envelope-to: ged-emacs-devel@m.gmane.org
Original-Received: from lists.gnu.org ([208.118.235.17])
by blaine.gmane.org with esmtp (Exim 4.84_2)
(envelope-from )
id 1eTZr0-00055Y-Qr
for ged-emacs-devel@m.gmane.org; Mon, 25 Dec 2017 22:00:10 +0100
Original-Received: from localhost ([::1]:35514 helo=lists.gnu.org)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from )
id 1eTZsx-0004Yk-P7
for ged-emacs-devel@m.gmane.org; Mon, 25 Dec 2017 16:02:11 -0500
Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59117)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1eTZsF-0004YL-BO
for emacs-devel@gnu.org; Mon, 25 Dec 2017 16:01:28 -0500
Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1eTZsB-0007dn-DR
for emacs-devel@gnu.org; Mon, 25 Dec 2017 16:01:27 -0500
Original-Received: from mail-wr0-x242.google.com ([2a00:1450:400c:c0c::242]:45969)
by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16)
(Exim 4.71) (envelope-from )
id 1eTZsB-0007c5-6X
for emacs-devel@gnu.org; Mon, 25 Dec 2017 16:01:23 -0500
Original-Received: by mail-wr0-x242.google.com with SMTP id o15so1229243wrf.12
for ; Mon, 25 Dec 2017 13:01:22 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
h=from:to:cc:subject:date:message-id:in-reply-to:references;
bh=QfjnDS6ESpVsenMHUMLw/5+EV/ZsJfQ5iXZBB+elnHs=;
b=DIb2HORGjWg/Tk9/EWQRVtw0+uRaHRlaHS2gRh76wKxFJcbgvlgyGhg8TNth3zmQfV
9SP/a6+cC8li+0EucGpWsGDOEwO4eZ7ehO85WLAEQyEzvXHslizpYluqZJ9N13ixRJnN
ljRLHI73lSmlwfHiHfPsm8w3oO8skEfmTBzzDrdSt58Zs1vBxfMTx6DxikUM9LROiD1U
2dEgew7+Igt0MqqtnZYXexwv5OH/4xCahqgOiTh6dbZA6xCngA4nNPdImJV04oG805Tu
33spl3FbVNHVjKqHPZU7ok3UUhIrvWLAE/J8jmFG3EBmVGBNiH+Oes++6Z/6/NZxGgG2
MV/A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=1e100.net; s=20161025;
h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
:references;
bh=QfjnDS6ESpVsenMHUMLw/5+EV/ZsJfQ5iXZBB+elnHs=;
b=lxvlWx8syJvgur7oW50GY6Ua9RFkOVjK5EIYPSBrXfGrAWMOEU/OC4vBiai/Hh2TzC
Oi5Mnahbn0tRJ0ReyCNkFAfXxuJXqpdNW0lYqQCvXbF0/p3uK5d2eVw4cuSKjYeT8RSi
ROAbtrt/P7N9heSUDy2vsJk3Sh8aCzqxUz2nD1G/pZgC38SbtbllJgiKqQNcySXz3sBh
PETkoRb2btmBikowTxdabnthZ38bclWiWcO+/GhjhgxXRjJ+TgkVIlXJUfvIVT3FrMS1
2t3VLIj/ehtA/E2cnmV2hJGdWmkmslfK4mo6nZpl2UTea7C9vY0x/4MzND7jCpPA+j2G
DC+A==
X-Gm-Message-State: AKGB3mJXEDqwELYrhPafJ5mZ3pZFk6wcTjzUV6NE8lA1j7VoSlvsew2R
kNud6fv/b1L2TIZ3xsb1V6Hhz2zh
X-Google-Smtp-Source: ACJfBovV1J1dHx6IHuhltBqDeqtVoHRM2UdM0v02YxVBReui4kyUJLow+GQqbDSDrb1P1jBMY+9VOw==
X-Received: by 10.223.177.143 with SMTP id q15mr4602122wra.42.1514235681661;
Mon, 25 Dec 2017 13:01:21 -0800 (PST)
Original-Received: from p.fritz.box (p5B13F97F.dip0.t-ipconnect.de. [91.19.249.127])
by smtp.gmail.com with ESMTPSA id
s45sm30929238wrc.89.2017.12.25.13.01.20
(version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);
Mon, 25 Dec 2017 13:01:21 -0800 (PST)
X-Google-Original-From: Philipp Stephani
X-Mailer: git-send-email 2.15.1
In-Reply-To:
X-detected-operating-system: by eggs.gnu.org: Genre and OS details not
recognized.
X-Received-From: 2a00:1450:400c:c0c::242
X-BeenThere: emacs-devel@gnu.org
X-Mailman-Version: 2.1.21
Precedence: list
List-Id: "Emacs development discussions."
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org
Original-Sender: "Emacs-devel"
Xref: news.gmane.org gmane.emacs.devel:221409
Archived-At:
* src/character.h (char_low_surrogate_p, char_high_surrogate_p)
(surrogates_to_codepoint): New functions.
* src/nsterm.m (insertText:): Properly handle surrogate pairs.
---
src/character.h | 26 ++++++++++++++++++++++++++
src/nsterm.m | 27 ++++++++++++++++++++-------
2 files changed, 46 insertions(+), 7 deletions(-)
diff --git a/src/character.h b/src/character.h
index c716885d46..8fa79c6bd9 100644
--- a/src/character.h
+++ b/src/character.h
@@ -614,6 +614,32 @@ char_surrogate_p (int c)
return 0xD800 <= c && c <= 0xDFFF;
}
+/* Return true if C is a low surrogate. */
+
+INLINE bool
+char_low_surrogate_p (int c)
+{
+ return 0xDC00 <= c && c <= 0xDFFF;
+}
+
+/* Return true if C is a high surrogate. */
+
+INLINE bool
+char_high_surrogate_p (int c)
+{
+ return 0xD800 <= c && c <= 0xDBFF;
+}
+
+/* Return the Unicode code point for the given UTF-16 surrogates. */
+
+INLINE int
+surrogates_to_codepoint (int low, int high)
+{
+ eassert (char_low_surrogate_p (low));
+ eassert (char_high_surrogate_p (high));
+ return 0x10000 + (low - 0xDC00) + ((high - 0xD800) * 0x400);
+}
+
/* Data type for Unicode general category.
The order of members must be in sync with the 8th element of the
diff --git a/src/nsterm.m b/src/nsterm.m
index 07ac8f978f..da8d4dce6b 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -6283,14 +6283,13 @@ flag set (this is probably a bug in the OS).
by doCommandBySelector: deleteBackward: */
- (void)insertText: (id)aString
{
- int code;
- int len = [(NSString *)aString length];
- int i;
+ NSString *s = aString;
+ NSUInteger len = [s length];
NSTRACE ("[EmacsView insertText:]");
if (NS_KEYLOG)
- NSLog (@"insertText '%@'\tlen = %d", aString, len);
+ NSLog (@"insertText '%@'\tlen = %lu", aString, (unsigned long) len);
processingCompose = NO;
if (!emacs_event)
@@ -6301,9 +6300,22 @@ - (void)insertText: (id)aString
[self deleteWorkingText];
/* now insert the string as keystrokes */
- for (i =0; icode = code;
EV_TRAILER ((id)nil);
}
+ SAFE_FREE ();
}
--
2.15.1