function run() { global $classes, $interfaces; $p = new CodeParser(); OutputWriter::Object()->setNativeInterfaces($interfaces); OutputWriter::Object()->setNativeClasses($classes); OutputWriter::Object()->setOutputGran($this->gran); OutputWriter::Object()->setOutputTarget($this->out); //if ($this->gran == OutputWriter::OUTPUT_GRAN_CLASS || $this->gran == OutputWriter::OUTPUT_GRAN_FILE) { if (is_dir($this->tgt)) { $p->parseRecursive($this->tgt); } else { $p->parse($this->tgt); } }
/** Extract and output a class (or interface) definition from $accum, write the elements name as $tag_name */ private function parseClassDef($accum, $tag_name) { //Step 1 - strip crap from the beginning of $accum for ($i = count($accum) - 1; $i >= 0; $i--) { if ($accum[$i] == ';' || $accum[$i] == '}') { $accum = array_slice($accum, count($accum) - $i); break; } } //Parse forwards! $flag = ''; $name = ''; $ext = ''; $impl = array(); $abstract_flag = false; $commstack = array(); $line_num = 0; $decl = ''; //YO foreach ($accum as $tok) { if (is_array($tok)) { list($tid, $val, $lnum) = $tok; if (!in_array($tid, array(T_COMMENT, T_DOC_COMMENT, T_OPEN_TAG))) { $decl .= $val; } switch ($tid) { case T_CLASS: case T_INTERFACE: $flag = 'class'; break; case T_EXTENDS: $flag = 'ext'; break; case T_IMPLEMENTS: $flag = 'impl'; break; case T_ABSTRACT: $abstract_flag = true; break; case T_COMMENT: case T_DOC_COMMENT: $commstack[] = $tok; break; case T_STRING: if ($flag == 'class') { $name = $val; $line_num = $lnum; } else { if ($flag == 'ext') { $ext = $val; if (OutputWriter::Object()->isNativeClass($val)) { $this->accumulateNative($val); } } else { if ($flag == 'impl') { $impl[] = $val; if (OutputWriter::Object()->isNativeInterface($val)) { $this->accumulateNative($val); } } } } } } else { $decl .= $tok; } } $data = new stdClass(); $data->comments = $commstack; $data->line_number = $line_num; $data->name = $name; $data->is_native = false; $data->abstract_flag = $abstract_flag; $data->ext = $ext; $data->decl = $decl; if ($impl) { $data->impl = $impl; } else { $data->impl = array(); } switch ($tag_name) { case 'class': $this->ow->startClass($data); break; case 'interface': $this->ow->startInterface($data); break; default: throw new Exception("Unknown tag '{$tag_name}'", 967765); } }
function testRecursiveInputClassOutput(&$output) { echo "\n\ttestRecursiveInputClassOutput\n"; $p = new CodeParser(); $tgt = $this->mybase . '/testRecursiveInputClassOutput'; mkdir($tgt); OutputWriter::Object()->setOutputGran(OutputWriter::OUTPUT_GRAN_CLASS); OutputWriter::Object()->setOutputTarget($tgt); $p->parseRecursive($this->recursive_base); }