Couleurs mirc -> html [bis]

Soyez le premier à donner votre avis sur cette source.

Vue 11 085 fois - Téléchargée 196 fois

Description

Tout est dans le titre ! ce code traduit les codes couleurs mIRC en couleurs HTML.
Une autre source fait ca sur le site, mais j'utilise une méthode différente, à savoir des regex partout pour reconnaître les masques.

Source / Exemple :


<?
function m2h($t) {
    //gestion couleurs mirc
    //Codes couleurs mirc de base : récupérables par /col :
    //Alias col { var %i 0,%j | while (%i <= 15) { %j = %j $color(%i) | inc %i } | echo -a %j }
    $c = explode(" ","16777215 0 8323072 37632 255 127 10223772 32764 65535 64512 9671424 16776960 16515072 16711935 8355711 13816530");
    $d = array_map("m2h_colors",$c);
    //codes ascii : b > 2 , k > 3 , o > 15 , r > 22 , u > 31
    //remplacement des Ctrl+K non valides
    $t = preg_replace("#".chr(3)."(?!\d)#",chr(15),$t);
    //substitutions gras
    $pattern_b = "!".chr(2)."(.*?)(".chr(2)."|".chr(15)."|$|(?=<br ?/?>))!i";
    $t = preg_replace($pattern_b,"<b>$1</b>$2",$t);
    //substitution soulignés
    $pattern_u = "!".chr(31)."(.*?)(".chr(31)."|".chr(15)."|$|(?=<br ?/?>))!i";
    $t = preg_replace($pattern_u,"<u>$1</u>$2",$t);
    $t = preg_replace("!(?:<b></b>|<u></u>)!i","",$t);
    //Ctrl + O et Reverse
    $a1 = array(chr(15),chr(22),chr(2),chr(31));
    $a2 = array(chr(3)."01,00",chr(3)."00,01","","");
    $t = str_replace($a1,$a2,$t);
    //substitution des ctrl + K
    while (preg_match("!^(.*)".chr(3)."(\d{0,2},?\d{0,2})(.*?)(?:".chr(3)."|$|(?=<br ?/?>))(.*)!i",$t,$matches)) {
    $k = explode(",",$matches[2]);
    $k0 = 1;
    $k1 = 0;
    $k = array_map("abs",$k);
    if ( ($k[0] >= 0) && ($k[0] <= 15) ) {
        $k0 = $k[0];
    }       
    if ( (array_key_exists('1',$k)) && ($k[1] >= 0) && ($k[1] <= 15) ) {
        $k1 = $k[1];
    }
    $couleur0 = $d[$k0];
    $couleur1 = $d[$k1];
    $couleur = "<span style=\"color:".$couleur0.";background-color:".$couleur1."\">";
    $t = $matches[1].$couleur.$matches[3]."</span>".$matches[4];
    }
  return stripslashes($t);
}
function m2h_colors($color) {
	//conversion couleurs mirc en R,G,B puis en format couleur Web
	//passage au R,G,B
	$b = $color - $color % (256*256);
	$g = ($color - $b) - ($color - $b) % 256;
	$r = $color % 256;
	$b = $b / (256*256);
	$g = $g / 256;
	$c = explode(' ',"$r $g $b");
	$c = array_map("dechex",$c);
	$c = array_map("m2h_format",$c);
	$color = implode('',$c);
	return '#' . $color;
}
function m2h_format($n) {
  //force la longueur d'un nombre à deux caractères
  if (strlen($n) >= 2) {
  	return $n;
	}
	return '0'.$n;
}
?>

Conclusion :


N'hésitez pas si un bug arrive, j'ai pu grâce au fichier joint en .zip traduire des fichiers de 2800 lignes en 5s environ (en local), un fichier de 11000 lignes passe tout juste en 28s, ensuite c'est trop gros.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Tarvos
Messages postés
40
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
24 mars 2006
-
En effet j'avais omis ce détail... mais il est maintenant corrigé, merci!
cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1 -
Ma 2e et ma 3e fonctions sont pas utiles pour la tienne, vu que je transforme les RGB a la main et que tu les mets direct en array toi au début. Ensuite, le traitement est pas tout a fait le même : ma fonction accepte du ctrl+K123456 elle va le traiter comme CtrlK12 puis 3456, la tienne je sais pas..
Je suppose qu'au final la tienne est meilleure, j'ai fait ca juste pour débuter en php ca m'a permis de découvrir la syntaxe de base :D
Tarvos
Messages postés
40
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
24 mars 2006
-
http://www.phpcs.com/code.aspx?ID=30045

Mon code me semble franchement plus court... et fonctionne avec des fichiers à plusieurs lignes, comme des logs par exemple. Ou est ce juste moi qui ai oublié quelque chose?
cs_Number32
Messages postés
8
Date d'inscription
jeudi 18 mars 2004
Statut
Membre
Dernière intervention
19 décembre 2005
-
Pas de probleme je reviendrais voir des que j'aurais une réponse d'ici par mail ;-)
cs_PaDa
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
1 -
oki do !
les ctrl+o (non w je crois) et les gris j'avais vu, pas les gras, j'ai essayé de changer un peu chez moi mais je n'ai pas refait trop de tests, il faudrait que j'update ici.
je regarderai ta source à l'occasion, qd j'aurai un moment la semaine prochaine
merci ;)

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.