vendor/github.com/olekukonko/tablewriter/tw/symbols.go
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(),
)
}