mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	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:
		
							
								
								
									
										114
									
								
								vendor/github.com/alecthomas/chroma/lexers/a/ada.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								vendor/github.com/alecthomas/chroma/lexers/a/ada.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | ||||
| package a | ||||
|  | ||||
| import ( | ||||
| 	. "github.com/alecthomas/chroma" // nolint | ||||
| 	"github.com/alecthomas/chroma/lexers/internal" | ||||
| ) | ||||
|  | ||||
| // Ada lexer. | ||||
| var Ada = internal.Register(MustNewLexer( | ||||
| 	&Config{ | ||||
| 		Name:            "Ada", | ||||
| 		Aliases:         []string{"ada", "ada95", "ada2005"}, | ||||
| 		Filenames:       []string{"*.adb", "*.ads", "*.ada"}, | ||||
| 		MimeTypes:       []string{"text/x-ada"}, | ||||
| 		CaseInsensitive: true, | ||||
| 	}, | ||||
| 	Rules{ | ||||
| 		"root": { | ||||
| 			{`[^\S\n]+`, Text, nil}, | ||||
| 			{`--.*?\n`, CommentSingle, nil}, | ||||
| 			{`[^\S\n]+`, Text, nil}, | ||||
| 			{`function|procedure|entry`, KeywordDeclaration, Push("subprogram")}, | ||||
| 			{`(subtype|type)(\s+)(\w+)`, ByGroups(KeywordDeclaration, Text, KeywordType), Push("type_def")}, | ||||
| 			{`task|protected`, KeywordDeclaration, nil}, | ||||
| 			{`(subtype)(\s+)`, ByGroups(KeywordDeclaration, Text), nil}, | ||||
| 			{`(end)(\s+)`, ByGroups(KeywordReserved, Text), Push("end")}, | ||||
| 			{`(pragma)(\s+)(\w+)`, ByGroups(KeywordReserved, Text, CommentPreproc), nil}, | ||||
| 			{`(true|false|null)\b`, KeywordConstant, nil}, | ||||
| 			{Words(``, `\b`, `Address`, `Byte`, `Boolean`, `Character`, `Controlled`, `Count`, `Cursor`, `Duration`, `File_Mode`, `File_Type`, `Float`, `Generator`, `Integer`, `Long_Float`, `Long_Integer`, `Long_Long_Float`, `Long_Long_Integer`, `Natural`, `Positive`, `Reference_Type`, `Short_Float`, `Short_Integer`, `Short_Short_Float`, `Short_Short_Integer`, `String`, `Wide_Character`, `Wide_String`), KeywordType, nil}, | ||||
| 			{`(and(\s+then)?|in|mod|not|or(\s+else)|rem)\b`, OperatorWord, nil}, | ||||
| 			{`generic|private`, KeywordDeclaration, nil}, | ||||
| 			{`package`, KeywordDeclaration, Push("package")}, | ||||
| 			{`array\b`, KeywordReserved, Push("array_def")}, | ||||
| 			{`(with|use)(\s+)`, ByGroups(KeywordNamespace, Text), Push("import")}, | ||||
| 			{`(\w+)(\s*)(:)(\s*)(constant)`, ByGroups(NameConstant, Text, Punctuation, Text, KeywordReserved), nil}, | ||||
| 			{`<<\w+>>`, NameLabel, nil}, | ||||
| 			{`(\w+)(\s*)(:)(\s*)(declare|begin|loop|for|while)`, ByGroups(NameLabel, Text, Punctuation, Text, KeywordReserved), nil}, | ||||
| 			{Words(`\b`, `\b`, `abort`, `abs`, `abstract`, `accept`, `access`, `aliased`, `all`, `array`, `at`, `begin`, `body`, `case`, `constant`, `declare`, `delay`, `delta`, `digits`, `do`, `else`, `elsif`, `end`, `entry`, `exception`, `exit`, `interface`, `for`, `goto`, `if`, `is`, `limited`, `loop`, `new`, `null`, `of`, `or`, `others`, `out`, `overriding`, `pragma`, `protected`, `raise`, `range`, `record`, `renames`, `requeue`, `return`, `reverse`, `select`, `separate`, `subtype`, `synchronized`, `task`, `tagged`, `terminate`, `then`, `type`, `until`, `when`, `while`, `xor`), KeywordReserved, nil}, | ||||
| 			{`"[^"]*"`, LiteralString, nil}, | ||||
| 			Include("attribute"), | ||||
| 			Include("numbers"), | ||||
| 			{`'[^']'`, LiteralStringChar, nil}, | ||||
| 			{`(\w+)(\s*|[(,])`, ByGroups(Name, UsingSelf("root")), nil}, | ||||
| 			{`(<>|=>|:=|[()|:;,.'])`, Punctuation, nil}, | ||||
| 			{`[*<>+=/&-]`, Operator, nil}, | ||||
| 			{`\n+`, Text, nil}, | ||||
| 		}, | ||||
| 		"numbers": { | ||||
| 			{`[0-9_]+#[0-9a-f]+#`, LiteralNumberHex, nil}, | ||||
| 			{`[0-9_]+\.[0-9_]*`, LiteralNumberFloat, nil}, | ||||
| 			{`[0-9_]+`, LiteralNumberInteger, nil}, | ||||
| 		}, | ||||
| 		"attribute": { | ||||
| 			{`(')(\w+)`, ByGroups(Punctuation, NameAttribute), nil}, | ||||
| 		}, | ||||
| 		"subprogram": { | ||||
| 			{`\(`, Punctuation, Push("#pop", "formal_part")}, | ||||
| 			{`;`, Punctuation, Pop(1)}, | ||||
| 			{`is\b`, KeywordReserved, Pop(1)}, | ||||
| 			{`"[^"]+"|\w+`, NameFunction, nil}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"end": { | ||||
| 			{`(if|case|record|loop|select)`, KeywordReserved, nil}, | ||||
| 			{`"[^"]+"|[\w.]+`, NameFunction, nil}, | ||||
| 			{`\s+`, Text, nil}, | ||||
| 			{`;`, Punctuation, Pop(1)}, | ||||
| 		}, | ||||
| 		"type_def": { | ||||
| 			{`;`, Punctuation, Pop(1)}, | ||||
| 			{`\(`, Punctuation, Push("formal_part")}, | ||||
| 			{`with|and|use`, KeywordReserved, nil}, | ||||
| 			{`array\b`, KeywordReserved, Push("#pop", "array_def")}, | ||||
| 			{`record\b`, KeywordReserved, Push("record_def")}, | ||||
| 			{`(null record)(;)`, ByGroups(KeywordReserved, Punctuation), Pop(1)}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"array_def": { | ||||
| 			{`;`, Punctuation, Pop(1)}, | ||||
| 			{`(\w+)(\s+)(range)`, ByGroups(KeywordType, Text, KeywordReserved), nil}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"record_def": { | ||||
| 			{`end record`, KeywordReserved, Pop(1)}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"import": { | ||||
| 			{`[\w.]+`, NameNamespace, Pop(1)}, | ||||
| 			Default(Pop(1)), | ||||
| 		}, | ||||
| 		"formal_part": { | ||||
| 			{`\)`, Punctuation, Pop(1)}, | ||||
| 			{`\w+`, NameVariable, nil}, | ||||
| 			{`,|:[^=]`, Punctuation, nil}, | ||||
| 			{`(in|not|null|out|access)\b`, KeywordReserved, nil}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"package": { | ||||
| 			{`body`, KeywordDeclaration, nil}, | ||||
| 			{`is\s+new|renames`, KeywordReserved, nil}, | ||||
| 			{`is`, KeywordReserved, Pop(1)}, | ||||
| 			{`;`, Punctuation, Pop(1)}, | ||||
| 			{`\(`, Punctuation, Push("package_instantiation")}, | ||||
| 			{`([\w.]+)`, NameClass, nil}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 		"package_instantiation": { | ||||
| 			{`("[^"]+"|\w+)(\s+)(=>)`, ByGroups(NameVariable, Text, Punctuation), nil}, | ||||
| 			{`[\w.\'"]`, Text, nil}, | ||||
| 			{`\)`, Punctuation, Pop(1)}, | ||||
| 			Include("root"), | ||||
| 		}, | ||||
| 	}, | ||||
| )) | ||||
		Reference in New Issue
	
	Block a user