Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7cf9ad5

Browse filesBrowse files
committed
[Intl] Integrated ICU data into Intl component
1 parent d70d546 commit 7cf9ad5
Copy full SHA for 7cf9ad5

File tree

124 files changed

+6564
-2191
lines changed
Filter options

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Dismiss banner

124 files changed

+6564
-2191
lines changed

‎composer.json

Copy file name to clipboardExpand all lines: composer.json
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
],
1818
"require": {
1919
"php": ">=5.3.3",
20-
"symfony/icu": "~1.0",
2120
"doctrine/common": "~2.2",
2221
"twig/twig": "~1.12",
2322
"psr/log": "~1.0"

‎phpunit.xml.dist

Copy file name to clipboardExpand all lines: phpunit.xml.dist
+6Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@
1717
<directory>./src/Symfony/Bridge/*/Tests/</directory>
1818
<directory>./src/Symfony/Component/*/Tests/</directory>
1919
<directory>./src/Symfony/Bundle/*/Tests/</directory>
20+
<!--
21+
A LOT (~20,000) of tests that only need to be run after updating
22+
the resource data or changing the classes under the
23+
Symfony\Component\Intl\Data namespace.
24+
-->
25+
<exclude>./src/Symfony/Component/Intl/Tests/Data/Provider/</exclude>
2026
</testsuite>
2127
</testsuites>
2228

+66Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
use Symfony\Component\DependencyInjection\ContainerInterface;
3+
use Symfony\Component\DependencyInjection\Container;
4+
use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
5+
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
6+
use Symfony\Component\DependencyInjection\Exception\LogicException;
7+
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
8+
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
9+
class MockObjectTestProjectContainer extends Container
10+
{
11+
private $parameters;
12+
public function __construct()
13+
{
14+
$this->parameters = $this->getDefaultParameters();
15+
$this->services =
16+
$this->scopedServices =
17+
$this->scopeStacks = array();
18+
$this->set('service_container', $this);
19+
$this->scopes = array();
20+
$this->scopeChildren = array();
21+
$this->aliases = array();
22+
}
23+
public function getParameter($name)
24+
{
25+
$name = strtolower($name);
26+
if (!(isset($this->parameters[$name]) || array_key_exists($name, $this->parameters))) {
27+
throw new InvalidArgumentException(sprintf('The parameter "%s" must be defined.', $name));
28+
}
29+
30+
return $this->parameters[$name];
31+
}
32+
public function hasParameter($name)
33+
{
34+
$name = strtolower($name);
35+
36+
return isset($this->parameters[$name]) || array_key_exists($name, $this->parameters);
37+
}
38+
public function setParameter($name, $value)
39+
{
40+
throw new LogicException('Impossible to call set() on a frozen ParameterBag.');
41+
}
42+
public function getParameterBag()
43+
{
44+
if (null === $this->parameterBag) {
45+
$this->parameterBag = new FrozenParameterBag($this->parameters);
46+
}
47+
48+
return $this->parameterBag;
49+
}
50+
protected function getDefaultParameters()
51+
{
52+
return array(
53+
'kernel.root_dir' => '/home/bernhard/Entwicklung/Web/Symfony2/src/Symfony/Component/HttpKernel/Tests/Fixtures',
54+
'kernel.environment' => 'test',
55+
'kernel.debug' => false,
56+
'kernel.name' => 'MockObject',
57+
'kernel.cache_dir' => '/home/bernhard/Entwicklung/Web/Symfony2/src/Symfony/Component/HttpKernel/Tests/Fixtures/cache/test',
58+
'kernel.logs_dir' => '/home/bernhard/Entwicklung/Web/Symfony2/src/Symfony/Component/HttpKernel/Tests/Fixtures/logs',
59+
'kernel.bundles' => array(
60+
'Mock_Bundle_d868bc8e' => 'Mock_Bundle_d868bc8e',
61+
),
62+
'kernel.charset' => 'UTF-8',
63+
'kernel.container_class' => 'MockObjectTestProjectContainer',
64+
);
65+
}
66+
}
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?php return array (
2+
);

‎src/Symfony/Component/Intl/.gitignore

Copy file name to clipboard
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
vendor/
2+
Resources/data/json
3+
Resources/data/rb-v2
24
composer.lock
35
phpunit.xml
+151Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Intl\Composer;
13+
14+
use Symfony\Component\Filesystem\Filesystem;
15+
use Symfony\Component\Intl\Exception\RuntimeException;
16+
use Symfony\Component\Intl\Intl;
17+
18+
/**
19+
* Decompresses the resource data.
20+
*
21+
* The method {@link decompressData()} should be called after installing the
22+
* component.
23+
*
24+
* @author Bernhard Schussek <bschussek@gmail.com>
25+
*/
26+
class ScriptHandler
27+
{
28+
/**
29+
* Decompresses the ICU data.
30+
*/
31+
public static function decompressData()
32+
{
33+
self::decompressDataForFormat(Intl::JSON);
34+
self::decompressDataForFormat(Intl::RB_V2);
35+
}
36+
37+
/**
38+
* Decompresses the ICU data in a given format.
39+
*
40+
* @param string $format
41+
*
42+
* @throws RuntimeException
43+
*/
44+
private static function decompressDataForFormat($format)
45+
{
46+
$filesystem = new Filesystem();
47+
$archive = Intl::getDataDirectory().'/'.$format.'.zip';
48+
$targetDir = Intl::getResourceDirectory($format);
49+
50+
if (!file_exists($archive)) {
51+
throw new RuntimeException(sprintf(
52+
'The zip file "%s" could not be found.',
53+
$archive
54+
));
55+
}
56+
57+
if (file_exists($targetDir)) {
58+
$filesystem->remove($targetDir);
59+
$filesystem->mkdir($targetDir);
60+
}
61+
62+
if (class_exists('ZipArchive')) {
63+
$zip = new \ZipArchive();
64+
65+
if (true !== ($status = $zip->open($archive))) {
66+
throw new RuntimeException(self::getReadableZipArchiveStatus($status));
67+
}
68+
69+
if (!$zip->extractTo($targetDir)) {
70+
throw new RuntimeException(sprintf(
71+
'The extraction of the file "%s" failed.',
72+
$archive
73+
));
74+
}
75+
76+
return;
77+
}
78+
79+
// Test whether "unzip" exists on the shell
80+
exec('unzip -h', $output, $status);
81+
82+
if (0 === $status) {
83+
$command = sprintf('unzip -d %s %s', escapeshellarg($targetDir), escapeshellarg($archive));
84+
85+
exec($command, $output, $status);
86+
87+
if (0 !== $status) {
88+
throw new RuntimeException(sprintf(
89+
'The extraction of the file "%s" failed. Output:%s',
90+
$archive,
91+
"\n".implode("\n", $output)
92+
));
93+
}
94+
95+
return;
96+
}
97+
98+
throw new RuntimeException(sprintf(
99+
'Could not find a mechanism to decompress the archive "%s".',
100+
$archive
101+
));
102+
}
103+
104+
/**
105+
* Returns a readable version of the given {@link \ZipArchive} status.
106+
*
107+
* @param int $status The status code
108+
*
109+
* @return string The status message
110+
*
111+
* @see http://de2.php.net/manual/en/class.ziparchive.php#108601
112+
*/
113+
private static function getReadableZipArchiveStatus($status)
114+
{
115+
switch ((int) $status) {
116+
case \ZipArchive::ER_OK : return 'No error';
117+
case \ZipArchive::ER_MULTIDISK : return 'Multi-disk zip archives not supported';
118+
case \ZipArchive::ER_RENAME : return 'Renaming temporary file failed';
119+
case \ZipArchive::ER_CLOSE : return 'Closing zip archive failed';
120+
case \ZipArchive::ER_SEEK : return 'Seek error';
121+
case \ZipArchive::ER_READ : return 'Read error';
122+
case \ZipArchive::ER_WRITE : return 'Write error';
123+
case \ZipArchive::ER_CRC : return 'CRC error';
124+
case \ZipArchive::ER_ZIPCLOSED : return 'Containing zip archive was closed';
125+
case \ZipArchive::ER_NOENT : return 'No such file';
126+
case \ZipArchive::ER_EXISTS : return 'File already exists';
127+
case \ZipArchive::ER_OPEN : return 'Can\'t open file';
128+
case \ZipArchive::ER_TMPOPEN : return 'Failure to create temporary file';
129+
case \ZipArchive::ER_ZLIB : return 'Zlib error';
130+
case \ZipArchive::ER_MEMORY : return 'Malloc failure';
131+
case \ZipArchive::ER_CHANGED : return 'Entry has been changed';
132+
case \ZipArchive::ER_COMPNOTSUPP : return 'Compression method not supported';
133+
case \ZipArchive::ER_EOF : return 'Premature EOF';
134+
case \ZipArchive::ER_INVAL : return 'Invalid argument';
135+
case \ZipArchive::ER_NOZIP : return 'Not a zip archive';
136+
case \ZipArchive::ER_INTERNAL : return 'Internal error';
137+
case \ZipArchive::ER_INCONS : return 'Zip archive inconsistent';
138+
case \ZipArchive::ER_REMOVE : return 'Can\'t remove file';
139+
case \ZipArchive::ER_DELETED : return 'Entry has been deleted';
140+
141+
default: return sprintf('Unknown status %s', $status );
142+
}
143+
}
144+
145+
/**
146+
* Should not be instantiated.
147+
*/
148+
private function __construct()
149+
{
150+
}
151+
}

‎src/Symfony/Component/Intl/ResourceBundle/Compiler/BundleCompilerInterface.php renamed to ‎src/Symfony/Component/Intl/Data/Bundle/Compiler/BundleCompilerInterface.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Intl/Data/Bundle/Compiler/BundleCompilerInterface.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Component\Intl\ResourceBundle\Compiler;
12+
namespace Symfony\Component\Intl\Data\Bundle\Compiler;
1313

1414
/**
1515
* Compiles a resource bundle.

‎src/Symfony/Component/Intl/ResourceBundle/Compiler/BundleCompiler.php renamed to ‎src/Symfony/Component/Intl/Data/Bundle/Compiler/GenrbCompiler.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Intl/Data/Bundle/Compiler/GenrbCompiler.php
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Component\Intl\ResourceBundle\Compiler;
12+
namespace Symfony\Component\Intl\Data\Bundle\Compiler;
1313

1414
use Symfony\Component\Intl\Exception\RuntimeException;
1515

@@ -20,7 +20,7 @@
2020
*
2121
* @internal
2222
*/
23-
class BundleCompiler implements BundleCompilerInterface
23+
class GenrbCompiler implements BundleCompilerInterface
2424
{
2525
/**
2626
* @var string The path to the "genrb" executable.
@@ -38,7 +38,7 @@ class BundleCompiler implements BundleCompilerInterface
3838
*/
3939
public function __construct($genrb = 'genrb', $envVars = '')
4040
{
41-
exec('which ' . $genrb, $output, $status);
41+
exec('which '.$genrb, $output, $status);
4242

4343
if (0 !== $status) {
4444
throw new RuntimeException(sprintf(
@@ -47,7 +47,7 @@ public function __construct($genrb = 'genrb', $envVars = '')
4747
));
4848
}
4949

50-
$this->genrb = ($envVars ? $envVars . ' ' : '') . $genrb;
50+
$this->genrb = ($envVars ? $envVars.' ' : '').$genrb;
5151
}
5252

5353
/**

‎src/Symfony/Component/Intl/ResourceBundle/Reader/BufferedBundleReader.php renamed to ‎src/Symfony/Component/Intl/Data/Bundle/Reader/BufferedBundleReader.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Intl/Data/Bundle/Reader/BufferedBundleReader.php
+3-11Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Component\Intl\ResourceBundle\Reader;
12+
namespace Symfony\Component\Intl\Data\Bundle\Reader;
1313

14-
use Symfony\Component\Intl\ResourceBundle\Util\RingBuffer;
14+
use Symfony\Component\Intl\Data\Util\RingBuffer;
1515

1616
/**
1717
* @author Bernhard Schussek <bschussek@gmail.com>
@@ -45,20 +45,12 @@ public function __construct(BundleReaderInterface $reader, $bufferSize)
4545
*/
4646
public function read($path, $locale)
4747
{
48-
$hash = $path . '//' . $locale;
48+
$hash = $path.'//'.$locale;
4949

5050
if (!isset($this->buffer[$hash])) {
5151
$this->buffer[$hash] = $this->reader->read($path, $locale);
5252
}
5353

5454
return $this->buffer[$hash];
5555
}
56-
57-
/**
58-
* {@inheritdoc}
59-
*/
60-
public function getLocales($path)
61-
{
62-
return $this->reader->getLocales($path);
63-
}
6456
}

‎src/Symfony/Component/Intl/ResourceBundle/Reader/StructuredBundleReader.php renamed to ‎src/Symfony/Component/Intl/Data/Bundle/Reader/BundleEntryReader.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Intl/Data/Bundle/Reader/BundleEntryReader.php
+5-13Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,24 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Component\Intl\ResourceBundle\Reader;
12+
namespace Symfony\Component\Intl\Data\Bundle\Reader;
1313

1414
use Symfony\Component\Intl\Exception\MissingResourceException;
1515
use Symfony\Component\Intl\Exception\OutOfBoundsException;
1616
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;
1717
use Symfony\Component\Intl\Locale;
18-
use Symfony\Component\Intl\ResourceBundle\Util\RecursiveArrayAccess;
18+
use Symfony\Component\Intl\Data\Util\RecursiveArrayAccess;
1919

2020
/**
21-
* Default implementation of {@link StructuredBundleReaderInterface}.
21+
* Default implementation of {@link BundleEntryReaderInterface}.
2222
*
2323
* @author Bernhard Schussek <bschussek@gmail.com>
2424
*
25-
* @see StructuredResourceBundleBundleReaderInterface
25+
* @see BundleEntryReaderInterface
2626
*
2727
* @internal
2828
*/
29-
class StructuredBundleReader implements StructuredBundleReaderInterface
29+
class BundleEntryReader implements BundleEntryReaderInterface
3030
{
3131
/**
3232
* @var BundleReaderInterface
@@ -181,12 +181,4 @@ public function readEntry($path, $locale, array $indices, $fallback = true)
181181

182182
throw new MissingResourceException($errorMessage, 0, $exception);
183183
}
184-
185-
/**
186-
* {@inheritdoc}
187-
*/
188-
public function getLocales($path)
189-
{
190-
return $this->reader->getLocales($path);
191-
}
192184
}

‎src/Symfony/Component/Intl/ResourceBundle/Reader/StructuredBundleReaderInterface.php renamed to ‎src/Symfony/Component/Intl/Data/Bundle/Reader/BundleEntryReaderInterface.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Intl/Data/Bundle/Reader/BundleEntryReaderInterface.php
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* file that was distributed with this source code.
1010
*/
1111

12-
namespace Symfony\Component\Intl\ResourceBundle\Reader;
12+
namespace Symfony\Component\Intl\Data\Bundle\Reader;
1313

1414
use Symfony\Component\Intl\Exception\MissingResourceException;
1515

@@ -20,7 +20,7 @@
2020
*
2121
* @internal
2222
*/
23-
interface StructuredBundleReaderInterface extends BundleReaderInterface
23+
interface BundleEntryReaderInterface extends BundleReaderInterface
2424
{
2525
/**
2626
* Reads an entry from a resource bundle.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.