home *** CD-ROM | disk | FTP | other *** search
- <?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];
- }
- }
-
- ?>