You are here

protected static function ListTagPlugin::splitContent in Extensible BBCode 4.0.x

Same name and namespace in other branches
  1. 8.3 standard/src/Plugin/XBBCode/ListTagPlugin.php \Drupal\xbbcode_standard\Plugin\XBBCode\ListTagPlugin::splitContent()

Split the tag's children into list items.

Any instance of [*] in the top-level text will be used as a delimiter.

Parameters

\Drupal\xbbcode\Parser\Tree\ElementInterface[] $children: The tag's child elements in the parse tree.

Return value

\Drupal\xbbcode\Parser\Tree\NodeElementInterface[] A sequence of nodes, each containing a part of the parse tree.

1 call to ListTagPlugin::splitContent()
ListTagPlugin::buildElement in standard/src/Plugin/XBBCode/ListTagPlugin.php
Build a render array from the tag.

File

standard/src/Plugin/XBBCode/ListTagPlugin.php, line 139

Class

ListTagPlugin
Renders a list.

Namespace

Drupal\xbbcode_standard\Plugin\XBBCode

Code

protected static function splitContent(array $children) : array {
  [
    $token,
    $text,
  ] = static::encodeTree($children);

  // Trim, and strip linebreaks before newlines.
  $trimmed = preg_replace('/<br\\s*\\/?>\\n/', "\n", $text);
  $breaks = $trimmed !== $text;
  $text = trim($trimmed);

  // Split on [*] at the start of lines.
  $items = preg_split('/^\\s*\\[\\*]\\s*/m', $text);
  array_shift($items);
  foreach ($items as $i => $item) {
    $item = trim($item);
    if ($breaks) {
      $item = nl2br($item);
    }
    $items[$i] = static::decodeTree($item, $children, $token);
  }
  return $items;
}