diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index b0a9ddf..f67ad2a 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -6,4 +6,9 @@
./tests/
+
+
+ ./src/
+
+
diff --git a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php
index 7fb8fa7..e119f56 100644
--- a/src/phpDocumentor/Reflection/DocBlock/LongDescription.php
+++ b/src/phpDocumentor/Reflection/DocBlock/LongDescription.php
@@ -61,8 +61,37 @@ class LongDescription implements \Reflector
{
if (null === $this->parsedContents) {
$this->parsedContents = preg_split(
- '/\{(\@.*?)\}/uS', $this->contents,
- null, PREG_SPLIT_DELIM_CAPTURE
+ '/\{
+ # We want the whole tag line, but without the inline tag
+ # delimiters.
+ (\@
+ # The content should not be captured, or it will appear
+ # in the result separately.
+ (?:
+ # Match nested inline tags.
+ # Because we did not catch the tag delimiters
+ # earlier, we must be explicit with them here.
+ \{(?1)?\}
+ |
+ # "{@}" is not a valid inline tag. This ensures that
+ # having it occur inside an inline tag does not trip
+ # us up.
+ \{\@\}
+ |
+ # If we are not dealing with a nested inline tag,
+ # get the character, as long as it is not a closing
+ # tag delimiter.
+ # This is an alternative way of non-greedy matching.
+ [^\}]
+ )+ # We need to keep doing these checks for every
+ # character, since we never know where an inline tag
+ # is going to start at. The "+" ensures we are not
+ # treating "{@}" as a valid inline tag.
+ )
+ \}/xuS',
+ $this->contents,
+ null,
+ PREG_SPLIT_DELIM_CAPTURE
);
for ($i=1, $l = count($this->parsedContents); $i<$l; $i += 2) {
$this->parsedContents[$i] = Tag::createInstance(
diff --git a/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php b/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php
new file mode 100644
index 0000000..f0676b3
--- /dev/null
+++ b/tests/phpDocumentor/Reflection/DocBlock/LongDescriptionTest.php
@@ -0,0 +1,177 @@
+
+ * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link http://phpdoc.org
+ */
+
+namespace phpDocumentor\Reflection\DocBlock;
+
+/**
+ * Test class for phpDocumentor\Reflection\DocBlock\LongDescription
+ *
+ * @author Vasil Rangelov
+ * @copyright 2010-2011 Mike van Riel / Naenius. (http://www.naenius.com)
+ * @license http://www.opensource.org/licenses/mit-license.php MIT
+ * @link http://phpdoc.org
+ */
+class LongDescriptionTest extends \PHPUnit_Framework_TestCase
+{
+ public function testConstruct()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(1, $parsedContents);
+ $this->assertSame($fixture, $parsedContents[0]);
+ }
+
+ public function testInlineTagParsing()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(3, $parsedContents);
+ $this->assertSame('This is text for a ', $parsedContents[0]);
+ $this->assertInstanceOf(
+ __NAMESPACE__ . '\Tag\LinkTag',
+ $parsedContents[1]
+ );
+ $this->assertSame(
+ ' that uses inline
+tags.',
+ $parsedContents[2]
+ );
+ }
+
+ public function testInlineTagAtStartParsing()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(3, $parsedContents);
+
+ $this->assertSame('', $parsedContents[0]);
+ $this->assertInstanceOf(
+ __NAMESPACE__ . '\Tag\LinkTag',
+ $parsedContents[1]
+ );
+ $this->assertSame(
+ ' is text for a description that uses inline
+tags.',
+ $parsedContents[2]
+ );
+ }
+
+ public function testNestedInlineTagParsing()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(3, $parsedContents);
+
+ $this->assertSame(
+ 'This is text for a description with ',
+ $parsedContents[0]
+ );
+ $this->assertInstanceOf(
+ __NAMESPACE__ . '\Tag',
+ $parsedContents[1]
+ );
+ $this->assertSame('.', $parsedContents[2]);
+ }
+
+ public function testEmptyInlineTag()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(1, $parsedContents);
+ $this->assertSame($fixture, $parsedContents[0]);
+ }
+
+ public function testNestedEmptyInlineTag()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(3, $parsedContents);
+ $this->assertSame(
+ 'This is text for a description with an ',
+ $parsedContents[0]
+ );
+ $this->assertInstanceOf(
+ __NAMESPACE__ . '\Tag',
+ $parsedContents[1]
+ );
+ $this->assertSame('.', $parsedContents[2]);
+ }
+
+ public function testInlineTagDelimiters()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(1, $parsedContents);
+ $this->assertSame($fixture, $parsedContents[0]);
+ }
+
+ public function testNestedInlineTagDelimiters()
+ {
+ $fixture = <<assertSame($fixture, $object->getContents());
+
+ $parsedContents = $object->getParsedContents();
+ $this->assertCount(3, $parsedContents);
+ $this->assertSame(
+ 'This is text for a description with ',
+ $parsedContents[0]
+ );
+ $this->assertInstanceOf(
+ __NAMESPACE__ . '\Tag',
+ $parsedContents[1]
+ );
+ $this->assertSame('.', $parsedContents[2]);
+ }
+}
\ No newline at end of file
diff --git a/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php b/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php
index dfcd353..a059d9a 100644
--- a/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php
+++ b/tests/phpDocumentor/Reflection/DocBlock/Tag/CoversTagTest.php
@@ -26,7 +26,7 @@ class CoversTagTest extends \PHPUnit_Framework_TestCase
* @param string $exContent
* @param string $exReference
*
- * @covers \phpDocumentor\Reflection\DocBlock\Tag\Covers::__construct
+ * @covers \phpDocumentor\Reflection\DocBlock\Tag\CoversTag::__construct
* @dataProvider provideDataForConstuctor
*
* @return void