muzzle-velocity/lib/themes/markdown.dart

239 lines
5.7 KiB
Dart
Raw Normal View History

2025-02-21 22:58:10 +02:00
import 'package:highlight/highlight.dart';
2025-02-21 17:46:41 +02:00
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+"
),
2025-02-21 17:46:41 +02:00
Mode(
className: "link-reference",
begin: "\\[",
end: "\\]",
excludeBegin: true,
excludeEnd: true
),
2025-02-21 17:46:41 +02:00
// Custom Tag Highlighting
2025-02-21 22:58:10 +02:00
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
2025-02-21 22:58:10 +02:00
]);