dev-master
9999999-devA lightweight doc comment/block parser.
MIT
The Requires
- php >=5.3.0
by Wayne Duran
Wallogit.com
2017 © Pedro Peláez
A lightweight doc comment/block parser.
Anodoc is a lightweight doc comment/block parser written in PHP. Doc comments are usually written in the style, (*1)
<?php /** * A test summary * * And here's a longer description that explains in detail * what this section is all about. * * @param foo bar * @param boo far * @return baz */ ?>
and are created to document source code. Anodoc parses these comments so you can access the description, the short description, the long description, and the tags., (*2)
For the example doc comment before, you can get the data like:, (*3)
parse(
"/**\n" .
" * A test summary\n" .
" *\n" .
" * And here's a longer description that explains in detail\n" .
" * what this section is all about.\n" .
" *\n" .
" * @param foo bar\n" .
" * @param boo far\n" .
" * @return baz\n" .
" */"
);
echo $doc->getShortDescription();
// "A test summary"
echo $doc->getLongDescription();
// And here's a longer description that explains in detail
// what this section is all about.
echo $doc->getTagValue('return');
// baz
$doc->getTag('return');
// A Tag object with value 'baz'
echo $doc->getTagValue('param'); // this will return the last defined value
// boo far
var_dump($doc->getTags('param'));
// a dump of a TagGroup that has 2 values
?>
You can also get all the docComments on a class by using Anodoc, (*4)
getDoc('FooClass');
// Get the main class doc comment description
echo $classDoc->getMainDoc();
// Get the doc comment for method FooClass::fooMethod()
$classDoc->getMethodDoc('fooMethod')
// Get the doc comment for the attribute $bar
$classDoc->getAttributeDoc('bar');
?>
Anodoc does not define any syntactic customizations for tag values. By default, each value retrieved from the parser returns an instance of Anodoc\Tags\GenericTag. You can register a new Tag type by creating a class that extends the abstract class 'Anodoc\Tags\Tag' and registering it through the parser or Anodoc object. Then you can set your custom syntax there., (*5)
For example, Anodoc comes with a custom tag for handling params named "Anodoc\Tags\ParamTag". The definition is:, (*6)
value = array(
'type' => $matches[1],
'name' => $matches[2],
'description' => $matches[3]
);
$this->tag_name = $tag_name;
}
function getValue() {
return $this->value;
}
function getTagName() {
return $this->tag_name;
}
function __toString() {
return (string) $this->value;
}
}
?>
This is not registered by default so you must register it yourself to be useful., (*7)
registerTag('param', 'Anodoc\Tags\ParamTag');
$classDoc = $anodoc->getDoc('FooClass');
$param = $classDoc->getMethodDoc('fooMethod')->getTag('param');
// returns an 'Anodoc\Tags\ParamTag' object
$param->getValue();
// if the param tag looks like this:
// @param string $firstName the first name of the person
// The value would be:
// array(
// 'type' => 'string', 'name' => 'firstName',
// 'description' => 'the first name of the person'
// )
?>
Anodoc doesn't parse inline tags as of the moment., (*8)
A lightweight doc comment/block parser.
MIT