2020-02-11 12:34:17 +03:00
// Copyright 2020 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2020-02-11 12:34:17 +03:00
package git
2023-05-24 22:37:36 +03:00
import (
"strings"
"unicode"
2024-02-24 21:46:49 +03:00
"code.gitea.io/gitea/modules/optional"
2023-05-24 22:37:36 +03:00
)
2022-01-20 20:46:10 +03:00
const (
fileSizeLimit int64 = 16 * 1024 // 16 KiB
bigFileSize int64 = 1024 * 1024 // 1 MiB
)
2023-05-24 22:37:36 +03:00
// mergeLanguageStats mergers language names with different cases. The name with most upper case letters is used.
func mergeLanguageStats ( stats map [ string ] int64 ) map [ string ] int64 {
names := map [ string ] struct {
uniqueName string
upperCount int
} { }
countUpper := func ( s string ) ( count int ) {
for _ , r := range s {
if unicode . IsUpper ( r ) {
count ++
}
}
return count
}
for name := range stats {
cnt := countUpper ( name )
lower := strings . ToLower ( name )
if cnt >= names [ lower ] . upperCount {
names [ lower ] = struct {
uniqueName string
upperCount int
} { uniqueName : name , upperCount : cnt }
}
}
res := make ( map [ string ] int64 , len ( names ) )
for name , num := range stats {
res [ names [ strings . ToLower ( name ) ] . uniqueName ] += num
}
return res
}
2024-02-24 21:46:49 +03:00
func TryReadLanguageAttribute ( attrs map [ string ] string ) optional . Option [ string ] {
language := AttributeToString ( attrs , AttributeLinguistLanguage )
if language . Value ( ) == "" {
language = AttributeToString ( attrs , AttributeGitlabLanguage )
if language . Has ( ) {
raw := language . Value ( )
// gitlab-language may have additional parameters after the language
// ignore them and just use the main language
// https://docs.gitlab.com/ee/user/project/highlighting.html#override-syntax-highlighting-for-a-file-type
if idx := strings . IndexByte ( raw , '?' ) ; idx >= 0 {
language = optional . Some ( raw [ : idx ] )
}
}
}
return language
}