2015-12-17 06:13:12 +03: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 19:19:02 +03:00
package highlight
2015-12-17 06:13:12 +03:00
import (
"path"
"strings"
2015-12-18 06:31:34 +03:00
"github.com/gogits/gogs/modules/setting"
2015-12-17 06:13:12 +03:00
)
var (
// File name should ignore highlight.
ignoreFileNames = map [ string ] bool {
"license" : true ,
"copying" : true ,
}
2015-12-18 06:31:34 +03:00
// File names that are representing highlight classes.
2015-12-17 06:13:12 +03:00
highlightFileNames = map [ string ] bool {
"dockerfile" : true ,
"makefile" : true ,
}
2015-12-18 06:31:34 +03:00
// Extensions that are same as highlight classes.
2015-12-17 06:13:12 +03:00
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 ,
}
2015-12-18 06:31:34 +03:00
// Extensions that are not same as highlight classes.
highlightMapping = map [ string ] string { }
2015-12-17 06:13:12 +03:00
)
2015-12-18 06:31:34 +03:00
func NewContext ( ) {
keys := setting . Cfg . Section ( "highlight.mapping" ) . Keys ( )
for i := range keys {
highlightMapping [ keys [ i ] . Name ( ) ] = keys [ i ] . Value ( )
}
}
2015-12-17 06:13:12 +03: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 )
if highlightExts [ ext ] {
return ext [ 1 : ]
}
2015-12-18 06:31:34 +03:00
name , ok := highlightMapping [ ext ]
if ok {
return name
}
2015-12-17 06:13:12 +03:00
return ""
}