Mercurial > hg > cmmr2012-drupal-site
comparison vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php @ 2:5311817fb629
Theme updates
author | Chris Cannam |
---|---|
date | Tue, 10 Jul 2018 13:19:18 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1:0b0e5f3b1e83 | 2:5311817fb629 |
---|---|
1 <?php | |
2 /** | |
3 * This file is part of phpDocumentor. | |
4 * | |
5 * For the full copyright and license information, please view the LICENSE | |
6 * file that was distributed with this source code. | |
7 * | |
8 * @copyright 2010-2015 Mike van Riel<mike@phpdoc.org> | |
9 * @license http://www.opensource.org/licenses/mit-license.php MIT | |
10 * @link http://phpdoc.org | |
11 */ | |
12 | |
13 namespace phpDocumentor\Reflection\DocBlock; | |
14 | |
15 use phpDocumentor\Reflection\DocBlock\Tags\Formatter; | |
16 use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; | |
17 use Webmozart\Assert\Assert; | |
18 | |
19 /** | |
20 * Object representing to description for a DocBlock. | |
21 * | |
22 * A Description object can consist of plain text but can also include tags. A Description Formatter can then combine | |
23 * a body template with sprintf-style placeholders together with formatted tags in order to reconstitute a complete | |
24 * description text using the format that you would prefer. | |
25 * | |
26 * Because parsing a Description text can be a verbose process this is handled by the {@see DescriptionFactory}. It is | |
27 * thus recommended to use that to create a Description object, like this: | |
28 * | |
29 * $description = $descriptionFactory->create('This is a {@see Description}', $context); | |
30 * | |
31 * The description factory will interpret the given body and create a body template and list of tags from them, and pass | |
32 * that onto the constructor if this class. | |
33 * | |
34 * > The $context variable is a class of type {@see \phpDocumentor\Reflection\Types\Context} and contains the namespace | |
35 * > and the namespace aliases that apply to this DocBlock. These are used by the Factory to resolve and expand partial | |
36 * > type names and FQSENs. | |
37 * | |
38 * If you do not want to use the DescriptionFactory you can pass a body template and tag listing like this: | |
39 * | |
40 * $description = new Description( | |
41 * 'This is a %1$s', | |
42 * [ new See(new Fqsen('\phpDocumentor\Reflection\DocBlock\Description')) ] | |
43 * ); | |
44 * | |
45 * It is generally recommended to use the Factory as that will also apply escaping rules, while the Description object | |
46 * is mainly responsible for rendering. | |
47 * | |
48 * @see DescriptionFactory to create a new Description. | |
49 * @see Description\Formatter for the formatting of the body and tags. | |
50 */ | |
51 class Description | |
52 { | |
53 /** @var string */ | |
54 private $bodyTemplate; | |
55 | |
56 /** @var Tag[] */ | |
57 private $tags; | |
58 | |
59 /** | |
60 * Initializes a Description with its body (template) and a listing of the tags used in the body template. | |
61 * | |
62 * @param string $bodyTemplate | |
63 * @param Tag[] $tags | |
64 */ | |
65 public function __construct($bodyTemplate, array $tags = []) | |
66 { | |
67 Assert::string($bodyTemplate); | |
68 | |
69 $this->bodyTemplate = $bodyTemplate; | |
70 $this->tags = $tags; | |
71 } | |
72 | |
73 /** | |
74 * Returns the tags for this DocBlock. | |
75 * | |
76 * @return Tag[] | |
77 */ | |
78 public function getTags() | |
79 { | |
80 return $this->tags; | |
81 } | |
82 | |
83 /** | |
84 * Renders this description as a string where the provided formatter will format the tags in the expected string | |
85 * format. | |
86 * | |
87 * @param Formatter|null $formatter | |
88 * | |
89 * @return string | |
90 */ | |
91 public function render(Formatter $formatter = null) | |
92 { | |
93 if ($formatter === null) { | |
94 $formatter = new PassthroughFormatter(); | |
95 } | |
96 | |
97 $tags = []; | |
98 foreach ($this->tags as $tag) { | |
99 $tags[] = '{' . $formatter->format($tag) . '}'; | |
100 } | |
101 | |
102 return vsprintf($this->bodyTemplate, $tags); | |
103 } | |
104 | |
105 /** | |
106 * Returns a plain string representation of this description. | |
107 * | |
108 * @return string | |
109 */ | |
110 public function __toString() | |
111 { | |
112 return $this->render(); | |
113 } | |
114 } |