diff --git a/blockstack.go b/blockstack.go new file mode 100644 index 0000000..c3a7cf4 --- /dev/null +++ b/blockstack.go @@ -0,0 +1,74 @@ +package gold + +import ( + "bytes" +) + +type BlockElement struct { + Block *bytes.Buffer + Style *ElementStyle +} + +type BlockStack []BlockElement + +func (s *BlockStack) Push(e BlockElement) { + *s = append(*s, e) +} + +func (s *BlockStack) Pop() { + stack := *s + if len(stack) == 0 { + return + } + + stack = stack[0 : len(stack)-1] + *s = stack +} + +func (s BlockStack) Indent() uint { + var i uint + + for _, v := range s { + if v.Style == nil { + continue + } + i += v.Style.Indent + } + + return i +} + +func (s BlockStack) Margin() uint { + var i uint + + for _, v := range s { + if v.Style == nil { + continue + } + i += v.Style.Margin + } + + return i +} + +func (s BlockStack) Parent() BlockElement { + if len(s) < 2 { + return s.Current() + } + + return s[len(s)-2] +} + +func (s BlockStack) Current() BlockElement { + if len(s) == 0 { + return BlockElement{ + Block: &bytes.Buffer{}, + } + } + + return s[len(s)-1] +} + +func (s BlockStack) With(child *ElementStyle) *ElementStyle { + return cascadeStyle(s.Current().Style, child) +} diff --git a/style.go b/style.go index c502001..e227957 100644 --- a/style.go +++ b/style.go @@ -1,7 +1,6 @@ package gold import ( - "bytes" "fmt" ) @@ -56,75 +55,6 @@ type ElementStyle struct { Suffix string `json:"suffix"` } -type BlockElement struct { - Block *bytes.Buffer - Style *ElementStyle -} - -type BlockStack []BlockElement - -func (s *BlockStack) Push(e BlockElement) { - *s = append(*s, e) -} - -func (s *BlockStack) Pop() { - stack := *s - if len(stack) == 0 { - return - } - - stack = stack[0 : len(stack)-1] - *s = stack -} - -func (s BlockStack) Indent() uint { - var i uint - - for _, v := range s { - if v.Style == nil { - continue - } - i += v.Style.Indent - } - - return i -} - -func (s BlockStack) Margin() uint { - var i uint - - for _, v := range s { - if v.Style == nil { - continue - } - i += v.Style.Margin - } - - return i -} - -func (s BlockStack) Parent() BlockElement { - if len(s) < 2 { - return s.Current() - } - - return s[len(s)-2] -} - -func (s BlockStack) Current() BlockElement { - if len(s) == 0 { - return BlockElement{ - Block: &bytes.Buffer{}, - } - } - - return s[len(s)-1] -} - -func (s BlockStack) With(child *ElementStyle) *ElementStyle { - return cascadeStyle(s.Current().Style, child) -} - func cascadeStyle(parent *ElementStyle, child *ElementStyle) *ElementStyle { if parent == nil { return child