# highlighting URL: /api/highlighting/ Section: api -------------------------------------------------------------------------------- highlighting - Patitas window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'brown-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/patitas/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/patitas/assets/js/enhancements/toc.632a9783.js', 'docs-nav': '/patitas/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/patitas/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/patitas/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/patitas/assets/js/enhancements/interactive.fc077855.js', 'mobile-nav': '/patitas/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/patitas/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/patitas/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/patitas/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/patitas/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/patitas/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/patitas/assets/js/enhancements/link-previews.8d906535.js' }; (function () { try { var defaults = window.BENGAL_THEME_DEFAULTS || { appearance: 'system', palette: '' }; var defaultAppearance = defaults.appearance; if (defaultAppearance === 'system') { defaultAppearance = (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) ? 'dark' : 'light'; } var storedTheme = localStorage.getItem('bengal-theme'); var storedPalette = localStorage.getItem('bengal-palette'); var theme = storedTheme ? (storedTheme === 'system' ? defaultAppearance : storedTheme) : defaultAppearance; var palette = storedPalette ?? defaults.palette; document.documentElement.setAttribute('data-theme', theme); if (palette) { document.documentElement.setAttribute('data-palette', palette); } } catch (e) { document.documentElement.setAttribute('data-theme', 'light'); } })(); { "prerender": [ { "where": { "and": [ { "href_matches": "/docs/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ], "prefetch": [ { "where": { "and": [ { "href_matches": "/*" }, { "not": { "selector_matches": "[data-external], [target=_blank], .external" } } ] }, "eagerness": "conservative" } ] } Skip to main content Magnifying Glass ESC Recent Clear Magnifying Glass No results for "" Start typing to search... ↑↓ Navigate ↵ Open ESC Close Powered by Lunr ฅᨐฅ DocumentationArrow ClockwiseGet StartedCodeSyntaxDirectivesStarburstExtendingBookmarkReferenceInfoAboutTroubleshootingReleasesDevGitHubPatitas API Reference Magnifying Glass Search ⌘K Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal List ฅᨐฅ Magnifying Glass Search X Close Documentation Caret Down Arrow Clockwise Get Started Code Syntax Directives Starburst Extending Bookmark Reference Info About Troubleshooting Releases Dev Caret Down GitHub Patitas API Reference Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Patitas API Reference Caret Right Directives Caret Right Builtins admonition container dropdown tabs contracts decorator options protocol registry Caret Right Lexer Caret Right Classifiers directive fence footnote heading html link_ref list quote thematic Caret Right Scanners block directive fence html core modes Caret Right Parsing Caret Right Blocks Caret Right List blank_line indent item_blocks marker mixin nested trace types core directive footnote table Caret Right Inline core emphasis links match_registry special tokens charsets containers token_nav Caret Right Plugins autolinks footnotes math strikethrough table task_lists Caret Right Renderers html Caret Right Roles Caret Right Builtins formatting icons math reference protocol registry Caret Right Utils hashing logger text errors highlighting icons location nodes parser patitas protocols stringbuilder tokens Patitas API Reference ᗢ Caret Down Link Copy URL External Open LLM text Copy Copy LLM text Share with AI Ask Claude Ask ChatGPT Ask Gemini Ask Copilot Module highlighting Syntax highlighting protocol and injection for Patitas. Provides optional syntax highlighting for code blocks. When patitas[syntax] is installed, Rosettes is used automatically. Protocol Alignment: The Highlighter protocol is aligned with Bengal's HighlightService for seamless integration. Both interfaces support: highlight(code, language, hl_lines, show_linenos) -> str supports_language(language) -> bool Usage: # Automatic with patitas[syntax] from patitas import Markdown md = Markdown() # Highlighting enabled if rosettes is installed # Manual injection from patitas.highlighting import set_highlighter def my_highlighter(code: str, language: str) -> str: return f'<pre class="language-{language}"><code>{code}</code></pre>' set_highlighter(my_highlighter) 1Class5Functions Classes Highlighter 2 ▼ Protocol for syntax highlighters. Aligned with Bengal's HighlightService for seamless integration.… Protocol for syntax highlighters. Aligned with Bengal's HighlightService for seamless integration. Highlighters take code and language and return HTML markup with syntax highlighting applied. Thread Safety: Implementations must be thread-safe. The highlight() method may be called concurrently from multiple render threads. Methods highlight 2 str ▼ Highlight code with syntax colors. **Contract:** - MUST return valid HTML (nev… def highlight(self, code: str, language: str) -> str Highlight code with syntax colors. Contract: MUST return valid HTML (never raise for bad input) MUST escape HTML entities in code MUST use CSS classes (not inline styles) SHOULD fall back to plain text for unknown languages Parameters Name Type Description code — Source code to highlight language — Language identifier (e.g., "python", "javascript") Returns str HTML markup with highlighting supports_language 1 bool ▼ Check if highlighter supports the given language. **Contract:** - MUST NOT rai… def supports_language(self, language: str) -> bool Check if highlighter supports the given language. Contract: MUST NOT raise exceptions SHOULD handle common aliases (js -> javascript) Parameters Name Type Description language — Language identifier or alias Returns bool True if highlighting is available Functions set_highlighter 1 None ▼ Set the global syntax highlighter. def set_highlighter(highlighter: Highlighter | SimpleHighlighter | None) -> None Parameters Name Type Description highlighter Highlighter | SimpleHighlighter | None A Highlighter protocol implementation, or a simple function that takes (code, language) and returns HTML. Pass None to clear the highlighter. _try_import_rosettes 0 bool ▼ Try to import and configure Rosettes highlighter. def _try_import_rosettes() -> bool Returns bool highlight 2 str ▼ Highlight code using the configured highlighter. Falls back to plain code bloc… def highlight(code: str, language: str) -> str Highlight code using the configured highlighter. Falls back to plain code block if no highlighter is available. Automatically tries to use Rosettes if installed. Parameters Name Type Description code str Source code to highlight language str Language identifier Returns str has_highlighter 0 bool ▼ Check if a syntax highlighter is available. def has_highlighter() -> bool Returns bool get_highlighter 0 Highlighter | SimpleHigh… ▼ Get the current highlighter instance. def get_highlighter() -> Highlighter | SimpleHighlighter | None Returns Highlighter | SimpleHighlighter | None ← Previous errors Next → icons List © 2026 Patitas built in ᓚᘏᗢ { "linkPreviews": { "enabled": true, "hoverDelay": 200, "hideDelay": 150, "showSection": true, "showReadingTime": true, "showWordCount": true, "showDate": true, "showTags": true, "maxTags": 3, "includeSelectors": [".prose"], "excludeSelectors": ["nav", ".toc", ".breadcrumb", ".pagination", ".card", "[class*='-card']", ".tab-nav", "[class*='-widget']", ".child-items", ".content-tiles"], "allowedHosts": [], "allowedSchemes": ["https"], "hostFailureThreshold": 3 } } window.BENGAL_LAZY_ASSETS = { tabulator: '/patitas/assets/js/tabulator.min.js', dataTable: '/patitas/assets/js/data-table.js', mermaidToolbar: '/patitas/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/patitas/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/patitas/assets/js/graph-minimap.ff04e939.js', graphContextual: '/patitas/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/patitas/assets/icons/close.911d4fe1.svg', enlarge: '/patitas/assets/icons/enlarge.652035e5.svg', copy: '/patitas/assets/icons/copy.3d56e945.svg', 'download-svg': '/patitas/assets/icons/download.04f07e1b.svg', 'download-png': '/patitas/assets/icons/image.c34dfd40.svg', 'zoom-in': '/patitas/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/patitas/assets/icons/zoom-out.38857c77.svg', reset: '/patitas/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 996 - Reading Time: 5 minutes