Conversion script between Tifinagh and Latin for the Tachelhit language
authorRobin Pepermans <robin@users.mediawiki.org>
Sat, 10 Sep 2011 04:09:20 +0000 (04:09 +0000)
committerRobin Pepermans <robin@users.mediawiki.org>
Sat, 10 Sep 2011 04:09:20 +0000 (04:09 +0000)
Preferences: made getLanguageNames include those that don't have a Messages file

RELEASE-NOTES-1.19
includes/Preferences.php
languages/Names.php
languages/classes/LanguageShi.deps.php [new file with mode: 0644]
languages/classes/LanguageShi.php [new file with mode: 0644]
languages/messages/MessagesEn.php
languages/messages/MessagesShi.php
maintenance/language/messageTypes.inc
maintenance/language/messages.inc

index 1b8c3db..4d396c8 100644 (file)
@@ -56,6 +56,7 @@ production.
 * (bug 26470) Add checkered background image on hover on files pages.
 * (bug 30774) mediawiki.html: Add support for numbers and booleans in the
   attribute values and element contents.
+* Conversion script between Tifinagh and Latin for the Tachelhit language
 
 === Bug fixes in 1.19 ===
 * $wgUploadNavigationUrl should be used for file redlinks if
index c999a2e..c6ed2f4 100644 (file)
@@ -276,7 +276,7 @@ class Preferences {
                if ( !$wgDisableLangConversion ) {
                        $variants = $wgContLang->getVariants();
 
-                       $languages = Language::getLanguageNames( true );
+                       $languages = Language::getLanguageNames();
                        foreach ( $variants as $v ) {
                                $v = str_replace( '_', '-', strtolower( $v ) );
                                if ( array_key_exists( $v, $languages ) ) {
index 3833236..e421a97 100644 (file)
        'sg' => 'Sängö',              # Sango/Sangho
        'sgs' => 'Žemaitėška', # Samogitian
        'sh' => 'Srpskohrvatski / Српскохрватски', # Serbocroatian
-       'shi' => 'Tašlḥiyt',    # Tachelhit
+       'shi' => 'Tašlḥiyt/ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (multiple scripts - defaults to Latin)
+       'shi-tfng' => 'ⵜⴰⵛⵍⵃⵉⵜ',    # Tachelhit (Tifinagh script)
+       'shi-latn' => 'Tašlḥiyt',    # Tachelhit (Latin script)
        'si' => 'සිංහල',      # Sinhalese
        'simple' => 'Simple English',   # Simple English
        'sk' => 'Slovenčina',  # Slovak
diff --git a/languages/classes/LanguageShi.deps.php b/languages/classes/LanguageShi.deps.php
new file mode 100644 (file)
index 0000000..3b78d87
--- /dev/null
@@ -0,0 +1,8 @@
+<?php
+// This file exists to ensure that base classes are preloaded before
+// LanguageIu.php is compiled, working around a bug in the APC opcode
+// cache on PHP 5, where cached code can break if the include order
+// changed on a subsequent page view.
+// see http://mail.wikipedia.org/pipermail/wikitech-l/2006-January/033660.html
+
+require_once( dirname(__FILE__).'/../LanguageConverter.php' );
diff --git a/languages/classes/LanguageShi.php b/languages/classes/LanguageShi.php
new file mode 100644 (file)
index 0000000..6c7a5fe
--- /dev/null
@@ -0,0 +1,202 @@
+<?php
+/**
+  * @addtogroup Language
+  */
+
+/*
+* Conversion script between Latin and Tifinagh for Tachelhit.
+* - Tifinagh -> lowercase Latin
+* - lowercase/uppercase Latin -> Tifinagh
+* 
+*
+* Based on:
+*   - http://en.wikipedia.org/wiki/Shilha_language
+*   - LanguageSr.php
+*
+* @ingroup Language
+*/
+require_once( dirname( __FILE__ ) . '/../LanguageConverter.php' );
+
+/**
+ *
+ */
+class ShiConverter extends LanguageConverter {
+       var $mToLatin = array(
+               'ⴰ' => 'a', 'ⴱ' => 'b', 'ⴳ' => 'g', 'ⴷ' => 'd', 'ⴹ' => 'ḍ', 'ⴻ' => 'e',
+               'ⴼ' => 'f', 'ⴽ' => 'k', 'ⵀ' => 'h', 'ⵃ' => 'ḥ', 'ⵄ' => 'ε', 'ⵅ' => 'x',
+               'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j',  'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
+               'ⵓ' => 'u', 'ⵔ' => 'r', 'ⵕ' => 'ṛ', 'ⵖ' => 'γ', 'ⵙ' => 's', 'ⵚ' => 'ṣ',
+               'ⵛ' => 'š', 'ⵜ' => 't', 'ⵟ' => 'ṭ', 'ⵡ' => 'w', 'ⵢ' => 'y', 'ⵣ' => 'z',
+               'ⵥ' => 'ẓ', 'ⵯ' => 'ʷ',
+       );
+
+       var $mUpperToLowerCaseLatin = array(
+               'A' => 'a',     'B' => 'b',     'C' => 'c',     'D' => 'd',     'E' => 'e',
+               'F' => 'f',     'G' => 'g',     'H' => 'h',     'I' => 'i',     'J' => 'j',
+               'K' => 'k',     'L' => 'l',     'M' => 'm',     'N' => 'n',     'O' => 'o',
+               'P' => 'p',     'Q' => 'q',     'R' => 'r',     'S' => 's',     'T' => 't',
+               'U' => 'u',     'V' => 'v',     'W' => 'w',     'X' => 'x',     'Y' => 'y',
+               'Z' => 'z',
+       );
+
+       var $mToTifinagh = array(
+               'a' => 'ⴰ', 'b' => 'ⴱ', 'g' => 'ⴳ', 'd' => 'ⴷ', 'ḍ' => 'ⴹ', 'e' => 'ⴻ',
+               'f' => 'ⴼ', 'k' => 'ⴽ', 'h' => 'ⵀ', 'ḥ' => 'ⵃ', 'ε' => 'ⵄ', 'x' => 'ⵅ',
+               'q' => 'ⵇ', 'i' => 'ⵉ', 'j' => 'ⵊ',  'l' => 'ⵍ', 'm' => 'ⵎ', 'n' => 'ⵏ',
+               'u' => 'ⵓ', 'r' => 'ⵔ', 'ṛ' => 'ⵕ', 'γ' => 'ⵖ', 's' => 'ⵙ', 'ṣ' => 'ⵚ',
+               'š' => 'ⵛ', 't' => 'ⵜ', 'ṭ' => 'ⵟ', 'w' => 'ⵡ', 'y' => 'ⵢ', 'z' => 'ⵣ',
+               'ẓ' => 'ⵥ', 'ʷ' => 'ⵯ',
+       );
+
+       function loadDefaultTables() {
+               $this->mTables = array(
+                       'lowercase' => new ReplacementArray( $this->mUpperToLowerCaseLatin ),
+                       'shi-tfng' => new ReplacementArray( $this->mToTifinagh ),
+                       'shi-latn' => new ReplacementArray( $this->mToLatin ),
+                       'shi'    => new ReplacementArray()
+               );
+       }
+
+       /**
+        * rules should be defined as -{Tifinagh | Latin-} -or-
+        * -{code:text | code:text | ...}-
+        * update: delete all rule parsing because it's not used
+        * currently, and just produces a couple of bugs
+        *
+        * @param $rule string
+        * @param $flags array
+        * @return array
+        */
+       function parseManualRule( $rule, $flags = array() ) {
+               if ( in_array( 'T', $flags ) ) {
+                       return parent::parseManualRule( $rule, $flags );
+               }
+
+               $carray = array();
+               // otherwise ignore all formatting
+               foreach ( $this->mVariants as $v ) {
+                       $carray[$v] = $rule;
+               }
+
+               return $carray;
+       }
+
+       /**
+        * Do not convert content on talk pages
+        *
+        * @param $text string
+        * @param $parser Parser
+        * @return string
+        */
+       function parserConvert( $text, &$parser ) {
+               if ( is_object( $parser->getTitle() ) && $parser->getTitle()->isTalkPage() )
+                       $this->mDoContentConvert = false;
+               else
+                       $this->mDoContentConvert = true;
+
+               return parent::parserConvert( $text, $parser );
+       }
+
+       /**
+        * A function wrapper:
+        *   - if there is no selected variant, leave the link
+        *     names as they were
+        *   - do not try to find variants for usernames
+        *
+        * @param $link string
+        * @param $nt Title
+        * @param $ignoreOtherCond bool
+        */
+       function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
+                // check for user namespace
+               if ( is_object( $nt ) ) {
+                       $ns = $nt->getNamespace();
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK )
+                               return;
+               }
+
+               $oldlink = $link;
+               parent::findVariantLink( $link, $nt, $ignoreOtherCond );
+               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
+        *
+        * @param $text string
+        * @param $noParse bool
+        *
+        * @return string
+        */
+       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)
+        *
+        * @param $text string
+        * @param $toVariant bool
+        *
+        * @return string
+        */
+       function autoConvert( $text, $toVariant = false ) {
+               global $wgTitle;
+               if ( is_object( $wgTitle ) && $wgTitle->getNameSpace() == NS_FILE ) {
+                       $imagename = $wgTitle->getNsText();
+                       if ( preg_match( "/^$imagename:/", $text ) ) return $text;
+               }
+               return parent::autoConvert( $text, $toVariant );
+       }
+
+       /**
+        * It translates text into variant
+        *
+        * @param $text string
+        * @param $toVariant string
+        *
+        * @return string
+        */
+       function translate( $text, $toVariant ) {
+               // If $text is empty or only includes spaces, do nothing
+               // Otherwise translate it
+               if ( trim( $text ) ) {
+                       $this->loadTables();
+                       // To Tifinagh, first translate uppercase to lowercase Latin
+                       if( $toVariant == 'shi-tfng' ) {
+                               $text = $this->mTables['lowercase']->replace( $text );
+                       }
+                       $text = $this->mTables[$toVariant]->replace( $text );
+               }
+               return $text;
+       }
+}
+
+/**
+ * Tachelhit
+ *
+ * @ingroup Language
+ */
+class LanguageShi extends Language {
+       function __construct() {
+               global $wgHooks;
+
+               parent::__construct();
+
+               $variants = array( 'shi', 'shi-tfng', 'shi-latn' );
+               $variantfallbacks = array(
+                       'shi'    => 'shi-tfng',
+                       'shi-tfng' => 'shi',
+                       'shi-latn' => 'shi',
+               );
+
+               $flags = array();
+               $this->mConverter = new ShiConverter( $this, 'shi', $variants, $variantfallbacks, $flags );
+               $wgHooks['ArticleSaveComplete'][] = $this->mConverter;
+       }
+}
index 9089393..18c0f51 100644 (file)
@@ -3735,6 +3735,12 @@ Variants for Chinese language
 'variantname-ike-latn' => 'ike-Latn', # only translate this message to other languages if you have to change it
 'variantname-iu'       => 'iu', # only translate this message to other languages if you have to change it
 
+# Variants for Tachelhit language
+'variantname-shi-tfng' => 'shi-Tfng', # only translate this message to other languages if you have to change it
+'variantname-shi-latn' => 'shi-Latn', # only translate this message to other languages if you have to change it
+'variantname-shi'      => 'shi', # only translate this message to other languages if you have to change it
+
+
 # Metadata
 'metadata'                  => 'Metadata',
 'metadata-help'             => 'This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.
index 9871586..3de04e0 100644 (file)
@@ -1173,6 +1173,11 @@ Maya Iẓḍar ad iglb zzu uzddar ar aflla tasna yad lli bdda n nttagga. Illa fl
 
 ghir lhwayj n lista (stour libdounin s *) karaytyo7asab',
 
+# Variants for Tachelhit language
+'variantname-shi-tfng' => 'ᑎᑎᕋᐅᓯᖅ ᓄᑖᖅ',
+'variantname-shi-latn' => 'Tašlḥiyt',
+'variantname-shi'      => 'disable',
+
 # Metadata
 'metadata'          => 'isfka n mita',
 'metadata-help'     => 'Asdaw ad llan gis inɣmisn yaḍnin lli tfl lkamira tuṭunit niɣd aṣfḍ n uxddam lliɣ ay sgadda asdaw ad',
index caf62cc..602263d 100644 (file)
@@ -231,6 +231,9 @@ $wgOptionalMessages = array(
        'variantname-ike-cans',
        'variantname-ike-latn',
        'variantname-iu',
+       'variantname-shi-tfng',
+       'variantname-shi-latn',
+       'variantname-shi',
        'rc-change-size',
        'resetpass_text',
        'image_sample',
index a02c977..59bfe4b 100644 (file)
@@ -2680,6 +2680,11 @@ $wgMessageStructure = array(
                'variantname-ike-latn',
                'variantname-iu',
        ),
+       'variantname-shi' => array(
+               'variantname-shi-tfng',
+               'variantname-shi-latn',
+               'variantname-shi',
+       ),
        'metadata' => array(
                'metadata',
                'metadata-help',
@@ -3658,6 +3663,7 @@ Variants for Chinese language",
        'variantname-ku'      => 'Variants for Kurdish language',
        'variantname-tg'      => 'Variants for Tajiki language',
        'variantname-iu'      => 'Variants for Inuktitut language',
+       'variantname-shi'     => 'Variants for Tachelhit language',
        'media-info'          => 'Media information',
        'metadata'            => 'Metadata',
        'exif'                           => 'EXIF tags',