fix: more robust txt parser, closes #1042 (#1043)

* refactor: reuse BookCover component in BookDetail dialog

* fix: more robust txt parser, closes #1042
This commit is contained in:
Huang Xin
2025-05-06 12:28:25 +08:00
committed by GitHub
parent 4094fd86ff
commit 9669f1272d
5 changed files with 9 additions and 29 deletions
@@ -9,7 +9,7 @@ import { useResponsiveSize } from '@/hooks/useResponsiveSize';
import { LibraryViewModeType } from '@/types/settings';
import { formatAuthors } from '@/utils/book';
import ReadingProgress from './ReadingProgress';
import BookCover from './BookCover';
import BookCover from '@/components/BookCover';
interface BookItemProps {
mode: LibraryViewModeType;
@@ -2,7 +2,7 @@ import clsx from 'clsx';
import { MdCheckCircle, MdCheckCircleOutline } from 'react-icons/md';
import { useEnv } from '@/context/EnvContext';
import { BooksGroup } from '@/types/book';
import BookCover from './BookCover';
import BookCover from '@/components/BookCover';
interface GroupItemProps {
group: BooksGroup;
@@ -12,7 +12,7 @@ interface BookCoverProps {
const BookCover: React.FC<BookCoverProps> = ({ mode = 'grid', book, isPreview }) => {
return (
<div className='relative flex h-full w-full'>
<div className={clsx('relative flex h-full w-full')}>
<Image
src={book.coverImageUrl!}
alt={book.title}
@@ -1,6 +1,5 @@
import clsx from 'clsx';
import React, { useEffect, useState } from 'react';
import Image from 'next/image';
import { MdDelete, MdCloudDownload, MdCloudUpload } from 'react-icons/md';
import { Book } from '@/types/book';
@@ -17,8 +16,9 @@ import {
formatTitle,
} from '@/utils/book';
import Alert from '@/components/Alert';
import Spinner from './Spinner';
import Dialog from './Dialog';
import Spinner from './Spinner';
import BookCover from './BookCover';
interface BookDetailModalProps {
book: Book;
@@ -113,29 +113,9 @@ const BookDetailModal = ({
<div className='flex w-full select-text items-center justify-center'>
<div className='relative w-full rounded-lg'>
<div className='mb-6 me-4 flex h-32 items-start'>
<div className='book-cover relative mr-10 aspect-[28/41] h-32 items-end shadow-lg'>
<Image
src={book.coverImageUrl!}
alt={formatTitle(book.title)}
fill={true}
className='w-10 object-cover'
onError={(e) => {
(e.target as HTMLImageElement).style.display = 'none';
(e.target as HTMLImageElement).nextElementSibling?.classList.remove(
'invisible',
);
}}
/>
<div
className={clsx(
'invisible absolute inset-0 flex items-center justify-center p-1',
'text-neutral-content rounded-none text-center font-serif text-base font-medium',
)}
>
{formatTitle(book.title)}
</div>
<div className='me-10 aspect-[28/41] h-32 shadow-lg'>
<BookCover mode='list' book={book} />
</div>
<div className='title-author flex h-32 flex-col justify-between'>
<div>
<p className='text-base-content mb-2 line-clamp-2 break-all text-lg font-bold'>
+2 -2
View File
@@ -102,8 +102,8 @@ export class TxtToEpubConverter {
String.raw`(?:^|\n|\s)` +
'(' +
[
String.raw`第[一二三四五六七八九十0-9][一二三四五六七八九十百千万0-9]*(?:[章卷节回讲篇封])(?:[:、  \(\)0-9]*[^\n-]{0,24})(?!\S)`,
String.raw`(?:^|\n|\s|《[^》]+》)[一二三四五六七八九十][一二三四五六七八九十百千万]*(?:[::  ][^\n-]{0,24})(?!\S)`,
String.raw`第[零〇一二三四五六七八九十0-9][零〇一二三四五六七八九十百千万0-9]*(?:[章卷节回讲篇封])(?:[:、  \(\)0-9]*[^\n-]{0,24})(?!\S)`,
String.raw`(?:^|\n|\s|《[^》]+》)[一二三四五六七八九十][零〇一二三四五六七八九十百千万]*(?:[::  ][^\n-]{0,24})(?!\S)`,
String.raw`(?:楔子|前言|引言|序言|序章|总论|概论)(?:[:  ][^\n-]{0,24})?(?!\S)`,
].join('|') +
')',