1 | <?php |
||
21 | class Serializer |
||
22 | { |
||
23 | /** @var string The string to indent the comment with. */ |
||
24 | protected $indentString = ' '; |
||
25 | |||
26 | /** @var int The number of times the indent string is repeated. */ |
||
27 | protected $indent = 0; |
||
28 | |||
29 | /** @var bool Whether to indent the first line with the given indent amount and string. */ |
||
30 | protected $isFirstLineIndented = true; |
||
31 | |||
32 | /** @var int|null The max length of a line. */ |
||
33 | protected $lineLength = null; |
||
34 | |||
35 | /** @var DocBlock\Tags\Formatter A custom tag formatter. */ |
||
36 | protected $tagFormatter = null; |
||
37 | |||
38 | /** |
||
39 | * Create a Serializer instance. |
||
40 | * |
||
41 | * @param int $indent The number of times the indent string is repeated. |
||
42 | * @param string $indentString The string to indent the comment with. |
||
43 | * @param bool $indentFirstLine Whether to indent the first line. |
||
44 | * @param int|null $lineLength The max length of a line or NULL to disable line wrapping. |
||
45 | * @param DocBlock\Tags\Formatter $tagFormatter A custom tag formatter, defaults to PassthroughFormatter. |
||
46 | */ |
||
47 | 8 | public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null, $tagFormatter = null) |
|
61 | |||
62 | /** |
||
63 | * Generate a DocBlock comment. |
||
64 | * |
||
65 | * @param DocBlock $docblock The DocBlock to serialize. |
||
66 | * |
||
67 | * @return string The serialized doc block. |
||
68 | */ |
||
69 | 4 | public function getDocComment(DocBlock $docblock) |
|
70 | { |
||
71 | 4 | $indent = str_repeat($this->indentString, $this->indent); |
|
72 | 4 | $firstIndent = $this->isFirstLineIndented ? $indent : ''; |
|
73 | // 3 === strlen(' * ') |
||
74 | 4 | $wrapLength = $this->lineLength ? $this->lineLength - strlen($indent) - 3 : null; |
|
75 | |||
76 | 4 | $text = $this->removeTrailingSpaces( |
|
77 | 4 | $indent, |
|
78 | 4 | $this->addAsterisksForEachLine( |
|
79 | 4 | $indent, |
|
80 | 4 | $this->getSummaryAndDescriptionTextBlock($docblock, $wrapLength) |
|
81 | ) |
||
82 | ); |
||
83 | |||
84 | 4 | $comment = "{$firstIndent}/**\n{$indent} * {$text}\n{$indent} *\n"; |
|
85 | 4 | $comment = $this->addTagBlock($docblock, $wrapLength, $indent, $comment); |
|
86 | 4 | $comment .= $indent . ' */'; |
|
87 | |||
88 | 4 | return $comment; |
|
89 | } |
||
90 | |||
91 | /** |
||
92 | * @param $indent |
||
93 | * @param $text |
||
94 | * @return mixed |
||
95 | */ |
||
96 | 4 | private function removeTrailingSpaces($indent, $text) |
|
100 | |||
101 | /** |
||
102 | * @param $indent |
||
103 | * @param $text |
||
104 | * @return mixed |
||
105 | */ |
||
106 | 4 | private function addAsterisksForEachLine($indent, $text) |
|
110 | |||
111 | /** |
||
112 | * @param DocBlock $docblock |
||
113 | * @param $wrapLength |
||
114 | * @return string |
||
115 | */ |
||
116 | 4 | private function getSummaryAndDescriptionTextBlock(DocBlock $docblock, $wrapLength) |
|
126 | |||
127 | /** |
||
128 | * @param DocBlock $docblock |
||
129 | * @param $wrapLength |
||
130 | * @param $indent |
||
131 | * @param $comment |
||
132 | * @return string |
||
133 | */ |
||
134 | 4 | private function addTagBlock(DocBlock $docblock, $wrapLength, $indent, $comment) |
|
148 | } |
||
149 |