Added Tag::getParsedDescription();

Minor performance tweak at LongDescription.
This commit is contained in:
Vasil Rangelov
2012-09-26 16:27:32 +03:00
parent ddc3005eea
commit a2bf8995dc
2 changed files with 27 additions and 7 deletions
@@ -38,14 +38,16 @@ class LongDescription implements \Reflector
*/ */
public function __construct($content) public function __construct($content)
{ {
$this->parsedContents = preg_split('/{\@(.+?)\}/uS', $content, null, PREG_SPLIT_DELIM_CAPTURE); $this->parsedContents = preg_split(
'/\{(\@.*)\}/uS',
$this->contents = trim($content),
null, PREG_SPLIT_DELIM_CAPTURE
);
for ($i=1, $l = count($this->parsedContents); $i<$l; $i += 2) { for ($i=1, $l = count($this->parsedContents); $i<$l; $i += 2) {
$this->parsedContents[$i] = $this->tags[] = Tag::createInstance( $this->parsedContents[$i] = $this->tags[] = Tag::createInstance(
'@' . $this->parsedContents[$i] $this->parsedContents[$i]
); );
} }
$this->contents = trim($content);
} }
/** /**
+21 -3
View File
@@ -24,13 +24,16 @@ class Tag implements \Reflector
/** @var string Name of the tag */ /** @var string Name of the tag */
protected $tag = ''; protected $tag = '';
/** @var string content of the tag */ /** @var string Content of the tag */
protected $content = ''; protected $content = '';
/** @var string description of the content of this tag */ /** @var string Description of the content of this tag */
protected $description = ''; protected $description = '';
/** @var array The description, as an array of strings and Tag objects. */
protected $parsedDescription = null;
/** @var int line number of the tag */ /** @var int Line number of the tag */
protected $line_number = 0; protected $line_number = 0;
/** @var \phpDocumentor\Reflection\DocBlock docblock class */ /** @var \phpDocumentor\Reflection\DocBlock docblock class */
@@ -108,6 +111,21 @@ class Tag implements \Reflector
{ {
return $this->description; return $this->description;
} }
/*
* Returns the parsed text of this description.
*
* @return array An array of strings and tag objects, in the order they
* occur within the description.
*/
public function getParsedDescription()
{
if (null === $this->parsedDescription) {
$description = new LongDescription($this->description);
$this->parsedDescription = $description->getParsedContents();
}
return $this->parsedDescription;
}
/** /**
* Set the tag line number * Set the tag line number