Module

themes

Rosettes themes package.

Semantic token system for syntax highlighting with modern CSS support. Provides palettes, CSS generation, and accessibility validation.

Design Philosophy:

Rosettes uses a semantic role system instead of individual token colors:

  1. Roles over Tokens: ~20 semantic roles (FUNCTION, STRING, COMMENT) instead of 100+ token types. Themes define colors for roles.

  2. Separation of Concerns: Token → Role mapping is language-agnostic. Palettes define colors for roles, not specific syntax.

  3. CSS Custom Properties: Palettes generate CSS variables for runtime theming without regenerating HTML.

Quick Start:

>>> from rosettes.themes import MONOKAI, get_palette
>>> palette = get_palette("monokai")
>>> css_vars = palette.to_css_vars()

Architecture:

  • SyntaxRole: Semantic meaning of code elements (FUNCTION, STRING, etc.)
  • TokenType → Role: Mapping from fine-grained tokens to semantic roles
  • SyntaxPalette: Immutable color definitions for each role
  • AdaptivePalette: Light/dark mode support with CSS media queries

Types:

  • SyntaxRole: Enum of semantic roles
  • SyntaxPalette: Immutable theme definition (~20 color slots)
  • AdaptivePalette: Light/dark adaptive theme

Built-in Palettes:

Bengal Themes:

  • BENGAL_TIGER: Warm orange tones (default)
  • BENGAL_SNOW_LYNX: Cool light theme
  • BENGAL_CHARCOAL: Dark gray theme
  • BENGAL_BLUE: Cool blue tones

Third-Party Compatible:

  • MONOKAI: Classic dark theme
  • DRACULA: Purple-accented dark theme
  • GITHUB: Light/dark GitHub-style themes

Custom Palettes:

>>> from rosettes.themes import SyntaxPalette, register_palette
>>> my_theme = SyntaxPalette(
...     name="my-theme",
...     background="#1a1a1a",
...     text="#f0f0f0",
...     string="#98c379",
...     function="#61afef",
... )
>>> register_palette(my_theme)

See Also:

  • rosettes.themes._roles: SyntaxRole enum definition
  • rosettes.themes._mapping: TokenType → SyntaxRole mapping
  • rosettes.themes._palette: SyntaxPalette and AdaptivePalette classes

Functions

_init_registry 0 None
Initialize the palette registry with built-in palettes.
def _init_registry() -> None
register_palette 1 None
Register a custom palette.
def register_palette(palette: Palette) -> None
Parameters
Name Type Description
palette Palette

The palette to register.

get_palette 1 Palette
Get a registered palette by name.
def get_palette(name: str) -> Palette
Parameters
Name Type Description
name str

The palette name.

Returns
Palette
list_palettes 0 list[str]
List all registered palette names.
def list_palettes() -> list[str]
Returns
list[str]