# frontmatter URL: /api/frontmatter/ Section: api -------------------------------------------------------------------------------- frontmatter - 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.736b857e.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.96c8880c.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.96620bcf.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 StartedCodeSyntaxDirectivesStarburstExtendingBookmarkReferenceInfoAboutWarningTroubleshootingReleasesDevGitHubPatitas API ReferenceForum 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 Warning Troubleshooting Releases Dev Caret Down GitHub Patitas API Reference Forum 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 fast_path indent item_blocks marker mixin nested trace types core directive footnote quote_fast_path quote_token_reuse table Caret Right Inline core emphasis links match_registry special tokens charsets compiled_dispatch containers dispatch pattern_parsers protocols shared_tokens token_nav ultra_fast Caret Right Plugins autolinks footnotes math strikethrough table task_lists Caret Right Renderers html llm protocol Caret Right Roles Caret Right Builtins formatting icons math reference protocol registry Caret Right Utils hashing logger text cache config context differ errors excerpt frontmatter highlighting icons incremental location nodes notebook parser patitas profiling protocols sanitize serialization stringbuilder text tokens visitor 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 frontmatter YAML frontmatter parsing for Markdown and other content formats. Provides parse_frontmatter and extract_body with graceful error handling. parse_frontmatter returns (metadata, body); parse_notebook returns (content, metadata). 4Functions Functions _find_delimiter_line 1 tuple[str, str] | None ▼ Find closing --- delimiter on its own line. Returns (frontmatter_str, body) or … def _find_delimiter_line(content: str) -> tuple[str, str] | None Find closing --- delimiter on its own line. Returns (frontmatter_str, body) or None. Parameters Name Type Description content str Returns tuple[str, str] | None _normalize_metadata 1 dict[str, Any] ▼ Coerce known numeric frontmatter fields to float. Called immediately after yam… def _normalize_metadata(raw: dict[str, Any]) -> dict[str, Any] Coerce known numeric frontmatter fields to float. Called immediately after yaml.safe_load() so every downstream consumer (cascade, snapshots, sorts, templates) sees consistent types. Parameters Name Type Description raw dict[str, Any] Returns dict[str, Any] parse_frontmatter 1 tuple[dict[str, Any], st… ▼ Parse YAML frontmatter from content. Returns (metadata, body). Returns (metada… def parse_frontmatter(content: str) -> tuple[dict[str, Any], str] Parse YAML frontmatter from content. Returns (metadata, body). Returns (metadata, body) — complementary to parse_notebook which returns (markdown_content, metadata). Delimiters must be --- on their own line. Behavior: Delimiters: --- at start, --- at end of block (line-boundary only) No leading ---: return ({}, content) Unclosed ---: return ({}, content) (treat as no frontmatter) Valid YAML: parse with yaml.safe_load, normalize numeric fields, return (metadata, body) YAML error: return ({}, body) where body = content with frontmatter block stripped Parameters Name Type Description content str Raw file content with optional frontmatter Returns tuple[dict[str, Any], str] extract_body 1 str ▼ Strip --- delimited block from start. No YAML parsing. Uses line-boundary deli… def extract_body(content: str) -> str Strip --- delimited block from start. No YAML parsing. Uses line-boundary delimiter detection (--- on its own line), so values like title: "a---b" inside frontmatter do not truncate the body. Use when parse_frontmatter fails (e.g. broken YAML) but you still want the body content. Parameters Name Type Description content str Full file content Returns str ← Previous excerpt Next → highlighting 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, "showDeadLinks": true } } 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: 895 - Reading Time: 4 minutes