🛠️ Improve MarkdownParser

* Improved Markdown parsing and cleaning
This commit is contained in:
Acclorite 2024-10-22 19:30:50 +03:00
parent aabf8ae737
commit fb8c84495d
5 changed files with 29 additions and 13 deletions

View file

@ -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.model.ChapterWithText
import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.Resource
import ua.acclorite.book_story.domain.util.UIText 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 java.io.File
import javax.inject.Inject import javax.inject.Inject
import javax.xml.parsers.DocumentBuilderFactory import javax.xml.parsers.DocumentBuilderFactory
@ -119,8 +119,11 @@ class Fb2TextParser @Inject constructor() : TextParser {
return Resource.Error(UIText.StringResource(R.string.error_file_empty)) return Resource.Error(UIText.StringResource(R.string.error_file_empty))
} }
val title = formattedLines.first().clearMarkdown() val title = formattedLines.first().clearAllMarkdown().let { title ->
formattedLines.removeAt(0) formattedLines.removeAt(0)
if (title.isBlank()) return@let "Chapter 1"
return@let title
}
Log.i(FB2_TAG, "Successfully finished FB2 parsing.") Log.i(FB2_TAG, "Successfully finished FB2 parsing.")
Resource.Success( Resource.Success(

View file

@ -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.model.ChapterWithText
import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.Resource
import ua.acclorite.book_story.domain.util.UIText 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 java.io.File
import javax.inject.Inject import javax.inject.Inject
@ -35,8 +35,11 @@ class HtmlTextParser @Inject constructor(
return Resource.Error(UIText.StringResource(R.string.error_file_empty)) return Resource.Error(UIText.StringResource(R.string.error_file_empty))
} }
val title = lines.first().clearMarkdown() val title = lines.first().clearAllMarkdown().let { title ->
lines.removeAt(0) lines.removeAt(0)
if (title.isBlank()) return@let "Chapter 1"
return@let title
}
Log.i(HTML_TAG, "Successfully finished HTML parsing.") Log.i(HTML_TAG, "Successfully finished HTML parsing.")
Resource.Success( Resource.Success(

View file

@ -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.model.ChapterWithText
import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.Resource
import ua.acclorite.book_story.domain.util.UIText 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 java.io.File
import javax.inject.Inject import javax.inject.Inject
@ -121,8 +121,11 @@ class PdfTextParser @Inject constructor(
return Resource.Error(UIText.StringResource(R.string.error_file_empty)) return Resource.Error(UIText.StringResource(R.string.error_file_empty))
} }
val title = strings.first().clearMarkdown() val title = strings.first().clearAllMarkdown().let { title ->
strings.removeAt(0) strings.removeAt(0)
if (title.isBlank()) return@let "Chapter 1"
return@let title
}
Log.i(PDF_TAG, "Successfully finished PDF parsing.") Log.i(PDF_TAG, "Successfully finished PDF parsing.")
Resource.Success( Resource.Success(

View file

@ -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.model.ChapterWithText
import ua.acclorite.book_story.domain.util.Resource import ua.acclorite.book_story.domain.util.Resource
import ua.acclorite.book_story.domain.util.UIText 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.BufferedReader
import java.io.File import java.io.File
import java.io.FileReader import java.io.FileReader
@ -42,8 +42,11 @@ class TxtTextParser @Inject constructor() : TextParser {
return Resource.Error(UIText.StringResource(R.string.error_file_empty)) return Resource.Error(UIText.StringResource(R.string.error_file_empty))
} }
val title = lines.first().clearMarkdown() val title = lines.first().clearAllMarkdown().let { title ->
lines.removeAt(0) lines.removeAt(0)
if (title.isBlank()) return@let "Chapter 1"
return@let title
}
Log.i(TXT_TAG, "Successfully finished TXT parsing.") Log.i(TXT_TAG, "Successfully finished TXT parsing.")
Resource.Success( Resource.Success(

View file

@ -24,5 +24,9 @@ fun Float.coerceAndPreventNaN(): Float {
} }
fun String.clearMarkdown(): String { fun String.clearMarkdown(): String {
return replace(Regex("_|\\*\\*"), "") return replace(Regex("(_+)|(\\*+)"), "")
}
fun String.clearAllMarkdown(): String {
return replace(Regex("(_+)|(\\*+)|(#+)"), "").trim()
} }