33 return $this->parsoidTransform( $po, $popts,
$options );
35 return $this->legacyTransform( $po, $popts,
$options );
39 private function legacyTransform(
40 ParserOutput $po, ?ParserOptions $popts, array &$options
42 $text = $po->getContentHolderText();
43 $doc = DOMUtils::parseHTML( $text );
45 $doc = $this->transformDOM( $doc, $po, $popts, $options );
47 $body = DOMCompat::getBody( $doc );
48 $text = ContentUtils::toXML( $body, [
51 $po->setContentHolderText( $text );
55 private function parsoidTransform(
56 ParserOutput $po, ?ParserOptions $popts, array &$options
60 $hasPageBundle = PageBundleParserOutputConverter::hasPageBundle( $po );
62 if ( $hasPageBundle ) {
63 $origPb = PageBundleParserOutputConverter::pageBundleFromParserOutput( $po );
66 $doc = DomPageBundle::fromPageBundle( $origPb )->toDom(
true );
68 $doc = ContentUtils::createAndLoadDocument(
69 $po->getContentHolderText(), [
'markNew' =>
true,
'validateXMLNames' =>
true, ]
73 $doc = $this->transformDOM( $doc, $po, $popts, $options );
76 if ( $hasPageBundle ) {
77 $dpb = DomPageBundle::fromLoadedDocument( $doc, [
78 'pageBundle' => $origPb,
80 $pb = PageBundle::fromDomPageBundle( $dpb, [
'body_only' =>
true ] );
81 PageBundleParserOutputConverter::applyPageBundleDataToParserOutput( $pb, $po );
84 $body = DOMCompat::getBody( $doc );
85 '@phan-var Element $body';
86 $text = ContentUtils::ppToXML( $body, [
90 $po->setContentHolderText( $text );