MediaWiki REL1_33
LanguageSr.php
Go to the documentation of this file.
1<?php
34 public $mToLatin = [
35 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd',
36 'ђ' => 'đ', 'е' => 'e', 'ж' => 'ž', 'з' => 'z', 'и' => 'i',
37 'ј' => 'j', 'к' => 'k', 'л' => 'l', 'љ' => 'lj', 'м' => 'm',
38 'н' => 'n', 'њ' => 'nj', 'о' => 'o', 'п' => 'p', 'р' => 'r',
39 'с' => 's', 'т' => 't', 'ћ' => 'ć', 'у' => 'u', 'ф' => 'f',
40 'х' => 'h', 'ц' => 'c', 'ч' => 'č', 'џ' => 'dž', 'ш' => 'š',
41
42 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D',
43 'Ђ' => 'Đ', 'Е' => 'E', 'Ж' => 'Ž', 'З' => 'Z', 'И' => 'I',
44 'Ј' => 'J', 'К' => 'K', 'Л' => 'L', 'Љ' => 'Lj', 'М' => 'M',
45 'Н' => 'N', 'Њ' => 'Nj', 'О' => 'O', 'П' => 'P', 'Р' => 'R',
46 'С' => 'S', 'Т' => 'T', 'Ћ' => 'Ć', 'У' => 'U', 'Ф' => 'F',
47 'Х' => 'H', 'Ц' => 'C', 'Ч' => 'Č', 'Џ' => 'Dž', 'Ш' => 'Š',
48 ];
49
50 public $mToCyrillics = [
51 'a' => 'а', 'b' => 'б', 'c' => 'ц', 'č' => 'ч', 'ć' => 'ћ',
52 'd' => 'д', 'dž' => 'џ', 'đ' => 'ђ', 'e' => 'е', 'f' => 'ф',
53 'g' => 'г', 'h' => 'х', 'i' => 'и', 'j' => 'ј', 'k' => 'к',
54 'l' => 'л', 'lj' => 'љ', 'm' => 'м', 'n' => 'н', 'nj' => 'њ',
55 'o' => 'о', 'p' => 'п', 'r' => 'р', 's' => 'с', 'š' => 'ш',
56 't' => 'т', 'u' => 'у', 'v' => 'в', 'z' => 'з', 'ž' => 'ж',
57
58 'A' => 'А', 'B' => 'Б', 'C' => 'Ц', 'Č' => 'Ч', 'Ć' => 'Ћ',
59 'D' => 'Д', 'Dž' => 'Џ', 'Đ' => 'Ђ', 'E' => 'Е', 'F' => 'Ф',
60 'G' => 'Г', 'H' => 'Х', 'I' => 'И', 'J' => 'Ј', 'K' => 'К',
61 'L' => 'Л', 'LJ' => 'Љ', 'M' => 'М', 'N' => 'Н', 'NJ' => 'Њ',
62 'O' => 'О', 'P' => 'П', 'R' => 'Р', 'S' => 'С', 'Š' => 'Ш',
63 'T' => 'Т', 'U' => 'У', 'V' => 'В', 'Z' => 'З', 'Ž' => 'Ж',
64
65 'DŽ' => 'Џ', 'd!ž' => 'дж', 'D!ž' => 'Дж', 'D!Ž' => 'ДЖ',
66 'Lj' => 'Љ', 'l!j' => 'лј', 'L!j' => 'Лј', 'L!J' => 'ЛЈ',
67 'Nj' => 'Њ', 'n!j' => 'нј', 'N!j' => 'Нј', 'N!J' => 'НЈ'
68 ];
69
70 function loadDefaultTables() {
71 $this->mTables = [
72 'sr-ec' => new ReplacementArray( $this->mToCyrillics ),
73 'sr-el' => new ReplacementArray( $this->mToLatin ),
74 'sr' => new ReplacementArray()
75 ];
76 }
77
88 function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
89 // check for user namespace
90 if ( is_object( $nt ) ) {
91 $ns = $nt->getNamespace();
92 if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
93 return;
94 }
95 }
96
97 $oldlink = $link;
98 parent::findVariantLink( $link, $nt, $ignoreOtherCond );
99 if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
100 $link = $oldlink;
101 }
102 }
103
114 function translate( $text, $toVariant ) {
115 $breaks = '[^\w\x80-\xff]';
116
117 // regexp for roman numbers
118 // Lookahead assertion ensures $roman doesn't match the empty string
119 $roman = '(?=[MDCLXVI])M{0,4}(C[DM]|D?C{0,3})(X[LC]|L?X{0,3})(I[VX]|V?I{0,3})';
120
121 $reg = '/^' . $roman . '$|^' . $roman . $breaks . '|' . $breaks
122 . $roman . '$|' . $breaks . $roman . $breaks . '/';
123
124 $matches = preg_split( $reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
125
126 $m = array_shift( $matches );
127 $this->loadTables();
128 if ( !isset( $this->mTables[$toVariant] ) ) {
129 throw new MWException( "Broken variant table: "
130 . implode( ',', array_keys( $this->mTables ) ) );
131 }
132 $ret = $this->mTables[$toVariant]->replace( $m[0] );
133 $mstart = $m[1] + strlen( $m[0] );
134 foreach ( $matches as $m ) {
135 $ret .= substr( $text, $mstart, $m[1] - $mstart );
136 $ret .= parent::translate( $m[0], $toVariant );
137 $mstart = $m[1] + strlen( $m[0] );
138 }
139
140 return $ret;
141 }
142
154 public function guessVariant( $text, $variant ) {
155 $numCyrillic = preg_match_all( "/[шђчћжШЂЧЋЖ]/u", $text, $dummy );
156 $numLatin = preg_match_all( "/[šđč枊ĐČĆŽ]/u", $text, $dummy );
157
158 if ( $variant == 'sr-ec' ) {
159 return $numCyrillic > $numLatin;
160 } elseif ( $variant == 'sr-el' ) {
161 return $numLatin > $numCyrillic;
162 } else {
163 return false;
164 }
165 }
166
167}
168
174class LanguageSr extends Language {
175 function __construct() {
176 parent::__construct();
177
178 $variants = [ 'sr', 'sr-ec', 'sr-el' ];
179 $variantfallbacks = [
180 'sr' => 'sr-ec',
181 'sr-ec' => 'sr',
182 'sr-el' => 'sr',
183 ];
184
185 $flags = [
186 'S' => 'S', 'писмо' => 'S', 'pismo' => 'S',
187 'W' => 'W', 'реч' => 'W', 'reč' => 'W', 'ријеч' => 'W', 'riječ' => 'W'
188 ];
189 $this->mConverter = new SrConverter( $this, 'sr', $variants, $variantfallbacks, $flags );
190 }
191}
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two and(2) offer you this license which gives you legal permission to copy
Base class for language conversion.
getPreferredVariant()
Get preferred language variant.
loadTables( $fromCache=true)
Load conversion tables either from the cache or the disk.
Serbian (Српски / Srpski)
Internationalisation code.
Definition Language.php:36
MediaWiki exception.
Wrapper around strtr() that holds replacements.
There are two levels of conversion for Serbian: the script level (Cyrillics <-> Latin),...
loadDefaultTables()
Load default conversion tables.
findVariantLink(&$link, &$nt, $ignoreOtherCond=false)
A function wrapper:
guessVariant( $text, $variant)
Guess if a text is written in Cyrillic or Latin.
translate( $text, $toVariant)
It translates text into variant, specials:
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses & $ret
Definition hooks.txt:2003
usually copyright or history_copyright This message must be in HTML not wikitext & $link
Definition hooks.txt:3069
const NS_USER_TALK
Definition Defines.php:76