cp437tree/main.go
2021-07-09 15:14:09 -04:00

77 lines
1.4 KiB
Go

package cp437tree
import (
"fmt"
"io"
)
const (
VerticalRight = "├"
DownLeft = "┐"
UpRight = "└"
DownRight = "┌"
Horizontal ="─"
Vertical = "│"
)
/*
┌┐ // HeaderTop
├┐ // HeaderMid
│├ // ItemMid
│└ // ItemBottom
└┐ // HeaderBottom
└── //ItemEndBottom
*/
type Node struct {
Text string
Children *[]Node
}
func (o *Request) ToTreeGroup(w io.Writer, position rune) {
middle := "├──┐" // default middle branch
midRow := "│ ├── "
botRow := "│ └── "
topBranch := "┌──┐"
endBranch := "└──┐"
veryBottomRow := " └── "
rowChars := ""
if position == 't' {
branch = topBranch
}
if position == 'b' {
branch = endBranch
}
// platform name header
rowChars = midRow
// preparing the children variable so this whole thing can be extracted later.
children := o.Versions
childCount := len(children) - 1
for idx, v := range children {
if idx == childCount {
rowChars = botRow
if position == 'b' {
rowChars = veryBottomRow
}
}
_, _ = fmt.Fprintf(w, "\n%s%s", rowChars, v)
}
// new line to end the row
_, _ = fmt.Fprintf(w, "\n")
}
func idToPosition(id, count int) rune {
// Returns 't' for top, 'b' for bottom, and 'm', for middle by comparing the idx to the count of rows.
// Does not account for if count = 1
if id == 0 {
return 't'
}
if id == count-1 {
return 'b'
}
return 'm'
}