예제 #1
0
 /**
  * {@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;
 }
예제 #2
0
 /**
  * {@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;
 }
예제 #3
0
 /**
  * {@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;
 }
예제 #4
0
 /**
  * {@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;
 }
예제 #5
0
 /**
  * {@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;
 }
예제 #6
0
 /**
  * {@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;
 }
예제 #7
0
 /**
  * {@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;
 }
예제 #8
0
 /**
  * {@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;
 }
예제 #9
0
 /**
  * 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());
 }
예제 #10
0
 /**
  * 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;
 }
예제 #11
0
 /**
  * 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;
 }