Highlighter.css
/**
@author Tristan Roberts
@date 2010-05-16
@package Highlight.php
*/
.css > .attribute
{
color:#88134f;
}
.css > .comment,.js > .comment,.php > .comment
{
color:#236e25;
font-style:italic;
}
.css > .keyword
{
color:#9b4400;
}
.css > .number,.js > .number,.php > .number
{
color:#00f;
}
.html > .comment
{
font-style:italic;
}
.html > .doctype,.html > .comment
{
color:#236e25;
}
.html > .tag
{
color:#881280;
}
.html > .tag > .attribute
{
color:#994500;
}
.js > .function
{
color:#003369;
}
.js > .keyword,.php > .class
{
color:#881350;
}
.php > .function
{
color:#661aa9;
}
.php > .lang
{
color:#dd000;
}
.php > .string
{
color:#eb7300;
}
.php > .variable
{
color:#825900;
}
Highlighter.php (Function)
<?php
/**
Syntax highlight a piece of code. Currently
supports CSS, HTML, Javascript and PHP.
Language profiles can be added by creating a new
case that creates an array called "syntax" that is
in the form of:
brief_name
RegEx
HTML Replacement ("~" = "<" or ">")
@author Tristan Roberts
@date 2010-05-16
@package Highlight.php
@param $code (string) The code to highlight.
@param $lang (string) The language to highlight for.
"html", "css", "php" or "js"
@return (string) The highlighted code.
*/
function highlight( $code, $lang = "default" ) {
$syntax = array( );
switch ( strtolower( $lang ) ) {
case "css":
$syntax = array(
"keywords" => array(
"/(\:|[\s]+)([a-z-A-Z]+)(\;|[\s]+)/",
'$1~span class="keyword"~$2~/span~$3'
),
"attribute" => array(
"/([a-z0-9A-Z-]+)\:([\s]*)/",
'~span class="attribute"~$1~/span~:$2'
),
"numbers" => array(
"/(\:|[\s]+)([0-9\.]+)(px|pt|em)?/",
'$1~span class="number"~$2$3~/span~'
),
"comment1" => array(
"/(\/[\*]+[^\*]*[\*]+\/)/",
'~span class="comment"~$1~/span~'
),
);
break;
case "html":
$syntax = array(
"attribute" => array(
"/\ ([a-z-]+)\=/",
' ~span class="attribute"~$1~/span~='
),
"doctype" => array(
"/(\<\!DOCTYPE\ [^\>]+\>)/",
'~span class="doctype"~$1~/span~'
),
"comment" => array(
"/(\<\!--[^-]*--\>)/",
'~span class="comment"~$1~/span~'
),
"tag" => array(
"/(\<[^\>]+\>)/",
'~span class="tag"~$1~/span~'
),
);
break;
case "js":
$syntax = array(
"comment1" => array(
"/(\/\*[\s\S]*?\*\/)/",
'~span class="comment"~$1~/span~'
),
"numbers" => array(
"/([0-9]+)/",
'~span class="number"~$1~/span~'
),
"keywords" => array(
"/(return|try|false|true|this|undefined|null|var|function|new)/",
'~span class="keyword"~$1~/span~'
),
"functions" => array(
"/([a-zA-z0-9_]+)([\s]*\()/",
'~span class="function"~$1~/span~$2'
),
"comment2" => array(
"/(\/\/[^\n\r]*)/",
'~span class="comment"~$1~/span~'
),
);
break;
case "php":
$syntax = array(
"string2" => array(
'/(\"[^\"]*?\")/',
'~span class="string"~$1~/span~'
),
"keywords" => array(
"/([^\$])(echo|case|require_once|printf|include_once|public|protected|static|private|function|return|class)(\ )/",
'$1~span class="function"~$2~/span~$3'
),
"php" => array(
"/(\<\?php|\?\>)/",
'~span class="lang"~$1~/span~'
),
"variables" => array(
'/(\$[a-zA-Z0-9_]+)/',
'~span class="variable"~$1~/span~'
),
"string1" => array(
'/(\'[^\']*?\')/',
'~span class="string"~$1~/span~'
),
"string3" => array(
'/(\`[^\`]*?\`)/',
'~span class="string"~$1~/span~'
),
"number" => array(
"/([\d]+)/",
'~span class="number"~$1~/span~'
),
"class1" => array(
"/(new\ [a-z0-9A-Z_]+)/",
'~span class="class"~$1~/span~'
),
"class2" => array(
"/([a-z0-9A-Z_]+)\:\:/",
'~span class="class"~$1~/span~::'
),
"function" => array(
"/([a-z0-9A-Z_]+)([\s]*\()/",
'~span class="function"~$1~/span~$2'
),
"comment1" => array(
"/(\/\*[\s\S]*?\*\/)/",
'~span class="comment"~$1~/span~'
),
"comment2" => array(
"/(\/\/[^\n\r]*)/",
'~span class="comment"~$1~/span~'
),
);
break;
default:
return highlight_string( $code, true );
break;
}
foreach ( $syntax as $label => $pair ) {
$code = preg_replace( $pair[0], $pair[1], $code );
}
$code = str_replace( "<", "<", $code );
$code = str_replace( ">", ">", $code );
$code = preg_replace( "/(\~)([^\~]+)(\~)/", '<$2>', $code );
return (string) $code;
}
?>