Laurent PETIT writes:
Hello,
I've modified the code as follows (also not yet corrected the tilde bug) : What you can see is that insted of restoring the full initial readtable, I only restore the #" macro character previous function (the one I have overriden with (start). This way, I do not reset other -possible- personalized macro character functions. I also provide a (stop) method which restores the previous #" macro character.
I also twiked the main function in order to let the initial string unchanged in case no ${} is used (usefull for a lot of macros that only accept raw strings, such as defpackage, ...).
Please let me know if you think this would not work in a case I haven't seen.
Well, what hasn't been explicitely mentionned, is that any usage of a string where it's _not_ evaluated (which may be a lot, including the macros), wouldn't work anymore.
What if I want to name my package: "PACK${1}" ?
Macros can expand strings given as argument as (quote "string") instead of merely "string".
Compare the two results:
(let ((x 1)) (values (quote "STR ${x}") "STR ${x}"))
That's why cl-interpolate doesn't use the standard macro character, because we want to be able to write both true _literal_ string and interpolated strings.