Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
LanguageService
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
14 / 14
100.00% covered (success)
100.00%
1 / 1
1
 canWordsBeSplitSafely
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace MediaWiki\Skins\Vector\Services;
4
5class LanguageService {
6    /**
7     * The list of language codes for those languages that the search autocomplete widget cannot
8     * split a word on a Unicode code point followed by one or many combining marks (also code
9     * points).
10     *
11     * This list was compiled by [@TJones](https://phabricator.wikimedia.org/p/TJones/) as part
12     * of [T281797](https://phabricator.wikimedia.org/T281797).
13     *
14     * @var string[]
15     */
16    private $splittableLanguages;
17
18    public function __construct() {
19        $this->splittableLanguages = [
20            'ar', 'ary', 'arz', 'ckb', 'fa', 'glk', 'ks', 'mzn', 'pnb', 'ps', 'sd', 'skr', 'ug', 'ur',
21            'as', 'bn', 'bpy',
22            'awa', 'bh', 'dty', 'gom', 'hi', 'ks', 'mai', 'mr', 'ne', 'new', 'pi', 'sa',
23            'gu',
24            'pa',
25            'kn', 'tcy',
26            'km',
27            'ml',
28            'or',
29            'si',
30            'ta',
31            'te',
32        ];
33    }
34
35    /**
36     * Gets whether or not we can split words arbitrarily, for example when highlighting the user's query in the search
37     * autocomplete widget.
38     *
39     * @param string $code
40     * @return bool
41     */
42    public function canWordsBeSplitSafely( string $code ): bool {
43        return !in_array( $code, $this->splittableLanguages );
44    }
45}