MediaWiki master
PageBundleParserOutputConverter.php
Go to the documentation of this file.
1<?php
2
4
7use Wikimedia\Parsoid\Core\PageBundle;
8
20 public const PARSOID_PAGE_BUNDLE_KEY = 'parsoid-page-bundle';
21
26 private function __construct() {
27 }
28
43 public static function parserOutputFromPageBundle(
44 PageBundle $pageBundle, ?ParserOutput $originalParserOutput = null
45 ): ParserOutput {
46 $parserOutput = new ParserOutput( $pageBundle->html );
47 if ( $originalParserOutput ) {
48 $parserOutput->mergeHtmlMetaDataFrom( $originalParserOutput );
49 $parserOutput->mergeTrackingMetaDataFrom( $originalParserOutput );
50 $parserOutput->mergeInternalMetaDataFrom( $originalParserOutput );
51 }
52 self::applyPageBundleDataToParserOutput( $pageBundle, $parserOutput );
53 return $parserOutput;
54 }
55
63 public static function applyPageBundleDataToParserOutput(
64 PageBundle $pageBundle, ParserOutput $parserOutput
65 ): void {
66 // Overwriting ExtensionData was deprecated in 1.38 but it's safe inside an OutputTransform pipeline,
67 // which is the only place where this should happen right now.
68 $parserOutput->setExtensionData(
69 self::PARSOID_PAGE_BUNDLE_KEY,
70 [
71 'parsoid' => $pageBundle->parsoid,
72 'mw' => $pageBundle->mw,
73 'version' => $pageBundle->version,
74 'headers' => $pageBundle->headers,
75 'contentmodel' => $pageBundle->contentmodel,
76 ]
77 );
78
79 if ( isset( $pageBundle->headers['content-language'] ) ) {
80 $lang = LanguageCode::normalizeNonstandardCodeAndWarn(
81 // @phan-suppress-next-line PhanTypeArraySuspiciousNullable
82 $pageBundle->headers['content-language']
83 );
84 $parserOutput->setLanguage( $lang );
85 }
86 }
87
95 public static function pageBundleFromParserOutput( ParserOutput $parserOutput ): PageBundle {
96 $pageBundleData = $parserOutput->getExtensionData( self::PARSOID_PAGE_BUNDLE_KEY );
97 $lang = $parserOutput->getLanguage();
98
99 $headers = $pageBundleData['headers'] ?? [];
100
101 if ( $lang ) {
102 $headers['content-language'] = $lang;
103 }
104
105 return new PageBundle(
106 $parserOutput->getRawText(),
107 $pageBundleData['parsoid'] ?? [],
108 $pageBundleData['mw'] ?? [],
109 // It would be nice to have this be "null", but PageBundle::responseData()
110 // chocks on that: T325137.
111 $pageBundleData['version'] ?? '0.0.0',
112 $pageBundleData['headers'] ?? $headers,
113 $pageBundleData['contentmodel'] ?? null
114 );
115 }
116
117 public static function hasPageBundle( ParserOutput $parserOutput ) {
118 return $parserOutput->getExtensionData( self::PARSOID_PAGE_BUNDLE_KEY ) !== null;
119 }
120}
setExtensionData( $extensionData)
Set extension data for this result.
getExtensionData()
Get the extension data as: augmentor name => data.
Methods for dealing with language codes.
ParserOutput is a rendering of a Content object or a message.
mergeHtmlMetaDataFrom(ParserOutput $source)
Merges HTML metadata such as head items, JS config vars, and HTTP cache control info from $source int...
mergeTrackingMetaDataFrom(ParserOutput $source)
Merges dependency tracking metadata such as backlinks, images used, and extension data from $source i...
getLanguage()
Get the primary language code of the output.
mergeInternalMetaDataFrom(ParserOutput $source)
Merges internal metadata such as flags, accessed options, and profiling info from $source into this P...
setLanguage(Bcp47Code $lang)
Set the primary language of the output.
getExtensionData( $key)
Gets extensions data previously attached to this ParserOutput using setExtensionData().
getRawText()
Get the cacheable text with <mw:editsection> markers still in it.
Provides methods for conversion between PageBundle and ParserOutput TODO: Convert to a trait once we ...
static pageBundleFromParserOutput(ParserOutput $parserOutput)
Returns a Parsoid PageBundle equivalent to the given ParserOutput.
static applyPageBundleDataToParserOutput(PageBundle $pageBundle, ParserOutput $parserOutput)
Given an existing ParserOutput and a PageBundle, applies the PageBundle data to the ParserOutput.
static parserOutputFromPageBundle(PageBundle $pageBundle, ?ParserOutput $originalParserOutput=null)
Creates a ParserOutput object containing the relevant data from the given PageBundle object.
Copyright (C) 2011-2022 Wikimedia Foundation and others.