* @var array
*/
static public $languagesWithVariants = [
+ 'en',
'gan',
'iu',
'kk',
];
public $mMainLanguageCode;
+
+ /**
+ * @var string[]
+ */
public $mVariants;
public $mVariantFallbacks;
public $mVariantNames;
// 'bidirectional' 'unidirectional' 'disable' for each variant
public $mManualLevel;
- /**
- * @var string Memcached key name
- */
- public $mCacheKey;
-
public $mLangObj;
public $mFlags;
public $mDescCodeSep = ':', $mDescVarSep = ';';
const CACHE_VERSION_KEY = 'VERSION 7';
/**
- * Constructor
- *
* @param Language $langobj
* @param string $maincode The main language code of this language
- * @param array $variants The supported variants of this language
+ * @param string[] $variants The supported variants of this language
* @param array $variantfallbacks The fallback language of each variant
* @param array $flags Defining the custom strings that maps to the flags
* @param array $manualLevel Limit for supported variants
$this->mVariants = array_diff( $variants, $wgDisabledVariants );
$this->mVariantFallbacks = $variantfallbacks;
$this->mVariantNames = Language::fetchLanguageNames();
- $this->mCacheKey = wfMemcKey( 'conversiontables', $maincode );
$defaultflags = [
// 'S' show converted text
// '+' add rules for alltext
// 'E' the gave flags is error
// these flags above are reserved for program
- 'A' => 'A', // add rule for convert code (all text convert)
- 'T' => 'T', // title convert
- 'R' => 'R', // raw content
- 'D' => 'D', // convert description (subclass implement)
- '-' => '-', // remove convert (not implement)
- 'H' => 'H', // add rule for convert code (but no display in placed code)
- 'N' => 'N' // current variant name
+ 'A' => 'A', // add rule for convert code (all text convert)
+ 'T' => 'T', // title convert
+ 'R' => 'R', // raw content
+ 'D' => 'D', // convert description (subclass implement)
+ '-' => '-', // remove convert (not implement)
+ 'H' => 'H', // add rule for convert code (but no display in placed code)
+ 'N' => 'N', // current variant name
];
$this->mFlags = array_merge( $defaultflags, $flags );
foreach ( $this->mVariants as $v ) {
* Get all valid variants.
* Call this instead of using $this->mVariants directly.
*
- * @return array Contains all valid variants
+ * @return string[] Contains all valid variants
*/
public function getVariants() {
return $this->mVariants;
* @return string The converted text
*/
public function autoConvert( $text, $toVariant = false ) {
-
$this->loadTables();
if ( !$toVariant ) {
}
/* we convert everything except:
- 1. HTML markups (anything between < and >)
- 2. HTML entities
- 3. placeholders created by the parser
- */
+ * 1. HTML markups (anything between < and >)
+ * 2. HTML entities
+ * 3. placeholders created by the parser
+ */
$marker = '|' . Parser::MARKER_PREFIX . '[\-a-zA-Z0-9]+';
// this one is needed when the text is inside an HTML markup
$literalBlob = '';
// Guard against delimiter nulls in the input
+ // (should never happen: see T159174)
$text = str_replace( "\000", '', $text );
$markupMatches = null;
* @throws MWException
*/
function loadDefaultTables() {
- $name = get_class( $this );
-
- throw new MWException( "Must implement loadDefaultTables() method in class $name" );
+ $class = static::class;
+ throw new MWException( "Must implement loadDefaultTables() method in class $class" );
}
/**
$this->mTablesLoaded = true;
$this->mTables = false;
$cache = ObjectCache::getInstance( $wgLanguageConverterCacheType );
+ $cacheKey = $cache->makeKey( 'conversiontables', $this->mMainLanguageCode );
if ( $fromCache ) {
- wfProfileIn( __METHOD__ . '-cache' );
- $this->mTables = $cache->get( $this->mCacheKey );
- wfProfileOut( __METHOD__ . '-cache' );
+ $this->mTables = $cache->get( $cacheKey );
}
if ( !$this->mTables || !array_key_exists( self::CACHE_VERSION_KEY, $this->mTables ) ) {
- wfProfileIn( __METHOD__ . '-recache' );
// not in cache, or we need a fresh reload.
// We will first load the default tables
// then update them using things in MediaWiki:Conversiontable/*
$this->postLoadTables();
$this->mTables[self::CACHE_VERSION_KEY] = true;
- $cache->set( $this->mCacheKey, $this->mTables, 43200 );
- wfProfileOut( __METHOD__ . '-recache' );
+ $cache->set( $cacheKey, $this->mTables, 43200 );
}
}
/**
* Reload the conversion tables.
*
+ * Also used by test suites which need to reset the converter state.
+ *
* @private
*/
- function reloadTables() {
+ private function reloadTables() {
if ( $this->mTables ) {
unset( $this->mTables );
}
// text should be splited by ";" only if a valid variant
// name exist after the markup, for example:
// -{zh-hans:<span style="font-size:120%;">xxx</span>;zh-hant:\
- // <span style="font-size:120%;">yyy</span>;}-
+ // <span style="font-size:120%;">yyy</span>;}-
// we should split it as:
// [
- // [0] => 'zh-hans:<span style="font-size:120%;">xxx</span>'
- // [1] => 'zh-hant:<span style="font-size:120%;">yyy</span>'
- // [2] => ''
+ // [0] => 'zh-hans:<span style="font-size:120%;">xxx</span>'
+ // [1] => 'zh-hant:<span style="font-size:120%;">yyy</span>'
+ // [2] => ''
// ]
$pat = '/;\s*(?=';
foreach ( $this->mVariants as $variant ) {