if (isset($pkginfo['provides'])) {
foreach ($pkginfo['provides'] as $key => $what) {
$ret .= "$indent <provides type=\"$what[type]\" ";
- $ret .= "name=\"$what[name]\" />\n";
+ $ret .= "name=\"$what[name]\" ";
+ if (isset($what['extends'])) {
+ $ret .= "extends=\"$what[extends]\" ";
+ }
+ $ret .= "/>\n";
}
}
if (isset($pkginfo['filelist'])) {
}
$this->pkginfo['provides'][$key] =
array('type' => 'class', 'name' => $class);
+ if (isset($srcinfo['inheritance'][$class])) {
+ $this->pkginfo['provides'][$key]['extends'] =
+ $srcinfo['inheritance'][$class];
+ }
}
foreach ($srcinfo['declared_methods'] as $class => $methods) {
foreach ($methods as $method) {
$declared_methods = array();
$used_classes = array();
$used_functions = array();
+ $extends = array();
$nodeps = array();
for ($i = 0; $i < sizeof($tokens); $i++) {
if (is_array($tokens[$i])) {
case T_CLASS:
case T_FUNCTION:
case T_NEW:
+ case T_EXTENDS:
$look_for = $token;
continue 2;
case T_STRING:
$current_class = $data;
$current_class_level = $brace_level;
$declared_classes[] = $current_class;
+ } elseif ($look_for == T_EXTENDS) {
+ $extends[$current_class] = $data;
} elseif ($look_for == T_FUNCTION) {
if ($current_class) {
$current_function = "$current_class::$data";
"declared_methods" => $declared_methods,
"declared_functions" => $declared_functions,
"used_classes" => array_diff(array_keys($used_classes), $nodeps),
+ "inheritance" => $extends,
);
}
$decl_c = @array_merge($decl_c, $tmp['declared_classes']);
$decl_f = @array_merge($decl_f, $tmp['declared_functions']);
$decl_m = @array_merge($decl_m, $tmp['declared_methods']);
+ $inheri = @array_merge($inheri, $tmp['inheritance']);
}
$used_c = array_unique($used_c);
$decl_c = array_unique($decl_c);
'declared_methods' => $decl_m,
'declared_functions' => $decl_f,
'undeclared_classes' => $undecl_c,
+ 'inheritance' => $inheri,
);
}
<!--
- $Id: package.dtd,v 1.30 2003-03-18 12:06:06 ssb Exp $
+ $Id: package.dtd,v 1.31 2003-05-09 12:03:09 derick Exp $
This is the PEAR package description, version 1.0.
It should be used with the informal public identifier:
<!ELEMENT provides (#PCDATA)>
<!ATTLIST provides
type (ext|prog|class|function|feature|api) #REQUIRED
- name CDATA #REQUIRED>
+ name CDATA #REQUIRED
+ extends CDATA #IMPLIED>
<!ELEMENT script (#PCDATA)>
<!ATTLIST script