diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/html.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/html.kt index bfc668681d..dec55ef272 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/html.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/html.kt @@ -275,7 +275,7 @@ private fun Any?.toDataFrameLikeOrNull(): DataFrameLike? = when (this) { is AnyFrame -> { object : DataFrameLike { - override fun configuration(default: DisplayConfiguration) = default + override fun configuration(default: DisplayConfiguration) = default.copy(cellFormatter = null) override fun df(): AnyFrame = this@toDataFrameLikeOrNull } diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/format.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/format.kt index e3d4d8b795..a1c1e47cec 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/format.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/format.kt @@ -5,6 +5,7 @@ import io.kotest.matchers.shouldNotBe import org.jetbrains.kotlinx.dataframe.api.FormattingDsl.blue import org.jetbrains.kotlinx.dataframe.api.FormattingDsl.red import org.jetbrains.kotlinx.dataframe.api.FormattingDsl.rgb +import org.jetbrains.kotlinx.dataframe.io.DataFrameHtmlData import org.jetbrains.kotlinx.dataframe.io.DisplayConfiguration import org.jetbrains.kotlinx.dataframe.samples.api.TestBase import org.jetbrains.kotlinx.dataframe.samples.api.age @@ -312,4 +313,29 @@ class FormatTests : TestBase() { html.split("background-color:#00ff00").size - 1 shouldBe 5 // Only non-null weight values get formatted formatted::class.simpleName shouldBe "FormattedFrame" } + + // Issue #982 + @Suppress("ktlint:standard:argument-list-wrapping") + @Test + fun `formatting a column shouldn't affect nested columns with the same name`() { + val df = dataFrameOf("firstName", "lastName", "age", "city", "weight", "isHappy")( + "Alice", "Cooper", 15, "London", 54, true, + "Bob", "Dylan", 45, "Dubai", 87, true, + "Charlie", "Daniels", 20, "Moscow", null, false, + "Charlie", "Chaplin", 40, "Milan", null, true, + "Bob", "Marley", 30, "Tokyo", 68, true, + "Alice", "Wolf", 20, null, 55, false, + "Charlie", "Byrd", 30, "Moscow", 90, true, + ).group("firstName", "lastName").into("name") + .groupBy("city").toDataFrame() + .add("cityCopy") { "city"() } + .group("city").into("cityGroup") + .rename("cityCopy").into("city") + + val formatted = df.format("city").with { bold and italic and textColor(green) } + val html = formatted.toHtml().toString() + + html.split("color:#00ff00").size - 1 shouldBe 12 + html.split("font-style:italic").size - 1 shouldBe 6 + } }