forked from forgejo/forgejo
Server-side syntax highlighting for all code (#12047)
* Server-side syntax hilighting for all code This PR does a few things: * Remove all traces of highlight.js * Use chroma library to provide fast syntax hilighting directly on the server * Provide syntax hilighting for diffs * Re-style both unified and split diffs views * Add custom syntax hilighting styling for both regular and arc-green Fixes #7729 Fixes #10157 Fixes #11825 Fixes #7728 Fixes #3872 Fixes #3682 And perhaps gets closer to #9553 * fix line marker * fix repo search * Fix single line select * properly load settings * npm uninstall highlight.js * review suggestion * code review * forgot to call function * fix test * Apply suggestions from code review suggestions from @silverwind thanks Co-authored-by: silverwind <me@silverwind.io> * code review * copy/paste error * Use const for highlight size limit * Update web_src/less/_repository.less Co-authored-by: Lauris BH <lauris@nix.lv> * update size limit to 1MB and other styling tweaks * fix highlighting for certain diff sections * fix test * add worker back as suggested Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Lauris BH <lauris@nix.lv>
This commit is contained in:
parent
ce5f2b9845
commit
af7ffaa279
336 changed files with 37293 additions and 769 deletions
200
vendor/github.com/alecthomas/chroma/lexers/s/sml.go
generated
vendored
Normal file
200
vendor/github.com/alecthomas/chroma/lexers/s/sml.go
generated
vendored
Normal file
|
@ -0,0 +1,200 @@
|
|||
package s
|
||||
|
||||
import (
|
||||
. "github.com/alecthomas/chroma" // nolint
|
||||
"github.com/alecthomas/chroma/lexers/internal"
|
||||
)
|
||||
|
||||
// Standard ML lexer.
|
||||
var StandardML = internal.Register(MustNewLexer(
|
||||
&Config{
|
||||
Name: "Standard ML",
|
||||
Aliases: []string{"sml"},
|
||||
Filenames: []string{"*.sml", "*.sig", "*.fun"},
|
||||
MimeTypes: []string{"text/x-standardml", "application/x-standardml"},
|
||||
},
|
||||
Rules{
|
||||
"whitespace": {
|
||||
{`\s+`, Text, nil},
|
||||
{`\(\*`, CommentMultiline, Push("comment")},
|
||||
},
|
||||
"delimiters": {
|
||||
{`\(|\[|\{`, Punctuation, Push("main")},
|
||||
{`\)|\]|\}`, Punctuation, Pop(1)},
|
||||
{`\b(let|if|local)\b(?!\')`, KeywordReserved, Push("main", "main")},
|
||||
{`\b(struct|sig|while)\b(?!\')`, KeywordReserved, Push("main")},
|
||||
{`\b(do|else|end|in|then)\b(?!\')`, KeywordReserved, Pop(1)},
|
||||
},
|
||||
"core": {
|
||||
{`(_|\}|\{|\)|;|,|\[|\(|\]|\.\.\.)`, Punctuation, nil},
|
||||
{`#"`, LiteralStringChar, Push("char")},
|
||||
{`"`, LiteralStringDouble, Push("string")},
|
||||
{`~?0x[0-9a-fA-F]+`, LiteralNumberHex, nil},
|
||||
{`0wx[0-9a-fA-F]+`, LiteralNumberHex, nil},
|
||||
{`0w\d+`, LiteralNumberInteger, nil},
|
||||
{`~?\d+\.\d+[eE]~?\d+`, LiteralNumberFloat, nil},
|
||||
{`~?\d+\.\d+`, LiteralNumberFloat, nil},
|
||||
{`~?\d+[eE]~?\d+`, LiteralNumberFloat, nil},
|
||||
{`~?\d+`, LiteralNumberInteger, nil},
|
||||
{`#\s*[1-9][0-9]*`, NameLabel, nil},
|
||||
{`#\s*([a-zA-Z][\w']*)`, NameLabel, nil},
|
||||
{"#\\s+([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameLabel, nil},
|
||||
{`\b(datatype|abstype)\b(?!\')`, KeywordReserved, Push("dname")},
|
||||
{`(?=\b(exception)\b(?!\'))`, Text, Push("ename")},
|
||||
{`\b(functor|include|open|signature|structure)\b(?!\')`, KeywordReserved, Push("sname")},
|
||||
{`\b(type|eqtype)\b(?!\')`, KeywordReserved, Push("tname")},
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`([a-zA-Z][\w']*)(\.)`, NameNamespace, Push("dotted")},
|
||||
{`\b(abstype|and|andalso|as|case|datatype|do|else|end|exception|fn|fun|handle|if|in|infix|infixr|let|local|nonfix|of|op|open|orelse|raise|rec|then|type|val|with|withtype|while|eqtype|functor|include|sharing|sig|signature|struct|structure|where)\b`, KeywordReserved, nil},
|
||||
{`([a-zA-Z][\w']*)`, Name, nil},
|
||||
{`\b(:|\|,=|=>|->|#|:>)\b`, KeywordReserved, nil},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Name, nil},
|
||||
},
|
||||
"dotted": {
|
||||
{`([a-zA-Z][\w']*)(\.)`, NameNamespace, nil},
|
||||
// ignoring reserved words
|
||||
{`([a-zA-Z][\w']*)`, Name, Pop(1)},
|
||||
// ignoring reserved words
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Name, Pop(1)},
|
||||
{`\s+`, Error, nil},
|
||||
{`\S+`, Error, nil},
|
||||
},
|
||||
"root": {
|
||||
Default(Push("main")),
|
||||
},
|
||||
"main": {
|
||||
Include("whitespace"),
|
||||
{`\b(val|and)\b(?!\')`, KeywordReserved, Push("vname")},
|
||||
{`\b(fun)\b(?!\')`, KeywordReserved, Push("#pop", "main-fun", "fname")},
|
||||
Include("delimiters"),
|
||||
Include("core"),
|
||||
{`\S+`, Error, nil},
|
||||
},
|
||||
"main-fun": {
|
||||
Include("whitespace"),
|
||||
{`\s`, Text, nil},
|
||||
{`\(\*`, CommentMultiline, Push("comment")},
|
||||
{`\b(fun|and)\b(?!\')`, KeywordReserved, Push("fname")},
|
||||
{`\b(val)\b(?!\')`, KeywordReserved, Push("#pop", "main", "vname")},
|
||||
{`\|`, Punctuation, Push("fname")},
|
||||
{`\b(case|handle)\b(?!\')`, KeywordReserved, Push("#pop", "main")},
|
||||
Include("delimiters"),
|
||||
Include("core"),
|
||||
{`\S+`, Error, nil},
|
||||
},
|
||||
"char": {
|
||||
{`[^"\\]`, LiteralStringChar, nil},
|
||||
{`\\[\\"abtnvfr]`, LiteralStringEscape, nil},
|
||||
{`\\\^[\x40-\x5e]`, LiteralStringEscape, nil},
|
||||
{`\\[0-9]{3}`, LiteralStringEscape, nil},
|
||||
{`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil},
|
||||
{`\\\s+\\`, LiteralStringInterpol, nil},
|
||||
{`"`, LiteralStringChar, Pop(1)},
|
||||
},
|
||||
"string": {
|
||||
{`[^"\\]`, LiteralStringDouble, nil},
|
||||
{`\\[\\"abtnvfr]`, LiteralStringEscape, nil},
|
||||
{`\\\^[\x40-\x5e]`, LiteralStringEscape, nil},
|
||||
{`\\[0-9]{3}`, LiteralStringEscape, nil},
|
||||
{`\\u[0-9a-fA-F]{4}`, LiteralStringEscape, nil},
|
||||
{`\\\s+\\`, LiteralStringInterpol, nil},
|
||||
{`"`, LiteralStringDouble, Pop(1)},
|
||||
},
|
||||
"breakout": {
|
||||
{`(?=\b(where|do|handle|if|sig|op|while|case|as|else|signature|andalso|struct|infixr|functor|in|structure|then|local|rec|end|fun|of|orelse|val|include|fn|with|exception|let|and|infix|sharing|datatype|type|abstype|withtype|eqtype|nonfix|raise|open)\b(?!\'))`, Text, Pop(1)},
|
||||
},
|
||||
"sname": {
|
||||
Include("whitespace"),
|
||||
Include("breakout"),
|
||||
{`([a-zA-Z][\w']*)`, NameNamespace, nil},
|
||||
Default(Pop(1)),
|
||||
},
|
||||
"fname": {
|
||||
Include("whitespace"),
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`\(`, Punctuation, Push("tyvarseq")},
|
||||
{`([a-zA-Z][\w']*)`, NameFunction, Pop(1)},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameFunction, Pop(1)},
|
||||
Default(Pop(1)),
|
||||
},
|
||||
"vname": {
|
||||
Include("whitespace"),
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`\(`, Punctuation, Push("tyvarseq")},
|
||||
{"([a-zA-Z][\\w']*)(\\s*)(=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+))", ByGroups(NameVariable, Text, Punctuation), Pop(1)},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)(\\s*)(=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+))", ByGroups(NameVariable, Text, Punctuation), Pop(1)},
|
||||
{`([a-zA-Z][\w']*)`, NameVariable, Pop(1)},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameVariable, Pop(1)},
|
||||
Default(Pop(1)),
|
||||
},
|
||||
"tname": {
|
||||
Include("whitespace"),
|
||||
Include("breakout"),
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`\(`, Punctuation, Push("tyvarseq")},
|
||||
{"=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Punctuation, Push("#pop", "typbind")},
|
||||
{`([a-zA-Z][\w']*)`, KeywordType, nil},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", KeywordType, nil},
|
||||
{`\S+`, Error, Pop(1)},
|
||||
},
|
||||
"typbind": {
|
||||
Include("whitespace"),
|
||||
{`\b(and)\b(?!\')`, KeywordReserved, Push("#pop", "tname")},
|
||||
Include("breakout"),
|
||||
Include("core"),
|
||||
{`\S+`, Error, Pop(1)},
|
||||
},
|
||||
"dname": {
|
||||
Include("whitespace"),
|
||||
Include("breakout"),
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`\(`, Punctuation, Push("tyvarseq")},
|
||||
{`(=)(\s*)(datatype)`, ByGroups(Punctuation, Text, KeywordReserved), Pop(1)},
|
||||
{"=(?![!%&$#+\\-/:<=>?@\\\\~`^|*]+)", Punctuation, Push("#pop", "datbind", "datcon")},
|
||||
{`([a-zA-Z][\w']*)`, KeywordType, nil},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", KeywordType, nil},
|
||||
{`\S+`, Error, Pop(1)},
|
||||
},
|
||||
"datbind": {
|
||||
Include("whitespace"),
|
||||
{`\b(and)\b(?!\')`, KeywordReserved, Push("#pop", "dname")},
|
||||
{`\b(withtype)\b(?!\')`, KeywordReserved, Push("#pop", "tname")},
|
||||
{`\b(of)\b(?!\')`, KeywordReserved, nil},
|
||||
{`(\|)(\s*)([a-zA-Z][\w']*)`, ByGroups(Punctuation, Text, NameClass), nil},
|
||||
{"(\\|)(\\s+)([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", ByGroups(Punctuation, Text, NameClass), nil},
|
||||
Include("breakout"),
|
||||
Include("core"),
|
||||
{`\S+`, Error, nil},
|
||||
},
|
||||
"ename": {
|
||||
Include("whitespace"),
|
||||
{`(exception|and)\b(\s+)([a-zA-Z][\w']*)`, ByGroups(KeywordReserved, Text, NameClass), nil},
|
||||
{"(exception|and)\\b(\\s*)([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", ByGroups(KeywordReserved, Text, NameClass), nil},
|
||||
{`\b(of)\b(?!\')`, KeywordReserved, nil},
|
||||
Include("breakout"),
|
||||
Include("core"),
|
||||
{`\S+`, Error, nil},
|
||||
},
|
||||
"datcon": {
|
||||
Include("whitespace"),
|
||||
{`([a-zA-Z][\w']*)`, NameClass, Pop(1)},
|
||||
{"([!%&$#+\\-/:<=>?@\\\\~`^|*]+)", NameClass, Pop(1)},
|
||||
{`\S+`, Error, Pop(1)},
|
||||
},
|
||||
"tyvarseq": {
|
||||
{`\s`, Text, nil},
|
||||
{`\(\*`, CommentMultiline, Push("comment")},
|
||||
{`\'[\w\']*`, NameDecorator, nil},
|
||||
{`[a-zA-Z][\w']*`, Name, nil},
|
||||
{`,`, Punctuation, nil},
|
||||
{`\)`, Punctuation, Pop(1)},
|
||||
{"[!%&$#+\\-/:<=>?@\\\\~`^|*]+", Name, nil},
|
||||
},
|
||||
"comment": {
|
||||
{`[^(*)]`, CommentMultiline, nil},
|
||||
{`\(\*`, CommentMultiline, Push()},
|
||||
{`\*\)`, CommentMultiline, Pop(1)},
|
||||
{`[(*)]`, CommentMultiline, nil},
|
||||
},
|
||||
},
|
||||
))
|
Loading…
Add table
Add a link
Reference in a new issue