2015-12-16 22:13:12 -05:00
// 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.
2016-01-31 14:19:02 -02:00
package highlight
2015-12-16 22:13:12 -05:00
import (
"path"
"strings"
2015-12-17 22:31:34 -05:00
2016-11-10 17:24:48 +01:00
"code.gitea.io/gitea/modules/setting"
2015-12-16 22:13:12 -05:00
)
var (
// File name should ignore highlight.
ignoreFileNames = map [ string ] bool {
"license" : true ,
"copying" : true ,
}
2015-12-17 22:31:34 -05:00
// File names that are representing highlight classes.
2015-12-16 22:13:12 -05:00
highlightFileNames = map [ string ] bool {
"dockerfile" : true ,
"makefile" : true ,
}
2015-12-17 22:31:34 -05:00
// Extensions that are same as highlight classes.
2017-05-20 00:52:35 -03:00
highlightExts = map [ string ] struct { } {
2019-05-30 23:23:16 +02:00
".arm" : { } ,
".as" : { } ,
".sh" : { } ,
".cs" : { } ,
".cpp" : { } ,
".c" : { } ,
".css" : { } ,
".cmake" : { } ,
".bat" : { } ,
".dart" : { } ,
".patch" : { } ,
".erl" : { } ,
".go" : { } ,
".html" : { } ,
".xml" : { } ,
".hs" : { } ,
".ini" : { } ,
".json" : { } ,
".java" : { } ,
".js" : { } ,
".less" : { } ,
".lua" : { } ,
".php" : { } ,
".py" : { } ,
".rb" : { } ,
2019-06-04 23:01:47 +02:00
".rs" : { } ,
2019-05-30 23:23:16 +02:00
".scss" : { } ,
".sql" : { } ,
".scala" : { } ,
".swift" : { } ,
".ts" : { } ,
".vb" : { } ,
".yml" : { } ,
".yaml" : { } ,
2015-12-16 22:13:12 -05:00
}
2015-12-17 22:31:34 -05:00
// Extensions that are not same as highlight classes.
2017-06-09 20:39:16 -04:00
highlightMapping = map [ string ] string {
2019-05-30 23:23:16 +02:00
".txt" : "nohighlight" ,
".escript" : "erlang" ,
".ex" : "elixir" ,
".exs" : "elixir" ,
2017-06-09 20:39:16 -04:00
}
2015-12-16 22:13:12 -05:00
)
2016-11-25 14:23:48 +08:00
// NewContext loads highlight map
2015-12-17 22:31:34 -05:00
func NewContext ( ) {
keys := setting . Cfg . Section ( "highlight.mapping" ) . Keys ( )
for i := range keys {
highlightMapping [ keys [ i ] . Name ( ) ] = keys [ i ] . Value ( )
}
}
2015-12-16 22:13:12 -05:00
// 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 )
2017-05-20 00:52:35 -03:00
if _ , ok := highlightExts [ ext ] ; ok {
2015-12-16 22:13:12 -05:00
return ext [ 1 : ]
}
2015-12-17 22:31:34 -05:00
name , ok := highlightMapping [ ext ]
if ok {
return name
}
2015-12-16 22:13:12 -05:00
return ""
}