diff --git a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php index 37131dc..7fb8fa7 100644 --- a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php +++ b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php @@ -24,7 +24,10 @@ class LongDescription implements \Reflector /** @var string */ protected $contents = ''; - /** @var Tag[] */ + /** @var array The contents, as an array of strings and Tag objects. */ + protected $parsedContents = null; + + /** @var \phpDocumentor\Reflection\DocBlock\Tags[] */ protected $tags = array(); /** @@ -35,13 +38,6 @@ class LongDescription implements \Reflector */ public function __construct($content) { - if (preg_match('/\{\@(.+?)\}/u', $content, $matches)) { - array_shift($matches); - foreach ($matches as $tag) { - $this->tags[] = Tag::createInstance('@' . $tag); - } - } - $this->contents = trim($content); } @@ -55,6 +51,28 @@ class LongDescription implements \Reflector return $this->contents; } + /* + * 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 getParsedContents() + { + if (null === $this->parsedContents) { + $this->parsedContents = preg_split( + '/\{(\@.*?)\}/uS', $this->contents, + null, PREG_SPLIT_DELIM_CAPTURE + ); + for ($i=1, $l = count($this->parsedContents); $i<$l; $i += 2) { + $this->parsedContents[$i] = Tag::createInstance( + $this->parsedContents[$i] + ); + } + } + return $this->parsedContents; + } + /** * Return a formatted variant of the Long Description using MarkDown. * @@ -86,16 +104,6 @@ class LongDescription implements \Reflector return trim($result); } - /** - * Returns a list of tags mentioned in the text. - * - * @return \phpDocumentor\Reflection\DocBlock\Tags[] - */ - public function getTags() - { - return $this->tags; - } - /** * Builds a string representation of this object. * diff --git a/src/phpDocumentor/Reflection/DocBlock/Tag.php b/src/phpDocumentor/Reflection/DocBlock/Tag.php index 89bf708..4ad3620 100644 --- a/src/phpDocumentor/Reflection/DocBlock/Tag.php +++ b/src/phpDocumentor/Reflection/DocBlock/Tag.php @@ -24,13 +24,16 @@ class Tag implements \Reflector /** @var string Name of the tag */ protected $tag = ''; - /** @var string content of the tag */ + /** @var string Content of the tag */ protected $content = ''; - /** @var string description of the content of this tag */ + /** @var string Description of the content of this tag */ 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; /** @var \phpDocumentor\Reflection\DocBlock docblock class */ @@ -108,6 +111,21 @@ class Tag implements \Reflector { 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