import of Diogenes 0.9.18
[diogenes.git] / include / Text / Wiki / Parse / Default / Function.php
1 <?php
2
3 /**
4 *
5 * Parses for an API function documentation block.
6 *
7 * @category Text
8 *
9 * @package Text_Wiki
10 *
11 * @author Paul M. Jones <pmjones@php.net>
12 *
13 * @license LGPL
14 *
15 * @version $Id: Function.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $
16 *
17 */
18
19 /**
20 *
21 * Parses for an API function documentation block.
22 *
23 * @category Text
24 *
25 * @package Text_Wiki
26 *
27 * @author Paul M. Jones <pmjones@php.net>
28 *
29 */
30
31 class Text_Wiki_Parse_Function extends Text_Wiki_Parse {
32
33 var $regex = '/^(\<function\>)\n(.+)\n(\<\/function\>)(\s|$)/Umsi';
34
35 function process(&$matches)
36 {
37 // default options
38 $opts = array(
39 'name' => null,
40 'access' => null,
41 'return' => null,
42 'params' => array(),
43 'throws' => array()
44 );
45
46 // split apart the markup lines and loop through them
47 $lines = explode("\n", $matches[2]);
48 foreach ($lines as $line) {
49
50 // skip blank lines
51 if (trim($line) == '') {
52 continue;
53 }
54
55 // find the first ':' on the line; the left part is the
56 // type, the right part is the value. skip lines without
57 // a ':' on them.
58 $pos = strpos($line, ':');
59 if ($pos === false) {
60 continue;
61 }
62
63 // $type is the line type: name, access, return, param, throws
64 // 012345678901234
65 // name: something
66 $type = trim(substr($line, 0, $pos));
67 $val = trim(substr($line, $pos+1));
68
69 switch($type) {
70
71 case 'a':
72 case 'access':
73 $opts['access'] = $val;
74 break;
75
76 case 'n':
77 case 'name':
78 $opts['name'] = $val;
79 break;
80
81 case 'p':
82 case 'param':
83 $tmp = explode(',', $val);
84 $k = count($tmp);
85 if ($k == 1) {
86 $opts['params'][] = array(
87 'type' => $tmp[0],
88 'descr' => null,
89 'default' => null
90 );
91 } elseif ($k == 2) {
92 $opts['params'][] = array(
93 'type' => $tmp[0],
94 'descr' => $tmp[1],
95 'default' => null
96 );
97 } else {
98 $opts['params'][] = array(
99 'type' => $tmp[0],
100 'descr' => $tmp[1],
101 'default' => $tmp[2]
102 );
103 }
104 break;
105
106 case 'r':
107 case 'return':
108 case 'returns':
109 $opts['return'] = $val;
110 break;
111
112 case 't':
113 case 'throws':
114 $tmp = explode(',', $val);
115 $k = count($tmp);
116 if ($k == 1) {
117 $opts['throws'][] = array(
118 'type' => $tmp[0],
119 'descr' => null
120 );
121 } else {
122 $opts['throws'][] = array(
123 'type' => $tmp[0],
124 'descr' => $tmp[1]
125 );
126 }
127 break;
128
129 default:
130 $opts[$type] = $val;
131 break;
132
133 }
134 }
135
136 // add the token back in place
137 return $this->wiki->addToken($this->rule, $opts) . $matches[4];
138 }
139 }
140
141 ?>