Accueil > > > PEINTURE SUR SOURCES (UN TRUC QUI FAIT DE LA COLORATION SYNTAXIQUE)
PEINTURE SUR SOURCES (UN TRUC QUI FAIT DE LA COLORATION SYNTAXIQUE)
Information sur la source
Description
Salut J'ai fait une source qui colore une autre source... c'etait pour mon gestionaire de blog, mais que dire... il est vieux, rouille, mal concu, (peu modifiable), et probablement inutile a quelques fonctions pres, je mets donc a disposition de chacun quelques unes de ces fonctions Ce fichier permet de colorer des codes sources ou des fichiers possedant un formatage particulier : Cette coloration synthaxique gere les fichiers : -C -C++ -PHP -SQL -XUL (un xml pour mozilla) -CSS -HTML -XML -BAS (Qbasic pour etre precis) -les fichiers de conf (ini) -javascript -povray (un langage de 3d) -python (pas parfaitement complet) -java Faite dans le but de simplifier la lecture des sources sur mon blog, retilise ensuite pour le gestionnaire de paste. envoyez color('source', 'mime'); et vous aurez votre code tout en couleur... exemples ici : http://82.127.116.43:82/paste
Source
- <?php
- /*
- Ce fichier permet de colorer des codes sources ou des fichiers poss�ant un formatage particulier :
-
- Cette coloration synthaxique g�e les fichiers :
- -C
- -C++
- -PHP
- -SQL
- -XUL
- -CSS
- -HTML
- -XML
- -BAS
- -les fichiers de conf (ini)
- -javascript
- -povray
- -python
- -java
-
- Faite dans le but de simplifier la lecture des sources sur mon blog,
- r�tilis� ensuite pour le gestionnaire de past.
- */
-
-
-
- //toutes les colorations possibles
- $colorations=array(
- 'pas de coloration'=>'txt',
- 'perl'=>'application/x-perl',
- 'php'=>'application/x-httpd-php',
- 'C'=>'text/x-csrc',
- 'C++'=>'text/x-c++src',
- 'XUL'=>'application/vnd.mozilla.xul+xml',
- 'html'=>'text/html',
- 'XML'=>'text/xml',
- 'CSS'=>'text/css',
- 'SQL'=>'text/x-sql',
- 'javascript'=>'application/x-javascript',
- 'bas'=>'bas',
- 'INI'=>'ini',
- 'povray'=>'pov',
- 'tcl'=>'text/x-tcl',
- 'bash'=>'application/x-shellscript',
- 'python'=>'text/x-python',
- 'java'=>'text/x-java'
- );
- $options_colorations='';
- $li_colorations='';
- foreach ($colorations as $a=>$b){
- $options_colorations.='<option value="'.$a.'">'.$a.'</option>';
- $li_colorations.='<li>'.$a.'</li>';
- }
- function coloreCallback($match){
- global $colorations;
- if (isset($colorations[$match[1]])){
- return '<fieldset>
- <legend>Code source : '.$match[1].'</legend>
- '.colore(html_entity_decode(str_replace('<br />','
- ',$match[2])), $colorations[$match[1]]).'
- </fieldset>';
- }else{
- return '<fieldset>
- <legend>Code source : '.$match[1].'</legend>
- '.colore(html_entity_decode(str_replace('<br />','
- ',$match[2])), 'txt').'
- </fieldset>';
- }
- }
- function colore($texte, $type){
- if ($type=='txt') return nl2br(htmlentities(stripslashes($texte)));
- //On d�lare les param�res par d�aut de la coloration.
- $coloration=array();
- //si les instructions pr�rocesseurs commencent par #
- $coloration['#=preproc']=false;
- //si les commentaires commencent par #
- $coloration['#=comment']=false;
- //si on a le ph�om�e des magik quotes (perl et php)
- $coloration['magic quotes']=false;
- //si les variables commencent par $
- $coloration['dolar var']=false;
- //les mots clefs
- $coloration['key words']=false;
- //les fonctions / instructions...
- $coloration['function words']=false;
- //les quotes sont support�s
- $coloration['quotes']=false;
- //les slashs servent pour faire des commentaires
- $coloration['comment slash']=false;
- //langage de balises
- $coloration['balises']=false;
- //pour le CSS : les accolages en bold
- $coloration['accolades']=false;
- //pour le CSS, les attributs se trouvent entre les caract�es : et ;
- $coloration[': to ;']=false;
- //si on peut mettre des \n dans des doubles guillemets
- $coloration['quotes_double_slash']=false;
- //si on peut mettre des \n dans des simples guillemets
- $coloration['quotes_simple_slash']=false;
- //si on peut mettre des \n sans guillemets (tcl ou bash)
- $coloration['no_quotes_slash']=false;
- //les constantes comme NULL, true ou false
- $coloration['const']=false;
- //le fait qu'on prenne en compte les doubles quotes
- $coloration['doublequotes']=false;
- //let motc clefs par d�aut
- $key_words=array(
- 'if', 'break', 'else', 'die', 'default', 'case',
- 'switch', 'or', 'xor', 'and', 'not', 'exit', 'while', 'return',
- 'int', 'bool', 'for', 'class', 'new', 'do');
- $function_words=array();
- $const_words=array('NULL', 'true','false', 'FALSE', 'TRUE', '__LINE__', '__FILE__');
- //les caract�es qui d�imitent les mots clefs : la fin et le d�ut
- $begin_key_words=$end_key_words=array(
- '(', ')', '[', ']', '{', '}',
- "\n", "\t", "\r",
- ' ', '','=',
- '+','-','*','/',
- '!',';', '.',',',
- '<','>');
- //les carat�es color� apr� les \
- $quote_slash=array('n', 'r', 't', '0', '\'', '"');
- switch ($type){
- case 'text/x-java':
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['#=preproc']=true;
- $coloration['key words']=true;
- $coloration['function words']=true;
- $coloration['quotes']=true;
- $coloration['doublequotes']=true;
- $coloration['comment slash']=true;
- $coloration['const']=true;
- //mots cleds
- $key_words[]='unsigned';
- $key_words[]='signed';
- $key_words[]='char';
- $key_words[]='struct';
- $key_words[]='void';
- $key_words[]='class';
- $key_words[]='String';
- $key_words[]='Graphics';
- $key_words[]='Color';
- $key_words[]='buttun';
- $key_words[]='import';
- $key_words[]='implements';
- $key_words[]='extends';
- $key_words[]='static';
- $key_words[]='try';
- $key_words[]='catch';
- $key_words[]='throw';
- $key_words[]='public';
- $key_words[]='private';
- //fonctions
- $function_words[]='drawLine';
- $function_words[]='fillRect';
- $function_words[]='drawRect';
- $function_words[]='drawOval';
- $function_words[]='fillOval';
- break;
- case 'text/x-python':
- $coloration['#=comment']=true;
- $key_words[]='def';
- $key_words[]='global';
- $key_words[]='not';
- $key_words[]='found';
- $key_words[]='in';
- $key_words[]='elif';
- $key_words[]='import';
- $key_words[]='try';
- $key_words[]='catch';
- $key_words[]='throw';
- $function_words[]='print';
- $function_words[]='gtk';
- $const_words[]='None';
- $coloration['key words']=true;
- $coloration['function words']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['const']=true;
- $coloration['doublequotes']=true;
- break;
- case 'application/x-shellscript':
- $coloration['#=comment']=true;
- $coloration['magic quotes']=true;
- $coloration['dolar var']=true;
- $coloration['key words']=true;
- $coloration['function words']=true;
- $coloration['quotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['no_quotes_slash']=true;
- $coloration['const']=true;
- $coloration['doublequotes']=true;
- //mots clefs
- $key_words[]='fi';
- $key_words[]='then';
- $key_words[]='echo';
- $key_words[]='eval';
- $key_words[]='not';
- $key_words[]='esac';
- $key_words[]='export';
- $key_words[]='source';
- $key_words[]='local';
- $key_words[]='xargs';
- $key_words[]='in';
- $key_words[]='continue';
- $key_words[]='done';
- $key_words[]='default';
- $key_words[]='elif';
- $key_words[]='eq';
- $key_words[]='end';
- $key_words[]='sub';
- //fonctions
- $function_words[]='date';
- $function_words[]='cd';
- $function_words[]='grep';
- $function_words[]='cat';
- $function_words[]='ls';
- $function_words[]='chmod';
- $function_words[]='chown';
- $function_words[]='chgrp';
- $function_words[]='alias';
- $function_words[]='su';
- $function_words[]='mv';
- $function_words[]='cp';
- $function_words[]='sed';
- $function_words[]='mkdir';
- $function_words[]='rename';
- $function_words[]='copy';
- $function_words[]='move';
- $function_words[]='sudo';
- $function_words[]='complete';
- $function_words[]='printf';
- $function_words[]='egrep';
- $function_words[]='sort';
- $function_words[]='awk';
- $function_words[]='print';
- $function_words[]='ruby';
- $function_words[]='type';
- break;
- case 'text/x-tcl':
- //du tcl (tcl.tk, ou des plugins... test�uniquement sur des plugins pour X-Chat)
- //exemple : amsn est fait en tcl
- //les m�hodes de coloration
- $coloration['#=comment']=true;
- $coloration['dolar var']=true;
- $coloration['key words']=true;
- $coloration['doublequotes']=true;
- $coloration['magic quotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['no_quotes_slash']=true;
- $coloration['const']=true;
- $coloration['function words']=true;
- $coloration['const']=true;
- //les mots clefs ajout�
- $key_words[]='on';
- $key_words[]='set';
- $key_words[]='alias';
- $key_words[]='proc';
- $key_words[]='try';
- $key_words[]='catch';
- $key_words[]='throw';
- //les constantes
- $const_words[]='PRIVMSG';
- $const_words[]='XC_CHANVOICE';
- $const_words[]='XC_CHANOP';
- $const_words[]='XC_CHANHOP';
- $const_words[]='XC_CHANDEVOICE';
- $const_words[]='XC_CHANDEOP';
- $const_words[]='XC_CHANDEHOP';
- //les fonctions
- $function_words[]='lindex';
- $function_words[]='regexp';
- $function_words[]='print';
- $function_words[]='raw';
- $function_words[]='complete';
- $function_words[]='string';
- $function_words[]='length';
- $function_words[]='join';
- $function_words[]='list';
- $function_words[]='range';
- $function_words[]='command';
- $function_words[]='match';
- $function_words[]='expr';
- $function_words[]='file';
- $function_words[]='size';
- $function_words[]='open';
- $function_words[]='read';
- $function_words[]='close';
- $function_words[]='split';
- $function_words[]='llength';
- $function_words[]='end';
- $function_words[]='JOIN';
- $function_words[]='ID';
- $function_words[]='GHOST';
- $function_words[]='PART';
- $function_words[]='NICK';
- break;
- case 'application/x-perl':
- //du perl (cgi ou perl classique)
- //param�res
- $coloration['quotes_double_slash']=true;
- $coloration['#=comment']=true;
- $coloration['magic quotes']=true;
- $coloration['dolar var']=true;
- $coloration['key words']=true;
- $coloration['quotes']=true;
- $coloration['doublequotes']=true;
- $coloration['const']=true;
- $coloration['function words']=true;
- //mots clefs
- $key_words[]='each';
- $key_words[]='use';
- $key_words[]='my';
- $key_words[]='eq';
- $key_words[]='qw';
- //fonctions
- $function_words[]='sqrt';
- $function_words[]='printf';
- break;
- case 'application/x-httpd-php':
- case 'application/x-php':
- //du php (console, gtk ou serveur web)
- //param�res
- $coloration['quotes_double_slash']=true;
- $coloration['#=comment']=true;
- $coloration['magic quotes']=true;
- $coloration['dolar var']=true;
- $coloration['key words']=true;
- $coloration['function words']=true;
- $coloration['quotes']=true;
- $coloration['doublequotes']=true;
- $coloration['comment slash']=true;
- $coloration['const']=true;
- //mots clefs
- $key_words[]='function';
- $key_words[]='foreach';
- $key_words[]='echo';
- $key_words[]='as';
- //fonctions
- $function_words[]='each';
- $function_words[]='list';
- $function_words[]='isset';
- $function_words[]='array';
- $function_words[]='preg_replace';
- $function_words[]='array_filter';
- $function_words[]='print_r';
- $function_words[]='count';
- $function_words[]='array_merge';
- $function_words[]='in_array';
- $function_words[]='session_start';
- $function_words[]='mysql_select_db';
- $function_words[]='mysql_connect';
- $function_words[]='mysql_error';
- $function_words[]='mysql_query';
- $function_words[]='mysql_fetch_array';
- $function_words[]='strval';
- $function_words[]='intval';
- $function_words[]='floatval';
- $function_words[]='to_double';
- $function_words[]='fopen';
- $function_words[]='fclose';
- $function_words[]='file_exists';
- $function_words[]='is_dir';
- $function_words[]='is_file';
- $function_words[]='fgets';
- $function_words[]='fputs';
- $function_words[]='write';
- $function_words[]='feof';
- $function_words[]='mkdir';
- $function_words[]='array_rand';
- $function_words[]='sort';
- $function_words[]='mysql_num_rows';
- $function_words[]='mysql_fetch_assoc';
- $function_words[]='addslashes';
- $function_words[]='bin2hex';
- $function_words[]='chop';
- $function_words[]='chr';
- $function_words[]='ord';
- $function_words[]='explode';
- $function_words[]='implode';
- $function_words[]='file';
- $function_words[]='array_merge';
- $function_words[]='sleep';
- $function_words[]='print_r';
- $function_words[]='md5';
- $function_words[]='print';
- $function_words[]='printf';
- $function_words[]='striptags';
- $function_words[]='str_replace';
- $function_words[]='strtoupper';
- $function_words[]='strtolower';
- $function_words[]='substr';
- $function_words[]='preg';
- $function_words[]='ereg';
- $function_words[]='preg_split';
- $function_words[]='preg_match_all';
- $function_words[]='preg_match';
- $function_words[]='mail';
- $function_words[]='touch';
- $function_words[]='readdir';
- $function_words[]='opendir';
- $function_words[]='imageCreateFromJpeg';
- $function_words[]='imageCreateFromBmp';
- $function_words[]='imageCreateFromPng';
- $function_words[]='imageCreateFromGif';
- $function_words[]='imageString';
- $function_words[]='imageline';
- $function_words[]='imageJpeg';
- $function_words[]='imageBmp';
- $function_words[]='imageGif';
- $function_words[]='imagePng';
- break;
- case 'text/x-csrc':
- case 'text/x-chdr':
- case 'text/x-c++hdr':
- case 'text/x-c++src':
- //du C
- //param�res
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['#=preproc']=true;
- $coloration['key words']=true;
- $coloration['function words']=true;
- $coloration['quotes']=true;
- $coloration['doublequotes']=true;
- $coloration['comment slash']=true;
- $coloration['const']=true;
- //mots cleds
- $key_words[]='unsigned';
- $key_words[]='signed';
- $key_words[]='char';
- $key_words[]='struct';
- $key_words[]='void';
- $key_words[]='std::';
- $key_words[]='static';
- $key_words[]='try';
- $key_words[]='public';
- $key_words[]='private';
-
- //fonctions
- $function_words[]='malloc';
- $function_words[]='realloc';
- $function_words[]='sizeof';
- $function_words[]='printf';
- $function_words[]='sprintf';
- $function_words[]='free';
- $function_words[]='new';
- $function_words[]='exit';
- $function_words[]='fopen';
- $function_words[]='feof';
- $function_words[]='fread';
- $function_words[]='fputs';
- $function_words[]='fgets';
- break;
- case 'application/vnd.mozilla.xul+xml':
- case 'text/html':
- case 'application/xml':
- case 'text/xml':
- //du html, xml ou xul, (rss, svg, rdf...)
- $coloration['balises']=true;
- $coloration['doublequotes']=true;
- break;
- case 'text/css':
- //un fichier CSS
- $coloration['accolades']=true;
- $coloration[': to ;']=true;
- $coloration['comment slash']=true;
- break;
- case 'bas':
- //un fichier basic (Qbasic uniquement...)
- //param�res
- $coloration['doublequotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['key words']=true;
- //mots clefs
- $key_words[]='IF';
- $key_words[]='THEN';
- $key_words[]='ELSE';
- $key_words[]='FOR';
- $key_words[]='TO';
- $key_words[]='NEXT';
- $key_words[]='ELSE';
- $key_words[]='SCREEN';
- $key_words[]='LINE';
- $key_words[]='CIRCLE';
- $key_words[]='PRINT';
- $key_words[]='TIMER';
- $key_words[]='RANDOMIZE';
- $key_words[]='CLS';
- $key_words[]='SLEEP';
- $key_words[]='CLEAR';
- $key_words[]='INT';
- $key_words[]='RND';
- $key_words[]='INKEY$';
- $key_words[]='CASE';
- $key_words[]='CHR$';
- $key_words[]='GOTO';
- $key_words[]='END';
- $key_words[]='SELECT';
- $key_words[]='DO';
- $key_words[]='LOOP';
- $key_words[]='LEN';
- $key_words[]='MID$';
- $key_words[]='LOCATE';
- break;
- case 'pov':
- //un fichier povray
- //param�res
- $coloration['comment slash']=true;
- $coloration['#=preproc']=true;
- $coloration['doublequotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['key words']=true;
- //mots clefs totalement redeffinis
- $key_words=array(
- 'global_settings',
- 'difference',
- 'texture',
- 'plane',
- 'assumed_gamma',
- 'photons',
- 'pigment',
- 'color',
- 'rgb',
- 'rgbft',
- 'scale',
- 'light_source',
- 'camera',
- 'location',
- 'perspective',
- 'look_at',
- 'rotate',
- 'translate',
- 'sphere',
- 'checker',
- 'finish',
- 'ambient',
- 'diffuse',
- 'specular',
- 'roughness',
- 'phong',
- 'interior',
- 'ior',
- 'dispersion'
- );
- break;
- case 'ini':
- //un fichier ini (test�avec php.ini)
- //param�res
- $coloration['comment slash']=true;
- $coloration['#=comment']=true;
- $coloration['doublequotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['key words']=true;
- //mots clefs totalement redefinis
- $key_words=array('true','false');
- break;
- case 'text/x-sql':
- //un fichier sql
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['comment slash']=true;
- $coloration['doublequotes']=true;
- $coloration['key words']=true;
- $coloration['function words']=true;
- //mots clefs totalement redeffinis.
- $key_words=array(
- 'INSERT',
- 'INTO',
- 'VALUES',
- 'CREATE',
- 'TABLE',
- 'SHOW',
- 'CREATE',
- 'COUNT',
- 'GROUP',
- 'SELECT',
- 'FROM',
- 'LEFT',
- 'INNER',
- 'JOIN',
- 'RIGHT',
- 'OUTER',
- 'RETURN',
- 'SHOW',
- 'FUNCTION',
- 'DETERMINISTIC',
- 'REAL',
- 'TEXT',
- 'INT',
- 'VARCHAR',
- 'CHAR',
- 'DELETE',
- 'WHERE',
- 'AND',
- 'OR',
- 'ON',
- 'ORDER',
- 'BY',
- 'MAX',
- 'MIN',
- 'SUM',
- 'SET'
- );
- //Les fonctions
- $function_words=array(
- 'REPLACE',
- 'DATE_FORMAT',
- 'LENGTH');
- break;
- case 'application/x-javascript':
- //un fichier javascript
- $coloration['quotes']=true;
- $coloration['doublequotes']=true;
- $coloration['quotes_double_slash']=true;
- $coloration['quotes_simple_slash']=true;
- $coloration['key words']=true;
- $coloration['const']=true;
- $coloration['function words']=true;
- //les fonctions
- $function_words[]='function';
- $function_words[]='var';
- $function_words[]='window';
- $function_words[]='document';
- $function_words[]='location';
- $function_words[]='href';
- $function_words[]='getElementById';
- $function_words[]='value';
- $function_words[]='prompt';
- $function_words[]='eval';
- $function_words[]='alert';
- $function_words[]='continue';
- $function_words[]='sumbmit';
- $function_words[]='regexp';
- $function_words[]='Math';
- $function_words[]='Array';
- $function_words[]='navigator';
- $function_words[]='history';
- $function_words[]='open';
- break;
- default:
- return 'Pas de coloration corespondante';
- break;
- }
- $var='';
- $texte=explode('
- ', $texte);
- $guillemets=0;
- $comment=false;
- $balise_open=false;
- $accolades_open=false;
- while (list ($a, $b)=each($texte)){
- $lignetraite=0;
- $b_old=$b;
- $length=strlen($b)+1;
- for ($i=0;$i<$length;$i++){
- if (isset($b{$i}))
- switch($b{$i}){
- case ':':
- if (false===$comment && $coloration[': to ;']){
- $pos=strpos(substr($b, $i), ';');
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="background-color:#07F;color:#FFF;">'.htmlentities(
- substr($b,$i,$pos)).'</span>';
- $i=$i+$pos;
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '{':
- if (false===$comment && $coloration['accolades'] && !$accolades_open){
- $accolades_open=true;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#0077FF;">';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '}':
- if (false===$comment && $coloration['accolades'] && $accolades_open===true){
- $i++;
- $accolades_open=false;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '</span>';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '<':
- if (false===$comment && $coloration['balises'] && $balise_open===false){
- $balise_open=true;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#07A;">';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '>':
- if (false===$comment && $coloration['balises'] && $balise_open==true){
- $balise_open=false;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite+1)).
- '</span>';
- $b=$b1.substr($b,$i+1);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '#';
- if (false===$comment && $coloration['#=comment']){
- if ($guillemets===0){
- $b=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#888">'.
- htmlentities(substr($b,$i)). '</span>';
- $i=strlen($b);
- $lignetraite=$i;
- }
- }else if ($coloration['#=preproc']){
- if ($guillemets===0){
- $b=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#080">'.
- htmlentities(substr($b,$i)). '</span>';
- $i=strlen($b);
- $lignetraite=$i;
- }
- }
- break;
- case '/';
- if ($guillemets===0 && $coloration['comment slash'] && $comment===false){
- if ($b{$i+1}==='/'){
- $b=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#888">'.htmlentities(
- substr($b,$i)). '</span>';
- $i=strlen($b);
- $lignetraite=$i;
- }else if ($b{$i+1}==='*'){
- $comment=true;
- $b1=substr($b,0,$lignetraite).htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#888;">';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- }
- break;
- case '*':
- if ($coloration['comment slash']===true &&
- $b{$i+1}==='/' &&
- $comment
- ){
- $i+=2;
- $comment=false;
- $b1=substr($b,0,$lignetraite).htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '</span>';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '$':
- if (
- $coloration['dolar var']===true && $comment===false && (
- ($guillemets!==1 && $coloration['magic quotes']===true) ||
- ($coloration['magic quotes']===false && $guillemets===0)
- )
- ){
- $j=0;
- while(
- preg_replace('/^[a-z0-9_]+$/i',
- '',
- substr($b,$i+1,$j))==''
- && $j<$length
- )
- $j++;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#007">'.htmlentities(
- substr($b,$i,$j)).'</span>';
- $b=$b1.substr($b,$i+$j);
- $i=strlen($b1);
- $lignetraite=$i;
- $i--;
- }
- break;
- case "\t":
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite+1)).
- '     ';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- break;
- case ' ':
- if ($b{$i-1}===' '){
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite+1)).' ';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- break;
- case '"':
- /*
- Si on a une ligne :
- " salut \"
- alors la chaine n'est pas termin�, alors que :
- "salut \\""
- alors la chaine est termin� !
- Donc, la v�ification du $b{$i-1}
- doit �re accompagn� de celle du $b{$i-2}
- */
- if ($coloration['doublequotes']===true && false===$comment){
- if (
- $guillemets===2 && (
- $b{$i-1}!=='\\' ||
- $b{$i-2}==='\\'
- )
- ){
- $guillemets=0;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite+1)).
- '</span> ';
- $b=$b1.substr($b,$i+1);
- $i=strlen($b1)-1;
- $lignetraite=$i;
- }else if ($guillemets===0){
- $guillemets=2;
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#7F0;">';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- }
- break;
- case '\'':
- if (false===$comment && $coloration['quotes']===true){
- if ($guillemets==1 && $b{$i-1}!=='\\'){
- $guillemets=0;
- $b1=substr($b,0,$lignetraite).htmlentities(
- substr($b,$lignetraite,$i-$lignetraite+1)).'</span>';
- $b=$b1.substr($b,$i+1);
- $i=strlen($b1);
- $lignetraite=$i;
- }else if ($guillemets==0){
- $guillemets=1;
- $b1=substr($b,0,$lignetraite).htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#F00;">';
- $b=$b1.substr($b,$i);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- }
- break;
- case '\\':
- if (
- !$comment
- && in_array($b{$i+1}, $quote_slash)
- && (
- ($guillemets===1 && $coloration['quotes_simple_slash']===true) ||
- ($guillemets===2 && $coloration['quotes_double_slash']===true) ||
- ($guillemets===0 && $coloration['no_quotes_slash']===true)
- )
- ){
- $i++;
- $lignetraite++;
- $b1=substr($b,0,$lignetraite).'<span style="color:F07;">'.htmlentities(
- '\\'.$b{$i}).'</span>';
- $b=$b1.substr($b,$i+1);
- $i=strlen($b1);
- $lignetraite=$i;
- $i--;
- }
- break;
- default:
- if (
- (
- $coloration['key words']===true ||
- $coloration['function words']===true
- ) &&
- $guillemets===0 &&
- $comment===false &&
- $guillemets===0)
- {
- $j=false;
- if ($coloration['key words']===true){
- reset($key_words);
- while (list($m, $k)=each($key_words)){
- //foreach ($key_words as $k){
- $len=strlen($k);
- if (isset($b{$i-1})){
- if (
- strtolower(substr($b,$i,$len))==strtolower($k)
- && in_array($b{$i+$len}, $end_key_words)
- && in_array($b{$i-1}, $begin_key_words)
- ){
- $j=$len;
- $color='AA0';
- break;
- }
- }else{
- if (
- strtolower(substr($b,$i,$len))==strtolower($k)
- && in_array($b{$i+$len}, $end_key_words)
- ){
- $j=$len;
- $color='AA0';
- break;
- }
- }
- }
- }
- if ($coloration['const']===true && $j===false){
- reset($const_words);
- while (list($m, $k)=each($const_words)){
- //foreach ($key_words as $k){
- $len=strlen($k);
- if (
- strtolower(substr($b,$i,$len))==strtolower($k)
- && in_array($b{$i+$len}, $end_key_words)
- && in_array($b{$i-1}, $begin_key_words)
- ){
- $j=$len;
- $color='0A0';
- break;
- }
- }
- }
- if ($coloration['function words']===true && $j===false){
- reset($function_words);
- while (list($m, $k)=each($function_words)){
- //foreach ($key_words as $k){
- $len=strlen($k);
- if (
- strtolower(substr($b,$i,$len))==strtolower($k)
- && in_array($b{$i+$len}, $end_key_words)
- && (( $i-1>0 &&
- in_array($b{$i-1}, $begin_key_words))
- || $i-1<0)
- ){
- $j=$len;
- $color='0AD';
- break;
- }
- }
- }
- if ($j!==false){
- $b1=substr($b,0,$lignetraite).
- htmlentities(
- substr($b,$lignetraite,$i-$lignetraite)).
- '<span style="color:#'.$color.';">'.htmlentities(
- substr($b,$i,$j)).'</span>';
- $b=$b1.substr($b,$i+$j);
- $i=strlen($b1);
- $lignetraite=$i;
- }
- }
- break;
- }
- if ($b!==$b_old){
- $b_old=$b;
- $length=strlen($b)+1;
- }
- }
- $b=substr($b,0,$lignetraite).htmlentities(substr($b,$lignetraite));
- $n=($a%2==0)?1:2;
- $var.='<span class="ligne'.$n.'">'.($a+1).'</span> '.$b.'<br />
- ';
- }
- return $var;
- }
-
- ?>
<?php
/*
Ce fichier permet de colorer des codes sources ou des fichiers poss�ant un formatage particulier :
Cette coloration synthaxique g�e les fichiers :
-C
-C++
-PHP
-SQL
-XUL
-CSS
-HTML
-XML
-BAS
-les fichiers de conf (ini)
-javascript
-povray
-python
-java
Faite dans le but de simplifier la lecture des sources sur mon blog,
r�tilis� ensuite pour le gestionnaire de past.
*/
//toutes les colorations possibles
$colorations=array(
'pas de coloration'=>'txt',
'perl'=>'application/x-perl',
'php'=>'application/x-httpd-php',
'C'=>'text/x-csrc',
'C++'=>'text/x-c++src',
'XUL'=>'application/vnd.mozilla.xul+xml',
'html'=>'text/html',
'XML'=>'text/xml',
'CSS'=>'text/css',
'SQL'=>'text/x-sql',
'javascript'=>'application/x-javascript',
'bas'=>'bas',
'INI'=>'ini',
'povray'=>'pov',
'tcl'=>'text/x-tcl',
'bash'=>'application/x-shellscript',
'python'=>'text/x-python',
'java'=>'text/x-java'
);
$options_colorations='';
$li_colorations='';
foreach ($colorations as $a=>$b){
$options_colorations.='<option value="'.$a.'">'.$a.'</option>';
$li_colorations.='<li>'.$a.'</li>';
}
function coloreCallback($match){
global $colorations;
if (isset($colorations[$match[1]])){
return '<fieldset>
<legend>Code source : '.$match[1].'</legend>
'.colore(html_entity_decode(str_replace('<br />','
',$match[2])), $colorations[$match[1]]).'
</fieldset>';
}else{
return '<fieldset>
<legend>Code source : '.$match[1].'</legend>
'.colore(html_entity_decode(str_replace('<br />','
',$match[2])), 'txt').'
</fieldset>';
}
}
function colore($texte, $type){
if ($type=='txt') return nl2br(htmlentities(stripslashes($texte)));
//On d�lare les param�res par d�aut de la coloration.
$coloration=array();
//si les instructions pr�rocesseurs commencent par #
$coloration['#=preproc']=false;
//si les commentaires commencent par #
$coloration['#=comment']=false;
//si on a le ph�om�e des magik quotes (perl et php)
$coloration['magic quotes']=false;
//si les variables commencent par $
$coloration['dolar var']=false;
//les mots clefs
$coloration['key words']=false;
//les fonctions / instructions...
$coloration['function words']=false;
//les quotes sont support�s
$coloration['quotes']=false;
//les slashs servent pour faire des commentaires
$coloration['comment slash']=false;
//langage de balises
$coloration['balises']=false;
//pour le CSS : les accolages en bold
$coloration['accolades']=false;
//pour le CSS, les attributs se trouvent entre les caract�es : et ;
$coloration[': to ;']=false;
//si on peut mettre des \n dans des doubles guillemets
$coloration['quotes_double_slash']=false;
//si on peut mettre des \n dans des simples guillemets
$coloration['quotes_simple_slash']=false;
//si on peut mettre des \n sans guillemets (tcl ou bash)
$coloration['no_quotes_slash']=false;
//les constantes comme NULL, true ou false
$coloration['const']=false;
//le fait qu'on prenne en compte les doubles quotes
$coloration['doublequotes']=false;
//let motc clefs par d�aut
$key_words=array(
'if', 'break', 'else', 'die', 'default', 'case',
'switch', 'or', 'xor', 'and', 'not', 'exit', 'while', 'return',
'int', 'bool', 'for', 'class', 'new', 'do');
$function_words=array();
$const_words=array('NULL', 'true','false', 'FALSE', 'TRUE', '__LINE__', '__FILE__');
//les caract�es qui d�imitent les mots clefs : la fin et le d�ut
$begin_key_words=$end_key_words=array(
'(', ')', '[', ']', '{', '}',
"\n", "\t", "\r",
' ', '','=',
'+','-','*','/',
'!',';', '.',',',
'<','>');
//les carat�es color� apr� les \
$quote_slash=array('n', 'r', 't', '0', '\'', '"');
switch ($type){
case 'text/x-java':
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['#=preproc']=true;
$coloration['key words']=true;
$coloration['function words']=true;
$coloration['quotes']=true;
$coloration['doublequotes']=true;
$coloration['comment slash']=true;
$coloration['const']=true;
//mots cleds
$key_words[]='unsigned';
$key_words[]='signed';
$key_words[]='char';
$key_words[]='struct';
$key_words[]='void';
$key_words[]='class';
$key_words[]='String';
$key_words[]='Graphics';
$key_words[]='Color';
$key_words[]='buttun';
$key_words[]='import';
$key_words[]='implements';
$key_words[]='extends';
$key_words[]='static';
$key_words[]='try';
$key_words[]='catch';
$key_words[]='throw';
$key_words[]='public';
$key_words[]='private';
//fonctions
$function_words[]='drawLine';
$function_words[]='fillRect';
$function_words[]='drawRect';
$function_words[]='drawOval';
$function_words[]='fillOval';
break;
case 'text/x-python':
$coloration['#=comment']=true;
$key_words[]='def';
$key_words[]='global';
$key_words[]='not';
$key_words[]='found';
$key_words[]='in';
$key_words[]='elif';
$key_words[]='import';
$key_words[]='try';
$key_words[]='catch';
$key_words[]='throw';
$function_words[]='print';
$function_words[]='gtk';
$const_words[]='None';
$coloration['key words']=true;
$coloration['function words']=true;
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['const']=true;
$coloration['doublequotes']=true;
break;
case 'application/x-shellscript':
$coloration['#=comment']=true;
$coloration['magic quotes']=true;
$coloration['dolar var']=true;
$coloration['key words']=true;
$coloration['function words']=true;
$coloration['quotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['no_quotes_slash']=true;
$coloration['const']=true;
$coloration['doublequotes']=true;
//mots clefs
$key_words[]='fi';
$key_words[]='then';
$key_words[]='echo';
$key_words[]='eval';
$key_words[]='not';
$key_words[]='esac';
$key_words[]='export';
$key_words[]='source';
$key_words[]='local';
$key_words[]='xargs';
$key_words[]='in';
$key_words[]='continue';
$key_words[]='done';
$key_words[]='default';
$key_words[]='elif';
$key_words[]='eq';
$key_words[]='end';
$key_words[]='sub';
//fonctions
$function_words[]='date';
$function_words[]='cd';
$function_words[]='grep';
$function_words[]='cat';
$function_words[]='ls';
$function_words[]='chmod';
$function_words[]='chown';
$function_words[]='chgrp';
$function_words[]='alias';
$function_words[]='su';
$function_words[]='mv';
$function_words[]='cp';
$function_words[]='sed';
$function_words[]='mkdir';
$function_words[]='rename';
$function_words[]='copy';
$function_words[]='move';
$function_words[]='sudo';
$function_words[]='complete';
$function_words[]='printf';
$function_words[]='egrep';
$function_words[]='sort';
$function_words[]='awk';
$function_words[]='print';
$function_words[]='ruby';
$function_words[]='type';
break;
case 'text/x-tcl':
//du tcl (tcl.tk, ou des plugins... test�uniquement sur des plugins pour X-Chat)
//exemple : amsn est fait en tcl
//les m�hodes de coloration
$coloration['#=comment']=true;
$coloration['dolar var']=true;
$coloration['key words']=true;
$coloration['doublequotes']=true;
$coloration['magic quotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['no_quotes_slash']=true;
$coloration['const']=true;
$coloration['function words']=true;
$coloration['const']=true;
//les mots clefs ajout�
$key_words[]='on';
$key_words[]='set';
$key_words[]='alias';
$key_words[]='proc';
$key_words[]='try';
$key_words[]='catch';
$key_words[]='throw';
//les constantes
$const_words[]='PRIVMSG';
$const_words[]='XC_CHANVOICE';
$const_words[]='XC_CHANOP';
$const_words[]='XC_CHANHOP';
$const_words[]='XC_CHANDEVOICE';
$const_words[]='XC_CHANDEOP';
$const_words[]='XC_CHANDEHOP';
//les fonctions
$function_words[]='lindex';
$function_words[]='regexp';
$function_words[]='print';
$function_words[]='raw';
$function_words[]='complete';
$function_words[]='string';
$function_words[]='length';
$function_words[]='join';
$function_words[]='list';
$function_words[]='range';
$function_words[]='command';
$function_words[]='match';
$function_words[]='expr';
$function_words[]='file';
$function_words[]='size';
$function_words[]='open';
$function_words[]='read';
$function_words[]='close';
$function_words[]='split';
$function_words[]='llength';
$function_words[]='end';
$function_words[]='JOIN';
$function_words[]='ID';
$function_words[]='GHOST';
$function_words[]='PART';
$function_words[]='NICK';
break;
case 'application/x-perl':
//du perl (cgi ou perl classique)
//param�res
$coloration['quotes_double_slash']=true;
$coloration['#=comment']=true;
$coloration['magic quotes']=true;
$coloration['dolar var']=true;
$coloration['key words']=true;
$coloration['quotes']=true;
$coloration['doublequotes']=true;
$coloration['const']=true;
$coloration['function words']=true;
//mots clefs
$key_words[]='each';
$key_words[]='use';
$key_words[]='my';
$key_words[]='eq';
$key_words[]='qw';
//fonctions
$function_words[]='sqrt';
$function_words[]='printf';
break;
case 'application/x-httpd-php':
case 'application/x-php':
//du php (console, gtk ou serveur web)
//param�res
$coloration['quotes_double_slash']=true;
$coloration['#=comment']=true;
$coloration['magic quotes']=true;
$coloration['dolar var']=true;
$coloration['key words']=true;
$coloration['function words']=true;
$coloration['quotes']=true;
$coloration['doublequotes']=true;
$coloration['comment slash']=true;
$coloration['const']=true;
//mots clefs
$key_words[]='function';
$key_words[]='foreach';
$key_words[]='echo';
$key_words[]='as';
//fonctions
$function_words[]='each';
$function_words[]='list';
$function_words[]='isset';
$function_words[]='array';
$function_words[]='preg_replace';
$function_words[]='array_filter';
$function_words[]='print_r';
$function_words[]='count';
$function_words[]='array_merge';
$function_words[]='in_array';
$function_words[]='session_start';
$function_words[]='mysql_select_db';
$function_words[]='mysql_connect';
$function_words[]='mysql_error';
$function_words[]='mysql_query';
$function_words[]='mysql_fetch_array';
$function_words[]='strval';
$function_words[]='intval';
$function_words[]='floatval';
$function_words[]='to_double';
$function_words[]='fopen';
$function_words[]='fclose';
$function_words[]='file_exists';
$function_words[]='is_dir';
$function_words[]='is_file';
$function_words[]='fgets';
$function_words[]='fputs';
$function_words[]='write';
$function_words[]='feof';
$function_words[]='mkdir';
$function_words[]='array_rand';
$function_words[]='sort';
$function_words[]='mysql_num_rows';
$function_words[]='mysql_fetch_assoc';
$function_words[]='addslashes';
$function_words[]='bin2hex';
$function_words[]='chop';
$function_words[]='chr';
$function_words[]='ord';
$function_words[]='explode';
$function_words[]='implode';
$function_words[]='file';
$function_words[]='array_merge';
$function_words[]='sleep';
$function_words[]='print_r';
$function_words[]='md5';
$function_words[]='print';
$function_words[]='printf';
$function_words[]='striptags';
$function_words[]='str_replace';
$function_words[]='strtoupper';
$function_words[]='strtolower';
$function_words[]='substr';
$function_words[]='preg';
$function_words[]='ereg';
$function_words[]='preg_split';
$function_words[]='preg_match_all';
$function_words[]='preg_match';
$function_words[]='mail';
$function_words[]='touch';
$function_words[]='readdir';
$function_words[]='opendir';
$function_words[]='imageCreateFromJpeg';
$function_words[]='imageCreateFromBmp';
$function_words[]='imageCreateFromPng';
$function_words[]='imageCreateFromGif';
$function_words[]='imageString';
$function_words[]='imageline';
$function_words[]='imageJpeg';
$function_words[]='imageBmp';
$function_words[]='imageGif';
$function_words[]='imagePng';
break;
case 'text/x-csrc':
case 'text/x-chdr':
case 'text/x-c++hdr':
case 'text/x-c++src':
//du C
//param�res
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['#=preproc']=true;
$coloration['key words']=true;
$coloration['function words']=true;
$coloration['quotes']=true;
$coloration['doublequotes']=true;
$coloration['comment slash']=true;
$coloration['const']=true;
//mots cleds
$key_words[]='unsigned';
$key_words[]='signed';
$key_words[]='char';
$key_words[]='struct';
$key_words[]='void';
$key_words[]='std::';
$key_words[]='static';
$key_words[]='try';
$key_words[]='public';
$key_words[]='private';
//fonctions
$function_words[]='malloc';
$function_words[]='realloc';
$function_words[]='sizeof';
$function_words[]='printf';
$function_words[]='sprintf';
$function_words[]='free';
$function_words[]='new';
$function_words[]='exit';
$function_words[]='fopen';
$function_words[]='feof';
$function_words[]='fread';
$function_words[]='fputs';
$function_words[]='fgets';
break;
case 'application/vnd.mozilla.xul+xml':
case 'text/html':
case 'application/xml':
case 'text/xml':
//du html, xml ou xul, (rss, svg, rdf...)
$coloration['balises']=true;
$coloration['doublequotes']=true;
break;
case 'text/css':
//un fichier CSS
$coloration['accolades']=true;
$coloration[': to ;']=true;
$coloration['comment slash']=true;
break;
case 'bas':
//un fichier basic (Qbasic uniquement...)
//param�res
$coloration['doublequotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['key words']=true;
//mots clefs
$key_words[]='IF';
$key_words[]='THEN';
$key_words[]='ELSE';
$key_words[]='FOR';
$key_words[]='TO';
$key_words[]='NEXT';
$key_words[]='ELSE';
$key_words[]='SCREEN';
$key_words[]='LINE';
$key_words[]='CIRCLE';
$key_words[]='PRINT';
$key_words[]='TIMER';
$key_words[]='RANDOMIZE';
$key_words[]='CLS';
$key_words[]='SLEEP';
$key_words[]='CLEAR';
$key_words[]='INT';
$key_words[]='RND';
$key_words[]='INKEY$';
$key_words[]='CASE';
$key_words[]='CHR$';
$key_words[]='GOTO';
$key_words[]='END';
$key_words[]='SELECT';
$key_words[]='DO';
$key_words[]='LOOP';
$key_words[]='LEN';
$key_words[]='MID$';
$key_words[]='LOCATE';
break;
case 'pov':
//un fichier povray
//param�res
$coloration['comment slash']=true;
$coloration['#=preproc']=true;
$coloration['doublequotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['key words']=true;
//mots clefs totalement redeffinis
$key_words=array(
'global_settings',
'difference',
'texture',
'plane',
'assumed_gamma',
'photons',
'pigment',
'color',
'rgb',
'rgbft',
'scale',
'light_source',
'camera',
'location',
'perspective',
'look_at',
'rotate',
'translate',
'sphere',
'checker',
'finish',
'ambient',
'diffuse',
'specular',
'roughness',
'phong',
'interior',
'ior',
'dispersion'
);
break;
case 'ini':
//un fichier ini (test�avec php.ini)
//param�res
$coloration['comment slash']=true;
$coloration['#=comment']=true;
$coloration['doublequotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['key words']=true;
//mots clefs totalement redefinis
$key_words=array('true','false');
break;
case 'text/x-sql':
//un fichier sql
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['comment slash']=true;
$coloration['doublequotes']=true;
$coloration['key words']=true;
$coloration['function words']=true;
//mots clefs totalement redeffinis.
$key_words=array(
'INSERT',
'INTO',
'VALUES',
'CREATE',
'TABLE',
'SHOW',
'CREATE',
'COUNT',
'GROUP',
'SELECT',
'FROM',
'LEFT',
'INNER',
'JOIN',
'RIGHT',
'OUTER',
'RETURN',
'SHOW',
'FUNCTION',
'DETERMINISTIC',
'REAL',
'TEXT',
'INT',
'VARCHAR',
'CHAR',
'DELETE',
'WHERE',
'AND',
'OR',
'ON',
'ORDER',
'BY',
'MAX',
'MIN',
'SUM',
'SET'
);
//Les fonctions
$function_words=array(
'REPLACE',
'DATE_FORMAT',
'LENGTH');
break;
case 'application/x-javascript':
//un fichier javascript
$coloration['quotes']=true;
$coloration['doublequotes']=true;
$coloration['quotes_double_slash']=true;
$coloration['quotes_simple_slash']=true;
$coloration['key words']=true;
$coloration['const']=true;
$coloration['function words']=true;
//les fonctions
$function_words[]='function';
$function_words[]='var';
$function_words[]='window';
$function_words[]='document';
$function_words[]='location';
$function_words[]='href';
$function_words[]='getElementById';
$function_words[]='value';
$function_words[]='prompt';
$function_words[]='eval';
$function_words[]='alert';
$function_words[]='continue';
$function_words[]='sumbmit';
$function_words[]='regexp';
$function_words[]='Math';
$function_words[]='Array';
$function_words[]='navigator';
$function_words[]='history';
$function_words[]='open';
break;
default:
return 'Pas de coloration corespondante';
break;
}
$var='';
$texte=explode('
', $texte);
$guillemets=0;
$comment=false;
$balise_open=false;
$accolades_open=false;
while (list ($a, $b)=each($texte)){
$lignetraite=0;
$b_old=$b;
$length=strlen($b)+1;
for ($i=0;$i<$length;$i++){
if (isset($b{$i}))
switch($b{$i}){
case ':':
if (false===$comment && $coloration[': to ;']){
$pos=strpos(substr($b, $i), ';');
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="background-color:#07F;color:#FFF;">'.htmlentities(
substr($b,$i,$pos)).'</span>';
$i=$i+$pos;
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '{':
if (false===$comment && $coloration['accolades'] && !$accolades_open){
$accolades_open=true;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#0077FF;">';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '}':
if (false===$comment && $coloration['accolades'] && $accolades_open===true){
$i++;
$accolades_open=false;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'</span>';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '<':
if (false===$comment && $coloration['balises'] && $balise_open===false){
$balise_open=true;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#07A;">';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '>':
if (false===$comment && $coloration['balises'] && $balise_open==true){
$balise_open=false;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite+1)).
'</span>';
$b=$b1.substr($b,$i+1);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '#';
if (false===$comment && $coloration['#=comment']){
if ($guillemets===0){
$b=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#888">'.
htmlentities(substr($b,$i)). '</span>';
$i=strlen($b);
$lignetraite=$i;
}
}else if ($coloration['#=preproc']){
if ($guillemets===0){
$b=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#080">'.
htmlentities(substr($b,$i)). '</span>';
$i=strlen($b);
$lignetraite=$i;
}
}
break;
case '/';
if ($guillemets===0 && $coloration['comment slash'] && $comment===false){
if ($b{$i+1}==='/'){
$b=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#888">'.htmlentities(
substr($b,$i)). '</span>';
$i=strlen($b);
$lignetraite=$i;
}else if ($b{$i+1}==='*'){
$comment=true;
$b1=substr($b,0,$lignetraite).htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#888;">';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
}
break;
case '*':
if ($coloration['comment slash']===true &&
$b{$i+1}==='/' &&
$comment
){
$i+=2;
$comment=false;
$b1=substr($b,0,$lignetraite).htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'</span>';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '$':
if (
$coloration['dolar var']===true && $comment===false && (
($guillemets!==1 && $coloration['magic quotes']===true) ||
($coloration['magic quotes']===false && $guillemets===0)
)
){
$j=0;
while(
preg_replace('/^[a-z0-9_]+$/i',
'',
substr($b,$i+1,$j))==''
&& $j<$length
)
$j++;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#007">'.htmlentities(
substr($b,$i,$j)).'</span>';
$b=$b1.substr($b,$i+$j);
$i=strlen($b1);
$lignetraite=$i;
$i--;
}
break;
case "\t":
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite+1)).
'     ';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
break;
case ' ':
if ($b{$i-1}===' '){
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite+1)).' ';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
break;
case '"':
/*
Si on a une ligne :
" salut \"
alors la chaine n'est pas termin�, alors que :
"salut \\""
alors la chaine est termin� !
Donc, la v�ification du $b{$i-1}
doit �re accompagn� de celle du $b{$i-2}
*/
if ($coloration['doublequotes']===true && false===$comment){
if (
$guillemets===2 && (
$b{$i-1}!=='\\' ||
$b{$i-2}==='\\'
)
){
$guillemets=0;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite+1)).
'</span> ';
$b=$b1.substr($b,$i+1);
$i=strlen($b1)-1;
$lignetraite=$i;
}else if ($guillemets===0){
$guillemets=2;
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#7F0;">';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
}
break;
case '\'':
if (false===$comment && $coloration['quotes']===true){
if ($guillemets==1 && $b{$i-1}!=='\\'){
$guillemets=0;
$b1=substr($b,0,$lignetraite).htmlentities(
substr($b,$lignetraite,$i-$lignetraite+1)).'</span>';
$b=$b1.substr($b,$i+1);
$i=strlen($b1);
$lignetraite=$i;
}else if ($guillemets==0){
$guillemets=1;
$b1=substr($b,0,$lignetraite).htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#F00;">';
$b=$b1.substr($b,$i);
$i=strlen($b1);
$lignetraite=$i;
}
}
break;
case '\\':
if (
!$comment
&& in_array($b{$i+1}, $quote_slash)
&& (
($guillemets===1 && $coloration['quotes_simple_slash']===true) ||
($guillemets===2 && $coloration['quotes_double_slash']===true) ||
($guillemets===0 && $coloration['no_quotes_slash']===true)
)
){
$i++;
$lignetraite++;
$b1=substr($b,0,$lignetraite).'<span style="color:F07;">'.htmlentities(
'\\'.$b{$i}).'</span>';
$b=$b1.substr($b,$i+1);
$i=strlen($b1);
$lignetraite=$i;
$i--;
}
break;
default:
if (
(
$coloration['key words']===true ||
$coloration['function words']===true
) &&
$guillemets===0 &&
$comment===false &&
$guillemets===0)
{
$j=false;
if ($coloration['key words']===true){
reset($key_words);
while (list($m, $k)=each($key_words)){
//foreach ($key_words as $k){
$len=strlen($k);
if (isset($b{$i-1})){
if (
strtolower(substr($b,$i,$len))==strtolower($k)
&& in_array($b{$i+$len}, $end_key_words)
&& in_array($b{$i-1}, $begin_key_words)
){
$j=$len;
$color='AA0';
break;
}
}else{
if (
strtolower(substr($b,$i,$len))==strtolower($k)
&& in_array($b{$i+$len}, $end_key_words)
){
$j=$len;
$color='AA0';
break;
}
}
}
}
if ($coloration['const']===true && $j===false){
reset($const_words);
while (list($m, $k)=each($const_words)){
//foreach ($key_words as $k){
$len=strlen($k);
if (
strtolower(substr($b,$i,$len))==strtolower($k)
&& in_array($b{$i+$len}, $end_key_words)
&& in_array($b{$i-1}, $begin_key_words)
){
$j=$len;
$color='0A0';
break;
}
}
}
if ($coloration['function words']===true && $j===false){
reset($function_words);
while (list($m, $k)=each($function_words)){
//foreach ($key_words as $k){
$len=strlen($k);
if (
strtolower(substr($b,$i,$len))==strtolower($k)
&& in_array($b{$i+$len}, $end_key_words)
&& (( $i-1>0 &&
in_array($b{$i-1}, $begin_key_words))
|| $i-1<0)
){
$j=$len;
$color='0AD';
break;
}
}
}
if ($j!==false){
$b1=substr($b,0,$lignetraite).
htmlentities(
substr($b,$lignetraite,$i-$lignetraite)).
'<span style="color:#'.$color.';">'.htmlentities(
substr($b,$i,$j)).'</span>';
$b=$b1.substr($b,$i+$j);
$i=strlen($b1);
$lignetraite=$i;
}
}
break;
}
if ($b!==$b_old){
$b_old=$b;
$length=strlen($b)+1;
}
}
$b=substr($b,0,$lignetraite).htmlentities(substr($b,$lignetraite));
$n=($a%2==0)?1:2;
$var.='<span class="ligne'.$n.'">'.($a+1).'</span> '.$b.'<br />
';
}
return $var;
}
?>
Sources du même auteur
Sources de la même categorie
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Principe de la coloration syntaxique [ par Teclis01 ]
Voilà en fait j'aurais aimé savoir comment on fait de la coloration syntaxique ...Le fait est que a première vu il faut faire une etude de cas et fair
Probleme : Coloration syntaxique Dreamweaver [ par skab ]
Bonjour jj'ai un petit souci fort désagréable, la coloration syntaxique a disparu comme ca sans rien ds dreamweaver, j'ai beau reinstaller
Cryptage des sources PHP [ par Will28 ]
Bonjour, je voulais savoir si quelqu'un pouvait me renseigner sur le cryptage des sources PHP, et plus spécialement sur les produit Zend.En
Cours en ligne ! [ par Zart ]
J'ai fait un truc de consultation de codes sources en ligne : http://traaaz.free.fr/cours/ pour des cours de web en gros !!! En fait j'ai assemblé
[INFO ADMIN] Nouveauté sur les sources [ par malalam ]
Salut tout le monde :-)Il y a une petite nouveauté sur les sources : la possibilité d'ajouter des mots clefs associés.C'est un ajout de
récupéré le code sources d'une page [ par max201 ]
Salut,Est-ce que quelqu'un sait comment je peut récupéré le code sources d'une page php, attention je dis bien PHP. J'aimerais réc
comment est hébegé CodeS-SourceS ? [ par fyav ]
Bonjour à tous, au vu du très bons fonctionnement des sites de Codes-Sources, je souhaiterais savoir, si c'est pas top secret, comment est f
recherche code sources !!! [ par nebilphp ]
Salut a tous , voila je suis en train de me faire un petit site web perso , j'ai appris comme beaucoup seul , mais la je cale je cherche une p
Pitier [ par yoman64 ]
Venez déposer vos sources:www.php-kode.fr.st (VB,c++,php) SVP ,pitier juste une source , ya que 12 sources en tout sur le site dont 7 de moi :( et seu
Recherche Programmeur PHP Bénévole [ par wbr ]
Bonjour. Vu que mes capacitées côté php sont TRÈS médiocres, et que la dernière offre que j'ai eu pour ma demande était de 210euros, je recherche dése
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|