d2/d2target/class.go
Bernard Xie 8e07980b06
Revert "remove GetUniqueChars"
This reverts commit da7e2fbcc7.
2023-03-29 09:51:36 -07:00

130 lines
2.7 KiB
Go

package d2target
import (
"fmt"
)
const (
PrefixPadding = 10
PrefixWidth = 20
CenterPadding = 50
// 10px of padding top and bottom so text doesn't look squished
VerticalPadding = 20
)
type Class struct {
Fields []ClassField `json:"fields"`
Methods []ClassMethod `json:"methods"`
}
type ClassField struct {
Name string `json:"name"`
Type string `json:"type"`
Visibility string `json:"visibility"`
}
func (cf ClassField) Text(fontSize int) *MText {
return &MText{
Text: fmt.Sprintf("%s%s", cf.Name, cf.Type),
FontSize: fontSize,
IsBold: false,
IsItalic: false,
Shape: "class",
}
}
func (cf ClassField) VisibilityToken() string {
switch cf.Visibility {
case "protected":
return "#"
case "private":
return "-"
default:
return "+"
}
}
func (cf ClassField) GetUniqueChars(uniqueMap map[rune]bool) string {
var uniqueChars string
for _, char := range "+-#" {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cf.Name {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cf.Type {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cf.Visibility {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
}
type ClassMethod struct {
Name string `json:"name"`
Return string `json:"return"`
Visibility string `json:"visibility"`
}
func (cm ClassMethod) Text(fontSize int) *MText {
return &MText{
Text: fmt.Sprintf("%s%s%s", cm.VisibilityToken(), cm.Name, cm.Return),
FontSize: fontSize,
IsBold: false,
IsItalic: false,
Shape: "class",
}
}
func (cm ClassMethod) VisibilityToken() string {
switch cm.Visibility {
case "protected":
return "#"
case "private":
return "-"
default:
return "+"
}
}
func (cm ClassMethod) GetUniqueChars(uniqueMap map[rune]bool) string {
var uniqueChars string
for _, char := range "+-#" {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cm.Name {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cm.Return {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
for _, char := range cm.Visibility {
if _, exists := uniqueMap[char]; !exists {
uniqueMap[char] = true
uniqueChars = uniqueChars + string(char)
}
}
return uniqueChars
}