diff --git a/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt b/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt index 99cf0db0..4935192f 100644 --- a/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt +++ b/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt @@ -60,10 +60,12 @@ class BibtexConverterService(private val studyReviewIdGeneratorService: IdGenera } private fun convertMany(bibtex: String): Pair, List> { + val cleanedBibtex = removeBibtexComments(bibtex) + val validStudies = mutableListOf() val invalidEntries = mutableListOf() - bibtex.split(Regex("(?=\\s*@)")) + cleanedBibtex.split(Regex("(?m)(?=@\\w+\\s*\\{)")) .map { it.trim() } .filter { it.isNotBlank() } .forEach { entry -> @@ -111,6 +113,20 @@ class BibtexConverterService(private val studyReviewIdGeneratorService: IdGenera return Study(type, title, year, authors, venue, abstract, keywords, references, doi) } + private fun removeBibtexComments(bibtex: String): String { + return bibtex.lines() + .mapNotNull { line -> + if (line.trimStart().startsWith("%")) { + null + } else { + val commentIndex = line.indexOf('%') + val cleaned = if (commentIndex >= 0) line.take(commentIndex) else line + cleaned.trimEnd().takeIf { it.isNotBlank() } + } + } + .joinToString("\n") + } + private fun parseBibtexFields(bibtexEntry: String): Map { val content = bibtexEntry.substringAfter('{', "").substringBeforeLast('}', "") if (content.isBlank()) {