Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
WikiLinkParserFactory
100.00% covered (success)
100.00%
16 / 16
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getWikiLinkParser
100.00% covered (success)
100.00%
12 / 12
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3namespace FileImporter\Services\Wikitext;
4
5use FileImporter\Remote\MediaWiki\MediaWikiSourceUrlParser;
6use MediaWiki\Languages\LanguageFactory;
7use MediaWiki\MediaWikiServices;
8use MediaWiki\Title\NamespaceInfo;
9use MediaWiki\Title\TitleParser;
10
11/**
12 * @license GPL-2.0-or-later
13 * @author Thiemo Kreuz
14 */
15class WikiLinkParserFactory {
16    use MediaWikiSourceUrlParser;
17
18    private TitleParser $parser;
19    private NamespaceInfo $namespaceInfo;
20    private LanguageFactory $languageFactory;
21
22    public function __construct() {
23        $services = MediaWikiServices::getInstance();
24        $this->parser = $services->getTitleParser();
25        $this->namespaceInfo = $services->getNamespaceInfo();
26        $this->languageFactory = $services->getLanguageFactory();
27    }
28
29    public function getWikiLinkParser( ?string $languageCode, string $interWikiPrefix ): WikiLinkParser {
30        $parser = new WikiLinkParser();
31
32        // Minor performance optimization: skip this step if there is nothing to unlocalize
33        if ( $languageCode && $languageCode !== 'en' ) {
34            $language = $this->languageFactory->getLanguage( $languageCode );
35            $parser->registerWikiLinkCleaner( new NamespaceUnlocalizer(
36                new LocalizedMediaWikiNamespaceLookup( $language ),
37                $this->namespaceInfo
38            ) );
39        }
40
41        $parser->registerWikiLinkCleaner( new WikiLinkPrefixer(
42            $interWikiPrefix,
43            $this->parser
44        ) );
45
46        return $parser;
47    }
48
49}