changer parenthèses (fonction de P. Ivaldi)
Le
Stéphane Dutailly

Bonjour à tous,
J'explique un peu mon titre. Il me semble avoir vu un jour en parcourant
des fichiers de Philippe, une commande permettant de changer $(blabla)$
en $left(blablaight)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes, et pas
moyen de retrouver le fichier) mais maintenant j'essaierais bien.
Est-ce que quelqu'un voit à quoi je fais référence? Philippe, si vous
passez par là
Merci à tous,
Stéphane
J'explique un peu mon titre. Il me semble avoir vu un jour en parcourant
des fichiers de Philippe, une commande permettant de changer $(blabla)$
en $left(blablaight)$ dans un fichier .tex.
Je ne sais pas si j'ai rêvé cela (je ne crois pas) mais en tous cas à
l'époque c'était du chinois pour moi (je n'ai pas pris de notes, et pas
moyen de retrouver le fichier) mais maintenant j'essaierais bien.
Est-ce que quelqu'un voit à quoi je fais référence? Philippe, si vous
passez par là
Merci à tous,
Stéphane
http://stackoverflow.com/questions/8538688/how-can-you-modify-two-matching- delimiters-at-once-with-emacs
Ãa à l'air de correspondre a ce que tu veux faire.
Cependant même si ça marche, je ne trouve pas que cela soit vraim ent
satisfaisant, j'ai ça dans mes TODO de faire quelque chose pour gà ©rer
les délimiteurs, simple caractère, chaine, regexp, ... Donc si ja mais
quelqu'un possède un bout de code comme ça, il me sauverait (ou p as) un
week end. :)
Un simple(?) query-replace-regexp peut le faire.
C-M-% $(([^$]*))$ <RET> $\left(1\right)$ <RET>
On peut toujours en faire une fonction interactive, ou plus simplement
une macro de clavier.
--
JJR.
Effectivement, après quelques tests ça a l'air de bien faire le boulot
:-) J'ai quelques questions et/ou approfondissement qui me viennent du
coup, mais il faut que j'y réfléchisse...
pourquoi?
j'ai ça dans mes TODO de faire quelque chose pour gérer
Un grand merci en tous cas.
Stéphane
Merci Jean-Jacques, je n'envisageais pas cela car pour l'instant je n'ai
jamais cherché à utiliser/comprendre les expressions régulières (cela me
paraît encore très obscur) et puis mon idée est aussi d'utiliser le code
pour l'adapter; mais du coup, je vais peut-être pouvoir aussi me lancer
sur les expressions régulières ;-)
Stéphane
Parce que gérer des délimiteurs comme (), left right, {} etc... c'est
la même chose. Donc faire une fonction qui gère uniquement le
remplacement de () par left right c'est dommage alors qu'il y aurait
moyen de gérer bien plus de choses.
Le problème des expressions régulières c'est justement quell es sont
régulières, donc pas moyen de gérer l'imbriquations. Mais po ur les cas
simples, je pense que c'est la meilleure méthode.
Daimrod wrote:
Pas sûr de comprendre la signification exacte de "régulière" . Mais l'on peut
très bien mettre des groupes dans des groupes, via les parenthèse s. Je n'ai
pas de "use case" précis sous la main, mais des choses du style
(abc|deb(.*)fin)
sont envisageables (je n'ai pas mis les escapes). Et l'on peut accéder Ã
l'expression mère ou à l'expression fille (ici, ce qui serait au milieu, entre
"deb" et "fin").
Sincèrment,
Seb
--
Sebastien Vauban
Le 03 janvier 2012, Stéphane Dutailly écrivit :
Oui :)
http://tinyurl.com/6uz8899
sélectionner la ligne:
(a + b * (c + d* (e + f))) - a * (c + d (e + f))
M-x pi-exp-paren-region <RET> produit:
Big(a + b * big(c + d* (e + f)big)Big) - a * big(c + d (e + f)big)
C'est un de mes premiers scripts en Elisp, ce n'est pas forcément un
exemple à suivre…
--
Philippe Ivaldi
http://www.piprime.fr/
Je fais référence à la notion de grammaire et d'expression r égulière
définie par la hiérarchie de Chomsky[1].
Les délimiteurs, comme les parenthèses, vont par pair, donc il fa ut les
manipuler ensemble. Mais une expression régulière ne permet pas d e gérer
des délimiteurs lorsqu'ils sont imbriqués.
(1 (2 3 4 (5 6) 7 8) 9 10)
----------------------^ Si mon curseur se trouve ici je veux manipuler
^------------------------^ ces parenthèses, pas les autres.
On « sent » bien que pour atteindre le bon délimiteur gauche il faut
mémoriser le nombre de délimiteur droit, et avoir le même no mbre de
délimiteur gauche, plus un, qui serra le délimiteur cherché. Bien
entendu, dans le cas où l'on rechercherait le délimiteur droit, on
inverserait les termes.
C'est cette notion de mémoire que ne permette pas les expressions ou
grammaire régulière. Pour cela, il faut utiliser un automate à pile.
[1]: https://secure.wikimedia.org/wikipedia/fr/wiki/Hiérarchie_de_Cho msky
Daimrod wrote:
Merci pour ce rappel de fondamentaux auxquels j'ai, sans doute, aussi à ©té
exposé dans le passé...
Sincèrement,
Seb
--
Sebastien Vauban