Files
QSfera/Server/vendor/github.com/olekukonko/tablewriter/tw/symbols.go
T
Курнат Андрей 2315f25754 Initial QSfera import
2026-06-07 10:20:04 +03:00

1013 lines
24 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package tw
import "fmt"
// Symbols defines the interface for table border symbols
type Symbols interface {
// Name returns the style name
Name() string
// Basic component symbols
Center() string // Junction symbol (where lines cross)
Row() string // Horizontal line symbol
Column() string // Vertical line symbol
// Corner and junction symbols
TopLeft() string // LevelHeader-left corner
TopMid() string // LevelHeader junction
TopRight() string // LevelHeader-right corner
MidLeft() string // Left junction
MidRight() string // Right junction
BottomLeft() string // LevelFooter-left corner
BottomMid() string // LevelFooter junction
BottomRight() string // LevelFooter-right corner
// Optional header-specific symbols
HeaderLeft() string
HeaderMid() string
HeaderRight() string
}
// BorderStyle defines different border styling options
type BorderStyle int
// Border style constants
const (
StyleNone BorderStyle = iota
StyleASCII
StyleLight
StyleHeavy
StyleDouble
StyleDoubleLong
StyleLightHeavy
StyleHeavyLight
StyleLightDouble
StyleDoubleLight
StyleRounded
StyleMarkdown
StyleGraphical
StyleMerger
StyleDefault
StyleDotted
StyleArrow
StyleStarry
StyleHearts
StyleCircuit // Renamed from StyleTech
StyleNature
StyleArtistic
Style8Bit
StyleChaos
StyleDots
StyleBlocks
StyleZen
StyleVintage
StyleSketch
StyleArrowDouble
StyleCelestial
StyleCyber
StyleRunic
StyleIndustrial
StyleInk
StyleArcade
StyleBlossom
StyleFrosted
StyleMosaic
StyleUFO
StyleSteampunk
StyleGalaxy
StyleJazz
StylePuzzle
StyleHypno
)
// StyleName defines names for border styles
type StyleName string
func (s StyleName) String() string {
return string(s)
}
const (
StyleNameNothing StyleName = "nothing"
StyleNameASCII StyleName = "ascii"
StyleNameLight StyleName = "light"
StyleNameHeavy StyleName = "heavy"
StyleNameDouble StyleName = "double"
StyleNameDoubleLong StyleName = "doublelong"
StyleNameLightHeavy StyleName = "lightheavy"
StyleNameHeavyLight StyleName = "heavylight"
StyleNameLightDouble StyleName = "lightdouble"
StyleNameDoubleLight StyleName = "doublelight"
StyleNameRounded StyleName = "rounded"
StyleNameMarkdown StyleName = "markdown"
StyleNameGraphical StyleName = "graphical"
StyleNameMerger StyleName = "merger"
StyleNameDotted StyleName = "dotted"
StyleNameArrow StyleName = "arrow"
StyleNameStarry StyleName = "starry"
StyleNameHearts StyleName = "hearts"
StyleNameCircuit StyleName = "circuit" // Renamed from Tech
StyleNameNature StyleName = "nature"
StyleNameArtistic StyleName = "artistic"
StyleName8Bit StyleName = "8bit"
StyleNameChaos StyleName = "chaos"
StyleNameDots StyleName = "dots"
StyleNameBlocks StyleName = "blocks"
StyleNameZen StyleName = "zen"
StyleNameVintage StyleName = "vintage"
StyleNameSketch StyleName = "sketch"
StyleNameArrowDouble StyleName = "arrowdouble"
StyleNameCelestial StyleName = "celestial"
StyleNameCyber StyleName = "cyber"
StyleNameRunic StyleName = "runic"
StyleNameIndustrial StyleName = "industrial"
StyleNameInk StyleName = "ink"
StyleNameArcade StyleName = "arcade"
StyleNameBlossom StyleName = "blossom"
StyleNameFrosted StyleName = "frosted"
StyleNameMosaic StyleName = "mosaic"
StyleNameUFO StyleName = "ufo"
StyleNameSteampunk StyleName = "steampunk"
StyleNameGalaxy StyleName = "galaxy"
StyleNameJazz StyleName = "jazz"
StyleNamePuzzle StyleName = "puzzle"
StyleNameHypno StyleName = "hypno"
)
// Styles maps BorderStyle to StyleName
var Styles = map[BorderStyle]StyleName{
StyleNone: StyleNameNothing,
StyleASCII: StyleNameASCII,
StyleLight: StyleNameLight,
StyleHeavy: StyleNameHeavy,
StyleDouble: StyleNameDouble,
StyleDoubleLong: StyleNameDoubleLong,
StyleLightHeavy: StyleNameLightHeavy,
StyleHeavyLight: StyleNameHeavyLight,
StyleLightDouble: StyleNameLightDouble,
StyleDoubleLight: StyleNameDoubleLight,
StyleRounded: StyleNameRounded,
StyleMarkdown: StyleNameMarkdown,
StyleGraphical: StyleNameGraphical,
StyleMerger: StyleNameMerger,
StyleDefault: StyleNameLight,
StyleDotted: StyleNameDotted,
StyleArrow: StyleNameArrow,
StyleStarry: StyleNameStarry,
StyleHearts: StyleNameHearts,
StyleCircuit: StyleNameCircuit,
StyleNature: StyleNameNature,
StyleArtistic: StyleNameArtistic,
Style8Bit: StyleName8Bit,
StyleChaos: StyleNameChaos,
StyleDots: StyleNameDots,
StyleBlocks: StyleNameBlocks,
StyleZen: StyleNameZen,
StyleVintage: StyleNameVintage,
StyleSketch: StyleNameSketch,
StyleArrowDouble: StyleNameArrowDouble,
StyleCelestial: StyleNameCelestial,
StyleCyber: StyleNameCyber,
StyleRunic: StyleNameRunic,
StyleIndustrial: StyleNameIndustrial,
StyleInk: StyleNameInk,
StyleArcade: StyleNameArcade,
StyleBlossom: StyleNameBlossom,
StyleFrosted: StyleNameFrosted,
StyleMosaic: StyleNameMosaic,
StyleUFO: StyleNameUFO,
StyleSteampunk: StyleNameSteampunk,
StyleGalaxy: StyleNameGalaxy,
StyleJazz: StyleNameJazz,
StylePuzzle: StyleNamePuzzle,
StyleHypno: StyleNameHypno,
}
// String returns the string representation of a border style
func (s BorderStyle) String() string {
return [...]string{
"None",
"ASCII",
"Light",
"Heavy",
"Double",
"DoubleLong",
"LightHeavy",
"HeavyLight",
"LightDouble",
"DoubleLight",
"Rounded",
"Markdown",
"Graphical",
"Merger",
"Default",
"Dotted",
"Arrow",
"Starry",
"Hearts",
"Circuit",
"Nature",
"Artistic",
"8Bit",
"Chaos",
"Dots",
"Blocks",
"Zen",
"Vintage",
"Sketch",
"ArrowDouble",
"Celestial",
"Cyber",
"Runic",
"Industrial",
"Ink",
"Arcade",
"Blossom",
"Frosted",
"Mosaic",
"UFO",
"Steampunk",
"Galaxy",
"Jazz",
"Puzzle",
"Hypno",
}[s]
}
// NewSymbols creates a new Symbols instance with the specified style
func NewSymbols(style BorderStyle) Symbols {
switch style {
case StyleASCII:
return &Glyphs{
name: StyleNameASCII,
row: "-",
column: "|",
center: "+",
corners: [9]string{
"+", "+", "+",
"+", "+", "+",
"+", "+", "+",
},
headerLeft: "+",
headerMid: "+",
headerRight: "+",
}
case StyleLight, StyleDefault:
return &Glyphs{
name: StyleNameLight,
row: "─",
column: "│",
center: "┼",
corners: [9]string{
"┌", "┬", "┐",
"├", "┼", "┤",
"└", "┴", "┘",
},
headerLeft: "├",
headerMid: "┼",
headerRight: "┤",
}
case StyleHeavy:
return &Glyphs{
name: StyleNameHeavy,
row: "━",
column: "┃",
center: "╋",
corners: [9]string{
"┏", "┳", "┓",
"┣", "╋", "┫",
"┗", "┻", "┛",
},
headerLeft: "┣",
headerMid: "╋",
headerRight: "┫",
}
case StyleDouble:
return &Glyphs{
name: StyleNameDouble,
row: "═",
column: "║",
center: "╬",
corners: [9]string{
"╔", "╦", "╗",
"╠", "╬", "╣",
"╚", "╩", "╝",
},
headerLeft: "╠",
headerMid: "╬",
headerRight: "╣",
}
case StyleDoubleLong:
return &Glyphs{
name: StyleNameDoubleLong,
row: "═╡═",
column: "╞",
center: "╪",
corners: [9]string{
"╔═╡", "═╤═", "╡═╗",
"╟ ", "╪ ", " ╢",
"╚═╡", "═╧═", "╡═╝",
},
headerLeft: "╟═╡",
headerMid: "╪═╡",
headerRight: "╡═╢",
}
case StyleLightHeavy:
return &Glyphs{
name: StyleNameLightHeavy,
row: "─",
column: "┃",
center: "╂",
corners: [9]string{
"┍", "┯", "┑",
"┝", "╂", "┥",
"┕", "┷", "┙",
},
headerLeft: "┝",
headerMid: "╂",
headerRight: "┥",
}
case StyleHeavyLight:
return &Glyphs{
name: StyleNameHeavyLight,
row: "━",
column: "│",
center: "┿",
corners: [9]string{
"┎", "┰", "┒",
"┠", "┿", "┨",
"┖", "┸", "┚",
},
headerLeft: "┠",
headerMid: "┿",
headerRight: "┨",
}
case StyleLightDouble:
return &Glyphs{
name: StyleNameLightDouble,
row: "─",
column: "║",
center: "╫",
corners: [9]string{
"╓", "╥", "╖",
"╟", "╫", "╢",
"╙", "╨", "╜",
},
headerLeft: "╟",
headerMid: "╫",
headerRight: "╢",
}
case StyleDoubleLight:
return &Glyphs{
name: StyleNameDoubleLight,
row: "═",
column: "│",
center: "╪",
corners: [9]string{
"╒", "╤", "╕",
"╞", "╪", "╡",
"╘", "╧", "╛",
},
headerLeft: "╞",
headerMid: "╪",
headerRight: "╡",
}
case StyleRounded:
return &Glyphs{
name: StyleNameRounded,
row: "─",
column: "│",
center: "┼",
corners: [9]string{
"╭", "┬", "╮",
"├", "┼", "┤",
"╰", "┴", "╯",
},
headerLeft: "├",
headerMid: "┼",
headerRight: "┤",
}
case StyleMarkdown:
return &Glyphs{
name: StyleNameMarkdown,
row: "-",
column: "|",
center: "|",
corners: [9]string{
"", "", "",
"|", "|", "|",
"", "", "",
},
headerLeft: "|",
headerMid: "|",
headerRight: "|",
}
case StyleGraphical:
return &Glyphs{
name: StyleNameGraphical,
row: "┄┄",
column: "┆",
center: "╂",
corners: [9]string{
"┌┄", "┄┄", "┄┐",
"┆ ", "╂ ", " ┆",
"└┄", "┄┄", "┄┘",
},
headerLeft: "├┄",
headerMid: "╂┄",
headerRight: "┄┤",
}
case StyleMerger:
return &Glyphs{
name: StyleNameMerger,
row: "─",
column: "│",
center: "+",
corners: [9]string{
"┌", "┬", "┐",
"├", "┼", "┤",
"└", "┴", "┘",
},
headerLeft: "├",
headerMid: "+",
headerRight: "┤",
}
case StyleDotted:
return &Glyphs{
name: StyleNameDotted,
row: "·",
column: ":",
center: "+",
corners: [9]string{
".", "·", ".",
":", "+", ":",
"'", "·", "'",
},
headerLeft: ":",
headerMid: "+",
headerRight: ":",
}
case StyleArrow:
return &Glyphs{
name: StyleNameArrow,
row: "→",
column: "↓",
center: "↔",
corners: [9]string{
"↗", "↑", "↖",
"→", "↔", "←",
"↘", "↓", "↙",
},
headerLeft: "→",
headerMid: "↔",
headerRight: "←",
}
case StyleStarry:
return &Glyphs{
name: StyleNameStarry,
row: "★",
column: "☆",
center: "✶",
corners: [9]string{
"✧", "✯", "✧",
"✦", "✶", "✦",
"✧", "✯", "✧",
},
headerLeft: "✦",
headerMid: "✶",
headerRight: "✦",
}
case StyleHearts:
return &Glyphs{
name: StyleNameHearts,
row: "♥",
column: "❤",
center: "✚",
corners: [9]string{
"❥", "♡", "❥",
"❣", "✚", "❣",
"❦", "♡", "❦",
},
headerLeft: "❣",
headerMid: "✚",
headerRight: "❣",
}
case StyleCircuit:
return &Glyphs{
name: StyleNameCircuit,
row: "=",
column: "||",
center: "<>",
corners: [9]string{
"/*", "##", "*/",
"//", "<>", "\\",
"\\*", "##", "*/",
},
headerLeft: "//",
headerMid: "<>",
headerRight: "\\",
}
case StyleNature:
return &Glyphs{
name: StyleNameNature,
row: "~",
column: "|",
center: "❀",
corners: [9]string{
"🌱", "🌿", "🌱",
"🍃", "❀", "🍃",
"🌻", "🌾", "🌻",
},
headerLeft: "🍃",
headerMid: "❀",
headerRight: "🍃",
}
case StyleArtistic:
return &Glyphs{
name: StyleNameArtistic,
row: "▬",
column: "▐",
center: "⬔",
corners: [9]string{
"◈", "◊", "◈",
"◀", "⬔", "▶",
"◭", "▣", "◮",
},
headerLeft: "◀",
headerMid: "⬔",
headerRight: "▶",
}
case Style8Bit:
return &Glyphs{
name: StyleName8Bit,
row: "■",
column: "█",
center: "♦",
corners: [9]string{
"╔", "▲", "╗",
"◄", "♦", "►",
"╚", "▼", "╝",
},
headerLeft: "◄",
headerMid: "♦",
headerRight: "►",
}
case StyleChaos:
return &Glyphs{
name: StyleNameChaos,
row: "≈",
column: "§",
center: "☯",
corners: [9]string{
"⌘", "∞", "⌥",
"⚡", "☯", "♞",
"⌂", "∆", "◊",
},
headerLeft: "⚡",
headerMid: "☯",
headerRight: "♞",
}
case StyleDots:
return &Glyphs{
name: StyleNameDots,
row: "·",
column: " ",
center: "·",
corners: [9]string{
"·", "·", "·",
" ", "·", " ",
"·", "·", "·",
},
headerLeft: " ",
headerMid: "·",
headerRight: " ",
}
case StyleBlocks:
return &Glyphs{
name: StyleNameBlocks,
row: "▀",
column: "█",
center: "█",
corners: [9]string{
"▛", "▀", "▜",
"▌", "█", "▐",
"▙", "▄", "▟",
},
headerLeft: "▌",
headerMid: "█",
headerRight: "▐",
}
case StyleZen:
return &Glyphs{
name: StyleNameZen,
row: "~",
column: " ",
center: "☯",
corners: [9]string{
" ", "♨", " ",
" ", "☯", " ",
" ", "♨", " ",
},
headerLeft: " ",
headerMid: "☯",
headerRight: " ",
}
case StyleVintage:
return &Glyphs{
name: StyleNameVintage,
row: "────",
column: " ⁜ ",
center: " ✠ ",
corners: [9]string{
"╔══", "══╤", "══╗",
" ⁜ ", " ✠ ", " ⁜ ",
"╚══", "══╧", "══╝",
},
headerLeft: " ├─",
headerMid: "─✠─",
headerRight: "─┤ ",
}
case StyleSketch:
return &Glyphs{
name: StyleNameSketch,
row: "~~",
column: "/",
center: "+",
corners: [9]string{
" .", "~~", ". ",
"/ ", "+ ", " \\",
" '", "~~", "` ",
},
headerLeft: "/~",
headerMid: "+~",
headerRight: "~\\",
}
case StyleArrowDouble:
return &Glyphs{
name: StyleNameArrowDouble,
row: "»»",
column: "⫸",
center: "✿",
corners: [9]string{
"⌜»", "»»", "»⌝",
"⫸ ", "✿ ", " ⫷",
"⌞»", "»»", "»⌟",
},
headerLeft: "⫸»",
headerMid: "✿»",
headerRight: "»⫷",
}
case StyleCelestial:
return &Glyphs{
name: StyleNameCelestial,
row: "✦✧",
column: "☽",
center: "☀",
corners: [9]string{
"✧✦", "✦✧", "✦✧",
"☽ ", "☀ ", " ☾",
"✧✦", "✦✧", "✦✧",
},
headerLeft: "☽✦",
headerMid: "☀✧",
headerRight: "✦☾",
}
case StyleCyber:
return &Glyphs{
name: StyleNameCyber,
row: "═╦═",
column: "║",
center: "╬",
corners: [9]string{
"╔╦═", "╦═╦", "═╦╗",
"║ ", "╬ ", " ║",
"╚╩═", "╩═╩", "═╩╝",
},
headerLeft: "╠╦═",
headerMid: "╬═╦",
headerRight: "═╦╣",
}
case StyleRunic:
return &Glyphs{
name: StyleNameRunic,
row: "ᛖᛖᛖ",
column: "ᛟ",
center: "ᛞ",
corners: [9]string{
"ᛏᛖᛖ", "ᛖᛖᛖ", "ᛖᛖᛏ",
"ᛟ ", "ᛞ ", " ᛟ",
"ᛗᛖᛖ", "ᛖᛖᛖ", "ᛖᛖᛗ",
},
headerLeft: "ᛟᛖᛖ",
headerMid: "ᛞᛖᛖ",
headerRight: "ᛖᛖᛟ",
}
case StyleIndustrial:
return &Glyphs{
name: StyleNameIndustrial,
row: "━╋━",
column: "┃",
center: "╋",
corners: [9]string{
"┏╋━", "╋━╋", "━╋┓",
"┃ ", "╋ ", " ┃",
"┗╋━", "╋━╋", "━╋┛",
},
headerLeft: "┣╋━",
headerMid: "╋━╋",
headerRight: "━╋┫",
}
case StyleInk:
return &Glyphs{
name: StyleNameInk,
row: "﹌",
column: "︱",
center: "✒",
corners: [9]string{
"", "﹌", "",
"︱ ", "✒ ", " ︱",
"﹋", "﹌", "﹋",
},
headerLeft: "︱﹌",
headerMid: "✒﹌",
headerRight: "﹌︱",
}
case StyleArcade:
return &Glyphs{
name: StyleNameArcade,
row: "■□",
column: "▐",
center: "◉",
corners: [9]string{
"▞■", "■□", "□▚",
"▐ ", "◉ ", " ▐",
"▚■", "■□", "□▞",
},
headerLeft: "▐■",
headerMid: "◉□",
headerRight: "■▐",
}
case StyleBlossom:
return &Glyphs{
name: StyleNameBlossom,
row: "🌸",
column: "🌿",
center: "✿",
corners: [9]string{
"🌷", "🌸", "🌷",
"🌿", "✿", "🌿",
"🌱", "🌸", "🌱",
},
headerLeft: "🌿🌸",
headerMid: "✿🌸",
headerRight: "🌸🌿",
}
case StyleFrosted:
return &Glyphs{
name: StyleNameFrosted,
row: "░▒░",
column: "▓",
center: "◍",
corners: [9]string{
"◌░▒", "░▒░", "▒░◌",
"▓ ", "◍ ", " ▓",
"◌░▒", "░▒░", "▒░◌",
},
headerLeft: "▓░▒",
headerMid: "◍▒░",
headerRight: "░▒▓",
}
case StyleMosaic:
return &Glyphs{
name: StyleNameMosaic,
row: "▰▱",
column: "⧉",
center: "⬖",
corners: [9]string{
"⧠▰", "▰▱", "▱⧠",
"⧉ ", "⬖ ", " ⧉",
"⧅▰", "▰▱", "▱⧅",
},
headerLeft: "⧉▰",
headerMid: "⬖▱",
headerRight: "▰⧉",
}
case StyleUFO:
return &Glyphs{
name: StyleNameUFO,
row: "⊚⊚",
column: "☽",
center: "☢",
corners: [9]string{
"⌖⊚", "⊚⊚", "⊚⌖",
"☽ ", "☢ ", " ☽",
"⌗⊚", "⊚⊚", "⊚⌗",
},
headerLeft: "☽⊚",
headerMid: "☢⊚",
headerRight: "⊚☽",
}
case StyleSteampunk:
return &Glyphs{
name: StyleNameSteampunk,
row: "═⚙═",
column: "⛓️",
center: "⚔️",
corners: [9]string{
"🜂⚙═", "═⚙═", "═⚙🜂",
"⛓️ ", "⚔️ ", " ⛓️",
"🜄⚙═", "═⚙═", "═⚙🜄",
},
headerLeft: "⛓️⚙═",
headerMid: "⚔️═⚙",
headerRight: "═⚙⛓️",
}
case StyleGalaxy:
return &Glyphs{
name: StyleNameGalaxy,
row: "≋≋",
column: "♆",
center: "☄️",
corners: [9]string{
"⌇≋", "≋≋", "≋⌇",
"♆ ", "☄️ ", " ♆",
"⌇≋", "≋≋", "≋⌇",
},
headerLeft: "♆≋",
headerMid: "☄️≋",
headerRight: "≋♆",
}
case StyleJazz:
return &Glyphs{
name: StyleNameJazz,
row: "♬♬",
column: "▷",
center: "★",
corners: [9]string{
"♔♬", "♬♬", "♬♔",
"▷ ", "★ ", " ◁",
"♕♬", "♬♬", "♬♕",
},
headerLeft: "▷♬",
headerMid: "★♬",
headerRight: "♬◁",
}
case StylePuzzle:
return &Glyphs{
name: StyleNamePuzzle,
row: "▣▣",
column: "◫",
center: "✚",
corners: [9]string{
"◩▣", "▣▣", "▣◪",
"◫ ", "✚ ", " ◫",
"◧▣", "▣▣", "▣◨",
},
headerLeft: "◫▣",
headerMid: "✚▣",
headerRight: "▣◫",
}
case StyleHypno:
return &Glyphs{
name: StyleNameHypno,
row: "◜◝",
column: "꩜",
center: "⃰",
corners: [9]string{
"◟◜", "◜◝", "◝◞",
"꩜ ", "⃰ ", " ꩜",
"◟◜", "◜◝", "◝◞",
},
headerLeft: "꩜◜",
headerMid: "⃰◝",
headerRight: "◜꩜",
}
default:
return &Glyphs{
name: StyleNameNothing,
row: "",
column: "",
center: "",
corners: [9]string{
"", "", "",
"", "", "",
"", "", "",
},
headerLeft: "",
headerMid: "",
headerRight: "",
}
}
}
// SymbolCustom implements the Symbols interface with fully configurable symbols
type SymbolCustom struct {
name string
center string
row string
column string
topLeft string
topMid string
topRight string
midLeft string
midRight string
bottomLeft string
bottomMid string
bottomRight string
headerLeft string
headerMid string
headerRight string
}
// NewSymbolCustom creates a new customizable border style
func NewSymbolCustom(name string) *SymbolCustom {
return &SymbolCustom{
name: name,
center: "+",
row: "-",
column: "|",
}
}
// Implement all Symbols interface methods
func (c *SymbolCustom) Name() string { return c.name }
func (c *SymbolCustom) Center() string { return c.center }
func (c *SymbolCustom) Row() string { return c.row }
func (c *SymbolCustom) Column() string { return c.column }
func (c *SymbolCustom) TopLeft() string { return c.topLeft }
func (c *SymbolCustom) TopMid() string { return c.topMid }
func (c *SymbolCustom) TopRight() string { return c.topRight }
func (c *SymbolCustom) MidLeft() string { return c.midLeft }
func (c *SymbolCustom) MidRight() string { return c.midRight }
func (c *SymbolCustom) BottomLeft() string { return c.bottomLeft }
func (c *SymbolCustom) BottomMid() string { return c.bottomMid }
func (c *SymbolCustom) BottomRight() string { return c.bottomRight }
func (c *SymbolCustom) HeaderLeft() string { return c.headerLeft }
func (c *SymbolCustom) HeaderMid() string { return c.headerMid }
func (c *SymbolCustom) HeaderRight() string { return c.headerRight }
// Builder methods for fluent configuration
func (c *SymbolCustom) WithCenter(s string) *SymbolCustom { c.center = s; return c }
func (c *SymbolCustom) WithRow(s string) *SymbolCustom { c.row = s; return c }
func (c *SymbolCustom) WithColumn(s string) *SymbolCustom { c.column = s; return c }
func (c *SymbolCustom) WithTopLeft(s string) *SymbolCustom { c.topLeft = s; return c }
func (c *SymbolCustom) WithTopMid(s string) *SymbolCustom { c.topMid = s; return c }
func (c *SymbolCustom) WithTopRight(s string) *SymbolCustom { c.topRight = s; return c }
func (c *SymbolCustom) WithMidLeft(s string) *SymbolCustom { c.midLeft = s; return c }
func (c *SymbolCustom) WithMidRight(s string) *SymbolCustom { c.midRight = s; return c }
func (c *SymbolCustom) WithBottomLeft(s string) *SymbolCustom { c.bottomLeft = s; return c }
func (c *SymbolCustom) WithBottomMid(s string) *SymbolCustom { c.bottomMid = s; return c }
func (c *SymbolCustom) WithBottomRight(s string) *SymbolCustom { c.bottomRight = s; return c }
func (c *SymbolCustom) WithHeaderLeft(s string) *SymbolCustom { c.headerLeft = s; return c }
func (c *SymbolCustom) WithHeaderMid(s string) *SymbolCustom { c.headerMid = s; return c }
func (c *SymbolCustom) WithHeaderRight(s string) *SymbolCustom { c.headerRight = s; return c }
// Preview renders a small sample table to visualize the border style
func (s *SymbolCustom) Preview() string {
return fmt.Sprintf(
"%s%s%s\n%s %s %s\n%s%s%s",
s.TopLeft(), s.Row(), s.TopRight(),
s.Column(), s.Center(), s.Column(),
s.BottomLeft(), s.Row(), s.BottomRight(),
)
}
// Glyphs provides fully independent border symbols with a corners array
type Glyphs struct {
name StyleName
row string
column string
center string
corners [9]string // [TopLeft, TopMid, TopRight, MidLeft, Center, MidRight, BottomLeft, BottomMid, BottomRight]
headerLeft string
headerMid string
headerRight string
}
// Glyphs symbol methods
func (s *Glyphs) Name() string { return s.name.String() }
func (s *Glyphs) Center() string { return s.center }
func (s *Glyphs) Row() string { return s.row }
func (s *Glyphs) Column() string { return s.column }
func (s *Glyphs) TopLeft() string { return s.corners[0] }
func (s *Glyphs) TopMid() string { return s.corners[1] }
func (s *Glyphs) TopRight() string { return s.corners[2] }
func (s *Glyphs) MidLeft() string { return s.corners[3] }
func (s *Glyphs) MidRight() string { return s.corners[5] }
func (s *Glyphs) BottomLeft() string { return s.corners[6] }
func (s *Glyphs) BottomMid() string { return s.corners[7] }
func (s *Glyphs) BottomRight() string { return s.corners[8] }
func (s *Glyphs) HeaderLeft() string { return s.headerLeft }
func (s *Glyphs) HeaderMid() string { return s.headerMid }
func (s *Glyphs) HeaderRight() string { return s.headerRight }
// Preview renders a small sample table to visualize the border style
func (s *Glyphs) Preview() string {
return fmt.Sprintf(
"%s%s%s\n%s %s %s\n%s%s%s",
s.TopLeft(), s.Row(), s.TopRight(),
s.Column(), s.Center(), s.Column(),
s.BottomLeft(), s.Row(), s.BottomRight(),
)
}