import 'package:highlight/highlight.dart'; final markdown = Mode( refs: {}, aliases: [ "md", "mkdown", "mkd" ], contains: [ // Headers (with distinct classes for each level) Mode( className: "header", variants: [ // Level 1 header (#) Mode( className: "header-h1", begin: "^#\\s+", end: "\$" ), // Level 2 header (##) Mode( className: "header-h2", begin: "^##\\s+", end: "\$" ), // Level 3 header (###) Mode( className: "header-h3", begin: "^###\\s+", end: "\$" ), // Level 4 header (####) Mode( className: "header-h4", begin: "^####\\s+", end: "\$" ), // Level 5 header (#####) Mode( className: "header-h5", begin: "^#####\\s+", end: "\$" ), // Level 6 header (######) Mode( className: "header-h6", begin: "^######\\s+", end: "\$" ), // Underlined headers (=== and ---) Mode( className: "header-underline", begin: "^.+?\\n[=-]{2,}\$" ) ] ), // HTML tags Mode( begin: "<", end: ">", subLanguage: ["xml"], relevance: 0 ), // Lists Mode( className: "list", begin: "^\\s*([*+-]|(\\d+\\.))\\s+" ), // Bold text Mode( className: "bold", begin: "[*_]{2}.+?[*_]{2}" ), // Italic text Mode( className: "italic", variants: [ Mode(begin: "\\*.+?\\*"), Mode(begin: "_.+?_", relevance: 0) ] ), // Blockquotes Mode( className: "blockquote", begin: "^>\\s+", end: "\$" ), // Code blocks and inline code Mode( className: "code", variants: [ Mode(begin: "^```\\w*\\s*\$", end: "^```[ ]*\$"), // Fenced code blocks Mode(begin: "`.+?`"), // Inline code Mode(begin: "^( {4}|\\t)", end: "\$", relevance: 0) // Indented code blocks ] ), // Horizontal rules Mode( className: "horizontal-rule", begin: "^[-\\*]{3,}", end: "\$" ), // Links and images Mode( begin: "\\[.+?\\][\\(\\[].*?[\\)\\]]", returnBegin: true, contains: [ Mode( className: "link-text", begin: "\\[", end: "\\]", excludeBegin: true, returnEnd: true, relevance: 0 ), Mode( className: "link-url", begin: "\\]\\(", end: "\\)", excludeBegin: true, excludeEnd: true ), Mode( className: "link-reference", begin: "\\]\\[", end: "\\]", excludeBegin: true, excludeEnd: true ) ], relevance: 10 ), // Reference-style links Mode( begin: "^\\[[^\\n]+\\]:", returnBegin: true, contains: [ Mode( className: "link-reference", begin: "\\[", end: "\\]", excludeBegin: true, excludeEnd: true ), Mode( className: "link-url", begin: ":\\s*", end: "\$", excludeBegin: true ) ] ), // Strikethrough text Mode( className: "strikethrough", begin: "~~.+?~~" ), // Tables Mode( className: "table", begin: "^\\|.+?\\|", end: "\$", contains: [ Mode( className: "table-header", begin: "^\\|", end: "\\|", contains: [ Mode( className: "table-cell", begin: "[^|]+", end: "\$" ) ] ), Mode( className: "table-row", begin: "^\\|", end: "\\|", contains: [ Mode( className: "table-cell", begin: "[^|]+", end: "\$" ) ] ) ] ), // Task lists Mode( className: "task-list", begin: "^\\s*-\\s*\\[\\s*[xX ]?\\s*\\]\\s+" ), Mode( className: "link-reference", begin: "\\[", end: "\\]", excludeBegin: true, excludeEnd: true ), // Custom Tag Highlighting Mode( className: "tag-hash", begin: "(?<=\\s|^)#[a-zA-Z0-9_]+", relevance: 10), // Magenta Mode( className: "tag-plus", begin: "(?<=\\s|^)\\+[a-zA-Z0-9_]+", relevance: 10), // Cyan Mode( className: "tag-at", begin: "(?<=\\s|^)@[a-zA-Z0-9_]+", relevance: 10), // Yellow Mode( className: "command", begin: "(?<=\\s|^):[a-zA-Z0-9_]+", relevance: 10), Mode( className: "link-url", begin: "(?<=\\s|^)/[a-zA-Z0-9_/]+", relevance: 10), // Yellow ]);