package lexers
import (
. "github.com/alecthomas/chroma/v2"
)
var Markdown = Register (DelegatingLexer (HTML , 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 },
{`[^\\\s]+` , Other , nil },
{`.|\n` , Other , nil },
},
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .