Files
Devour/internal/ui/character.go
Tomas Dvorak 409acd2e08 updage
2026-02-22 15:41:27 +01:00

180 lines
4.5 KiB
Go

package ui
import (
"fmt"
"strings"
)
// DevourCharacter is the ASCII art representation of the Devour mascot
// A documentation-devouring creature with cyan/teal coloring
const DevourCharacter = `
___
.-' '-.
/ \
| O O |
| __ |
\ ' ' /
'-.___.-'
___ / \ ___
_.-' '/ \' '-._
_.-' | | '-._
/ \ ___ / \
| __ \ / \ / __ |
| .' '. .---. | | .---. .' '. |
| | | | | | | | | | | |
\ \__/ / | | | | | \__/ /
'.____.' | | | | '.____.'
| | | |
| | | |
/ | | \
/ | | \
/ |_____| \
/ / \ \
/ / \ \
/ / \ \
/_____/ \_____\
Devour - Documentation Devourer
`
// DevourCharacterSmall is a smaller version for compact displays
const DevourCharacterSmall = `
___
.-' '-.
/ O O \
| _ |
\ '-' /
'-.___.-'
Documentation Devourer
`
// DevourLogo is a stylized text logo
const DevourLogo = `
____ _____ __________ _____ ____ _____
| _ \| ____| ___| ___|_ _| _ \| ____|
| | | | _| | |_ | |_ | | | | | | _|
| |_| | |___| _| | _| | | | |_| | |___
|____/|_____|_| |_| |_| |____/|_____|
Documentation Devourer
`
// DevourBanner combines the character with version info
const DevourBanner = `
___
.-' '-.
/ O O \
| _ |
\ '-' /
'-.___.-'
____ _____ __________ _____
| _ \| ____| ___| ___|_ _|
| | | | _| | |_ | |_ | |
| |_| | |___| _| | _| | |
|____/|_____|_| |_| |_|
Documentation Devourer v%s
`
// PrintCharacter prints the full ASCII character
func PrintCharacter() {
fmt.Print(DevourCharacter)
}
// PrintCharacterSmall prints the smaller character version
func PrintCharacterSmall() {
fmt.Print(DevourCharacterSmall)
}
// PrintLogo prints just the text logo
func PrintLogo() {
fmt.Print(DevourLogo)
}
// PrintBanner prints the character with version info
func PrintBanner(version string) {
fmt.Printf(DevourBanner, version)
}
// GetCharacter returns the character string
func GetCharacter() string {
return DevourCharacter
}
// GetCharacterSmall returns the small character string
func GetCharacterSmall() string {
return DevourCharacterSmall
}
// GetLogo returns the logo string
func GetLogo() string {
return DevourLogo
}
// GetBanner returns the formatted banner string
func GetBanner(version string) string {
return fmt.Sprintf(DevourBanner, version)
}
// PrintWelcome prints a welcome message with the character
func PrintWelcome(version string) {
PrintBanner(version)
fmt.Println()
fmt.Println(" Context ingestion and management for AI")
fmt.Println()
}
// PrintWithColor prints the character with ANSI color codes (cyan/teal theme)
func PrintWithColor(useColor bool) {
if useColor {
// Cyan color for the character
cyan := "\033[36m"
reset := "\033[0m"
fmt.Printf("%s%s%s", cyan, DevourCharacter, reset)
} else {
PrintCharacter()
}
}
// GetColoredCharacter returns the character with ANSI color codes
func GetColoredCharacter(useColor bool) string {
if useColor {
cyan := "\033[36m"
reset := "\033[0m"
return cyan + DevourCharacter + reset
}
return DevourCharacter
}
// PrintStatusWithCharacter prints status output with the small character
func PrintStatusWithCharacter(statusLines []string) {
// Print small character on the left
lines := strings.Split(DevourCharacterSmall, "\n")
maxWidth := 0
for _, line := range lines {
if len(line) > maxWidth {
maxWidth = len(line)
}
}
// Pad character lines and add status
charIdx := 0
statusIdx := 0
for charIdx < len(lines) || statusIdx < len(statusLines) {
if charIdx < len(lines) {
line := lines[charIdx]
// Pad to align status
padding := maxWidth - len(line)
if statusIdx < len(statusLines) {
fmt.Printf("%s%s %s\n", line, strings.Repeat(" ", padding+2), statusLines[statusIdx])
statusIdx++
} else {
fmt.Println(line)
}
charIdx++
} else if statusIdx < len(statusLines) {
fmt.Printf("%s %s\n", strings.Repeat(" ", maxWidth+2), statusLines[statusIdx])
statusIdx++
}
}
}