diff -r 902822492a68 -r fe660c52c48f includes/wikiengine/Parse/Mediawiki/Function.php --- /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 @@ + +* +* @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 +* +*/ + +class Text_Wiki_Parse_Function extends Text_Wiki_Parse { + + var $regex = '/^(\)\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