Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Intl/Data/Generator/RegionDataGenerator.php
Строк: 179
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentIntlDataGenerator;

use 
SymfonyComponentIntlDataBundleReaderBundleReaderInterface;
use 
SymfonyComponentIntlDataUtilArrayAccessibleResourceBundle;
use 
SymfonyComponentIntlDataBundleCompilerGenrbCompiler;
use 
SymfonyComponentIntlDataUtilLocaleScanner;

/**
 * The rule for compiling the region bundle.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @link http://source.icu-project.org/repos/icu/icu4j/trunk/main/classes/core/src/com/ibm/icu/util/Region.java
 *
 * @internal
 */
class RegionDataGenerator extends AbstractDataGenerator
{
    const 
UNKNOWN_REGION_ID 'ZZ';

    const 
OUTLYING_OCEANIA_REGION_ID 'QO';

    const 
EUROPEAN_UNION_ID 'EU';

    const 
NETHERLANDS_ANTILLES_ID 'AN';

    const 
BOUVET_ISLAND_ID 'BV';

    const 
HEARD_MCDONALD_ISLANDS_ID 'HM';

    const 
CLIPPERTON_ISLAND_ID 'CP';

    
/**
     * Regions excluded from generation.
     *
     * @var array
     */
    
private static $blacklist = array(
        
self::UNKNOWN_REGION_ID => true,
        
// Look like countries, but are sub-continents
        
self::OUTLYING_OCEANIA_REGION_ID => true,
        
self::EUROPEAN_UNION_ID => true,
        
// No longer exists
        
self::NETHERLANDS_ANTILLES_ID => true,
        
// Uninhabited islands
        
self::BOUVET_ISLAND_ID => true,
        
self::HEARD_MCDONALD_ISLANDS_ID => true,
        
self::CLIPPERTON_ISLAND_ID => true,
    );

    
/**
     * Collects all available language codes.
     *
     * @var string[]
     */
    
private $regionCodes = array();

    
/**
     * {@inheritdoc}
     */
    
protected function scanLocales(LocaleScanner $scanner$sourceDir)
    {
        return 
$scanner->scanLocales($sourceDir.'/region');
    }

    
/**
     * {@inheritdoc}
     */
    
protected function compileTemporaryBundles(GenrbCompiler $compiler$sourceDir$tempDir)
    {
        
$compiler->compile($sourceDir.'/region'$tempDir);
    }

    
/**
     * {@inheritdoc}
     */
    
protected function preGenerate()
    {
        
$this->regionCodes = array();
    }

    
/**
     * {@inheritdoc}
     */
    
protected function generateDataForLocale(BundleReaderInterface $reader$tempDir$displayLocale)
    {
        
$localeBundle $reader->read($tempDir$displayLocale);

        
// isset() on ResourceBundle returns true even if the value is null
        
if (isset($localeBundle['Countries']) && null !== $localeBundle['Countries']) {
            
$data = array(
                
'Version' => $localeBundle['Version'],
                
'Names' => $this->generateRegionNames($localeBundle),
            );

            
$this->regionCodes array_merge($this->regionCodesarray_keys($data['Names']));

            return 
$data;
        }
    }

    
/**
     * {@inheritdoc}
     */
    
protected function generateDataForRoot(BundleReaderInterface $reader$tempDir)
    {
    }

    
/**
     * {@inheritdoc}
     */
    
protected function generateDataForMeta(BundleReaderInterface $reader$tempDir)
    {
        
$rootBundle $reader->read($tempDir'root');

        
$this->regionCodes array_unique($this->regionCodes);

        
sort($this->regionCodes);

        return array(
            
'Version' => $rootBundle['Version'],
            
'Regions' => $this->regionCodes,
        );
    }

    
/**
     * @param ArrayAccessibleResourceBundle $localeBundle
     *
     * @return array
     */
    
protected function generateRegionNames(ArrayAccessibleResourceBundle $localeBundle)
    {
        
$unfilteredRegionNames iterator_to_array($localeBundle['Countries']);
        
$regionNames = array();

        foreach (
$unfilteredRegionNames as $region => $regionName) {
            if (isset(
self::$blacklist[$region])) {
                continue;
            }

            
// WORLD/CONTINENT/SUBCONTINENT/GROUPING
            
if (ctype_digit($region) || is_int($region)) {
                continue;
            }

            
$regionNames[$region] = $regionName;
        }

        return 
$regionNames;
    }
}
Онлайн: 2
Реклама