includes/wikiengine/Parse/Default/Code.php
changeset 1 fe660c52c48f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Default/Code.php	Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,99 @@
+<?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];
+    }
+}
+?>