* * @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]; } } ?>