Gestion-couleurs-speciales@utilisation-regsubex

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 406 fois - Téléchargée 18 fois

Contenu du snippet

Bonjour :o)

Au départ, j'ai commencé à faire un bout de code afin de mettre en évidence les chaînes de caractères ayant même couleur que la couleur du fond.
Puis un ami m'a dit que l'idéal serait aussi de pouvoir automatiquement changer/modifier le texte si un user écrit avec la couleur de fond que j'utilise.

A partir de là, j'ai ébauché ce petit snippet.

En voici le descriptif:

Gestion-Couleurs-Spéciales Utilisation $regsubex

Cette fonction a 2 utilisations:
1) Elle détecte et modifie une chaîne si celle-ci est écrite avec la même couleur de fond que chez soi.
2) De plus, elle détecte et modifie la chaîne s'il y'a des parties écrites avec la même couleur de son fond.

Dans les deux cas, le snippet renvoit une chaîne reformatée automatiquement :o)

Utilisation: $Special-Color(Chaîne de Caractère) ou /Special-Color Chaîne de Caractère

Source / Exemple :


; ---------------------------------------------
; Gestion.Couleurs.Spéciales@10.05.2007@TropNul
; ---------------------------------------------
; Fonctions:
; Cette fonction a 2 utilisations:
; 1) Elle détecte et modifie une chaîne si celle-ci est écrite avec la même couleur de fond que chez soi.
; 2) De plus, elle détecte et modifie la chaîne s'il y'a des parties écrites avec la même couleur de son fond.
; -
; Cela permet principalement de ne plus surligner une chaîne qu'on ne verrait pas :o)
; -
; Utilisation: /Special-Color Chaîne OU $Special-Color(Chaîne)
; -----------------
; Version Commentée
; -----------------
Alias Special-Color {

  ; Attribution à %z de la façon de réponse (echo ou return) si $isid ou pas ...

  Var %z = $iif($isid,Return,Echo >)

  ; S'il existe au moins un paramètre ...

  If $1 {

    ; Initialisation des variables ...
    ; - Ma couleur de fond(%b) , Chaîne fournie(%dat)

    Var %b = $color(background) , %dat = $1-

    ; - Couleur de remplacement(%r)

    If (%b == 0) { Var %r = $+($chr(3),01) }
    Else { Var %r = $+($chr(3),$abs($calc(%b -16))) }

    ; - Ci-dessous les Expressions Rationnelles utilisées pour détecter les deux cas de figures de l'intitulé ...
    ; >> \x2 = CtrlB , \x2C = $chr(44) , \x3 = CtrlK , \x1F = CtrlU , \xF = CtrlO
    ; La variable %i correspond à < CtrlBCtrlU OU CtrlUCtrlB suivi de CtrlK suivi de CtrlBCtrlU OU CtrlUCtrlB >

    Var %i = (?:\x2?\x1F?|\x1F?\x2?)\x3(?:\x2?\x1F?|\x1F?\x2?)

    ; Les variables %h & %m vont quant à elles, détecter la fin d'un morceau de chaîne et surtout contenir la dite chaîne !

    Var %h = (\x2?[^0-9][^\x3\xF]+) , %m = (\x2?[^\x3\xF]+)

    ; La variable %j vérifiera si la chaîne reçue a une couleur de fond égale à la couleur de l'écriture 

    Var %j = (1([0-5]),1\4|0([0-9]),0\5|0([2-9]),\6|([0-9]),0\7|([2-9]),\8) $+ %m $+ $chr(124) $+ (0([01]),\11|([01]),\12) $+ %h

    ; La variable %k, ci-dessous est 'calculée' pour gérer les chaînes reçues de couleur
    ; égale à la couleur de fond qu'on utilise.
    ; Cela permet donc de ne pas 'surligner' ;o)

    If ($len(%b) == 1) {
      If $regex(%b,/[02-9]/) { Var %k = ((0? $+ %b $+ )\x2C(0? $+ %b $+ )[^ $+ %b $+ -9]|(0? $+ %b $+ )[^\x2C]) $+ %m }
      Else { Var %k = (01,01|01,1[^0-5]|1,1[^0-5]|1,01|0?1[^0-9]((?<=\x2C)[^0-9])|(01)[^\x2C]|1[^0-5\x2C]) $+ %m }
    }
    Else { Var %k = (( $+ %b $+ )\x2C( $+ %b $+ )|( $+ %b $+ )[^\x2C]|( $+ %b $+ )\x2C[^0-9]) $+ %m }

    ; Les variables %c & %d contiennent les Expressions Rationnelles finales utilisées dans les $regsubex
    ; %c : utilisée pour détecter un texte écrit avec la couleur de mon fond
    ; - c'est-à-dire: CtrlK suivi de %b OU CtrlK suivi de %b,%b
    ; %d : utilisée pour détecter un texte avec fond où la couleur est de la forme suivante:
    ; - CtrlKNuméro1,Numéro2 où Numéro1 == Numéro2 

    Var %c = /( $+ %i $+ ( $+ %k $+ ))/gi , %d = /( $+ %i $+ ( $+ %j $+ ))/gi

    ; Le $regsubex en bref: permet de substituer d'une chaîne fournie ce qui est vérifiée par l'expression rationnelle en second paramètre
    ; Utilisation Générale: $regsubex(Chaîne,Expression Rationnelle,S'il y'a un match remplacer par ceci)
    ; Première détection: La chaîne est écrite avec la couleur de mon fond
    ; en décortiquant:
    ; - S'il y'a un match, remplacer par ceci > $+($chr(15),%r,>,\2,$chr(15))
    ; --- La 'Chaîne' est représentée par \2 selon la disposition des regroupements dans l'expression rationnelle %c
    ; Donc, s'il y'a une détection, j'aurais en (echo|retour): CtrlOCtrlKCouleurdeRemplacement>ChaîneCtrlO

    Var %dat = $regsubex(%dat,%c,$+($chr(15),%r,>,\2,$chr(15)))

    ; Deuxième détection: La chaîne a des parties de texte cachées (Couleur texte == Couleur Fond) ...
    ; en décortiquant:
    ; - S'il y'a un match remplacer par ceci > $+($chr(15),%r,>,\2,$chr(15))
    ; --- La 'Chaîne' est représentée par \2 selon la disposition des regroupements dans l'expression rationnelle %d
    ; Donc, s'il y'a une détection, j'aurais en (echo|retour): CtrlOCtrlKCouleurdeRemplacement>ChaîneCtrlO

    %z $regsubex(%dat,%d,$+($chr(15),%r,>,\2,$chr(15)))
  }

  ; Affichage d'erreur si aucun paramètre n'est fournit à l'appel de la fonction :o)

  Else { %z $+($chr(3),02,* /Special-Color:,$chr(3)) insufficient parameters - paramètres insuffisant }
}
; ------------------------
; Version Non-Commentée :p
; ------------------------
Alias Special-Color {
  Var %z = $iif($isid,Return,Echo >)
  If $1 {
    Var %b = $color(background) , %dat = $1-
    If (%b == 0) { Var %r = $+($chr(3),01) }
    Else { Var %r = $+($chr(3),$abs($calc(%b -16))) }
    Var %i = (?:\x2?\x1F?|\x1F?\x2?)\x3(?:\x2?\x1F?|\x1F?\x2?) , %h = (\x2?[^0-9][^\x3\xF]+) , %m = (\x2?[^\x3\xF]+)
    Var %j = (1([0-5]),1\4|0([0-9]),0\5|0([2-9]),\6|([0-9]),0\7|([2-9]),\8) $+ %m $+ $chr(124) $+ (0([01]),\11|([01]),\12) $+ %h
    If ($len(%b) == 1) {
      If $regex(%b,/[02-9]/) { Var %k = ((0? $+ %b $+ )\x2C(0? $+ %b $+ )[^ $+ %b $+ -9]|(0? $+ %b $+ )[^\x2C]) $+ %m }
      Else { Var %k = (01,01|01,1[^0-5]|1,1[^0-5]|1,01|0?1[^0-9]((?<=\x2C)[^0-9])|(01)[^\x2C]|1[^0-5\x2C]) $+ %m }
    }
    Else { Var %k = (( $+ %b $+ )\x2C( $+ %b $+ )|( $+ %b $+ )[^\x2C]|( $+ %b $+ )\x2C[^0-9]) $+ %m }
    Var %c = /( $+ %i $+ ( $+ %k $+ ))/gi , %d = /( $+ %i $+ ( $+ %j $+ ))/gi
    Var %dat = $regsubex(%dat,%c,$+($chr(15),%r,>,\2,$chr(15)))
    %z $regsubex(%dat,%d,$+($chr(15),%r,>,\2,$chr(15)))
  }
  Else { %z $+($chr(3),02,* /Special-Color:,$chr(3)) insufficient parameters - paramètres insuffisants }
}
; -----
; Eof()
; -----

