Créer un compte
Connexion

Coloration syntaxique

Pour créer et répondre aux sujets, vous devez être connecté.
Ce sujet est résolu.
Pages: 1
Auteur Message
Spitfire 95
05-04-2010 à 16:38:10
Spitfire 95
Membre
Bonjour.
Je voudrais une coloration syntaxique pour mes codes sources, mais pas dans des fichiers .php, mais dans mes codes.
Pour tous les codes exécutables (langages interprétés), il ne faut pas modifier les fichiers sources, puisque ce sont ceux qui seront téléchargés.

Exemples :
http://free-apps.evoconcept.net/logiciels/calculatrice/Calculatrice.py
http://free-apps.evoconcept.net/web/resizer/taille-texte.js

Pour l'instant, je voudrais juste colorer des .py .js et .php
Et pour les .php, comment faire pour qu'ils ne soient pas interprétés, autrement qu'en les appelant fichier.txt, ou qu'en faisant header content-type:text ?
Merci.

ybouane
05/04/2010 à 22:14:17
ybouane
Admin
Bonjour,
pour colorer du code, je te conceil d'utiliser des système de coloration tel que geshi, voici un tutoriel:
http://www.siteduzero.com/tutoriel-3-38905-geshi-colorer-son-code.html

Je ne suis pas sûr de comprendre ce que tu veux, mais voici comment faire:
codecolor.php
<?php
include('geshi.php');
$dossier_sources = 'http://free-apps.evoconcept.net/logiciels';
$code = file_get_contents($dossier_sources.$_GET['filename']);

$geshi = new GeSHi($code, $GET['langage']);
echo $geshi->parse_code();
?>
Ensuite, il te suffira d'appeler codecolor.php?filename=calculatrice%2FCalculatrice.py&langage=python

Et tu dois désactiver l'exécution des codes en mettant ceci dans le fichier .htaccess du dossier contenant les sources:
AddType text/plain .php
AddType text/plain .py
Cordialement :)

Image
Spitfire 95
06-04-2010 à 20:39:00
Spitfire 95
Membre
Bonjour.
Ça marche pas.
Les erreurs sont là : http://free-apps.evoconcept.net/code.php?url=http://free-apps.evoconcept.net/logiciels/calculatrice/Calculatrice.py&lang=python

Le code.php :
<?include_once('geshi.php');
$geshi=new GeSHi(file_get_contents($_GET['url']),$GET['lang']);
echo $geshi->parse_code();?>

Lien vers la source :
<input type="button" value="Source" onclick="window.location='../../code.php?url=<?echo urlencode("http://free-apps.evoconcept.net$src");?>&lang=<?echo $language;?>';">
Merci.

Et puis-je supprimer les dossier docs et contrib, ou sont-ils necessaires ?

Cordialement.


ybouane
07-04-2010 à 03:48:56
ybouane
Admin
Bonjour,
premièrement, je te conseil d'utiliser le code que je t'ai donné, car celui que tu a mis comporte une grande faille de sécurité.

Et l'erreur, c'est que j'avais fait une erreur de touche, et j'ai oublié de mettre le _ dans le deuxième GET.

Donc le code doit être:
<?php
include('geshi.php');
$dossier_sources = 'http://free-apps.evoconcept.net/logiciels';
$code = file_get_contents($dossier_sources.$_GET['filename']);

$geshi = new GeSHi($code, $_GET['langage']);
echo $geshi->parse_code();
?>

Et oui, tu peut supprimer les deux dossiers docs et contrib.

Cordialement :)

Image
Spitfire 95
07-04-2010 à 19:40:20
Spitfire 95
Membre
Merci.
Mais mes codes sont dans des dossiers : la calculatrice est dans /logiciels/calculatrice/ et je suppose que pour que le code fonctionne pour tous les logiciels, et pour tous les scripts du dossier /web/nom_du_script/, il faudra mettre soit le chemin complet dans l'URL, soit mettre ce code pour chaque logiciel ou script.

Puis, de toute façon, ça ne change rien :
Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 1930

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 1930

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 2294

Warning: implode() [function.implode]: Argument must be an array in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3246

Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3269

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3269

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3310

Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3361

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3361

Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3506

Warning: Invalid argument supplied for foreach() in /home/sites/f/r/free-apps.evoconcept.net/geshi.php on line 3506
Cordialement.

Spitfire 95
07-04-2010 à 19:42:46
Spitfire 95
Membre
J'ai fait une faute de frappe pour le nom d'une variable : dans la source, "langage" (à la française), et dans la fiche, "language" (à l'anglaise).

Mais pour désactiver l'execution d'UN PHP, comment faire ? AddType text/plain moncode.php ?

Merci.

ybouane
07/04/2010 à 23:51:30
ybouane
Admin
Bonjour,
Non, tu doit mettre:
AddType text/plain .php Cordialement :)

Image
Spitfire 95
08/04/2010 à 07:57:08
Spitfire 95
Membre
Bonjour.
Mais si je fais ça, tous mes fichiers .php du dossier seront désactivés, non ?

Cordialement.

ybouane
09/04/2010 à 01:30:52
ybouane
Admin
Bonjour,
essaye ça:
<Files fichier.php>
AddType text/plain .php
</Files>
Cordialement :)

Image
Spitfire 95
09/04/2010 à 14:13:50
Spitfire 95
Membre
Merci.

