unioffice/document/style.go

151 lines
3.6 KiB
Go
Raw Normal View History

2017-08-28 20:56:18 -05:00
// Copyright 2017 Baliance. All rights reserved.
//
// Use of this source code is governed by the terms of the Affero GNU General
// Public License version 3.0 as published by the Free Software Foundation and
// appearing in the file LICENSE included in the packaging of this file. A
// commercial license can be purchased by contacting sales@baliance.com.
package document
import (
2017-09-23 08:28:52 -05:00
"baliance.com/gooxml/schema/soo/wml"
2017-08-28 20:56:18 -05:00
)
// Style is a style within the styles.xml file.
type Style struct {
x *wml.CT_Style
}
// X returns the inner wrapped XML type.
func (s Style) X() *wml.CT_Style {
return s.x
}
// Type returns the type of the style.
func (s Style) Type() wml.ST_StyleType {
return s.x.TypeAttr
}
2017-08-28 20:56:18 -05:00
// StyleID returns the style ID.
func (s Style) StyleID() string {
if s.x.StyleIdAttr == nil {
return ""
}
return *s.x.StyleIdAttr
}
// Name returns the name of the style if set.
func (s Style) Name() string {
if s.x.Name == nil {
return ""
}
return s.x.Name.ValAttr
}
// SetName sets the name of the style.
func (s Style) SetName(name string) {
s.x.Name = wml.NewCT_String()
s.x.Name.ValAttr = name
}
// SetPrimaryStyle marks the style as a primary style.
func (s Style) SetPrimaryStyle(b bool) {
if b {
s.x.QFormat = wml.NewCT_OnOff()
} else {
s.x.QFormat = nil
}
}
// SetUISortOrder controls the order the style is displayed in the UI.
func (s Style) SetUISortOrder(order int) {
s.x.UiPriority = wml.NewCT_DecimalNumber()
s.x.UiPriority.ValAttr = int64(order)
2017-08-28 20:56:18 -05:00
}
// SetSemiHidden controls if the style is hidden in the UI.
func (s Style) SetSemiHidden(b bool) {
if b {
s.x.SemiHidden = wml.NewCT_OnOff()
} else {
s.x.SemiHidden = nil
}
}
// SetUnhideWhenUsed controls if a semi hidden style becomes visible when used.
func (s Style) SetUnhideWhenUsed(b bool) {
if b {
s.x.UnhideWhenUsed = wml.NewCT_OnOff()
} else {
s.x.UnhideWhenUsed = nil
}
}
// SetBasedOn sets the style that this style is based on.
func (s Style) SetBasedOn(name string) {
if name == "" {
s.x.BasedOn = nil
} else {
s.x.BasedOn = wml.NewCT_String()
s.x.BasedOn.ValAttr = name
}
}
// SetLinkedStyle sets the style that this style is linked to.
func (s Style) SetLinkedStyle(name string) {
if name == "" {
s.x.Link = nil
} else {
s.x.Link = wml.NewCT_String()
s.x.Link.ValAttr = name
}
}
// SetNextStyle sets the style that the next paragraph will use.
func (s Style) SetNextStyle(name string) {
if name == "" {
s.x.Next = nil
} else {
s.x.Next = wml.NewCT_String()
s.x.Next.ValAttr = name
}
}
// ParagraphProperties returns the paragraph style properties.
func (s Style) ParagraphProperties() ParagraphStyleProperties {
2017-08-28 20:56:18 -05:00
if s.x.PPr == nil {
s.x.PPr = wml.NewCT_PPrGeneral()
}
return ParagraphStyleProperties{s.x.PPr}
2017-08-28 20:56:18 -05:00
}
// RunProperties returns the run style properties.
func (s Style) RunProperties() RunProperties {
2017-08-28 20:56:18 -05:00
if s.x.RPr == nil {
s.x.RPr = wml.NewCT_RPr()
}
return RunProperties{s.x.RPr}
2017-08-28 20:56:18 -05:00
}
// TableProperties returns the table style properties.
func (s Style) TableProperties() TableStyleProperties {
if s.x.TblPr == nil {
s.x.TblPr = wml.NewCT_TblPrBase()
}
return TableStyleProperties{s.x.TblPr}
}
// TableConditionalFormatting returns a conditional formatting object of a given
// type. Calling this method repeatedly will return the same object.
func (s Style) TableConditionalFormatting(typ wml.ST_TblStyleOverrideType) TableConditionalFormatting {
for _, pr := range s.x.TblStylePr {
if pr.TypeAttr == typ {
return TableConditionalFormatting{pr}
}
}
pr := wml.NewCT_TblStylePr()
pr.TypeAttr = typ
s.x.TblStylePr = append(s.x.TblStylePr, pr)
return TableConditionalFormatting{pr}
}