170 lines
4.3 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 drawingml
import (
"encoding/xml"
"fmt"
"log"
)
type CT_XYAdjustHandle struct {
GdRefXAttr *string
MinXAttr *ST_AdjCoordinate
MaxXAttr *ST_AdjCoordinate
GdRefYAttr *string
MinYAttr *ST_AdjCoordinate
MaxYAttr *ST_AdjCoordinate
Pos *CT_AdjPoint2D
}
func NewCT_XYAdjustHandle() *CT_XYAdjustHandle {
ret := &CT_XYAdjustHandle{}
ret.Pos = NewCT_AdjPoint2D()
return ret
}
func (m *CT_XYAdjustHandle) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
if m.GdRefXAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "gdRefX"},
Value: fmt.Sprintf("%v", *m.GdRefXAttr)})
}
if m.MinXAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "minX"},
Value: fmt.Sprintf("%v", *m.MinXAttr)})
}
if m.MaxXAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "maxX"},
Value: fmt.Sprintf("%v", *m.MaxXAttr)})
}
if m.GdRefYAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "gdRefY"},
Value: fmt.Sprintf("%v", *m.GdRefYAttr)})
}
if m.MinYAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "minY"},
Value: fmt.Sprintf("%v", *m.MinYAttr)})
}
if m.MaxYAttr != nil {
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "maxY"},
Value: fmt.Sprintf("%v", *m.MaxYAttr)})
}
e.EncodeToken(start)
sepos := xml.StartElement{Name: xml.Name{Local: "a:pos"}}
e.EncodeElement(m.Pos, sepos)
e.EncodeToken(xml.EndElement{Name: start.Name})
return nil
}
func (m *CT_XYAdjustHandle) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
// initialize to default
m.Pos = NewCT_AdjPoint2D()
for _, attr := range start.Attr {
if attr.Name.Local == "gdRefX" {
parsed, err := attr.Value, error(nil)
if err != nil {
return err
}
m.GdRefXAttr = &parsed
}
if attr.Name.Local == "minX" {
parsed, err := ParseUnionST_AdjCoordinate(attr.Value)
if err != nil {
return err
}
m.MinXAttr = &parsed
}
if attr.Name.Local == "maxX" {
parsed, err := ParseUnionST_AdjCoordinate(attr.Value)
if err != nil {
return err
}
m.MaxXAttr = &parsed
}
if attr.Name.Local == "gdRefY" {
parsed, err := attr.Value, error(nil)
if err != nil {
return err
}
m.GdRefYAttr = &parsed
}
if attr.Name.Local == "minY" {
parsed, err := ParseUnionST_AdjCoordinate(attr.Value)
if err != nil {
return err
}
m.MinYAttr = &parsed
}
if attr.Name.Local == "maxY" {
parsed, err := ParseUnionST_AdjCoordinate(attr.Value)
if err != nil {
return err
}
m.MaxYAttr = &parsed
}
}
lCT_XYAdjustHandle:
for {
tok, err := d.Token()
if err != nil {
return err
}
switch el := tok.(type) {
case xml.StartElement:
switch el.Name.Local {
case "pos":
if err := d.DecodeElement(m.Pos, &el); err != nil {
return err
}
default:
log.Printf("skipping unsupported element on CT_XYAdjustHandle %v", el.Name)
if err := d.Skip(); err != nil {
return err
}
}
case xml.EndElement:
break lCT_XYAdjustHandle
case xml.CharData:
}
}
return nil
}
// Validate validates the CT_XYAdjustHandle and its children
func (m *CT_XYAdjustHandle) Validate() error {
return m.ValidateWithPath("CT_XYAdjustHandle")
}
// ValidateWithPath validates the CT_XYAdjustHandle and its children, prefixing error messages with path
func (m *CT_XYAdjustHandle) ValidateWithPath(path string) error {
if m.MinXAttr != nil {
if err := m.MinXAttr.ValidateWithPath(path + "/MinXAttr"); err != nil {
return err
}
}
if m.MaxXAttr != nil {
if err := m.MaxXAttr.ValidateWithPath(path + "/MaxXAttr"); err != nil {
return err
}
}
if m.MinYAttr != nil {
if err := m.MinYAttr.ValidateWithPath(path + "/MinYAttr"); err != nil {
return err
}
}
if m.MaxYAttr != nil {
if err := m.MaxYAttr.ValidateWithPath(path + "/MaxYAttr"); err != nil {
return err
}
}
if err := m.Pos.ValidateWithPath(path + "/Pos"); err != nil {
return err
}
return nil
}