| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | // 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 highlightimport (	"path"	"strings"	"github.com/gogs/gogs/pkg/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{		"cmakelists.txt": true,		"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{		".txt": "nohighlight",	})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 ""}
 |