forked from NYANDEV/forgejo
af7ffaa279
* 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>
69 lines
4.2 KiB
Go
Vendored
69 lines
4.2 KiB
Go
Vendored
package s
|
||
|
||
import (
|
||
. "github.com/alecthomas/chroma" // nolint
|
||
"github.com/alecthomas/chroma/lexers/internal"
|
||
)
|
||
|
||
// Sparql lexer.
|
||
var Sparql = internal.Register(MustNewLexer(
|
||
&Config{
|
||
Name: "SPARQL",
|
||
Aliases: []string{"sparql"},
|
||
Filenames: []string{"*.rq", "*.sparql"},
|
||
MimeTypes: []string{"application/sparql-query"},
|
||
},
|
||
Rules{
|
||
"root": {
|
||
{`\s+`, Text, nil},
|
||
{`((?i)select|construct|describe|ask|where|filter|group\s+by|minus|distinct|reduced|from\s+named|from|order\s+by|desc|asc|limit|offset|bindings|load|clear|drop|create|add|move|copy|insert\s+data|delete\s+data|delete\s+where|delete|insert|using\s+named|using|graph|default|named|all|optional|service|silent|bind|union|not\s+in|in|as|having|to|prefix|base)\b`, Keyword, nil},
|
||
{`(a)\b`, Keyword, nil},
|
||
{"(<(?:[^<>\"{}|^`\\\\\\x00-\\x20])*>)", NameLabel, nil},
|
||
{`(_:[0-9a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_](?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀.]*[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀])?)`, NameLabel, nil},
|
||
{`[?$][0-9a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_][a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_0-9·̀-ͯ‿-⁀]*`, NameVariable, nil},
|
||
{`([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>](?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀.]*[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀])?)?(\:)((?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_:0-9]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%]))(?:(?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀.:]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%]))*(?:[a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ--⁰-Ⰰ-、-豈-﷏ﷰ-<2D>_\-0-9·̀-ͯ‿-⁀:]|(?:%[0-9A-Fa-f][0-9A-Fa-f])|(?:\\[ _~.\-!$&"()*+,;=/?#@%])))?)?`, ByGroups(NameNamespace, Punctuation, NameTag), nil},
|
||
{`((?i)str|lang|langmatches|datatype|bound|iri|uri|bnode|rand|abs|ceil|floor|round|concat|strlen|ucase|lcase|encode_for_uri|contains|strstarts|strends|strbefore|strafter|year|month|day|hours|minutes|seconds|timezone|tz|now|md5|sha1|sha256|sha384|sha512|coalesce|if|strlang|strdt|sameterm|isiri|isuri|isblank|isliteral|isnumeric|regex|substr|replace|exists|not\s+exists|count|sum|min|max|avg|sample|group_concat|separator)\b`, NameFunction, nil},
|
||
{`(true|false)`, KeywordConstant, nil},
|
||
{`[+\-]?(\d+\.\d*[eE][+-]?\d+|\.?\d+[eE][+-]?\d+)`, LiteralNumberFloat, nil},
|
||
{`[+\-]?(\d+\.\d*|\.\d+)`, LiteralNumberFloat, nil},
|
||
{`[+\-]?\d+`, LiteralNumberInteger, nil},
|
||
{`(\|\||&&|=|\*|\-|\+|/|!=|<=|>=|!|<|>)`, Operator, nil},
|
||
{`[(){}.;,:^\[\]]`, Punctuation, nil},
|
||
{`#[^\n]*`, Comment, nil},
|
||
{`"""`, LiteralString, Push("triple-double-quoted-string")},
|
||
{`"`, LiteralString, Push("single-double-quoted-string")},
|
||
{`'''`, LiteralString, Push("triple-single-quoted-string")},
|
||
{`'`, LiteralString, Push("single-single-quoted-string")},
|
||
},
|
||
"triple-double-quoted-string": {
|
||
{`"""`, LiteralString, Push("end-of-string")},
|
||
{`[^\\]+`, LiteralString, nil},
|
||
{`\\`, LiteralString, Push("string-escape")},
|
||
},
|
||
"single-double-quoted-string": {
|
||
{`"`, LiteralString, Push("end-of-string")},
|
||
{`[^"\\\n]+`, LiteralString, nil},
|
||
{`\\`, LiteralString, Push("string-escape")},
|
||
},
|
||
"triple-single-quoted-string": {
|
||
{`'''`, LiteralString, Push("end-of-string")},
|
||
{`[^\\]+`, LiteralString, nil},
|
||
{`\\`, LiteralStringEscape, Push("string-escape")},
|
||
},
|
||
"single-single-quoted-string": {
|
||
{`'`, LiteralString, Push("end-of-string")},
|
||
{`[^'\\\n]+`, LiteralString, nil},
|
||
{`\\`, LiteralString, Push("string-escape")},
|
||
},
|
||
"string-escape": {
|
||
{`u[0-9A-Fa-f]{4}`, LiteralStringEscape, Pop(1)},
|
||
{`U[0-9A-Fa-f]{8}`, LiteralStringEscape, Pop(1)},
|
||
{`.`, LiteralStringEscape, Pop(1)},
|
||
},
|
||
"end-of-string": {
|
||
{`(@)([a-zA-Z]+(?:-[a-zA-Z0-9]+)*)`, ByGroups(Operator, NameFunction), Pop(2)},
|
||
{`\^\^`, Operator, Pop(2)},
|
||
Default(Pop(2)),
|
||
},
|
||
},
|
||
))
|