Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
TextDescriptor.php
001 <?php
002
003 /*
004 * This file is part of the Symfony package.
005 *
006 * (c) Fabien Potencier <fabien@symfony.com>
007 *
008 * For the full copyright and license information, please view the LICENSE
009 * file that was distributed with this source code.
010 */
011
012 namespace Symfony\Component\Console\Descriptor;
013
014 use Symfony\Component\Console\Application;
015 use Symfony\Component\Console\Command\Command;
016 use Symfony\Component\Console\Input\InputArgument;
017 use Symfony\Component\Console\Input\InputDefinition;
018 use Symfony\Component\Console\Input\InputOption;
019
020 /**
021 * Text descriptor.
022 *
023 * @author Jean-François Simon <contact@jfsimon.fr>
024 */
025 class TextDescriptor extends Descriptor
026 {
027 /**
028 * {@inheritdoc}
029 */
030 protected function describeInputArgument(InputArgument $argument, array $options = array())
031 {
032 if (null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) {
033 $default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($argument->getDefault()));
034 } else {
035 $default = '';
036 }
037
038 $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($argument->getName());
039 $output = str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $argument->getDescription());
040 $output = sprintf(" <info>%-${nameWidth}s</info> %s%s", $argument->getName(), $output, $default);
041
042 return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
043 }
044
045 /**
046 * {@inheritdoc}
047 */
048 protected function describeInputOption(InputOption $option, array $options = array())
049 {
050 if ($option->acceptValue() && null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) {
051 $default = sprintf('<comment> (default: %s)</comment>', $this->formatDefaultValue($option->getDefault()));
052 } else {
053 $default = '';
054 }
055
056 $nameWidth = isset($options['name_width']) ? $options['name_width'] : strlen($option->getName());
057 $nameWithShortcutWidth = $nameWidth - strlen($option->getName()) - 2;
058
059 $output = sprintf(" <info>%s</info> %-${nameWithShortcutWidth}s%s%s%s",
060 '--'.$option->getName(),
061 $option->getShortcut() ? sprintf('(-%s) ', $option->getShortcut()) : '',
062 str_replace("\n", "\n".str_repeat(' ', $nameWidth + 2), $option->getDescription()),
063 $default,
064 $option->isArray() ? '<comment> (multiple values allowed)</comment>' : ''
065 );
066
067 return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
068 }
069
070 /**
071 * {@inheritdoc}
072 */
073 protected function describeInputDefinition(InputDefinition $definition, array $options = array())
074 {
075 $nameWidth = 0;
076 foreach ($definition->getOptions() as $option) {
077 $nameLength = strlen($option->getName()) + 2;
078 if ($option->getShortcut()) {
079 $nameLength += strlen($option->getShortcut()) + 3;
080 }
081 $nameWidth = max($nameWidth, $nameLength);
082 }
083 foreach ($definition->getArguments() as $argument) {
084 $nameWidth = max($nameWidth, strlen($argument->getName()));
085 }
086 ++$nameWidth;
087
088 $messages = array();
089
090 if ($definition->getArguments()) {
091 $messages[] = '<comment>Arguments:</comment>';
092 foreach ($definition->getArguments() as $argument) {
093 $messages[] = $this->describeInputArgument($argument, array('name_width' => $nameWidth));
094 }
095 $messages[] = '';
096 }
097
098 if ($definition->getOptions()) {
099 $messages[] = '<comment>Options:</comment>';
100 foreach ($definition->getOptions() as $option) {
101 $messages[] = $this->describeInputOption($option, array('name_width' => $nameWidth));
102 }
103 $messages[] = '';
104 }
105
106 $output = implode("\n", $messages);
107
108 return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
109 }
110
111 /**
112 * {@inheritdoc}
113 */
114 protected function describeCommand(Command $command, array $options = array())
115 {
116 $command->getSynopsis();
117 $command->mergeApplicationDefinition(false);
118 $messages = array('<comment>Usage:</comment>', ' '.$command->getSynopsis(), '');
119
120 if ($command->getAliases()) {
121 $messages[] = '<comment>Aliases:</comment> <info>'.implode(', ', $command->getAliases()).'</info>';
122 }
123
124 $messages[] = $this->describeInputDefinition($command->getNativeDefinition());
125
126 if ($help = $command->getProcessedHelp()) {
127 $messages[] = '<comment>Help:</comment>';
128 $messages[] = ' '.str_replace("\n", "\n ", $help)."\n";
129 }
130
131 $output = implode("\n", $messages);
132
133 return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
134 }
135
136 /**
137 * {@inheritdoc}
138 */
139 protected function describeApplication(Application $application, array $options = array())
140 {
141 $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
142 $description = new ApplicationDescription($application, $describedNamespace);
143 $messages = array();
144
145 if (isset($options['raw_text']) && $options['raw_text']) {
146 $width = $this->getColumnWidth($description->getCommands());
147
148 foreach ($description->getCommands() as $command) {
149 $messages[] = sprintf("%-${width}s %s", $command->getName(), $command->getDescription());
150 }
151 } else {
152 $width = $this->getColumnWidth($description->getCommands());
153
154 $messages[] = $application->getHelp();
155 $messages[] = '';
156
157 if ($describedNamespace) {
158 $messages[] = sprintf("<comment>Available commands for the \"%s\" namespace:</comment>", $describedNamespace);
159 } else {
160 $messages[] = '<comment>Available commands:</comment>';
161 }
162
163 // add commands by namespace
164 foreach ($description->getNamespaces() as $namespace) {
165 if (!$describedNamespace && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
166 $messages[] = '<comment>'.$namespace['id'].'</comment>';
167 }
168
169 foreach ($namespace['commands'] as $name) {
170 $messages[] = sprintf(" <info>%-${width}s</info> %s", $name, $description->getCommand($name)->getDescription());
171 }
172 }
173 }
174
175 $output = implode("\n", $messages);
176
177 return isset($options['raw_text']) && $options['raw_text'] ? strip_tags($output) : $output;
178 }
179
180 /**
181 * Formats input option/argument default value.
182 *
183 * @param mixed $default
184 *
185 * @return string
186 */
187 private function formatDefaultValue($default)
188 {
189 if (version_compare(PHP_VERSION, '5.4', '<')) {
190 return str_replace('\/', '/', json_encode($default));
191 }
192
193 return json_encode($default, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
194 }
195
196 /**
197 * @param Command[] $commands
198 *
199 * @return int
200 */
201 private function getColumnWidth(array $commands)
202 {
203 $width = 0;
204 foreach ($commands as $command) {
205 $width = strlen($command->getName()) > $width ? strlen($command->getName()) : $width;
206 }
207
208 return $width + 2;
209 }
210 }
211