1867f5afa8f566b201ce03ad169c746a5fe3de47
[m6w6/ext-http] / funcsummary.php
1 <?php
2
3 function hl($m)
4 {
5 return sprintf("<blockquote>%s</blockquote>\n", highlight_string($m[1], true));
6 }
7 function mf($f, &$m)
8 {
9 return preg_match_all(
10 '/\/\* *\{\{\{ *proto (.*?)(\n|$)(.*?)PHP_(?:FUNCTION|METHOD)\((.*?)\)/s',
11 file_get_contents($f), $m);
12 }
13 function ff($t)
14 {
15 $t = preg_replace('/^ \* /m', '', trim($t, "*/ \n"));
16 $t = preg_replace_callback('/(\<\?php.*?\?\>)/s', 'hl', $t);
17 $t = str_replace("<br />\n<br />\n", "</p>\n<p>", nl2br(preg_replace('/\n *\* */', "\n", $t)));
18 $t = preg_replace('/(\<br \/\>\n)+\<pre\>(\<br \/\>\n)+/', '</p><pre>', $t);
19 $t = preg_replace('/(\<br \/\>\n)+\<\/pre\>(\<br \/\>\n)+/', '</pre><p>', $t);
20 $t = str_replace("</span><br />\n</code>", "</span></code>", $t);
21 return sprintf('<p>%s</p>', ltrim($t, ' *'));
22 }
23 function e($s)
24 {
25 $a = func_get_args();
26 array_unshift($a, STDERR);
27 call_user_func_array('fprintf', $a);
28 }
29
30 $preface = <<<_PREFACE
31 <html>
32 <head>
33 <title>Function Summary of ext/%s</title>
34 <style>
35 body {
36 font-size: 80%%;
37 font-family: sans-serif;
38 }
39 h2, h3 {
40 color: #339;
41 clear: both;
42 font-size: 1.2em;
43 background: #ffc;
44 padding: .2em;
45 }
46 h2.o {
47 color: #66b;
48 clear: both;
49 font-size: 1.3em;
50 background: #f0f0f0;
51 padding: .2em;
52 }
53 p {
54 margin-left: 1em;
55 }
56 pre {
57 font-size: 1.2em;
58 }
59 br {
60 display: none;
61 }
62 blockquote {
63 margin-bottom: 3em;
64 border: 1px solid #ccc;
65 background: #f0f0f0;
66 padding: 0em 1em;
67 width: auto;
68 float: left;
69 }
70 p, pre {
71 clear: both;
72 }
73 p br, pre code br {
74 display: block;
75 }
76 .toc {
77 position: absolute;
78 top: 10px;
79 right: 10px;
80 width: 300px;
81 height: 95%%;
82 overflow: scroll;
83 font-size: .9em;
84 }
85 body>div.toc {
86 position: fixed;
87 }
88 .toc ul {
89 padding-left: 15px;
90 margin-left: 0;
91 }
92 .toc li {
93 padding: 0;
94 margin: 0;
95 }
96 </style>
97 </head>
98 <body>
99 _PREFACE;
100
101 $footer = <<<_FOOTER
102 <p><b>Generated at: %s</b></p>
103 </body>
104 </html>
105
106 _FOOTER;
107
108 if ($_SERVER['argc'] < 2) {
109 die("Usage: {$_SERVER['argv'][0]} <file>[ <file> ...]\n");
110 }
111
112 $TOC = array();
113
114 printf($preface, basename(getcwd()));
115
116 foreach (array_slice($_SERVER['argv'], 1) as $fp) {
117 foreach (glob($fp) as $f) {
118
119 if (mf($f, $m)) {
120 e("\nAnalyzing %s\n", basename($f));
121 printf("<h1 id=\"%s\">%s</h1>\n", basename($f), basename($f));
122 foreach ($m[1] as $i => $p) {
123 e("Documenting $p\n");
124 if ($o = preg_match('/^(.*), (.*)$/', $m[4][$i], $n)) {
125 if ($n[2] == '__construct') {
126 printf("<h2 id=\"%s\" class=\"o\">%s</h2>\n", $n[1], $n[1]);
127 }
128 $TOC[basename($f)][$n[1]][$n[2]] = $n[1].'::'.$n[2].'()';
129 printf("<h%d id=\"%s\">%s</h%d>\n", 3, $n[1].'_'.$n[2], $p, 3);
130 } else {
131 $TOC[basename($f)][$m[4][$i]] = $m[4][$i].'()';
132 printf("<h%d id=\"%s\">%s</h%d>\n", 2, $m[4][$i], $p, 2);
133 }
134 print ff($m[3][$i]) ."\n";
135 /*
136 printf("<h%d id=\"%s\">%s</h%d>\n%s\n",
137 $o?3:2, $o?$n[1].'_'.$n[2]:$m[4][$i], $p, $o?3:2, ff($m[3][$i]));
138 */
139 }
140 print "<hr noshade>\n";
141 }
142 }
143 }
144 printf("<div class=\"toc\"><strong>Table of Contents</strong>\n<ul>\n");
145 foreach ($TOC as $file => $f) {
146 printf("<li><a href=\"#%s\">%s\n<ul>\n", $file, $file);
147 foreach ($f as $cof => $met) {
148 if (is_array($met)) {
149 foreach ($met as $id => $m) {
150 printf("<li><a href=\"#%s_%s\">%s</a></li>\n", $cof, $id, $m);
151 }
152 } else {
153 printf("<li><a href=\"#%s\">%s</a>\n", $cof, $cof);
154 }
155 printf("</li>\n");
156 }
157 printf("</ul>\n</li>\n");
158 }
159 printf("</ul>\n</div>\n");
160
161 printf($footer, date('r'));
162 e("\nDone\n");
163 ?>
164