Merge "Rewrite pref cleanup script"
[lhc/web/wiklou.git] / includes / tidy / RemexMungerData.php
1 <?php
2
3 namespace MediaWiki\Tidy;
4
5 /**
6 * @internal
7 */
8 class RemexMungerData {
9 /**
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.
13 *
14 * @var \RemexHtml\TreeBuilder\Element|null
15 */
16 public $childPElement;
17
18 /**
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.
21 *
22 * @var \RemexHtml\Serializer\SerializerNode|null
23 */
24 public $ancestorPNode;
25
26 /**
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
30 * inside it.
31 *
32 * @var \RemexHtml\Serializer\SerializerNode|null
33 */
34 public $wrapBaseNode;
35
36 /**
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.
42 *
43 * @var \RemexHtml\TreeBuilder\Element|null
44 */
45 public $currentCloneElement;
46
47 /**
48 * Is the node a p-wrapper, with name mw:p-wrap?
49 *
50 * @var bool
51 */
52 public $isPWrapper = false;
53
54 /**
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
57 * p-wrapper.
58 *
59 * @var bool
60 */
61 public $isSplittable = false;
62
63 /**
64 * This is true if the node is a body or blockquote, which activates
65 * p-wrapping of child nodes.
66 */
67 public $needsPWrapping = false;
68
69 /**
70 * The number of child nodes, not counting whitespace-only text nodes or
71 * comments.
72 */
73 public $nonblankNodeCount = 0;
74
75 public function __set( $name, $value ) {
76 throw new \Exception( "Cannot set property \"$name\"" );
77 }
78
79 /**
80 * Get a text representation of the current state of the serializer, for
81 * debugging.
82 *
83 * @return string
84 */
85 public function dump() {
86 if ( $this->childPElement ) {
87 $parts[] = 'childPElement=' . $this->childPElement->getDebugTag();
88 }
89 if ( $this->ancestorPNode ) {
90 $parts[] = "ancestorPNode=<{$this->ancestorPNode->name}>";
91 }
92 if ( $this->wrapBaseNode ) {
93 $parts[] = "wrapBaseNode=<{$this->wrapBaseNode->name}>";
94 }
95 if ( $this->currentCloneElement ) {
96 $parts[] = "currentCloneElement=" . $this->currentCloneElement->getDebugTag();
97 }
98 if ( $this->isPWrapper ) {
99 $parts[] = 'isPWrapper';
100 }
101 if ( $this->isSplittable ) {
102 $parts[] = 'isSplittable';
103 }
104 if ( $this->needsPWrapping ) {
105 $parts[] = 'needsPWrapping';
106 }
107 if ( $this->nonblankNodeCount ) {
108 $parts[] = "nonblankNodeCount={$this->nonblankNodeCount}";
109 }
110 $s = "RemexMungerData {\n";
111 foreach ( $parts as $part ) {
112 $s .= " $part\n";
113 }
114 $s .= "}\n";
115 return $s;
116 }
117 }