|
// +----------------------------------------------------------------------+
//
// $Id: code.php,v 1.4 2004/12/02 10:54:32 nohn Exp $
/**
*
* This class implements a Text_Wiki_Rule to find sections marked as code
* examples. Blocks are marked as the string on a line by itself,
* followed by the inline code example, and terminated with the string
*
on a line by itself. The code example is run through the
* native PHP highlight_string() function to colorize it, then surrounded
* with
...tags when rendered as XHTML. * * @author Paul M. Jones
)\n(.+)\n(\<\/code\>)(\s|$)/Umsi';
/**
*
* Generates a token entry for the matched text. Token options are:
*
* 'text' => The full matched text, not including the
tags.
*
* @access public
*
* @param array &$matches The array of matches from parse().
*
* @return A delimited token number to be used as a placeholder in
* the source text.
*
*/
function process(&$matches)
{
// are there additional arguments?
$args = trim($matches[2]);
if ($args == '') {
$options = array(
'text' => $matches[3],
'args' => array('type' => '')
);
} else {
$options = array(
'text' => $matches[3],
'args' => $this->getMacroArgs($args)
);
}
return $this->addToken($options) . $matches[5];
}
/**
*
* Renders a token into text matching the requested format.
*
* @access public
*
* @param array $options The "options" portion of the token (second
* element).
*
* @return string The text rendered from the token options.
*
*/
function renderXhtml($options)
{
// trim opening and closing whitespace
$text = trim($options['text']);
$args = $options['args'];
if (strtolower($args['type']) == 'php') {
// PHP code example
// add the PHP tags
$text = ""; // ...
tags)
ob_start();
highlight_string($text);
$text = ob_get_contents();
ob_end_clean();
// replace $text"; } elseif (strtolower($args['type']) == 'html') { // HTML code example: // add opening and closing tags, // convert tabs to four spaces, // convert entities. $text = str_replace("\t", " ", $text); $text = "\n$text\n"; $text = htmlentities($text); $text = "
$text
";
} else {
// generic code example:
// convert tabs to four spaces,
// convert entities.
$text = str_replace("\t", " ", $text);
$text = htmlentities($text);
$text = "$text
";
}
return "\n$text\n";
}
}
?>