nijikodo
by craig campbell
Nijikodo is an object oriented code syntax highlighting library written in PHP.
Current supported languages include CSS, HTML, JavaScript, and PHP. The generic regex patterns work for other languages as well.
download: http://github.com/ccampbell/nijikodo
requirements
php 5.3
usage
to install put the lib directory somewhere in your include path:
require 'lib/Nijikodo/Parser.php';
Nijikodo\Parser::setCssPrefix('code_');
to syntax highlight code from a form field:
$text = $_POST['text'];
$text = Nijikodo\Parser::process($text);
use these special tags in the form field to specify that this block of text is code:
{code:language|height:200}
// this is where the code goes
{code}
this can also be done directly in a view using output buffering like so:
<?php Nijikodo\Parser::captureStart(); ?>
{code:javascript}
// code goes here
{code}
<?php echo Nijikodo\Parser::output(); ?>
additionally if you have a string that you already know is a specific type of code you can do this:
$string = '<p>this is my string</p>';
$html_string = Nijikodo\Parser::toHtml($string, 'html');
finally if you would like to run your string through some other functions you can tokenize the code blocks and fill them back in later
$text = $_POST['text'];
$text = Nijikodo\Parser::tokenizeCodeBlocks($text);
$text = nl2br($text);
$text = Nijikodo\Parser::replaceTokens($text);
samples
php
$i = 0;
for ($i = 0; $i < 25; ++$i) {
echo $i;
}
function customFunction()
{
return mt_rand(1, 100);
}
$fruits = array('banana', 'strawberry', 'blueberry', 'apple', 'blackberry');
asort($fruits);
foreach ($fruits as $key => $value) {
echo $value;
}
javascript
$(document).ready(function() {
$("a[rel='external']").live("click", function() {
$(this).attr("target", "_blank");
});
});
html
<ul class="user_list">
<?php foreach ($this->users as $user): ?>
<li><a href="<?php echo $user->getUrl(); ?>"><?php echo $user->getName(); ?></a></li>
<?php endforeach; ?>
</ul>
css
.niji_code {
font-family: 'monaco', courier, monospace;
font-size: 11.5px;
overflow: auto;
margin-top: 10px;
margin-bottom: 10px;
padding: 10px;
background: #03050A;
color: #fff;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
white-space: pre-wrap;
}
.niji_html {
color: #7F90AA;
}
.niji_keyword, .niji_define {
color: #FBDE2D;
}
.niji_int {
color: #D8FA3C;
}
.niji_comment {
color: #E40700;
}
.niji_class, .niji_function {
color: #8DA6CE;
}
.niji_string {
color: #61CE3C;
}
.niji_default {
color: #fff;
}
.niji_tag {
color: #7F90AA;
}
.niji_method {
color: #FF6400;
}