From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.bugs Subject: bug#51292: 27.2; Reversing strings with unicode combining characters Date: Tue, 19 Oct 2021 21:26:31 +0200 Message-ID: <87fsswbyu0.fsf@gnus.org> References: <2AC0A88D-4F2F-41A5-B945-8BB55260C0E8@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28669"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) Cc: 51292@debbugs.gnu.org To: Howard Melman Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Oct 19 21:27:33 2021 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mculp-0007GV-8m for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 19 Oct 2021 21:27:33 +0200 Original-Received: from localhost ([::1]:56808 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mcull-0006bd-KJ for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 19 Oct 2021 15:27:30 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:55248) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mculK-0006bO-KR for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 15:27:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:40499) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mculK-0001JK-Bv for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 15:27:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mculK-0006Ax-3T for bug-gnu-emacs@gnu.org; Tue, 19 Oct 2021 15:27:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 19 Oct 2021 19:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51292 X-GNU-PR-Package: emacs Original-Received: via spool by 51292-submit@debbugs.gnu.org id=B51292.163467160323714 (code B ref 51292); Tue, 19 Oct 2021 19:27:02 +0000 Original-Received: (at 51292) by debbugs.gnu.org; 19 Oct 2021 19:26:43 +0000 Original-Received: from localhost ([127.0.0.1]:52045 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mcul0-0006AQ-Pv for submit@debbugs.gnu.org; Tue, 19 Oct 2021 15:26:42 -0400 Original-Received: from quimby.gnus.org ([95.216.78.240]:38604) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mcukz-0006AC-0M for 51292@debbugs.gnu.org; Tue, 19 Oct 2021 15:26:41 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=xcD96/l08IXSr+QpXXVwsRCVItk6e98e+RT14zcvjRM=; b=DLKogdkERLj+oPim3II6RChMEz eZRcYrVulFTG7rayxyRJXsXbenS72U0iSHnB2jOLE+GXKuNujheve4jZUhdKSf9SkkWcyDCNditi1 021zcaOXJyi2ie2uClDIa3NJXvLcnU5UBxwyq7D0CPJK9LGbRrpuioXJNBtut46MjtKU=; Original-Received: from [84.212.220.105] (helo=elva) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mcukp-0000Kp-SJ; Tue, 19 Oct 2021 21:26:34 +0200 Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEXJtobs1Zp1aE// //9M4vXjAAAAAWJLR0QDEQxM8gAAAAd0SU1FB+UKExMZCX79zNQAAAGwSURBVCjPVdLNitswEADg kbHL1qc4aELJqV26JdVTJCGFRKdYSGLxqe1p8VPExoZlT9sS99BTHGKQ5ikrt2V/5qRPg2YEM5CY p9CAzzAvoeHpFvYa/r7hg5lwOkGyqUzx5iCIyEMia3O3sOE8D9gCFy4k7osRi5jGuIQM3Lma6EzU Sw+xPPwidhTUlyGT1jO66ct/oLom3Kb+Q0BK0ZwSmzYq8iAdU+QofcBQOu3xvZPkZKY8RD0uQFC7 NQHpZXK+Jwe3+aeADluFBO+q7wE/GNOGfb1KQoFy2HTGrq4Fhr8JF6PhOyUK2UPpY9R8okgWfegz 8M9GWZqrI8TNJSZjI6emHbCPTUwTm7qi7iA5V5oyPXO3J4T492Ap2Uyd6huI5oOk1q5d4TcAxYh9 FLAcUQZklepzgLItqeF7sEMOb0UnqOPTx9lNDrvrjqhlP4+c5fCtCEhwxvlVDkvZElUcYw4ZrMrm gQ5fcMMxgx02gi4tcs5WsLPjoKqEc4cg05MIAzxl1hlY0omcboWXXsOaaPZoG+HH0a/JK9CQnlED MMzx/67sX2wI6tfr8grsGfs/fFvGWKicQyIAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMTAtMTlU MTk6MjU6MDkrMDA6MDAVSSAhAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTEwLTE5VDE5OjI1OjA5 KzAwOjAwZBSYnQAAAABJRU5ErkJggg== X-Now-Playing: Flux of Pink Indians's _The Fucking Cunts Treat Us Like Pricks_: "Mickey on Tuneoil" In-Reply-To: <2AC0A88D-4F2F-41A5-B945-8BB55260C0E8@gmail.com> (Howard Melman's message of "Tue, 19 Oct 2021 15:16:27 -0400") X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:217602 Archived-At: Howard Melman writes: > Reversing a string fails to account for unicode combining characters > > (reverse "nai\u0308ve") > "ev=CC=88ian" > > Note the diaeresis is now on the v and not the i. s-reverse gets it righ= t: > > (s-reverse "nai\u0308ve") > "evi=CC=88an" So I wondered what s-reverse did, and indeed: (defun s-reverse (s) "Return the reverse of S." (declare (pure t) (side-effect-free t)) (save-match-data (if (multibyte-string-p s) (let ((input (string-to-list s)) output) (require 'ucs-normalize) (while input ;; Handle entire grapheme cluster as a single unit (let ((grapheme (list (pop input)))) (while (memql (car input) ucs-normalize-combining-chars) (push (pop input) grapheme)) (setq output (nconc (nreverse grapheme) output)))) (concat output)) (concat (nreverse (string-to-list s)))))) Emacs has string-reverse, obsolete since 25.1. Perhaps we should reintroduce it and use the definition from s? --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no