Open
Conversation
After closing the span in `html_cb_text()`, reset `state->old` so the next text segment correctly detects it needs styling. closes r-lib#752 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ansi_html() when same same style repeatedansi_html() when same style repeated
Author
|
Author
test_that("nested styles: add then remove one while another remains active", {
expect_equal(
ansi_html("\033[1m\033[4mbold underline\033[24m just bold\033[22m"),
"<span class=\"ansi ansi-bold ansi-underline\">bold underline</span><span class=\"ansi ansi-bold\"> just bold</span>"
)
})
test_that("nested styles: foreground and background colors", {
expect_equal(
ansi_html("\033[31mred\033[42mred on green\033[49m red only\033[39m"),
"<span class=\"ansi ansi-color-1\">red</span><span class=\"ansi ansi-color-1 ansi-bg-color-2\">red on green</span><span class=\"ansi ansi-color-1\"> red only</span>"
)
})
test_that("consecutive strings with the same nested style pasted together", {
x <- "\033[1m\033[31mred bold\033[39m\033[22m\033[1m\033[31mred bold\033[39m\033[22m"
expect_equal(
ansi_html(x),
"<span class=\"ansi ansi-bold ansi-color-1\">red bold</span><span class=\"ansi ansi-bold ansi-color-1\">red bold</span>"
)
expect_equal(
ansi_html(ansi_simplify(x)),
"<span class=\"ansi ansi-bold ansi-color-1\">red boldred bold</span>"
)
})
test_that("consecutive strings with the same inner style within an outer style", {
x <- "\033[1m\033[31mR\033[39m\033[31mR\033[39m\033[22m"
expect_equal(
ansi_html(x),
"<span class=\"ansi ansi-bold ansi-color-1\">R</span><span class=\"ansi ansi-bold ansi-color-1\">R</span>"
)
expect_equal(
ansi_html(ansi_simplify(x)),
"<span class=\"ansi ansi-bold ansi-color-1\">RR</span>"
)
}) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
After closing the span in
html_cb_text(), resetstate->oldso the next text segment correctly detects it needs styling.I manually wrote the unit tests, Claude Code proposed the fix but I manually moved their fix from the end of
html_cb_text()to instead be insideclic__html_end()which I felt was a more natural location. Unsure if this is the "right" way to reset state...closes #752