Gestion-couleurs-speciales@utilisation-regsubex

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

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.