Completed
Branch master (939199)
by
unknown
39:35
created

languages/classes/LanguageKu.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Kurdish specific code.
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License along
16
 * with this program; if not, write to the Free Software Foundation, Inc.,
17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
 * http://www.gnu.org/copyleft/gpl.html
19
 *
20
 * @file
21
 * @ingroup Language
22
 */
23
24
/**
25
 * Kurdish converter routines
26
 *
27
 * @ingroup Language
28
 */
29
class KuConverter extends LanguageConverter {
30
	public $mArabicToLatin = [
31
		'ب' => 'b', 'ج' => 'c', 'چ' => 'ç', 'د' => 'd', 'ف' => 'f', 'گ' => 'g', 'ھ' => 'h',
32
		'ہ' => 'h', 'ه' => 'h', 'ح' => 'h', 'ژ' => 'j', 'ك' => 'k', 'ک' => 'k', 'ل' => 'l',
33
		'م' => 'm', 'ن' => 'n', 'پ' => 'p', 'ق' => 'q', 'ر' => 'r', 'س' => 's', 'ش' => 'ş',
34
		'ت' => 't', 'ڤ' => 'v', 'خ' => 'x', 'غ' => 'x', 'ز' => 'z',
35
36
// ک و => ku -- ist richtig
37
//  و ك=> ku -- ist auch richtig
38
39
		/* Doppel- und Halbvokale */
40
		'ڵ' => 'll', # ll
41
		'ڕ' => 'rr', # rr
42
		'ا' => 'a',
43
		# 'ئێ' => 'ê', # initial e
44
		'ە' => 'e',
45
		'ه‌' => 'e', # with one non-joiner
46
		'ه‌‌' => 'e', # with two non-joiner
47
		'ة' => 'e',
48
		'ێ' => 'ê',
49
		'ي' => 'î',
50
		'ی' => 'î', # U+06CC  db 8c  ARABIC LETTER FARSI YEH
51
		'ى' => 'î', # U+0649  d9 89  ARABIC LETTER ALEF MAKSURA
52
		'ۆ' => 'o',
53
		'و' => 'w',
54
		'ئ' => '', # initial hemze should not be shown
55
		'،' => ',',
56
		'ع' => '\'', # ayn
57
		'؟' => '?',
58
59
		# digits
60
		'٠' => '0', # &#x0660;
61
		'١' => '1', # &#x0661;
62
		'٢' => '2', # &#x0662;
63
		'٣' => '3', # &#x0663;
64
		'٤' => '4', # &#x0664;
65
		'٥' => '5', # &#x0665;
66
		'٦' => '6', # &#x0666;
67
		'٧' => '7', # &#x0667;
68
		'٨' => '8', # &#x0668;
69
		'٩' => '9', # &#x0669;
70
	];
71
72
	public $mLatinToArabic = [
73
		'b' => 'ب', 'c' => 'ج', 'ç' => 'چ', 'd' => 'د', 'f' => 'ف', 'g' => 'گ',
74
		'h' => 'ه', 'j' => 'ژ', 'k' => 'ک', 'l' => 'ل',
75
		'm' => 'م', 'n' => 'ن', 'p' => 'پ', 'q' => 'ق', 'r' => 'ر', 's' => 'س', 'ş' => 'ش',
76
		't' => 'ت', 'v' => 'ڤ',
77
		'x' => 'خ', 'y' => 'ی', 'z' => 'ز',
78
79
		'B' => 'ب', 'C' => 'ج', 'Ç' => 'چ', 'D' => 'د', 'F' => 'ف', 'G' => 'گ', 'H' => 'ھ',
80
		'H' => 'ہ', 'H' => 'ه', 'H' => 'ح', 'J' => 'ژ', 'K' => 'ك', 'K' => 'ک', 'L' => 'ل',
81
		'M' => 'م', 'N' => 'ن', 'P' => 'پ', 'Q' => 'ق', 'R' => 'ر', 'S' => 'س', 'Ş' => 'ش',
82
		'T' => 'ت', 'V' => 'ڤ', 'W' => 'و', 'X' => 'خ',
83
		'Y' => 'ی', 'Z' => 'ز',
84
85
		/* Doppelkonsonanten */
86
		# 'll' => 'ڵ', # wenn es geht, doppel-l und l getrennt zu behandeln
87
		# 'rr' => 'ڕ', # selbiges für doppel-r
88
89
		/* Einzelne Großbuchstaben */
90
		// ' C' => 'ج',
91
92
		/* Vowels */
93
		'a' => 'ا',
94
		'e' => 'ە',
95
		'ê' => 'ێ',
96
		'i' => '',
97
		'î' => 'ی',
98
		'o' => 'ۆ',
99
		'u' => 'و',
100
		'û' => 'وو',
101
		'w' => 'و',
102
		',' => '،',
103
		'?' => '؟',
104
105
		# Try to replace the leading vowel
106
		' a' => 'ئا ',
107
		' e' => 'ئە ',
108
		' ê' => 'ئێ ',
109
		' î' => 'ئی ',
110
		' o' => 'ئۆ ',
111
		' u' => 'ئو ',
112
		' û' => 'ئوو ',
113
		'A' => 'ئا',
114
		'E' => 'ئە',
115
		'Ê' => 'ئێ',
116
		'Î' => 'ئی',
117
		'O' => 'ئۆ',
118
		'U' => 'ئو',
119
		'Û' => 'ئوو',
120
		' A' => 'ئا ',
121
		' E' => 'ئە ',
122
		' Ê' => 'ئێ ',
123
		' Î' => 'ئی ',
124
		' O' => 'ئۆ ',
125
		' U' => 'ئو ',
126
		' Û' => 'ئوو ',
127
		# eyn erstmal deaktivieren, einfache Anführungsstriche sind einfach zu
128
		# häufig, um sie als eyn zu interpretieren.
129
		# '\'' => 'ع',
130
131
/*		# deactivated for now, breaks links i.e. in header of Special:Recentchanges :-(
132
		# digits
133
		'0' => '٠', # &#x0660;
134
		'1' => '١', # &#x0661;
135
		'2' => '٢', # &#x0662;
136
		'3' => '٣', # &#x0663;
137
		'4' => '٤', # &#x0664;
138
		'5' => '٥', # &#x0665;
139
		'6' => '٦', # &#x0666;
140
		'7' => '٧', # &#x0667;
141
		'8' => '٨', # &#x0668;
142
		'9' => '٩', # &#x0669;
143
*/
144
		];
145
146
	function loadDefaultTables() {
147
		$this->mTables = [
148
			'ku-latn' => new ReplacementArray( $this->mArabicToLatin ),
149
			'ku-arab' => new ReplacementArray( $this->mLatinToArabic ),
150
			'ku' => new ReplacementArray()
151
		];
152
	}
153
154
	/**
155
	 * A function wrapper:
156
	 *   - if there is no selected variant, leave the link
157
	 *     names as they were
158
	 *   - do not try to find variants for usernames
159
	 *
160
	 * @param string &$link
161
	 * @param Title &$nt
162
	 * @param bool $ignoreOtherCond
163
	 */
164 View Code Duplication
	function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
165
		// check for user namespace
166
		if ( is_object( $nt ) ) {
167
			$ns = $nt->getNamespace();
168
			if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
169
				return;
170
			}
171
		}
