egroupware/doc/inlinedocparser.php

258 lines
6.6 KiB
PHP
Raw Normal View History

2001-07-13 10:19:41 +02:00
<?php
2001-09-25 09:19:16 +02:00
/**************************************************************************\
* phpGroupWare *
* http://www.phpgroupware.org *
* The file written by Miles Lott <milosch@phpgroupware.org> *
* -------------------------------------------- *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU General Public License as published by the *
* Free Software Foundation; either version 2 of the License, or (at your *
* option) any later version. *
\**************************************************************************/
/* $Id$ */
2001-12-23 11:15:40 +01:00
include ('../phpgwapi/inc/class.Template.inc.php');
2001-07-13 10:19:41 +02:00
if (!isset($GLOBALS['HTTP_GET_VARS']['object_type']))
{
$GLOBALS['object_type'] = 'function';
}
else
{
$GLOBALS['object_type'] = $GLOBALS['HTTP_GET_VARS']['object_type'];
}
2001-12-23 11:15:40 +01:00
function parseobject($input)
{
$types = array('abstract','param','example','syntax','result','description','discussion','author','copyright','package','access');
$new = explode("@",$input);
while (list($x,$y) = each($new))
{
if (!isset($object) || trim($new[0]) == $object)
{
$t = trim($new[0]);
$t = trim(ereg_replace('#'.'function'.' ','',$t));
reset($types);
while(list($z,$type) = each($types))
{
if(ereg('#'.$type.' ',$y))
{
$xkey = $type;
$out = $y;
$out = trim(ereg_replace('#'.$type.' ','',$out));
break;
}
else
{
$xkey = 'unknown';
$out = $y;
}
}
if($out != $new[0])
{
$output[$t][$xkey][] = $out;
}
}
}
if ($GLOBALS['object_type'].' '.$GLOBALS['HTTP_GET_VARS']['object'] == $t)
{
$GLOBALS['special_request'] = $output[$t];
}
2001-12-23 11:15:40 +01:00
return Array('name' => $t, 'value' => $output[$t]);
}
function parsesimpleobject($input)
{
$types = array('abstract','param','example','syntax','result','description','discussion','author','copyright','package','access');
$input = ereg_replace ("@", "@#", $input);
$new = explode("@",$input);
if (count($new) < 3)
{
return False;
}
2001-12-23 11:15:40 +01:00
unset ($new[0], $new[1]);
while (list($x,$y) = each($new))
{
if (!isset($object) || trim($new[0]) == $object)
{
$t = trim($new[0]);
reset($types);
while(list($z,$type) = each($types))
{
if(ereg('#'.$type.' ',$y))
{
$xkey = $type;
$out = $y;
$out = trim(ereg_replace('#'.$type.' ','',$out));
break;
}
else
{
$xkey = 'unknown';
$out = $y;
}
}
if($out != $new[0])
{
$output[$t][$xkey][] = $out;
}
}
}
if ($GLOBALS['object_type'].' '.$GLOBALS['HTTP_GET_VARS']['object'] == $t)
{
$GLOBALS['special_request'] = $output[$t];
}
2001-12-23 11:15:40 +01:00
return Array('name' => $t, 'value' => $output[$t]);
}
2001-12-03 18:44:16 +01:00
$app = $GLOBALS['HTTP_GET_VARS']['app'];
2001-12-03 18:46:32 +01:00
$fn = $GLOBALS['HTTP_GET_VARS']['fn'];
2001-12-03 18:44:16 +01:00
2001-12-03 18:17:35 +01:00
if($app)
{
if (!preg_match("/^[a-zA-Z0-9-_]+$/i",$app))
2001-11-12 22:24:52 +01:00
{
2001-12-03 18:17:35 +01:00
echo 'Invalid application<br>';
exit;
}
}
else
{
$app = 'phpgwapi';
}
if ($fn)
{
if (preg_match("/^class\.([a-zA-Z0-9-_]*)\.inc\.php+$/",$fn) || preg_match("/^functions\.inc\.php+$/",$fn) || preg_match("/^xml_functions\.inc\.php+$/",$fn))
{
$files[] = $fn;
2001-11-12 22:24:52 +01:00
}
else
2001-11-12 19:01:42 +01:00
{
2001-12-03 18:17:35 +01:00
echo 'No valid file selected';
exit;
2001-11-12 19:01:42 +01:00
}
2001-12-03 18:17:35 +01:00
}
else
{
$d = dir('../'.$app.'/inc/');
while ($x = $d->read())
{
if (preg_match("/^class\.([a-zA-Z0-9-_]*)\.inc\.php+$/",$x) || preg_match("/^functions\.inc\.php+$/",$x))
{
$files[] = $x;
}
2001-11-12 23:00:32 +01:00
}
2001-12-03 18:17:35 +01:00
$d->close;
2001-07-13 10:19:41 +02:00
2001-12-03 18:17:35 +01:00
reset($files);
}
2001-07-13 10:19:41 +02:00
2001-12-03 18:17:35 +01:00
while (list($p,$fn) = each($files))
{
$matches = $elements = $data = $startstop = array();
2001-12-23 11:15:40 +01:00
$string = $t = $out = $xkey = $new = '';
//$matches = $elements = $data = $class = $startstop = array();
2001-12-23 11:15:40 +01:00
//$string = $t = $out = $class = $xkey = $new = '';
2001-12-03 18:17:35 +01:00
$file = '../'.$app.'/inc/' . $fn;
echo '<br>Looking at: ' . $file . "\n";
2001-07-13 10:19:41 +02:00
2001-12-03 18:17:35 +01:00
$f = fopen($file,'r');
while (!feof($f))
{
$string .= fgets($f,8000);
}
fclose($f);
2001-07-13 10:19:41 +02:00
2001-12-03 18:17:35 +01:00
preg_match_all("#\*\!(.*)\*/#sUi",$string,$matches,PREG_SET_ORDER);
2001-07-13 10:19:41 +02:00
2001-12-23 11:15:40 +01:00
/* Now that I have the list of found inline docs, I need to figure out which group they belong to. */
$idx = 0;
$ssmatches = $matches;
reset($ssmatches);
while (list($sskey,$ssval) = each($ssmatches))
{
if (preg_match ("/@class_start/i", $ssval[1]))
{
$ssval[1] = ereg_replace ("@", "@#", $ssval[1]);
$ssval[1] = explode("@",$ssval[1]);
$ssresult = trim(ereg_replace ("#class_start", "", $ssval[1][1]));
$sstype = 'class';
unset($matches[$idx][1][0], $matches[$idx][1][1]);
$matches_starts[$sstype.' '.$ssresult] = $matches[$idx][1];
unset($matches[$idx]);
}
elseif (preg_match ("/@class_end $ssresult/i", $ssval[1]))
{
unset($ssresult);
unset($matches[$idx]);
}
elseif (preg_match ("/@collection_start/i", $ssval[1]))
{
$ssval[1] = ereg_replace ("@", "@#", $ssval[1]);
$ssval[1] = explode("@",$ssval[1]);
$ssresult = trim(ereg_replace ("#collection_start", "", $ssval[1][1]));
$sstype = 'collection';
unset($matches[$idx][1][0], $matches[$idx][1][1]);
$matches_starts[$sstype.' '.$ssresult] = $matches[$idx][1];
unset($matches[$idx]);
}
elseif (preg_match ("/@collection_end $ssresult/i", $ssval[1]))
{
unset($ssresult);
unset($matches[$idx]);
}
else
{
if (isset($ssresult))
{
$startstop[$idx] = $sstype.' '.$ssresult;
}
else
{
$startstop[$idx] = 'some_lame_string_that_wont_be_used_by_a_function';
}
}
$idx = $idx + 1;
}
unset($ssmatches, $sskey, $ssval, $ssresult, $sstype, $idx);
reset($startstop);
2001-12-03 18:17:35 +01:00
while (list($key,$val) = each($matches))
{
preg_match_all("#@(.*)$#sUi",$val[1],$data);
2001-12-23 11:15:40 +01:00
$data[1][0] = ereg_replace ("@", "@#", $data[1][0]);
$returndata = parseobject($data[1][0]);
if ($startstop[$key] == 'some_lame_string_that_wont_be_used_by_a_function')
2001-12-03 18:17:35 +01:00
{
$class['file '.$fn][$returndata['name']] = $returndata['value'];
2001-12-23 11:15:40 +01:00
}
else
{
if (!isset($class[$startstop[$key]][0]) && isset($matches_starts[$startstop[$key]]))
2001-12-03 18:17:35 +01:00
{
2001-12-23 11:15:40 +01:00
$returndoc = parsesimpleobject($matches_starts[$startstop[$key]]);
if ($returndoc != False)
{
$class[$startstop[$key]][0] = $returndoc['value'];
}
2001-12-03 18:17:35 +01:00
}
2001-12-23 11:15:40 +01:00
$class[$startstop[$key]][$returndata['name']] = $returndata['value'];
2001-12-03 18:17:35 +01:00
}
}
2001-12-23 11:15:40 +01:00
2001-12-03 18:17:35 +01:00
}
if(isset($GLOBALS['HTTP_GET_VARS']['object']))
{
$class = Array($GLOBALS['HTTP_GET_VARS']['object'] => $GLOBALS['special_request']);
}
echo '<br><pre>';
print_r($class);
// var_dump($elements);
echo '</pre>' . "\n";
2001-09-25 09:19:16 +02:00
?>