Todd e83404616d Revert "schema: apply more default values"
This caused problems with Libre.

This reverts commit 59b2711e1b87be534c9cd3d155710d13cfe7743b.
2017-09-05 06:33:38 -05:00

485 lines
13 KiB
Go

// 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 wordprocessingml
import (
"encoding/xml"
"fmt"
"log"
"baliance.com/gooxml/schema/schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
)
type CT_Style struct {
// Style Type
TypeAttr ST_StyleType
// Style ID
StyleIdAttr *string
// Default Style
DefaultAttr *sharedTypes.ST_OnOff
// User-Defined Style
CustomStyleAttr *sharedTypes.ST_OnOff
// Primary Style Name
Name *CT_String
// Alternate Style Names
Aliases *CT_String
// Parent Style ID
BasedOn *CT_String
// Style For Next Paragraph
Next *CT_String
// Linked Style Reference
Link *CT_String
// Automatically Merge User Formatting Into Style Definition
AutoRedefine *CT_OnOff
// Hide Style From User Interface
Hidden *CT_OnOff
// Optional User Interface Sorting Order
UiPriority *CT_DecimalNumber
// Hide Style From Main User Interface
SemiHidden *CT_OnOff
// Remove Semi-Hidden Property When Style Is Used
UnhideWhenUsed *CT_OnOff
// Primary Style
QFormat *CT_OnOff
// Style Cannot Be Applied
Locked *CT_OnOff
// E-Mail Message Text Style
Personal *CT_OnOff
// E-Mail Message Composition Style
PersonalCompose *CT_OnOff
// E-Mail Message Reply Style
PersonalReply *CT_OnOff
// Revision Identifier for Style Definition
Rsid *CT_LongHexNumber
// Style Paragraph Properties
PPr *CT_PPrGeneral
// Run Properties
RPr *CT_RPr
// Style Table Properties
TblPr *CT_TblPrBase
// Style Table Row Properties
TrPr *CT_TrPr
// Style Table Cell Properties
TcPr *CT_TcPr
// Style Conditional Table Formatting Properties
TblStylePr []*CT_TblStylePr
}
func NewCT_Style() *CT_Style {
ret := &CT_Style{}
return ret
}
func (m *CT_Style) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if m.TypeAttr != ST_StyleTypeUnset {
attr, err := m.TypeAttr.MarshalXMLAttr(xml.Name{Local: "w:type"})
if err != nil {
return err
}
start.Attr = append(start.Attr, attr)
}
if m.StyleIdAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "w:styleId"},
Value: fmt.Sprintf("%v", *m.StyleIdAttr)})
}
if m.DefaultAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "w:default"},
Value: fmt.Sprintf("%v", *m.DefaultAttr)})
}
if m.CustomStyleAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "w:customStyle"},
Value: fmt.Sprintf("%v", *m.CustomStyleAttr)})
}
e.EncodeToken(start)
if m.Name != nil {
sename := xml.StartElement{Name: xml.Name{Local: "w:name"}}
e.EncodeElement(m.Name, sename)
}
if m.Aliases != nil {
sealiases := xml.StartElement{Name: xml.Name{Local: "w:aliases"}}
e.EncodeElement(m.Aliases, sealiases)
}
if m.BasedOn != nil {
sebasedOn := xml.StartElement{Name: xml.Name{Local: "w:basedOn"}}
e.EncodeElement(m.BasedOn, sebasedOn)
}
if m.Next != nil {
senext := xml.StartElement{Name: xml.Name{Local: "w:next"}}
e.EncodeElement(m.Next, senext)
}
if m.Link != nil {
selink := xml.StartElement{Name: xml.Name{Local: "w:link"}}
e.EncodeElement(m.Link, selink)
}
if m.AutoRedefine != nil {
seautoRedefine := xml.StartElement{Name: xml.Name{Local: "w:autoRedefine"}}
e.EncodeElement(m.AutoRedefine, seautoRedefine)
}
if m.Hidden != nil {
sehidden := xml.StartElement{Name: xml.Name{Local: "w:hidden"}}
e.EncodeElement(m.Hidden, sehidden)
}
if m.UiPriority != nil {
seuiPriority := xml.StartElement{Name: xml.Name{Local: "w:uiPriority"}}
e.EncodeElement(m.UiPriority, seuiPriority)
}
if m.SemiHidden != nil {
sesemiHidden := xml.StartElement{Name: xml.Name{Local: "w:semiHidden"}}
e.EncodeElement(m.SemiHidden, sesemiHidden)
}
if m.UnhideWhenUsed != nil {
seunhideWhenUsed := xml.StartElement{Name: xml.Name{Local: "w:unhideWhenUsed"}}
e.EncodeElement(m.UnhideWhenUsed, seunhideWhenUsed)
}
if m.QFormat != nil {
seqFormat := xml.StartElement{Name: xml.Name{Local: "w:qFormat"}}
e.EncodeElement(m.QFormat, seqFormat)
}
if m.Locked != nil {
selocked := xml.StartElement{Name: xml.Name{Local: "w:locked"}}
e.EncodeElement(m.Locked, selocked)
}
if m.Personal != nil {
sepersonal := xml.StartElement{Name: xml.Name{Local: "w:personal"}}
e.EncodeElement(m.Personal, sepersonal)
}
if m.PersonalCompose != nil {
sepersonalCompose := xml.StartElement{Name: xml.Name{Local: "w:personalCompose"}}
e.EncodeElement(m.PersonalCompose, sepersonalCompose)
}
if m.PersonalReply != nil {
sepersonalReply := xml.StartElement{Name: xml.Name{Local: "w:personalReply"}}
e.EncodeElement(m.PersonalReply, sepersonalReply)
}
if m.Rsid != nil {
sersid := xml.StartElement{Name: xml.Name{Local: "w:rsid"}}
e.EncodeElement(m.Rsid, sersid)
}
if m.PPr != nil {
sepPr := xml.StartElement{Name: xml.Name{Local: "w:pPr"}}
e.EncodeElement(m.PPr, sepPr)
}
if m.RPr != nil {
serPr := xml.StartElement{Name: xml.Name{Local: "w:rPr"}}
e.EncodeElement(m.RPr, serPr)
}
if m.TblPr != nil {
setblPr := xml.StartElement{Name: xml.Name{Local: "w:tblPr"}}
e.EncodeElement(m.TblPr, setblPr)
}
if m.TrPr != nil {
setrPr := xml.StartElement{Name: xml.Name{Local: "w:trPr"}}
e.EncodeElement(m.TrPr, setrPr)
}
if m.TcPr != nil {
setcPr := xml.StartElement{Name: xml.Name{Local: "w:tcPr"}}
e.EncodeElement(m.TcPr, setcPr)
}
if m.TblStylePr != nil {
setblStylePr := xml.StartElement{Name: xml.Name{Local: "w:tblStylePr"}}
e.EncodeElement(m.TblStylePr, setblStylePr)
}
e.EncodeToken(xml.EndElement{Name: start.Name})
return nil
}
func (m *CT_Style) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
// initialize to default
for _, attr := range start.Attr {
if attr.Name.Local == "type" {
m.TypeAttr.UnmarshalXMLAttr(attr)
}
if attr.Name.Local == "styleId" {
parsed, err := attr.Value, error(nil)
if err != nil {
return err
}
m.StyleIdAttr = &parsed
}
if attr.Name.Local == "default" {
parsed, err := ParseUnionST_OnOff(attr.Value)
if err != nil {
return err
}
m.DefaultAttr = &parsed
}
if attr.Name.Local == "customStyle" {
parsed, err := ParseUnionST_OnOff(attr.Value)
if err != nil {
return err
}
m.CustomStyleAttr = &parsed
}
}
lCT_Style:
for {
tok, err := d.Token()
if err != nil {
return err
}
switch el := tok.(type) {
case xml.StartElement:
switch el.Name.Local {
case "name":
m.Name = NewCT_String()
if err := d.DecodeElement(m.Name, &el); err != nil {
return err
}
case "aliases":
m.Aliases = NewCT_String()
if err := d.DecodeElement(m.Aliases, &el); err != nil {
return err
}
case "basedOn":
m.BasedOn = NewCT_String()
if err := d.DecodeElement(m.BasedOn, &el); err != nil {
return err
}
case "next":
m.Next = NewCT_String()
if err := d.DecodeElement(m.Next, &el); err != nil {
return err
}
case "link":
m.Link = NewCT_String()
if err := d.DecodeElement(m.Link, &el); err != nil {
return err
}
case "autoRedefine":
m.AutoRedefine = NewCT_OnOff()
if err := d.DecodeElement(m.AutoRedefine, &el); err != nil {
return err
}
case "hidden":
m.Hidden = NewCT_OnOff()
if err := d.DecodeElement(m.Hidden, &el); err != nil {
return err
}
case "uiPriority":
m.UiPriority = NewCT_DecimalNumber()
if err := d.DecodeElement(m.UiPriority, &el); err != nil {
return err
}
case "semiHidden":
m.SemiHidden = NewCT_OnOff()
if err := d.DecodeElement(m.SemiHidden, &el); err != nil {
return err
}
case "unhideWhenUsed":
m.UnhideWhenUsed = NewCT_OnOff()
if err := d.DecodeElement(m.UnhideWhenUsed, &el); err != nil {
return err
}
case "qFormat":
m.QFormat = NewCT_OnOff()
if err := d.DecodeElement(m.QFormat, &el); err != nil {
return err
}
case "locked":
m.Locked = NewCT_OnOff()
if err := d.DecodeElement(m.Locked, &el); err != nil {
return err
}
case "personal":
m.Personal = NewCT_OnOff()
if err := d.DecodeElement(m.Personal, &el); err != nil {
return err
}
case "personalCompose":
m.PersonalCompose = NewCT_OnOff()
if err := d.DecodeElement(m.PersonalCompose, &el); err != nil {
return err
}
case "personalReply":
m.PersonalReply = NewCT_OnOff()
if err := d.DecodeElement(m.PersonalReply, &el); err != nil {
return err
}
case "rsid":
m.Rsid = NewCT_LongHexNumber()
if err := d.DecodeElement(m.Rsid, &el); err != nil {
return err
}
case "pPr":
m.PPr = NewCT_PPrGeneral()
if err := d.DecodeElement(m.PPr, &el); err != nil {
return err
}
case "rPr":
m.RPr = NewCT_RPr()
if err := d.DecodeElement(m.RPr, &el); err != nil {
return err
}
case "tblPr":
m.TblPr = NewCT_TblPrBase()
if err := d.DecodeElement(m.TblPr, &el); err != nil {
return err
}
case "trPr":
m.TrPr = NewCT_TrPr()
if err := d.DecodeElement(m.TrPr, &el); err != nil {
return err
}
case "tcPr":
m.TcPr = NewCT_TcPr()
if err := d.DecodeElement(m.TcPr, &el); err != nil {
return err
}
case "tblStylePr":
tmp := NewCT_TblStylePr()
if err := d.DecodeElement(tmp, &el); err != nil {
return err
}
m.TblStylePr = append(m.TblStylePr, tmp)
default:
log.Printf("skipping unsupported element on CT_Style %v", el.Name)
if err := d.Skip(); err != nil {
return err
}
}
case xml.EndElement:
break lCT_Style
case xml.CharData:
}
}
return nil
}
// Validate validates the CT_Style and its children
func (m *CT_Style) Validate() error {
return m.ValidateWithPath("CT_Style")
}
// ValidateWithPath validates the CT_Style and its children, prefixing error messages with path
func (m *CT_Style) ValidateWithPath(path string) error {
if err := m.TypeAttr.ValidateWithPath(path + "/TypeAttr"); err != nil {
return err
}
if m.DefaultAttr != nil {
if err := m.DefaultAttr.ValidateWithPath(path + "/DefaultAttr"); err != nil {
return err
}
}
if m.CustomStyleAttr != nil {
if err := m.CustomStyleAttr.ValidateWithPath(path + "/CustomStyleAttr"); err != nil {
return err
}
}
if m.Name != nil {
if err := m.Name.ValidateWithPath(path + "/Name"); err != nil {
return err
}
}
if m.Aliases != nil {
if err := m.Aliases.ValidateWithPath(path + "/Aliases"); err != nil {
return err
}
}
if m.BasedOn != nil {
if err := m.BasedOn.ValidateWithPath(path + "/BasedOn"); err != nil {
return err
}
}
if m.Next != nil {
if err := m.Next.ValidateWithPath(path + "/Next"); err != nil {
return err
}
}
if m.Link != nil {
if err := m.Link.ValidateWithPath(path + "/Link"); err != nil {
return err
}
}
if m.AutoRedefine != nil {
if err := m.AutoRedefine.ValidateWithPath(path + "/AutoRedefine"); err != nil {
return err
}
}
if m.Hidden != nil {
if err := m.Hidden.ValidateWithPath(path + "/Hidden"); err != nil {
return err
}
}
if m.UiPriority != nil {
if err := m.UiPriority.ValidateWithPath(path + "/UiPriority"); err != nil {
return err
}
}
if m.SemiHidden != nil {
if err := m.SemiHidden.ValidateWithPath(path + "/SemiHidden"); err != nil {
return err
}
}
if m.UnhideWhenUsed != nil {
if err := m.UnhideWhenUsed.ValidateWithPath(path + "/UnhideWhenUsed"); err != nil {
return err
}
}
if m.QFormat != nil {
if err := m.QFormat.ValidateWithPath(path + "/QFormat"); err != nil {
return err
}
}
if m.Locked != nil {
if err := m.Locked.ValidateWithPath(path + "/Locked"); err != nil {
return err
}
}
if m.Personal != nil {
if err := m.Personal.ValidateWithPath(path + "/Personal"); err != nil {
return err
}
}
if m.PersonalCompose != nil {
if err := m.PersonalCompose.ValidateWithPath(path + "/PersonalCompose"); err != nil {
return err
}
}
if m.PersonalReply != nil {
if err := m.PersonalReply.ValidateWithPath(path + "/PersonalReply"); err != nil {
return err
}
}
if m.Rsid != nil {
if err := m.Rsid.ValidateWithPath(path + "/Rsid"); err != nil {
return err
}
}
if m.PPr != nil {
if err := m.PPr.ValidateWithPath(path + "/PPr"); err != nil {
return err
}
}
if m.RPr != nil {
if err := m.RPr.ValidateWithPath(path + "/RPr"); err != nil {
return err
}
}
if m.TblPr != nil {
if err := m.TblPr.ValidateWithPath(path + "/TblPr"); err != nil {
return err
}
}
if m.TrPr != nil {
if err := m.TrPr.ValidateWithPath(path + "/TrPr"); err != nil {
return err
}
}
if m.TcPr != nil {
if err := m.TcPr.ValidateWithPath(path + "/TcPr"); err != nil {
return err
}
}
for i, v := range m.TblStylePr {
if err := v.ValidateWithPath(fmt.Sprintf("%s/TblStylePr[%d]", path, i)); err != nil {
return err
}
}
return nil
}