# special URL: /api/parsing/inline/special/ Section: inline -------------------------------------------------------------------------------- special - 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 ParsingInline ᗢ 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 parsing.inline.special Special inline parsing for Patitas parser. Handles HTML inline, autolinks, roles, and math expressions. 1Class2Functions Classes SpecialInlineMixin 4 ▼ Mixin for special inline element parsing. Handles autolinks, HTML inline, roles ({role}`content`),… Mixin for special inline element parsing. Handles autolinks, HTML inline, roles (content), and math ($expression$). Required Host Attributes: None Required Host Methods: None Methods Internal Methods 4 ▼ _try_parse_autolink 3 tuple[Link, int] | None ▼ Try to parse a CommonMark autolink at position. Autolinks are URLs or email ad… def _try_parse_autolink(self, text: str, pos: int, location: SourceLocation) -> tuple[Link, int] | None Try to parse a CommonMark autolink at position. Autolinks are URLs or email addresses wrapped in angle brackets: https://example.com -> ... foo@example.com -> ... Returns (Link, new_position) or None if not an autolink. Per CommonMark 6.7: URI autolinks: scheme:... where scheme is [a-zA-Z][a-zA-Z0-9+.-]{1,31} Email autolinks: local@domain (no backslashes allowed) Parameters Name Type Description text — pos — location — Returns tuple[Link, int] | None _try_parse_html_inline 3 tuple[HtmlInline, int] |… ▼ Try to parse inline HTML at position. CommonMark section 6.8 defines valid raw… def _try_parse_html_inline(self, text: str, pos: int, location: SourceLocation) -> tuple[HtmlInline, int] | None Try to parse inline HTML at position. CommonMark section 6.8 defines valid raw HTML inline elements: Open tags: Closing tags: HTML comments: Processing instructions: Declarations: CDATA: Returns (HtmlInline, new_position) or None if not valid HTML. Parameters Name Type Description text — pos — location — Returns tuple[HtmlInline, int] | None _try_parse_role 3 tuple[Role, int] | None ▼ Try to parse a role at position. Syntax: {role}`content` Returns (Role, new_p… def _try_parse_role(self, text: str, pos: int, location: SourceLocation) -> tuple[Role, int] | None Try to parse a role at position. Syntax: content Returns (Role, new_position) or None if not a role. Parameters Name Type Description text — pos — location — Returns tuple[Role, int] | None _try_parse_math 3 tuple[Math, int] | None ▼ Try to parse inline math at position. Syntax: $expression$ (not $$, that's blo… def _try_parse_math(self, text: str, pos: int, location: SourceLocation) -> tuple[Math, int] | None Try to parse inline math at position. Syntax: $expression$ (not $$, that's block math) Returns (Math, new_position) or None if not valid math. Parameters Name Type Description text — pos — location — Returns tuple[Math, int] | None Functions _parse_html_open_tag 2 tuple[str, int] | None ▼ Parse an HTML open tag per CommonMark spec. CommonMark requires strict validat… def _parse_html_open_tag(text: str, pos: int) -> tuple[str, int] | None Parse an HTML open tag per CommonMark spec. CommonMark requires strict validation: Tag name: ASCII letter followed by letters, digits, hyphens Attribute names: [a-zA-Z_:][a-zA-Z0-9_.:-]* Attribute values: unquoted (no spaces/quotes/=/<>/`), single-quoted (no '), double-quoted (no ") Space required between tag name and first attribute Space required between attributes Optional / before final > Returns (html_text, end_pos) or None if not valid. Parameters Name Type Description text str pos int Returns tuple[str, int] | None _percent_encode_url 1 str ▼ Percent-encode special characters in URL for href attribute. CommonMark requir… def _percent_encode_url(url: str) -> str Percent-encode special characters in URL for href attribute. CommonMark requires certain characters to be percent-encoded. Parameters Name Type Description url str Returns str ← Previous match_registry Next → tokens 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: 1058 - Reading Time: 5 minutes