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
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|