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.
2019-08-04 10:11:27 +02:00
highlightFileNames = map [ string ] string {
"dockerfile" : "dockerfile" ,
"makefile" : "makefile" ,
"gnumakefile" : "makefile" ,
"cmakelists.txt" : "cmake" ,
2015-12-16 22:13:12 -05:00
}
2015-12-17 22:31:34 -05:00
// Extensions that are same as highlight classes.
2019-08-05 17:48:31 +02:00
// See hljs.listLanguages() for list of language names.
2017-05-20 00:52:35 -03:00
highlightExts = map [ string ] struct { } {
2019-08-05 17:48:31 +02:00
".applescript" : { } ,
".arm" : { } ,
".as" : { } ,
".bash" : { } ,
".bat" : { } ,
".c" : { } ,
".cmake" : { } ,
".cpp" : { } ,
".cs" : { } ,
".css" : { } ,
".dart" : { } ,
".diff" : { } ,
".django" : { } ,
".go" : { } ,
".gradle" : { } ,
".groovy" : { } ,
".haml" : { } ,
".handlebars" : { } ,
".html" : { } ,
".ini" : { } ,
".java" : { } ,
".json" : { } ,
".less" : { } ,
".lua" : { } ,
".php" : { } ,
".scala" : { } ,
".scss" : { } ,
".sql" : { } ,
".swift" : { } ,
".ts" : { } ,
".xml" : { } ,
".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-08-05 17:48:31 +02:00
".ahk" : "autohotkey" ,
".crmsh" : "crmsh" ,
".dash" : "shell" ,
".erl" : "erlang" ,
2019-05-30 23:23:16 +02:00
".escript" : "erlang" ,
".ex" : "elixir" ,
".exs" : "elixir" ,
2019-08-05 17:48:31 +02:00
".f" : "fortran" ,
".f77" : "fortran" ,
".f90" : "fortran" ,
".f95" : "fortran" ,
".feature" : "gherkin" ,
".fish" : "shell" ,
".for" : "fortran" ,
".hbs" : "handlebars" ,
".hs" : "haskell" ,
".hx" : "haxe" ,
".js" : "javascript" ,
".jsx" : "javascript" ,
".ksh" : "shell" ,
".kt" : "kotlin" ,
".l" : "ocaml" ,
".ls" : "livescript" ,
".md" : "markdown" ,
".mjs" : "javascript" ,
".mli" : "ocaml" ,
".mll" : "ocaml" ,
".mly" : "ocaml" ,
".patch" : "diff" ,
".pl" : "perl" ,
".pm" : "perl" ,
".ps1" : "powershell" ,
".psd1" : "powershell" ,
".psm1" : "powershell" ,
".py" : "python" ,
".pyw" : "python" ,
".rb" : "ruby" ,
".rs" : "rust" ,
".scpt" : "applescript" ,
".scptd" : "applescript" ,
".sh" : "bash" ,
".tcsh" : "shell" ,
".ts" : "typescript" ,
".tsx" : "typescript" ,
".txt" : "plaintext" ,
".vb" : "vbnet" ,
".vbs" : "vbscript" ,
".yml" : "yaml" ,
".zsh" : "shell" ,
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"
}
2019-08-04 10:11:27 +02:00
if name , ok := highlightFileNames [ fname ] ; ok {
return name
2015-12-16 22:13:12 -05:00
}
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 ""
}