/** * {@inheritdoc} */ public function setContent($content) { Tag::setContent($content); if (preg_match('/^ # File component (?: # File path in quotes \\"([^\\"]+)\\" | # File URI (\\S+) ) # Remaining content (parsed by SourceTag) (?:\\s+(.*))? $/sux', $this->description, $matches)) { if ('' !== $matches[1]) { $this->setFilePath($matches[1]); } else { $this->setFileURI($matches[2]); } if (isset($matches[3])) { parent::setContent($matches[3]); } else { $this->setDescription(''); } $this->content = $content; } return $this; }
/** * {@inheritdoc} */ public function setContent($content) { parent::setContent($content); $parts = preg_split('/\\s+/Su', $this->description, 2); $this->link = $parts[0]; $this->setDescription(isset($parts[1]) ? $parts[1] : $parts[0]); $this->content = $content; return $this; }
/** * {@inheritdoc} */ public function setContent($content) { parent::setContent($content); $parts = preg_split('/\\s+/Su', $this->description, 2); // any output is considered a type $this->refers = $parts[0]; $this->setDescription(isset($parts[1]) ? $parts[1] : ''); $this->content = $content; return $this; }
/** * {@inheritdoc} */ public function setContent($content) { parent::setContent($content); if (preg_match('/^(' . self::REGEX_AUTHOR_NAME . ')(\\<(' . self::REGEX_AUTHOR_EMAIL . ')\\>)?$/u', $this->description, $matches)) { $this->authorName = trim($matches[1]); if (isset($matches[3])) { $this->authorEmail = trim($matches[3]); } } return $this; }
/** * {@inheritdoc} */ public function setContent($content) { Tag::setContent($content); // 1. none or more whitespace // 2. optionally the keyword "static" followed by whitespace // 3. optionally a word with underscores followed by whitespace : as // type for the return value // 4. then optionally a word with underscores followed by () and // whitespace : as method name as used by phpDocumentor // 5. then a word with underscores, followed by ( and any character // until a ) and whitespace : as method name with signature // 6. any remaining text : as description if (preg_match('/^ # Static keyword # Declates a static method ONLY if type is also present (?: (static) \\s+ )? # Return type (?: ([\\w\\|_\\\\]+) \\s+ )? # Legacy method name (not captured) (?: [\\w_]+\\(\\)\\s+ )? # Method name ([\\w\\|_\\\\]+) # Arguments \\(([^\\)]*)\\) \\s* # Description (.*) $/sux', $this->description, $matches)) { list(, $static, $this->type, $this->method_name, $this->arguments, $this->description) = $matches; if ($static) { if (!$this->type) { $this->type = 'static'; } else { $this->isStatic = true; } } else { if (!$this->type) { $this->type = 'void'; } } $this->parsedDescription = null; } return $this; }
/** * {@inheritdoc} */ public function setContent($content) { parent::setContent($content); if (preg_match('/^ # The version vector (' . self::REGEX_VECTOR . ') \\s* # The description (.+)? $/sux', $this->description, $matches)) { $this->version = $matches[1]; $this->setDescription(isset($matches[2]) ? $matches[2] : ''); $this->content = $content; } return $this; }
/** * {@inheritdoc} */ public function setContent($content) { Tag::setContent($content); $parts = preg_split('/(\\s+)/Su', $this->description, 3, PREG_SPLIT_DELIM_CAPTURE); // if the first item that is encountered is not a variable; it is a type if (isset($parts[0]) && strlen($parts[0]) > 0 && $parts[0][0] !== '$') { $this->type = array_shift($parts); array_shift($parts); } // if the next item starts with a $ or ...$ it must be the variable name if (isset($parts[0]) && strlen($parts[0]) > 0 && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$')) { $this->variableName = array_shift($parts); array_shift($parts); if (substr($this->variableName, 0, 3) === '...') { $this->isVariadic = true; $this->variableName = substr($this->variableName, 3); } } $this->setDescription(implode('', $parts)); $this->content = $content; return $this; }
/** * {@inheritdoc} */ public function setContent($content) { parent::setContent($content); if (preg_match('/^ # Starting line ([1-9]\\d*) \\s* # Number of lines (?: ((?1)) \\s+ )? # Description (.*) $/sux', $this->description, $matches)) { $this->startingLine = (int) $matches[1]; if (isset($matches[2]) && '' !== $matches[2]) { $this->lineCount = (int) $matches[2]; } $this->setDescription($matches[3]); $this->content = $content; } return $this; }
/** * Test that the \phpDocumentor\Reflection\DocBlock\Tag\VarTag can * understand the @var doc block. * * @param string $type * @param string $content * @param string $exDescription * * @covers \phpDocumentor\Reflection\DocBlock\Tag * @dataProvider provideDataForConstuctor * * @return void */ public function testConstructorParesInputsIntoCorrectFields($type, $content, $exDescription) { $tag = new Tag($type, $content); $this->assertEquals($type, $tag->getName()); $this->assertEquals($content, $tag->getContent()); $this->assertEquals($exDescription, $tag->getDescription()); }
/** * 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('/\\{ # "{@}" is not a valid inline tag. This ensures that # we do not treat it as one, but treat it literally. (?!@\\}) # We want to capture the whole tag line, but without the # inline tag delimiters. (\\@ # Match everything up to the next delimiter. [^{}]* # Nested inline tag 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. # Notice that this also matches "{}", as a way # to later introduce it as an escape sequence. \\{(?1)?\\} | # Make sure we match hanging "{". \\{ ) # Match content after the nested inline tag. [^{}]* )* # If there are more inline tags, match them as well. # We use "*" since there may not be any nested inline # tags. ) \\}/Sux', $this->contents, null, PREG_SPLIT_DELIM_CAPTURE); $count = count($this->parsedContents); for ($i = 1; $i < $count; $i += 2) { $this->parsedContents[$i] = Tag::createInstance($this->parsedContents[$i], $this->docblock); } //In order to allow "literal" inline tags, the otherwise invalid //sequence "{@}" is changed to "@", and "{}" is changed to "}". //See unit tests for examples. for ($i = 0; $i < $count; $i += 2) { $this->parsedContents[$i] = str_replace(array('{@}', '{}'), array('@', '}'), $this->parsedContents[$i]); } } return $this->parsedContents; }
/** * Appends a tag at the end of the list of tags. * * @param Tag $tag The tag to add. * * @return Tag The newly added tag. * * @throws \LogicException When the tag belongs to a different DocBlock. */ public function appendTag(Tag $tag) { if (null === $tag->getDocBlock()) { $tag->setDocBlock($this); } if ($tag->getDocBlock() === $this) { $this->tags[] = $tag; } else { throw new \LogicException('This tag belongs to a different DocBlock object.'); } return $tag; }