diff --git a/src/Formats/EbookModule.php b/src/Formats/EbookModule.php index 844d3b6..2836c06 100644 --- a/src/Formats/EbookModule.php +++ b/src/Formats/EbookModule.php @@ -61,6 +61,20 @@ protected function sanitizeHtml(?string $html): ?string return $html; } + protected function toHtml(?string $html): ?string + { + $html = $this->sanitizeHtml($html); + if (! $html) { + return null; + } + + if ($html === strip_tags($html)) { + return "
$html
"; + } + + return $html; + } + /** * Clean string, remove tabs, new lines, carriage returns, and multiple spaces. */ diff --git a/src/Formats/Epub/EpubMetadata.php b/src/Formats/Epub/EpubMetadata.php index 44c00c6..abcd915 100644 --- a/src/Formats/Epub/EpubMetadata.php +++ b/src/Formats/Epub/EpubMetadata.php @@ -76,7 +76,7 @@ public function toEbook(): Ebook $authors = array_values($this->opf->getDcCreators()); $this->ebook->setAuthors($authors); $this->ebook->setDescription($this->htmlToString($this->opf->getDcDescription())); - $this->ebook->setDescriptionHtml($this->sanitizeHtml($this->opf->getDcDescription())); + $this->ebook->setDescriptionHtml($this->toHtml($this->opf->getDcDescription())); $this->ebook->setCopyright(! empty($this->opf->getDcRights()) ? implode(', ', $this->opf->getDcRights()) : null); $this->ebook->setPublisher($this->opf->getDcPublisher()); $this->ebook->setIdentifiers($this->opf->getDcIdentifiers()); @@ -114,6 +114,10 @@ public function toEbook(): Ebook 'rating' => $rating, ]); + if ($this->ebook->getSeries() && ! $this->ebook->getVolume()) { + $this->ebook->setVolume(0); + } + return $this->ebook; } diff --git a/tests/EpubTest.php b/tests/EpubTest.php index 5924b51..44b6aa7 100644 --- a/tests/EpubTest.php +++ b/tests/EpubTest.php @@ -184,3 +184,15 @@ expect($ebook->getDescription())->toBe("1re vague : Extinction des feux. 2e vague : Déferlante. 3e vague : Pandémie. 4e vague : Silence. À l'aube de la 5e vague, sur une autoroute désertée, Cassie tente de Leur échapper... Eux, ces êtres qui ressemblent trait pour trait aux humains et qui écument la campagne, exécutant quiconque a le malheur de croiser Leur chemin. Eux, qui ont balayé les dernières poches de résistance et dispersé les quelques rescapés. Pour Cassie, rester en vie signifie rester seule. Elle se raccroche à cette règle jusqu'à ce qu'elle rencontre Evan Walker. Mystérieux et envoûtant, ce garçon pourrait bien être son ultime espoir de sauver son petit frère. Du moins si Evan est bien celui qu'il prétend... Ils connaissent notre manière de penser. Ils savent commentr nous exterminer. Ils nous ont enlevé toute raison de vivre. Ils viennent nous arracher ce pour quoi nous sommes prêts à mourir."); expect($ebook->getDescriptionHtml())->toBe("

1re vague : Extinction des feux.
2e vague : Déferlante.
3e vague : Pandémie.
4e vague : Silence.

À l'aube de la 5e vague, sur une autoroute désertée, Cassie tente de Leur échapper... Eux, ces êtres qui ressemblent trait pour trait aux humains et qui écument la campagne, exécutant quiconque a le malheur de croiser Leur chemin. Eux, qui ont balayé les dernières poches de résistance et dispersé les quelques rescapés.

Pour Cassie, rester en vie signifie rester seule. Elle se raccroche à cette règle jusqu'à ce qu'elle rencontre Evan Walker. Mystérieux et envoûtant, ce garçon pourrait bien être son ultime espoir de sauver son petit frère. Du moins si Evan est bien celui qu'il prétend...

Ils connaissent notre manière de penser.

Ils savent commentr nous exterminer.

Ils nous ont enlevé toute raison de vivre.

Ils viennent nous arracher ce pour quoi nous sommes prêts à mourir.

"); })->with([EPUB_DESCRIPTION]); + +it('can parse epub with series but empty volume', function (string $path) { + $ebook = Ebook::read($path); + + expect($ebook->getVolume())->toBe(0); +})->with([EPUB_VOL0]); + +it('can parse epub with bad summary', function (string $path) { + $ebook = Ebook::read($path); + + expect($ebook->getDescription())->not()->toContain("\n"); +})->with([EPUB_EPEE_ET_MORT]); diff --git a/tests/Pest.php b/tests/Pest.php index 9e04f78..3f3f0c6 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -42,6 +42,8 @@ define('EPUB_NO_OPF', __DIR__.'/media/epub-no-opf.epub'); define('EPUB_BAD_FILE', __DIR__.'/media/epub-bad-file.epub'); define('EPUB_DESCRIPTION', __DIR__.'/media/epub-description.epub'); +define('EPUB_VOL0', __DIR__.'/media/epub-vol-0.epub'); +define('EPUB_EPEE_ET_MORT', __DIR__.'/media/epub-epee-et-mort.epub'); define('STANDARD_EPUB', __DIR__.'/media/alice-lewis-carroll-1.epub'); define('STANDARD_AZW3', __DIR__.'/media/alice-lewis-carroll-2.azw3'); diff --git a/tests/media/epub-epee-et-mort.epub b/tests/media/epub-epee-et-mort.epub new file mode 100644 index 0000000..a71417c Binary files /dev/null and b/tests/media/epub-epee-et-mort.epub differ diff --git a/tests/media/epub-vol-0.epub b/tests/media/epub-vol-0.epub new file mode 100644 index 0000000..1f343b7 Binary files /dev/null and b/tests/media/epub-vol-0.epub differ