mirror of
https://github.com/alecthomas/chroma.git
synced 2025-10-08 22:52:04 +02:00
This causes issues whereby Markdown code fragments such as: ``` `<script>` ``` Are treated as HTML, resulting in errors and backtracking. Note that this does mean that HTML in Markdown is not highlighted, but we can potentially add rules to the Markdown lexer to solve that. Fixes #1119
47 lines
1.6 KiB
Go
47 lines
1.6 KiB
Go
package lexers
|
|
|
|
import (
|
|
. "github.com/alecthomas/chroma/v2" // nolint
|
|
)
|
|
|
|
// Markdown lexer.
|
|
var Markdown = Register(MustNewLexer(
|
|
&Config{
|
|
Name: "markdown",
|
|
Aliases: []string{"md", "mkd"},
|
|
Filenames: []string{"*.md", "*.mkd", "*.markdown"},
|
|
MimeTypes: []string{"text/x-markdown"},
|
|
},
|
|
markdownRules,
|
|
))
|
|
|
|
func markdownRules() Rules {
|
|
return Rules{
|
|
"root": {
|
|
{`^(#[^#].+\n)`, ByGroups(GenericHeading), nil},
|
|
{`^(#{2,6}.+\n)`, ByGroups(GenericSubheading), nil},
|
|
{`^(\s*)([*-] )(\[[ xX]\])( .+\n)`, ByGroups(Text, Keyword, Keyword, UsingSelf("inline")), nil},
|
|
{`^(\s*)([*-])(\s)(.+\n)`, ByGroups(Text, Keyword, Text, UsingSelf("inline")), nil},
|
|
{`^(\s*)([0-9]+\.)( .+\n)`, ByGroups(Text, Keyword, UsingSelf("inline")), nil},
|
|
{`^(\s*>\s)(.+\n)`, ByGroups(Keyword, GenericEmph), nil},
|
|
{"^(```\\n)([\\w\\W]*?)(^```$)", ByGroups(String, Text, String), nil},
|
|
{
|
|
"^(```)(\\w+)(\\n)([\\w\\W]*?)(^```$)",
|
|
UsingByGroup(2, 4, String, String, String, Text, String),
|
|
nil,
|
|
},
|
|
Include("inline"),
|
|
},
|
|
"inline": {
|
|
{`\\.`, Text, nil},
|
|
{`(\s)(\*|_)((?:(?!\2).)*)(\2)((?=\W|\n))`, ByGroups(Text, GenericEmph, GenericEmph, GenericEmph, Text), nil},
|
|
{`(\s)((\*\*|__).*?)\3((?=\W|\n))`, ByGroups(Text, GenericStrong, GenericStrong, Text), nil},
|
|
{`(\s)(~~[^~]+~~)((?=\W|\n))`, ByGroups(Text, GenericDeleted, Text), nil},
|
|
{"`[^`]+`", LiteralStringBacktick, nil},
|
|
{`[@#][\w/:]+`, NameEntity, nil},
|
|
{`(!?\[)([^]]+)(\])(\()([^)]+)(\))`, ByGroups(Text, NameTag, Text, Text, NameAttribute, Text), nil},
|
|
{`.|\n`, Text, nil},
|
|
},
|
|
}
|
|
}
|