diff options
Diffstat (limited to 'modules/highlight/highlight.go')
-rw-r--r-- | modules/highlight/highlight.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/modules/highlight/highlight.go b/modules/highlight/highlight.go new file mode 100644 index 0000000000..39b5d6d153 --- /dev/null +++ b/modules/highlight/highlight.go @@ -0,0 +1,98 @@ +// Copyright 2015 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package highlight + +import ( + "path" + "strings" + + "code.gitea.io/gitea/modules/setting" +) + +var ( + // File name should ignore highlight. + ignoreFileNames = map[string]bool{ + "license": true, + "copying": true, + } + + // File names that are representing highlight classes. + highlightFileNames = map[string]bool{ + "dockerfile": true, + "makefile": true, + } + + // Extensions that are same as highlight classes. + highlightExts = map[string]bool{ + ".arm": true, + ".as": true, + ".sh": true, + ".cs": true, + ".cpp": true, + ".c": true, + ".css": true, + ".cmake": true, + ".bat": true, + ".dart": true, + ".patch": true, + ".elixir": true, + ".erlang": true, + ".go": true, + ".html": true, + ".xml": true, + ".hs": true, + ".ini": true, + ".json": true, + ".java": true, + ".js": true, + ".less": true, + ".lua": true, + ".php": true, + ".py": true, + ".rb": true, + ".scss": true, + ".sql": true, + ".scala": true, + ".swift": true, + ".ts": true, + ".vb": true, + } + + // Extensions that are not same as highlight classes. + highlightMapping = map[string]string{} +) + +// NewContext loads highlight map +func NewContext() { + keys := setting.Cfg.Section("highlight.mapping").Keys() + for i := range keys { + highlightMapping[keys[i].Name()] = keys[i].Value() + } +} + +// FileNameToHighlightClass returns the best match for highlight class name +// based on the rule of highlight.js. +func FileNameToHighlightClass(fname string) string { + fname = strings.ToLower(fname) + if ignoreFileNames[fname] { + return "nohighlight" + } + + if highlightFileNames[fname] { + return fname + } + + ext := path.Ext(fname) + if highlightExts[ext] { + return ext[1:] + } + + name, ok := highlightMapping[ext] + if ok { + return name + } + + return "" +} |