Spitfire 95
28/06/2010 à 13:39:33
Spitfire 95
Membre
J'ai amélioré ma page. J'ai ajouté un panneau en haut, fixé, contenant la barre de navigation, le lien vers la page d'accueil, le lien vers la page de présentation du logiciel/script, un bouton pour afficher/masquer les lignes, et une liste de choix pour sélectionner la coloration syntaxique à utiliser.
Problème n°1 :
Les langages sont classés par ordre alphabétique. Comment afficher dans le select la valeur <?echo$_GET['lang'];?> par défaut ?

Problème n°2 :
J'ai trop de langages ! J'ai mélangé les langages proposés dans la coloration syntaxique de Support-Du-Web et de Gedit, mon éditeur de texte. Ce qui me fait un total de 50 langues.
Lesquels dois-je supprimer, sachant que je ne programme dans quasiment aucun de ces langages, mais que des développeurs utilisant d'autres langages pourraient vouloir utiliser une autre coloration syntaxique (remplacer la coloration Python par TCL quand il y a Tkinter par exemple), ou pour mettre un valeur un langage à l'intérieur d'un autre (CSS ou Javascript dans HTML, par exemple).

La page du code source de ma calculatrice : http://free-apps.evoconcept.net/code.php?root=/logiciels/calculatrice/&file=Calculatrice.py&lang=py&lines=0

Merci.

ybouane
28/06/2010 à 20:36:55
ybouane
Admin
Bonjour,
pour le 1er problème, il suffit d'ajouter selected="selected" au langage par défaut.
la meilleure solution est de faire quelque chose de semblable à:

<select [...]><?php
$langages = array('ada' => 'Ada','apache' => 'Apache', 'as' => 'Actionscript','asm' => 'Assembleur'[...]);
foreach($langages as $k=>$v)
{
if($k == $_GET['lang'])
{
echo '<option value="'.$k.'" selected="selected">'.$v.'</option>';
}
else
{
echo '<option value="'.$k.'">'.$v.'</option>';
}
}
?>
</select>

Et pour ton deuxième problème, je te conseil de mettre les languages les plus importants au début de la liste et les autres après.

Cordialement :)

Image
Spitfire 95
29/06/2010 à 10:17:19
Spitfire 95
Membre
Merci.
J'ai gardé l'ordre alphabétique, sauf pour le plain/text que j'ai placé en haut.

J'ai de nouveaux problèmes.
Je voudrais proposer d'imprimer le code source, avec la coloration syntaxique sélectionnée, avec les lignes si les lignes sont activées, mais sans ma barre d'outils. Y a t-il une fonction qui me permettrait de n'imprimer que le code source, ou une fonction pour imprimer une autre page, avec comme URL, la même que la page actuelle avec par exemple &hideToolBar=1 à la fin de l'adresse.
Même question pour enregistrer en PDF.

Merci.

ybouane
29/06/2010 à 19:22:40
ybouane
Admin
Bonjour,
pour imprimer, tu peut mettre un bouton:
<input type="button" onclick="javascript:window.print();" value="Imprimer" /> Ensuite, tu doit faire une deuxième feuille de style spéciale pour l'impression:
<link href="print.css" rel="stylesheet" type="text/css" media="print" /> et dans le fichier print.css tu cachera la toolbar avec display:none;

Et pour la version pdf, regarde:
http://html2pdf.fr/
et sert toi des exemples qu'ils donnent pour l'adapter à ton site.

Cordialement :)

Image
Spitfire 95
29/06/2010 à 20:10:38
Spitfire 95
Membre
Merci.
L'image qui empêche le haut du code de s'afficher sous la barre s'appelle id="haut", la barre d'outils s'appelle id="toolbar".
Mon CSS :
<STYLE type="text/css">
@media print {#toolbar,#haut{display:none;}}
</style>
C'est bon comme ça ? Je ne peux pas tester, je n'ai pas d'imprimante, j'ai supprimé le gestionnaire d'imprimante, ainsi que tous les drivers d'impression.

ybouane
30/06/2010 à 18:20:25
ybouane
Admin
Bonjour,
Oui, ça devrait fonctionner.

Cordialement :)

Image
Spitfire 95
03/07/2010 à 19:39:31
Spitfire 95
Membre
Merci.
Pour le PDF, j'annule le projet : trop long à faire, trop complexe, et pas nécessaire, puisqu'il est possible de télécharger directement la source en texte éditable avec n'importe quel éditeur. De plus, la fonction d'impression permet d'enregistrer, sous Linux en tout cas, en PDF.
Mais mon dernier problème, c'est que mon PDF n'est pas complet : je n'ai qu'une page, contenant les 94 premières lignes de mon code. Est-ce mon PDF qui est incomplet ou est-ce l'impression qui n'utilisera qu'une seule et unique page ?
Comment mettre tout le code dans le PDF (toujours à partir de la fonction d'impression) ?
Mon problème est originaire de JavaScript ou de UNIX/Linux (n'ayant plus de logiciels d'impressions, je pense plutôt que c'est JavaScript.) ?

Merci.

ybouane
03/07/2010 à 23:55:34
ybouane
Admin
Bonjour,
Chez moi, l'enregistrement en pdf fonctionne sans aucun problème. Est-tu sûr d'avoir bien coché la case "Toutes les pages"?

Cordialement :)

Image
Spitfire 95
04/07/2010 à 11:52:55
Spitfire 95
Membre
Désolé, j'utilise rarement des PDF et je n'avais pas remarqué que mon lecteur PDF sépare les pages au lieu de les mettre à la suite. Donc pour changer de page, il faut appuyer sur le bouton suivant ou précédent (ou aller à...), et non pas descendre la srollbar jusqu'à la page suivante, comme sur d'autres lecteurs PDF.
Au temps pour moi.

Merci.

Pages: 1