3 namespace MediaWiki\Tidy
;
8 class RemexMungerData
{
10 * The Element for the mw:p-wrap which is a child of the current node. If
11 * this is set, inline insertions into this node will be diverted so that
12 * they insert into the p-wrap.
14 * @var \RemexHtml\TreeBuilder\Element|null
16 public $childPElement;
19 * This tracks the mw:p-wrap node in the Serializer stack which is an
20 * ancestor of this node. If there is no mw:p-wrap ancestor, it is null.
22 * @var \RemexHtml\Serializer\SerializerNode|null
24 public $ancestorPNode;
27 * The wrap base node is the body or blockquote node which is the parent
28 * of active p-wrappers. This is set if there is an ancestor p-wrapper,
29 * or if a p-wrapper was closed due to a block element being encountered
32 * @var \RemexHtml\Serializer\SerializerNode|null
37 * Stack splitting (essentially our idea of AFE reconstruction) can clone
38 * formatting elements which are split over multiple paragraphs.
39 * TreeBuilder is not aware of the cloning, and continues to insert into
40 * the original element. This is set to the newer clone if this node was
41 * cloned, i.e. if there is an active diversion of the insertion location.
43 * @var \RemexHtml\TreeBuilder\Element|null
45 public $currentCloneElement;
48 * Is the node a p-wrapper, with name mw:p-wrap?
52 public $isPWrapper = false;
55 * Is the node splittable, i.e. a formatting element or a node with a
56 * formatting element ancestor which is under an active or deactivated
61 public $isSplittable = false;
64 * This is true if the node is a body or blockquote, which activates
65 * p-wrapping of child nodes.
67 public $needsPWrapping = false;
70 * The number of child nodes, not counting whitespace-only text nodes or
73 public $nonblankNodeCount = 0;
75 public function __set( $name, $value ) {
76 throw new \
Exception( "Cannot set property \"$name\"" );
80 * Get a text representation of the current state of the serializer, for
85 public function dump() {
88 if ( $this->childPElement
) {
89 $parts[] = 'childPElement=' . $this->childPElement
->getDebugTag();
91 if ( $this->ancestorPNode
) {
92 $parts[] = "ancestorPNode=<{$this->ancestorPNode->name}>";
94 if ( $this->wrapBaseNode
) {
95 $parts[] = "wrapBaseNode=<{$this->wrapBaseNode->name}>";
97 if ( $this->currentCloneElement
) {
98 $parts[] = "currentCloneElement=" . $this->currentCloneElement
->getDebugTag();
100 if ( $this->isPWrapper
) {
101 $parts[] = 'isPWrapper';
103 if ( $this->isSplittable
) {
104 $parts[] = 'isSplittable';
106 if ( $this->needsPWrapping
) {
107 $parts[] = 'needsPWrapping';
109 if ( $this->nonblankNodeCount
) {
110 $parts[] = "nonblankNodeCount={$this->nonblankNodeCount}";
112 $s = "RemexMungerData {\n";
113 foreach ( $parts as $part ) {