Conclusion :


Merci de votre attention :o)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
Pour le dilemme de vocab, les deux se disent. Je reprends les arguments du traducteur de "Mastering regular expressions (de Jeffrey Friedl, éditions OReilly)", qui dit en préface, que "regular" se traduit littéralement par "régulière", pas au sens de répétitions mais au sens de "gouvernées par / conformes à des règles". D'après lui, quelques essais sur les principaux moteurs de recherchent fournissent d'ailleurs 4 fois plus de résultats pour "régulières" que "rationnelles". Débat inutile, mais je pense que ca n'est pas un abus de langage ;) Un abus de langage, c'est plutot traduire "library" par "librairie" :)

Concernant ton snippet, je me suis pas penché dessus, mais je trouve également dommage de devoir "tordre" l'entrée pour mettre un ^O ou ^K en fin de chaine. Et dommage également que ca ne gère que ces codes, quitte à ressortir une chaine formatée. Cela dit, ca m'a l'air bien plus propre que ce que j'avais fait perso pour transposer les couleurs mIRC en HTML :o)

Bonne continuation
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Ok, j'espere que tu vas modifier :)
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

je verrais tout cela ce soir :)

En ce concerne " Expression Rationnelle " et non pas " Expression Régulière ", c'est juste que le mot 'régulière' n'a pas vraiment de sens pour ce qu'est ces expressions.

