From fb8c84495dc7c678d997342688260f7162d723e7 Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:30:50 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=A0=EF=B8=8F=20Improve=20MarkdownParse?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Improved Markdown parsing and cleaning --- .../book_story/data/parser/fb2/Fb2TextParser.kt | 9 ++++++--- .../book_story/data/parser/html/HtmlTextParser.kt | 9 ++++++--- .../book_story/data/parser/pdf/PdfTextParser.kt | 9 ++++++--- .../book_story/data/parser/txt/TxtTextParser.kt | 9 ++++++--- .../presentation/core/util/PrimitiveExtensions.kt | 6 +++++- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2TextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2TextParser.kt index 0ce16f31..cb3d409d 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2TextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/fb2/Fb2TextParser.kt @@ -12,7 +12,7 @@ import ua.acclorite.book_story.domain.model.Chapter import ua.acclorite.book_story.domain.model.ChapterWithText import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.UIText -import ua.acclorite.book_story.presentation.core.util.clearMarkdown +import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown import java.io.File import javax.inject.Inject import javax.xml.parsers.DocumentBuilderFactory @@ -119,8 +119,11 @@ class Fb2TextParser @Inject constructor() : TextParser { return Resource.Error(UIText.StringResource(R.string.error_file_empty)) } - val title = formattedLines.first().clearMarkdown() - formattedLines.removeAt(0) + val title = formattedLines.first().clearAllMarkdown().let { title -> + formattedLines.removeAt(0) + if (title.isBlank()) return@let "Chapter 1" + return@let title + } Log.i(FB2_TAG, "Successfully finished FB2 parsing.") Resource.Success( diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt index 3de45970..9d22641b 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/html/HtmlTextParser.kt @@ -10,7 +10,7 @@ import ua.acclorite.book_story.domain.model.Chapter import ua.acclorite.book_story.domain.model.ChapterWithText import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.UIText -import ua.acclorite.book_story.presentation.core.util.clearMarkdown +import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown import java.io.File import javax.inject.Inject @@ -35,8 +35,11 @@ class HtmlTextParser @Inject constructor( return Resource.Error(UIText.StringResource(R.string.error_file_empty)) } - val title = lines.first().clearMarkdown() - lines.removeAt(0) + val title = lines.first().clearAllMarkdown().let { title -> + lines.removeAt(0) + if (title.isBlank()) return@let "Chapter 1" + return@let title + } Log.i(HTML_TAG, "Successfully finished HTML parsing.") Resource.Success( diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt index 15be7b3c..6e4abcec 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/pdf/PdfTextParser.kt @@ -12,7 +12,7 @@ import ua.acclorite.book_story.domain.model.Chapter import ua.acclorite.book_story.domain.model.ChapterWithText import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.UIText -import ua.acclorite.book_story.presentation.core.util.clearMarkdown +import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown import java.io.File import javax.inject.Inject @@ -121,8 +121,11 @@ class PdfTextParser @Inject constructor( return Resource.Error(UIText.StringResource(R.string.error_file_empty)) } - val title = strings.first().clearMarkdown() - strings.removeAt(0) + val title = strings.first().clearAllMarkdown().let { title -> + strings.removeAt(0) + if (title.isBlank()) return@let "Chapter 1" + return@let title + } Log.i(PDF_TAG, "Successfully finished PDF parsing.") Resource.Success( diff --git a/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt index e4a5569e..acb11db4 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/parser/txt/TxtTextParser.kt @@ -10,7 +10,7 @@ import ua.acclorite.book_story.domain.model.Chapter import ua.acclorite.book_story.domain.model.ChapterWithText import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.UIText -import ua.acclorite.book_story.presentation.core.util.clearMarkdown +import ua.acclorite.book_story.presentation.core.util.clearAllMarkdown import java.io.BufferedReader import java.io.File import java.io.FileReader @@ -42,8 +42,11 @@ class TxtTextParser @Inject constructor() : TextParser { return Resource.Error(UIText.StringResource(R.string.error_file_empty)) } - val title = lines.first().clearMarkdown() - lines.removeAt(0) + val title = lines.first().clearAllMarkdown().let { title -> + lines.removeAt(0) + if (title.isBlank()) return@let "Chapter 1" + return@let title + } Log.i(TXT_TAG, "Successfully finished TXT parsing.") Resource.Success( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt index 241f3190..be2ce46d 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/util/PrimitiveExtensions.kt @@ -24,5 +24,9 @@ fun Float.coerceAndPreventNaN(): Float { } fun String.clearMarkdown(): String { - return replace(Regex("_|\\*\\*"), "") + return replace(Regex("(_+)|(\\*+)"), "") +} + +fun String.clearAllMarkdown(): String { + return replace(Regex("(_+)|(\\*+)|(#+)"), "").trim() } \ No newline at end of file