Percent scripts: accept raw-string (r""") and '''-delimited markdown cells, as jupytext writes them

Aperta Adatta ai principianti
#14,850 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
jupyter, python, typescript
Ambito
cli, content

Direzione di ricerca

Inizia in src/core/jupyter/percent.ts, all’altezza di markdownFromJupyterPercentScript, e analizza il rilevamento delle virgolette triple mostrato nell’issue. Usa l’esempio minimo doc.py con quarto render per verificare che i delimitatori raw-string e single-quote vengano analizzati come markdown. Il lavoro è completato quando r""", R""", """ e le forme ''' non eseguono più il rendering dei relativi delimitatori come prosa.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

engines-jupyter enhancement
Description

Quarto renders Python percent scripts and the docs name jupytext as the reference implementation of the format, with markdown cells written either as # comments or as a multi-line string (""").

Jupytext writes markdown cells as strings when cell_markers = '"""' is set, and since 1.13.0 it prefixes the string with r whenever the cell contains a backslash, so that LaTeX such as \frac is not read as a Python escape sequence (changelog entry for jupytext/jupytext#836; src/jupytext/cell_to_text.py, "Markdown cells that contain a backslash should be encoded as raw strings"; expected output in tests/functional/others/test_raw_strings.py). Its reader accepts """, r""", R""" and the ''' forms (src/jupytext/cell_reader.py).

Quarto's parser recognises only a bare """ line:

// src/core/jupyter/percent.ts, markdownFromJupyterPercentScript
const isTripleQuote = (line: string) => !!line.match(/^"{3,}\s*$/);

so a cell jupytext wrote falls into the comment branch, which only strips a leading #, and both delimiter lines are rendered as prose. The same applies to a cell a user writes as r""" by hand to keep Python from interpreting the backslashes (a plain """ cell containing \xi or \underline is a syntax error in Python, so the raw prefix is the only way to keep such a file importable or runnable).

Minimal example

doc.py:

# %% [markdown]
# ---
# title: "Raw-string markdown cell"
# ---

# %% [markdown]
r"""
# A heading

Display math: $\frac{a}{b}$
"""

quarto render doc.py (1.8.25; the parser is unchanged in 1.10.18, 1.11.3 and main) produces a document whose body, as plain text, reads

r”“” A heading
Display math: \(\frac{a}{b}\) ““”

The heading is lost (the # was stripped as a comment prefix) and both delimiters appear as text, smart-quoted by Pandoc. Replacing r""" by """ renders correctly, which confirms the cause.

Proposed change

Accept an optional r/R prefix on the opening delimiter, and the single-quote form, matching jupytext's reader:

const isTripleQuoteOpen = (line: string) => !!line.match(/^[rR]?("{3,}|'{3,})\s*$/);
const isTripleQuoteClose = (line: string) => !!line.match(/^("{3,}|'{3,})\s*$/);

No other part of the pipeline is affected: the cell content is taken as markdown source either way.

Quarto version

1.8.25 on Windows 11; the relevant code is identical at tags v1.10.18 and v1.11.3 and on main.

Lingua principale
JavaScript
Stelle
6k
Fork
458
Merge medio
1g 9h
PR unite (30g)
41

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di quarto-dev/quarto-cli

Tutte le issue di quarto-dev/quarto-cli

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.