From a4a0b51c96c86a6b5376c3f112e832187a221b37 Mon Sep 17 00:00:00 2001 From: Bocute Date: Fri, 6 Mar 2026 15:59:17 -0300 Subject: [PATCH 1/2] fix: ignore comments (%) when parsing BibTeX files --- .../domain/services/BibtexConverterService.kt | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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..8594afa7 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("(?=\\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()) { From fdb729e08944a5478d277f9a3b9a461bac1ef3aa Mon Sep 17 00:00:00 2001 From: Bocute Date: Wed, 11 Mar 2026 10:13:05 -0300 Subject: [PATCH 2/2] fix(bibtex): correctly split entries to avoid breaking on emails --- .../kotlin/br/all/domain/services/BibtexConverterService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8594afa7..4935192f 100644 --- a/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt +++ b/review/src/main/kotlin/br/all/domain/services/BibtexConverterService.kt @@ -65,7 +65,7 @@ class BibtexConverterService(private val studyReviewIdGeneratorService: IdGenera val validStudies = mutableListOf() val invalidEntries = mutableListOf() - cleanedBibtex.split(Regex("(?=\\s*@)")) + cleanedBibtex.split(Regex("(?m)(?=@\\w+\\s*\\{)")) .map { it.trim() } .filter { it.isNotBlank() } .forEach { entry ->