"mark" => true,
];
+ /**
+ * For the purposes of this class, "metadata" elements are those that
+ * should neither trigger p-wrapping nor stop an outer p-wrapping,
+ * typically those that are themselves invisible in a browser's rendering.
+ * This isn't a complete list, it's just the tags that we're likely to
+ * encounter in practice.
+ * @var array
+ */
+ private static $metadataElements = [
+ 'style' => true,
+ 'script' => true,
+ 'link' => true,
+ 'meta' => true,
+ ];
+
private static $formattingElements = [
'a' => true,
'b' => true,
$under = $preposition === TreeBuilder::UNDER;
$elementToEnd = null;
- if ( $under && $parentData->isPWrapper && !$inline ) {
+ if ( isset( self::$metadataElements[$elementName] ) ) {
+ // The element is a metadata element, that we allow to appear in
+ // both inline and block contexts.
+ $this->trace( 'insert metadata' );
+ } elseif ( $under && $parentData->isPWrapper && !$inline ) {
// [B/b] The element is non-inline and the parent is a p-wrapper,
// close the parent and insert into its parent instead
$this->trace( 'insert B/b' );
'<i><blockquote><p></i>',
'<i></i><blockquote><p><i></i></p><p><i></i></p></blockquote>',
],
+ [
+ 'style tag isn\'t p-wrapped (T186965)',
+ '<style>/* ... */</style>',
+ '<style>/* ... */</style>',
+ ],
+ [
+ 'link tag isn\'t p-wrapped (T186965)',
+ '<link rel="foo" href="bar" />',
+ '<link rel="foo" href="bar" />',
+ ],
+ [
+ 'style tag doesn\'t split p-wrapping (T208901)',
+ 'foo <style>/* ... */</style> bar',
+ '<p>foo <style>/* ... */</style> bar</p>',
+ ],
+ [
+ 'link tag doesn\'t split p-wrapping (T208901)',
+ 'foo <link rel="foo" href="bar" /> bar',
+ '<p>foo <link rel="foo" href="bar" /> bar</p>',
+ ],
];
public function provider() {