last_comment_block) return; // clear last comment $comment = $thiz->last_comment_block; $thiz->last_comment_block = ""; if (substr(trim($comment),0,2) != "/*") return; $flags = array(); $desc->param = array(); $desc->author = array(); $desc->original = $comment; $lines = explode("\n",$comment ); for($ln =0; $ln < count($lines); $ln++) { $line = $lines[$ln]; $linedata = array(); // special key! $line = preg_replace('/^\s*\/\*+/','', $line); // replace /** $line = preg_replace('/\s*\*+\/\s*$/','', $line);// replace ***/ $line = preg_replace('/^\s*\*+/','', $line); // replace * if (preg_match("/^@\s*([a-z]+)\s*(.*)$/i",trim($line),$linedata)) { $key = $linedata[1]; switch ($key) { // mutliple values case "param": $ar = explode(' ',trim($linedata[2])); $param = new PHP_CodeDoc_Data_Param(); $add = ''; $nl = $ln; while(true) { if (preg_match('#^(\s*\*\s*@|\s*\*+/)#' , $lines[$nl+1])) { $ln = $nl; break; } $next = preg_replace('#^\s*\*+#', '', $lines[$nl+1]); if (strlen($next)- strlen(ltrim($next)) > 4) { // it's carry on... $add .= "\n$next"; $nl++; continue; } $ln = $nl; break; } //var_dump($add); // wierd logic ! // @param object sometype $val description if (preg_match('/\s*(\w+)\s+(\w+)\s+(\$\w+)\s+(.*)/',$linedata[2],$args)) { $param->type = $args[2]; $param->var = $args[3]; $param->desc = trim($args[4]) . $add; $desc->param[] = $param; break; } // @param sometype $val description if (preg_match('/\s*(\w+)\s+(\$\w+)\s+(.*)/',$linedata[2],$args)) { $param->type = $args[1]; $param->var = $args[2]; $param->desc = trim($args[3]) . $add; $desc->param[] = $param; break; } // @param $val description if (preg_match('/\s*(\$\w+)\s+(.*)/',$linedata[2],$args)) { $param->type = ""; $param->var = $args[1]; $param->desc = trim($args[2]) . $add; $desc->param[] = $param; break; } // @param type description if (preg_match('/\s*(\w+)\s+(.*)/',$linedata[2],$args)) { $param->type = $args[1]; $param->desc = trim($args[2]) . $add; $desc->param[] = $param; break; } break; case "return": //echo "GOT {$linedata[2]}\n"; $ar = explode(' ',trim($linedata[2])); $add = ''; $nl = $ln; while(true) { if (preg_match('#^(\s*\*\s*@|\s*\*+/)#' , $lines[$nl+1])) { $ln = $nl; break; } $next = preg_replace('#^\s*\*+#', '', $lines[$nl+1]); if (strlen($next)- strlen(ltrim($next)) > 4) { // it's carry on... $add .= "\n$next"; $nl++; continue; } $ln = $nl; break; } //echo serialize($ar); $desc->return = new PHP_CodeDoc_Data_Param(); $desc->return->type = $ar[0]; $i=0; if ($ar[0] == "object") { $desc->return->type = @$ar[1]; $i=1; } @$desc->return->var = $ar[$i]; $ar[0]=""; $ar[$i]=""; @$desc->return->desc = trim(implode(' ',$ar)) . $add; break; case "author": // multiple valued $desc->author[] = $linedata[2]; break; case "CDATA": $flags['rawdata'] = TRUE; break; default: $desc->$key = $linedata[2]; } continue; } // only get here if it wasnt a @ comment if (trim($line) == "!") { continue; } if (!$desc->short) { $desc->short = $line; continue; } if (!$desc->long) { $desc->long = $line; continue; } $desc->long .= "\n" . $line; } if (@$flags['rawdata']) { $desc->long_raw = $desc->long; $desc->long = htmlspecialchars($desc->long); } if (!$desc->short) $desc->short="No Description"; return $desc; } function shortDocParse(PHP_CodeDoc_Parser $thiz) { // parse short comments $desc = new PHP_CodeDoc_Data_PhpDoc; $pos = $thiz->pos+1; //echo "LOOKING FOR SHORT"; while($pos < $thiz->total) { $v = $thiz->tokens[$pos]; if (is_array($v)) { if (($v[0] == T_WHITESPACE) && (strpos($v[1],"\n") !== FALSE)) return $desc; if ($v[0] == T_COMMENT) { //echo "setting short {$v[1]}\n"; $desc->short = preg_replace('/^\/\//m','',$v[1]); if (strpos($v[1],"\n")) return $desc; } } $pos++; } } } ?>