lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Transposition avec nom de notes perso


From: Olivier Miakinen
Subject: Re: Transposition avec nom de notes perso
Date: Mon, 1 Jul 2019 01:21:50 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.1

Le 30/06/2019 22:41, Éric a écrit :
> Merci bcp, je vais étudier tout ça et voir la pratique.
> 
> De mon côté, j'ai me suis décidé à commencer à travailler pour pouvoir
> utiliser l'outil rechercher/remplacer directement dans l'éditeur de
> Frescobaldi. 
> Plutôt en Regex Unicode Python car il me semble que c'est ce qui convient
> dans cet outll.

Sauf erreur, la syntaxe est donc celle décrite ici :
<https://docs.python.org/3/library/re.html#regular-expression-syntax>.

> [...]
> 
> Vu mon niveau (c-à-d absence de) je n'ai pour l'instant  fait le
> remplacement que d'un nom de note à la fois.
> Ça donne, pour "traduire" de "latin" à "nederlands"  un do# ("de" —> "cis")
> :
> 
> - Rechercher :  \bde\b|(de)([0-9]+)

Donc rechercher
- soit « de » comme un mot tout seul (premier cas)
- soit « de » suivi d'un ou plusieurs chiffres (deuxième cas)

> - Remplacer :  cis\g<2>

Et tu remplaces par « cis » suivi de la deuxième chaîne capturée, soit
rien dans le premier cas, et la suite de chiffres dans le second.

Je me permets quelques remarques car je suis assez spécialiste des
regexp.

1) Dans le second cas, il est inutile de capturer « de » en le mettant
   entre parenthèses, puisque tu ne recopies que la deuxième capture
   (les chiffres). Du coup on recopiera ce qui deviendra la première
   capture, avec \g<1> au lieu de \g<2>, que l'on peut même simplifier
   en \1 puisqu'il n'y a rien derrière. Ce qui donne :

   - Rechercher :  \bde\b|de([0-9]+)
   - Remplacer :  cis\1

2) À partir du moment où tu détectes un chiffre, ce n'est pas la peine
   de chercher s'il y en a d'autres après, on peut donc remplacer
   [0-9]+ par [0-9], et même par \d :

   - Rechercher :  \bde\b|de(\d)
   - Remplacer :  cis\1

3) En fait, plutôt que de rechercher *et capturer* un chiffre puis le
   recopier avec \1, on peut juste regarder s'il y en a un mais ne pas
   le consommer (c'est une assertion, comme les \b), auquel cas on n'a
   pas besoin de \1 dans le remplacement :

   - Rechercher :  \bde\b|de(?=\d)
   - Remplacer :  cis

Sauf erreur de ma part, ce à quoi je suis arrivé doit faire *exactement*
la même chose que ce que tu proposais. Mais il y a quelques problèmes
avec ça.

4) Par exemple, je pense que le \b après le mot ne fonctionnera pas si
   ton do# est suivi d'un underscore, par exemple « de_\markup{...} ».
   Il faudrait alors le tester en plus des chiffres, et du coup
   l'écriture redevient plus simple avec [0-9] en écrivant [0-9_] :

   - Rechercher :  \bde\b|de(?=[0-9_])
   - Remplacer :  cis

5) Autre problème, dans le second cas tu ne testes plus de \b *avant*
   le mot. Il faudrait le rajouter, et du coup on peut factoriser
   l'écriture :

   - Rechercher :  \bde(\b|(?=[0-9_]))
   - Remplacer :  cis

> Ça marche bien sur ce fichier test : modifications uniquement sur
> les notes en conservant le rythme et les octaves, sans toucher au reste :
> 
> de
> de (avec 1 espace avant retour chariot)
> de,
> de'
> de2
> de32
> deo
> do
> d
> d'
> deux
> odeur
> override

Je suppose que les six premiers ont été remplacés, mais aucun des sept
suivants (ce qui est bien).

En revanche ça devrait moins bien fonctionner avec :
- de_\pp       (non remplacé à mon avis, à tort)
- override2    (remplacé à mon avis, à tort)
... et je crois que ma proposition corrige les deux problèmes

> Reste à gérer plusieurs notes à la fois, en espérant que la numération des
> groupes capturant et leur backreferences ( \g<2> dans l'exemple), marchent
> aussi avec remplacements alternatives |  

Avec ma proposition, il n'y a plus de groupes capturants et donc plus de
backreference. Seulement ça ne résoud pas le problème, qui est que /de/
doit devenir /cis/ mais qu'en même temps /di/ doit devenir /ces/, etc.

> Mais là j'ai le cerveau qui a suffisamment chauffé pour aujourd'hui…

;-)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]