diff --git a/.github/workflows/intl-data-tests.yml b/.github/workflows/intl-data-tests.yml
index 01401fedc232f..a02bd73ac5b8f 100644
--- a/.github/workflows/intl-data-tests.yml
+++ b/.github/workflows/intl-data-tests.yml
@@ -1,8 +1,11 @@
-name: Intl data
+name: Intl/Emoji data
on:
push:
paths:
+ - 'src/Symfony/Component/Emoji/*.php'
+ - 'src/Symfony/Component/Emoji/Resources/data/**'
+ - 'src/Symfony/Component/Emoji/Tests/*Test.php'
- 'src/Symfony/Component/Intl/*.php'
- 'src/Symfony/Component/Intl/Util/GitRepository.php'
- 'src/Symfony/Component/Intl/Resources/data/**'
@@ -10,6 +13,9 @@ on:
- 'src/Symfony/Component/Intl/Tests/Util/GitRepositoryTest.php'
pull_request:
paths:
+ - 'src/Symfony/Component/Emoji/*.php'
+ - 'src/Symfony/Component/Emoji/Resources/data/**'
+ - 'src/Symfony/Component/Emoji/Tests/*Test.php'
- 'src/Symfony/Component/Intl/*.php'
- 'src/Symfony/Component/Intl/Util/GitRepository.php'
- 'src/Symfony/Component/Intl/Resources/data/**'
@@ -29,7 +35,7 @@ permissions:
jobs:
tests:
- name: Intl data
+ name: Intl/Emoji data
runs-on: Ubuntu-20.04
steps:
@@ -80,15 +86,23 @@ jobs:
- name: Run intl-data tests
run: ./phpunit --group intl-data -v
- - name: Test with compressed data
+ - name: Test intl-data with compressed data
run: |
[ -f src/Symfony/Component/Intl/Resources/data/locales/en.php ]
[ ! -f src/Symfony/Component/Intl/Resources/data/locales/en.php.gz ]
- [ -f src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php ]
- [ ! -f src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php.gz ]
src/Symfony/Component/Intl/Resources/bin/compress
[ ! -f src/Symfony/Component/Intl/Resources/data/locales/en.php ]
[ -f src/Symfony/Component/Intl/Resources/data/locales/en.php.gz ]
- [ ! -f src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php ]
- [ -f src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php.gz ]
./phpunit src/Symfony/Component/Intl
+
+ - name: Run Emoji tests
+ run: ./phpunit src/Symfony/Component/Emoji -v
+
+ - name: Test Emoji with compressed data
+ run: |
+ [ -f src/Symfony/Component/Emoji/Resources/data/emoji-en.php ]
+ [ ! -f src/Symfony/Component/Emoji/Resources/data/emoji-en.php.gz ]
+ src/Symfony/Component/Emoji/Resources/bin/compress
+ [ ! -f src/Symfony/Component/Emoji/Resources/data/emoji-en.php ]
+ [ -f src/Symfony/Component/Emoji/Resources/data/emoji-en.php.gz ]
+ ./phpunit src/Symfony/Component/Emoji
diff --git a/.github/workflows/package-tests.yml b/.github/workflows/package-tests.yml
index 96b7451b7f945..bc6f8eec683c7 100644
--- a/.github/workflows/package-tests.yml
+++ b/.github/workflows/package-tests.yml
@@ -21,7 +21,7 @@ jobs:
- name: Find packages
id: find-packages
- run: echo "packages=$(php .github/get-modified-packages.php $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji |jq -R -s -c 'split("\n")[:-1]') $(git diff --name-only origin/${{ github.base_ref }} HEAD | grep src/ | jq -R -s -c 'split("\n")[:-1]'))" >> $GITHUB_OUTPUT
+ run: echo "packages=$(php .github/get-modified-packages.php $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Emoji/Resources/bin |jq -R -s -c 'split("\n")[:-1]') $(git diff --name-only origin/${{ github.base_ref }} HEAD | grep src/ | jq -R -s -c 'split("\n")[:-1]'))" >> $GITHUB_OUTPUT
- name: Verify meta files are correct
run: |
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 9daf71108dcaa..0dfc798c94fac 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -95,7 +95,7 @@ jobs:
echo SYMFONY_DEPRECATIONS_HELPER=weak >> $GITHUB_ENV
cp composer.json composer.json.orig
echo -e '{\n"require":{'"$(grep phpunit-bridge composer.json)"'"php":"*"},"minimum-stability":"dev"}' > composer.json
- php .github/build-packages.php HEAD^ $SYMFONY_VERSION $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Intl/Resources/emoji)
+ php .github/build-packages.php HEAD^ $SYMFONY_VERSION $(find src/Symfony -mindepth 2 -type f -name composer.json -printf '%h\n' | grep -v src/Symfony/Component/Emoji/Resources/bin)
mv composer.json composer.json.phpunit
mv composer.json.orig composer.json
fi
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index 48c4f276b34a5..b5712f07b352d 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -53,6 +53,7 @@
'Symfony/Bundle/FrameworkBundle/Resources/views/Form',
// explicit trigger_error tests
'Symfony/Bridge/PhpUnit/Tests/DeprecationErrorHandler/',
+ 'Symfony/Component/Emoji/Resources/',
'Symfony/Component/Intl/Resources/data/',
])
// explicit tests for ommited @param type, against `no_superfluous_phpdoc_tags`
diff --git a/composer.json b/composer.json
index 1894d70b6ccfb..710625257988a 100644
--- a/composer.json
+++ b/composer.json
@@ -71,6 +71,7 @@
"symfony/doctrine-bridge": "self.version",
"symfony/dom-crawler": "self.version",
"symfony/dotenv": "self.version",
+ "symfony/emoji": "self.version",
"symfony/error-handler": "self.version",
"symfony/event-dispatcher": "self.version",
"symfony/expression-language": "self.version",
diff --git a/psalm.xml b/psalm.xml
index a21be22fe248f..f5f9c5b4c4e88 100644
--- a/psalm.xml
+++ b/psalm.xml
@@ -17,7 +17,8 @@
-
+
+
diff --git a/src/Symfony/Component/Emoji/.gitattributes b/src/Symfony/Component/Emoji/.gitattributes
new file mode 100644
index 0000000000000..9e72316d442f0
--- /dev/null
+++ b/src/Symfony/Component/Emoji/.gitattributes
@@ -0,0 +1,8 @@
+/Resources/bin/build.php export-ignore
+/Resources/bin/composer.json export-ignore
+/Resources/bin/Makefile export-ignore
+/Resources/bin/README.md export-ignore
+/Tests export-ignore
+/phpunit.xml.dist export-ignore
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/Symfony/Component/Emoji/.gitignore b/src/Symfony/Component/Emoji/.gitignore
new file mode 100644
index 0000000000000..c49a5d8df5c65
--- /dev/null
+++ b/src/Symfony/Component/Emoji/.gitignore
@@ -0,0 +1,3 @@
+vendor/
+composer.lock
+phpunit.xml
diff --git a/src/Symfony/Component/Emoji/CHANGELOG.md b/src/Symfony/Component/Emoji/CHANGELOG.md
new file mode 100644
index 0000000000000..5f941ae21a99a
--- /dev/null
+++ b/src/Symfony/Component/Emoji/CHANGELOG.md
@@ -0,0 +1,7 @@
+CHANGELOG
+=========
+
+7.1
+---
+
+ * Add the component
diff --git a/src/Symfony/Component/Emoji/EmojiTransliterator.php b/src/Symfony/Component/Emoji/EmojiTransliterator.php
new file mode 100644
index 0000000000000..2a19f89cfc548
--- /dev/null
+++ b/src/Symfony/Component/Emoji/EmojiTransliterator.php
@@ -0,0 +1,141 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Emoji;
+
+use Symfony\Component\Emoji\Util\GzipStreamWrapper;
+
+if (!class_exists(\Transliterator::class)) {
+ throw new \LogicException(sprintf('You cannot use the "%s\EmojiTransliterator" class as the "intl" extension is not installed. See https://php.net/intl.', __NAMESPACE__));
+}
+
+final class EmojiTransliterator extends \Transliterator
+{
+ private const QUICK_CHECK = "\xA9\xAE\xE2\xE3\xF0";
+ private const REVERSEABLE_IDS = [
+ 'emoji-github' => 'github-emoji',
+ 'emoji-slack' => 'slack-emoji',
+ 'github-emoji' => 'emoji-github',
+ 'slack-emoji' => 'emoji-slack',
+ ];
+
+ public readonly string $id;
+
+ private array $map;
+
+ private string $quickCheck;
+
+ private \Transliterator $transliterator;
+
+ public static function create(string $id, int $direction = self::FORWARD): self
+ {
+ $id = strtolower($id);
+
+ if (!isset(self::REVERSEABLE_IDS[$id]) && !str_starts_with($id, 'emoji-')) {
+ $id = 'emoji-'.$id;
+ }
+
+ if (self::REVERSE === $direction) {
+ if (!isset(self::REVERSEABLE_IDS[$id])) {
+ // Create a failing reverse-transliterator to populate intl_get_error_*()
+ \Transliterator::createFromRules('A > B')->createInverse();
+
+ throw new \IntlException(intl_get_error_message(), intl_get_error_code());
+ }
+ $id = self::REVERSEABLE_IDS[$id];
+ }
+
+ $file = __DIR__."/Resources/data/{$id}.php";
+ if (!preg_match('/^[a-z0-9@_\\.\\-]*$/', $id) || !is_file($file) && !is_file($file .= '.gz')) {
+ \Transliterator::create($id); // Populate intl_get_error_*()
+
+ throw new \IntlException(intl_get_error_message(), intl_get_error_code());
+ }
+
+ /**
+ * @var array $maps
+ */
+ static $maps;
+
+ // Create an instance of \Transliterator with a custom id; that's the only way
+ static $newInstance;
+ $instance = ($newInstance ??= (new \ReflectionClass(self::class))->newInstanceWithoutConstructor(...))();
+ $instance->id = $id;
+ $instance->map = $maps[$id] ??= str_ends_with($file, '.gz') ? GzipStreamWrapper::require($file) : require $file;
+
+ return $instance;
+ }
+
+ public function createInverse(): self
+ {
+ return self::create($this->id, \Transliterator::REVERSE);
+ }
+
+ public function getErrorCode(): int|false
+ {
+ return $this->transliterator?->getErrorCode() ?? 0;
+ }
+
+ public function getErrorMessage(): string|false
+ {
+ return $this->transliterator?->getErrorMessage() ?? false;
+ }
+
+ public static function listIDs(): array
+ {
+ static $ids = [];
+
+ if ($ids) {
+ return $ids;
+ }
+
+ foreach (scandir(__DIR__.'/Resources/data/') as $file) {
+ if (str_ends_with($file, '.php.gz')) {
+ $ids[] = substr($file, 0, -7);
+ } elseif (str_ends_with($file, '.php')) {
+ $ids[] = substr($file, 0, -4);
+ }
+ }
+
+ return $ids;
+ }
+
+ public function transliterate(string $string, int $start = 0, int $end = -1): string|false
+ {
+ $this->quickCheck ??= str_starts_with(array_key_first($this->map), ':') ? ':' : self::QUICK_CHECK;
+
+ if (0 === $start && -1 === $end && preg_match('//u', $string)) {
+ return \strlen($string) === strcspn($string, $this->quickCheck) ? $string : strtr($string, $this->map);
+ }
+
+ // Here we rely on intl to validate the $string, $start and $end arguments
+ // and to slice the string. Slicing is done by replacing the part if $string
+ // between $start and $end by a unique cookie that can be reliably used to
+ // identify which part of $string should be transliterated.
+
+ static $cookie;
+ static $transliterator;
+
+ $cookie ??= hash('xxh128', random_bytes(8));
+ $this->transliterator ??= clone $transliterator ??= \Transliterator::createFromRules('[:any:]* > '.$cookie);
+
+ if (false === $result = $this->transliterator->transliterate($string, $start, $end)) {
+ return false;
+ }
+
+ $parts = explode($cookie, $result);
+ $start = \strlen($parts[0]);
+ $length = -\strlen($parts[1]) ?: null;
+ $string = substr($string, $start, $length);
+
+ return $parts[0].(\strlen($string) === strcspn($string, $this->quickCheck) ? $string : strtr($string, $this->map)).$parts[1];
+ }
+}
diff --git a/src/Symfony/Component/Emoji/LICENSE b/src/Symfony/Component/Emoji/LICENSE
new file mode 100644
index 0000000000000..e374a5c8339d3
--- /dev/null
+++ b/src/Symfony/Component/Emoji/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2024-present Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/src/Symfony/Component/Emoji/README.md b/src/Symfony/Component/Emoji/README.md
new file mode 100644
index 0000000000000..b5027369514d6
--- /dev/null
+++ b/src/Symfony/Component/Emoji/README.md
@@ -0,0 +1,18 @@
+Emoji Component
+===============
+
+The Emoji component provides access to emoji characters and sequences from
+the [Unicode CLDR](https://cldr.unicode.org/index).
+
+If you have the zlib extension enabled, you can compress the data by running:
+
+ php vendor/symfony/emoji/Resources/bin/compress
+
+Resources
+---------
+
+ * [Documentation](https://symfony.com/doc/current/components/emoji.html)
+ * [Contributing](https://symfony.com/doc/current/contributing/index.html)
+ * [Report issues](https://github.com/symfony/symfony/issues) and
+ [send Pull Requests](https://github.com/symfony/symfony/pulls)
+ in the [main Symfony repository](https://github.com/symfony/symfony)
diff --git a/src/Symfony/Component/Intl/Resources/emoji/Makefile b/src/Symfony/Component/Emoji/Resources/bin/Makefile
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/emoji/Makefile
rename to src/Symfony/Component/Emoji/Resources/bin/Makefile
diff --git a/src/Symfony/Component/Intl/Resources/emoji/README.md b/src/Symfony/Component/Emoji/Resources/bin/README.md
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/emoji/README.md
rename to src/Symfony/Component/Emoji/Resources/bin/README.md
diff --git a/src/Symfony/Component/Intl/Resources/emoji/build.php b/src/Symfony/Component/Emoji/Resources/bin/build.php
similarity index 98%
rename from src/Symfony/Component/Intl/Resources/emoji/build.php
rename to src/Symfony/Component/Emoji/Resources/bin/build.php
index a3546815865cf..088838cdd0466 100755
--- a/src/Symfony/Component/Intl/Resources/emoji/build.php
+++ b/src/Symfony/Component/Emoji/Resources/bin/build.php
@@ -25,7 +25,7 @@
final class Builder
{
- private const TARGET_DIR = __DIR__.'/../data/transliterator/emoji/';
+ private const TARGET_DIR = __DIR__.'/../data/';
public static function getEmojisCodePoints(): array
{
@@ -233,7 +233,7 @@ public static function saveRules(iterable $rulesByLocale): void
sort($firstChars);
$quickCheck = '"'.str_replace('%', '\\x', rawurlencode(implode('', $firstChars))).'"';
- $file = dirname(__DIR__, 2).'/Transliterator/EmojiTransliterator.php';
+ $file = dirname(__DIR__, 2).'/EmojiTransliterator.php';
file_put_contents($file, preg_replace('/QUICK_CHECK = .*;/m', "QUICK_CHECK = {$quickCheck};", file_get_contents($file)));
}
diff --git a/src/Symfony/Component/Intl/Resources/emoji/composer.json b/src/Symfony/Component/Emoji/Resources/bin/composer.json
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/emoji/composer.json
rename to src/Symfony/Component/Emoji/Resources/bin/composer.json
diff --git a/src/Symfony/Component/Emoji/Resources/bin/compress b/src/Symfony/Component/Emoji/Resources/bin/compress
new file mode 100755
index 0000000000000..174cbca59b041
--- /dev/null
+++ b/src/Symfony/Component/Emoji/Resources/bin/compress
@@ -0,0 +1,36 @@
+#!/usr/bin/env php
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+if ('cli' !== PHP_SAPI) {
+ throw new Exception('This script must be run from the command line.');
+}
+if (!extension_loaded('zlib')) {
+ throw new Exception('This script requires the zlib extension.');
+}
+
+$iterator = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator(
+ dirname(__DIR__).'/data',
+ FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::SKIP_DOTS
+ )
+);
+
+foreach ($iterator as $file) {
+ if ('php' !== $file->getExtension()) {
+ continue;
+ }
+
+ $data = file_get_contents($file);
+ file_put_contents('compress.zlib://'.$file.'.gz', $data);
+
+ unlink($file.(filesize($file.'.gz') >= strlen($data) ? '.gz' : ''));
+}
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-af.php b/src/Symfony/Component/Emoji/Resources/data/emoji-af.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-af.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-af.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-am.php b/src/Symfony/Component/Emoji/Resources/data/emoji-am.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-am.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-am.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ar.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ar.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ar.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ar.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ar_sa.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ar_sa.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ar_sa.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ar_sa.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-as.php b/src/Symfony/Component/Emoji/Resources/data/emoji-as.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-as.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-as.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ast.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ast.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ast.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ast.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-az.php b/src/Symfony/Component/Emoji/Resources/data/emoji-az.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-az.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-az.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-be.php b/src/Symfony/Component/Emoji/Resources/data/emoji-be.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-be.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-be.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bew.php b/src/Symfony/Component/Emoji/Resources/data/emoji-bew.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bew.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-bew.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bg.php b/src/Symfony/Component/Emoji/Resources/data/emoji-bg.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bg.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-bg.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bgn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-bgn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bgn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-bgn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-bn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-bn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-br.php b/src/Symfony/Component/Emoji/Resources/data/emoji-br.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-br.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-br.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bs.php b/src/Symfony/Component/Emoji/Resources/data/emoji-bs.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-bs.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-bs.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ca.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ca.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ca.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ca.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ccp.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ccp.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ccp.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ccp.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ceb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ceb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ceb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ceb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-chr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-chr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-chr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-chr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ckb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ckb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ckb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ckb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cs.php b/src/Symfony/Component/Emoji/Resources/data/emoji-cs.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cs.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-cs.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cv.php b/src/Symfony/Component/Emoji/Resources/data/emoji-cv.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cv.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-cv.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cy.php b/src/Symfony/Component/Emoji/Resources/data/emoji-cy.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-cy.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-cy.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-da.php b/src/Symfony/Component/Emoji/Resources/data/emoji-da.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-da.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-da.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-de.php b/src/Symfony/Component/Emoji/Resources/data/emoji-de.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-de.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-de.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-de_ch.php b/src/Symfony/Component/Emoji/Resources/data/emoji-de_ch.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-de_ch.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-de_ch.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-dsb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-dsb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-dsb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-dsb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-el.php b/src/Symfony/Component/Emoji/Resources/data/emoji-el.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-el.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-el.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_001.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en_001.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_001.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en_001.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_au.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en_au.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_au.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en_au.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_ca.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en_ca.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_ca.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en_ca.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_gb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en_gb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_gb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en_gb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_in.php b/src/Symfony/Component/Emoji/Resources/data/emoji-en_in.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-en_in.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-en_in.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es.php b/src/Symfony/Component/Emoji/Resources/data/emoji-es.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-es.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_419.php b/src/Symfony/Component/Emoji/Resources/data/emoji-es_419.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_419.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-es_419.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_mx.php b/src/Symfony/Component/Emoji/Resources/data/emoji-es_mx.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_mx.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-es_mx.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_us.php b/src/Symfony/Component/Emoji/Resources/data/emoji-es_us.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-es_us.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-es_us.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-et.php b/src/Symfony/Component/Emoji/Resources/data/emoji-et.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-et.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-et.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-eu.php b/src/Symfony/Component/Emoji/Resources/data/emoji-eu.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-eu.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-eu.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fa.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fa.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fa.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fa.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ff_adlm.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ff_adlm.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ff_adlm.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ff_adlm.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fi.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fi.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fi.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fi.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fil.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fil.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fil.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fil.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fo.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fo.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fo.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fo.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fr_ca.php b/src/Symfony/Component/Emoji/Resources/data/emoji-fr_ca.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-fr_ca.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-fr_ca.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ga.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ga.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ga.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ga.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gd.php b/src/Symfony/Component/Emoji/Resources/data/emoji-gd.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gd.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-gd.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-github.php b/src/Symfony/Component/Emoji/Resources/data/emoji-github.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-github.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-github.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-gl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-gl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gu.php b/src/Symfony/Component/Emoji/Resources/data/emoji-gu.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-gu.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-gu.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ha.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ha.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ha.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ha.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ha_ne.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ha_ne.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ha_ne.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ha_ne.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-he.php b/src/Symfony/Component/Emoji/Resources/data/emoji-he.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-he.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-he.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hi.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hi.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hi.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hi.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hi_latn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hi_latn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hi_latn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hi_latn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hsb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hsb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hsb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hsb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hu.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hu.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hu.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hu.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hy.php b/src/Symfony/Component/Emoji/Resources/data/emoji-hy.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-hy.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-hy.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ia.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ia.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ia.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ia.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-id.php b/src/Symfony/Component/Emoji/Resources/data/emoji-id.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-id.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-id.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ig.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ig.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ig.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ig.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-is.php b/src/Symfony/Component/Emoji/Resources/data/emoji-is.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-is.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-is.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-it.php b/src/Symfony/Component/Emoji/Resources/data/emoji-it.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-it.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-it.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ja.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ja.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ja.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ja.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-jv.php b/src/Symfony/Component/Emoji/Resources/data/emoji-jv.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-jv.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-jv.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ka.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ka.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ka.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ka.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kab.php b/src/Symfony/Component/Emoji/Resources/data/emoji-kab.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kab.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-kab.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-kk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-kk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-kl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-kl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-km.php b/src/Symfony/Component/Emoji/Resources/data/emoji-km.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-km.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-km.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-kn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-kn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ko.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ko.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ko.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ko.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kok.php b/src/Symfony/Component/Emoji/Resources/data/emoji-kok.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-kok.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-kok.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ku.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ku.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ku.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ku.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ky.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ky.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ky.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ky.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lb.php b/src/Symfony/Component/Emoji/Resources/data/emoji-lb.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lb.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-lb.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lij.php b/src/Symfony/Component/Emoji/Resources/data/emoji-lij.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lij.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-lij.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lo.php b/src/Symfony/Component/Emoji/Resources/data/emoji-lo.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lo.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-lo.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lt.php b/src/Symfony/Component/Emoji/Resources/data/emoji-lt.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lt.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-lt.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lv.php b/src/Symfony/Component/Emoji/Resources/data/emoji-lv.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-lv.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-lv.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mi.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mi.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mi.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mi.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ml.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ml.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ml.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ml.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mni.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mni.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mni.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mni.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ms.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ms.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ms.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ms.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mt.php b/src/Symfony/Component/Emoji/Resources/data/emoji-mt.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-mt.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-mt.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-my.php b/src/Symfony/Component/Emoji/Resources/data/emoji-my.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-my.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-my.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ne.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ne.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ne.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ne.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-nl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-nl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-nn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-nn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-no.php b/src/Symfony/Component/Emoji/Resources/data/emoji-no.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-no.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-no.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nso.php b/src/Symfony/Component/Emoji/Resources/data/emoji-nso.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-nso.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-nso.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-oc.php b/src/Symfony/Component/Emoji/Resources/data/emoji-oc.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-oc.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-oc.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-or.php b/src/Symfony/Component/Emoji/Resources/data/emoji-or.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-or.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-or.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pa.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pa.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pa.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pa.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pa_arab.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pa_arab.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pa_arab.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pa_arab.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pcm.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pcm.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pcm.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pcm.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ps.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ps.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ps.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ps.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pt.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pt.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pt.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pt.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pt_pt.php b/src/Symfony/Component/Emoji/Resources/data/emoji-pt_pt.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-pt_pt.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-pt_pt.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-qu.php b/src/Symfony/Component/Emoji/Resources/data/emoji-qu.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-qu.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-qu.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-quc.php b/src/Symfony/Component/Emoji/Resources/data/emoji-quc.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-quc.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-quc.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rhg.php b/src/Symfony/Component/Emoji/Resources/data/emoji-rhg.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rhg.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-rhg.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rm.php b/src/Symfony/Component/Emoji/Resources/data/emoji-rm.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rm.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-rm.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ro.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ro.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ro.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ro.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-root.php b/src/Symfony/Component/Emoji/Resources/data/emoji-root.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-root.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-root.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ru.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ru.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ru.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ru.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rw.php b/src/Symfony/Component/Emoji/Resources/data/emoji-rw.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-rw.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-rw.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sat.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sat.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sat.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sat.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sc.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sc.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sc.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sc.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sd.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sd.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sd.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sd.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-si.php b/src/Symfony/Component/Emoji/Resources/data/emoji-si.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-si.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-si.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-slack.php b/src/Symfony/Component/Emoji/Resources/data/emoji-slack.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-slack.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-slack.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-so.php b/src/Symfony/Component/Emoji/Resources/data/emoji-so.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-so.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-so.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sq.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sq.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sq.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sq.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_cyrl.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sr_cyrl.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_cyrl.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sr_cyrl.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_cyrl_ba.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sr_cyrl_ba.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_cyrl_ba.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sr_cyrl_ba.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_latn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sr_latn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_latn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sr_latn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_latn_ba.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sr_latn_ba.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sr_latn_ba.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sr_latn_ba.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-strip.php b/src/Symfony/Component/Emoji/Resources/data/emoji-strip.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-strip.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-strip.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sv.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sv.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sv.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sv.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sw.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sw.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sw.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sw.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sw_ke.php b/src/Symfony/Component/Emoji/Resources/data/emoji-sw_ke.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-sw_ke.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-sw_ke.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ta.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ta.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ta.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ta.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-te.php b/src/Symfony/Component/Emoji/Resources/data/emoji-te.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-te.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-te.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tg.php b/src/Symfony/Component/Emoji/Resources/data/emoji-tg.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tg.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-tg.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-th.php b/src/Symfony/Component/Emoji/Resources/data/emoji-th.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-th.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-th.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ti.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ti.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ti.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ti.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-tk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-tk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tn.php b/src/Symfony/Component/Emoji/Resources/data/emoji-tn.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tn.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-tn.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-to.php b/src/Symfony/Component/Emoji/Resources/data/emoji-to.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-to.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-to.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tr.php b/src/Symfony/Component/Emoji/Resources/data/emoji-tr.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-tr.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-tr.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ug.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ug.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ug.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ug.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-uk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-uk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-uk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-uk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ur.php b/src/Symfony/Component/Emoji/Resources/data/emoji-ur.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-ur.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-ur.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-uz.php b/src/Symfony/Component/Emoji/Resources/data/emoji-uz.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-uz.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-uz.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-vi.php b/src/Symfony/Component/Emoji/Resources/data/emoji-vi.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-vi.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-vi.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-wo.php b/src/Symfony/Component/Emoji/Resources/data/emoji-wo.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-wo.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-wo.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-xh.php b/src/Symfony/Component/Emoji/Resources/data/emoji-xh.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-xh.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-xh.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yo.php b/src/Symfony/Component/Emoji/Resources/data/emoji-yo.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yo.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-yo.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yo_bj.php b/src/Symfony/Component/Emoji/Resources/data/emoji-yo_bj.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yo_bj.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-yo_bj.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yue.php b/src/Symfony/Component/Emoji/Resources/data/emoji-yue.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yue.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-yue.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yue_hans.php b/src/Symfony/Component/Emoji/Resources/data/emoji-yue_hans.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-yue_hans.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-yue_hans.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh.php b/src/Symfony/Component/Emoji/Resources/data/emoji-zh.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-zh.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh_hant.php b/src/Symfony/Component/Emoji/Resources/data/emoji-zh_hant.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh_hant.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-zh_hant.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh_hant_hk.php b/src/Symfony/Component/Emoji/Resources/data/emoji-zh_hant_hk.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zh_hant_hk.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-zh_hant_hk.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zu.php b/src/Symfony/Component/Emoji/Resources/data/emoji-zu.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/emoji-zu.php
rename to src/Symfony/Component/Emoji/Resources/data/emoji-zu.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/github-emoji.php b/src/Symfony/Component/Emoji/Resources/data/github-emoji.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/github-emoji.php
rename to src/Symfony/Component/Emoji/Resources/data/github-emoji.php
diff --git a/src/Symfony/Component/Intl/Resources/data/transliterator/emoji/slack-emoji.php b/src/Symfony/Component/Emoji/Resources/data/slack-emoji.php
similarity index 100%
rename from src/Symfony/Component/Intl/Resources/data/transliterator/emoji/slack-emoji.php
rename to src/Symfony/Component/Emoji/Resources/data/slack-emoji.php
diff --git a/src/Symfony/Component/Intl/Tests/Transliterator/EmojiTransliteratorTest.php b/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
similarity index 96%
rename from src/Symfony/Component/Intl/Tests/Transliterator/EmojiTransliteratorTest.php
rename to src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
index ccc379b09ac2d..12a3682b16769 100644
--- a/src/Symfony/Component/Intl/Tests/Transliterator/EmojiTransliteratorTest.php
+++ b/src/Symfony/Component/Emoji/Tests/EmojiTransliteratorTest.php
@@ -9,11 +9,11 @@
* file that was distributed with this source code.
*/
-namespace Symfony\Component\Intl\Tests\Transliterator;
+namespace Symfony\Component\Emoji\Tests;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\Emoji\EmojiTransliterator;
use Symfony\Component\Finder\Finder;
-use Symfony\Component\Intl\Transliterator\EmojiTransliterator;
/**
* @requires extension intl
@@ -95,7 +95,7 @@ public function testAllTransliterator(string $locale)
public static function provideLocaleTest(): iterable
{
$file = (new Finder())
- ->in(__DIR__.'/../../Resources/data/transliterator/emoji')
+ ->in(__DIR__.'/../Resources/data')
->name('*.php')
->notName('emoji-strip.php')
->files()
diff --git a/src/Symfony/Component/Emoji/Util/GzipStreamWrapper.php b/src/Symfony/Component/Emoji/Util/GzipStreamWrapper.php
new file mode 100644
index 0000000000000..1ae158dd9cc38
--- /dev/null
+++ b/src/Symfony/Component/Emoji/Util/GzipStreamWrapper.php
@@ -0,0 +1,83 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Emoji\Util;
+
+/**
+ * @internal
+ */
+class GzipStreamWrapper
+{
+ /** @var resource|null */
+ public $context;
+
+ /** @var resource */
+ private $handle;
+ private string $path;
+
+ public static function require(string $path): array
+ {
+ if (!\extension_loaded('zlib')) {
+ throw new \LogicException(sprintf('The "zlib" extension is required to load the "%s/%s" map, please enable it in your php.ini file.', basename(\dirname($path)), basename($path)));
+ }
+
+ if (!\function_exists('opcache_is_script_cached') || !@opcache_is_script_cached($path)) {
+ stream_wrapper_unregister('file');
+ stream_wrapper_register('file', self::class);
+ }
+
+ return require $path;
+ }
+
+ public function stream_open(string $path, string $mode): bool
+ {
+ stream_wrapper_restore('file');
+ $this->path = $path;
+
+ return false !== $this->handle = fopen('compress.zlib://'.$path, $mode);
+ }
+
+ public function stream_read(int $count): string|false
+ {
+ return fread($this->handle, $count);
+ }
+
+ public function stream_eof(): bool
+ {
+ return feof($this->handle);
+ }
+
+ public function stream_set_option(int $option, int $arg1, int $arg2): bool
+ {
+ return match ($option) {
+ \STREAM_OPTION_BLOCKING => stream_set_blocking($this->handle, $arg1),
+ \STREAM_OPTION_READ_TIMEOUT => stream_set_timeout($this->handle, $arg1, $arg2),
+ \STREAM_OPTION_WRITE_BUFFER => 0 === stream_set_write_buffer($this->handle, $arg2),
+ default => false,
+ };
+ }
+
+ public function stream_stat(): array|false
+ {
+ if (!$stat = stat($this->path)) {
+ return false;
+ }
+
+ $h = fopen($this->path, 'r');
+ fseek($h, -4, \SEEK_END);
+ $size = unpack('V', fread($h, 4));
+ fclose($h);
+
+ $stat[7] = $stat['size'] = end($size);
+
+ return $stat;
+ }
+}
diff --git a/src/Symfony/Component/Emoji/composer.json b/src/Symfony/Component/Emoji/composer.json
new file mode 100644
index 0000000000000..c4997c1b32b92
--- /dev/null
+++ b/src/Symfony/Component/Emoji/composer.json
@@ -0,0 +1,34 @@
+{
+ "name": "symfony/emoji",
+ "type": "library",
+ "description": "Provides access to emoji characters and sequences from the Unicode CLDR",
+ "keywords": ["cldr", "emoji", "intl", "transliterator", "unicode"],
+ "homepage": "https://symfony.com",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Grégoire Pineau",
+ "email": "lyrixx@lyrixx.info"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "require": {
+ "php": ">=8.2",
+ "ext-intl": "*"
+ },
+ "require-dev": {
+ "symfony/filesystem": "^6.4|^7.0",
+ "symfony/finder": "^6.4|^7.0",
+ "symfony/var-exporter": "^6.4|^7.0"
+ },
+ "autoload": {
+ "psr-4": { "Symfony\\Component\\Emoji\\": "" },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "minimum-stability": "dev"
+}
diff --git a/src/Symfony/Component/Emoji/phpunit.xml.dist b/src/Symfony/Component/Emoji/phpunit.xml.dist
new file mode 100644
index 0000000000000..5c74dab50b3ca
--- /dev/null
+++ b/src/Symfony/Component/Emoji/phpunit.xml.dist
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+ ./Tests/
+
+
+
+
+
+ ./
+
+
+ ./Resources
+ ./Tests
+ ./vendor
+
+
+
diff --git a/src/Symfony/Component/Intl/CHANGELOG.md b/src/Symfony/Component/Intl/CHANGELOG.md
index 1f372c4e46545..ed7abd49647ea 100644
--- a/src/Symfony/Component/Intl/CHANGELOG.md
+++ b/src/Symfony/Component/Intl/CHANGELOG.md
@@ -1,10 +1,16 @@
CHANGELOG
=========
+7.1
+---
+
+ * Move all emoji code & data to a new `symfony/emoji` component
+ * Deprecate `EmojiTransliterator` in favor of `Symfony\Component\Emoji\EmojiTransliterator`
+
6.4
---
- * Add support for ISO-3166-1 numeric codes with `Countries::getNumericCode()`, `Countries::getNumericCodes()`,
+ * Add support for ISO-3166-1 numeric codes with `Countries::getNumericCode()`, `Countries::getNumericCodes()`,
`Countries::numericCodeExists()` and `Countries::getAlpha2FromNumeric()`
6.3
diff --git a/src/Symfony/Component/Intl/README.md b/src/Symfony/Component/Intl/README.md
index a5d55ea40b63d..333e2fe80a812 100644
--- a/src/Symfony/Component/Intl/README.md
+++ b/src/Symfony/Component/Intl/README.md
@@ -3,6 +3,10 @@ Intl Component
The Intl component provides access to the localization data of the ICU library.
+If you have the zlib extension enabled, you can compress the data by running:
+
+ php vendor/symfony/intl/Resources/bin/compress
+
Resources
---------
diff --git a/src/Symfony/Component/Intl/Transliterator/EmojiTransliterator.php b/src/Symfony/Component/Intl/Transliterator/EmojiTransliterator.php
index daa114316af74..7c36fe6abd7b9 100644
--- a/src/Symfony/Component/Intl/Transliterator/EmojiTransliterator.php
+++ b/src/Symfony/Component/Intl/Transliterator/EmojiTransliterator.php
@@ -11,133 +11,21 @@
namespace Symfony\Component\Intl\Transliterator;
-use Symfony\Component\Intl\Util\GzipStreamWrapper;
+use Symfony\Component\Emoji\EmojiTransliterator as EmojiEmojiTransliterator;
-if (!class_exists(\Transliterator::class)) {
- throw new \LogicException(sprintf('You cannot use the "%s\EmojiTransliterator" class as the "intl" extension is not installed. See https://php.net/intl.', __NAMESPACE__));
-} else {
- /**
- * @internal
- */
- trait EmojiTransliteratorTrait
- {
- private array $map;
- private \Transliterator $transliterator;
-
- public static function create(string $id, int $direction = self::FORWARD): self
- {
- $id = strtolower($id);
-
- if (!isset(self::REVERSEABLE_IDS[$id]) && !str_starts_with($id, 'emoji-')) {
- $id = 'emoji-'.$id;
- }
-
- if (self::REVERSE === $direction) {
- if (!isset(self::REVERSEABLE_IDS[$id])) {
- // Create a failing reverse-transliterator to populate intl_get_error_*()
- \Transliterator::createFromRules('A > B')->createInverse();
-
- throw new \IntlException(intl_get_error_message(), intl_get_error_code());
- }
- $id = self::REVERSEABLE_IDS[$id];
- }
-
- $file = \dirname(__DIR__)."/Resources/data/transliterator/emoji/{$id}.php";
- if (!preg_match('/^[a-z0-9@_\\.\\-]*$/', $id) || !is_file($file) && !is_file($file .= '.gz')) {
- \Transliterator::create($id); // Populate intl_get_error_*()
-
- throw new \IntlException(intl_get_error_message(), intl_get_error_code());
- }
-
- static $maps;
-
- // Create an instance of \Transliterator with a custom id; that's the only way
- static $newInstance;
- $instance = ($newInstance ??= (new \ReflectionClass(self::class))->newInstanceWithoutConstructor(...))();
- $instance->id = $id;
- $instance->map = $maps[$id] ??= str_ends_with($file, '.gz') ? GzipStreamWrapper::require($file) : require $file;
-
- return $instance;
- }
-
- public function createInverse(): self
- {
- return self::create($this->id, self::REVERSE);
- }
-
- public function getErrorCode(): int|false
- {
- return $this->transliterator?->getErrorCode() ?? 0;
- }
-
- public function getErrorMessage(): string|false
- {
- return $this->transliterator?->getErrorMessage() ?? false;
- }
-
- public static function listIDs(): array
- {
- static $ids = [];
+trigger_deprecation('symfony/intl', '7.1', 'The "%s" class is deprecated, use "%s" instead.', EmojiTransliterator::class, EmojiEmojiTransliterator::class);
- if ($ids) {
- return $ids;
- }
-
- foreach (scandir(\dirname(__DIR__).'/Resources/data/transliterator/emoji/') as $file) {
- if (str_ends_with($file, '.php.gz')) {
- $ids[] = substr($file, 0, -7);
- } elseif (str_ends_with($file, '.php')) {
- $ids[] = substr($file, 0, -4);
- }
- }
-
- return $ids;
- }
-
- public function transliterate(string $string, int $start = 0, int $end = -1): string|false
- {
- $quickCheck = ':' === array_key_first($this->map)[0] ? ':' : self::QUICK_CHECK;
-
- if (0 === $start && -1 === $end && preg_match('//u', $string)) {
- return \strlen($string) === strcspn($string, $quickCheck) ? $string : strtr($string, $this->map);
- }
-
- // Here we rely on intl to validate the $string, $start and $end arguments
- // and to slice the string. Slicing is done by replacing the part if $string
- // between $start and $end by a unique cookie that can be reliably used to
- // identify which part of $string should be transliterated.
-
- static $cookie;
- static $transliterator;
-
- $cookie ??= hash('xxh128', random_bytes(8));
- $this->transliterator ??= clone $transliterator ??= \Transliterator::createFromRules('[:any:]* > '.$cookie);
-
- if (false === $result = $this->transliterator->transliterate($string, $start, $end)) {
- return false;
- }
-
- $parts = explode($cookie, $result);
- $start = \strlen($parts[0]);
- $length = -\strlen($parts[1]) ?: null;
- $string = substr($string, $start, $length);
-
- return $parts[0].(\strlen($string) === strcspn($string, $quickCheck) ? $string : strtr($string, $this->map)).$parts[1];
- }
- }
+if (!class_exists(EmojiEmojiTransliterator::class)) {
+ throw new \LogicException(sprintf('You cannot use the "%s" if the Emoji component is not available. Try running "composer require symfony/emoji".', EmojiEmojiTransliterator::class));
}
-final class EmojiTransliterator extends \Transliterator
-{
- use EmojiTransliteratorTrait;
-
- private const QUICK_CHECK = "\xA9\xAE\xE2\xE3\xF0";
- private const REVERSEABLE_IDS = [
- 'emoji-github' => 'github-emoji',
- 'emoji-slack' => 'slack-emoji',
- 'github-emoji' => 'emoji-github',
- 'slack-emoji' => 'emoji-slack',
- ];
+class_alias(EmojiEmojiTransliterator::class, EmojiTransliterator::class);
- public readonly string $id;
+if (false) {
+ /**
+ * @deprecated since Symfony 7.1, use Symfony\Component\Emoji\EmojiTransliterator instead
+ */
+ class EmojiTransliterator extends \Transliterator
+ {
+ }
}
diff --git a/src/Symfony/Component/Intl/composer.json b/src/Symfony/Component/Intl/composer.json
index 360918baa6df9..f1d1fbf9bfe24 100644
--- a/src/Symfony/Component/Intl/composer.json
+++ b/src/Symfony/Component/Intl/composer.json
@@ -24,13 +24,16 @@
}
],
"require": {
- "php": ">=8.2"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"require-dev": {
"symfony/filesystem": "^6.4|^7.0",
- "symfony/finder": "^6.4|^7.0",
"symfony/var-exporter": "^6.4|^7.0"
},
+ "conflict": {
+ "symfony/string": "<7.1"
+ },
"autoload": {
"psr-4": { "Symfony\\Component\\Intl\\": "" },
"exclude-from-classmap": [
diff --git a/src/Symfony/Component/String/Slugger/AsciiSlugger.php b/src/Symfony/Component/String/Slugger/AsciiSlugger.php
index 4f428da9603f0..c93731866f4bf 100644
--- a/src/Symfony/Component/String/Slugger/AsciiSlugger.php
+++ b/src/Symfony/Component/String/Slugger/AsciiSlugger.php
@@ -11,7 +11,7 @@
namespace Symfony\Component\String\Slugger;
-use Symfony\Component\Intl\Transliterator\EmojiTransliterator;
+use Symfony\Component\Emoji\EmojiTransliterator;
use Symfony\Component\String\AbstractUnicodeString;
use Symfony\Component\String\UnicodeString;
use Symfony\Contracts\Translation\LocaleAwareInterface;
@@ -92,7 +92,7 @@ public function getLocale(): string
public function withEmoji(bool|string $emoji = true): static
{
if (false !== $emoji && !class_exists(EmojiTransliterator::class)) {
- throw new \LogicException(sprintf('You cannot use the "%s()" method as the "symfony/intl" package is not installed. Try running "composer require symfony/intl".', __METHOD__));
+ throw new \LogicException(sprintf('You cannot use the "%s()" method as the "symfony/emoji" package is not installed. Try running "composer require symfony/emoji".', __METHOD__));
}
$new = clone $this;
diff --git a/src/Symfony/Component/String/Tests/Slugger/AsciiSluggerTest.php b/src/Symfony/Component/String/Tests/Slugger/AsciiSluggerTest.php
index 3544367b647fc..ab4b7990b1b24 100644
--- a/src/Symfony/Component/String/Tests/Slugger/AsciiSluggerTest.php
+++ b/src/Symfony/Component/String/Tests/Slugger/AsciiSluggerTest.php
@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
-namespace Symfony\Component\String;
+namespace Symfony\Component\String\Tests\Slugger;
use PHPUnit\Framework\TestCase;
use Symfony\Component\String\Slugger\AsciiSlugger;
diff --git a/src/Symfony/Component/String/composer.json b/src/Symfony/Component/String/composer.json
index 26ce26da3fe47..1959f5d2c277a 100644
--- a/src/Symfony/Component/String/composer.json
+++ b/src/Symfony/Component/String/composer.json
@@ -24,8 +24,9 @@
},
"require-dev": {
"symfony/error-handler": "^6.4|^7.0",
- "symfony/intl": "^6.4|^7.0",
+ "symfony/emoji": "^7.0",
"symfony/http-client": "^6.4|^7.0",
+ "symfony/intl": "^6.4|^7.0",
"symfony/translation-contracts": "^2.5|^3.0",
"symfony/var-exporter": "^6.4|^7.0"
},