1<?php 2 3/** 4* 5* Parses for text marked as a code example block. 6* 7* @category Text 8* 9* @package Text_Wiki 10* 11* @author Paul M. Jones <pmjones@php.net> 12* 13* @license LGPL 14* 15* @version $Id: Code.php 237313 2007-06-09 23:11:25Z justinpatrin $ 16* 17*/ 18 19/** 20* 21* Parses for text marked as a code example block. 22* 23* This class implements a Text_Wiki_Parse to find sections marked as code 24* examples. Blocks are marked as the string <code> on a line by itself, 25* followed by the inline code example, and terminated with the string 26* </code> on a line by itself. The code example is run through the 27* native PHP highlight_string() function to colorize it, then surrounded 28* with <pre>...</pre> tags when rendered as XHTML. 29* 30* @category Text 31* 32* @package Text_Wiki 33* 34* @author Paul M. Jones <pmjones@php.net> 35* 36*/ 37 38class Text_Wiki_Parse_Code extends Text_Wiki_Parse { 39 40 41 /** 42 * 43 * The regular expression used to find source text matching this 44 * rule. 45 * 46 * @access public 47 * 48 * @var string 49 * 50 */ 51 52/* var $regex = '/^(\<code( .+)?\>)\n(.+)\n(\<\/code\>)(\s|$)/Umsi';*/ 53 var $regex = ';^<code(\s[^>]*)?>((?:(?R)|.*?)*)\n</code>(\s|$);msi'; 54 55 /** 56 * 57 * Generates a token entry for the matched text. Token options are: 58 * 59 * 'text' => The full matched text, not including the <code></code> tags. 60 * 61 * @access public 62 * 63 * @param array &$matches The array of matches from parse(). 64 * 65 * @return A delimited token number to be used as a placeholder in 66 * the source text. 67 * 68 */ 69 70 function process(&$matches) 71 { 72 // are there additional attribute arguments? 73 $args = trim($matches[1]); 74 75 if ($args == '') { 76 $options = array( 77 'text' => $matches[2], 78 'attr' => array('type' => '') 79 ); 80 } else { 81 // get the attributes... 82 $attr = $this->getAttrs($args); 83 84 // ... and make sure we have a 'type' 85 if (! isset($attr['type'])) { 86 $attr['type'] = ''; 87 } 88 89 // retain the options 90 $options = array( 91 'text' => $matches[2], 92 'attr' => $attr 93 ); 94 } 95 96 return $this->wiki->addToken($this->rule, $options) . $matches[3]; 97 } 98} 99?> 100