mirror of
https://github.com/cheat/cheat.git
synced 2026-03-07 11:13:33 +01:00
- Bump Go from 1.19 to 1.26 and update all dependencies - Rewrite CI workflow with matrix strategy (Linux, macOS, Windows) - Update GitHub Actions to current versions (checkout@v4, setup-go@v5) - Update CodeQL actions from v1 to v3 - Fix cross-platform bug in mock/path.go (path.Join -> filepath.Join) - Clean up dependabot config (weekly schedule, remove stale ignore) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
169 lines
6.0 KiB
Go
169 lines
6.0 KiB
Go
package lexers
|
|
|
|
import (
|
|
. "github.com/alecthomas/chroma/v2" // nolint
|
|
)
|
|
|
|
// Markless lexer.
|
|
var Markless = Register(MustNewLexer(
|
|
&Config{
|
|
Name: "Markless",
|
|
Aliases: []string{"mess"},
|
|
Filenames: []string{"*.mess", "*.markless"},
|
|
MimeTypes: []string{"text/x-markless"},
|
|
},
|
|
marklessRules,
|
|
))
|
|
|
|
func marklessRules() Rules {
|
|
return Rules{
|
|
"root": {
|
|
Include("block"),
|
|
},
|
|
// Block directives
|
|
"block": {
|
|
Include("header"),
|
|
Include("ordered-list"),
|
|
Include("unordered-list"),
|
|
Include("code-block"),
|
|
Include("blockquote"),
|
|
Include("blockquote-header"),
|
|
Include("align"),
|
|
Include("comment"),
|
|
Include("instruction"),
|
|
Include("embed"),
|
|
Include("footnote"),
|
|
Include("horizontal-rule"),
|
|
Include("paragraph"),
|
|
},
|
|
"header": {
|
|
{`(# )(.*)$`, ByGroups(Keyword, GenericHeading), Push("inline")},
|
|
{`(##+)(.*)$`, ByGroups(Keyword, GenericSubheading), Push("inline")},
|
|
},
|
|
"ordered-list": {
|
|
{`([0-9]+\.)`, Keyword, nil},
|
|
},
|
|
"unordered-list": {
|
|
{`(- )`, Keyword, nil},
|
|
},
|
|
"code-block": {
|
|
{`(::+)( *)(\w*)([^\n]*)(\n)([\w\W]*?)(^\1$)`, UsingByGroup(3, 6, Keyword, TextWhitespace, NameFunction, String, TextWhitespace, Text, Keyword), nil},
|
|
},
|
|
"blockquote": {
|
|
{`(\| )(.*)$`, ByGroups(Keyword, GenericInserted), nil},
|
|
},
|
|
"blockquote-header": {
|
|
{`(~ )([^|\n]+)(\| )(.*?\n)`, ByGroups(Keyword, NameEntity, Keyword, GenericInserted), Push("inline-blockquote")},
|
|
{`(~ )(.*)$`, ByGroups(Keyword, NameEntity), nil},
|
|
},
|
|
"inline-blockquote": {
|
|
{`^( +)(\| )(.*$)`, ByGroups(TextWhitespace, Keyword, GenericInserted), nil},
|
|
Default(Pop(1)),
|
|
},
|
|
"align": {
|
|
{`(\|\|)|(\|<)|(\|>)|(><)`, Keyword, nil},
|
|
},
|
|
"comment": {
|
|
{`(;[; ]).*?$`, CommentSingle, nil},
|
|
},
|
|
"instruction": {
|
|
{`(! )([^ ]+)(.+?)$`, ByGroups(Keyword, NameFunction, NameVariable), nil},
|
|
},
|
|
"embed": {
|
|
{`(\[ )([^ ]+)( )([^,]+)`, ByGroups(Keyword, NameFunction, TextWhitespace, String), Push("embed-options")},
|
|
},
|
|
"embed-options": {
|
|
{`\\.`, Text, nil},
|
|
{`,`, Punctuation, nil},
|
|
{`\]?$`, Keyword, Pop(1)},
|
|
// Generic key or key/value pair
|
|
{`( *)([^, \]]+)([^,\]]+)?`, ByGroups(TextWhitespace, NameFunction, String), nil},
|
|
{`.`, Text, nil},
|
|
},
|
|
"footnote": {
|
|
{`(\[)([0-9]+)(\])`, ByGroups(Keyword, NameVariable, Keyword), Push("inline")},
|
|
},
|
|
"horizontal-rule": {
|
|
{`(==+)$`, LiteralOther, nil},
|
|
},
|
|
"paragraph": {
|
|
{` *`, TextWhitespace, Push("inline")},
|
|
},
|
|
// Inline directives
|
|
"inline": {
|
|
Include("escapes"),
|
|
Include("dashes"),
|
|
Include("newline"),
|
|
Include("italic"),
|
|
Include("underline"),
|
|
Include("bold"),
|
|
Include("strikethrough"),
|
|
Include("code"),
|
|
Include("compound"),
|
|
Include("footnote-reference"),
|
|
Include("subtext"),
|
|
Include("subtext"),
|
|
Include("url"),
|
|
{`.`, Text, nil},
|
|
{`\n`, TextWhitespace, Pop(1)},
|
|
},
|
|
"escapes": {
|
|
{`\\.`, Text, nil},
|
|
},
|
|
"dashes": {
|
|
{`-{2,3}`, TextPunctuation, nil},
|
|
},
|
|
"newline": {
|
|
{`-/-`, TextWhitespace, nil},
|
|
},
|
|
"italic": {
|
|
{`(//)(.*?)(\1)`, ByGroups(Keyword, GenericEmph, Keyword), nil},
|
|
},
|
|
"underline": {
|
|
{`(__)(.*?)(\1)`, ByGroups(Keyword, GenericUnderline, Keyword), nil},
|
|
},
|
|
"bold": {
|
|
{`(\*\*)(.*?)(\1)`, ByGroups(Keyword, GenericStrong, Keyword), nil},
|
|
},
|
|
"strikethrough": {
|
|
{`(<-)(.*?)(->)`, ByGroups(Keyword, GenericDeleted, Keyword), nil},
|
|
},
|
|
"code": {
|
|
{"(``+)(.*?)(\\1)", ByGroups(Keyword, LiteralStringBacktick, Keyword), nil},
|
|
},
|
|
"compound": {
|
|
{`(''+)(.*?)(''\()`, ByGroups(Keyword, UsingSelf("inline"), Keyword), Push("compound-options")},
|
|
},
|
|
"compound-options": {
|
|
{`\\.`, Text, nil},
|
|
{`,`, Punctuation, nil},
|
|
{`\)`, Keyword, Pop(1)},
|
|
// Hex Color
|
|
{` *#[0-9A-Fa-f]{3,6} *`, LiteralNumberHex, nil},
|
|
// Named Color
|
|
{` *(indian-red|light-coral|salmon|dark-salmon|light-salmon|crimson|red|firebrick|dark-red|pink|light-pink|hot-pink|deep-pink|medium-violet-red|pale-violet-red|coral|tomato|orange-red|dark-orange|orange|gold|yellow|light-yellow|lemon-chiffon|light-goldenrod-yellow|papayawhip|moccasin|peachpuff|pale-goldenrod|khaki|dark-khaki|lavender|thistle|plum|violet|orchid|fuchsia|magenta|medium-orchid|medium-purple|rebecca-purple|blue-violet|dark-violet|dark-orchid|dark-magenta|purple|indigo|slate-blue|dark-slate-blue|medium-slate-blue|green-yellow|chartreuse|lawn-green|lime|lime-green|pale-green|light-green|medium-spring-green|spring-green|medium-sea-green|sea-green|forest-green|green|dark-green|yellow-green|olive-drab|olive|dark-olive-green|medium-aquamarine|dark-sea-green|light-sea-green|dark-cyan|teal|aqua|cyan|light-cyan|pale-turquoise|aquamarine|turquoise|medium-turquoise|dark-turquoise|cadet-blue|steel-blue|light-steel-blue|powder-blue|light-blue|sky-blue|light-sky-blue|deep-sky-blue|dodger-blue|cornflower-blue|royal-blue|blue|medium-blue|dark-blue|navy|midnight-blue|cornsilk|blanched-almond|bisque|navajo-white|wheat|burlywood|tan|rosy-brown|sandy-brown|goldenrod|dark-goldenrod|peru|chocolate|saddle-brown|sienna|brown|maroon|white|snow|honeydew|mintcream|azure|alice-blue|ghost-white|white-smoke|seashell|beige|oldlace|floral-white|ivory|antique-white|linen|lavenderblush|mistyrose|gainsboro|light-gray|silver|dark-gray|gray|dim-gray|light-slate-gray|slate-gray|dark-slate-gray) *`, LiteralOther, nil},
|
|
// Named size
|
|
{` *(microscopic|tiny|small|normal|big|large|huge|gigantic) *`, NameTag, nil},
|
|
// Options
|
|
{` *(bold|italic|underline|strikethrough|subtext|supertext|spoiler) *`, NameBuiltin, nil},
|
|
// URL. Note the missing ) and , in the match.
|
|
{` *\w[-\w+.]*://[\w$\-_.+!*'(&/:;=?@z%#\\]+ *`, String, nil},
|
|
// Generic key or key/value pair
|
|
{`( *)([^, )]+)( [^,)]+)?`, ByGroups(TextWhitespace, NameFunction, String), nil},
|
|
{`.`, Text, nil},
|
|
},
|
|
"footnote-reference": {
|
|
{`(\[)([0-9]+)(\])`, ByGroups(Keyword, NameVariable, Keyword), nil},
|
|
},
|
|
"subtext": {
|
|
{`(v\()(.*?)(\))`, ByGroups(Keyword, UsingSelf("inline"), Keyword), nil},
|
|
},
|
|
"supertext": {
|
|
{`(\^\()(.*?)(\))`, ByGroups(Keyword, UsingSelf("inline"), Keyword), nil},
|
|
},
|
|
"url": {
|
|
{`\w[-\w+.]*://[\w\$\-_.+!*'()&,/:;=?@z%#\\]+`, String, nil},
|
|
},
|
|
}
|
|
}
|