OVH Cloud OVH Cloud

délimiteur de signature ?

19 réponses
Avatar
Gérald Niel
Bonjour,

pas très doué en JS, pour un client web affichant des message en
provenance de usenet je cherche une regexp pour traiter le délimiteur
de signature et afficher ce qui est en dessous dans un <div>.

J'ai cherché un peu sur le net mais pas trouvé…

En php la regex ressemble à ça, mais je ne sais pas transformer en JS :
'/\n-- \n((.|\n)*|$)/'

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-

9 réponses

1 2
Avatar
SAM
Le 20/10/14 14:00, Olivier Miakinen a écrit :
Le 20/10/2014 06:40, Gérald Niel a écrit :

var texto = le post complet (le texte et sa signature)

texto = texto.split(/n-- n/);





J'ai texto[1] qui est 'undefined'.
Et texto[0] qui est strictement égal à texto.



Si ça se trouve, contrairement à PHP qui traduit automatiquement
les rn en n à la lecture et inversement en écriture, JavaScript
laisse les rn.



Oui, en effet. (d'expérience qui date)

Je te propose :
texto = texto.split(/r?n-- r?n/);



Pas mal ;-)


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Paul Gaborit
À (at) Mon, 20 Oct 2014 14:56:58 +0200,
SAM écrivait (wrote):

Le 20/10/14 14:00, Olivier Miakinen a écrit :

Je te propose :
texto = texto.split(/r?n-- r?n/);



Pas mal ;-)



Cela ne couvre pas tous les cas. Il y a trois possibilités pour les fins
de ligne :

1- n (Unix)
2- rn (Windows)
3- r (Mac avant Mac OS X)

Il faudrait donc faire (?:n|rn|r) (le '?:' c'est pour un groupe non
mémorisé).

Ce qui donnerait :

texto = texto.split((?:n|rn|r)-- (?:n|rn|r)/);



--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
Gérald Niel
Le Lundi 20 octobre 2014 à 11:54 UTC, SAM écrivait sur
fr.comp.lang.javascript :

Un exemple concret (en ligne) ?



Bah non. ;-)
C'est un code que je tente d'adapter.
(en fait le nemo.js du client 'JNTP' Némo)

Je comprend encore pas tout…

Les posts à analyser sont bien en texte "brut" ?



Le texte à analyser oui.

En particulier, les 'n' n'y sont-ils pas des '<br>' ??



Non.

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-
Avatar
Gérald Niel
Le 20/10/2014 à 14:00, Olivier Miakinen a écrit :
Si ça se trouve, contrairement à PHP qui traduit automatiquement
les rn en n à la lecture et inversement en écriture, JavaScript
laisse les rn.



Tu veux dire qu'en PHP on ne peut se préoccuper que de 'n' ? Pas besoin
de s’embêter avec 'rn' ?

Sinon, voici un exemple de ce que je veux traiter :
<http://jntp.gegeweb.org/?Jid

Il faut faire voir source pour voir le body tel quel.
Si j'ai bien compris le code source de Némo (fichier core/nemo.js) ça à
l'air de se passer là :
(Il se peut que la moulinette J2N coupe les ligne de code trop longue,
suivre le lien en signature pour voir l'article tel que désiré par son
auteur)

