# control_flow URL: /api/parser/blocks/control_flow/ Section: blocks -------------------------------------------------------------------------------- control_flow - Kida window.BENGAL_THEME_DEFAULTS = { appearance: 'light', palette: 'brown-bengal' }; window.Bengal = window.Bengal || {}; window.Bengal.enhanceBaseUrl = '/kida/assets/js/enhancements'; window.Bengal.watchDom = true; window.Bengal.debug = false; window.Bengal.enhanceUrls = { 'toc': '/kida/assets/js/enhancements/toc.632a9783.js', 'docs-nav': '/kida/assets/js/enhancements/docs-nav.57e4b129.js', 'tabs': '/kida/assets/js/enhancements/tabs.aac9e817.js', 'lightbox': '/kida/assets/js/enhancements/lightbox.1ca22aa1.js', 'interactive': '/kida/assets/js/enhancements/interactive.fc077855.js', 'mobile-nav': '/kida/assets/js/enhancements/mobile-nav.d991657f.js', 'action-bar': '/kida/assets/js/enhancements/action-bar.d62417f4.js', 'copy-link': '/kida/assets/js/enhancements/copy-link.7d9a5c29.js', 'data-table': '/kida/assets/js/enhancements/data-table.1f5bc1eb.js', 'lazy-loaders': '/kida/assets/js/enhancements/lazy-loaders.a5c38245.js', 'holo': '/kida/assets/js/enhancements/holo.ee13c841.js', 'link-previews': '/kida/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 )彡 DocumentationInfoAboutArrow ClockwiseGet StartedCodeSyntaxTerminalUsageNoteTutorialsStarburstExtendingBookmarkReferenceTroubleshootingReleasesDevGitHubKida 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 Info About Arrow Clockwise Get Started Code Syntax Terminal Usage Note Tutorials Starburst Extending Bookmark Reference Troubleshooting Releases Dev Caret Down GitHub Kida API Reference Palette Appearance Chevron Down Mode Monitor System Sun Light Moon Dark Palette Snow Lynx Brown Bengal Silver Bengal Charcoal Bengal Blue Bengal Kida API Reference Caret Right Analysis analyzer cache config dependencies landmarks metadata purity roles Caret Right Compiler Caret Right Statements basic control_flow functions special_blocks template_structure variables _protocols coalescing core expressions utils Caret Right Environment core exceptions filters loaders protocols registry tests Caret Right Parser Caret Right Blocks control_flow core functions special_blocks template_structure variables _protocols core errors expressions statements tokens Caret Right Utils html lru_cache workers _types bytecode_cache kida lexer nodes template tstring ParserBlocks ᗢ 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 parser.blocks.control_flow Control flow block parsing for Kida parser. Provides mixin for parsing if/for control flow statements. Uses inline TYPE_CHECKING declarations for host attributes. See: plan/rfc-mixin-protocol-typing.md 1Class Classes ControlFlowBlockParsingMixin 7 ▼ Mixin for parsing control flow blocks. Host attributes and cross-mixin dependencies are declared v… Mixin for parsing control flow blocks. Host attributes and cross-mixin dependencies are declared via inline TYPE_CHECKING blocks. Inherits block stack management from BlockStackMixin. Methods Internal Methods 7 ▼ _parse_unless 0 If ▼ Parse {% unless cond %} as {% if not cond %}. Part of RFC: kida-modern-syntax-… def _parse_unless(self) -> If Parse {% unless cond %} as {% if not cond %}. Part of RFC: kida-modern-syntax-features. Supports {% end %}, {% endif %}, and {% endunless %}. Returns If _parse_break 0 Break ▼ Parse {% break %} loop control. Part of RFC: kida-modern-syntax-features. def _parse_break(self) -> Break Returns Break _parse_continue 0 Continue ▼ Parse {% continue %} loop control. Part of RFC: kida-modern-syntax-features. def _parse_continue(self) -> Continue Returns Continue _parse_while 0 While ▼ Parse {% while cond %}...{% end %} or {% endwhile %}. Kida-native while loop f… def _parse_while(self) -> While Parse {% while cond %}...{% end %} or {% endwhile %}. Kida-native while loop for condition-based iteration. Syntax: {% while items | length > 0 %} {{ items | pop }} {% end %} Part of RFC: kida-2.0-moonshot (While Loops). Returns While _parse_if 0 If ▼ Parse {% if %} ... {% end %} or {% endif %}. Supports unified {% end %} as wel… def _parse_if(self) -> If Parse {% if %} ... {% end %} or {% endif %}. Supports unified {% end %} as well as explicit {% endif %}. Also handles {% elif %} and {% else %} clauses. Returns If _parse_for 0 For ▼ Parse {% for %} ... {% end %} or {% endfor %. Supports unified {% end %} as we… def _parse_for(self) -> For Parse {% for %} ... {% end %} or {% endfor %. Supports unified {% end %} as well as explicit {% endfor %}. Also handles {% else %} and {% empty %} clauses. Supports inline if filter: {% for x in items if x.visible %} Part of RFC: kida-modern-syntax-features (inline if). Returns For _parse_match 0 Match ▼ Parse {% match expr %}{% case pattern %}...{% end %}. Pattern matching for cle… def _parse_match(self) -> Match Parse {% match expr %}{% case pattern %}...{% end %}. Pattern matching for cleaner branching than if/elif chains. Reuses the existing _parse_body infrastructure for case bodies. Syntax: {% match page.type %} {% case "post" %}... {% case "gallery" %}... {% case _ %}... {% end %} The underscore (_) is the wildcard/default case. Returns Match ← Previous blocks Next → core List © 2026 Kida 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: '/kida/assets/js/tabulator.min.js', dataTable: '/kida/assets/js/data-table.js', mermaidToolbar: '/kida/assets/js/mermaid-toolbar.9de5abba.js', mermaidTheme: '/kida/assets/js/mermaid-theme.344822c5.js', graphMinimap: '/kida/assets/js/graph-minimap.ff04e939.js', graphContextual: '/kida/assets/js/graph-contextual.355458ba.js' }; window.BENGAL_ICONS = { close: '/kida/assets/icons/close.911d4fe1.svg', enlarge: '/kida/assets/icons/enlarge.652035e5.svg', copy: '/kida/assets/icons/copy.3d56e945.svg', 'download-svg': '/kida/assets/icons/download.04f07e1b.svg', 'download-png': '/kida/assets/icons/image.c34dfd40.svg', 'zoom-in': '/kida/assets/icons/zoom-in.237b4a83.svg', 'zoom-out': '/kida/assets/icons/zoom-out.38857c77.svg', reset: '/kida/assets/icons/reset.d26dba29.svg' }; Arrow Up -------------------------------------------------------------------------------- Metadata: - Word Count: 945 - Reading Time: 5 minutes