twink/vendor/sourcery.dny.nu/longdistance/keywords.go

97 lines
2 KiB
Go
Raw Normal View History

2025-12-05 12:20:05 +01:00
package longdistance
// JSON-LD keywords.
const (
KeywordAny = "@any"
KeywordBase = "@base"
KeywordContainer = "@container"
KeywordContext = "@context"
KeywordDefault = "@default"
KeywordDirection = "@direction"
KeywordGraph = "@graph"
KeywordID = "@id"
KeywordImport = "@import"
KeywordIncluded = "@included"
KeywordIndex = "@index"
KeywordJSON = "@json"
KeywordLanguage = "@language"
KeywordList = "@list"
KeywordNest = "@nest"
KeywordNone = "@none"
KeywordNull = "@null"
KeywordPrefix = "@prefix"
KeywordPreserve = "@preserve"
KeywordPropagate = "@propagate"
KeywordProtected = "@protected"
KeywordReverse = "@reverse"
KeywordSet = "@set"
KeywordType = "@type"
KeywordValue = "@value"
KeywordVersion = "@version"
KeywordVocab = "@vocab"
)
// isKeyword returns if the string matches a known JSON-LD keyword.
func isKeyword(s string) bool {
switch s {
case KeywordBase,
KeywordContainer,
KeywordContext,
KeywordDefault,
KeywordDirection,
KeywordGraph,
KeywordID,
KeywordImport,
KeywordIncluded,
KeywordIndex,
KeywordJSON,
KeywordLanguage,
KeywordList,
KeywordNest,
KeywordNone,
KeywordPrefix,
KeywordPreserve,
KeywordPropagate,
KeywordProtected,
KeywordReverse,
KeywordSet,
KeywordType,
KeywordValue,
KeywordVersion,
KeywordVocab:
return true
default:
return false
}
}
// looksLikeKeyword determines if a string has the general shape of a JSON-LD
// keyword.
//
// It returns true for strings of the form: "@[alpha]".
//
// This means that a string like @blabla1 will return false, but it's still
// strongly recommended against using those for keys just to avoid confusion.
func looksLikeKeyword(s string) bool {
if s == "" {
return false
}
if s == "@" {
return false
}
if s[0] != '@' {
return false
}
for _, char := range s[1:] {
if (char < 'a' || char > 'z') &&
(char < 'A' || char > 'Z') {
return false
}
}
return true
}