gt icon indicating copy to clipboard operation
gt copied to clipboard

[quarto] data-qmd content should be escaped at least on double quotes

Open cderv opened this issue 2 years ago • 1 comments

---
title: "Test"
format: html
keep-md: true
---

```{r}
library(gt)
data.frame(A = "Text", B = '<em class="special">Text</em>') |> 
  gt() |> 
  fmt_markdown(B)
```

This will lead to

image

because gt does not handle the double quotes in the column and produce this

<div data-qmd="<em class="special">Text</em>">

This was found in the context of

  • https://github.com/quarto-dev/quarto-cli/discussions/7493

And maybe there should be a fmt_raw_html() function to mark the column content as HTML. I don't think data-qmd attributes is needed in that case.

Though it would be a wrapper or alias for fmt_passthrough() with escaping opt-out

This works fine.

---
title: "Test"
format: html
keep-md: true
---

```{r}
library(gt)
data.frame(A = "Text", B = '<em class="special">Text</em>') |> 
  gt() |> 
  fmt_passthrough(B, escape = FALSE)
```

So this is really about fmt_markdown usage maybe

Requires latest 1.4 pre-release

cderv avatar Nov 10 '23 13:11 cderv

@rich-iannone I do think there is a related issue mentioned in quarto-dev/quarto-cli#3340 with \QuartoMarkdownBase64{ as raw LaTeX in a cell, and gt not escaping it.

Currently fmt_passthrough with escape = FALSE seems to be the solution. Though I am wondering if this should be by cell and not column.

This makes me think about some tricks we using in knitr where using I() is a way to mark some content as not to be touched.

Like

tibble::tribble(
  ~Thing, ~Citation,
  1234, I("\\QuartoMarkdownBase64{QGVxLW1hdGg=}"),
  5678, "\\QuartoMarkdownBase64{QExvdmVsYWNlMTg0Mg==}"
) |>
  gt()

The first one would go through the processing of text but not be escape_latex(), while the second would be escaped.

Anyhow, maybe not really gt-like and a latex() should work with md() or html().

To be discussed. Do you want another issue specific for LaTeX ? Or should would make this one generic about how to pass some raw content in cells ?

cderv avatar Apr 11 '24 20:04 cderv

Note to self: this should be fixed by using base-64 encoding of the text.

rich-iannone avatar May 29 '24 14:05 rich-iannone