shimabox / pemojine
Pemojine 是一个用于处理 PHP 中表情符号的库。
v0.6.5
2020-12-20 05:32 UTC
Requires
- php: >=5.5
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- electrolinux/phpquery: ^0.9.6
- league/climate: ^3.2 || ^3.4
- philo/laravel-blade: 3.*
- phpunit/phpunit: ~4.8 || ~5.0
README
Pemojine
Pemojine 是一个用于处理 PHP 中表情符号的库。
此库从这里获取数据。
注意
- 支持 php5.5-7.3
架构
- 将一个表情符号视为一个组。
- MediumGroup 包含组。
- BigGroup 包含 MediumGroups。
- Vendor 包含 BigGroups。
- @see 完整表情符号列表,v13.1
特性
- 可以为每个供应商(Apple、Google 等)输出。
- 每个组都可以输出。
- BigGroups、MediumGroups、Groups。
- 随机输出表情符号。
- 创建包含表情符号的句子。
- 组结构可以轻松自定义。
演示
- 待办事项
安装
通过 Composer
$ composer require shimabox/pemojine
开发
$ git clone https://github.com/shimabox/pemojine
$ cd pemojine
$ composer install
使用
<?php require_once 'vendor/autoload.php'; use SMB\Pemojine\Container as PemojineContainer; use SMB\Pemojine\Structure\Vendor; use SMB\Pemojine\Helper\Sentence; // Create an instance of Google using a Container. $pemojine = PemojineContainer::make(new Vendor\Google()); // Get the configured vendor name. echo $pemojine->getVendorName(); // => Google /* |---------------------------------------------------------------------- | Get all BigGroups. |---------------------------------------------------------------------- */ $allBigGroups = $pemojine->getAllBigGroups(); // $allBigGroups is an array with a big group name in the key and an object(BigGroup) in the value. foreach ($allBigGroups as $bigGroupName => $bigGroup) { echo 'BigGroupName::' . $bigGroupName/* or $bigGroup->getName() */; foreach ($bigGroup as $mediumGroupName => $mediumGroup) { echo 'MediumGroupName::' . $mediumGroupName/* or $mediumGroup->getName() */; foreach ($mediumGroup as $groupName => $group) { // Output shortName. echo 'Group::' . $groupName/* or $group->getName(), $group->getShortName() */; // Output Emoji. echo $group->output(); // Output HTML reference character. e.g) '😀', '🇯🇵' echo htmlspecialchars($group->outputHtml(), ENT_QUOTES, 'UTF-8'); // Get unicode. e.g.) 'U+1F600', 'U+1F1EF U+1F1F5' echo $group->getUnicode(); // Get unicode with removed blank. e.g.) 'U+1F600', 'U+1F1EFU+1F1F5' echo $group->getUnicodeWithRemovedBlank(); // Get UTF8 string. e.g.) '\u{1F600}', '\u{1F1EF} \u{1F1F5}' echo $group->getUtf8String(); // Get UTF8 string with removed blank. e.g.) '\u{1F600}', '\u{1F1EF}\u{1F1F5}' echo $group->getUtf8StringWithRemovedBlank(); // Get aliases of shortName $alias = implode(' ', $group->getAliasesOfName()/* or $group->getAliasesOfShortName() */); echo htmlspecialchars($alias, ENT_QUOTES, 'UTF-8'); } } } /* |---------------------------------------------------------------------- | When selecting randomly from Big Groups. |---------------------------------------------------------------------- */ // Select a BigGroup at random $randomBigGroup = $pemojine->randomFromBigGroup(); echo $randomBigGroup->getName(); // Randomly chosen BigGroupName. // When acquiring a random group from narrowed down. $groupOfBig = $randomBigGroup->getGroupAtRandom(); echo $groupOfBig->getName(); $alias = implode(' ', $groupOfBig->getAliasesOfName()); echo htmlspecialchars($alias, ENT_QUOTES, 'UTF-8'); echo $groupOfBig->output(); echo htmlspecialchars($groupOfBig->outputHtml(), ENT_QUOTES, 'UTF-8'); echo $groupOfBig->getUnicode(); echo $groupOfBig->getUnicodeWithRemovedBlank(); echo $groupOfBig->getUtf8String(); echo $groupOfBig->getUtf8StringWithRemovedBlank(); /* |---------------------------------------------------------------------- | When selecting 'animal-mammal' in Medium Groups. |---------------------------------------------------------------------- */ // Select 'animal-mammal'. $selectedMediumGroup = $pemojine->selectMediumGroup('animal-mammal'); echo $selectedMediumGroup->getVendorName(); // => 'Google' echo $selectedMediumGroup->getName(); // => 'animal-mammal' // $selectedMediumGroup is an iterator with a group name in the key and an object(Group) in the value. foreach ($selectedMediumGroup/* or $selectedMediumGroup->getChildren() */ as $groupName => $group) { echo 'Group::' . $groupName; echo $group->output(); echo htmlspecialchars($group->outputHtml(), ENT_QUOTES, 'UTF-8'); echo $group->getUnicode(); echo $group->getUnicodeWithRemovedBlank(); echo $group->getUtf8String(); echo $group->getUtf8StringWithRemovedBlank(); $alias = implode(' ', $group->getAliasesOfName()); echo htmlspecialchars($alias, ENT_QUOTES, 'UTF-8'); } // When acquiring a random group from narrowed down. $groupOfM = $selectedMediumGroup->getGroupAtRandom(); echo $groupOfM->getName()/* or $groupOfM->getShortName() */; $alias = implode(' ', $groupOfM->getAliasesOfName()/* or $groupOfM->getAliasesOfShortName() */); echo htmlspecialchars($alias, ENT_QUOTES, 'UTF-8'); echo $groupOfM->output(); echo htmlspecialchars($groupOfM->outputHtml(), ENT_QUOTES, 'UTF-8'); echo $groupOfM->getUnicode(); echo $groupOfM->getUnicodeWithRemovedBlank(); echo $groupOfM->getUtf8String(); echo $groupOfM->getUtf8StringWithRemovedBlank(); // In the case of Medium Group, you can find a Big Group of parents. $parent = $pemojine->selectMediumGroup('animal-mammal')->findParentGroup(); // => Parent BigGroup assert($parent->getName() === 'Animals & Nature'); // => true // The following are the same instances. $a = $pemojine->selectBigGroup('Animals & Nature')->selectMediumGroup('animal-mammal'); $b = $pemojine->selectMediumGroup('animal-mammal'); assert($a === $b); // => true // Exists? assert($pemojine->hasMediumGroup('animal-bird') === true); assert($pemojine->hasMediumGroup('piyo') === false); /* |---------------------------------------------------------------------- | Create sentences including Emoji. |---------------------------------------------------------------------- */ // Get an Outputter instance. $outputter = $pemojine->getOutputter(); // Other ways to get instances. /* // Create an EmojiTable instance of Apple. $emojiTable = new \SMB\Pemojine\Structure\Vendor\Apple\EmojiTable(); // Create an Outputter instance. $outputter = new \SMB\Pemojine\Outputter\Outputter($emojiTable); */ // Create a Sentence instance. $sentence = new Sentence($outputter); // Sentence 1 $output_1 = $sentence->create('Hello U+1F1EFU+1F1F5 \u{1F601}:grin:|beaming face with smiling eyes|!!'); assert('Hello 🇯🇵 😁😁😁!!' === $output_1); echo $output_1; // Sentence 2 $output_2 = $sentence->create('foo ::heart:: :bar:cinema:baz:'); assert('foo :❤: :bar🎦baz:' === $output_2); echo $output_2; // Sentence 3 $output_3 = $sentence->create('foo ||grinning face with big eyes|| |bar|face with tears of joy|baz|'); assert('foo |😃| |bar😂baz|' === $output_3); echo $output_3;
自定义
如何添加新的表情符号组
在下面创建三个文件。
- 实现
SMB\Pemojine\Structure\Interfaces\Configurable
的文件。 - 实现
SMB\Pemojine\Structure\Interfaces\Gettable
的文件。 - 实现
SMB\Pemojine\Structure\Interfaces\EmojiTable\Gettable
的文件。
@see example/Custom
示例(仅开发人员)
基本
- example/getAll.php
$ php example/getAll.php
- example/selectAtRandom.php
$ php example/selectAtRandom.php
- example/selectGroup.php
$ php example/selectGroup.php
- example/outputter.php
$ php example/outputter.php
助手
- example/helper_converter.php
$ php example/helper_converter.php
- example/helper_emoji.php
$ php example/helper_emoji.php
- example/helper_emojiCounter.php
$ php example/helper_emojiCounter.php
- example/helper_sentence.php
$ php example/helper_sentence.php
自定义
- example/Custom/example.php
$ php example/Custom/example.php
重新生成数据(仅开发人员)
$ php scraping/src/generator.php
从这里抓取数据。
(结果在 scraping/cache/full-emoji-list
、scraping/cache/full-emoji-modifiers
中缓存 1 小时)
scraping/output/Config
、scraping/output/Structure
由于以下文件已输出,请将它们分别放置在 src/Config
、src/Structure
下。
同步的 Shell。
- 适用于 Mac(Linux)。
$ sh scraping/sync.sh
- 适用于 Windows。
$ cd scraping/
$ win_sync.bat
测试
$ composer test # or vendor/bin/phpunit
- 覆盖率
$ composer coverage # or vendor/bin/phpunit --coverage-text --coverage-html ./report/
待办事项
- 制作一个演示网站。
- 组成包含表情符号的句子的正则表达式很粗略。
- pemojine/Sentence.php at master · shimabox/pemojine.
- 我试图处理嵌套。
- 但它与复杂的嵌套不对应。
- 表情符号映射(数组)太丰富了,所以我需要考虑这一点。
- 对于
Vendor\JoyPixels
,我认为与 emoji-toolkit/lib/php at master · joypixels/emoji-toolkit 结合是正确的。 - 在实际机器上确认。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。