includes/wikiengine/Parse/Mediawiki/Function.php
changeset 1 fe660c52c48f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Mediawiki/Function.php	Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,141 @@
+<?php
+
+/**
+* 
+* Parses for an API function documentation block.
+* 
+* @category Text
+* 
+* @package Text_Wiki
+* 
+* @author Paul M. Jones <pmjones@php.net>
+* 
+* @license LGPL
+* 
+* @version $Id: Function.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $
+* 
+*/
+
+/**
+* 
+* Parses for an API function documentation block.
+*
+* @category Text
+* 
+* @package Text_Wiki
+* 
+* @author Paul M. Jones <pmjones@php.net>
+* 
+*/
+
+class Text_Wiki_Parse_Function extends Text_Wiki_Parse {
+
+    var $regex = '/^(\<function\>)\n(.+)\n(\<\/function\>)(\s|$)/Umsi';
+    
+    function process(&$matches)
+    {
+        // default options
+        $opts = array(
+            'name' => null,
+            'access' => null,
+            'return' => null,
+            'params' => array(),
+            'throws' => array()
+        );
+        
+        // split apart the markup lines and loop through them
+        $lines = explode("\n", $matches[2]);
+        foreach ($lines as $line) {
+            
+            // skip blank lines
+            if (trim($line) == '') {
+                continue;
+            }
+            
+            // find the first ':' on the line; the left part is the 
+            // type, the right part is the value. skip lines without
+            // a ':' on them.
+            $pos = strpos($line, ':');
+            if ($pos === false) {
+                continue;
+            }
+            
+            // $type is the line type: name, access, return, param, throws
+            // 012345678901234
+            // name: something
+            $type = trim(substr($line, 0, $pos));
+            $val = trim(substr($line, $pos+1));
+            
+            switch($type) {
+            
+            case 'a':
+            case 'access':
+                $opts['access'] = $val;
+                break;
+                
+            case 'n':
+            case 'name':
+                $opts['name'] = $val;
+                break;
+                
+            case 'p':
+            case 'param':
+                $tmp = explode(',', $val);
+                $k = count($tmp);
+                if ($k == 1) {
+                    $opts['params'][] = array(
+                        'type' => $tmp[0],
+                        'descr' => null,
+                        'default' => null
+                    );
+                } elseif ($k == 2) {
+                    $opts['params'][] = array(
+                        'type' => $tmp[0],
+                        'descr' => $tmp[1],
+                        'default' => null
+                    );
+                } else {
+                    $opts['params'][] = array(
+                        'type' => $tmp[0],
+                        'descr' => $tmp[1],
+                        'default' => $tmp[2]
+                    );
+                }
+                break;
+            
+            case 'r':
+            case 'return':
+            case 'returns':
+                $opts['return'] = $val;
+                break;
+            
+            case 't':
+            case 'throws':
+                $tmp = explode(',', $val);
+                $k = count($tmp);
+                if ($k == 1) {
+                    $opts['throws'][] = array(
+                        'type' => $tmp[0],
+                        'descr' => null
+                    );
+                } else {
+                    $opts['throws'][] = array(
+                        'type' => $tmp[0],
+                        'descr' => $tmp[1]
+                    );
+                }
+                break;
+        
+            default:
+                $opts[$type] = $val;
+                break;
+            
+            }
+        }
+        
+        // add the token back in place
+        return $this->wiki->addToken($this->rule, $opts) . $matches[4];
+    }
+}
+
+?>
\ No newline at end of file