# directive URL: /api/lexer/classifiers/directive/ Section: classifiers -------------------------------------------------------------------------------- directive - 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 LexerClassifiers ᗢ 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 lexer.classifiers.directive Directive classifier mixin. 1Class Classes DirectiveClassifierMixin 8 ▼ Mixin providing MyST-style directive classification. Handles :::{name} and ::::{name} syntax with … Mixin providing MyST-style directive classification. Handles :::{name} and ::::{name} syntax with nesting support. Attributes Name Type Description _mode LexerMode — _directive_stack list[tuple[int, str]] — Methods Internal Methods 6 ▼ _location_from 3 SourceLocation ▼ Get source location from saved position. Implemented by Lexer. def _location_from(self, start_pos: int, start_col: int | None = None, end_pos: int | None = None) -> SourceLocation Parameters Name Type Description start_pos — start_col — Default: None end_pos — Default: None Returns SourceLocation _try_classify_directive_start 3 Iterator[Token] | None ▼ Try to classify content as directive start. Detects :::{name} or ::::{name} sy… def _try_classify_directive_start(self, content: str, line_start: int, indent: int = 0) -> Iterator[Token] | None Try to classify content as directive start. Detects :::{name} or ::::{name} syntax (MyST-style fenced directives). Supports: Nested directives via colon count (:::: > :::) Named closers (:::{/name}) Optional title after name Parameters Name Type Description content — Line content with leading whitespace stripped line_start — Position in source where line starts indent — Number of leading spaces (for line_indent) Default: 0 Returns Iterator[Token] | None Iterator of tokens if valid directive, None otherwise. _emit_directive_tokens 6 Iterator[Token] ▼ Emit directive tokens and update state. def _emit_directive_tokens(self, colon_count: int, name: str, title: str, is_closer: bool, line_start: int, indent: int = 0) -> Iterator[Token] Parameters Name Type Description colon_count — Number of colons in the fence name — Directive name title — Optional title after the name is_closer — Whether this is a named closer (:::{/name}) line_start — Position in source where line starts indent — Number of leading spaces (for line_indent) Default: 0 Returns Iterator[Token] _try_classify_directive_close 3 Iterator[Token] | None ▼ Check if content is a directive closing fence. **Valid closing:** - ::: (simpl… def _try_classify_directive_close(self, content: str, line_start: int, indent: int = 0) -> Iterator[Token] | None Check if content is a directive closing fence. Valid closing: ::: (simple close, 3+ colons matching or exceeding opener) :::{/name} (named close) Parameters Name Type Description content — Line content starting with ::: line_start — Position in source where line starts indent — Number of leading spaces (for line_indent) Default: 0 Returns Iterator[Token] | None Iterator of tokens if valid close, None otherwise. _emit_directive_close 4 Iterator[Token] ▼ Emit directive close token and update state. def _emit_directive_close(self, colon_count: int, name: str | None, line_start: int, indent: int = 0) -> Iterator[Token] Parameters Name Type Description colon_count — Number of colons in the closing fence name — Optional directive name for named closers line_start — Position in source where line starts indent — Number of leading spaces (for line_indent) Default: 0 Returns Iterator[Token] _try_classify_directive_option 3 Token | None ▼ Try to classify content as directive option. Format: :key: value def _try_classify_directive_option(self, content: str, line_start: int, indent: int = 0) -> Token | None Parameters Name Type Description content — Line content starting with : line_start — Position in source where line starts indent — Number of leading spaces (for line_indent) Default: 0 Returns Token | None DIRECTIVE_OPTION token if valid, None otherwise. ← Previous classifiers Next → fence 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: 1052 - Reading Time: 5 minutes