From ce2c51e163b563edb51695b34e07aaeb353a7180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Sun, 28 Jan 2024 08:52:23 +0100 Subject: [PATCH 1/5] add docs --- src/Tools/MetaTitle.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Tools/MetaTitle.php b/src/Tools/MetaTitle.php index 44aea56..dde7562 100644 --- a/src/Tools/MetaTitle.php +++ b/src/Tools/MetaTitle.php @@ -5,6 +5,14 @@ use Kiwilan\Ebook\Ebook; use Transliterator; +/** + * Convert eBook title and metadata to a slug. + * + * @method string getSlug() Get slug of book title with addional metadata, like `lord-of-the-rings-01-fellowship-of-the-ring-j-r-r-tolkien-1954-epub-en`. + * @method string getSlugSimple() Get simple slug of book title, like `the-fellowship-of-the-ring`. + * @method string getSeriesSlug() Get slug of serie title, like `lord-of-the-rings-j-r-r-tolkien-1954-epub-en`. + * @method string getSeriesSlugSimple() Get simple slug of serie title, like `the-lord-of-the-rings`. + */ class MetaTitle { /** @var string[][] */ @@ -100,6 +108,7 @@ private function parse(Ebook $ebook): static * - Add serie title, here `Lord of the Rings` * - Add volume, here `1` * - Add author name, here `J. R. R. Tolkien` + * - Add year, here `1954` * - Add extension, here `epub` * - Add language, here `en` */ @@ -119,10 +128,11 @@ public function getSlugSimple(): string /** * Get slug of serie title, like `lord-of-the-rings-j-r-r-tolkien-1954-epub-en`. * - * - Remove determiners - * - Add author name - * - Add extension - * - Add language + * - Remove determiners, here `The` + * - Add author name, here `J. R. R. Tolkien` + * - Add year, here `1954` + * - Add extension, here `epub` + * - Add language, here `en` */ public function getSeriesSlug(): ?string { From 1b9b5375963b7355b9196b3f2b929122fa4fa6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Sun, 28 Jan 2024 08:52:44 +0100 Subject: [PATCH 2/5] Add constructor and make method to MetaTitle class --- src/Tools/MetaTitle.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Tools/MetaTitle.php b/src/Tools/MetaTitle.php index dde7562..93774e9 100644 --- a/src/Tools/MetaTitle.php +++ b/src/Tools/MetaTitle.php @@ -26,6 +26,11 @@ protected function __construct( ) { } + /** + * Create a new MetaTitle instance. + * + * @param string[][] $determiners List of determiners by language. + */ public static function make( Ebook $ebook, array $determiners = [ From 7ea3062fa7debf0d194ce635a34eb079126b9b37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Sun, 28 Jan 2024 09:00:24 +0100 Subject: [PATCH 3/5] Refactor MetaTitle class to use constants for determiners --- src/Tools/MetaTitle.php | 295 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 270 insertions(+), 25 deletions(-) diff --git a/src/Tools/MetaTitle.php b/src/Tools/MetaTitle.php index 93774e9..7713ae2 100644 --- a/src/Tools/MetaTitle.php +++ b/src/Tools/MetaTitle.php @@ -15,8 +15,273 @@ */ class MetaTitle { - /** @var string[][] */ - protected array $determiners = []; + /** + * @var string[][] + */ + public const DETERMINERS = [ + 'en' => [ + 'the', + 'a', + 'an', + 'some', + 'any', + 'this', + 'that', + 'my', + 'your', + 'his', + 'her', + 'its', + 'our', + 'their', + 'all', + 'both', + 'each', + ], + 'fr' => [ + 'les', + 'l\'', + 'le', + 'la', + 'du', + 'de', + 'une', + 'au', + 'des', + 'ce', + 'cet', + 'cette', + 'ces', + 'mon', + 'ton', + 'son', + 'notre', + 'votre', + 'leur', + 'tous', + 'toutes', + 'chaque', + ], + 'es' => [ + 'el', + 'la', + 'los', + 'las', + 'un', + 'una', + 'este', + 'esta', + 'estos', + 'estas', + 'mi', + 'tu', + 'su', + 'nuestro', + 'vuestro', + 'sus', + 'mío', + 'tuyo', + 'suyo', + 'algunos', + 'algunas', + 'todo', + 'toda', + 'todos', + 'todas', + 'otro', + 'otra', + ], + 'it' => [ + 'il', + 'la', + 'i', + 'gli', + 'le', + 'un', + 'uno', + 'una', + 'alcuni', + 'alcune', + 'questo', + 'questa', + 'questi', + 'queste', + 'quel', + 'quella', + 'quelli', + 'quelle', + 'mia', + 'tua', + 'sua', + 'nostra', + 'vostra', + 'loro', + 'ogni', + 'tutti', + 'tutte', + 'alcuni', + 'alcune', + 'qualche', + ], + 'de' => [ + 'der', + 'die', + 'das', + 'ein', + 'eine', + 'mein', + 'dein', + 'sein', + 'ihr', + 'unser', + 'euer', + 'ihr', + 'jeder', + 'jede', + 'jedes', + 'alle', + 'viel', + 'einige', + 'ein paar', + 'manche', + 'welcher', + 'welche', + 'welches', + ], + 'pl' => [ + 'ten', + 'ta', + 'to', + 'te', + 'tamten', + 'tamta', + 'tamto', + 'jaki', + 'jaka', + 'jakie', + 'każdy', + 'każda', + 'każde', + 'wszystki', + 'wszystko', + 'wszyscy', + 'wszystkie', + 'który', + 'która', + 'które', + 'którzy', + 'której', + 'którego', + 'którym', + ], + 'ru' => [ + 'этот', + 'эта', + 'это', + 'эти', + 'тот', + 'та', + 'то', + 'те', + 'весь', + 'вся', + 'всё', + 'все', + 'каждый', + 'каждая', + 'каждое', + 'каждые', + 'мой', + 'моя', + 'моё', + 'мои', + 'твой', + 'твоя', + 'твоё', + 'твои', + 'свой', + 'своя', + 'своё', + 'свои', + 'наш', + 'наша', + 'наше', + 'наши', + 'ваш', + 'ваша', + 'ваше', + 'ваши', + 'их', + 'их', + 'некоторые', + 'всякий', + 'любой', + 'каждый', + ], + 'zh' => [ + '这', + '那', + '一个', + '这些', + '那些', + ], + 'ja' => [ + 'これ', + 'それ', + 'あれ', + 'この', + 'その', + 'あの', + ], + 'ko' => [ + '이', + '그', + '저', + '이것', + '그것', + '저것', + ], + 'ar' => [ + 'هذا', + 'هذه', + 'ذلك', + 'تلك', + 'هؤلاء', + 'تلكم', + ], + 'pt' => [ + 'o', + 'a', + 'os', + 'as', + 'um', + 'uma', + ], + 'nl' => [ + 'de', + 'het', + 'een', + 'deze', + 'dit', + 'die', + ], + 'sv' => [ + 'den', + 'det', + 'en', + 'ett', + 'dessa', + 'dessa', + ], + 'tr' => [ + 'bu', + 'şu', + 'o', + 'bir', + 'bu', + 'şu', + ], + ]; protected function __construct( protected ?string $slug = null, @@ -28,35 +293,15 @@ protected function __construct( /** * Create a new MetaTitle instance. - * - * @param string[][] $determiners List of determiners by language. */ - public static function make( - Ebook $ebook, - array $determiners = [ - 'en' => [ - 'the ', - 'a ', - ], - 'fr' => [ - 'les ', - "l'", - 'le ', - 'la ', - "d'un", - "d'", - 'une ', - 'au ', - ], - ], - ): ?self { + public static function make(Ebook $ebook): ?self + { if (! $ebook->getTitle()) { return null; } $self = new self(); - $self->determiners = $determiners; $self->parse($ebook); return $self; @@ -214,7 +459,7 @@ private function removeDeterminers(?string $string, ?string $language): ?string return null; } - $articles = $this->determiners; + $articles = MetaTitle::DETERMINERS; $articlesLang = $articles['en']; From 3962649bf8aca5eded4b1f5634595c81209aff75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Sun, 28 Jan 2024 09:01:06 +0100 Subject: [PATCH 4/5] v2.3.3 Refactor determiners for `MetaTitle`. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index fbedaa2..6cb2dbd 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "kiwilan/php-ebook", "description": "PHP package to read metadata and extract covers from eBooks, comics and audiobooks.", - "version": "2.3.2", + "version": "2.3.3", "keywords": [ "php", "ebook", From 1b30bba62c118abcd657f1bc4ba2aeccc4cc19ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ewilan=20Rivi=C3=A8re?= Date: Sun, 28 Jan 2024 09:05:33 +0100 Subject: [PATCH 5/5] fix determiners --- src/Tools/MetaTitle.php | 464 ++++++++++++++++++++-------------------- 1 file changed, 232 insertions(+), 232 deletions(-) diff --git a/src/Tools/MetaTitle.php b/src/Tools/MetaTitle.php index 7713ae2..438aba2 100644 --- a/src/Tools/MetaTitle.php +++ b/src/Tools/MetaTitle.php @@ -20,266 +20,266 @@ class MetaTitle */ public const DETERMINERS = [ 'en' => [ - 'the', - 'a', - 'an', - 'some', - 'any', - 'this', - 'that', - 'my', - 'your', - 'his', - 'her', - 'its', - 'our', - 'their', - 'all', - 'both', - 'each', + 'the ', + 'a ', + 'an ', + 'some ', + 'any ', + 'this ', + 'that ', + 'my ', + 'your ', + 'his ', + 'her ', + 'its ', + 'our ', + 'their ', + 'all ', + 'both ', + 'each ', ], 'fr' => [ - 'les', - 'l\'', - 'le', - 'la', - 'du', - 'de', - 'une', - 'au', - 'des', - 'ce', - 'cet', - 'cette', - 'ces', - 'mon', - 'ton', - 'son', - 'notre', - 'votre', - 'leur', - 'tous', - 'toutes', - 'chaque', + 'les ', + 'l\' ', + 'le ', + 'la ', + 'du ', + 'de ', + 'une ', + 'au ', + 'des ', + 'ce ', + 'cet ', + 'cette ', + 'ces ', + 'mon ', + 'ton ', + 'son ', + 'notre ', + 'votre ', + 'leur ', + 'tous ', + 'toutes ', + 'chaque ', ], 'es' => [ - 'el', - 'la', - 'los', - 'las', - 'un', - 'una', - 'este', - 'esta', - 'estos', - 'estas', - 'mi', - 'tu', - 'su', - 'nuestro', - 'vuestro', - 'sus', - 'mío', - 'tuyo', - 'suyo', - 'algunos', - 'algunas', - 'todo', - 'toda', - 'todos', - 'todas', - 'otro', - 'otra', + 'el ', + 'la ', + 'los ', + 'las ', + 'un ', + 'una ', + 'este ', + 'esta ', + 'estos ', + 'estas ', + 'mi ', + 'tu ', + 'su ', + 'nuestro ', + 'vuestro ', + 'sus ', + 'mío ', + 'tuyo ', + 'suyo ', + 'algunos ', + 'algunas ', + 'todo ', + 'toda ', + 'todos ', + 'todas ', + 'otro ', + 'otra ', ], 'it' => [ - 'il', - 'la', - 'i', - 'gli', - 'le', - 'un', - 'uno', - 'una', - 'alcuni', - 'alcune', - 'questo', - 'questa', - 'questi', - 'queste', - 'quel', - 'quella', - 'quelli', - 'quelle', - 'mia', - 'tua', - 'sua', - 'nostra', - 'vostra', - 'loro', - 'ogni', - 'tutti', - 'tutte', - 'alcuni', - 'alcune', - 'qualche', + 'il ', + 'la ', + 'i ', + 'gli ', + 'le ', + 'un ', + 'uno ', + 'una ', + 'alcuni ', + 'alcune ', + 'questo ', + 'questa ', + 'questi ', + 'queste ', + 'quel ', + 'quella ', + 'quelli ', + 'quelle ', + 'mia ', + 'tua ', + 'sua ', + 'nostra ', + 'vostra ', + 'loro ', + 'ogni ', + 'tutti ', + 'tutte ', + 'alcuni ', + 'alcune ', + 'qualche ', ], 'de' => [ - 'der', - 'die', - 'das', - 'ein', - 'eine', - 'mein', - 'dein', - 'sein', - 'ihr', - 'unser', - 'euer', - 'ihr', - 'jeder', - 'jede', - 'jedes', - 'alle', - 'viel', - 'einige', - 'ein paar', - 'manche', - 'welcher', - 'welche', - 'welches', + 'der ', + 'die ', + 'das ', + 'ein ', + 'eine ', + 'mein ', + 'dein ', + 'sein ', + 'ihr ', + 'unser ', + 'euer ', + 'ihr ', + 'jeder ', + 'jede ', + 'jedes ', + 'alle ', + 'viel ', + 'einige ', + 'ein paar ', + 'manche ', + 'welcher ', + 'welche ', + 'welches ', ], 'pl' => [ - 'ten', - 'ta', - 'to', - 'te', - 'tamten', - 'tamta', - 'tamto', - 'jaki', - 'jaka', - 'jakie', - 'każdy', - 'każda', - 'każde', - 'wszystki', - 'wszystko', - 'wszyscy', - 'wszystkie', - 'który', - 'która', - 'które', - 'którzy', - 'której', - 'którego', - 'którym', + 'ten ', + 'ta ', + 'to ', + 'te ', + 'tamten ', + 'tamta ', + 'tamto ', + 'jaki ', + 'jaka ', + 'jakie ', + 'każdy ', + 'każda ', + 'każde ', + 'wszystki ', + 'wszystko ', + 'wszyscy ', + 'wszystkie ', + 'który ', + 'która ', + 'które ', + 'którzy ', + 'której ', + 'którego ', + 'którym ', ], 'ru' => [ - 'этот', - 'эта', - 'это', - 'эти', - 'тот', - 'та', - 'то', - 'те', - 'весь', - 'вся', - 'всё', - 'все', - 'каждый', - 'каждая', - 'каждое', - 'каждые', - 'мой', - 'моя', - 'моё', - 'мои', - 'твой', - 'твоя', - 'твоё', - 'твои', - 'свой', - 'своя', - 'своё', - 'свои', - 'наш', - 'наша', - 'наше', - 'наши', - 'ваш', - 'ваша', - 'ваше', - 'ваши', - 'их', - 'их', - 'некоторые', - 'всякий', - 'любой', - 'каждый', + 'этот ', + 'эта ', + 'это ', + 'эти ', + 'тот ', + 'та ', + 'то ', + 'те ', + 'весь ', + 'вся ', + 'всё ', + 'все ', + 'каждый ', + 'каждая ', + 'каждое ', + 'каждые ', + 'мой ', + 'моя ', + 'моё ', + 'мои ', + 'твой ', + 'твоя ', + 'твоё ', + 'твои ', + 'свой ', + 'своя ', + 'своё ', + 'свои ', + 'наш ', + 'наша ', + 'наше ', + 'наши ', + 'ваш ', + 'ваша ', + 'ваше ', + 'ваши ', + 'их ', + 'их ', + 'некоторые ', + 'всякий ', + 'любой ', + 'каждый ', ], 'zh' => [ - '这', - '那', - '一个', - '这些', - '那些', + '这 ', + '那 ', + '一个 ', + '这些 ', + '那些 ', ], 'ja' => [ - 'これ', - 'それ', - 'あれ', - 'この', - 'その', - 'あの', + 'これ ', + 'それ ', + 'あれ ', + 'この ', + 'その ', + 'あの ', ], 'ko' => [ - '이', - '그', - '저', - '이것', - '그것', - '저것', + '이 ', + '그 ', + '저 ', + '이것 ', + '그것 ', + '저것 ', ], 'ar' => [ - 'هذا', - 'هذه', - 'ذلك', - 'تلك', - 'هؤلاء', - 'تلكم', + 'هذا ', + 'هذه ', + 'ذلك ', + 'تلك ', + 'هؤلاء ', + 'تلكم ', ], 'pt' => [ - 'o', - 'a', - 'os', - 'as', - 'um', - 'uma', + 'o ', + 'a ', + 'os ', + 'as ', + 'um ', + 'uma ', ], 'nl' => [ - 'de', - 'het', - 'een', - 'deze', - 'dit', - 'die', + 'de ', + 'het ', + 'een ', + 'deze ', + 'dit ', + 'die ', ], 'sv' => [ - 'den', - 'det', - 'en', - 'ett', - 'dessa', - 'dessa', + 'den ', + 'det ', + 'en ', + 'ett ', + 'dessa ', + 'dessa ', ], 'tr' => [ - 'bu', - 'şu', - 'o', - 'bir', - 'bu', - 'şu', + 'bu ', + 'şu ', + 'o ', + 'bir ', + 'bu ', + 'şu ', ], ];