141 lines
3.6 KiB
PHP
141 lines
3.6 KiB
PHP
<?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];
|
|
}
|
|
}
|
|
|
|
?>
|