tree2html

package module
v0.0.0-...-f6c5cb6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2024 License: MIT Imports: 5 Imported by: 1

README

tree2html

Transforms Binary Tree (BTree) structure to HTML Table vertical and horizontal directions.

Installation

go get github.com/moisespsena-go/tree2html

Examples

See to Example diretory for more examples.

package main

import (
	"os"
	"strconv"
	"strings"

	"github.com/moisespsena-go/tree2html"
)

var New = tree2html.New

func main() {
	f, err := os.Create("example.html")
	if err != nil {
		panic(err)
	}
	defer f.Close()

	f.WriteString("<!DOCTYPE html>\n<html><head><meta charset=\"UTF-8\"></head><body><h1>Example</h1>")

	write(f, New("",
		New(""),
		New(""),
	).Build())

	write(f,
		New("",
			New("",
				New("",
					New(""),
					New("",
						New(""),
						New(""),
						New("",
							New("", New("", New(""))),
							New(""),
						),
						New(""),
					),
					New(""),
				),
				New("",
					New(""),
					New(""),
				),
			),
			New("",
				New(""),
				New("",
					New(""),
					New(""),
					New("",
						New("", New("", New(""))),
						New(""),
					),
					New(""),
				),
				New(""),
			),
		).Build())

	f.WriteString("</body></html>")
}

func write(f *os.File, tree *tree2html.Tree) {
	// make labels based on indexes
	tree.Walk(func(p []*tree2html.Tree, t *tree2html.Tree, i int) {
		t.Value = buildLabel(append(p[1:], t))
	})

	// Vertical
	f.WriteString("<p>Vertical</p>\n")
	f.WriteString("<table border=\"1\"><tbody>\n")
	tree.VTable().WriteTo(f)
	f.WriteString("</tbody></table>\n")

	// Horizontal
	f.WriteString("<p>Horizontal</p>\n")
	f.WriteString("<table border=\"1\"><tbody>\n")
	tree.HTable().WriteTo(f)
	f.WriteString("</tbody></table>\n")
	f.WriteString("<hr />\n")
}

func buildLabel(t []*tree2html.Tree) string {
	indexes := make([]string, len(t))
	for i, t := range t {
		indexes[i] = strconv.Itoa(t.Index() + 1)
	}
	return strings.Join(indexes, ".")
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FirstsOf

func FirstsOf(t *Tree) (firsts []*Tree, dot *Tree)

func LeafCount

func LeafCount(t *Tree) int

func MaxDepth

func MaxDepth(t *Tree) (i int)

func WriteCell

func WriteCell(w Writer, c *Cell) (n int64, err error)

func WriteResult

func WriteResult(n int, err error) (int64, error)

Types

type Cell

type Cell struct {
	Node    *Tree
	Row     int
	Col     int
	Rowspan int
	Colspan int
}

func NewVCell

func NewVCell(n *Tree, row, col, rowspan, colspan int) *Cell

type CellOpener

type CellOpener func(w io.Writer, c *Cell) (doValue func(), end func())

type CellTagAttr

type CellTagAttr struct {
	Name  string
	Value string
	Flag  bool
}

type DefaultWriter

type DefaultWriter struct {
	io.Writer
	// contains filtered or unexported fields
}

func NewDefaultWriter

func NewDefaultWriter(writer io.Writer) *DefaultWriter

func (*DefaultWriter) Cell

func (w *DefaultWriter) Cell(c *Cell) (value func() (n int64, err error), end func() (n int64, err error), n int64, err error)

func (*DefaultWriter) CellTagHandler

func (w *DefaultWriter) CellTagHandler(handlers ...func(c *Cell, tag *Tag)) *DefaultWriter

func (*DefaultWriter) Row

func (w *DefaultWriter) Row() (end func() (n int64, err error), i int64, err error)

func (*DefaultWriter) RowTagHandler

func (w *DefaultWriter) RowTagHandler(handlers ...func(c *Tag)) *DefaultWriter

func (*DefaultWriter) SetValueWriter

func (w *DefaultWriter) SetValueWriter(valueWriter func(w io.Writer, node *Tree) (n int64, err error)) *DefaultWriter

type Row

type Row []*Cell

func (Row) Write

func (r Row) Write(w Writer) (n int64, err error)

func (Row) WriteTo

func (r Row) WriteTo(w io.Writer) (n int64, err error)

type Table

type Table []Row

func (Table) Write

func (t Table) Write(w Writer) (n int64, err error)

func (Table) WriteTo

func (t Table) WriteTo(w io.Writer) (n int64, err error)

type Tag

type Tag struct {
	TagName string
	Attrs   []*CellTagAttr
	Classes []string
}

func (*Tag) AddAttr

func (s *Tag) AddAttr(name, value string) *Tag

func (*Tag) AddFlagAttr

func (s *Tag) AddFlagAttr(name string) *Tag

func (*Tag) AllAttrs

func (s *Tag) AllAttrs() []*CellTagAttr

func (*Tag) Attr

func (s *Tag) Attr(attr ...*CellTagAttr) *Tag

func (*Tag) Class

func (s *Tag) Class(class ...string) *Tag

func (*Tag) Close

func (s *Tag) Close() string

func (*Tag) Open

func (s *Tag) Open() string

type Tree

type Tree struct {
	Value    any     `json:"Value,omitempty"`
	Children []*Tree `json:"Children,omitempty"`
	// contains filtered or unexported fields
}

func New

func New(children ...*Tree) *Tree

func Next

func Next(t *Tree) *Tree

func Node

func Node(val any, children ...*Tree) *Tree

func (*Tree) Append

func (t *Tree) Append(child ...*Tree) *Tree

func (*Tree) Build

func (t *Tree) Build() *Tree

func (Tree) DeepCopy

func (t Tree) DeepCopy() *Tree

func (*Tree) Depth

func (t *Tree) Depth() int

func (*Tree) HTable

func (t *Tree) HTable() (tb Table)

func (*Tree) Index

func (t *Tree) Index() int

func (*Tree) IsLeaf

func (t *Tree) IsLeaf() bool

func (*Tree) Parent

func (t *Tree) Parent() *Tree

func (*Tree) Root

func (t *Tree) Root() *Tree

func (*Tree) VTable

func (t *Tree) VTable() (tb Table)

func (*Tree) Walk

func (t *Tree) Walk(f func(p []*Tree, t *Tree, i int))

type Writer

type Writer interface {
	io.Writer

	Row() (end func() (n int64, err error), i int64, err error)
	Cell(c *Cell) (value func() (n int64, err error), end func() (n int64, err error), n int64, err error)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL