Ajouter de la couleur a vos bash php

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 702 fois - Téléchargée 18 fois

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

Ajouter un commentaire

Commentaires

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
kikisirom, meme si ce module est experimental, vu le cote populaire de ncurses, il ne disparaitra pas comme ca du jours au lendemain...

gentilkiki, ca s'explique parfaitement : nombre de gens penses que php n'est fait que pour faire des weberies, php a un comportement bizare pour certains trucs, php n'a rien d'un langage strict et n'a rien d'un langage fait pour le shell, contrairement au bash qui permet deja de tres nombreuses choses. si on regarde les concurents que php a pour developper des scripts en shell, on trouve python, perl (qui historiquement a plus sa place que php dans les lignes de commandes), le ruby, le tcl, etc...

on trouve beaucoup de langages concurents au php qui sont bien mieux consideres par bon nombre de personnes

on est pas beaucoup a utiliser le php pour faire autre chose que du web... le php a plus comme public les petits kikoo lols qui veulent faire leurs sites persos : Personal home page tool au depart, ne l'oublions pas
Messages postés
13
Date d'inscription
mercredi 30 janvier 2008
Statut
Membre
Dernière intervention
9 octobre 2008

Salut, merci pour les comments;)
Pour répondre a coucou747: je ne connaissais pas du tout ncurses, j'ai visité le lien avec beaucoup d'interet (et des idées plein la tete), malheureusement, le module n'est pas implémenté a mon boulot (on a meme pas php5), du coup je reste un peu sur ma faim.
Sans rapport aucun, je suis étonné de voir le peu de ressource pour tout ce qui concerne les batchs php, bien que je comprenne le manque d'interet au niveau vélocité, ca reste néanmoins une approche plutot ....ludique;)
Messages postés
153
Date d'inscription
mardi 17 août 2004
Statut
Membre
Dernière intervention
23 décembre 2010

@Coucou : peut-etre parce que c'est écrit ça sur le lien que tu donnes:

Warning
Ce module est EXPERIMENTAL. Cela signifie que le comportement de ces fonctions, leurs noms et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez ce module à vos risques et périls.

très original en tout cas, ça change des scripts style "j'affiche un Hello World avec les pieds" ;-)

@+
kiki
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
c'est interessant, mais pourquoi tu n'as pas utilise : http://fr3.php.net/ncurses ?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

boah...je ne vais même pas commenter le code côté prog : c'est une idée très sympa, ça change très agréablement des codes habituels, c'est très utile, et de toute manière c'est bien foutu.
Afficher les 6 commentaires

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.