From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Pascal J. Bourguignon" Newsgroups: gmane.emacs.help Subject: Re: A variant of match-end, but after replacement? Date: Mon, 20 Jul 2015 02:33:13 +0200 Organization: Informatimago Message-ID: <87zj2r3bxy.fsf@kuiper.lan.informatimago.com> References: <87h9p04ain.fsf@kuiper.lan.informatimago.com> <87d1zo49e6.fsf@kuiper.lan.informatimago.com> <878uac463w.fsf@kuiper.lan.informatimago.com> <874mkz4vii.fsf@kuiper.lan.informatimago.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1437352527 25616 80.91.229.3 (20 Jul 2015 00:35:27 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 20 Jul 2015 00:35:27 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Mon Jul 20 02:35:23 2015 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1ZGz3C-0007oX-K6 for geh-help-gnu-emacs@m.gmane.org; Mon, 20 Jul 2015 02:35:22 +0200 Original-Received: from localhost ([::1]:53245 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZGz3B-0005GE-V7 for geh-help-gnu-emacs@m.gmane.org; Sun, 19 Jul 2015 20:35:21 -0400 Original-Path: usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 67 Original-X-Trace: individual.net Ab9un1C91zNXHlX2cvFK5Acj4qA2DqiCbmrSaX+7PgKWN+k8XC Cancel-Lock: sha1:YmY0YTU0MGJiZjAxM2JjNjA3NmUxNWM0ZDRkNDExNDhkMDU0MmRhOQ== sha1:Xpn5rb7M7D7N4FzPU7MVkJPYzds= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) Original-Xref: usenet.stanford.edu gnu.emacs.help:213578 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:105864 Archived-At: Marcin Borkowski writes: >> Not very much: >> >> (let ((end (match-end 1)) >> (new-string (replace-match new-text t t string 1))) >> (do-something-from new-string >> (+ end (- (length new-string) (length string))))) > > I give up. It seems that a PhD in math is not enough to deal with > string-length arithmetic;-). Shame on me! (OTOH, mails from you often > teach me that when I have the impression that I'm smart, it's usually > only an impression.) Sorry, I was about to write out the equation, but if it's necessary, I'll do. (length new-string) -------------------------------------------------------- (length prefix) (length new) (length suffix) ---------------- ---------------------- ---------------- pppppppppppppppp nnnnnnnnnnnnnnnnnnnnnn ssssssssssssssss ^ | new-end (length old-string) -------------------------------------------------- (length prefix) (length old) (length suffix) ---------------- ---------------- ---------------- pppppppppppppppp oooooooooooooooo ssssssssssssssss ^ | (match-end) So, we have: (= (length suffix) (- (length new-string) new-end)) (= (length suffix) (- (length old-string) (match-end))) Or, in math: s = ns-ne s = os-me Therefore: 0 = (ns-ne) - (os-me) <=> 0 = ns - ne - os + me <=> ne = me + (ns - os) <=> (= new-end (+ (match-end) (- (length new-string) (length old-string)))) Hence: (let ((end (match-end 1)) (new-string (replace-match new-text t t old-string 1))) (do-something-from new-string (+ end (- (length new-string) (length old-string))))) -- __Pascal Bourguignon__ http://www.informatimago.com/ “The factory of the future will have only two employees, a man and a dog. The man will be there to feed the dog. The dog will be there to keep the man from touching the equipment.” -- Carl Bass CEO Autodesk