renduHTML: function(body, div, interpretPlugins) {

$('#accueil').hide();
$('#panneau_principal').show();

var reg /(s|^)(https?|ftp)(://[-A-Z0-9+@#/%?=~_|*&$!:,.;()]+)(?=s|$)/ig;
body = body.replace(reg,'$1$2$3');
var reg /(s|^|(|<)(https?|ftp)(://[-A-Z0-9+@#/%?=~_|*&$!:,.;()]+)(s|>|$)/igm;
body = body.replace(reg,'$1$2$3$4');

body = Nemo.renduQuote( body );

var reg = /([signature])([sS]*?)([/signature])/ig;
body = body.replace(reg,'<div class="signature">$2</div>');

D'ailleurs la fonction renduQuote ne fonctionne pas bien en présence de
balise dans les citation telle que reformaté par un client Usenet
traditionnel :
(voir par exemple à la fin de
<http://jntp.gegeweb.org/?Jid=slrnm4brpn.ef.gerald.niel+)

renduQuote: function(body, putNumLine, setFormat) {

body = JNTP.HTMLEncode( body );
rt_alea = '@'+Math.floor(Math.random()*1e10)+'@';
rt = "n";
var reg = /[([a-z]+)][sS]*?[/1]/g;
body = body.replace(reg, function(s, m){ return s.replace(/n/g,
rt_alea);});
body = body.split(rt);

for (i in body)
{
motif = body[i].match(/^(&gt;| )+s?/gi);

if(motif) {
n = motif[0].split("&gt;").length - 1;
pos = (n > 0) ? (motif[0].length - motif[0].lastIndexOf("&gt;") - 5) :
motif[0].length;
ligne = body[i].substr(motif[0].length - pos, body[i].length);
}else{
n = 0;
ligne = body[i];
}
if(ligne == ''){
body[i] = '<span style="display:block" data-line="'+(i).toString()+'"
data-cite="'+(n).toString()+'">&nbsp;</span>';
}else{
body[i] = '<span style="display:block" data-line="'+(i).toString()+'"
data-cite="'+(n).toString()+'">'+ligne+'</span>';
}
}

body = body.join('');
reg = new RegExp(rt_alea, "g");
body = body.replace(reg, "n");
body = Nemo.renduFont( body );
return body;
},



--
Ce message a été posté avec Nemo : <http://jntp.gegeweb.org/?Jid{
Avatar
Gérald Niel
Le 21/10/2014 à 10:16, Gérald Niel a écrit :

(voir par exemple à la fin de
<http://jntp.gegeweb.org/?Jid=slrnm4brpn.ef.gerald.niel+)




En parlant de ça Olivier, dans
<news:slrnm4brpn.ef.gerald.niel+ j'aborde (hors
sujet ici) la question des Headers NNTP non standard et le fait qu'ils
doivent être précédé d'un 'X-'.
Il semblerait que Julien ait déjà échangé sur le sujet avec toi.
Si tu pouvais nous donner ton point de vu sur la question ?

(suivi sur fr.comp.reseaux.jntp)


--
Ce message a été posté avec Nemo : <http://jntp.gegeweb.org/?Jid
Avatar
Paul Gaborit
À (at) Mon, 20 Oct 2014 19:04:48 +0200,
Olivier Miakinen <om+ écrivait (wrote):

Le 20/10/2014 18:10, Paul Gaborit a écrit :

Cela ne couvre pas tous les cas. Il y a trois possibilités pour les fins
de ligne :

1- n (Unix)
2- rn (Windows)
3- r (Mac avant Mac OS X)



Ça c'est pour les fichiers, mais dans un programme JavaScript ? C'est
une vraie question, je n'ai pas la réponse.



La réponse est : c'est pareil... ou plutôt, c'était pareil puisqu'il ne
reste quasiment plus personne qui utilise un système Mac pré-OS X.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
Olivier Miakinen
Le 21/10/2014 10:16, Gérald Niel a écrit :

Si ça se trouve, contrairement à PHP qui traduit automatiquement
les rn en n à la lecture et inversement en écriture, JavaScript
laisse les rn.



Tu veux dire qu'en PHP on ne peut se préoccuper que de 'n' ? Pas besoin
de s’embêter avec 'rn' ?



Oui, il me semble que c'est vrai dans la plupart des cas. Et si jamais
une fonction accédant à des données externes (fichier, réseau, etc.) ne
le faisait pas, je conseillerais de l'enrober par une autre fonction,
de façon à n'avoir à traiter en interne qu'un seul type de fin de ligne.
Bien sûr, je ne parle ici que des données de type texte, et non pas de
données binaires.

Sinon, voici un exemple de ce que je veux traiter :
<http://jntp.gegeweb.org/?Jid



Ah, je vois qu'il s'agit de JNTP et Nemo. ;-)

Si je me rappelle bien, j'avais déjà conseillé à Julien de faire dans
son code JavaScript la même chose que ce que je conseille en PHP, à
savoir remplacer les rn par des n en lecture depuis le réseau, et
inversement au moment de renvoyer un message sur le réseau. Je ne sais
pas s'il l'a fait.

Il faut faire voir source pour voir le body tel quel.
Si j'ai bien compris le code source de Némo (fichier core/nemo.js) ça à
l'air de se passer là :
[...]



J'ai déjà lu des parties de code de Nemo, mais ça me semblait un peu
usine à gaz, en particulier je n'ai pas trouvé de nette séparation
entre la gestion du protocole et la partie propre à l'interface
graphique (mais c'est peut-être moi qui n'ai pas su prendre le temps
de bien chercher).

Du coup, plutôt que de lire du code, j'attends que Julien trouve le
temps d'écrire des specs (au format RFC, ce qui sera plus simple
pour y signaler les corrections à faire).

Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Bonjour Gérald,

[diapublication avec suivi]

Le 21/10/2014 10:24, Gérald Niel a écrit :

(voir par exemple à la fin de
<http://jntp.gegeweb.org/?Jid=slrnm4brpn.ef.gerald.niel+)




En parlant de ça Olivier, dans
<news:slrnm4brpn.ef.gerald.niel+ j'aborde (hors
sujet ici) la question des Headers NNTP non standard et le fait qu'ils
doivent être précédé d'un 'X-'.
Il semblerait que Julien ait déjà échangé sur le sujet avec toi.
Si tu pouvais nous donner ton point de vu sur la question ?



Mon point de vue est celui du RFC 6648 :
<https://tools.ietf.org/html/rfc6648>.

En un mot, cette idée de paramètres non-standard avec un préfixe
en "X-" était une mauvaise idée pour un certain nombre de raisons
exposées dans le RFC. D'ailleurs elle a été abandonnée dans les
versions les plus récentes des RFC concernant le format des mails
(RFC 2822 puis 5322) et des articles de news (RFC 5536).

(suivi sur fr.comp.reseaux.jntp)



[Tu t'es gouré dans ton suivi : tu as oublié de mettre en copie le
groupe de destination -- je répare cet oubli]
Avatar
Gérald Niel
Le Mardi 21 octobre 2014 à 21:32 UTC, Olivier Miakinen écrivait sur
fr.comp.lang.javascript :

Sinon, voici un exemple de ce que je veux traiter :
<http://jntp.gegeweb.org/?Jid



Ah, je vois qu'il s'agit de JNTP et Nemo. ;-)



Oui, je m'y intéresse un peu.
Surtout à la passerelle N <-> J.

Si je me rappelle bien, j'avais déjà conseillé à Julien de faire dans
son code JavaScript la même chose que ce que je conseille en PHP, à
savoir remplacer les rn par des n en lecture depuis le réseau, et
inversement au moment de renvoyer un message sur le réseau. Je ne sais
pas s'il l'a fait.



Il me semble bien que oui.

J'ai déjà lu des parties de code de Nemo, mais ça me semblait un peu
usine à gaz, en particulier je n'ai pas trouvé de nette séparation
entre la gestion du protocole et la partie propre à l'interface
graphique (mais c'est peut-être moi qui n'ai pas su prendre le temps
de bien chercher).



C'est désormais séparé.
Il y a core/nemo.js pour l'interface et core/lib.jntp.js pour ce qui
concerne le dialogue avec le serveur.

Du coup, plutôt que de lire du code, j'attends que Julien trouve le
temps d'écrire des specs (au format RFC, ce qui sera plus simple
pour y signaler les corrections à faire).



Alors, il est un peu tétu, et à une vision étrange des spécifications
qui font que "Internet" est ce qu'il est aujourd'hui.
Donc comme d'hab, il rédigera probablement ça dans le format qui lui
semblera bien à lui… Surout si le format RFC lui casse les pieds ! ;-)

--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-
1 2