100 lines
2.3 KiB
PHP
100 lines
2.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
*
|
|
* Parses for text marked as a code example block.
|
|
*
|
|
* @category Text
|
|
*
|
|
* @package Text_Wiki
|
|
*
|
|
* @author Paul M. Jones <pmjones@php.net>
|
|
*
|
|
* @license LGPL
|
|
*
|
|
* @version $Id: Code.php,v 1.10 2006/02/21 14:33:53 toggg Exp $
|
|
*
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* Parses for text marked as a code example block.
|
|
*
|
|
* This class implements a Text_Wiki_Parse to find sections marked as code
|
|
* examples. Blocks are marked as the string <code> on a line by itself,
|
|
* followed by the inline code example, and terminated with the string
|
|
* </code> on a line by itself. The code example is run through the
|
|
* native PHP highlight_string() function to colorize it, then surrounded
|
|
* with <pre>...</pre> tags when rendered as XHTML.
|
|
*
|
|
* @category Text
|
|
*
|
|
* @package Text_Wiki
|
|
*
|
|
* @author Paul M. Jones <pmjones@php.net>
|
|
*
|
|
*/
|
|
|
|
class Text_Wiki_Parse_Code extends Text_Wiki_Parse {
|
|
|
|
|
|
/**
|
|
*
|
|
* The regular expression used to find source text matching this
|
|
* rule.
|
|
*
|
|
* @access public
|
|
*
|
|
* @var string
|
|
*
|
|
*/
|
|
|
|
/* var $regex = '/^(\<code( .+)?\>)\n(.+)\n(\<\/code\>)(\s|$)/Umsi';*/
|
|
var $regex = ';^<code(\s[^>]*)?>((?:(?R)|.)*?)\n</code>(\s|$);msi';
|
|
|
|
/**
|
|
*
|
|
* Generates a token entry for the matched text. Token options are:
|
|
*
|
|
* 'text' => The full matched text, not including the <code></code> 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 attribute arguments?
|
|
$args = trim($matches[1]);
|
|
|
|
if ($args == '') {
|
|
$options = array(
|
|
'text' => $matches[2],
|
|
'attr' => array('type' => '')
|
|
);
|
|
} else {
|
|
// get the attributes...
|
|
$attr = $this->getAttrs($args);
|
|
|
|
// ... and make sure we have a 'type'
|
|
if (! isset($attr['type'])) {
|
|
$attr['type'] = '';
|
|
}
|
|
|
|
// retain the options
|
|
$options = array(
|
|
'text' => $matches[2],
|
|
'attr' => $attr
|
|
);
|
|
}
|
|
|
|
return $this->wiki->addToken($this->rule, $options) . $matches[3];
|
|
}
|
|
}
|
|
?>
|