Administrators chain Posted March 17, 2010 Administrators Report Share Posted March 17, 2010 >; --------------------------------------------- ; 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: /SColor Chaîne OU $SColor(Chaîne) ; ----------------- ; Version Commentée ; ----------------- Alias SColor { ; Attribution à %z de la methode de réponse (echo ou return) si $isid ou pas ... Var %z = $iif($isid,Return,Echo >) ; S'il existe au moins un paramètre et s'il y'a au moins 1 caracteres de controle ... If ($regex($1-,/[[:cntrl:]]/g) > 0) { ; Initialisation des variables ... ; Ma couleur de fond - %b , Chaîne fournie - %dat , Couleur de remplacement - %r Var %b = $color(background) , %dat = $1- , %r = $+($chr(3),$iif(%b == 0,01,$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 > Var %i' = (?:\x2?\x1F?|\x1F?\x2?) , %i = $+(%i',\x3,%i') ; 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]((? } 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 ))/gix , %d = /( %i ( %j ))/gix ; 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, détection = 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)) ; -- en détail: ; --- La 'Chaîne' est représentée par \2 selon la disposition des regroupements dans ; --- l'expression rationnelle %d ; Donc, détection = 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 $color(info) $+ * /SColor: insufficient parameters - paramètres insuffisant } } ; ------------------------ ; Version Non-Commentée :p ; ------------------------ Alias SColor { Var %z = $iif($isid,Return,Echo >) If ($regex($1-,/[[:cntrl:]]/g) > 0) { Var %b = $color(background) , %dat = $1- , %r = $+($chr(3),$iif(%b == 0,01,$abs($calc(%b -16)))) Var %i' = (?:\x2?\x1F?|\x1F?\x2?) , %i = $+(%i',\x3,%i') , %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]((? } Else { Var %k = (( %b )\x2C( %b )|( %b )[^\x2C]|( %b )\x2C[^0-9]) %m } Var %c = /( %i ( %k ))/gix , %d = /( %i ( %j ))/gix Var %dat = $regsubex(%dat,%c,$+($chr(15),%r,>,\2,$chr(15))) %z $regsubex(%dat,%d,$+($chr(15),%r,>,\2,$chr(15))) } Else { %z $color(info) $+ * /SColor: insufficient parameters - paramètres insuffisants } } ; ----- ; Eof() ; ----- Link to comment Share on other sites More sharing options...