Удзельнік:EugeneZelenko/Канвэртар/LanguageBe tarask.php — Вікіпэдыя

# Удзельнік:EugeneZelenko/Канвэртар/LanguageBe tarask.php

### Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі.

< Удзельнік:EugeneZelenko | Канвэртар

    <?php
    /** Belarusian language, classic spelling
      * (Беларуская, клясычны)
      *
      * @package MediaWiki
      * @subpackage Language
      */

    require_once( dirname(__FILE__).'/../LanguageConverter.php' );
    require_once( dirname(__FILE__).'/LanguageBe_tarask_cyrl.php' );

    class BeTaraskConverter extends LanguageConverter {

            function loadDefaultTables() {
                    require( "includes/BeTaraskConversion.php" );

                    $this->mTables = array(
                            'be-tarask-cyrl' => new ReplacementArray( $BeTarask2Cyrl ),
                            'be-tarask-latn' => new ReplacementArray( $BeTarask2Latn ),
                            'be-tarask'      => new ReplacementArray()
                    );
            }

            function regsConverter( $text, $toVariant ) {
                    require( 'LanguageBe_tarask-ToCyrl.inc' );
                    require( 'LanguageBe_tarask-ToLatn.inc' );
                    if ($toVariant == 'be-tarask'){
                            # keep as placeholder please
                            return $text;
                    }
                    if ($toVariant == 'be-tarask-cyrl'){
                            # process regexes for Cyrillic -> Latin
                            $pattern = $patBeTarask_latn;
                            $replacement = $repBeTarask_cyrl;
                            $text = preg_replace($pattern, $replacement, $text);
                            return $text;
                    }
                    if ($toVariant == 'be-tarask-latn'){
                            # process regexes for Latin -> Cyrillic
                            $pattern = $patBeTarask_cyrl;
                            $replacement = $repBeTarask_latn;
                            $text = preg_replace($pattern, $replacement, $text);
                            return $text;
                    }
            }

            /*
             * Override function from LanguageConvertor
             * Additional checks:
             *  - There should be no conversion for Talk pages
             */
            function getPreferredVariant(){
                    global $wgTitle;
                    if( is_object( $wgTitle ) && $wgTitle->isTalkPage()) {
                            return $this->mMainLanguageCode;
                    }
                    return parent::getPreferredVariant();
            }

            /*
             * A function wrapper, if there is no selected variant,
             * leave the link names as they were
             */
            function findVariantLink( &$link, &$nt ) {
                    $oldlink=$link;
                    parent::findVariantLink($link,$nt);
                    if($this->getPreferredVariant()==$this->mMainLanguageCode)
                            $link=$oldlink;
            }

            /*
             * We want our external link captions to be converted in variants,
             * so we return the original text instead -{$text}-, except for URLs
             */
            function markNoConversion($text, $noParse=false) {
                    if($noParse || preg_match("/^https?:\/\/|ftp:\/\/|irc:\/\//",$text))
                            return parent::markNoConversion($text);
                    return $text;
            }

            /*
             * An ugly function wrapper for parsing Image titles
             * (to prevent image name conversion)
             */
            function autoConvert($text, $toVariant=false) {
                    global $wgTitle;
                    if($wgTitle->getNameSpace()==NS_IMAGE){
                            $imagename = $wgTitle->getNsText();
                            if(preg_match("/^$imagename:/",$text)) return $text;
                    }
                    return parent::autoConvert($text,$toVariant);
            }

            /**
             *  It translates text into variant, specials:
             *      - ommiting roman numbers
             */
            function translate($text, $toVariant){
                    $breaks = '[^\w\x80-\xff]';

                    // regexp for roman numbers
                    $roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})';

                    $reg = '/^'.$roman.'$|^'.$roman.$breaks.'|'.$breaks.$roman.'$|'.$breaks.$roman.$breaks.'/';

                    $matches = preg_split($reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE);

                    $m = array_shift($matches);
                    $ret = $this->mTables[$toVariant]->replace( $m[0] );
                    $mstart = $m[1]+strlen($m[0]);
                    foreach($matches as $m) {
                            $ret .= substr($text, $mstart, $m[1]-$mstart);
                            $ret .= parent::translate($m[0], $toVariant);
                            $mstart = $m[1] + strlen($m[0]);
                    }
                    $text = $this->regsConverter( $ret, $toVariant );
                    return $text;
            }

    }

    class LanguageBe_tarask extends LanguageBe_tarask_cyrl {

            function __construct() {
                    global $wgHooks;
                    parent::__construct();

                    $variants = array( 'be-tarask', 'be-tarask-cyrl', 'be-tarask-latn' );
                    $variantfallbacks = array(
                            'be-tarask'         => 'be-tarask-cyrl',
                            'be-tarask-cyrl' => 'be-tarask-cyrl',
                            'be-tarask-latn' => 'be-tarask-latn'
                    );

                    $this->mConverter = new BeTaraskConverter( $this, 'be-tarask', $variants, $variantfallbacks );
                    $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
            }

            function convertGrammar( $word, $case ) {
                    $fname="LanguageBeTarask::convertGrammar";
                    wfProfileIn( $fname );

                    //always convert to -cyrl before convertGrammar
                    $w1 = $word;
                    $word = $this->mConverter->autoConvert( $word, 'be-tarask-cyrl' );
                    $w2 = $word;
                    $case = $this->mConverter->autoConvert( $case, 'be-tarask-cyrl' );
                    $word = parent::convertGrammar( $word, $case );
                    //restore encoding
                    if( $w1 != $w2 ) {
                            $word = $this->mConverter->translate( $word, 'be-tarask-latn' );
                    }
                    wfProfileOut( $fname );
                    return $word;
            }

    }

    ?>

Атрымана з «http://be-x-old.wikipedia.org../../../e/u/g/%D0%A3%D0%B4%D0%B7%D0%B5%D0%BB%D1%8C%D0%BD%D1%96%D0%BA%7EEugeneZelenko_%D0%9A%D0%B0%D0%BD%D0%B2%D1%8D%D1%80%D1%82%D0%B0%D1%80_LanguageBe_tarask.php_232f.html»

##### Views

- Старонка ўдзельніка/ўдзельніцы
- Гутаркі
- Бягучая вэрсія

##### Пошук