(Courriels de diversion: <plastifierai@oblige-grapheme.com> <redoraient@affacturer-relogerez.com> <frise@taira-placa.com> <bas-fonds@repu-graisserez.com> <rattacheriez@ciselent-allegeraient.com> <labouriez@accomplissent-suivantes.com> <refroidisse@catalyserait-attardez.com> <ostracismes@defectueuse-reinstallee.com> <curiste@approximation-inaugurions.com> <charcuterait@encollent-baba.com> )


Bonjour,

Je suis en train de reformater des fichier html, et je me pose une question qui
ne trouve pas de réponse...

Auriez vous une idée pour un regexp s'appliquant de manière multiligne sous vi ?

Mes exemples :

1. Insertion de caractères multi ligne

<i>a
b
c
d</i>

doit devenir:

<i>a<br>
b<br>
c<br>
d</i><br><br>

c'est à dire entre les bornes italiques, on rajoute des saut de ligne, et deux à
la fin des borness

2. Fusion de lignes

001.1 aaa
jj:
kkk
lll
004.6 bbb
ccc
dd
001.2 eee
fff
002.5 ggg

doit devenir:

001.1 aaa (jjj: kkk,lll)
004.6 bbb (ccc) (dd)
001.2 eee (fff)
002.5 ggg

c'est à dire si ça commence pas par au moins 3 nombres, on fusionne le tout en
mettant entre parenthèse chaque ligne, sauf s'il y a deux points, dans quel cas
on fait une liste.

Mon idée actuelle:
pour 1:
un truc genre :%s/<i>.*\n*.*<\/i>/&<br>/g mais qui est grossièrement faut

En perl le code suivant fonctionne:
use strict;
undef $/;
my $html = <>;
while ($html =~ m{<i>.*?</i>}gsi) {
my $italic = $&;
$italic=~ s{\n}{<br>\n}g;
$italic=~ s{<\/i>}{<\/i><br><br>};
print $italic;
}
exit(0);


pour 2:
utiliser \l pour les lettres minuscules (équivalent à [a-z]) et \d pour les
chiffres (équivalent à [0-9]) mais pour le multi ligne, je suis pommé de chez
pommé.

Je vais sinon essayer de faire ça avec autre chose (perl,c,sed/awk...) ce qui
sera moins pire mais je me pose quand même la question : vim est-il capable de
ça ?
Une brève recherche sur google et le help regexp de vim me laissent supposer que
non.

Vous vous demandez sans doute pourquoi diable en vim lorsque perl marche ? Mon
idée, surtout pour le regexp 2, c'est de le mapper à par ex F1 pour traiter la
ligne actuellement sous le curseur, jusqu'à occurence des prochains chiffres.
Pour le regexp 1, idem ce serait mappé à une touche et fonctionnel dans le bloc
<i> </i> dans lequel se trouve actuellement le curseur.

Enfin, bon, tout exemple fonctionnel est le bienvenu !

Bonne prise de tête :-)

-- 
*@externe.net ![guylhem@oeil.qc.ca->@metalab.unc.edu->@ibiblio.org->@7un.org]http://externe.net/geekcode http://externe.net/photos http://externe.net/zaurus
GPG: 92EB37C1 DD11C9C9 20519D01 E8FA1B11 42975AF7     http://externe.net/pubkey

Attachment: pgp00014.pgp
Description: PGP signature

--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>