lmd: list-table and definition-list divs built from AST nodes in a cell are not desugared
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 15/100
Direzione di ricerca
Start with transform_divs, validate_list_table_div and is_valid_definition_list_div in pampa/src/pandoc/treesitter_utils/postprocess.rs, then find where lmd cell results are spliced in at the lmd-execute stage. Linked PR #850 is already open against this, so read it before touching code. Done means sections 2 and 4 of the repro render <table> and <dl> instead of nested <div> and <ul>, with sections 1 and 3 unchanged.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
A .list-table or .definition-list div that an {lmd} cell builds from AST nodes (pandoc.Div + pandoc.BulletList) is never desugared into a Table / DefinitionList. It reaches the HTML writer as a div containing nested bullet lists. The same markup written literally in the document body converts fine.
The desugaring lives in the reader's postprocess step (pampa/src/pandoc/treesitter_utils/postprocess.rs, transform_divs / validate_list_table_div / is_valid_definition_list_div), so it only ever sees blocks that came out of the qmd reader. Blocks that lmd cells return at lmd-execute (which runs after the engine, before ast-transforms) are spliced in without that step. The natural fix seems to be running the same div transform over each cell's returned blocks (or as a stage right after lmd-execute); transform_divs is already public and used from pampa's CLI.
This matters for the use lmd was built for: a Lua function that builds a table from data (porting an Astro/Hugo "ConfigTable"-style component) has no clean way to produce a table. Building a pandoc.Table by hand is far more verbose than the list-table div; pandoc.read of generated markdown works but defeats the point of building nodes.
Repro
repro.qmd:
---
title: list-table and definition-list divs from lmd
---
## 1. Literal list-table (control)
::: {.list-table}
* - Key
- Value
* - `a`
- one
:::
## 2. list-table div built from AST nodes in an lmd cell
```{lmd}
local function row(cells)
local items = {}
for _, c in ipairs(cells) do table.insert(items, { pandoc.Plain(c) }) end
return { pandoc.BulletList(items) }
end
local rows = {
row({ {pandoc.Str("Key")}, {pandoc.Str("Value")} }),
row({ {pandoc.Code("b")}, {pandoc.Str("two")} }),
}
return pandoc.Div({ pandoc.BulletList(rows) }, pandoc.Attr("", {"list-table"}))
```
## 3. Literal definition-list (control)
::: {.definition-list}
* Term
* A definition.
:::
## 4. definition-list div built from AST nodes in an lmd cell
```{lmd}
local item = {
pandoc.Plain({ pandoc.Str("Term") }),
pandoc.BulletList({ { pandoc.Plain({ pandoc.Str("A definition.") }) } }),
}
return pandoc.Div({ pandoc.BulletList({ item }) }, pandoc.Attr("", {"definition-list"}))
```
q2 render repro.qmd --to html
Renders without diagnostics. In repro.html:
| Section | Expected | Actual |
|---|---|---|
| 1. literal list-table | <table> |
<table> |
| 2. AST-built list-table | <table> |
<div class="list-table"><ul><li><ul>… |
| 3. literal definition-list | <dl> |
<dl> |
| 4. AST-built definition-list | <dl> |
<div class="definition-list"><ul><li>… |
The node shapes in 2 and 4 match what the reader produces for 1 and 3 before postprocess (the validators' documented structure), so once transform_divs runs over them they should convert.
Related: the same markup inside a markdown fragment
The obvious workaround, writing the list-table literally inside a fragment, is also blocked, for the opposite reason: the fragment is parsed by the reader with postprocess, so it becomes a Table, and the desugarer then reports
Warning: lmd cell could not be desugared
lmd: `Table` nodes are not supported inside markdown fragments yet
The cell is left as written and will not run.
for
```{lmd}
return {=:
::: {.list-table}
* - Key
- Value
* - `b`
- two
:::
:=}
```
So today the only route from an lmd cell to a table is pandoc.read(markdown_string, "markdown"), which does run postprocess and produces a table.
Environment
q2 0.33.0 (macOS, arm64); repo inspected at e308835bd.
- Lingua principale
- Rust
- Stelle
- 278
- Fork
- 19
- Merge medio
- 23h 15m
- PR unite (30g)
- 153
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di quarto-dev/q2
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
quarto-dev/q2#880 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
quarto-dev/q2#879 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 73/100
quarto-dev/q2#877 ·
I maintainer di solito rispondono entro 1 giorno
-
Monitor wasm-pack: cargo install broken by zip crate mass-yank; CI uses taiki-e prebuilt binaryApertatesting
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 15/100
quarto-dev/q2#853 ·
I maintainer di solito rispondono entro 1 giorno
-
Q1->Q2 migration: Call Quarto 1 directly to get ASTForse già presa @cscheid l’ha presa 14 giorni fa. Aperta
quarto-dev/q2#801 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di quarto-dev/q2
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
peteonrails/voxtype#909 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
alchemyplatform/rundler#1358 ·
I maintainer di solito rispondono entro 3 giorni
-
[BUG] VA-API HEVC: out-of-range cu_qp_delta (measured -130..+56) produces a corrupted bitstreamAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
selkies-project/pixelflux#52 · 4 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
llm translation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
BerriAI/litellm#47884 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
area:testing bug good first issue platform:windows priority:medium
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
rtk-ai/rtk#4728 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno