mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	* 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>
		
			
				
	
	
		
			92 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package circular
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 
 | |
| 	. "github.com/alecthomas/chroma" // nolint
 | |
| 	"github.com/alecthomas/chroma/lexers/h"
 | |
| 	"github.com/alecthomas/chroma/lexers/internal"
 | |
| )
 | |
| 
 | |
| // PHP lexer.
 | |
| var PHP = internal.Register(DelegatingLexer(h.HTML, MustNewLexer(
 | |
| 	&Config{
 | |
| 		Name:            "PHP",
 | |
| 		Aliases:         []string{"php", "php3", "php4", "php5"},
 | |
| 		Filenames:       []string{"*.php", "*.php[345]", "*.inc"},
 | |
| 		MimeTypes:       []string{"text/x-php"},
 | |
| 		DotAll:          true,
 | |
| 		CaseInsensitive: true,
 | |
| 		EnsureNL:        true,
 | |
| 	},
 | |
| 	Rules{
 | |
| 		"root": {
 | |
| 			{`<\?(php)?`, CommentPreproc, Push("php")},
 | |
| 			{`[^<]+`, Other, nil},
 | |
| 			{`<`, Other, nil},
 | |
| 		},
 | |
| 		"php": {
 | |
| 			{`\?>`, CommentPreproc, Pop(1)},
 | |
| 			{`(<<<)([\'"]?)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)(\2\n.*?\n\s*)(\3)(;?)(\n)`, ByGroups(LiteralString, LiteralString, LiteralStringDelimiter, LiteralString, LiteralStringDelimiter, Punctuation, Text), nil},
 | |
| 			{`\s+`, Text, nil},
 | |
| 			{`#.*?\n`, CommentSingle, nil},
 | |
| 			{`//.*?\n`, CommentSingle, nil},
 | |
| 			{`/\*\*/`, CommentMultiline, nil},
 | |
| 			{`/\*\*.*?\*/`, LiteralStringDoc, nil},
 | |
| 			{`/\*.*?\*/`, CommentMultiline, nil},
 | |
| 			{`(->|::)(\s*)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)`, ByGroups(Operator, Text, NameAttribute), nil},
 | |
| 			{`[~!%^&*+=|:.<>/@-]+`, Operator, nil},
 | |
| 			{`\?`, Operator, nil},
 | |
| 			{`[\[\]{}();,]+`, Punctuation, nil},
 | |
| 			{`(class)(\s+)`, ByGroups(Keyword, Text), Push("classname")},
 | |
| 			{`(function)(\s*)(?=\()`, ByGroups(Keyword, Text), nil},
 | |
| 			{`(function)(\s+)(&?)(\s*)`, ByGroups(Keyword, Text, Operator, Text), Push("functionname")},
 | |
| 			{`(const)(\s+)((?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)`, ByGroups(Keyword, Text, NameConstant), nil},
 | |
| 			{`(and|E_PARSE|old_function|E_ERROR|or|as|E_WARNING|parent|eval|PHP_OS|break|exit|case|extends|PHP_VERSION|cfunction|FALSE|print|for|require|continue|foreach|require_once|declare|return|default|static|do|switch|die|stdClass|echo|else|TRUE|elseif|var|empty|if|xor|enddeclare|include|virtual|endfor|include_once|while|endforeach|global|endif|list|endswitch|new|endwhile|not|array|E_ALL|NULL|final|php_user_filter|interface|implements|public|private|protected|abstract|clone|try|catch|throw|this|use|namespace|trait|yield|finally)\b`, Keyword, nil},
 | |
| 			{`(true|false|null)\b`, KeywordConstant, nil},
 | |
| 			Include("magicconstants"),
 | |
| 			{`\$\{\$+(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*\}`, NameVariable, nil},
 | |
| 			{`\$+(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameVariable, nil},
 | |
| 			{`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameOther, nil},
 | |
| 			{`(\d+\.\d*|\d*\.\d+)(e[+-]?[0-9]+)?`, LiteralNumberFloat, nil},
 | |
| 			{`\d+e[+-]?[0-9]+`, LiteralNumberFloat, nil},
 | |
| 			{`0[0-7]+`, LiteralNumberOct, nil},
 | |
| 			{`0x[a-f0-9]+`, LiteralNumberHex, nil},
 | |
| 			{`\d+`, LiteralNumberInteger, nil},
 | |
| 			{`0b[01]+`, LiteralNumberBin, nil},
 | |
| 			{`'([^'\\]*(?:\\.[^'\\]*)*)'`, LiteralStringSingle, nil},
 | |
| 			{"`([^`\\\\]*(?:\\\\.[^`\\\\]*)*)`", LiteralStringBacktick, nil},
 | |
| 			{`"`, LiteralStringDouble, Push("string")},
 | |
| 		},
 | |
| 		"magicfuncs": {
 | |
| 			{Words(``, `\b`, `__construct`, `__destruct`, `__call`, `__callStatic`, `__get`, `__set`, `__isset`, `__unset`, `__sleep`, `__wakeup`, `__toString`, `__invoke`, `__set_state`, `__clone`, `__debugInfo`), NameFunctionMagic, nil},
 | |
| 		},
 | |
| 		"magicconstants": {
 | |
| 			{Words(``, `\b`, `__LINE__`, `__FILE__`, `__DIR__`, `__FUNCTION__`, `__CLASS__`, `__TRAIT__`, `__METHOD__`, `__NAMESPACE__`), NameConstant, nil},
 | |
| 		},
 | |
| 		"classname": {
 | |
| 			{`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameClass, Pop(1)},
 | |
| 		},
 | |
| 		"functionname": {
 | |
| 			Include("magicfuncs"),
 | |
| 			{`(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*`, NameFunction, Pop(1)},
 | |
| 			Default(Pop(1)),
 | |
| 		},
 | |
| 		"string": {
 | |
| 			{`"`, LiteralStringDouble, Pop(1)},
 | |
| 			{`[^{$"\\]+`, LiteralStringDouble, nil},
 | |
| 			{`\\([nrt"$\\]|[0-7]{1,3}|x[0-9a-f]{1,2})`, LiteralStringEscape, nil},
 | |
| 			{`\$(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*(\[\S+?\]|->(?:[\\_a-z]|[^\x00-\x7f])(?:[\\\w]|[^\x00-\x7f])*)?`, LiteralStringInterpol, nil},
 | |
| 			{`(\{\$\{)(.*?)(\}\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil},
 | |
| 			{`(\{)(\$.*?)(\})`, ByGroups(LiteralStringInterpol, UsingSelf("root"), LiteralStringInterpol), nil},
 | |
| 			{`(\$\{)(\S+)(\})`, ByGroups(LiteralStringInterpol, NameVariable, LiteralStringInterpol), nil},
 | |
| 			{`[${\\]`, LiteralStringDouble, nil},
 | |
| 		},
 | |
| 	},
 | |
| ).SetAnalyser(func(text string) float32 {
 | |
| 	if strings.Contains(text, "<?php") {
 | |
| 		return 0.5
 | |
| 	}
 | |
| 	return 0.0
 | |
| })))
 |