summaryrefslogtreecommitdiff
path: root/www/wiki/includes/tidy/RemexMungerData.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/includes/tidy/RemexMungerData.php')
-rw-r--r--www/wiki/includes/tidy/RemexMungerData.php117
1 files changed, 117 insertions, 0 deletions
diff --git a/www/wiki/includes/tidy/RemexMungerData.php b/www/wiki/includes/tidy/RemexMungerData.php
new file mode 100644
index 00000000..08d148f6
--- /dev/null
+++ b/www/wiki/includes/tidy/RemexMungerData.php
@@ -0,0 +1,117 @@
+<?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 \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 \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 \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 \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 ) {
+ 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() {
+ 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;
+ }
+}