Soyez le premier à donner votre avis sur cette source.
Snippet vu 5 468 fois - Téléchargée 18 fois
; --------------------------------------------- ; 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() ; -----
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
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)
-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 :)
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)
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.