PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 2.2.0
Independent Analytics – WordPress Analytics Plugin v2.2.0
2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / vendor / symfony / console / Output / ConsoleSectionOutput.php
independent-analytics / vendor / symfony / console / Output Last commit date
BufferedOutput.php 2 years ago ConsoleOutput.php 2 years ago ConsoleOutputInterface.php 2 years ago ConsoleSectionOutput.php 2 years ago NullOutput.php 2 years ago Output.php 2 years ago OutputInterface.php 2 years ago StreamOutput.php 2 years ago TrimmedBufferOutput.php 2 years ago
ConsoleSectionOutput.php
125 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace IAWP_SCOPED\Symfony\Component\Console\Output;
12
13 use IAWP_SCOPED\Symfony\Component\Console\Formatter\OutputFormatterInterface;
14 use IAWP_SCOPED\Symfony\Component\Console\Helper\Helper;
15 use IAWP_SCOPED\Symfony\Component\Console\Terminal;
16 /**
17 * @author Pierre du Plessis <pdples@gmail.com>
18 * @author Gabriel Ostrolucký <gabriel.ostrolucky@gmail.com>
19 * @internal
20 */
21 class ConsoleSectionOutput extends StreamOutput
22 {
23 private $content = [];
24 private $lines = 0;
25 private $sections;
26 private $terminal;
27 /**
28 * @param resource $stream
29 * @param ConsoleSectionOutput[] $sections
30 */
31 public function __construct($stream, array &$sections, int $verbosity, bool $decorated, OutputFormatterInterface $formatter)
32 {
33 parent::__construct($stream, $verbosity, $decorated, $formatter);
34 \array_unshift($sections, $this);
35 $this->sections =& $sections;
36 $this->terminal = new Terminal();
37 }
38 /**
39 * Clears previous output for this section.
40 *
41 * @param int $lines Number of lines to clear. If null, then the entire output of this section is cleared
42 */
43 public function clear(int $lines = null)
44 {
45 if (empty($this->content) || !$this->isDecorated()) {
46 return;
47 }
48 if ($lines) {
49 \array_splice($this->content, -($lines * 2));
50 // Multiply lines by 2 to cater for each new line added between content
51 } else {
52 $lines = $this->lines;
53 $this->content = [];
54 }
55 $this->lines -= $lines;
56 parent::doWrite($this->popStreamContentUntilCurrentSection($lines), \false);
57 }
58 /**
59 * Overwrites the previous output with a new message.
60 *
61 * @param array|string $message
62 */
63 public function overwrite($message)
64 {
65 $this->clear();
66 $this->writeln($message);
67 }
68 public function getContent() : string
69 {
70 return \implode('', $this->content);
71 }
72 /**
73 * @internal
74 */
75 public function addContent(string $input)
76 {
77 foreach (\explode(\PHP_EOL, $input) as $lineContent) {
78 $this->lines += \ceil($this->getDisplayLength($lineContent) / $this->terminal->getWidth()) ?: 1;
79 $this->content[] = $lineContent;
80 $this->content[] = \PHP_EOL;
81 }
82 }
83 /**
84 * {@inheritdoc}
85 */
86 protected function doWrite(string $message, bool $newline)
87 {
88 if (!$this->isDecorated()) {
89 parent::doWrite($message, $newline);
90 return;
91 }
92 $erasedContent = $this->popStreamContentUntilCurrentSection();
93 $this->addContent($message);
94 parent::doWrite($message, \true);
95 parent::doWrite($erasedContent, \false);
96 }
97 /**
98 * At initial stage, cursor is at the end of stream output. This method makes cursor crawl upwards until it hits
99 * current section. Then it erases content it crawled through. Optionally, it erases part of current section too.
100 */
101 private function popStreamContentUntilCurrentSection(int $numberOfLinesToClearFromCurrentSection = 0) : string
102 {
103 $numberOfLinesToClear = $numberOfLinesToClearFromCurrentSection;
104 $erasedContent = [];
105 foreach ($this->sections as $section) {
106 if ($section === $this) {
107 break;
108 }
109 $numberOfLinesToClear += $section->lines;
110 $erasedContent[] = $section->getContent();
111 }
112 if ($numberOfLinesToClear > 0) {
113 // move cursor up n lines
114 parent::doWrite(\sprintf("\x1b[%dA", $numberOfLinesToClear), \false);
115 // erase to end of screen
116 parent::doWrite("\x1b[0J", \false);
117 }
118 return \implode('', \array_reverse($erasedContent));
119 }
120 private function getDisplayLength(string $text) : int
121 {
122 return Helper::width(Helper::removeDecoration($this->getFormatter(), \str_replace("\t", ' ', $text)));
123 }
124 }
125