Skip to content

inner code block causes parsing error #39

@williambdean

Description

@williambdean

I would like to update a markdown block

My attempts have a python {marimo} block with mo.md with code-block within it.

```python {marimo}
# Have a f-string code block here using mo.md
mo.md(f"""
```python
  ...
```
""")
```

I've tried various ways including using 4 backticks.

Traceback
ERROR   -  Error reading page 'index.md': unterminated triple-quoted f-string literal (detected at line 6) (<unknown>, line 1)
Traceback (most recent call last):
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/bin/mkdocs", line 12, in <module>
    sys.exit(cli())
             ~~~^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/click/core.py", line 1830, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/__main__.py", line 272, in serve_command
    serve.serve(**kwargs)
    ~~~~~~~~~~~^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/commands/serve.py", line 85, in serve
    builder(config)
    ~~~~~~~^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/commands/serve.py", line 67, in builder
    build(config, serve_url=None if is_clean else serve_url, dirty=is_dirty)
    ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/commands/build.py", line 310, in build
    _populate_page(file.page, config, files, dirty)
    ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/commands/build.py", line 163, in _populate_page
    page.markdown = config.plugins.on_page_markdown(
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        page.markdown, page=page, config=config, files=files
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/plugins.py", line 635, in on_page_markdown
    return self.run_event('page_markdown', markdown, page=page, config=config, files=files)
           ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs/plugins.py", line 566, in run_event
    result = method(item, **kwargs)
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/mkdocs_marimo/plugin.py", line 117, in on_page_markdown
    outputs.append(generator.add_code(code))
                   ~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/marimo/_islands/_island_generator.py", line 312, in add_code
    cell_impl = compile_cell(code, cell_id)
  File "/Users/will/.cache/uv/archive-v0/IpWGT7xvM9mwuT5tKeNM4/lib/python3.13/site-packages/marimo/_ast/compiler.py", line 162, in compile_cell
    module = compile(
        code,
    ...<4 lines>...
        flags=ast.PyCF_ONLY_AST | ast.PyCF_ALLOW_TOP_LEVEL_AWAIT,
    )
  File "<unknown>", line 1
    mo.md(f"""
          ^
SyntaxError: unterminated triple-quoted f-string literal (detected at line 6)

I'd suspect that it would work like a marimo application like this:

import marimo

__generated_with = "0.13.15"
app = marimo.App(width="medium")


@app.cell
def _():
    import marimo as mo

    return (mo,)


@app.cell
def _(mo):
    name = mo.ui.text(label="Enter your name:", value="William")
    name
    return (name,)


@app.cell
def _(mo, name):
    mo.md(
        f"""
    ```python
    name = "{name.value}"
    if name == "Will": # {name.value == "Will"}
       print("Hello Will") 
    ```
    """
    )
    return


@app.cell
def _():
    return


if __name__ == "__main__":
    app.run()

Any help or direction would be greatly appreciated!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions