foreach ($this->bbcodes[$tag['name']]->getAttributes() as $attribute) {
if ($attribute->useText && !isset($openingTag['attributes'][$attribute->attributeNo])) {
$openingTag['attributes'][$attribute->attributeNo] = $buffer;
+ $openingTag['useText'] = $attribute->attributeNo;
$hideBuffer = true;
break;
}
// uses base64 encoding to avoid an "escape" nightmare
$attributes = ' data-attributes="' . base64_encode(JSON::encode($tag['attributes'])) . '"';
+
+ if (isset($tag['useText'])) {
+ $attributes .= ' data-use-text="' . $tag['useText'] . '"';
+ }
}
return '<woltlab-metacode-marker data-name="' . $name . '" data-uuid="' . $uuid . '" data-source="' . base64_encode($tag['source']) . '"' . $attributes . ' />';
$pairs[$uuid]['name'] = $name;
$pairs[$uuid]['open'] = $element;
$pairs[$uuid]['openSource'] = $source;
+ $pairs[$uuid]['useText'] = ($element->hasAttribute('data-use-text')) ? $element->getAttribute('data-use-text') : false;
}
else {
$pairs[$uuid]['close'] = $element;
'close' => $data['close'],
'closeSource' => $data['closeSource'],
'open' => $data['open'],
- 'openSource' => $data['openSource']
+ 'openSource' => $data['openSource'],
+ 'useText' => $data['useText']
];
}
/** @var \DOMElement $end */
$end = $pair['close'];
- $attributes = isset($pair['attributes']) ? $pair['attributes'] : '';
- $textNode = $start->ownerDocument->createTextNode($pair['openSource'] ?: HtmlBBCodeParser::getInstance()->buildBBCodeTag($name, $attributes, true));
+ $attributes = isset($pair['attributes']) ? $pair['attributes'] : [];
+ $content = '';
+ if (isset($pair['useText']) && isset($attributes[$pair['useText']])) {
+ $content = array_splice($attributes, $pair['useText'])[0];
+ }
+
+ $textNode = $start->ownerDocument->createTextNode(($pair['openSource'] ?: HtmlBBCodeParser::getInstance()->buildBBCodeTag($name, $attributes, true)) . $content);
DOMUtil::insertBefore($textNode, $start);
DOMUtil::removeNode($start);