wiki.techinc.nl/includes/tidy/RemexMungerData.php
Umherirrender 44fd53fee3 Using @return never documentation on always-throw-function
This helps phan to detect unreachable code and also impossible types
after the functions.
It helps phan to avoid false positives for array keys
when the keys are checked before

Bug: T240141
Change-Id: I895f70e82b3053a46cd44135b15437e6f82a07b2
2021-09-07 17:29:03 +02:00

120 lines
3.1 KiB
PHP

<?php
namespace MediaWiki\Tidy;
/**
* @internal
*/
class RemexMungerData {
/**
* The Element for the mw:p-wrap which is a child of the current node. If
* this is set, inline insertions into this node will be diverted so that
* they insert into the p-wrap.
*
* @var \Wikimedia\RemexHtml\TreeBuilder\Element|null
*/
public $childPElement;
/**
* This tracks the mw:p-wrap node in the Serializer stack which is an
* ancestor of this node. If there is no mw:p-wrap ancestor, it is null.
*
* @var \Wikimedia\RemexHtml\Serializer\SerializerNode|null
*/
public $ancestorPNode;
/**
* The wrap base node is the body or blockquote node which is the parent
* of active p-wrappers. This is set if there is an ancestor p-wrapper,
* or if a p-wrapper was closed due to a block element being encountered
* inside it.
*
* @var \Wikimedia\RemexHtml\Serializer\SerializerNode|null
*/
public $wrapBaseNode;
/**
* Stack splitting (essentially our idea of AFE reconstruction) can clone
* formatting elements which are split over multiple paragraphs.
* TreeBuilder is not aware of the cloning, and continues to insert into
* the original element. This is set to the newer clone if this node was
* cloned, i.e. if there is an active diversion of the insertion location.
*
* @var \Wikimedia\RemexHtml\TreeBuilder\Element|null
*/
public $currentCloneElement;
/**
* Is the node a p-wrapper, with name mw:p-wrap?
*
* @var bool
*/
public $isPWrapper = false;
/**
* Is the node splittable, i.e. a formatting element or a node with a
* formatting element ancestor which is under an active or deactivated
* p-wrapper.
*
* @var bool
*/
public $isSplittable = false;
/**
* This is true if the node is a body or blockquote, which activates
* p-wrapping of child nodes.
*/
public $needsPWrapping = false;
/**
* The number of child nodes, not counting whitespace-only text nodes or
* comments.
*/
public $nonblankNodeCount = 0;
public function __set( $name, $value ) {
// @phan-suppress-previous-line PhanPluginNeverReturnMethod
throw new \Exception( "Cannot set property \"$name\"" );
}
/**
* Get a text representation of the current state of the serializer, for
* debugging.
*
* @return string
*/
public function dump() {
$parts = [];
if ( $this->childPElement ) {
$parts[] = 'childPElement=' . $this->childPElement->getDebugTag();
}
if ( $this->ancestorPNode ) {
$parts[] = "ancestorPNode=<{$this->ancestorPNode->name}>";
}
if ( $this->wrapBaseNode ) {
$parts[] = "wrapBaseNode=<{$this->wrapBaseNode->name}>";
}
if ( $this->currentCloneElement ) {
$parts[] = "currentCloneElement=" . $this->currentCloneElement->getDebugTag();
}
if ( $this->isPWrapper ) {
$parts[] = 'isPWrapper';
}
if ( $this->isSplittable ) {
$parts[] = 'isSplittable';
}
if ( $this->needsPWrapping ) {
$parts[] = 'needsPWrapping';
}
if ( $this->nonblankNodeCount ) {
$parts[] = "nonblankNodeCount={$this->nonblankNodeCount}";
}
$s = "RemexMungerData {\n";
foreach ( $parts as $part ) {
$s .= " $part\n";
}
$s .= "}\n";
return $s;
}
}