[ Index ]

PHP Cross Reference of MediaWiki-1.24.0

title

Body

[close]

/languages/classes/ -> LanguageKu.php (source)

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


Generated: Fri Nov 28 14:03:12 2014 Cross-referenced by PHPXref 0.7.1