REBOL [ Title: "PHP-colorizer" Date: 20-Jan-2009/2:15:01+1:00 Name: "Rebol's PHP Code colorizer" Version: 1.1.0 File: %php-colorizer.r Author: "David 'Oldes' Oliva" Email: oliva.david@seznam.cz Home: http://box.lebeda.ws/~hmm/ Usage: [ php-colorizer/footer-final: { } php-colorize/save/title %test-php.txt %test-php.html "Rebol's PHP Code Colorizer Test" ] Purpose: none Comment: { To change colors, download this CSS style: http://box.lebeda.ws/~hmm/css/cc-php.css modify it and use it (change php-colorizer/css-file to your new version) } History: [ 1.1.0 20-Jan-2009 {Using hash! table instead of parse rules to get word's group classes} 1.0.0 27-Nov-2007 {First version (based on %code-colorizer.r script)} ] Language: none Type: none Content: none library: [ level: 'intermediate platform: 'all type: [tool] domain: [html parse text-processing visualization web] tested-under: none support: none license: 'public-domain see-also: none ] ; preprocess: true ; require: [ ; rs-project 'seo-name ; rs-project 'ajoin ; ] ] ;### ajoin unless value? 'ajoin [ ajoin: func[ "Faster way how to create string from a block (in R3 it's native!)" block [block!] ][to string! reduce block] ] ;### php-colorizer php-colorizer: context [ ;## Default settings remove-parens?: off ;removes parens from code (used to document big parsing rules) remove-newline-comments?: on ;removes all comments which start at newline index-comments?: on ;creates index from special comments break-on-error?: on ;stops parsing if founds invalid code out: tmp: x: pos: new: none index-html: make string! 1000 css-file: http://box.lebeda.ws/~hmm/css/cc-php.css footer-final: none ;using this to add final note (for example counter) on HTML page ;## Basic charsets ;** These charsets are used in string based parse in Colorize function ch_word-dividers: charset " ^-^/^M{}[]()^"^^;" ch_newlines: charset "^/^M" ch_space: charset " ^-" ch_spaces: charset " ^-^/^M" ch_numbers: charset "0123456789" ch_numbers1-9: charset "123456789" ch_numbers0-7: charset "01234567" ch_binary2: charset "01" ch_alpha: charset [#"a" - #"z" #"A" - #"Z"] ch_tonewline: complement ch_newlines ch_word: complement ch_word-dividers ch_anychar: complement charset "" ch_alphanum: union ch_alpha ch_numbers ch_base64: union ch_alphanum union charset "+/=" ch_spaces ch_sign: charset "-+" ch_hexadecimal: charset ["123456789" #"a" - #"f" #"A" - #"F"] ch_php_string1: complement charset "\'" ch_php_string2: complement charset {\"} ch_heredoc: union ch_alphanum charset "_" ch_php_wordStart: union ch_alpha charset [#"_" #"^(7f)" - #"^(ff)"] ch_php_word: union ch_alphanum charset [#"_" #"^(7f)" - #"^(ff)"] ch_symbols: charset "!-+=*/|.,;^^&%~?:<>@" ch_php_bracketsOpen: charset "[({" ch_php_bracketsEnd: charset "])}" ch_php_brackets: union ch_php_bracketsOpen ch_php_bracketsEnd ch_php_exec: complement charset "`" ;## Rules used for parsing rl_php_comment-single: [ some [ ["//" | "#"] [any ch_space any ch_tonewline] ;any ch_newlines ] new: ] rl_php_comment-multiline: [ some [ "/*" thru "*/" any ch_newlines ] new: ] rl_php_decimal: [[some ch_numbers1-9 any ch_numbers | #"0"] new:] rl_hexadecimal: [#"0" [#"x" | #"X"] some ch_hexadecimal new:] rl_octal: [#"0" some ch_numbers0-7 new:] rl_float: [ some ch_numbers #"." any ch_numbers new: | #"." some ch_numbers new: ] rl_float_exp: [ [rl_float | some ch_numbers] [#"e" | #"E"] opt ch_sign some ch_numbers new: ] rl_php_string: [ opt #"b" [ #"'" any [ ch_php_string1 | #"\" 1 skip ] #"'" | #"^"" any [ ch_php_string2 | #"\" 1 skip ] #"^"" ] new: ] rl_php_heredoc: [ opt #"b" "<<<" copy x [ch_alpha any ch_heredoc] new: ( emit 'br1 either new: find pos join x ";" [ emit 'st0 new: find/tail pos ";" emit 'br1 ][ ];missing heredoc end ) :pos ] rl_php_exec: [#"`" any ch_php_exec #"`" new:] rl_php_name: [ch_php_wordStart any ch_php_word new:] rl_php_variable: [#"$" opt rl_php_name new:] rl_php_setvariable: [rl_php_variable any ch_spaces #"=" new:] rl_php_symbols: [some ch_symbols new:] rl_php_typeCasting: [ #"(" any ch_spaces [ "int"|"integer"|"bool"|"boolean"|"float"|"double"|"real"|"string"|"binary"|"array"|"object" ] any ch_spaces #")" new: ] rl_php_superglobals: [ ["$GLOBALS"|"$_SERVER"|"$_GET"|"$_POST"|"$_COOKIE"|"$_FILES"|"$_ENV"|"$_REQUEST"|"$_SESSION"] new: ] rl_php_logic: [ ["true"|"false"] new: ] ;## Main PHP's word groups rl_php_words1: [ "include" "require" "include_once" "require_once" "for" "foreach" "as" "if" "elseif" "else" "while" "do" "endwhile" "endif" "switch" "case" "endswitch" "endfor" "endforeach" "return" "break" "continue" ] rl_php_words2: [ "null" "__LINE__" "__FILE__" "false" "true" "var" "default" "function" "class" "new" "public" "private" "interface" "extends" "__FUNCTION__" "__CLASS__" "__METHOD__" "PHP_VERSION" "PHP_OS" "DEFAULT_INCLUDE_PATH" "PEAR_INSTALL_DIR" "PEAR_EXTENSION_DIR" "PHP_EXTENSION_DIR" "PHP_BINDIR" "PHP_LIBDIR" "PHP_DATADIR" "PHP_SYSCONFDIR" "PHP_LOCALSTATEDIR" "PHP_CONFIG_FILE_PATH" "PHP_OUTPUT_HANDLER_START" "PHP_OUTPUT_HANDLER_CONT" "PHP_OUTPUT_HANDLER_END" "E_ERROR" "E_WARNING" "E_PARSE" "E_NOTICE" "E_CORE_ERROR" "E_CORE_WARNING" "E_COMPILE_ERROR" "E_COMPILE_WARNING" "E_USER_ERROR" "E_USER_WARNING" "E_USER_NOTICE" "E_ALL" ] rl_php_words3: [ "zlib_get_coding_type" "zend_version" "zend_logo_guid" "yp_order" "yp_next" "yp_match" "yp_master" "yp_get_default_domain" "yp_first" "yp_errno" "yp_err_string" "yp_cat" "yp_all" "xml_set_unparsed_entity_decl_handler" "xml_set_start_namespace_decl_handler" "xml_set_processing_instruction_handler" "xml_set_object" "xml_set_notation_decl_handler" "xml_set_external_entity_ref_handler" "xml_set_end_namespace_decl_handler" "xml_set_element_handler" "xml_set_default_handler" "xml_set_character_data_handler" "xml_parser_set_option" "xml_parser_get_option" "xml_parser_free" "xml_parser_create_ns" "xml_parser_create" "xml_parse_into_struct" "xml_parse" "xml_get_error_code" "xml_get_current_line_number" "xml_get_current_column_number" "xml_get_current_byte_index" "xml_error_string" "wordwrap" "wddx_serialize_vars" "wddx_serialize_value" "wddx_packet_start" "wddx_packet_end" "wddx_deserialize" "wddx_add_vars" "vsprintf" "vprintf" "virtual" "version_compare" "var_export" "var_dump" "utf8_encode" "utf8_decode" "usort" "usleep" "user_error" "urlencode" "urldecode" "unserialize" "unregister_tick_function" "unpack" "unlink" "unixtojd" "uniqid" "umask" "uksort" "ucwords" "ucfirst" "uasort" "trim" "trigger_error" "touch" "token_name" "token_get_all" "tmpfile" "time" "textdomain" "tempnam" "tanh" "tan" "system" "syslog" "symlink" "substr_replace" "substr_count" "substr" "strval" "strtr" "strtoupper" "strtotime" "strtolower" "strtok" "strstr" "strspn" "strrpos" "strrev" "strrchr" "strpos" "strncmp" "strncasecmp" "strnatcmp" "strnatcasecmp" "strlen" "stristr" "stripslashes" "stripcslashes" "strip_tags" "strftime" "stream_wrapper_register" "stream_set_write_buffer" "stream_set_timeout" "stream_set_blocking" "stream_select" "stream_register_wrapper" "stream_get_meta_data" "stream_filter_prepend" "stream_filter_append" "stream_context_set_params" "stream_context_set_option" "stream_context_get_options" "stream_context_create" "strcspn" "strcoll" "strcmp" "strchr" "strcasecmp" "str_word_count" "str_shuffle" "str_rot13" "str_replace" "str_repeat" "str_pad" "stat" "sscanf" "srand" "sqrt" "sql_regcase" "sprintf" "spliti" "split" "soundex" "sort" "socket_writev" "socket_write" "socket_strerror" "socket_shutdown" "socket_setopt" "socket_set_timeout" "socket_set_option" "socket_set_nonblock" "socket_set_blocking" "socket_set_block" "socket_sendto" "socket_sendmsg" "socket_send" "socket_select" "socket_recvmsg" "socket_recvfrom" "socket_recv" "socket_readv" "socket_read" "socket_listen" "socket_last_error" "socket_iovec_set" "socket_iovec_free" "socket_iovec_fetch" "socket_iovec_delete" "socket_iovec_alloc" "socket_iovec_add" "socket_getsockname" "socket_getpeername" "socket_getopt" "socket_get_status" "socket_get_option" "socket_create_pair" "socket_create_listen" "socket_create" "socket_connect" "socket_close" "socket_clear_error" "socket_bind" "socket_accept" "sleep" "sizeof" "sinh" "sin" "similar_text" "shuffle" "show_source" "shmop_write" "shmop_size" "shmop_read" "shmop_open" "shmop_delete" "shmop_close" "shm_remove_var" "shm_remove" "shm_put_var" "shm_get_var" "shm_detach" "shm_attach" "shell_exec" "sha1_file" "sha1" "settype" "setlocale" "setcookie" "set_time_limit" "set_socket_blocking" "set_magic_quotes_runtime" "set_include_path" "set_file_buffer" "set_error_handler" "session_write_close" "session_unset" "session_unregister" "session_start" "session_set_save_handler" "session_set_cookie_params" "session_save_path" "session_register" "session_regenerate_id" "session_name" "session_module_name" "session_is_registered" "session_id" "session_get_cookie_params" "session_encode" "session_destroy" "session_decode" "session_cache_limiter" "session_cache_expire" "serialize" "sem_remove" "sem_release" "sem_get" "sem_acquire" "rtrim" "rsort" "round" "rmdir" "rewinddir" "rewind" "restore_include_path" "restore_error_handler" "reset" "rename" "register_tick_function" "register_shutdown_function" "realpath" "readlink" "readgzfile" "readfile" "readdir" "read_exif_data" "rawurlencode" "rawurldecode" "range" "rand" "rad2deg" "quotemeta" "quoted_printable_decode" "putenv" "proc_open" "proc_close" "printf" "print_r" "prev" "preg_split" "preg_replace_callback" "preg_replace" "preg_quote" "preg_match_all" "preg_match" "preg_grep" "pow" "posix_uname" "posix_ttyname" "posix_times" "posix_strerror" "posix_setuid" "posix_setsid" "posix_setpgid" "posix_setgid" "posix_seteuid" "posix_setegid" "posix_mkfifo" "posix_kill" "posix_isatty" "posix_getuid" "posix_getsid" "posix_getrlimit" "posix_getpwuid" "posix_getpwnam" "posix_getppid" "posix_getpid" "posix_getpgrp" "posix_getpgid" "posix_getlogin" "posix_getgroups" "posix_getgrnam" "posix_getgrgid" "posix_getgid" "posix_geteuid" "posix_getegid" "posix_getcwd" "posix_get_last_error" "posix_errno" "posix_ctermid" "pos" "popen" "pi" "phpversion" "phpinfo" "phpcredits" "php_uname" "php_sapi_name" "php_logo_guid" "php_ini_scanned_files" "pg_update" "pg_untrace" "pg_unescape_bytea" "pg_tty" "pg_trace" "pg_setclientencoding" "pg_set_client_encoding" "pg_send_query" "pg_select" "pg_result_status" "pg_result_seek" "pg_result_error" "pg_result" "pg_query" "pg_put_line" "pg_port" "pg_ping" "pg_pconnect" "pg_options" "pg_numrows" "pg_numfields" "pg_num_rows" "pg_num_fields" "pg_meta_data" "pg_lowrite" "pg_lounlink" "pg_loreadall" "pg_loread" "pg_loopen" "pg_loimport" "pg_loexport" "pg_locreate" "pg_loclose" "pg_lo_write" "pg_lo_unlink" "pg_lo_tell" "pg_lo_seek" "pg_lo_read_all" "pg_lo_read" "pg_lo_open" "pg_lo_import" "pg_lo_export" "pg_lo_create" "pg_lo_close" "pg_last_oid" "pg_last_notice" "pg_last_error" "pg_insert" "pg_host" "pg_getlastoid" "pg_get_result" "pg_get_pid" "pg_get_notify" "pg_freeresult" "pg_free_result" "pg_fieldtype" "pg_fieldsize" "pg_fieldprtlen" "pg_fieldnum" "pg_fieldname" "pg_fieldisnull" "pg_field_type" "pg_field_size" "pg_field_prtlen" "pg_field_num" "pg_field_name" "pg_field_is_null" "pg_fetch_row" "pg_fetch_result" "pg_fetch_object" "pg_fetch_assoc" "pg_fetch_array" "pg_fetch_all" "pg_exec" "pg_escape_string" "pg_escape_bytea" "pg_errormessage" "pg_end_copy" "pg_delete" "pg_dbname" "pg_copy_to" "pg_copy_from" "pg_convert" "pg_connection_status" "pg_connection_reset" "pg_connection_busy" "pg_connect" "pg_cmdtuples" "pg_close" "pg_clientencoding" "pg_client_encoding" "pg_cancel_query" "pg_affected_rows" "pfsockopen" "pclose" "pathinfo" "passthru" "parse_url" "parse_str" "parse_ini_file" "pack" "overload" "output_reset_rewrite_vars" "output_add_rewrite_var" "ord" "openssl_x509_read" "openssl_x509_parse" "openssl_x509_free" "openssl_x509_export_to_file" "openssl_x509_export" "openssl_x509_checkpurpose" "openssl_x509_check_private_key" "openssl_verify" "openssl_sign" "openssl_seal" "openssl_public_encrypt" "openssl_public_decrypt" "openssl_private_encrypt" "openssl_private_decrypt" "openssl_pkey_new" "openssl_pkey_get_public" "openssl_pkey_get_private" "openssl_pkey_free" "openssl_pkey_export_to_file" "openssl_pkey_export" "openssl_pkcs7_verify" "openssl_pkcs7_sign" "openssl_pkcs7_encrypt" "openssl_pkcs7_decrypt" "openssl_open" "openssl_get_publickey" "openssl_get_privatekey" "openssl_free_key" "openssl_error_string" "openssl_csr_sign" "openssl_csr_new" "openssl_csr_export_to_file" "openssl_csr_export" "openlog" "opendir" "octdec" "ob_start" "ob_list_handlers" "ob_implicit_flush" "ob_iconv_handler" "ob_gzhandler" "ob_get_status" "ob_get_level" "ob_get_length" "ob_get_flush" "ob_get_contents" "ob_get_clean" "ob_flush" "ob_end_flush" "ob_end_clean" "ob_clean" "number_format" "nl_langinfo" "nl2br" "ngettext" "next" "natsort" "natcasesort" "mysql_unbuffered_query" "mysql_thread_id" "mysql_tablename" "mysql_table_name" "mysql_stat" "mysql_selectdb" "mysql_select_db" "mysql_result" "mysql_real_escape_string" "mysql_query" "mysql_ping" "mysql_pconnect" "mysql_numrows" "mysql_numfields" "mysql_num_rows" "mysql_num_fields" "mysql_listtables" "mysql_listfields" "mysql_listdbs" "mysql_list_tables" "mysql_list_processes" "mysql_list_fields" "mysql_list_dbs" "mysql_insert_id" "mysql_info" "mysql_get_server_info" "mysql_get_proto_info" "mysql_get_host_info" "mysql_get_client_info" "mysql_freeresult" "mysql_free_result" "mysql_fieldtype" "mysql_fieldtable" "mysql_fieldname" "mysql_fieldlen" "mysql_fieldflags" "mysql_field_type" "mysql_field_table" "mysql_field_seek" "mysql_field_name" "mysql_field_len" "mysql_field_flags" "mysql_fetch_row" "mysql_fetch_object" "mysql_fetch_lengths" "mysql_fetch_field" "mysql_fetch_assoc" "mysql_fetch_array" "mysql_escape_string" "mysql_error" "mysql_errno" "mysql_dropdb" "mysql_drop_db" "mysql_dbname" "mysql_db_query" "mysql_db_name" "mysql_data_seek" "mysql_createdb" "mysql_create_db" "mysql_connect" "mysql_close" "mysql_client_encoding" "mysql_affected_rows" "mysql" "mt_srand" "mt_rand" "mt_getrandmax" "move_uploaded_file" "money_format" "mktime" "mkdir" "min" "microtime" "method_exists" "metaphone" "memory_get_usage" "md5_file" "md5" "mbsubstr" "mbstrrpos" "mbstrpos" "mbstrlen" "mbstrcut" "mbsplit" "mbregex_encoding" "mberegi_replace" "mberegi" "mbereg_search_setpos" "mbereg_search_regs" "mbereg_search_pos" "mbereg_search_init" "mbereg_search_getregs" "mbereg_search_getpos" "mbereg_search" "mbereg_replace" "mbereg_match" "mbereg" "mb_substr_count" "mb_substr" "mb_substitute_character" "mb_strwidth" "mb_strtoupper" "mb_strtolower" "mb_strrpos" "mb_strpos" "mb_strlen" "mb_strimwidth" "mb_strcut" "mb_split" "mb_send_mail" "mb_regex_set_options" "mb_regex_encoding" "mb_preferred_mime_name" "mb_parse_str" "mb_output_handler" "mb_language" "mb_internal_encoding" "mb_http_output" "mb_http_input" "mb_get_info" "mb_eregi_replace" "mb_eregi" "mb_ereg_search_setpos" "mb_ereg_search_regs" "mb_ereg_search_pos" "mb_ereg_search_init" "mb_ereg_search_getregs" "mb_ereg_search_getpos" "mb_ereg_search" "mb_ereg_replace" "mb_ereg_match" "mb_ereg" "mb_encode_numericentity" "mb_encode_mimeheader" "mb_detect_order" "mb_detect_encoding" "mb_decode_numericentity" "mb_decode_mimeheader" "mb_convert_variables" "mb_convert_kana" "mb_convert_encoding" "mb_convert_case" "max" "mail" "magic_quotes_runtime" "ltrim" "lstat" "long2ip" "log1p" "log10" "log" "localtime" "localeconv" "linkinfo" "link" "levenshtein" "lcg_value" "ksort" "krsort" "key_exists" "key" "juliantojd" "join" "jewishtojd" "jdtounix" "jdtojulian" "jdtojewish" "jdtogregorian" "jdtofrench" "jdmonthname" "jddayofweek" "is_writeable" "is_writable" "is_uploaded_file" "is_subclass_of" "is_string" "is_scalar" "is_resource" "is_real" "is_readable" "is_object" "is_numeric" "is_null" "is_nan" "is_long" "is_link" "is_integer" "is_int" "is_infinite" "is_float" "is_finite" "is_file" "is_executable" "is_double" "is_dir" "is_callable" "is_bool" "is_array" "is_a" "iptcparse" "iptcembed" "ip2long" "intval" "ini_set" "ini_restore" "ini_get_all" "ini_get" "ini_alter" "in_array" "import_request_variables" "implode" "image_type_to_mime_type" "ignore_user_abort" "iconv_set_encoding" "iconv_get_encoding" "iconv" "i18n_mime_header_encode" "i18n_mime_header_decode" "i18n_ja_jp_hantozen" "i18n_internal_encoding" "i18n_http_output" "i18n_http_input" "i18n_discover_encoding" "i18n_convert" "hypot" "htmlspecialchars" "htmlentities" "html_entity_decode" "highlight_string" "highlight_file" "hexdec" "hebrevc" "hebrev" "headers_sent" "header" "gzwrite" "gzuncompress" "gztell" "gzseek" "gzrewind" "gzread" "gzputs" "gzpassthru" "gzopen" "gzinflate" "gzgetss" "gzgets" "gzgetc" "gzfile" "gzeof" "gzencode" "gzdeflate" "gzcompress" "gzclose" "gregoriantojd" "gmstrftime" "gmmktime" "gmdate" "glob" "gettype" "gettimeofday" "gettext" "getservbyport" "getservbyname" "getrusage" "getrandmax" "getprotobynumber" "getprotobyname" "getopt" "getmyuid" "getmypid" "getmyinode" "getmygid" "getmxrr" "getlastmod" "getimagesize" "gethostbynamel" "gethostbyname" "gethostbyaddr" "getenv" "getdate" "getcwd" "getallheaders" "get_resource_type" "get_required_files" "get_parent_class" "get_object_vars" "get_meta_tags" "get_magic_quotes_runtime" "get_magic_quotes_gpc" "get_loaded_extensions" "get_included_files" "get_include_path" "get_html_translation_table" "get_extension_funcs" "get_defined_vars" "get_defined_functions" "get_defined_constants" "get_declared_classes" "get_current_user" "get_class_vars" "get_class_methods" "get_class" "get_cfg_var" "get_browser" "fwrite" "function_exists" "func_num_args" "func_get_args" "func_get_arg" "ftruncate" "ftp_systype" "ftp_ssl_connect" "ftp_size" "ftp_site" "ftp_set_option" "ftp_rmdir" "ftp_rename" "ftp_rawlist" "ftp_quit" "ftp_pwd" "ftp_put" "ftp_pasv" "ftp_nlist" "ftp_nb_put" "ftp_nb_get" "ftp_nb_fput" "ftp_nb_fget" "ftp_nb_continue" "ftp_mkdir" "ftp_mdtm" "ftp_login" "ftp_get_option" "ftp_get" "ftp_fput" "ftp_fget" "ftp_exec" "ftp_delete" "ftp_connect" "ftp_close" "ftp_chdir" "ftp_cdup" "ftok" "ftell" "fstat" "fsockopen" "fseek" "fscanf" "frenchtojd" "fread" "fputs" "fpassthru" "fopen" "fnmatch" "fmod" "flush" "floor" "flock" "floatval" "filetype" "filesize" "filepro_rowcount" "filepro_retrieve" "filepro_fieldwidth" "filepro_fieldtype" "filepro_fieldname" "filepro_fieldcount" "filepro" "fileperms" "fileowner" "filemtime" "fileinode" "filegroup" "filectime" "fileatime" "file_get_contents" "file_exists" "file" "fgetss" "fgets" "fgetcsv" "fgetc" "fflush" "feof" "fclose" "ezmlm_hash" "extract" "extension_loaded" "expm1" "explode" "exp" "exif_thumbnail" "exif_tagname" "exif_read_data" "exif_imagetype" "exec" "escapeshellcmd" "escapeshellarg" "error_reporting" "error_log" "eregi_replace" "eregi" "ereg_replace" "ereg" "end" "easter_days" "easter_date" "each" "doubleval" "dngettext" "dl" "diskfreespace" "disk_total_space" "disk_free_space" "dirname" "dir" "dgettext" "deg2rad" "defined" "define_syslog_variables" "define" "decoct" "dechex" "decbin" "debug_zval_dump" "debug_backtrace" "deaggregate" "dcngettext" "dcgettext" "dba_sync" "dba_replace" "dba_popen" "dba_optimize" "dba_open" "dba_nextkey" "dba_list" "dba_insert" "dba_handlers" "dba_firstkey" "dba_fetch" "dba_exists" "dba_delete" "dba_close" "date" "current" "ctype_xdigit" "ctype_upper" "ctype_space" "ctype_punct" "ctype_print" "ctype_lower" "ctype_graph" "ctype_digit" "ctype_cntrl" "ctype_alpha" "ctype_alnum" "crypt" "create_function" "crc32" "count_chars" "count" "cosh" "cos" "copy" "convert_cyr_string" "constant" "connection_status" "connection_aborted" "compact" "closelog" "closedir" "clearstatcache" "class_exists" "chunk_split" "chr" "chown" "chop" "chmod" "chgrp" "checkdnsrr" "checkdate" "chdir" "ceil" "call_user_method_array" "call_user_method" "call_user_func_array" "call_user_func" "cal_to_jd" "cal_info" "cal_from_jd" "cal_days_in_month" "bzwrite" "bzread" "bzopen" "bzflush" "bzerrstr" "bzerror" "bzerrno" "bzdecompress" "bzcompress" "bzclose" "bindtextdomain" "bindec" "bind_textdomain_codeset" "bin2hex" "bcsub" "bcsqrt" "bcscale" "bcpow" "bcmul" "bcmod" "bcdiv" "bccomp" "bcadd" "basename" "base_convert" "base64_encode" "base64_decode" "atanh" "atan2" "atan" "assert_options" "assert" "asort" "asinh" "asin" "arsort" "array_walk" "array_values" "array_unshift" "array_unique" "array_sum" "array_splice" "array_slice" "array_shift" "array_search" "array_reverse" "array_reduce" "array_rand" "array_push" "array_pop" "array_pad" "array_multisort" "array_merge_recursive" "array_merge" "array_map" "array_keys" "array_key_exists" "array_intersect_assoc" "array_intersect" "array_flip" "array_filter" "array_fill" "array_diff_assoc" "array_diff" "array_count_values" "array_chunk" "array_change_key_case" "apache_setenv" "apache_response_headers" "apache_request_headers" "apache_note" "apache_lookup_uri" "apache_get_version" "apache_child_terminate" "aggregation_info" "aggregate_properties_by_regexp" "aggregate_properties_by_list" "aggregate_properties" "aggregate_methods_by_regexp" "aggregate_methods_by_list" "aggregate_methods" "aggregate" "addslashes" "addcslashes" "acosh" "acos" "abs" "_" "echo" "print" "global" "static" "exit" "array" "empty" "eval" "isset" "unset" "die" "list" ] word-classes: copy [] foreach [group class] reduce [ rl_php_words1 'kw1 rl_php_words2 'kw1 rl_php_words3 'kw1 ][ foreach word group [repend word-classes [word class] ] ] word-classes: make hash! word-classes ;## escape-html ch_notEscapeHtml: complement charset "&<>" escape-html: func[data [string! binary!] /local p][ parse/all data [ any [ any ch_notEscapeHtml p: [ #"<" (p: change/part p "<" 1) :p | #">" (p: change/part p ">" 1) :p | #"&" (p: change/part p "&" 1) :p ] ]] data ] ;## emit emit: func[cl /local l][ ;probe copy/part pos 50 ;probe copy/part new 50 pos: insert pos l: ajoin [{}] new: change/part pos escape-html copy/part pos (new: skip new length? l) new pos: insert new "" ;probe copy/part head pos 50 pos ] language: "PHP" ;## php-colorize set 'php-colorize func[source [any-string! file! url!] /save outfile /title ttl /local source-file out][ out: either any [file? source url? source][ source-file: source read source ][ source ] clear index-html loop 1 [ ;<-- to be able break parsing parse/all out: detab out [ any [ pos: rl_php_comment-single (emit either pos/1 = #"#" ['co1]['co2]) :pos | rl_php_comment-multiline (emit 'co3) :pos | opt ch_sign [ [rl_float_exp | rl_float] (emit 'nu3) :pos | rl_hexadecimal (emit 'nu1) :pos | rl_octal (emit 'nu2) :pos | rl_php_decimal (emit 'nu0) :pos ] | rl_php_string (emit 'st0) :pos | rl_php_heredoc | rl_php_superglobals (emit 'gl) :pos | rl_php_setvariable (emit 'sw) :pos | rl_php_variable (emit 'lw) :pos | rl_php_typeCasting (emit 'tc) :pos | rl_php_logic (emit 'kw5) :pos | rl_php_name ( emit any [ select word-classes copy/part pos new 'kw4 ] ) :pos | rl_php_symbols (emit 'kw6) :pos | ch_php_brackets new: (emit 'br0) :pos | rl_php_exec (emit 'st1) :pos | some ch_spaces ;(emit x) | copy x to end (unless x [break]) () ] ( if level-string > 0 [print "!!! Invalid string!"] if break-on-error? [break] ) ] ] unless empty? index-html [append index-html ""] if save [ write/binary outfile rejoin [ {} {} {} {} any [ttl rejoin ["a " language " code"]] {} {^/} {} {
} either title [rejoin ["

" ttl "

"]][""] either none? source-file [""][ rejoin [ {Source: } last split-path source-file { modified: } modified? source-file {} ] ] {
^/} index-html {
}
				out
				{
^/} {} any [footer-final ""] {} ] ] out ] ]