colorisation de syntaxe
Posté : 15 juin 2008, 12:17
Bonjour,
Voilà j'utilise ce code pour colorer mon code php:
Et dans ce code il y a un lien qui vas vers php.net mais le problème c'est que les fonctions ne s'écrive pas pareil dans l'url.
Exemple: pour preg_match_all le lien est http://fr3.php.net/manual/fr/function.p ... ch-all.php
Donc il faut remplacer les _ par - mais juste dans le lien.
Et là je bloque.
J'ai éssayé quelque truc mais sans succès.
Donc si quelqu'un avait une idée.
Merci d'avance.
Voilà j'utilise ce code pour colorer mon code php:
function color_php($script)
{
$script = str_replace(""", '"', $script);
$script.= "\n";
for ($i = 0, $as = 0, $gs = 0, $gd = 0, $com = 0, $coms = 0, $tmp = '', $tmp2 = '', $tmp_script = '', $tmp2_script = ''; $i <= strlen($script); $i++)
{
if ($script[$i] == "\\")
{
$as = ($as == 1) ? 0 : 1;
}
if ($gd == 0 && $gs == 0 && $com == 0 && $coms == 0)
{
if ($script[$i] == "/" && $script[$i + 1] == "*")
{
// Commentaires en /* commentaire */
$tmp2_script = "<font color=#009900>";
$tmp = '';
$com = 1;
}
elseif ($script[$i] == "/" && $script[$i + 1] == "/")
{
// Commentaires en // commentaire
$tmp2_script = "<font color=#009900>";
$tmp = '';
$com = 1;
$coms = 1;
}
elseif ($script[$i] == "#")
{
// Commentaires en # commentaire
$tmp2_script = "<font color=#009900>";
$tmp = '';
$com = 1;
$coms = 1;
}
}
elseif ($gd == 0 && $gs == 0 && $com == 1)
{
if ($script[$i] == "*" && $script[$i + 1] == "/" && $coms == 0)
{
// Fin des commentaires en /* commentaire */
$tmp_script.= strip_tags($tmp)."*/</font>";
$i+= 2;
$com = 0;
}
elseif ($script[$i] == "\n" && $coms == 1)
{
// Fin des commentaires en // commentaire et # commentaire
$tmp_script.= strip_tags($tmp)."</font>\n";
$i+= 1;
$com = 0;
$coms = 0;
}
}
if ($com == 0 && $as == 0)
{
if ($script[$i] == "'" && $gd == 0)
{
// Guillements simples '
if ($gs == 0)
{
$tmp2_script = "<font color=#808080>";
$tmp = '';
$gs = 1;
}
else
{
$tmp_script.= strip_tags($tmp)."'</font>";
$tmp = '';
$i+= 1;
$gs = 0;
}
}
if ($script[$i] == '"' && $gs == 0)
{
// Guillements doubles "
if ($gd == 0)
{
$tmp2_script = "<font color=#808080>";
$tmp = '';
$gd = 1;
}
else
{
$tmp_script.= strip_tags($tmp).'"</font>';
$tmp = '';
$i+= 1;
$gd = 0;
}
}
}
if ($gd == 0 && $gs == 0 && $com == 0 && $coms == 0 && $i < strlen($script))
{
$tmp2.= $script[$i];
}
elseif ($tmp2 != "" || ($tmp2 != "" && $i >= strlen($script)))
{
$tmp2 = preg_replace('/([\(\)\{\}\+\*%\/\=~!\|\?:;\.,\-\[\]]+|&|<|>)/iS', '<font color=#000080>$1</font>', $tmp2);
$tmp2 = preg_replace('/\\\$([[:alnum:]_]+)/iSs', '<font color=#006699>$$1</font>', $tmp2);
/* Mots réservés et fonctions */
$tmp2 = preg_replace('/(([^a-z0-9_\\\$])(array|bool|break|case|char|class|
continue|default|do|double|else|elseif|endfor|endif|endwhile|
extends|float|for|function|global|if|include|int|integer|
long|mixed|new|object|old_function|php|real|require|return|
static|string|switch|var|void|while|__FILE__|__LINE__|E_ERROR|
E_NOTICE|E_PARSE|E_WARNING|FALSE|PHP_OS|PHP_VERSION|TRUE|@)([^a-z0-9_]))/iS'
, '$2<font color=#000080>$3</font>$4', $tmp2);
$tmp2 = preg_replace('/(([^a-z0-9_\\\$])(Abs|Acos|AddSlashes|apache_lookup_uri|
apache_note|array|array_walk|arsort|Asin|asort|Atan|Atan2|base_convert|
base64_decode|base64_encode|basename|bin2hex|BinDec|Ceil|chdir|checkdate|
checkdnsrr|chgrp|chmod|Chop|chown|Chr|chunk_split|clearstatcache|closedir|
closelog|connection_aborted|connection_status|connection_timeout|
convert_cyr_string|copy|Cos|count|crypt|current|date|dblist|dbmclose|
dbmdelete|dbmexists|dbmfetch|dbmfirstkey|dbminsert|dbmnextkey|dbmopen|
dbmreplace|debugger_off|debugger_on|DecBin|DecHex|DecOct|delete|die|
dir|dirname|diskfreespace|dl|doubleval|each|echo|empty|end|ereg|
ereg_replace|eregi|eregi_replace|error_log|error_reporting|
escapeshellcmd|eval|exec|exit|Exp|explode|extension_loaded|
extract|fclose|feof|fgetc|fgetcsv|fgets|fgetss|file|file_exists|
fileatime|filectime|filegroup|fileinode|filemtime|fileowner|
fileperms|filepro|filesize|filetype|flock|Floor|flush|fopen|
fpassthru|fputs|fread|fseek|fsockopen|ftell|function_exists|
fwrite|get_cfg_var|get_current_user|get_magic_quotes_gpc|
get_magic_quotes_runtime|get_meta_tags|getallheaders|getdate|
getenv|gethostbyaddr|gethostbyname|gethostbynamel|GetImageSize|
getlastmod|getmxrr|getmyinode|getmypid|getmyuid|getrandmax|getrusage|
gettimeofday|gettype|gmdate|gmmktime|gzclose|gzeof|gzfile|gzgetc|gzgets|
gzgetss|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzwrite|
header|HexDec|htmlentities|htmlspecialchars|ignore_user_abort|ImageArc|
ImageChar|ImageCharUp|ImageColorAllocate|ImageColorAt|ImageColorClosest|
ImageColorExact|ImageColorResolve|ImageColorSet|ImageColorsForIndex|
ImageColorsTotal|ImageColorTransparent|ImageCopyResized|ImageCreate|
ImageCreateFromGif|ImageDashedLine|ImageDestroy|ImageFill|ImageFilledPolygon|
ImageFilledRectangle|ImageFillToBorder|ImageFontHeight|ImageFontWidth|
ImageGif|ImageInterlace|ImageLine|ImageLoadFont|ImagePolygon|ImagePSBBox|
ImagePSEncodeFont|ImagePSFreeFont|ImagePSLoadFont|ImagePSText|
ImageRectangle|ImageSetPixel|ImageString|ImageStringUp|ImageSX|
ImageSY|ImageTTFBBox|ImageTTFText|implode|intval|iptcparse|
is_array|is_dir|is_double|is_executable|is_file|is_float|is_int|is_integer|
is_link|is_long|is_object|is_readable|is_real|is_string|is_writeable|isset|
join|key|ksort|leak|link|linkinfo|list|Log|Log10|lstat|ltrim|mail|max|md5|
microtime|min|mkdir|mktime|msql|msql_affected_rows|msql_close|msql_connect|
msql_create_db|msql_createdb|msql_data_seek|msql_dbname|msql_drop_db|
msql_dropdb|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|
msql_fetch_row|msql_field_seek|msql_fieldflags|msql_fieldlen|
msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|
msql_freeresult|msql_list_dbs|msql_list_fields|msql_list_tables|
msql_listdbs|msql_listfields|msql_listtables|msql_num_fields|
msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|
msql_query|msql_regcase|msql_result|msql_select_db|msql_selectdb|
msql_tablename|mt_getrandmax|mt_rand|mt_srand|mysql|
mysql_affected_rows|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|
mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_fetch_array|
mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|
mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|
mysql_field_table|mysql_field_type|mysql_free_result|mysql_insert_id|
mysql_list_dbs|mysql_list_fields|mysql_list_tables|mysql_num_fields|
mysql_num_rows|mysql_pconnect|mysql_query|mysql_result|mysql_select_db|
mysql_tablename|next|nl2br|number_format|OctDec|odbc_autocommit|
odbc_binmode|odbc_close|odbc_close_all|odbc_commit|odbc_connect|
odbc_cursor|odbc_do|odbc_exec|odbc_execute|odbc_fetch_into|odbc_fetch_row|
odbc_field_len|odbc_field_name|odbc_field_type|odbc_free_result|odbc_longreadlen|
odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_result|
odbc_result_all|odbc_rollback|odbc_setoption|opendir|openlog|Ora_Bind|
Ora_Close|Ora_ColumnName|Ora_ColumnType|Ora_Commit|Ora_CommitOff|Ora_CommitOn|
Ora_Error|Ora_ErrorCode|Ora_Exec|Ora_Fetch|Ora_GetColumn|Ora_Logoff|Ora_Logon|
Ora_Open|Ora_Parse|Ora_Rollback|Ord|pack|parse_str|parse_url|passthru|pclose|
pfsockopen|pg_Close|pg_cmdTuples|pg_Connect|pg_DBname|pg_ErrorMessage|pg_Exec|
pg_Fetch_Array|pg_Fetch_Object|pg_Fetch_Row|pg_FieldIsNull|pg_FieldName|
pg_FieldNum|pg_FieldPrtLen|pg_FieldSize|pg_FieldType|pg_FreeResult|pg_GetLastOid|
pg_Host|pg_loclose|pg_locreate|pg_loopen|pg_loread|pg_loreadall|pg_lounlink|
pg_lowrite|pg_NumFields|pg_NumRows|pg_Options|pg_pConnect|pg_Port|pg_Result|
pg_tty|phpinfo|phpversion|pi|popen|pos|pow|preg_match|preg_match_all|preg_replace|
preg_split|prev|print|printf|putenv|quoted_printable_decode|QuoteMeta|rand|range|
rawurldecode|rawurlencode|readdir|readfile|readgzfile|readlink|
register_shutdown_function|rename|reset|rewind|rewinddir|rmdir|round|rsort|
sem_acquire|sem_get|sem_release|serialize|set_file_buffer|set_magic_quotes_runtime|
set_socket_blocking|set_time_limit|setcookie|setlocale|settype|shm_attach|
shm_detach|shm_get_var|shm_put_var|shm_remove|shm_remove_var|shuffle|
similar_text|Sin|sizeof|sleep|sort|soundex|split|sprintf|sql_regcase|Sqrt|
srand|stat|str_replace|strchr|strcmp|strcspn|strftime|strip_tags|
StripSlashes|strlen|strpos|strrchr|strrev|strrpos|strspn|strstr|strtok|
strtolower|strtoupper|strtr|strval|substr|symlink|syslog|system|Tan|
tempnam|time|touch|trim|uasort|ucfirst|ucwords|uksort|umask|uniqid|unlink|
unpack|unserialize|unset|urldecode|urlencode|usleep|usort|virtual|substr_count|
array_flip|get_html_translation_table|imagegammacorrect)([^a-z0-9_]))/iS'
, '$2<a href="http://fr3.php.net/manual/fr/function.$3.php" target="_blank"><font color="#800000">$3</font></a>$4', $tmp2);
$tmp_script.= $tmp2;
$tmp2 = '';
$tmp.= $script[$i];
}
else
{
$tmp.= $script[$i];
}
$tmp_script.= $tmp2_script;
$tmp2_script = '';
if ($script[$i] != "\\")
{
$as = 0;
}
}
$tmp_script = substr($tmp_script, 0, -1);
//Lignes à rajouer si vous ne passez pas par la fonction coloriser_html() :
$tmp_script = nl2br($tmp_script);
$tmp_script = str_replace("\t", " ", $tmp_script);
$tmp_script = str_replace(" ", " ", $tmp_script);
$return_code = '<p>Php:</p><p><pre>'.$tmp_script.'</pre></p>';
return $return_code;
}
Et dans ce code il y a un lien qui vas vers php.net mais le problème c'est que les fonctions ne s'écrive pas pareil dans l'url.
Exemple: pour preg_match_all le lien est http://fr3.php.net/manual/fr/function.p ... ch-all.php
Donc il faut remplacer les _ par - mais juste dans le lien.
Et là je bloque.
J'ai éssayé quelque truc mais sans succès.
Donc si quelqu'un avait une idée.
Merci d'avance.