Gestion-couleurs-speciales@utilisation-regsubex

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 309 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

cs_wims
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1 -
J'aime bien l'idée étant donné que c'est gênant lorsque du texte est caché et qu'on est obligé de selectionné le texte pour le voir.
Par contre ya plusieur truc que je trouve pas bien, le snippet n'est pas commenté dans les partis les plus complexes : tu set plein de var mais on ne sait pas du tout a quoi elles servent, le regsubex n'ont plus n'est pas expliqué
Il y a plusieur chose que je pige pas :

; Première détection: La chaîne est de couleur égale à la couleur de mon fond ...

Cela veux dire que la phrase entiere est caché non ?
Mais apres tu marque ça :
; Deuxième détection: La chaîne a des parties de texte cachées (Couleur texte = Couleur Fond) ...

On ne sait pas ce que font les deux regsubex en fait...
Je ne comprend pas tes exemples vu que on ne connais pas ta couleur de fond, et j'ai essayé de testé, je n'est pas réussis a le faire marché quelque sois la couleur de fond mais prenons par exemple un background blanc : je tape ça :

//var -s %a $chr(3) $+ 0 GA is Ga | Echo -a $SamMyFrBkCol(%a)

la variable contient bien GA is Ga en blanc ( donc je le vois que en surlignant ) mais qu'est ce que je suis censé avoir avec ton alias car j'ai exactement la même chose :/

Ps :
; (Fera un echo si appelé en tant qu'alias et un return si appelé en tant qu'identifieur)

deviens

; (Fera un echo si appelé en tant que commande et un return si appelé en tant qu'identifieur)
cs_TropNul
Messages postés
340
Date d'inscription
dimanche 18 septembre 2005
Statut
Membre
Dernière intervention
22 octobre 2009
-
Chalut Wims :o)

message reçu 5/5, je vais revoir ces points dans la soirée.
déjà, je peux vous dire que les tests ont été faits sur le mirc que j'utilise qui a un fond gris (15). d'où les 15,15 ;)
(pas de commentaires sur MON BEAU fond gris svp (lol))

^^
cs_TropNul
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)
cs_wims
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 :)
cs_TropNul
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)

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.