Ajouter de la couleur a vos bash php

Contenu du snippet

Je travaille régulièrement sur des bashs en php, a force de faire des fichiers d'aide (avec un -help), tout pas beaux, tout lugubres, je me suis dit que ce serait sympa de mettre en forme tout ca.

Voici donc 2 fonctions, une qui créé le code sh pour la gestion des couleurs, et l'autre qui parse les balises prévues a cet effet.

Imaginons une portion de scrips test.php suivant:

if($params['help']){
$text = " Voici une demo de colorisation <c c=blue >via des tags</c>,\n ou <c c=red bg=green s=bold>plusieurs attributs peuvent etre utilisés.</c>
echo parseShColorTag($text);
}

Source / Exemple :


/**

  • $text : le text a colorer
  • $txtColor : couleur voulue (black,red,green,cyan,magenta,black...)
  • $bgColor : couleur de fond
  • $styleTxt : style du text (bold,underline,reverse,flashing)
*
  • return string
  • A noter que certaines mises en forme ne fonctionnent pas sous tout les clients
    • /
function shColorText($text='', $txtColor='',$bgColor='',$styleTxt='none'){ $__ESC = "\033"; $__START = "["; $__END = "m"; $__CLEAR = $__ESC."[2J"; $__NORMAL = $__ESC."[0m"; if($text === 'CLEAR') return $__NORMAL.$__CLEAR; if(empty($text) || !$text) return $__NORMAL; //Text color $aTextColor['black'] = 30; $aTextColor['red'] = 31; $aTextColor['green'] = 32; $aTextColor['yellow'] = 33; $aTextColor['blue'] = 34; $aTextColor['magenta'] = 35; $aTextColor['cyan'] = 36; $aTextColor['white'] = 37; //Background color $aBgColor['black'] = 40; $aBgColor['red'] = 41; $aBgColor['green'] = 42; $aBgColor['yellow'] = 43; $aBgColor['blue'] = 44; $aBgColor['magenta'] = 45; $aBgColor['cyan'] = 46; $aBgColor['white'] = 47; //style text $aStyle['none'] = 0; //normal $aStyle['bold'] = 1; //gras $aStyle['underline'] = 4; //souligné $aStyle['flashing'] = 5; //clignotant $aStyle['reverse'] = 7; //inversé $c = $__ESC.$__START; if($styleTxt && isset($aStyle[$styleTxt])) $a[] = $aStyle[$styleTxt]; if($txtColor && isset($aTextColor[$txtColor])) $a[] = $aTextColor[$txtColor]; if($bgColor && isset($aBgColor[$bgColor])) $a[] = $aBgColor[$bgColor]; if(!is_array($a)) return $text; $c = $__ESC.$__START.join(';',$a).$__END; return $c.$text.$__NORMAL; } /**
  • Permet de mettre en forme la police d'un texte par des balises
*
  • ex : Ceci est un <c c=blue bg=white s=bold>TEST</c>
*
    • /
function parseShColorTag($str){ $tag = "/(<c[^>]*>)([^<]*)<\/c>/"; $innerTag = "/([\w]+)=([\w]+)/"; preg_match_all($tag,$str,$r); if(!is_array($r[1])) return $str; foreach($r[1] as $k => $v){ preg_match_all($innerTag,$v,$r2); if(!is_array($r2[1])) return $str; $c = $bg = $s = false; while(list($i,$value)=each($r2[1])){ switch($value){ case 'c': $c = $r2[2][$i]; break; case 'bg': $bg = $r2[2][$i]; break; case 's': $s = $r2[2][$i]; break; } } $string = shColorText($r[2][$k], $c,$bg,$s); $str = str_replace($r[0][$k],$string,$str); } return $str; }

Conclusion :


La capture d'écran est issue du code suivant:
if($params['help']){
$text = " \n<c s=bold>make.php</c> <c c=cyan s=bold>-[email|verbose|help] [value]</c>
<c c=magenta s=bold>Définition du script</c>
<c c=green s=bold>-email</c> ajoute a la constante ADMIN_MAIL d'autres destinataires ex :php make.php -email 'test@test.com,autre@test.com'
<c c=green s=bold>-verbose</c> affichage en sortie standart des etapes
<c c=green s=bold>-help</c> affiche l'aide
<c c=green s=bold>-help+</c> affiche les utilisations des class (gadjet;))
\n";
echo parseShColorTag($text);
exit();
}

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.