mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-29 13:49:10 +08:00
483 lines
14 KiB
Go
483 lines
14 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 presentationml
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fmt"
|
|
"log"
|
|
"strconv"
|
|
|
|
"baliance.com/gooxml/schema/schemas.openxmlformats.org/drawingml"
|
|
"baliance.com/gooxml/schema/schemas.openxmlformats.org/officeDocument/2006/sharedTypes"
|
|
)
|
|
|
|
type CT_Presentation struct {
|
|
// Server Zoom
|
|
ServerZoomAttr *drawingml.ST_Percentage
|
|
// First Slide Number
|
|
FirstSlideNumAttr *int32
|
|
// Show Header and Footer Placeholders on Titles
|
|
ShowSpecialPlsOnTitleSldAttr *bool
|
|
// Right-To-Left Views
|
|
RtlAttr *bool
|
|
// Remove Personal Information on Save
|
|
RemovePersonalInfoOnSaveAttr *bool
|
|
// Compatibility Mode
|
|
CompatModeAttr *bool
|
|
// Strict First and Last Characters
|
|
StrictFirstAndLastCharsAttr *bool
|
|
// Embed True Type Fonts
|
|
EmbedTrueTypeFontsAttr *bool
|
|
// Save Subset Fonts
|
|
SaveSubsetFontsAttr *bool
|
|
// Automatically Compress Pictures
|
|
AutoCompressPicturesAttr *bool
|
|
// Bookmark ID Seed
|
|
BookmarkIdSeedAttr *uint32
|
|
// Document Conformance Class
|
|
ConformanceAttr sharedTypes.ST_ConformanceClass
|
|
// List of Slide Master IDs
|
|
SldMasterIdLst *CT_SlideMasterIdList
|
|
// List of Notes Master IDs
|
|
NotesMasterIdLst *CT_NotesMasterIdList
|
|
// List of Handout Master IDs
|
|
HandoutMasterIdLst *CT_HandoutMasterIdList
|
|
// List of Slide IDs
|
|
SldIdLst *CT_SlideIdList
|
|
// Presentation Slide Size
|
|
SldSz *CT_SlideSize
|
|
// Notes Slide Size
|
|
NotesSz *drawingml.CT_PositiveSize2D
|
|
// Smart Tags
|
|
SmartTags *CT_SmartTags
|
|
// Embedded Font List
|
|
EmbeddedFontLst *CT_EmbeddedFontList
|
|
// List of Custom Shows
|
|
CustShowLst *CT_CustomShowList
|
|
// Photo Album Information
|
|
PhotoAlbum *CT_PhotoAlbum
|
|
// List of Customer Data Buckets
|
|
CustDataLst *CT_CustomerDataList
|
|
// Kinsoku Settings
|
|
Kinsoku *CT_Kinsoku
|
|
// Presentation Default Text Style
|
|
DefaultTextStyle *drawingml.CT_TextListStyle
|
|
// Modification Verifier
|
|
ModifyVerifier *CT_ModifyVerifier
|
|
// Extension List
|
|
ExtLst *CT_ExtensionList
|
|
}
|
|
|
|
func NewCT_Presentation() *CT_Presentation {
|
|
ret := &CT_Presentation{}
|
|
ret.NotesSz = drawingml.NewCT_PositiveSize2D()
|
|
return ret
|
|
}
|
|
|
|
func (m *CT_Presentation) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
|
|
if m == nil {
|
|
return nil
|
|
}
|
|
if m.ServerZoomAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "serverZoom"},
|
|
Value: fmt.Sprintf("%v", *m.ServerZoomAttr)})
|
|
}
|
|
if m.FirstSlideNumAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "firstSlideNum"},
|
|
Value: fmt.Sprintf("%v", *m.FirstSlideNumAttr)})
|
|
}
|
|
if m.ShowSpecialPlsOnTitleSldAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "showSpecialPlsOnTitleSld"},
|
|
Value: fmt.Sprintf("%v", *m.ShowSpecialPlsOnTitleSldAttr)})
|
|
}
|
|
if m.RtlAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "rtl"},
|
|
Value: fmt.Sprintf("%v", *m.RtlAttr)})
|
|
}
|
|
if m.RemovePersonalInfoOnSaveAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "removePersonalInfoOnSave"},
|
|
Value: fmt.Sprintf("%v", *m.RemovePersonalInfoOnSaveAttr)})
|
|
}
|
|
if m.CompatModeAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "compatMode"},
|
|
Value: fmt.Sprintf("%v", *m.CompatModeAttr)})
|
|
}
|
|
if m.StrictFirstAndLastCharsAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "strictFirstAndLastChars"},
|
|
Value: fmt.Sprintf("%v", *m.StrictFirstAndLastCharsAttr)})
|
|
}
|
|
if m.EmbedTrueTypeFontsAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "embedTrueTypeFonts"},
|
|
Value: fmt.Sprintf("%v", *m.EmbedTrueTypeFontsAttr)})
|
|
}
|
|
if m.SaveSubsetFontsAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "saveSubsetFonts"},
|
|
Value: fmt.Sprintf("%v", *m.SaveSubsetFontsAttr)})
|
|
}
|
|
if m.AutoCompressPicturesAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "autoCompressPictures"},
|
|
Value: fmt.Sprintf("%v", *m.AutoCompressPicturesAttr)})
|
|
}
|
|
if m.BookmarkIdSeedAttr != nil {
|
|
start.Attr = append(start.Attr, xml.Attr{Name: xml.Name{Local: "bookmarkIdSeed"},
|
|
Value: fmt.Sprintf("%v", *m.BookmarkIdSeedAttr)})
|
|
}
|
|
if m.ConformanceAttr != sharedTypes.ST_ConformanceClassUnset {
|
|
attr, err := m.ConformanceAttr.MarshalXMLAttr(xml.Name{Local: "conformance"})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
start.Attr = append(start.Attr, attr)
|
|
}
|
|
e.EncodeToken(start)
|
|
if m.SldMasterIdLst != nil {
|
|
sesldMasterIdLst := xml.StartElement{Name: xml.Name{Local: "p:sldMasterIdLst"}}
|
|
e.EncodeElement(m.SldMasterIdLst, sesldMasterIdLst)
|
|
}
|
|
if m.NotesMasterIdLst != nil {
|
|
senotesMasterIdLst := xml.StartElement{Name: xml.Name{Local: "p:notesMasterIdLst"}}
|
|
e.EncodeElement(m.NotesMasterIdLst, senotesMasterIdLst)
|
|
}
|
|
if m.HandoutMasterIdLst != nil {
|
|
sehandoutMasterIdLst := xml.StartElement{Name: xml.Name{Local: "p:handoutMasterIdLst"}}
|
|
e.EncodeElement(m.HandoutMasterIdLst, sehandoutMasterIdLst)
|
|
}
|
|
if m.SldIdLst != nil {
|
|
sesldIdLst := xml.StartElement{Name: xml.Name{Local: "p:sldIdLst"}}
|
|
e.EncodeElement(m.SldIdLst, sesldIdLst)
|
|
}
|
|
if m.SldSz != nil {
|
|
sesldSz := xml.StartElement{Name: xml.Name{Local: "p:sldSz"}}
|
|
e.EncodeElement(m.SldSz, sesldSz)
|
|
}
|
|
senotesSz := xml.StartElement{Name: xml.Name{Local: "p:notesSz"}}
|
|
e.EncodeElement(m.NotesSz, senotesSz)
|
|
if m.SmartTags != nil {
|
|
sesmartTags := xml.StartElement{Name: xml.Name{Local: "p:smartTags"}}
|
|
e.EncodeElement(m.SmartTags, sesmartTags)
|
|
}
|
|
if m.EmbeddedFontLst != nil {
|
|
seembeddedFontLst := xml.StartElement{Name: xml.Name{Local: "p:embeddedFontLst"}}
|
|
e.EncodeElement(m.EmbeddedFontLst, seembeddedFontLst)
|
|
}
|
|
if m.CustShowLst != nil {
|
|
secustShowLst := xml.StartElement{Name: xml.Name{Local: "p:custShowLst"}}
|
|
e.EncodeElement(m.CustShowLst, secustShowLst)
|
|
}
|
|
if m.PhotoAlbum != nil {
|
|
sephotoAlbum := xml.StartElement{Name: xml.Name{Local: "p:photoAlbum"}}
|
|
e.EncodeElement(m.PhotoAlbum, sephotoAlbum)
|
|
}
|
|
if m.CustDataLst != nil {
|
|
secustDataLst := xml.StartElement{Name: xml.Name{Local: "p:custDataLst"}}
|
|
e.EncodeElement(m.CustDataLst, secustDataLst)
|
|
}
|
|
if m.Kinsoku != nil {
|
|
sekinsoku := xml.StartElement{Name: xml.Name{Local: "p:kinsoku"}}
|
|
e.EncodeElement(m.Kinsoku, sekinsoku)
|
|
}
|
|
if m.DefaultTextStyle != nil {
|
|
sedefaultTextStyle := xml.StartElement{Name: xml.Name{Local: "p:defaultTextStyle"}}
|
|
e.EncodeElement(m.DefaultTextStyle, sedefaultTextStyle)
|
|
}
|
|
if m.ModifyVerifier != nil {
|
|
semodifyVerifier := xml.StartElement{Name: xml.Name{Local: "p:modifyVerifier"}}
|
|
e.EncodeElement(m.ModifyVerifier, semodifyVerifier)
|
|
}
|
|
if m.ExtLst != nil {
|
|
seextLst := xml.StartElement{Name: xml.Name{Local: "p:extLst"}}
|
|
e.EncodeElement(m.ExtLst, seextLst)
|
|
}
|
|
e.EncodeToken(xml.EndElement{Name: start.Name})
|
|
return nil
|
|
}
|
|
|
|
func (m *CT_Presentation) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
|
|
// initialize to default
|
|
m.NotesSz = drawingml.NewCT_PositiveSize2D()
|
|
for _, attr := range start.Attr {
|
|
if attr.Name.Local == "serverZoom" {
|
|
parsed, err := ParseUnionST_Percentage(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.ServerZoomAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "firstSlideNum" {
|
|
parsed, err := strconv.ParseInt(attr.Value, 10, 32)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
pt := int32(parsed)
|
|
m.FirstSlideNumAttr = &pt
|
|
}
|
|
if attr.Name.Local == "showSpecialPlsOnTitleSld" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.ShowSpecialPlsOnTitleSldAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "rtl" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RtlAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "removePersonalInfoOnSave" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.RemovePersonalInfoOnSaveAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "compatMode" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.CompatModeAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "strictFirstAndLastChars" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.StrictFirstAndLastCharsAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "embedTrueTypeFonts" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.EmbedTrueTypeFontsAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "saveSubsetFonts" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.SaveSubsetFontsAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "autoCompressPictures" {
|
|
parsed, err := strconv.ParseBool(attr.Value)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.AutoCompressPicturesAttr = &parsed
|
|
}
|
|
if attr.Name.Local == "bookmarkIdSeed" {
|
|
parsed, err := strconv.ParseUint(attr.Value, 10, 32)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
pt := uint32(parsed)
|
|
m.BookmarkIdSeedAttr = &pt
|
|
}
|
|
if attr.Name.Local == "conformance" {
|
|
m.ConformanceAttr.UnmarshalXMLAttr(attr)
|
|
}
|
|
}
|
|
lCT_Presentation:
|
|
for {
|
|
tok, err := d.Token()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
switch el := tok.(type) {
|
|
case xml.StartElement:
|
|
switch el.Name.Local {
|
|
case "sldMasterIdLst":
|
|
m.SldMasterIdLst = NewCT_SlideMasterIdList()
|
|
if err := d.DecodeElement(m.SldMasterIdLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "notesMasterIdLst":
|
|
m.NotesMasterIdLst = NewCT_NotesMasterIdList()
|
|
if err := d.DecodeElement(m.NotesMasterIdLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "handoutMasterIdLst":
|
|
m.HandoutMasterIdLst = NewCT_HandoutMasterIdList()
|
|
if err := d.DecodeElement(m.HandoutMasterIdLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "sldIdLst":
|
|
m.SldIdLst = NewCT_SlideIdList()
|
|
if err := d.DecodeElement(m.SldIdLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "sldSz":
|
|
m.SldSz = NewCT_SlideSize()
|
|
if err := d.DecodeElement(m.SldSz, &el); err != nil {
|
|
return err
|
|
}
|
|
case "notesSz":
|
|
if err := d.DecodeElement(m.NotesSz, &el); err != nil {
|
|
return err
|
|
}
|
|
case "smartTags":
|
|
m.SmartTags = NewCT_SmartTags()
|
|
if err := d.DecodeElement(m.SmartTags, &el); err != nil {
|
|
return err
|
|
}
|
|
case "embeddedFontLst":
|
|
m.EmbeddedFontLst = NewCT_EmbeddedFontList()
|
|
if err := d.DecodeElement(m.EmbeddedFontLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "custShowLst":
|
|
m.CustShowLst = NewCT_CustomShowList()
|
|
if err := d.DecodeElement(m.CustShowLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "photoAlbum":
|
|
m.PhotoAlbum = NewCT_PhotoAlbum()
|
|
if err := d.DecodeElement(m.PhotoAlbum, &el); err != nil {
|
|
return err
|
|
}
|
|
case "custDataLst":
|
|
m.CustDataLst = NewCT_CustomerDataList()
|
|
if err := d.DecodeElement(m.CustDataLst, &el); err != nil {
|
|
return err
|
|
}
|
|
case "kinsoku":
|
|
m.Kinsoku = NewCT_Kinsoku()
|
|
if err := d.DecodeElement(m.Kinsoku, &el); err != nil {
|
|
return err
|
|
}
|
|
case "defaultTextStyle":
|
|
m.DefaultTextStyle = drawingml.NewCT_TextListStyle()
|
|
if err := d.DecodeElement(m.DefaultTextStyle, &el); err != nil {
|
|
return err
|
|
}
|
|
case "modifyVerifier":
|
|
m.ModifyVerifier = NewCT_ModifyVerifier()
|
|
if err := d.DecodeElement(m.ModifyVerifier, &el); err != nil {
|
|
return err
|
|
}
|
|
case "extLst":
|
|
m.ExtLst = NewCT_ExtensionList()
|
|
if err := d.DecodeElement(m.ExtLst, &el); err != nil {
|
|
return err
|
|
}
|
|
default:
|
|
log.Printf("skipping unsupported element %v", el.Name)
|
|
if err := d.Skip(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
case xml.EndElement:
|
|
break lCT_Presentation
|
|
case xml.CharData:
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// Validate validates the CT_Presentation and its children
|
|
func (m *CT_Presentation) Validate() error {
|
|
return m.ValidateWithPath("CT_Presentation")
|
|
}
|
|
|
|
// ValidateWithPath validates the CT_Presentation and its children, prefixing error messages with path
|
|
func (m *CT_Presentation) ValidateWithPath(path string) error {
|
|
if m.ServerZoomAttr != nil {
|
|
if err := m.ServerZoomAttr.ValidateWithPath(path + "/ServerZoomAttr"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.BookmarkIdSeedAttr != nil {
|
|
if *m.BookmarkIdSeedAttr < 1 {
|
|
return fmt.Errorf("%s/m.BookmarkIdSeedAttr must be >= 1 (have %v)", path, *m.BookmarkIdSeedAttr)
|
|
}
|
|
if *m.BookmarkIdSeedAttr >= 2147483648 {
|
|
return fmt.Errorf("%s/m.BookmarkIdSeedAttr must be < 2147483648 (have %v)", path, *m.BookmarkIdSeedAttr)
|
|
}
|
|
}
|
|
if err := m.ConformanceAttr.ValidateWithPath(path + "/ConformanceAttr"); err != nil {
|
|
return err
|
|
}
|
|
if m.SldMasterIdLst != nil {
|
|
if err := m.SldMasterIdLst.ValidateWithPath(path + "/SldMasterIdLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.NotesMasterIdLst != nil {
|
|
if err := m.NotesMasterIdLst.ValidateWithPath(path + "/NotesMasterIdLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.HandoutMasterIdLst != nil {
|
|
if err := m.HandoutMasterIdLst.ValidateWithPath(path + "/HandoutMasterIdLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.SldIdLst != nil {
|
|
if err := m.SldIdLst.ValidateWithPath(path + "/SldIdLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.SldSz != nil {
|
|
if err := m.SldSz.ValidateWithPath(path + "/SldSz"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err := m.NotesSz.ValidateWithPath(path + "/NotesSz"); err != nil {
|
|
return err
|
|
}
|
|
if m.SmartTags != nil {
|
|
if err := m.SmartTags.ValidateWithPath(path + "/SmartTags"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.EmbeddedFontLst != nil {
|
|
if err := m.EmbeddedFontLst.ValidateWithPath(path + "/EmbeddedFontLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.CustShowLst != nil {
|
|
if err := m.CustShowLst.ValidateWithPath(path + "/CustShowLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.PhotoAlbum != nil {
|
|
if err := m.PhotoAlbum.ValidateWithPath(path + "/PhotoAlbum"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.CustDataLst != nil {
|
|
if err := m.CustDataLst.ValidateWithPath(path + "/CustDataLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.Kinsoku != nil {
|
|
if err := m.Kinsoku.ValidateWithPath(path + "/Kinsoku"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.DefaultTextStyle != nil {
|
|
if err := m.DefaultTextStyle.ValidateWithPath(path + "/DefaultTextStyle"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.ModifyVerifier != nil {
|
|
if err := m.ModifyVerifier.ValidateWithPath(path + "/ModifyVerifier"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if m.ExtLst != nil {
|
|
if err := m.ExtLst.ValidateWithPath(path + "/ExtLst"); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|