Skip to main content

ChromaMark for Python — render and build colored blocks, pills, collapsibles, fields, meters and inline diff on top of Markdown, with Jupyter display.

Project description

chromamark (Python)

Render and build ChromaMark from Python — colored blocks, pills, collapsible sections, fields, meters, and inline diff on top of Markdown (CommonMark + GFM). Produces the same HTML and lint diagnostics as the JS implementation, and displays inline in Jupyter.

Built on markdown-it-py.

Install

pip install chromamark

Render

from chromamark import LANGUAGE_VERSION, create_renderer, render

html = render("::: success\nAll good [!ok pass]\n:::")
# LANGUAGE_VERSION == "0.1"

# or as a markdown-it-py plugin:
from markdown_it import MarkdownIt
from chromamark import chromamark_plugin
md = MarkdownIt("commonmark").use(chromamark_plugin)

render() and create_renderer() disable raw HTML for safe handling of untrusted input. The plugin honors the host MarkdownIt instance's html setting consistently; enable it only for trusted or separately sanitized input.

Pass highlight= to render or create_renderer to integrate a fenced-code highlighter without adding one to ChromaMark:

html = render(source, highlight=lambda code, language, attrs: your_highlighter(code, language))

The callback output is trusted HTML, following markdown-it-py behavior. Escape or sanitize output from highlighters that do not guarantee safe HTML.

Lint

The installed chromamark command provides the same CM001–CM005 validation workflow as the npm CLI:

chromamark lint report.cm
cat report.cm | chromamark lint
chromamark lint report.cm --disable CM001,CM003

Diagnostics use path:line:column output, clean input exits 0, findings exit 1, and usage or file errors exit 2.

The same linter is available as a Python API:

from chromamark import lint

diagnostics = lint(source, disable=["CM001"])

Build (fluent, for agent reports)

from chromamark import ChromaDoc

doc = ChromaDoc()
doc.heading("Deploy report")
doc.success("Deploy succeeded", "3/3 replicas healthy")
doc.fields(Region="eastus", Status=doc.pill("ok", "healthy"))
doc.table(["Stage", "Result"], [["unit", doc.pill("pass", "247")]])
print(doc.to_cm())     # ChromaMark source
print(doc.to_html())   # rendered HTML

Jupyter

from chromamark import display_chromamark
display_chromamark("::: success\nRun complete [=success 100%]\n:::")

ChromaDoc also renders itself in notebooks via _repr_html_.

A runnable, pre-executed example notebook lives at examples/chromamark_report.ipynb — it builds a model-evaluation report (colored block, pills, meters, fields, a table, and a collapsible) from computed results.

Parity with the JavaScript renderer

chromamark produces byte-identical HTML to @chromamark/renderer for normal content — verified by a differential harness over ~140,000 inputs (every ChromaMark construct, GFM, linkify, and the full SPEC/demo documents all match exactly). Three exotic edge cases differ, all involving unusual whitespace or non-BMP characters; none affect typical agent-generated reports:

  • Non-ASCII whitespace at a block edge (e.g. a leading U+3000 ideographic space): JS markdown-it preserves it (asciiTrim); markdown-it-py strips all Unicode whitespace. Upstream base-engine difference.
  • Six control/format code points inside ChromaMark constructs (U+001C–U+001F, U+0085 NEL, U+FEFF BOM): counted as whitespace by one engine's regex/strip but not the other, which can flip pill/field parsing.
  • Astral-plane (emoji) domain labels in bare links (e.g. 🎉.com): auto-linked by JS linkify-it but not linkify-it-py. BMP and IDN letter hosts match.

Credits

Inline change-tracking syntax is adopted from CriticMarkup (© 2013 Gabe Weatherhead & Erik Hess, Apache-2.0); ChromaMark's parser is an original, independent implementation. See the main README for full credits.

License

This software package is licensed under the MIT License; see LICENSE.md. The ChromaMark specification is licensed separately under CC BY-SA 4.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chromamark-0.2.2.tar.gz (27.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chromamark-0.2.2-py3-none-any.whl (21.4 kB view details)

Uploaded Python 3

File details

Details for the file chromamark-0.2.2.tar.gz.

File metadata

  • Download URL: chromamark-0.2.2.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chromamark-0.2.2.tar.gz
Algorithm Hash digest
SHA256 fb8fdd3176e1c34273c978c61282adfb9d8953929da3dede90b80ea0426878a6
MD5 807dede3fa971479f647b63548b0c21f
BLAKE2b-256 f976329e3824e3dd9df345800c12c875ac07a58912be42f93e8845a2ea648124

See more details on using hashes here.

Provenance

The following attestation bundles were made for chromamark-0.2.2.tar.gz:

Publisher: publish.yml on cjfravel-dev/ChromaMark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chromamark-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: chromamark-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 21.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for chromamark-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5de8e83b96a99ef77bc10fef117d83871a26fe8d0e3e7c567964573208f90ae2
MD5 51399d2263d4c962baa2e767bf9ae114
BLAKE2b-256 7b47012c575cf9767b59a59f8e0d9a5ba5763147516f5b52905b1ef58ff1d722

See more details on using hashes here.

Provenance

The following attestation bundles were made for chromamark-0.2.2-py3-none-any.whl:

Publisher: publish.yml on cjfravel-dev/ChromaMark

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page