preserveWhiteSpace = false; return $doc; } /** * Get parsed JSON from path * * @param string $relativePath * @param bool $assoc See json_decode() * @return array */ protected static function getJson( string $relativePath, bool $assoc = true ) : array { $json = json_decode( file_get_contents( __DIR__ . '/' . $relativePath ), $assoc ); return $json; } /** * Get HTML from path * * @param string $relativePath * @return string */ protected static function getHtml( string $relativePath ) : string { $html = file_get_contents( __DIR__ . '/../' . $relativePath ); // Remove all but the body tags from full Parsoid docs if ( strpos( $html, ']*>(.*)`s', $html, $match ); $html = "
$match[1]
"; } return $html; } /** * Create a comment pareser * * @param DOMElement $rootNode * @param array $data * @return CommentParser */ protected static function createParser( DOMElement $rootNode, array $data ) : CommentParser { $services = MediaWikiServices::getInstance(); return new CommentParser( $rootNode, $services->getContentLanguage(), $services->getMainConfig(), $data ); } /** * Setup the MW environment * * @param array $config * @param array $data */ protected function setupEnv( array $config, array $data ) : void { $this->setMwGlobals( $config ); $this->setMwGlobals( [ 'wgArticlePath' => $config['wgArticlePath'], 'wgNamespaceAliases' => $config['wgNamespaceIds'], // TODO: Move this to $config 'wgLocaltimezone' => $data['localTimezone'] ] ); $this->setUserLang( $config['wgContentLang'] ); $this->setContentLang( $config['wgContentLang'] ); } }