Regular Expressions traduit littéralement donne Expression Régulière alors que dans ce contexte, la véritable traduction est Expression Rationnelle.

Mais, cet abus de langage est acceptable maintenant car très largement utilisé. d'où le fait que presque tout le monde connaît le terme 'Régulière' au lieu de 'Rationnelle'.

pour le bug, je sais quoi faire, c'est juste que j'ai la flemme (pas taper :s)

;o)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Ok, niveau explication, c'est beaucoup mieux mais il y a toujours des trucs qui m'embette :

-Pourquoi est ce que ton snippet vérifie qu'il y a un control code de fin ( ctrl+o ou ctrl+k ) alors que si qqun écris sans ces control de fin, on ne verra pas le texte et ton snippet me dira que c'est normal, je pense que tu ne devrais pas vérifier les control de fin

-Je comprend pas non plus pourquoi tu inseres des balise, a mon avis tu devrais faire en sorte que :
-le snippet retourne $true/$false si on apelle le snippet comme ça : $snippet(chaine) selon si du texte est caché ou non
-le snippet retourne la partie caché de la chaîne si on l'apelle comme ca : $snippet(chaine).hide ou retourne $false si il n'y a pas de partie caché

Et pourquoi tu dis expression rationnelle ? alors que tlm dis expression régulière ?

Pour le bug, si cela viens de la syntaxe du regex, attend ArKanis :)
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009

Il y a un bug que je n'ai pas encore réglé.

Lorsqu'il verras CtrlK1,11 , il croira à CtrlK1,1
idem pour CtrlK1,10 ou CtrlK1,12 etc ... CtrlK1,15

je verrais pour cela plus tard. ou alors si une âme charitable peut me le faire LOL

;o)
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.