Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. OutputWrapper.php

class OutputWrapper

Simple output wrapper for "tagged outputs" instead of wordwrap(). This solution is based on a StackOverflow answer: https://stackoverflow.com/a/20434776/1476819 from user557597 (alias SLN).

(?: # -- Words/Characters ( # (1 start) (?> # Atomic Group - Match words with valid breaks .{1,16} # 1-N characters # Followed by one of 4 prioritized, non-linebreak whitespace (?: # break types: (?<= [^\S\r\n] ) # 1. - Behind a non-linebreak whitespace [^\S\r\n]? # ( optionally accept an extra non-linebreak whitespace ) | (?= \r? \n ) # 2. - Ahead a linebreak | $ # 3. - EOS | [^\S\r\n] # 4. - Accept an extra non-linebreak whitespace ) ) # End atomic group | .{1,16} # No valid word breaks, just break on the N'th character ) # (1 end) (?: \r? \n )? # Optional linebreak after Words/Characters | # -- Or, Linebreak (?: \r? \n | $ ) # Stand alone linebreak or at EOS )

@author KrisztiƔn Ferenczi <ferenczi.krisztian@gmail.com>

Hierarchy

  • class \Symfony\Component\Console\Helper\OutputWrapper

Expanded class hierarchy of OutputWrapper

See also

https://stackoverflow.com/a/20434776/1476819

1 file declares its use of OutputWrapper
SymfonyStyle.php in vendor/symfony/console/Style/SymfonyStyle.php

File

vendor/symfony/console/Helper/OutputWrapper.php, line 45

Namespace

Symfony\Component\Console\Helper
View source
final class OutputWrapper {
    private const TAG_OPEN_REGEX_SEGMENT = '[a-z](?:[^\\\\<>]*+ | \\\\.)*';
    private const TAG_CLOSE_REGEX_SEGMENT = '[a-z][^<>]*+';
    private const URL_PATTERN = 'https?://\\S+';
    public function __construct(bool $allowCutUrls = false) {
    }
    public function wrap(string $text, int $width, string $break = "\n") : string {
        if (!$width) {
            return $text;
        }
        $tagPattern = \sprintf('<(?:(?:%s)|/(?:%s)?)>', self::TAG_OPEN_REGEX_SEGMENT, self::TAG_CLOSE_REGEX_SEGMENT);
        $limitPattern = "{1,{$width}}";
        $patternBlocks = [
            $tagPattern,
        ];
        if (!$this->allowCutUrls) {
            $patternBlocks[] = self::URL_PATTERN;
        }
        $patternBlocks[] = '.';
        $blocks = implode('|', $patternBlocks);
        $rowPattern = "(?:{$blocks}){$limitPattern}";
        $pattern = \sprintf('#(?:((?>(%1$s)((?<=[^\\S\\r\\n])[^\\S\\r\\n]?|(?=\\r?\\n)|$|[^\\S\\r\\n]))|(%1$s))(?:\\r?\\n)?|(?:\\r?\\n|$))#imux', $rowPattern);
        $output = rtrim(preg_replace($pattern, '\\1' . $break, $text), $break);
        return str_replace(' ' . $break, $break, $output);
    }

}

Members

Title Sort descending Modifiers Object type Summary
OutputWrapper::TAG_CLOSE_REGEX_SEGMENT private constant
OutputWrapper::TAG_OPEN_REGEX_SEGMENT private constant
OutputWrapper::URL_PATTERN private constant
OutputWrapper::wrap public function
OutputWrapper::__construct public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal