Subject: Re: bug#67536: 29.1; Calc mode's math-read-preprocess-string conses unnecessarily

From: Eli Zaretskii <[email-masked]>
Date: Fri, 01 Dec 2023 20:12:46 +0200

> From: Raffael Stocker <[email-masked]>
> Cc: [email-masked]
> Date: Fri, 01 Dec 2023 18:34:10 +0100
> 
> I cleaned it up a bit and ran a few tests against the original function
> using an empty string, a string without anything to replace and a string
> requiring many replacements.  It seems to behave just as the original.

Thanks.

> I use cl-flet and (eval-when-compile (require 'cl-lib)).  I hope that is
> ok.

I'd prefer a simple internal function, or a lambda.

> +  (with-temp-buffer
> +    (cl-flet ((replace-all (regexp replacement)
> +                (goto-char 0)
> +                (while (re-search-forward regexp nil t)
> +                  (replace-match replacement))))
> +      (insert str)
> +      (replace-all (concat "[" math-read-superscripts "]+") "^(\\&)")
> +      (replace-all (concat "[" math-read-subscripts "]+") "_(\\&)")
> +      (dolist (rep-elem math-read-replacement-list)
> +        (replace-all (car rep-elem) (cadr rep-elem)))
> +      (buffer-string))))

I think buffer-substring-no-properties would be better than
buffer-string, as we don't need to copy any text properties, right?