Configuration

Configuration classes and options

2 min read 414 words

Rosettes uses immutable dataclasses for configuration. All configuration is optional—sensible defaults are provided.

FormatConfig

Configuration for HTML output formatting.

from dataclasses import dataclass

@dataclass(frozen=True)
class FormatConfig:
    css_class: str = "rosettes"
    data_language: str = ""

Fields

Field Type Default Description
css_class str "rosettes" Container<div>CSS class
data_language str "" Value fordata-languageattribute

Example

from rosettes.formatters import HtmlFormatter
from rosettes import get_lexer, FormatConfig

lexer = get_lexer("python")
formatter = HtmlFormatter()

config = FormatConfig(
    css_class="my-code-block",
    data_language="python",
)

tokens = lexer.tokenize("x = 1")
html = formatter.format_string(tokens, config)
# <div class="my-code-block" data-language="python">...

HighlightConfig

Configuration for line highlighting and line numbers.

from dataclasses import dataclass

@dataclass(frozen=True)
class HighlightConfig:
    hl_lines: frozenset[int] = frozenset()
    show_linenos: bool = False
    css_class: str = "rosettes"

Fields

Field Type Default Description
hl_lines frozenset[int] frozenset() 1-based line numbers to highlight
show_linenos bool False Include line numbers in output
css_class str "rosettes" Container CSS class

Example

from rosettes import HighlightConfig
from rosettes.formatters import HtmlFormatter

config = HighlightConfig(
    hl_lines=frozenset({2, 3}),
    show_linenos=True,
)

formatter = HtmlFormatter(config=config)

LexerConfig

Configuration for lexer behavior (rarely needed).

from dataclasses import dataclass

@dataclass(frozen=True)
class LexerConfig:
    pass  # Reserved for future lexer options

Currently empty—reserved for future lexer-specific options.


High-Level API Defaults

Thehighlight()function uses these defaults:

Parameter Default Derived From
css_class "rosettes"(semantic) or"highlight"(pygments) css_class_style
css_class_style "semantic"
show_linenos False
hl_lines None
# These are equivalent
highlight(code, "python")
highlight(
    code,
    "python",
    hl_lines=None,
    show_linenos=False,
    css_class=None,  # Auto: "rosettes"
    css_class_style="semantic",
)

Immutability

All configuration classes are frozen dataclasses:

from rosettes import FormatConfig

config = FormatConfig(css_class="code")

# This raises FrozenInstanceError
config.css_class = "other"  # ❌ Error

# Create a new instance instead
new_config = FormatConfig(css_class="other")  # ✅

This immutability ensures thread safety.


Environment Variables

Rosettes does not read environment variables. All configuration is explicit through function parameters or configuration classes.

For build-time configuration in static site generators, pass options through your build system:

import os
from rosettes import highlight

CSS_STYLE = os.getenv("ROSETTES_CSS_STYLE", "semantic")

def highlight_code(code: str, language: str) -> str:
    return highlight(code, language, css_class_style=CSS_STYLE)