From 51d733e6533be93ef084534907e0e68e286f087e Mon Sep 17 00:00:00 2001 From: Marvin Wendt Date: Tue, 14 Jun 2022 16:21:12 +0200 Subject: [PATCH] moved `NewTreeFromLeveledList` to `putils` --- _examples/tree/demo/main.go | 3 +- deprecated.go | 40 +++++++++++++++++++++++++++ putils/new_tree_from_leveled_list.go | 41 ++++++++++++++++++++++++++++ tree_printer.go | 38 -------------------------- 4 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 putils/new_tree_from_leveled_list.go diff --git a/_examples/tree/demo/main.go b/_examples/tree/demo/main.go index b6dbf894c..efc0e5175 100644 --- a/_examples/tree/demo/main.go +++ b/_examples/tree/demo/main.go @@ -2,6 +2,7 @@ package main import ( "github.com/pterm/pterm" + "github.com/pterm/pterm/putils" ) func main() { @@ -32,7 +33,7 @@ func main() { } // Generate tree from LeveledList. - root := pterm.NewTreeFromLeveledList(leveledList) + root := putils.NewTreeFromLeveledList(leveledList) // Render TreePrinter pterm.DefaultTree.WithRoot(root).Render() diff --git a/deprecated.go b/deprecated.go index d9301fa81..0ca3d8869 100644 --- a/deprecated.go +++ b/deprecated.go @@ -77,3 +77,43 @@ func NewBulletListItemFromString(text string, padding string) BulletListItem { func NewBulletListFromString(s string, padding string) BulletListPrinter { return NewBulletListFromStrings(strings.Split(s, "\n"), padding) } + +// NewTreeFromLeveledList converts a TreeItems list to a TreeNode and returns it. +// +// Deprecated: use putils.NewTreeFromLeveledList instead. +func NewTreeFromLeveledList(leveledListItems LeveledList) TreeNode { + if len(leveledListItems) == 0 { + return TreeNode{} + } + + root := &TreeNode{ + Children: []TreeNode{}, + Text: leveledListItems[0].Text, + } + + for i, record := range leveledListItems { + last := root + + if record.Level < 0 { + record.Level = 0 + leveledListItems[i].Level = 0 + } + + if len(leveledListItems)-1 != i { + if leveledListItems[i+1].Level-1 > record.Level { + leveledListItems[i+1].Level = record.Level + 1 + } + } + + for i := 0; i < record.Level; i++ { + lastIndex := len(last.Children) - 1 + last = &last.Children[lastIndex] + } + last.Children = append(last.Children, TreeNode{ + Children: []TreeNode{}, + Text: record.Text, + }) + } + + return *root +} diff --git a/putils/new_tree_from_leveled_list.go b/putils/new_tree_from_leveled_list.go new file mode 100644 index 000000000..34419b6c2 --- /dev/null +++ b/putils/new_tree_from_leveled_list.go @@ -0,0 +1,41 @@ +package putils + +import "github.com/pterm/pterm" + +// NewTreeFromLeveledList converts a TreeItems list to a TreeNode and returns it. +func NewTreeFromLeveledList(leveledListItems pterm.LeveledList) pterm.TreeNode { + if len(leveledListItems) == 0 { + return pterm.TreeNode{} + } + + root := &pterm.TreeNode{ + Children: []pterm.TreeNode{}, + Text: leveledListItems[0].Text, + } + + for i, record := range leveledListItems { + last := root + + if record.Level < 0 { + record.Level = 0 + leveledListItems[i].Level = 0 + } + + if len(leveledListItems)-1 != i { + if leveledListItems[i+1].Level-1 > record.Level { + leveledListItems[i+1].Level = record.Level + 1 + } + } + + for i := 0; i < record.Level; i++ { + lastIndex := len(last.Children) - 1 + last = &last.Children[lastIndex] + } + last.Children = append(last.Children, pterm.TreeNode{ + Children: []pterm.TreeNode{}, + Text: record.Text, + }) + } + + return *root +} diff --git a/tree_printer.go b/tree_printer.go index e43e47977..f462fff48 100644 --- a/tree_printer.go +++ b/tree_printer.go @@ -153,41 +153,3 @@ func walkOverTree(list []TreeNode, p TreePrinter, prefix string) string { } return ret } - -// NewTreeFromLeveledList converts a TreeItems list to a TreeNode and returns it. -func NewTreeFromLeveledList(leveledListItems LeveledList) TreeNode { - if len(leveledListItems) == 0 { - return TreeNode{} - } - - root := &TreeNode{ - Children: []TreeNode{}, - Text: leveledListItems[0].Text, - } - - for i, record := range leveledListItems { - last := root - - if record.Level < 0 { - record.Level = 0 - leveledListItems[i].Level = 0 - } - - if len(leveledListItems)-1 != i { - if leveledListItems[i+1].Level-1 > record.Level { - leveledListItems[i+1].Level = record.Level + 1 - } - } - - for i := 0; i < record.Level; i++ { - lastIndex := len(last.Children) - 1 - last = &last.Children[lastIndex] - } - last.Children = append(last.Children, TreeNode{ - Children: []TreeNode{}, - Text: record.Text, - }) - } - - return *root -}