willoblog

Aller au contenu | Aller au menu | Aller à la recherche

jeudi 6 août 2009

SyntaxHighlighter, php et scripts Bash

Bon, troisième post de la journée sur le sujet, après les deux premiers. Petits trucs et astuces pour pouvoir afficher des scripts bash comme cela est réalisé sur mon site.

Pour le transcript, deux problèmes

Balises malgré elles

SyntaxHighlighter transforme tous les chevrons « < » et « > » en entités html correspondantes, respectivement « &lt; » (less than) et « &gt; » (greater than). Ce ne serait pas grave s'il ne le faisait pas seulement pour presque tous les chevrons... Or il cherche à détecter automatiquement les balises (ce qui n'est pas très malin dans du code bash d'ailleurs, ce qui fait que mon adresse mail par exemple était comprise comme une balise, dégradant quelque peu la suite de l'affichage. Total : il faut le faire pour lui.
Au départ, j'avais choisi d'utiliser readline en php, à savoir

<pre class="brush: bash">
<?PHP  @readline('compil'); ?>
</pre>

Mais transformer les chevrons à l'avance n'est pas beaucoup plus compliqué :

<pre class="brush: bash">
<?PHP  echo str_replace('<','&lt;',str_replace('>','&gt;',file_get_contents('compil'))); ?>
</pre>

Vous aurez remarqué que du coup, dès que le fichier est modifié, c'est le code de la dernière version qui s'affiche. Zéro maintenance (le fichier compil est un lien symbolique vers /usr/local/bin/compil sur mon serveur).

Décidément, ces chevrons...

Et c'est à ce moment que l'on relit un peu ce qui s'affiche à l'écran, et qu'on se rend compte que plein de chevrons (mais pas tous) sont restés à l'état d'entités html. Alors qu'en enlevant l'influence de SyntaxHighlighter, on obtient bien le résultat attendu. Il m'aura fallu quelques minutes pour me souvenir que lt et gt, sont des mots-clés en bash, justement pour des tests numériques plus grand/plus petit (ouais, tout est lié). Un grand dilemme se pose alors. Soit on laisse comme ça, et le code affiché est faux. Soit on s'arrange pour ne jamais avoir de chevrons (ce qui est impossible quand on a besoin de redirections). Soit on commente les mots-clés gt et lt dans le fichier de définition shBrushBash.js, et tant pis pour leurs rares apparences en tant que tests, où ils ne seront pas colorés comme il faut. J'ai choisi cette dernière solution.

Pour l'aide

Ah, là ça se corse. Au départ j'avais recopié telle quelle la réponse de compil -h. Je me suis dit alors « mais si t'as une coquille dans l'aide ou que tu la modifies, il faudra revenir ici... au secours ». Alors j'ai trouvé un moyen. Après plusieurs tâtonnements et hésitations sur la meilleure fonction php entre exec, system et passthru, j'ai opté pour

<pre class="aide">
$ compil -h
 
<?PHP 
exec('[ ! -e compil.help -o compil -nt compil.help ] && compil -h | tr -d "\033" | sed -e "s/\[1m/<b>/g" -e "s/\[0m/<\/b>/g" > compil.help');
@readfile('compil.help'); ?>
</pre>

Explication : la dernière commande lit et affiche un fichier compil.help. On va donc y mettre l'aide. Problème, j'utilise un formatage à base de caractères bizarres qui permettent de mettre en gras du texte en console. On prend donc le résultat de compil -h, on en vire donc le caractère bizarre (grâce à la commande tr -d), puis on identifie le début et la fin des mises en gras, que l'on remplace de façon moche mais fonctionnelle par des balises de formatage html.
Le début est un test, qui permet d'exécuter la commande seulement si compil.help n'existe pas ou est plus ancien que compil. Cela semble fonctionner à peu près correctement.

dimanche 11 novembre 2007

Passage à vide

Passage à vide pour moi, passage à vide pour le blog. Le mois d'octobre ne fut pas un très bon mois pour mon moral. Je ne suis pas sûr que ç'aurait d'ailleurs été mieux si on avait gagné cette foutue coupe du monde.

Le boulot a repris à peu près jeudi dernier, lorsque je me suis rendu compte que finalement tout n'était peut-être pas perdu, que j'avais fait un peu de science ces deux dernières années, que les 8 mois qui restent maintenant (à peine) suffiraient peut-être. Peut-être. Du moins faudra-t-il que j'arrive à me concentrer, à avancer sérieusement sur les points à éclaircir. Et à la fin, à rédiger rapidement.

A., exilée malgré elle dans le centre de la France pour un poste visiblement pas simple et assez chronophage, me manque beaucoup entre deux weekends. J'essaie de m'occuper, mais me voir recommencer à geeker ne me plaît guère. Surtout si c'est pour réinstaller des ordis, tester des nouvelles distributions (Fedora 8 est sortie peu après Ubuntu Gutsy, par exemple), ou pire, coder en bash des fonctions inutiles, pour redimensionner automatiquement des vidéos et des films (faudra que j'en parle ici) entre autres. (et je ne parle pas des regrets permanents « ah, si je prenais le temps de faire de la programmation objet en php », « ah, jquery et ses possibilités, quelle invention prometteuse... »)

Bref. Arriver à se contenter de tout ça, quelques temps. Et passer à autre chose, enfin.

mercredi 8 novembre 2006

Galerie photos : enfin

Enfin, la page de description de la galerie de photos PHP que j'ai fabriquée avec mes petites mains est disponibles. Depuis le temps qu'il fallait que je la repompe depuis le fichier d'explication l'écrive, on peut dire qu'il n'est jamais trop tard. Bref, c'est officiel, ça fonctionne, je prévois de la passer en UTF-8 rapidement, puis d'ajouter la localisation avec une version en anglais au moins et la possiblité d'ajouter des langues, et d'apporter quelques changements cosmétiques. Le but sera de ne pas en faire une usine à gaz...