172
173
		$oldlink = $link;
174
		parent::findVariantLink( $link, $nt, $ignoreOtherCond );
175
		if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
176
			$link = $oldlink;
177
		}
178
	}
179
180
	/**
181
	 *  It translates text into variant, specials:
182
	 *    - ommiting roman numbers
183
	 *
184
	 * @param string $text
185
	 * @param bool $toVariant
186
	 *
187
	 * @throws MWException
188
	 * @return string
189
	 */
190
	function translate( $text, $toVariant ) {
191
		$this->loadTables();
192
		/* From Kazakh interface, maybe we need it later
193
		$breaks = '[^\w\x80-\xff]';
194
		// regexp for roman numbers
195
		$roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})';
196
		$roman = '';
197
198
		$reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/';
199
200
		$matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);
201
202
		$m = array_shift($matches);
203
		if( !isset( $this->mTables[$toVariant] ) ) {
204
			throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
205
		}
206
		$ret = $this->mTables[$toVariant]->replace( $m[0] );
207
		$mstart = $m[1]+strlen($m[0]);
208
		foreach($matches as $m) {
209
			$ret .= substr($text, $mstart, $m[1]-$mstart);
210
			$ret .= parent::translate($m[0], $toVariant);
211
			$mstart = $m[1] + strlen($m[0]);
212
		}
213
214
		return $ret;
215
		*/
216
217 View Code Duplication
		if ( !isset( $this->mTables[$toVariant] ) ) {
218
			throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
219
		}
220
221
		return parent::translate( $text, $toVariant );
222
	}
223
}
224
225
/**
226
 * Kurdish (Kurdî / كوردی)
227
 *
228
 * @ingroup Language
229
 */
230 View Code Duplication
class LanguageKu extends LanguageKu_ku {
0 ignored issues
show
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
231
232
	function __construct() {
233
		parent::__construct();
234
235
		$variants = [ 'ku', 'ku-arab', 'ku-latn' ];
236
		$variantfallbacks = [
237
			'ku' => 'ku-latn',
238
			'ku-arab' => 'ku-latn',
239
			'ku-latn' => 'ku-arab',
240
		];
241
242
		$this->mConverter = new KuConverter( $this, 'ku', $variants, $variantfallbacks );
243
	}
244
}
245