2017-08-28 20:56:18 -05:00
//
2020-08-23 14:15:53 +00:00
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
2024-11-22 00:17:48 +00:00
package presentation ; import ( _gg "archive/zip" ; _cgg "bytes" ; _fc "encoding/xml" ; _gab "errors" ; _be "fmt" ; _gbg "github.com/unidoc/unioffice" ; _gb "github.com/unidoc/unioffice/common" ; _ga "github.com/unidoc/unioffice/common/logger" ; _ff "github.com/unidoc/unioffice/common/tempstorage" ;
_cgc "github.com/unidoc/unioffice/drawing" ; _fd "github.com/unidoc/unioffice/internal/formatutils" ; _ce "github.com/unidoc/unioffice/internal/license" ; _ca "github.com/unidoc/unioffice/measurement" ; _db "github.com/unidoc/unioffice/schema/soo/dml" ; _g "github.com/unidoc/unioffice/schema/soo/dml/chart" ;
_a "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _fe "github.com/unidoc/unioffice/schema/soo/pkg/relationships" ; _ed "github.com/unidoc/unioffice/schema/soo/pml" ; _f "github.com/unidoc/unioffice/zippkg" ; _df "image" ; _ge "image/jpeg" ; _b "io" ; _ee "math" ;
_e "os" ; _feg "path" ; _ec "sort" ; _c "strconv" ; _cg "strings" ; ) ; func ( _eb * chart ) RelId ( ) string { return _eb . _fa } ;
2020-08-23 14:15:53 +00:00
2024-11-22 00:17:48 +00:00
// ShowPr returns the ShowPr property.
func ( _egda PresentationProperties ) ShowPr ( ) * _ed . CT_ShowProperties { return _egda . _cda . ShowPr } ;
2024-05-08 13:54:39 +00:00
2024-11-22 00:17:48 +00:00
// ExtLst returns the ExtLst property.
func ( _ageg PresentationProperties ) ExtLst ( ) * _ed . CT_ExtensionList { return _ageg . _cda . ExtLst } ; func ( _edeb * Slide ) getSlideRels ( ) _gb . Relationships { _ddgb := _edeb . _fagc ; for _cfe , _fccaf := range _ddgb . Slides ( ) { if * _edeb . _efg == * _fccaf . _efg { return _ddgb . _edg [ _cfe ] ;
} ; } ; return _gb . Relationships { } ; } ;
2024-05-08 13:54:39 +00:00
2024-11-22 00:17:48 +00:00
// X returns the inner wrapped XML type.
func ( _bfd PresentationProperties ) X ( ) * _ed . PresentationPr { return _bfd . _cda } ;
2024-05-08 13:54:39 +00:00
2024-11-22 00:17:48 +00:00
// X returns the inner wrapped XML type.
func ( _bgd PlaceHolder ) X ( ) * _ed . CT_Shape { return _bgd . _dfd } ;
2022-02-25 19:20:45 +00:00
2024-11-22 00:17:48 +00:00
// SetHeight sets height of slide screen size with given value in EMU units.
func ( _bdc * SlideScreenSize ) SetHeight ( val int32 ) { _bdc [ 1 ] = val } ;
2021-08-23 20:44:48 +00:00
2024-11-22 00:17:48 +00:00
// SlideMaster is the slide master for a presentation.
type SlideMaster struct { _bfbe * Presentation ; _gffg _gb . Relationships ; _gfba * _ed . SldMaster ; } ;
2021-01-04 16:11:39 +00:00
2024-11-22 00:17:48 +00:00
// PlaceHolders returns all of the content place holders within a given slide.
func ( _ccef Slide ) PlaceHolders ( ) [ ] PlaceHolder { _cgca := [ ] PlaceHolder { } ; for _ , _dag := range _ccef . _efg . CSld . SpTree . Choice { for _ , _cbac := range _dag . Sp { if _cbac . NvSpPr != nil && _cbac . NvSpPr . NvPr != nil && _cbac . NvSpPr . NvPr . Ph != nil { _cgca = append ( _cgca , PlaceHolder { _cbac , _ccef . _efg } ) ;
} ; } ; } ; return _cgca ; } ;
2024-05-08 13:54:39 +00:00
2024-11-22 00:17:48 +00:00
// NormalViewPr returns the NormalViewPr property.
func ( _eaf ViewProperties ) NormalViewPr ( ) * _ed . CT_NormalViewProperties { return _eaf . _agecf . NormalViewPr ; } ;
2022-04-09 14:27:46 +00:00
2024-11-22 00:17:48 +00:00
// SlideLayouts returns a slice of all layouts in SlideMaster.
func ( _dbb SlideMaster ) SlideLayouts ( ) [ ] SlideLayout { _ddaa := map [ string ] int { } ; _def := [ ] SlideLayout { } ; for _ , _bebd := range _dbb . _gffg . Relationships ( ) { _gfc := _cg . Replace ( _bebd . Target ( ) , ".\u002e\u002f\u0073\u006c\u0069\u0064e\u004c\u0061\u0079\u006f\u0075\u0074\u0073\u002f\u0073l\u0069\u0064\u0065L\u0061y\u006f\u0075\u0074" , "" , - 1 ) ;
_gfc = _cg . Replace ( _gfc , "\u002e\u0078\u006d\u006c" , "" , - 1 ) ; if _gadb , _gefe := _c . ParseInt ( _gfc , 10 , 32 ) ; _gefe == nil { _ddaa [ _bebd . ID ( ) ] = int ( _gadb ) ; } ; } ; for _ , _caf := range _dbb . _gfba . SldLayoutIdLst . SldLayoutId { if _ceac , _edgd := _ddaa [ _caf . RIdAttr ] ;
_edgd { _egdg := _dbb . _bfbe . _ffg [ _ceac - 1 ] ; _def = append ( _def , SlideLayout { _egdg } ) ; } ; } ; return _def ; } ;
2022-01-15 21:17:38 +00:00
2024-11-22 00:17:48 +00:00
// Properties returns the properties of the TextBox.
func ( _gadc TextBox ) Properties ( ) _cgc . ShapeProperties { if _gadc . _baf . SpPr == nil { _gadc . _baf . SpPr = _db . NewCT_ShapeProperties ( ) ; } ; return _cgc . MakeShapeProperties ( _gadc . _baf . SpPr ) ; } ;
2021-09-22 16:41:01 +00:00
2024-11-22 00:17:48 +00:00
// AddParagraph adds a new paragraph to a placeholder.
func ( _bcc PlaceHolder ) AddParagraph ( ) _cgc . Paragraph { _dfe := _cgc . MakeParagraph ( _db . NewCT_TextParagraph ( ) ) ; _bcc . _dfd . TxBody . P = append ( _bcc . _dfd . TxBody . P , _dfe . X ( ) ) ; return _dfe ; } ;
2022-02-25 19:20:45 +00:00
2024-11-22 00:17:48 +00:00
// NewSlideScreenSize returns slide screen size with default MS PowerPoint slide screen size 16x9.
func NewSlideScreenSize ( ) SlideScreenSize { return NewSlideScreenSizeWithValue ( SlideScreenSize16x9 [ 0 ] , SlideScreenSize16x9 [ 1 ] ) ; } ;
2020-08-23 14:15:53 +00:00
2024-11-22 00:17:48 +00:00
// SlideSize returns presentation slide size.
func ( _eegg * Presentation ) SlideSize ( ) SlideSize { if _eegg . _eec . SldSz == nil { _eegg . _eec . SldSz = _ed . NewCT_SlideSize ( ) ; } ; return SlideSize { _eegg . _eec . SldSz , _eegg } ; } ; type chart struct { _dg * _g . ChartSpace ; _fa string ; _dgd string ; } ;
2021-04-23 20:00:00 +00:00
2024-11-22 00:17:48 +00:00
// Themes returns an array of presentation themes.
func ( _gdfg * Presentation ) Themes ( ) [ ] * _db . Theme { return _gdfg . _fcae } ;
// SlideLayouts returns the slide layouts defined in the presentation.
func ( _cdaee * Presentation ) SlideLayouts ( ) [ ] SlideLayout { _efb := [ ] SlideLayout { } ; for _ , _bffg := range _cdaee . _ffg { if _bffg == nil { continue ; } ; if _bffg . CSld . NameAttr == nil { continue ; } ; _efb = append ( _efb , SlideLayout { _bffg } ) ; } ; return _efb ; } ; func ( _fef sort2d ) Len ( ) int { return len ( _fef ) } ;
// AddImageToRels adds an image relationship to a slide without putting image on the slide.
func ( _gacd Slide ) AddImageToRels ( img _gb . ImageRef ) string { _adgb := 0 ; for _fgf , _cgff := range _gacd . _fagc . Images { if _cgff == img { _adgb = _fgf + 1 ; break ; } ; } ; var _bggb string ; for _dac , _becgc := range _gacd . _fagc . Slides ( ) { if _becgc . _efg == _gacd . _efg { _ecdc := _be . Sprintf ( "\u002e\u002e\u002f\u006ded\u0069\u0061\u002f\u0069\u006d\u0061\u0067\u0065\u0025\u0064\u002e\u0025\u0073" , _adgb , img . Format ( ) ) ;
_bba := _gacd . _fagc . _edg [ _dac ] . AddRelationship ( _ecdc , _gbg . ImageType ) ; _bggb = _bba . ID ( ) ; } ; } ; return _bggb ; } ;
// Remove removes a placeholder from a presentation.
func ( _efcd PlaceHolder ) Remove ( ) error { for _bcdb , _ebecc := range _efcd . _ebd . CSld . SpTree . Choice { for _ , _bac := range _ebecc . Sp { if _bac == _efcd . _dfd { copy ( _efcd . _ebd . CSld . SpTree . Choice [ _bcdb : ] , _efcd . _ebd . CSld . SpTree . Choice [ _bcdb + 1 : ] ) ;
_efcd . _ebd . CSld . SpTree . Choice = _efcd . _ebd . CSld . SpTree . Choice [ 0 : len ( _efcd . _ebd . CSld . SpTree . Choice ) - 1 ] ; return nil ; } ; } ; } ; return _gab . New ( "\u0070\u006c\u0061\u0063\u0065\u0068\u006f\u006c\u0064\u0065r\u0020\u006e\u006f\u0074\u0020\u0066\u006fu\u006e\u0064\u0020\u0069\u006e\u0020\u0073\u006c\u0069\u0064\u0065" ) ;
2024-06-20 13:33:45 +00:00
} ;
2020-06-07 20:13:15 +07:00
2024-11-22 00:17:48 +00:00
// AddSlideWithLayout adds a new slide with content copied from a layout. Normally you should
// use AddDefaultSlideWithLayout as it will do some post processing similar to PowerPoint to
// clear place holder text, etc.
func ( _agb * Presentation ) AddSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _cfba := _ed . NewCT_SlideIdListEntry ( ) ; _cfba . IdAttr = _agb . nextSlideID ( ) ; _agb . _eec . SldIdLst . SldId = append ( _agb . _eec . SldIdLst . SldId , _cfba ) ; _eebc := _ed . NewSld ( ) ; _ebdc := _cgg . Buffer { } ;
_babe := _fc . NewEncoder ( & _ebdc ) ; _cgga := _fc . StartElement { Name : _fc . Name { Local : "\u0073\u006c\u0069d\u0065" } } ; _cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078\u006d\u006cn\u0073" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002eo\u0072\u0067\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069o\u006e\u006d\u006c\u002f\u0032\u00300\u0036\u002f\u006da\u0069\u006e" } ) ;
_cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0061" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065m\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006cf\u006f\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067m\u006c\u002f\u0032\u0030\u0030\u0036\u002f\u006d\u0061\u0069\u006e" } ) ;
_cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0070" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078m\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002eo\u0072\u0067\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069o\u006e\u006d\u006c\u002f\u0032\u00300\u0036\u002f\u006da\u0069\u006e" } ) ;
_cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0072" } , Value : "\u0068\u0074\u0074\u0070\u003a\u002f/\u0073\u0063\u0068\u0065\u006da\u0073\u002e\u006f\u0070\u0065\u006ex\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069c\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073h\u0069\u0070\u0073" } ) ;
_cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078\u006d\u006c\u006e\u0073\u003a\u0073\u0068" } , Value : "\u0068\u0074\u0074\u0070\u003a/\u002f\u0073\u0063\u0068\u0065m\u0061s\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067/\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0073\u0068\u0061\u0072e\u0064\u0054\u0079\u0070\u0065\u0073" } ) ;
_cgga . Attr = append ( _cgga . Attr , _fc . Attr { Name : _fc . Name { Local : "\u0078m\u006c\u006e\u0073\u003a\u0078\u006dl" } , Value : "\u0068\u0074tp\u003a\u002f\u002fw\u0077\u0077\u002e\u00773.o\u0072g/\u0058\u004d\u004c\u002f\u0031\u0039\u00398/\u006e\u0061\u006d\u0065\u0073\u0070\u0061c\u0065" } ) ;
if _cfd := l . _acdd . CSld . MarshalXML ( _babe , _cgga ) ; _cfd != nil { return Slide { } , _cfd ; } ; _babe . Flush ( ) ; _gcaf := _fc . NewDecoder ( & _ebdc ) ; _eebc . CSld = _ed . NewCT_CommonSlideData ( ) ; if _gge := _gcaf . Decode ( _eebc . CSld ) ; _gge != nil { return Slide { } , _gge ;
} ; _eebc . CSld . NameAttr = nil ; _eebc . CSld . SpTree . Choice = _ead ( _eebc . CSld . SpTree . Choice ) ; _agb . _bbf = append ( _agb . _bbf , _eebc ) ; _agb . _bgf = append ( _agb . _bgf , len ( _agb . _bbf ) ) ; _edde := _agb . _ede . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . OfficeDocumentType , len ( _agb . _bbf ) , _gbg . SlideType ) ;
_cfba . RIdAttr = _edde . ID ( ) ; _bfg := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideType , len ( _agb . _bbf ) ) ; _agb . ContentTypes . AddOverride ( _bfg , _gbg . SlideContentType ) ; _bfc := _gb . NewRelationships ( ) ; _agb . _edg = append ( _agb . _edg , _bfc ) ;
_gbf := len ( _agb . _edg ) - 1 ; for _agd , _ddg := range _agb . _ffg { if _ddg == l . X ( ) { _agbb := _agb . _bff [ _agd ] ; for _ , _bdf := range _agbb . X ( ) . Relationship { if _bdf . TypeAttr != _gbg . SlideMasterType { _agb . _edg [ _gbf ] . X ( ) . Relationship = append ( _agb . _edg [ _gbf ] . X ( ) . Relationship , _bdf ) ;
} ; } ; _bfc . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideType , _agd + 1 , _gbg . SlideLayoutType ) ; } ; } ; _abe := Slide { _cfba , _eebc , _agb , nil } ; return _abe , nil ; } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// SlideText is an array of extracted text items which has some methods for representing extracted text from a slide.
type SlideText struct { Items [ ] * TextItem ; } ; func ( _ccca * Presentation ) onNewRelationship ( _gac * _f . DecodeMap , _abb , _dfag string , _fce [ ] * _gg . File , _acce * _fe . Relationship , _fgg _f . Target ) error { _cadef := _gbg . DocTypePresentation ; switch _dfag { case _gbg . OfficeDocumentType : _ccca . _eec = _ed . NewPresentation ( ) ;
_gac . AddTarget ( _abb , _ccca . _eec , _dfag , 0 ) ; _gac . AddTarget ( _f . RelationsPathFor ( _abb ) , _ccca . _ede . X ( ) , _dfag , 0 ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . CorePropertiesType : _gac . AddTarget ( _abb , _ccca . CoreProperties . X ( ) , _dfag , 0 ) ;
_acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . CustomPropertiesType : _gac . AddTarget ( _abb , _ccca . CustomProperties . X ( ) , _dfag , 0 ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . PresentationPropertiesType : _gac . AddTarget ( _abb , _ccca . _bd . X ( ) , _dfag , 0 ) ;
_acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . ViewPropertiesType : _gac . AddTarget ( _abb , _ccca . _edd . X ( ) , _dfag , 0 ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . TableStylesType : _gac . AddTarget ( _abb , _ccca . _ffb . X ( ) , _dfag , 0 ) ;
_acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . HyperLinkType : _ccfd := _db . NewCT_Hyperlink ( ) ; _abbg := uint32 ( len ( _ccca . _cgfe ) ) ; _gac . AddTarget ( _abb , _ccfd , _dfag , _abbg ) ; _ccca . _cgfe = append ( _ccca . _cgfe , _ccfd ) ;
case _gbg . CustomXMLType : if _accc , _ffgc := _fd . StringToNumbers ( _abb ) ; _ffgc { if len ( _ccca . _gee ) < _accc { _dcad := & _gbg . XSDAny { } ; _gac . AddTarget ( _abb , _dcad , _dfag , uint32 ( _accc ) ) ; _ccca . _gee = append ( _ccca . _gee , _dcad ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _accc ) ;
} ; } ; case _gbg . ChartType : _cefa := chart { _dg : _g . NewChartSpace ( ) } ; _faba := uint32 ( len ( _ccca . _fac ) ) ; _gac . AddTarget ( _abb , _cefa . _dg , _dfag , _faba ) ; _ccca . _fac = append ( _ccca . _fac , & _cefa ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , len ( _ccca . _fac ) ) ;
_cefa . _dgd = _acce . TargetAttr ; case _gbg . HandoutMasterType : _fcce := _ed . NewHandoutMaster ( ) ; _cefb := uint32 ( len ( _ccca . _cdf ) ) ; _gac . AddTarget ( _abb , _fcce , _dfag , _cefb ) ; _ccca . _cdf = append ( _ccca . _cdf , _fcce ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , len ( _ccca . _cdf ) ) ;
case _gbg . NotesMasterType : if _ecbd , _cgae := _fd . StringToNumbers ( _abb ) ; _cgae { if len ( _ccca . _cee ) < _ecbd { _eea := _ed . NewNotesMaster ( ) ; _ccca . _cee = append ( _ccca . _cee , _eea ) ; _ccca . _egg = append ( _ccca . _egg , _ecbd ) ; _gac . AddTarget ( _abb , _eea , _dfag , uint32 ( _ecbd ) ) ;
_acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _ecbd ) ; } ; } ; case _gbg . ExtendedPropertiesType : _gac . AddTarget ( _abb , _ccca . AppProperties . X ( ) , _dfag , 0 ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , 0 ) ; case _gbg . SlideType : if _gfec , _fdea := _fd . StringToNumbers ( _abb ) ;
_fdea { if len ( _ccca . _bbf ) < _gfec { _abea := _ed . NewSld ( ) ; _ccca . _bbf = append ( _ccca . _bbf , _abea ) ; _ccca . _bgf = append ( _ccca . _bgf , _gfec ) ; _gac . AddTarget ( _abb , _abea , _dfag , uint32 ( _gfec ) ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _gfec ) ;
_acbg := _gb . NewRelationships ( ) ; _gac . AddTarget ( _f . RelationsPathFor ( _abb ) , _acbg . X ( ) , _dfag , 0 ) ; if len ( _ccca . _edg ) >= _gfec { _ccca . _edg [ _gfec - 1 ] = _acbg ; } else { _ccca . _edg = append ( _ccca . _edg , _acbg ) ; } ; } ; } ; case _gbg . SlideMasterType : if _agdd , _dccg := _fd . StringToNumbers ( _abb ) ;
_dccg { if len ( _ccca . _cgf ) < _agdd { _geac := _ed . NewSldMaster ( ) ; if ! _gac . AddTarget ( _abb , _geac , _dfag , uint32 ( _agdd ) ) { return nil ; } ; _ccca . _cgf = append ( _ccca . _cgf , _geac ) ; _ccca . _gca = append ( _ccca . _gca , _agdd ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _agdd ) ;
_gdbf := _gb . NewRelationships ( ) ; _gac . AddTarget ( _f . RelationsPathFor ( _abb ) , _gdbf . X ( ) , _dfag , 0 ) ; if len ( _ccca . _bae ) >= _agdd { _ccca . _bae [ _agdd - 1 ] = _gdbf ; } else { _ccca . _bae = append ( _ccca . _edg , _gdbf ) ; } ; } ; } ; case _gbg . SlideLayoutType : if _fefg , _ffc := _fd . StringToNumbers ( _abb ) ;
_ffc { _ddf := _ed . NewSldLayout ( ) ; if ! _gac . AddTarget ( _abb , _ddf , _dfag , uint32 ( _fefg ) ) { return nil ; } ; for _fdeb := len ( _ccca . _ffg ) ; _fdeb < _fefg ; _fdeb ++ { _ccca . _ffg = append ( _ccca . _ffg , nil ) ; } ; _ccca . _ffg [ _fefg - 1 ] = _ddf ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _fefg ) ;
for _eebe := len ( _ccca . _bff ) ; _eebe < _fefg ; _eebe ++ { _ccca . _bff = append ( _ccca . _bff , _gb . NewRelationships ( ) ) ; } ; _gda := _gb . NewRelationships ( ) ; _gac . AddTarget ( _f . RelationsPathFor ( _abb ) , _gda . X ( ) , _dfag , 0 ) ; _ccca . _bff [ _fefg - 1 ] = _gda ; } ; case _gbg . ThumbnailType : for _dga , _fdfg := range _fce { if _fdfg == nil { continue ;
} ; if _fdfg . Name == _abb { _bbfba , _adbc := _fdfg . Open ( ) ; if _adbc != nil { return _be . Errorf ( "e\u0072\u0072\u006f\u0072\u0020\u0072e\u0061\u0064\u0069\u006e\u0067\u0020\u0074\u0068\u0075m\u0062\u006e\u0061i\u006c:\u0020\u0025\u0073" , _adbc ) ; } ; _ccca . Thumbnail , _ , _adbc = _df . Decode ( _bbfba ) ;
_bbfba . Close ( ) ; if _adbc != nil { return _be . Errorf ( "\u0065\u0072\u0072\u006fr\u0020\u0064\u0065\u0063\u006f\u0064\u0069\u006e\u0067\u0020t\u0068u\u006d\u0062\u006e\u0061\u0069\u006c\u003a \u0025\u0073" , _adbc ) ; } ; _fce [ _dga ] = nil ; } ; } ; case _gbg . ThemeType : if _gfbc , _ebfb := _fd . StringToNumbers ( _abb ) ;
_ebfb { if len ( _ccca . _fcae ) < _gfbc { _abc := _db . NewTheme ( ) ; if ! _gac . AddTarget ( _abb , _abc , _dfag , uint32 ( _gfbc ) ) { return nil ; } ; _ccca . _fcae = append ( _ccca . _fcae , _abc ) ; _ccca . _cdga = append ( _ccca . _cdga , _gfbc ) ; _acce . TargetAttr = _gbg . RelativeFilename ( _cadef , _fgg . Typ , _dfag , _gfbc ) ;
_cdba := _gb . NewRelationships ( ) ; _gac . AddTarget ( _f . RelationsPathFor ( _abb ) , _cdba . X ( ) , _dfag , 0 ) ; if len ( _ccca . _baa ) >= _gfbc { _ccca . _baa [ _gfbc - 1 ] = _cdba ; } else { _ccca . _baa = append ( _ccca . _baa , _cdba ) ; } ; } ; } ; case _gbg . ImageType : _abb = _feg . Clean ( _abb ) ;
if _ded , _gcb := _ccca . _gage [ _abb ] ; _gcb { _acce . TargetAttr = _ded ; return nil ; } ; _bbfd := "" ; for _gbff , _cegd := range _fce { if _cegd == nil { continue ; } ; if _cegd . Name == _abb { _aac , _eage := _f . ExtractToDiskTmp ( _cegd , _ccca . TmpPath ) ; if _eage != nil { return _eage ;
} ; _cfc , _eage := _gb . ImageFromStorage ( _aac ) ; if _eage != nil { return _eage ; } ; _bbfd = _cfc . Format ; if _cfc . Format == "\u006a\u0070\u0065\u0067" && _cg . HasSuffix ( _abb , "\u006a\u0070\u0067" ) { _bbfd = "\u006a\u0070\u0067" ; } ; _fabf := _gb . MakeImageRef ( _cfc , & _ccca . DocBase , _ccca . _ede ) ;
_fabf . SetTarget ( "\u002e\u002e\u002f" + _abb [ 4 : ] ) ; _ccca . Images = append ( _ccca . Images , _fabf ) ; _fce [ _gbff ] = nil ; _bbe := len ( _ccca . Images ) ; if _ffbg , _dbgc := _fd . StringToNumbers ( _abb ) ; _dbgc { _bbe = _ffbg ; } ; _gac . RecordIndex ( _abb , _bbe ) ; break ; } ;
} ; _afda := _gac . IndexFor ( _abb ) ; _acce . TargetAttr = _gbg . RelativeImageFilename ( _cadef , _fgg . Typ , _dfag , _afda , _bbfd ) ; _ccca . _gage [ _abb ] = _acce . TargetAttr ; default : _ga . Log . Debug ( "\u0075\u006e\u0073\u0075\u0070p\u006f\u0072\u0074\u0065\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0073\u0068\u0069\u0070\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0073\u0020\u0074\u0067\u0074\u003a\u0020\u0025\u0073" , _dfag , _abb ) ;
} ; return nil ; } ;
2017-10-03 09:55:27 -05:00
2024-11-22 00:17:48 +00:00
// AddImage adds an image textbox to a slide.
func ( _ebbc Slide ) AddImage ( img _gb . ImageRef ) Image { _gbd := _ed . NewCT_GroupShapeChoice ( ) ; _ebbc . _efg . CSld . SpTree . Choice = append ( _ebbc . _efg . CSld . SpTree . Choice , _gbd ) ; _ecg := _ed . NewCT_Picture ( ) ; _gbd . Pic = append ( _gbd . Pic , _ecg ) ; _ecg . NvPicPr . CNvPicPr = _db . NewCT_NonVisualPictureProperties ( ) ;
_ecg . NvPicPr . CNvPicPr . PicLocks = _db . NewCT_PictureLocking ( ) ; _ecg . NvPicPr . CNvPicPr . PicLocks . NoChangeAspectAttr = _gbg . Bool ( true ) ; _ecg . BlipFill = _db . NewCT_BlipFillProperties ( ) ; _ecg . BlipFill . Blip = _db . NewCT_Blip ( ) ; _dfgb := _ebbc . AddImageToRels ( img ) ;
_ecg . BlipFill . Blip . EmbedAttr = _gbg . String ( _dfgb ) ; _ecg . BlipFill . Stretch = _db . NewCT_StretchInfoProperties ( ) ; _ecg . BlipFill . Stretch . FillRect = _db . NewCT_RelativeRect ( ) ; _ecg . SpPr = _db . NewCT_ShapeProperties ( ) ; _ecg . SpPr . PrstGeom = _db . NewCT_PresetGeometry2D ( ) ;
_ecg . SpPr . PrstGeom . PrstAttr = _db . ST_ShapeTypeRect ; _gbb := Image { _ecg } ; _beb := img . Size ( ) ; _gbb . Properties ( ) . SetWidth ( _ca . Distance ( _beb . X ) * _ca . Pixel72 ) ; _gbb . Properties ( ) . SetHeight ( _ca . Distance ( _beb . Y ) * _ca . Pixel72 ) ; _gbb . Properties ( ) . SetPosition ( 0 , 0 ) ;
return _gbb ; } ;
2024-04-03 00:10:23 +07:00
2024-11-22 00:17:48 +00:00
// SetOffsetX sets horizontal offset of text box in distance units (see measurement package).
func ( _ecbdf TextBox ) SetOffsetX ( offX float64 ) { _faec := _ecbdf . getOff ( ) ; _dba := _ca . ToEMU ( offX ) ; _faec . XAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _dba } ; } ;
2023-04-15 17:27:31 +00:00
2024-10-17 17:05:28 +00:00
// GetColorBySchemeColor returns *dml.CT_Color mapped to scheme colors like dk1, lt1 etc. depending on what theme is used in the presentation.
2024-11-22 00:17:48 +00:00
func ( _ddge * Slide ) GetColorBySchemeColor ( schClr _db . ST_SchemeColorVal ) * _db . CT_Color { _ddge . ensureClrMap ( ) ; _cefac := _ddge . _cde ; if _cefac == nil { return nil ; } ; var _aecb _db . ST_ColorSchemeIndex ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _aecb = _cefac . Bg1Attr ;
case "\u0062\u0067\u0032" : _aecb = _cefac . Bg2Attr ; case "\u0074\u0078\u0031" : _aecb = _cefac . Tx1Attr ; case "\u0074\u0078\u0032" : _aecb = _cefac . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _aecb = _cefac . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _aecb = _cefac . Accent2Attr ;
case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _aecb = _cefac . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _aecb = _cefac . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _aecb = _cefac . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _aecb = _cefac . Accent6Attr ;
case "\u0068\u006c\u0069n\u006b" : _aecb = _cefac . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _aecb = _cefac . FolHlinkAttr ; case "\u0064\u006b\u0031" : _aecb = _db . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _aecb = _db . ST_ColorSchemeIndexDk2 ;
case "\u006c\u0074\u0031" : _aecb = _db . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _aecb = _db . ST_ColorSchemeIndexLt2 ; default : _aecb = _db . ST_ColorSchemeIndexUnset ; } ; _caga := _ddge . _fagc . _fcae [ 0 ] ; _edcbg := _caga . ThemeElements ; if _edcbg == nil { return nil ;
} ; var _fcba * _db . CT_Color ; _gcaa := _edcbg . ClrScheme ; switch _aecb . String ( ) { case "\u0064\u006b\u0031" : _fcba = _gcaa . Dk1 ; case "\u0064\u006b\u0032" : _fcba = _gcaa . Dk2 ; case "\u006c\u0074\u0031" : _fcba = _gcaa . Lt1 ; case "\u006c\u0074\u0032" : _fcba = _gcaa . Lt2 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _fcba = _gcaa . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _fcba = _gcaa . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _fcba = _gcaa . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _fcba = _gcaa . Accent4 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _fcba = _gcaa . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _fcba = _gcaa . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _fcba = _gcaa . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _fcba = _gcaa . FolHlink ;
default : return nil ; } ; return _fcba ; } ;
2021-01-04 16:11:39 +00:00
2024-11-22 00:17:48 +00:00
// AddTable adds a new table to a placeholder.
func ( _cdg PlaceHolder ) AddTable ( ) * _gb . Table { _cdg . Clear ( ) ; _aca := _ed . NewCT_GroupShapeChoice ( ) ; _cdg . _ebd . CSld . SpTree . Choice = append ( _cdg . _ebd . CSld . SpTree . Choice , _aca ) ; _fcf := _ed . NewCT_GraphicalObjectFrame ( ) ; _aca . GraphicFrame = append ( _aca . GraphicFrame , _fcf ) ;
_fcf . Xfrm . Off = _db . NewCT_Point2D ( ) ; _aba := int64 ( 1 ) ; _fcf . Xfrm . Off . XAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _aba } ; _fcf . Xfrm . Off . YAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _aba } ; _gag := _fcf . Graphic . CT_GraphicalObject . GraphicData ;
_gag . UriAttr = "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073.\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067\u006dl/\u0032\u0030\u0030\u0036\u002f\u0074\u0061\u0062\u006c\u0065" ;
_egee := _gb . NewTableWithXfrm ( _fcf . Xfrm ) ; _gag . Any = append ( _gag . Any , _egee . X ( ) ) ; return _egee ; } ;
2021-01-04 16:11:39 +00:00
2024-11-22 00:17:48 +00:00
// AddDefaultSlideWithLayout tries to replicate what PowerPoint does when
// inserting a slide with a new style by clearing placeholder content and removing
// some placeholders. Use AddSlideWithLayout if you need more control.
func ( _gffd * Presentation ) AddDefaultSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _bef , _edga := _gffd . AddSlideWithLayout ( l ) ; for _ , _aeed := range _bef . PlaceHolders ( ) { _aeed . Clear ( ) ; switch _aeed . Type ( ) { case _ed . ST_PlaceholderTypeFtr , _ed . ST_PlaceholderTypeDt , _ed . ST_PlaceholderTypeSldNum : _aeed . Remove ( ) ;
} ; } ; return _bef , _edga ; } ;
2022-09-02 11:46:53 +00:00
2024-10-17 17:05:28 +00:00
// NewPresentationProperties constructs a new PresentationProperties.
2024-11-22 00:17:48 +00:00
func NewPresentationProperties ( ) PresentationProperties { return PresentationProperties { _cda : _ed . NewPresentationPr ( ) } ; } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// SetText sets the text of a placeholder for the initial paragraph. This is a
// shortcut method that is useful for things like titles which only contain a
// single paragraph.
func ( _abff PlaceHolder ) SetText ( text string ) { _abff . Clear ( ) ; _ebb := _db . NewEG_TextRun ( ) ; _ebb . R = _db . NewCT_RegularTextRun ( ) ; _ebb . R . T = text ; if len ( _abff . _dfd . TxBody . P ) == 0 { _abff . _dfd . TxBody . P = append ( _abff . _dfd . TxBody . P , _db . NewCT_TextParagraph ( ) ) ;
} ; _abff . _dfd . TxBody . P [ 0 ] . EG_TextRun = nil ; _abff . _dfd . TxBody . P [ 0 ] . EG_TextRun = append ( _abff . _dfd . TxBody . P [ 0 ] . EG_TextRun , _ebb ) ; } ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// Close closes the presentation, removing any temporary files that might have been
// created when opening a document.
func ( _cebd * Presentation ) Close ( ) error { if _cebd . TmpPath != "" { return _ff . RemoveAll ( _cebd . TmpPath ) ; } ; return nil ; } ;
2021-09-22 16:41:01 +00:00
2024-11-22 00:17:48 +00:00
// GetLayoutByName retrieves a slide layout given a layout name.
func ( _befb * Presentation ) GetLayoutByName ( name string ) ( SlideLayout , error ) { for _ , _ffd := range _befb . _ffg { if _ffd . CSld . NameAttr != nil && name == * _ffd . CSld . NameAttr { return SlideLayout { _ffd } , nil ; } ; } ; return SlideLayout { } , _gab . New ( "\u0075\u006eab\u006c\u0065\u0020t\u006f\u0020\u0066\u0069nd \u006cay\u006f\u0075\u0074\u0020\u0077\u0069\u0074h \u0074\u0068\u0061\u0074\u0020\u006e\u0061m\u0065" ) ;
} ; func _cd ( _dbd * Presentation , _ceb [ ] * _ed . CT_GroupShapeChoice , _fcc [ ] rectangle , _fae [ ] * TextItem ) [ ] * TextItem { for _ , _gfd := range _ceb { _ggg := append ( [ ] rectangle { } , _fcc ... ) ; for _ , _ccaf := range _gfd . Sp { _fae = append ( _fae , _fge ( _dbd , _ccaf , nil , nil , _ccaf . SpPr . Xfrm , 0 , _fcc , _ccaf . TxBody . P ) ... ) ;
} ; for _ , _bfa := range _gfd . GraphicFrame { if _bfa != nil && _bfa . Graphic != nil && _bfa . Graphic . GraphicData != nil { _bec := _bfa . Xfrm ; for _ , _gad := range _bfa . Graphic . GraphicData . Any { if _dd , _eeb := _gad . ( * _db . Tbl ) ; _eeb { _ebc := & _dd . CT_Table ; _gbc := 0 ;
for _bb , _aad := range _dd . Tr { for _fg , _fca := range _aad . Tc { _fda := & TableInfo { Table : _ebc , Row : _aad , Cell : _fca , RowIndex : _bb , ColIndex : _fg } ; _fae = append ( _fae , _fge ( _dbd , nil , _bfa , _fda , _bec , _gbc , _fcc , _fca . TxBody . P ) ... ) ; _gbc ++ ; } ; } ; } ;
} ; } ; } ; for _ , _bc := range _gfd . GrpSp { if _bc . GrpSpPr != nil { _da := _bc . GrpSpPr . Xfrm ; var _bcd , _acc int64 ; if _da . Off != nil { _age , _ab := _da . Off . XAttr . ST_CoordinateUnqualified , _da . Off . YAttr . ST_CoordinateUnqualified ; if _age != nil && _ab != nil { if _de := _da . Ext ;
_de != nil { _bcd , _acc = _de . CxAttr , _de . CyAttr ; } ; _ggg = append ( _ggg , rectangle { _cca : * _age , _cea : * _ab , _ef : * _age + _bcd , _fdb : * _ab + _acc } ) ; } ; } ; } ; _fae = _cd ( _dbd , _bc . Choice , _ggg , _fae ) ; } ; } ; return _fae ; } ;
2021-09-22 16:41:01 +00:00
2024-11-22 00:17:48 +00:00
// ClearAll completely clears a placeholder. To be useable, at least one
// paragraph must be added after ClearAll via AddParagraph.
func ( _fb PlaceHolder ) ClearAll ( ) { _fb . _dfd . SpPr = _db . NewCT_ShapeProperties ( ) ; _fb . _dfd . TxBody = _db . NewCT_TextBody ( ) ; _fb . _dfd . TxBody . LstStyle = _db . NewCT_TextListStyle ( ) ; } ;
2021-09-22 16:41:01 +00:00
2024-11-22 00:17:48 +00:00
// Presentation is the a presentation base document.
type Presentation struct { _gb . DocBase ; _eec * _ed . Presentation ; _ede _gb . Relationships ; _bbf [ ] * _ed . Sld ; _edg [ ] _gb . Relationships ; _bgf [ ] int ; _cgf [ ] * _ed . SldMaster ; _bae [ ] _gb . Relationships ; _gca [ ] int ; _ffg [ ] * _ed . SldLayout ; _bff [ ] _gb . Relationships ;
_fcae [ ] * _db . Theme ; _baa [ ] _gb . Relationships ; _cdga [ ] int ; _ffb _gb . TableStyles ; _bd PresentationProperties ; _edd ViewProperties ; _cgfe [ ] * _db . CT_Hyperlink ; _fac [ ] * chart ; _cdf [ ] * _ed . HandoutMaster ; _cee [ ] * _ed . NotesMaster ; _egg [ ] int ; _gee [ ] * _gbg . XSDAny ;
_gage map [ string ] string ; _eaa string ; } ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// NewSlideScreenSizeWithValue returns slide screen size with given width and height.
// Width and Height value is in EMU units, use our measurement.ToEMU to convert the -
// width and height value.
func NewSlideScreenSizeWithValue ( width , height int32 ) SlideScreenSize { return SlideScreenSize { width , height } ; } ;
2024-04-03 00:10:23 +07:00
2024-11-22 00:17:48 +00:00
// HtmlPubPr returns the HtmlPubPr property.
func ( _agc PresentationProperties ) HtmlPubPr ( ) * _ed . CT_HtmlPublishProperties { return _agc . _cda . HtmlPubPr ; } ;
2021-09-22 16:41:01 +00:00
2024-11-22 00:17:48 +00:00
// NotesTextViewPr returns the NotesTextViewPr property.
func ( _dbdg ViewProperties ) NotesTextViewPr ( ) * _ed . CT_NotesTextViewProperties { return _dbdg . _agecf . NotesTextViewPr ; } ; func ( _cada sort2d ) Swap ( i , j int ) { _cada [ i ] , _cada [ j ] = _cada [ j ] , _cada [ i ] } ;
2022-09-02 11:46:53 +00:00
2024-11-22 00:17:48 +00:00
// Text returns text from a slide as one string separated with line breaks.
func ( _gd * SlideText ) Text ( ) string { _cdc := _cgg . NewBuffer ( [ ] byte { } ) ; for _ , _adb := range _gd . Items { if _adb . Text != "" { _cdc . WriteString ( _adb . Text ) ; _cdc . WriteString ( "\u000a" ) ; } ; } ; return _cdc . String ( ) ; } ;
2022-09-02 11:46:53 +00:00
2024-11-22 00:17:48 +00:00
// GetColorBySchemeColor returns *dml.CT_Color mapped to scheme colors like dk1, lt1 etc. depending on what theme is used in the presentation.
func ( _eefg * Presentation ) GetColorBySchemeColor ( schClr _db . ST_SchemeColorVal ) * _db . CT_Color { if len ( _eefg . _cgf ) == 0 || len ( _eefg . _fcae ) == 0 { return nil ; } ; var _faf _db . ST_ColorSchemeIndex ; _efdf := _eefg . _cgf [ 0 ] ; _gggf := _efdf . ClrMap ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _faf = _gggf . Bg1Attr ;
case "\u0062\u0067\u0032" : _faf = _gggf . Bg2Attr ; case "\u0074\u0078\u0031" : _faf = _gggf . Tx1Attr ; case "\u0074\u0078\u0032" : _faf = _gggf . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _faf = _gggf . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _faf = _gggf . Accent2Attr ;
case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _faf = _gggf . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _faf = _gggf . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _faf = _gggf . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _faf = _gggf . Accent6Attr ;
case "\u0068\u006c\u0069n\u006b" : _faf = _gggf . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _faf = _gggf . FolHlinkAttr ; case "\u0064\u006b\u0031" : _faf = _db . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _faf = _db . ST_ColorSchemeIndexDk2 ;
case "\u006c\u0074\u0031" : _faf = _db . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _faf = _db . ST_ColorSchemeIndexLt2 ; default : _faf = _db . ST_ColorSchemeIndexUnset ; } ; _dfaa := _eefg . _fcae [ 0 ] ; _bbfa := _dfaa . ThemeElements ; if _bbfa == nil { return nil ;
} ; var _eeaa * _db . CT_Color ; _eebb := _bbfa . ClrScheme ; switch _faf . String ( ) { case "\u0064\u006b\u0031" : _eeaa = _eebb . Dk1 ; case "\u0064\u006b\u0032" : _eeaa = _eebb . Dk2 ; case "\u006c\u0074\u0031" : _eeaa = _eebb . Lt1 ; case "\u006c\u0074\u0032" : _eeaa = _eebb . Lt2 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _eeaa = _eebb . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _eeaa = _eebb . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _eeaa = _eebb . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _eeaa = _eebb . Accent4 ;
case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _eeaa = _eebb . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _eeaa = _eebb . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _eeaa = _eebb . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _eeaa = _eebb . FolHlink ;
default : return nil ; } ; return _eeaa ; } ;
2022-12-06 11:56:49 +00:00
2024-11-22 00:17:48 +00:00
// GetSlideLayout returns a slide layout related to the slide.
func ( _ebaec * Slide ) GetSlideLayout ( ) * _ed . SldLayout { _gbfd := _ebaec . getSlideRels ( ) ; for _ , _bdde := range _gbfd . Relationships ( ) { if _bdde . Type ( ) == _gbg . SlideLayoutType { if _gfbcd , _cfg := _fd . StringToNumbers ( _bdde . Target ( ) ) ; _cfg { return _ebaec . _fagc . _ffg [ _gfbcd - 1 ] ;
} ; return nil ; } ; } ; return nil ; } ;
2022-02-05 13:05:36 +00:00
2024-11-22 00:17:48 +00:00
// OpenTemplate opens a template file.
func OpenTemplate ( fn string ) ( * Presentation , error ) { _fdec , _ebcc := Open ( fn ) ; if _ebcc != nil { return nil , _ebcc ; } ; return _fdec , nil ; } ;
2022-02-05 13:05:36 +00:00
2024-11-22 00:17:48 +00:00
// OutlineViewPr returns the OutlineViewPr property.
func ( _cgfg ViewProperties ) OutlineViewPr ( ) * _ed . CT_OutlineViewProperties { return _cgfg . _agecf . OutlineViewPr ; } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// GridSpacing returns the GridSpacing property.
func ( _gggge ViewProperties ) GridSpacing ( ) * _db . CT_PositiveSize2D { return _gggge . _agecf . GridSpacing } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// RemoveSlide removes a slide from a presentation.
func ( _fdbc * Presentation ) RemoveSlide ( s Slide ) error { _ecd := false ; _ggf := 0 ; for _eed , _afad := range _fdbc . _bbf { if _afad == s . _efg { if _fdbc . _eec . SldIdLst . SldId [ _eed ] != s . _dcbc { return _gab . New ( "i\u006e\u0063\u006f\u006e\u0073\u0069s\u0074\u0065\u006e\u0063\u0079\u0020i\u006e\u0020\u0073\u006c\u0069\u0064\u0065s\u0020\u0061\u006e\u0064\u0020\u0049\u0044\u0020\u006c\u0069s\u0074" ) ;
} ; copy ( _fdbc . _bbf [ _eed : ] , _fdbc . _bbf [ _eed + 1 : ] ) ; _fdbc . _bbf = _fdbc . _bbf [ 0 : len ( _fdbc . _bbf ) - 1 ] ; copy ( _fdbc . _edg [ _eed : ] , _fdbc . _edg [ _eed + 1 : ] ) ; _fdbc . _edg = _fdbc . _edg [ 0 : len ( _fdbc . _edg ) - 1 ] ; copy ( _fdbc . _eec . SldIdLst . SldId [ _eed : ] , _fdbc . _eec . SldIdLst . SldId [ _eed + 1 : ] ) ;
_fdbc . _eec . SldIdLst . SldId = _fdbc . _eec . SldIdLst . SldId [ 0 : len ( _fdbc . _eec . SldIdLst . SldId ) - 1 ] ; copy ( _fdbc . _bgf [ _eed : ] , _fdbc . _bgf [ _eed + 1 : ] ) ; _fdbc . _bgf = _fdbc . _bgf [ 0 : len ( _fdbc . _bgf ) - 1 ] ; _ecd = true ; _ggf = _eed ; } ; } ; if ! _ecd { return _gab . New ( "u\u006ea\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0073li\u0064\u0065" ) ;
} ; _efcda := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideType , 0 ) ; return _fdbc . ContentTypes . RemoveOverrideByIndex ( _efcda , _ggf ) ; } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// X returns the inner wrapped XML type.
func ( _dgdb * SlideSize ) X ( ) * _ed . CT_SlideSize { return _dgdb . _acccd } ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// SlideSize represents a slide size of a presentation.
type SlideSize struct { _acccd * _ed . CT_SlideSize ; _add * Presentation ; } ;
2023-04-15 17:27:31 +00:00
2024-11-22 00:17:48 +00:00
// GetTextBoxes returns a list of all text boxes from a slide.
func ( _aacg Slide ) GetTextBoxes ( ) [ ] * TextBox { _aaefb := [ ] * TextBox { } ; _cdfg := _aacg . _efg . CSld . SpTree . Choice ; for _ , _dfba := range _cdfg { for _ , _dgfca := range _dfba . Sp { if _dgfca . NvSpPr . CNvSpPr . TxBoxAttr != nil && * _dgfca . NvSpPr . CNvSpPr . TxBoxAttr { _aaefb = append ( _aaefb , & TextBox { _dgfca } ) ;
} ; } ; } ; return _aaefb ; } ; func ( _adac TextBox ) getOff ( ) * _db . CT_Point2D { if _adac . _baf . SpPr == nil { _adac . _baf . SpPr = _db . NewCT_ShapeProperties ( ) ; } ; if _adac . _baf . SpPr . Xfrm == nil { _adac . _baf . SpPr . Xfrm = _db . NewCT_Transform2D ( ) ; } ; if _adac . _baf . SpPr . Xfrm . Off == nil { _adac . _baf . SpPr . Xfrm . Off = _db . NewCT_Point2D ( ) ;
} ; return _adac . _baf . SpPr . Xfrm . Off ; } ;
2023-04-15 17:27:31 +00:00
2024-11-22 00:17:48 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// document.
func ( _eac * Presentation ) GetImageByRelID ( relID string ) ( _gb . ImageRef , bool ) { for _ , _fag := range _eac . Images { if _fag . RelID ( ) == relID { return _fag , true ; } ; } ; return _gb . ImageRef { } , false ; } ;
2021-11-10 11:45:21 +00:00
2024-11-22 00:17:48 +00:00
// MoveSlide moves a slide with given number to position targetPos within a presentation.
func ( _ffa * Presentation ) MoveSlide ( slideNumber , targetPos int ) error { if slideNumber < 0 || slideNumber >= len ( _ffa . _bbf ) { return _gab . New ( "\u0073\u006c\u0069\u0064eN\u0075\u006d\u0062\u0065\u0072\u0020\u0069\u0073\u0020\u0069\u006e\u0076\u0061\u006ci\u0064" ) ;
} ; if targetPos < 0 || targetPos >= len ( _ffa . _bbf ) { return _gab . New ( "t\u0061r\u0067\u0065\u0074\u0050\u006f\u0073\u0020\u0069s\u0020\u0069\u006e\u0076al\u0069\u0064" ) ; } ; if slideNumber == targetPos { return nil ; } ; _edcc := _ffa . _bbf [ slideNumber ] ; _gde := _ffa . _edg [ slideNumber ] ;
if slideNumber < targetPos { copy ( _ffa . _bbf [ slideNumber : targetPos ] , _ffa . _bbf [ slideNumber + 1 : targetPos + 1 ] ) ; copy ( _ffa . _edg [ slideNumber : targetPos ] , _ffa . _edg [ slideNumber + 1 : targetPos + 1 ] ) ; copy ( _ffa . _bgf [ slideNumber : targetPos ] , _ffa . _bgf [ slideNumber + 1 : targetPos + 1 ] ) ;
} else { copy ( _ffa . _bbf [ targetPos + 1 : slideNumber + 1 ] , _ffa . _bbf [ targetPos : slideNumber ] ) ; copy ( _ffa . _edg [ targetPos + 1 : slideNumber + 1 ] , _ffa . _edg [ targetPos : slideNumber ] ) ; copy ( _ffa . _bgf [ targetPos + 1 : slideNumber + 1 ] , _ffa . _bgf [ targetPos : slideNumber ] ) ;
} ; _ffa . _bbf [ targetPos ] = _edcc ; _ffa . _edg [ targetPos ] = _gde ; return nil ; } ;
2022-02-05 13:05:36 +00:00
2024-11-22 00:17:48 +00:00
// Text returns text from a presentation as one string separated with line breaks.
func ( _gaf * PresentationText ) Text ( ) string { _ggb := _cgg . NewBuffer ( [ ] byte { } ) ; for _ , _ddc := range _gaf . Slides { _ggb . WriteString ( _ddc . Text ( ) ) ; } ; return _ggb . String ( ) ; } ;
2024-04-03 00:10:23 +07:00
2024-11-22 00:17:48 +00:00
// AddParagraph adds a paragraph to the text box
func ( _cfgb TextBox ) AddParagraph ( ) _cgc . Paragraph { _fede := _db . NewCT_TextParagraph ( ) ; _cfgb . _baf . TxBody . P = append ( _cfgb . _baf . TxBody . P , _fede ) ; return _cgc . MakeParagraph ( _fede ) ; } ;
2022-04-09 14:27:46 +00:00
2024-11-22 00:17:48 +00:00
// TextItem is used for keeping text with references to a paragraph and run, a shape or a table, a row and a cell where it is located.
type TextItem struct { Text string ; Presentation * Presentation ; Shape * _ed . CT_Shape ; GraphicFrame * _ed . CT_GraphicalObjectFrame ; Paragraph * _db . CT_TextParagraph ; Run * _db . CT_RegularTextRun ; TableInfo * TableInfo ; _edf [ ] rectangle ; _ac int ; _cce int ; } ;
2022-02-05 13:05:36 +00:00
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// SlideMasters returns the slide masters defined in the presentation.
func ( _gffb * Presentation ) SlideMasters ( ) [ ] SlideMaster { _fbcg := [ ] SlideMaster { } ; for _feca , _gceg := range _gffb . _cgf { if _feca < len ( _gffb . _bae ) { _fbcg = append ( _fbcg , SlideMaster { _gffb , _gffb . _bae [ _feca ] , _gceg } ) ; } ; } ; return _fbcg ; } ;
2022-02-05 13:05:36 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
2024-11-22 00:17:48 +00:00
func ( _fed Slide ) X ( ) * _ed . Sld { return _fed . _efg } ; func ( _eda * Presentation ) nextSlideID ( ) uint32 { _ccf := uint32 ( 256 ) ; for _ , _bee := range _eda . _eec . SldIdLst . SldId { if _bee . IdAttr >= _ccf { _ccf = _bee . IdAttr + 1 ; } ; } ; return _ccf ; } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// Clear clears the placeholder contents and adds a single empty paragraph. The
// empty paragrah is required by PowerPoint or it will report the file as being
// invalid.
func ( _gfeb PlaceHolder ) Clear ( ) { _gfeb . ClearAll ( ) ; _gff := _db . NewCT_TextParagraph ( ) ; _gfeb . _dfd . TxBody . P = [ ] * _db . CT_TextParagraph { _gff } ; _gff . EndParaRPr = _db . NewCT_TextCharacterProperties ( ) ; _gff . EndParaRPr . LangAttr = _gbg . String ( "\u0065\u006e\u002dU\u0053" ) ;
} ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// Slides returns the slides in the presentation.
func ( _egegg * Presentation ) Slides ( ) [ ] Slide { _geb := [ ] Slide { } ; for _acd , _beeb := range _egegg . _bbf { _geb = append ( _geb , Slide { _egegg . _eec . SldIdLst . SldId [ _acd ] , _beeb , _egegg , nil } ) ; } ; return _geb ; } ; func _fge ( _fcca * Presentation , _gc * _ed . CT_Shape , _fad * _ed . CT_GraphicalObjectFrame , _ggga * TableInfo , _dbc * _db . CT_Transform2D , _gbe int , _cga [ ] rectangle , _fdf [ ] * _db . CT_TextParagraph ) [ ] * TextItem { _bfe := [ ] * TextItem { } ;
var _eg , _ad , _cdb , _ae , _fde , _agef int64 ; _aee := _dbc == nil ; _ebg := 0 ; for _ , _fdae := range _fdf { for _ , _gggg := range _fdae . EG_TextRun { if _ecb := _gggg . R ; _ecb != nil { if ! _aee { if _dbc . Off != nil { if _efd := _dbc . Ext ; _efd != nil { _fde , _agef = _efd . CxAttr , _efd . CyAttr ;
} ; if _bg := _dbc . Off . XAttr . ST_CoordinateUnqualified ; _bg != nil { _eg = * _bg ; _ad = _eg + _fde ; _aee = true ; } ; if _cge := _dbc . Off . YAttr . ST_CoordinateUnqualified ; _cge != nil { _cdb = * _cge ; _ae = _cdb + _agef ; _aee = true ; } ; } ; } ; _aae := append ( [ ] rectangle { } , _cga ... ) ;
_aae = append ( _aae , rectangle { _cca : _eg , _ef : _ad , _cea : _cdb , _fdb : _ae } ) ; _bfe = append ( _bfe , & TextItem { Presentation : _fcca , Shape : _gc , GraphicFrame : _fad , TableInfo : _ggga , Paragraph : _fdae , Run : _ecb , Text : _ecb . T , _edf : _aae , _ac : _gbe , _cce : _ebg } ) ;
_ebg ++ ; } ; } ; } ; return _bfe ; } ;
2022-02-05 13:05:36 +00:00
2024-11-22 00:17:48 +00:00
// Height returns slide screen size height in EMU units.
func ( _bfdfg * SlideScreenSize ) Height ( ) int32 { return _bfdfg [ 1 ] } ;
2024-06-20 13:33:45 +00:00
2024-11-22 00:17:48 +00:00
// ClrMru returns the ClrMru property.
func ( _ada PresentationProperties ) ClrMru ( ) * _db . CT_ColorMRU { return _ada . _cda . ClrMru } ; var _fee = false ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// Properties returns the properties of the TextBox.
func ( _edb Image ) Properties ( ) _cgc . ShapeProperties { if _edb . _dea . SpPr == nil { _edb . _dea . SpPr = _db . NewCT_ShapeProperties ( ) ; } ; return _cgc . MakeShapeProperties ( _edb . _dea . SpPr ) ; } ; type rectangle struct { _cca int64 ; _cea int64 ; _ef int64 ; _fdb int64 ;
} ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// SaveToFile writes the Presentation out to a file.
func ( _fdc * Presentation ) SaveToFile ( path string ) error { return _fdc . saveToFile ( path , false ) } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// Sid returns the sid of slide
func ( _fddd Slide ) Sid ( ) * _ed . CT_SlideIdListEntry { return _fddd . _dcbc } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// Slide represents a slide of a presentation.
type Slide struct { _dcbc * _ed . CT_SlideIdListEntry ; _efg * _ed . Sld ; _fagc * Presentation ; _cde * _db . CT_ColorMapping ; } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// PresentationText is an array of extracted text items which has some methods for representing extracted text.
type PresentationText struct { Slides [ ] * SlideText ; } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// ExtLst returns the ExtLst property.
func ( _abbaa ViewProperties ) ExtLst ( ) * _ed . CT_ExtensionList { return _abbaa . _agecf . ExtLst } ; func ( _faeg * Presentation ) addLayoutFromSlide ( _dbg Slide ) error { _cdae := 1 ; for _ , _bcga := range _faeg . Images { if _egc , _bgc := _fd . StringToNumbers ( _bcga . Target ( ) ) ;
_bgc && _egc >= _cdae { _cdae = _egc + 1 ; } ; } ; _faeg . _ffg = append ( _faeg . _ffg , _dbg . GetSlideLayout ( ) ) ; _fbe := _dbg . getSlideLayoutRels ( ) ; for _ , _dfb := range _fbe . X ( ) . Relationship { if _dfb . TypeAttr == _gbg . ImageType { _fdd , _gcf := _dbg . _fagc . GetImageByTarget ( _dfb . TargetAttr ) ;
if _gcf { if _cfa , _bbff := _fd . StringToNumbers ( _fdd . Target ( ) ) ; _bbff && _cfa < _cdae { _fdd . SetTarget ( _cg . ReplaceAll ( _fdd . Target ( ) , _be . Sprint ( _cfa ) , _be . Sprint ( _cdae ) ) ) ; _dfb . TargetAttr = _fdd . Target ( ) ; _cdae = _cdae + 1 ; } ; _faeg . Images = append ( _faeg . Images , _fdd ) ;
} ; } ; } ; _faeg . _bff = append ( _faeg . _bff , _fbe ) ; if len ( _faeg . _cgf ) > 0 && len ( _faeg . _bae ) > 0 { _agda := _faeg . _bae [ 0 ] . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideMasterType , len ( _faeg . _ffg ) , _gbg . SlideLayoutType ) ; _dfdf := _ed . NewCT_SlideLayoutIdListEntry ( ) ;
_dfdf . IdAttr = _gbg . Uint32 ( 2147483649 ) ; _dfdf . RIdAttr = _agda . ID ( ) ; for _ , _dab := range _faeg . _cgf [ 0 ] . SldLayoutIdLst . SldLayoutId { if * _dab . IdAttr >= * _dfdf . IdAttr { _dfdf . IdAttr = _gbg . Uint32 ( ( * _dab . IdAttr + 1 ) ) ; } ; } ; _faeg . _cgf [ 0 ] . SldLayoutIdLst . SldLayoutId = append ( _faeg . _cgf [ 0 ] . SldLayoutIdLst . SldLayoutId , _dfdf ) ;
} ; _fgea := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideLayoutType , len ( _faeg . _ffg ) ) ; _faeg . ContentTypes . AddOverride ( _fgea , _gbg . SlideLayoutContentType ) ; return nil ; } ;
// Size returns slide size value as SlideScreenSize.
func ( _bdeg * SlideSize ) Size ( ) SlideScreenSize { return SlideScreenSize { _bdeg . _acccd . CxAttr , _bdeg . _acccd . CyAttr } ; } ;
2024-07-28 07:48:26 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
2024-11-22 00:17:48 +00:00
func ( _bbg SlideLayout ) X ( ) * _ed . SldLayout { return _bbg . _acdd } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// GetPlaceholderByIndex returns a placeholder given its index. If there are multiplace
// placeholders of the same index, this method returns the first one. You must use the
// PlaceHolders() method to access the others.
func ( _beg Slide ) GetPlaceholderByIndex ( idx uint32 ) ( PlaceHolder , error ) { for _ , _ecaf := range _beg . _efg . CSld . SpTree . Choice { for _ , _gcc := range _ecaf . Sp { if _gcc . NvSpPr != nil && _gcc . NvSpPr . NvPr != nil && _gcc . NvSpPr . NvPr . Ph != nil { if ( idx == 0 && _gcc . NvSpPr . NvPr . Ph . IdxAttr == nil ) || ( _gcc . NvSpPr . NvPr . Ph . IdxAttr != nil && * _gcc . NvSpPr . NvPr . Ph . IdxAttr == idx ) { return PlaceHolder { _gcc , _beg . _efg } , nil ;
} ; } ; } ; } ; return PlaceHolder { } , _gab . New ( "\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0070\u006c\u0061\u0063\u0065\u0068\u006fl\u0064\u0065\u0072" ) ; } ;
2024-04-03 00:10:23 +07:00
2024-11-22 00:17:48 +00:00
// ExtractText returns text from a slide as a SlideText object.
func ( _efe * Slide ) ExtractText ( ) * SlideText { _eee := _cd ( _efe . _fagc , _efe . _efg . CSld . SpTree . Choice , [ ] rectangle { } , [ ] * TextItem { } ) ; _ec . Sort ( sort2d ( _eee ) ) ; return & SlideText { Items : _eee } ; } ;
2023-04-15 17:27:31 +00:00
2024-11-22 00:17:48 +00:00
// SaveAsTemplate writes the presentation out to a writer in the Zip package format as a template
func ( _cagf * Presentation ) SaveAsTemplate ( w _b . Writer ) error { return _cagf . save ( w , true ) } ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// TextBox is a text box within a slide.
type TextBox struct { _baf * _ed . CT_Shape } ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// NewViewProperties constructs a new ViewProperties.
func NewViewProperties ( ) ViewProperties { return ViewProperties { _agecf : _ed . NewViewPr ( ) } } ; var ( SlideScreenSize16x9 = SlideScreenSize { 12192000 , 6858000 } ; SlideScreenSize4x3 = SlideScreenSize { 9144000 , 6858000 } ; SlideScreenSizeA4 = SlideScreenSize { 9906000 , 6858000 } ;
) ;
2024-09-16 09:59:58 +00:00
2024-11-22 00:17:48 +00:00
// NotesViewPr returns the NotesViewPr property.
func ( _ecbc ViewProperties ) NotesViewPr ( ) * _ed . CT_NotesViewProperties { return _ecbc . _agecf . NotesViewPr ; } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// GetLayoutImageByRelID returns an ImageRef with the associated relation ID in the
// slide layout.
func ( _gdag * Slide ) GetLayoutImageByRelID ( relID string ) ( _gb . ImageRef , bool ) { _fcff := _gdag . getSlideLayoutRels ( ) ; if ( _fcff == _gb . Relationships { } ) { return _gb . ImageRef { } , false ; } ; _bbecc := _fcff . GetTargetByRelId ( relID ) ; for _ , _befa := range _gdag . _fagc . Images { if _befa . Target ( ) == _bbecc { return _befa , true ;
} ; } ; return _gb . ImageRef { } , false ; } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// CopySlide copies existing slide from another presentation and inserts it as a last one.
func ( _aaea * Presentation ) CopySlide ( s Slide ) ( Slide , error ) { _dca := _ed . NewCT_SlideIdListEntry ( ) ; _dca . IdAttr = _aaea . nextSlideID ( ) ; _aaea . _eec . SldIdLst . SldId = append ( _aaea . _eec . SldIdLst . SldId , _dca ) ; _cgeb := s . GetSlideLayout ( ) ; _bggg := true ;
for _ , _fbc := range _aaea . _ffg { if _fbc == _cgeb { _bggg = false ; break ; } ; } ; if _bggg { _aaea . addLayoutFromSlide ( s ) ; } ; _aaea . _bbf = append ( _aaea . _bbf , s . _efg ) ; _aaea . _bgf = append ( _aaea . _bgf , len ( _aaea . _bbf ) ) ; _adbe := _aaea . _ede . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . OfficeDocumentType , len ( _aaea . _bbf ) , _gbg . SlideType ) ;
_dca . RIdAttr = _adbe . ID ( ) ; _adg := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideType , len ( _aaea . _bbf ) ) ; _aaea . ContentTypes . AddOverride ( _adg , _gbg . SlideContentType ) ; _ceec := _gb . NewRelationships ( ) ; _aaea . _edg = append ( _aaea . _edg , _ceec ) ;
_cbc := len ( _aaea . _edg ) - 1 ; for _bfdf , _decg := range _aaea . _ffg { if _decg == _cgeb { _aeda := _aaea . _bff [ _bfdf ] ; for _ , _cbcc := range _aeda . X ( ) . Relationship { if _cbcc . TypeAttr != _gbg . SlideMasterType { _aaea . _edg [ _cbc ] . X ( ) . Relationship = append ( _aaea . _edg [ _cbc ] . X ( ) . Relationship , _cbcc ) ;
} ; } ; _ceec . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideType , _bfdf + 1 , _gbg . SlideLayoutType ) ; } ; } ; _dcc := Slide { _dca , s . _efg , _aaea , nil } ; return _dcc , nil ; } ;
2023-06-10 07:12:37 +00:00
2024-11-22 00:17:48 +00:00
// LastViewAttr returns the LastViewAttr property.
func ( _gada ViewProperties ) LastViewAttr ( ) _ed . ST_ViewType { return _gada . _agecf . LastViewAttr } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// SlideViewPr returns the SlideViewPr property.
func ( _cgaf ViewProperties ) SlideViewPr ( ) * _ed . CT_SlideViewProperties { return _cgaf . _agecf . SlideViewPr ; } ;
2023-08-06 17:57:53 +00:00
2024-11-22 00:17:48 +00:00
// SetTextAnchor controls the text anchoring
func ( _dgb TextBox ) SetTextAnchor ( a _db . ST_TextAnchoringType ) { _dgb . _baf . TxBody . BodyPr = _db . NewCT_TextBodyProperties ( ) ; _dgb . _baf . TxBody . BodyPr . AnchorAttr = a ; } ;
2023-06-10 07:12:37 +00:00
2024-11-22 00:17:48 +00:00
// Save writes the presentation out to a writer in the Zip package format
func ( _gea * Presentation ) Save ( w _b . Writer ) error { return _gea . save ( w , false ) } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// GetChartSpaceByRelId returns a *crt.ChartSpace with the associated relation ID in the
// slide.
func ( _fcge * Slide ) GetChartSpaceByRelId ( relId string ) * _g . ChartSpace { _ged := _fcge . getSlideRels ( ) ; if ( _ged == _gb . Relationships { } ) { return nil ; } ; _cae := _ged . GetTargetByRelId ( relId ) ; for _ , _dadf := range _fcge . _fagc . _fac { if _cae == _dadf . Target ( ) { return _dadf . _dg ;
} ; } ; return nil ; } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// SetWidth sets width of slide screen size with given value in EMU units.
func ( _fga * SlideScreenSize ) SetWidth ( val int32 ) { _fga [ 0 ] = val } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// SlideScreenSize represents the slide screen size as a 2 element array
// representing the width and height in EMU units.
type SlideScreenSize [ 2 ] int32 ;
2023-06-10 07:12:37 +00:00
2024-11-22 00:17:48 +00:00
// Index returns the placeholder index
func ( _efc PlaceHolder ) Index ( ) uint32 { if _efc . _dfd . NvSpPr . NvPr . Ph . IdxAttr == nil { return 0 ; } ; return * _efc . _dfd . NvSpPr . NvPr . Ph . IdxAttr ; } ;
2023-08-06 17:57:53 +00:00
2024-11-22 00:17:48 +00:00
// Less is for implementing sorting of two locations. Symbols share the same location if they are in the same paragraph or table. One location is 'less' than another first by y coordinate, if y coordinates are equal or differ by less than yEpsilon, then x coordinates are compared, then if they are also equal, indexes of locations in the table are compared, then positions of locations in a paragraph.
func ( _abf sort2d ) Less ( i , j int ) bool { _ebec , _ba := _abf [ i ] , _abf [ j ] ; _bgg , _bab := _ebec . _edf , _ba . _edf ; _ecac , _egd := len ( _bgg ) - 1 , len ( _bab ) - 1 ; _edc , _accb := 0 , 0 ; for { _af , _gggd , _ffe , _gbgd , _dgf , _bbb , _fccc , _aed := _bgg [ _edc ] . _cea , _bab [ _accb ] . _cea , _bgg [ _edc ] . _fdb , _bab [ _accb ] . _fdb , _bgg [ _edc ] . _cca , _bab [ _accb ] . _cca , _bgg [ _edc ] . _ef , _bab [ _accb ] . _ef ;
if _af == _gggd || ( ( _ee . Abs ( float64 ( _af ) - float64 ( _gggd ) ) < _fcd ) && ( ( _af >= _gggd && _af <= _gbgd ) || ( _gggd >= _af && _gggd <= _ffe ) ) && ( _fccc < _bbb || _dgf > _aed ) ) { if _dgf == _bbb { if _edc < _ecac && _accb < _egd { _edc ++ ; _accb ++ ; continue ; } ; if _edc >= _ecac && _accb >= _egd { break ;
} ; return _edc >= _ecac ; } else { return _dgf < _bbb ; } ; } else { return _af < _gggd ; } ; } ; _eba , _gabg , _cag , _gafb := _ebec . _ac , _ba . _ac , _ebec . _cce , _ba . _cce ; if _eba == _gabg { return _cag <= _gafb ; } ; return _eba < _gabg ; } ; const _fcd float64 = 500000 ; func _ead ( _dccb [ ] * _ed . CT_GroupShapeChoice ) [ ] * _ed . CT_GroupShapeChoice { var _babef [ ] * _ed . CT_GroupShapeChoice ;
for _ , _fec := range _dccb { if len ( _fec . Pic ) == 0 { _babef = append ( _babef , _fec ) ; } ; } ; return _babef ; } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// Width returns slide screen size width in EMU units.
func ( _fgff * SlideScreenSize ) Width ( ) int32 { return _fgff [ 0 ] } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// Paragraphs returns the paragraphs defined in the placeholder.
func ( _dff PlaceHolder ) Paragraphs ( ) [ ] _cgc . Paragraph { _cgd := [ ] _cgc . Paragraph { } ; for _ , _gcg := range _dff . _dfd . TxBody . P { _cgd = append ( _cgd , _cgc . MakeParagraph ( _gcg ) ) ; } ; return _cgd ; } ;
2023-09-16 17:56:36 +00:00
2024-11-22 00:17:48 +00:00
// Name returns the name of the slide layout.
func ( _bedff SlideLayout ) Name ( ) string { if _bedff . _acdd . CSld != nil && _bedff . _acdd . CSld . NameAttr != nil { return * _bedff . _acdd . CSld . NameAttr ; } ; return "" ; } ;
2023-12-12 23:20:29 +00:00
2024-11-22 00:17:48 +00:00
// AddImage adds an image to the document package, returning a reference that
// can be used to add the image to a run and place it in the document contents.
func ( _aagf * Presentation ) AddImage ( i _gb . Image ) ( _gb . ImageRef , error ) { _cdge := _gb . MakeImageRef ( i , & _aagf . DocBase , _aagf . _ede ) ; if i . Data == nil && i . Path == "" { return _cdge , _gab . New ( "\u0069\u006d\u0061\u0067\u0065\u0020\u006d\u0075\u0073\u0074 \u0068\u0061\u0076\u0065\u0020\u0064\u0061t\u0061\u0020\u006f\u0072\u0020\u0061\u0020\u0070\u0061\u0074\u0068" ) ;
} ; if i . Format == "" { return _cdge , _gab . New ( "\u0069\u006d\u0061\u0067\u0065\u0020\u006d\u0075\u0073\u0074 \u0068\u0061\u0076\u0065\u0020\u0061\u0020v\u0061\u006c\u0069\u0064\u0020\u0066\u006f\u0072\u006d\u0061\u0074" ) ; } ; if i . Size . X == 0 || i . Size . Y == 0 { return _cdge , _gab . New ( "\u0069\u006d\u0061\u0067e\u0020\u006d\u0075\u0073\u0074\u0020\u0068\u0061\u0076\u0065 \u0061 \u0076\u0061\u006c\u0069\u0064\u0020\u0073i\u007a\u0065" ) ;
} ; if i . Path != "" { _eddd := _ff . Add ( i . Path ) ; if _eddd != nil { return _cdge , _eddd ; } ; } ; _aagf . Images = append ( _aagf . Images , _cdge ) ; _aagf . ContentTypes . EnsureDefault ( "\u0070\u006e\u0067" , "\u0069m\u0061\u0067\u0065\u002f\u0070\u006eg" ) ; _aagf . ContentTypes . EnsureDefault ( "\u006a\u0070\u0065\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ;
_aagf . ContentTypes . EnsureDefault ( "\u006a\u0070\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _aagf . ContentTypes . EnsureDefault ( "\u0077\u006d\u0066" , "i\u006d\u0061\u0067\u0065\u002f\u0078\u002d\u0077\u006d\u0066" ) ; _aagf . ContentTypes . EnsureDefault ( i . Format , "\u0069\u006d\u0061\u0067\u0065\u002f" + i . Format ) ;
return _cdge , nil ; } ;
2023-12-28 15:53:06 +00:00
2024-11-22 00:17:48 +00:00
// SaveToFileAsTemplate writes the Presentation out to a file as a template.
func ( _fegd * Presentation ) SaveToFileAsTemplate ( path string ) error { return _fegd . saveToFile ( path , true ) ; } ;
2024-06-20 13:33:45 +00:00
2024-11-22 00:17:48 +00:00
// ShowCommentsAttr returns the WebPr property.
func ( _gbffe ViewProperties ) ShowCommentsAttr ( ) * bool { return _gbffe . _agecf . ShowCommentsAttr } ;
2024-06-20 13:33:45 +00:00
2024-11-22 00:17:48 +00:00
// Type returns the placeholder type
func ( _aeb PlaceHolder ) Type ( ) _ed . ST_PlaceholderType { return _aeb . _dfd . NvSpPr . NvPr . Ph . TypeAttr } ;
2024-06-20 13:33:45 +00:00
2024-11-22 00:17:48 +00:00
// AddSlide adds a new slide to the presentation.
func ( _bdad * Presentation ) AddSlide ( ) Slide { _dgfg := _ed . NewCT_SlideIdListEntry ( ) ; _dgfg . IdAttr = _bdad . nextSlideID ( ) ; _bdad . _eec . SldIdLst . SldId = append ( _bdad . _eec . SldIdLst . SldId , _dgfg ) ; _bedf := _ed . NewSld ( ) ; _bedf . CSld . SpTree . NvGrpSpPr . CNvPr . IdAttr = 1 ;
_bedf . CSld . SpTree . GrpSpPr . Xfrm = _db . NewCT_GroupTransform2D ( ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . Off = _db . NewCT_Point2D ( ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . Off . XAttr . ST_CoordinateUnqualified = _gbg . Int64 ( 0 ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . Off . YAttr . ST_CoordinateUnqualified = _gbg . Int64 ( 0 ) ;
_bedf . CSld . SpTree . GrpSpPr . Xfrm . Ext = _db . NewCT_PositiveSize2D ( ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . Ext . CxAttr = int64 ( 0 * _ca . Point ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . Ext . CyAttr = int64 ( 0 * _ca . Point ) ; _bedf . CSld . SpTree . GrpSpPr . Xfrm . ChOff = _bedf . CSld . SpTree . GrpSpPr . Xfrm . Off ;
_bedf . CSld . SpTree . GrpSpPr . Xfrm . ChExt = _bedf . CSld . SpTree . GrpSpPr . Xfrm . Ext ; _bdad . _bbf = append ( _bdad . _bbf , _bedf ) ; _bdad . _bgf = append ( _bdad . _bgf , len ( _bdad . _bbf ) ) ; _fff := _bdad . _ede . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . OfficeDocumentType , len ( _bdad . _bbf ) , _gbg . SlideType ) ;
_dgfg . RIdAttr = _fff . ID ( ) ; _dec := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideType , len ( _bdad . _bbf ) ) ; _bdad . ContentTypes . AddOverride ( _dec , _gbg . SlideContentType ) ; _eccf := _gb . NewRelationships ( ) ; _bdad . _edg = append ( _bdad . _edg , _eccf ) ;
_eccf . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideType , len ( _bdad . _ffg ) , _gbg . SlideLayoutType ) ; return Slide { _dgfg , _bedf , _bdad , nil } ; } ;
2024-06-20 13:33:45 +00:00
2024-11-22 00:17:48 +00:00
// Presentation returns a slide's presentation.
func ( _dgg Slide ) Presentation ( ) * Presentation { return _dgg . _fagc } ; func ( _facc * Slide ) ensureClrMap ( ) { if len ( _facc . _fagc . _cgf ) == 0 || len ( _facc . _fagc . _fcae ) == 0 { return ; } ; _fdac := _facc . _fagc . _cgf [ 0 ] ; _dggb := _fdac . ClrMap ; if _gabf := _facc . _efg . ClrMapOvr ;
_gabf != nil { if _cbfc := _gabf . Choice ; _cbfc != nil { if _cbfc . MasterClrMapping == nil { if _fadg := _cbfc . OverrideClrMapping ; _fadg != nil { if _fadg . Bg1Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Bg1Attr = _fadg . Bg1Attr ; } ; if _fadg . Tx1Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Tx1Attr = _fadg . Tx1Attr ;
} ; if _fadg . Bg2Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Bg2Attr = _fadg . Bg2Attr ; } ; if _fadg . Tx2Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Tx2Attr = _fadg . Tx2Attr ; } ; if _fadg . Accent1Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent1Attr = _fadg . Accent1Attr ;
} ; if _fadg . Accent2Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent2Attr = _fadg . Accent2Attr ; } ; if _fadg . Accent3Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent3Attr = _fadg . Accent3Attr ; } ; if _fadg . Accent4Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent4Attr = _fadg . Accent4Attr ;
} ; if _fadg . Accent5Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent5Attr = _fadg . Accent5Attr ; } ; if _fadg . Accent6Attr != _db . ST_ColorSchemeIndexUnset { _dggb . Accent6Attr = _fadg . Accent6Attr ; } ; if _fadg . HlinkAttr != _db . ST_ColorSchemeIndexUnset { _dggb . HlinkAttr = _fadg . HlinkAttr ;
} ; if _fadg . FolHlinkAttr != _db . ST_ColorSchemeIndexUnset { _dggb . FolHlinkAttr = _fadg . FolHlinkAttr ; } ; } ; } ; } ; } ; _facc . _cde = _dggb ; } ;
2024-02-17 03:37:07 +00:00
2024-11-22 00:17:48 +00:00
// ExtractText returns text from a presentation as a PresentationText object.
func ( _bf * Presentation ) ExtractText ( ) * PresentationText { _aa := [ ] * SlideText { } ; for _ , _cad := range _bf . Slides ( ) { _eca := _cad . ExtractText ( ) ; if _eca != nil { _aa = append ( _aa , _eca ) ; } ; } ; return & PresentationText { Slides : _aa } ; } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// PrnPr returns the PrnPr property.
func ( _bcg PresentationProperties ) PrnPr ( ) * _ed . CT_PrintProperties { return _bcg . _cda . PrnPr } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// X returns TextBox's underlying *pml.CT_Shape.
func ( _ced TextBox ) X ( ) * _ed . CT_Shape { return _ced . _baf } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// Open opens and reads a document from a file (.pptx).
func Open ( filename string ) ( * Presentation , error ) { _ege , _ea := _e . Open ( filename ) ; if _ea != nil { return nil , _be . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _ea ) ; } ; defer _ege . Close ( ) ;
_aaed , _ea := _e . Stat ( filename ) ; if _ea != nil { return nil , _be . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _ea ) ; } ; _ = _aaed ; return Read ( _ege , _aaed . Size ( ) ) ; } ;
2024-05-22 00:21:11 +00:00
2024-10-17 17:05:28 +00:00
// X returns the inner wrapped XML type.
2024-11-22 00:17:48 +00:00
func ( _cfbb * Presentation ) X ( ) * _ed . Presentation { return _cfbb . _eec } ;
2024-04-03 00:10:23 +07:00
2024-11-22 00:17:48 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// slide.
func ( _bagc * Slide ) GetImageByRelID ( relID string ) ( _gb . ImageRef , bool ) { _egfe := _bagc . getSlideRels ( ) ; if ( _egfe == _gb . Relationships { } ) { return _gb . ImageRef { } , false ; } ; _abg := _egfe . GetTargetByRelId ( relID ) ; for _ , _gbde := range _bagc . _fagc . Images { if _gbde . Target ( ) == _abg { return _gbde , true ;
} ; } ; return _gb . ImageRef { } , false ; } ;
2024-05-04 18:48:06 +00:00
2024-11-22 00:17:48 +00:00
// WebPr returns the WebPr property.
func ( _cb PresentationProperties ) WebPr ( ) * _ed . CT_WebProperties { return _cb . _cda . WebPr } ;
2024-05-04 18:48:06 +00:00
2024-11-22 00:17:48 +00:00
// ViewProperties contains presentation specific properties.
type ViewProperties struct { _agecf * _ed . ViewPr } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// X returns the inner wrapped XML type.
func ( _dfdd SlideMaster ) X ( ) * _ed . SldMaster { return _dfdd . _gfba } ;
2024-05-04 18:48:06 +00:00
2024-11-22 00:17:48 +00:00
// ValidateWithPath validates the slide passing path informaton for a better
// error message.
func ( _fdbb Slide ) ValidateWithPath ( path string ) error { if _bgggb := _fdbb . _efg . ValidateWithPath ( path ) ; _bgggb != nil { return _bgggb ; } ; for _ , _bedb := range _fdbb . _efg . CSld . SpTree . Choice { for _ , _dgfc := range _bedb . Sp { if _dgfc . TxBody != nil { if len ( _dgfc . TxBody . P ) == 0 { return _gab . New ( path + "\u0020\u003a \u0073\u006c\u0069\u0064\u0065 \u0073\u0068\u0061\u0070\u0065 \u0077\u0069\u0074\u0068\u0020\u0061\u0020\u0074\u0078\u0062\u006f\u0064\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0070\u0061\u0072\u0061\u0067\u0072\u0061\u0070\u0068\u0073" ) ;
} ; } ; } ; } ; return nil ; } ; func ( _dgdf * chart ) Target ( ) string { return _dgdf . _dgd } ; func ( _cc * chart ) X ( ) * _g . ChartSpace { return _cc . _dg } ;
2024-05-04 18:48:06 +00:00
2024-11-22 00:17:48 +00:00
// GetImageByTarget returns an ImageRef with the given target in the
// document.
func ( _bga * Presentation ) GetImageByTarget ( target string ) ( _gb . ImageRef , bool ) { for _ , _fcac := range _bga . Images { if _fcac . Target ( ) == target { return _fcac , true ; } ; } ; return _gb . ImageRef { } , false ; } ;
2024-05-08 13:54:39 +00:00
2024-11-22 00:17:48 +00:00
// SetSize sets the slide size, take argument of SlideScreenSize.
func ( _fcaad * SlideSize ) SetSize ( sz SlideScreenSize ) { _fcaad . _acccd . CxAttr = sz [ 0 ] ; _fcaad . _acccd . CyAttr = sz [ 1 ] ; } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// New initializes and returns a new presentation
func New ( ) * Presentation { _afc := _egeg ( ) ; _afc . ContentTypes . AddOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_afc . Rels . AddRelationship ( "\u0064\u006f\u0063\u0050\u0072\u006f\u0070\u0073\u002f\u0063\u006f\u0072e\u002e\u0078\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061s\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u0070\u0061\u0063\u006ba\u0067\u0065\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068\u0069\u0070\u0073\u002f\u006d\u0065\u0074\u0061\u0064\u0061\u0074\u0061/\u0063\u006f\u0072\u0065\u002d\u0070\u0072\u006f\u0070e\u0072\u0074i\u0065\u0073" ) ;
_afc . Rels . AddRelationship ( "\u0064\u006fc\u0050\u0072\u006fp\u0073\u002f\u0061\u0070\u0070\u002e\u0078\u006d\u006c" , "\u0068t\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006ex\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073.\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074i\u006f\u006e\u0073\u0068\u0069p\u0073\u002f\u0065x\u0074\u0065\u006e\u0064\u0065d\u002d\u0070\u0072\u006f\u0070\u0065\u0072\u0074\u0069\u0065\u0073" ) ;
_afc . Rels . AddRelationship ( "p\u0070t\u002f\u0070\u0072\u0065\u0073\u0065\u006e\u0074a\u0074\u0069\u006f\u006e.x\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002fs\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072g\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006fc\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068\u0069\u0070\u0073\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074" ) ;
_afc . Rels . AddRelationship ( "\u0070\u0070\u0074\u002f\u0070\u0072\u0065\u0073\u0050\u0072\u006f\u0070s\u002e\u0078\u006d\u006c" , "ht\u0074\u0070\u003a\u002f\u002f\u0073\u0063he\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006et\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068i\u0070s\u002f\u0070\u0072\u0065\u0073\u0050\u0072\u006f\u0070\u0073" ) ;
_afc . Rels . AddRelationship ( "\u0070\u0070\u0074\u002f\u0076\u0069\u0065\u0077\u0050\u0072\u006f\u0070s\u002e\u0078\u006d\u006c" , "ht\u0074\u0070\u003a\u002f\u002f\u0073\u0063he\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006da\u0074\u0073\u002e\u006f\u0072\u0067\u002f\u006f\u0066\u0066\u0069\u0063\u0065\u0044\u006f\u0063\u0075\u006d\u0065\u006et\u002f\u0032\u0030\u0030\u0036\u002fr\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073\u0068i\u0070s\u002f\u0076\u0069\u0065\u0077\u0050\u0072\u006f\u0070\u0073" ) ;
_afc . Rels . AddRelationship ( "\u0070\u0070\u0074\u002fta\u0062\u006c\u0065\u0053\u0074\u0079\u006c\u0065\u0073\u002e\u0078\u006d\u006c" , "\u0068\u0074\u0074\u0070\u003a\u002f\u002fs\u0063\u0068\u0065\u006d\u0061\u0073\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006cf\u006fr\u006d\u0061\u0074\u0073\u002e\u006fr\u0067\u002f\u006f\u0066\u0066\u0069\u0063e\u0044\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u002f\u0032\u0030\u0030\u0036\u002f\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0073h\u0069\u0070\u0073\u002f\u0074\u0061\u0062\u006c\u0065\u0053\u0074\u0079\u006ce\u0073" ) ;
_afc . _eec . SldMasterIdLst = _ed . NewCT_SlideMasterIdList ( ) ; _efda := _ed . NewSldMaster ( ) ; _efda . ClrMap . Bg1Attr = _db . ST_ColorSchemeIndexLt1 ; _efda . ClrMap . Bg2Attr = _db . ST_ColorSchemeIndexLt2 ; _efda . ClrMap . Tx1Attr = _db . ST_ColorSchemeIndexDk1 ; _efda . ClrMap . Tx2Attr = _db . ST_ColorSchemeIndexDk2 ;
_efda . ClrMap . Accent1Attr = _db . ST_ColorSchemeIndexAccent1 ; _efda . ClrMap . Accent2Attr = _db . ST_ColorSchemeIndexAccent2 ; _efda . ClrMap . Accent3Attr = _db . ST_ColorSchemeIndexAccent3 ; _efda . ClrMap . Accent4Attr = _db . ST_ColorSchemeIndexAccent4 ; _efda . ClrMap . Accent5Attr = _db . ST_ColorSchemeIndexAccent5 ;
_efda . ClrMap . Accent6Attr = _db . ST_ColorSchemeIndexAccent6 ; _efda . ClrMap . HlinkAttr = _db . ST_ColorSchemeIndexHlink ; _efda . ClrMap . FolHlinkAttr = _db . ST_ColorSchemeIndexFolHlink ; _afc . _cgf = append ( _afc . _cgf , _efda ) ; _afc . _gca = append ( _afc . _gca , len ( _afc . _cgf ) ) ;
_aag := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideMasterType , 1 ) ; _afc . ContentTypes . AddOverride ( _aag , _gbg . SlideMasterContentType ) ; _adbf := _afc . _ede . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . OfficeDocumentType , 1 , _gbg . SlideMasterType ) ;
_ceg := _ed . NewCT_SlideMasterIdListEntry ( ) ; _ceg . IdAttr = _gbg . Uint32 ( 2147483648 ) ; _ceg . RIdAttr = _adbf . ID ( ) ; _afc . _eec . SldMasterIdLst . SldMasterId = append ( _afc . _eec . SldMasterIdLst . SldMasterId , _ceg ) ; _fcg := _gb . NewRelationships ( ) ; _afc . _bae = append ( _afc . _bae , _fcg ) ;
_bde := _ed . NewSldLayout ( ) ; _fgc := _fcg . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideMasterType , 1 , _gbg . SlideLayoutType ) ; _gafba := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideLayoutType , 1 ) ; _afc . ContentTypes . AddOverride ( _gafba , _gbg . SlideLayoutContentType ) ;
_fcg . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideMasterType , 1 , _gbg . ThemeType ) ; _afc . _ffg = append ( _afc . _ffg , _bde ) ; _efda . SldLayoutIdLst = _ed . NewCT_SlideLayoutIdList ( ) ; _aga := _ed . NewCT_SlideLayoutIdListEntry ( ) ; _aga . IdAttr = _gbg . Uint32 ( 2147483649 ) ;
_aga . RIdAttr = _fgc . ID ( ) ; _efda . SldLayoutIdLst . SldLayoutId = append ( _efda . SldLayoutIdLst . SldLayoutId , _aga ) ; _fgb := _gb . NewRelationships ( ) ; _afc . _bff = append ( _afc . _bff , _fgb ) ; _fgb . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . SlideType , 1 , _gbg . SlideMasterType ) ;
_afc . _eec . NotesSz . CxAttr = 6858000 ; _afc . _eec . NotesSz . CyAttr = 9144000 ; _aec := _db . NewTheme ( ) ; _aec . NameAttr = _gbg . String ( "\u0075n\u0069o\u0066\u0066\u0069\u0063\u0065\u0020\u0054\u0068\u0065\u006d\u0065" ) ; _aec . ThemeElements . ClrScheme . NameAttr = "\u004f\u0066\u0066\u0069\u0063\u0065" ;
_aec . ThemeElements . ClrScheme . Dk1 . SysClr = _db . NewCT_SystemColor ( ) ; _aec . ThemeElements . ClrScheme . Dk1 . SysClr . LastClrAttr = _gbg . String ( "\u0030\u0030\u0030\u0030\u0030\u0030" ) ; _aec . ThemeElements . ClrScheme . Dk1 . SysClr . ValAttr = _db . ST_SystemColorValWindowText ;
_aec . ThemeElements . ClrScheme . Lt1 . SysClr = _db . NewCT_SystemColor ( ) ; _aec . ThemeElements . ClrScheme . Lt1 . SysClr . LastClrAttr = _gbg . String ( "\u0066\u0066\u0066\u0066\u0066\u0066" ) ; _aec . ThemeElements . ClrScheme . Lt1 . SysClr . ValAttr = _db . ST_SystemColorValWindow ;
_aec . ThemeElements . ClrScheme . Dk2 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Dk2 . SrgbClr . ValAttr = "\u0034\u0034\u0035\u0034\u0036\u0061" ; _aec . ThemeElements . ClrScheme . Lt2 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Lt2 . SrgbClr . ValAttr = "\u0065\u0037\u0065\u0037\u0065\u0036" ;
_aec . ThemeElements . ClrScheme . Accent1 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent1 . SrgbClr . ValAttr = "\u0034\u0034\u0037\u0032\u0063\u0034" ; _aec . ThemeElements . ClrScheme . Accent2 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent2 . SrgbClr . ValAttr = "\u0065\u0064\u0037\u0064\u0033\u0031" ;
_aec . ThemeElements . ClrScheme . Accent3 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent3 . SrgbClr . ValAttr = "\u0061\u0035\u0061\u0035\u0061\u0035" ; _aec . ThemeElements . ClrScheme . Accent4 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent4 . SrgbClr . ValAttr = "\u0066\u0066\u0063\u0030\u0030\u0030" ;
_aec . ThemeElements . ClrScheme . Accent5 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent5 . SrgbClr . ValAttr = "\u0035\u0062\u0039\u0062\u0064\u0035" ; _aec . ThemeElements . ClrScheme . Accent6 . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Accent6 . SrgbClr . ValAttr = "\u0037\u0030\u0061\u0064\u0034\u0037" ;
_aec . ThemeElements . ClrScheme . Hlink . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . Hlink . SrgbClr . ValAttr = "\u0030\u0035\u0036\u0033\u0063\u0031" ; _aec . ThemeElements . ClrScheme . FolHlink . SrgbClr = _db . NewCT_SRgbColor ( ) ; _aec . ThemeElements . ClrScheme . FolHlink . SrgbClr . ValAttr = "\u0039\u0035\u0034\u0066\u0037\u0032" ;
_aec . ThemeElements . FontScheme . NameAttr = "\u004f\u0066\u0066\u0069\u0063\u0065" ; _aec . ThemeElements . FontScheme . MajorFont . Latin . TypefaceAttr = "\u0043\u0061\u006c\u0069\u0062\u0072\u0069\u0020\u004c\u0069\u0067\u0068\u0074" ; _aec . ThemeElements . FontScheme . MinorFont . Latin . TypefaceAttr = "\u0043a\u006c\u0069\u0062\u0072\u0069" ;
_aec . ThemeElements . FmtScheme . NameAttr = _gbg . String ( "\u004f\u0066\u0066\u0069\u0063\u0065" ) ; _bbfb := _db . NewEG_FillProperties ( ) ; _aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _bbfb ) ;
_bbfb . SolidFill = & _db . CT_SolidColorFillProperties { SchemeClr : & _db . CT_SchemeColor { ValAttr : _db . ST_SchemeColorValPhClr } } ; _bbfb = _db . NewEG_FillProperties ( ) ; _aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _bbfb ) ;
_aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . FillStyleLst . EG_FillProperties , _bbfb ) ; _bbfb . GradFill = & _db . CT_GradientFillProperties { RotWithShapeAttr : _gbg . Bool ( true ) , GsLst : & _db . CT_GradientStopList { } , Lin : & _db . CT_LinearShadeProperties { } } ;
_bbfb . GradFill . Lin . AngAttr = _gbg . Int32 ( 5400000 ) ; _bbfb . GradFill . Lin . ScaledAttr = _gbg . Bool ( false ) ; _aff := _db . NewCT_GradientStop ( ) ; _aff . PosAttr . ST_PositiveFixedPercentageDecimal = _gbg . Int32 ( 0 ) ; _aff . SchemeClr = & _db . CT_SchemeColor { ValAttr : _db . ST_SchemeColorValPhClr } ;
_bbfb . GradFill . GsLst . Gs = append ( _bbfb . GradFill . GsLst . Gs , _aff ) ; _aff = _db . NewCT_GradientStop ( ) ; _aff . PosAttr . ST_PositiveFixedPercentageDecimal = _gbg . Int32 ( 50000 ) ; _aff . SchemeClr = & _db . CT_SchemeColor { ValAttr : _db . ST_SchemeColorValPhClr } ;
_bbfb . GradFill . GsLst . Gs = append ( _bbfb . GradFill . GsLst . Gs , _aff ) ; _aec . ThemeElements . FmtScheme . LnStyleLst = _db . NewCT_LineStyleList ( ) ; for _dffe := 0 ; _dffe < 3 ; _dffe ++ { _becg := _db . NewCT_LineProperties ( ) ; _becg . WAttr = _gbg . Int32 ( int32 ( 6350 * ( _dffe + 1 ) ) ) ;
_becg . CapAttr = _db . ST_LineCapFlat ; _becg . CmpdAttr = _db . ST_CompoundLineSng ; _becg . AlgnAttr = _db . ST_PenAlignmentCtr ; _aec . ThemeElements . FmtScheme . LnStyleLst . Ln = append ( _aec . ThemeElements . FmtScheme . LnStyleLst . Ln , _becg ) ; } ; _aec . ThemeElements . FmtScheme . EffectStyleLst = _db . NewCT_EffectStyleList ( ) ;
for _gdg := 0 ; _gdg < 3 ; _gdg ++ { _bda := _db . NewCT_EffectStyleItem ( ) ; _bda . EffectLst = _db . NewCT_EffectList ( ) ; _aec . ThemeElements . FmtScheme . EffectStyleLst . EffectStyle = append ( _aec . ThemeElements . FmtScheme . EffectStyleLst . EffectStyle , _bda ) ; } ; _gec := _db . NewEG_FillProperties ( ) ;
_gec . SolidFill = & _db . CT_SolidColorFillProperties { SchemeClr : & _db . CT_SchemeColor { ValAttr : _db . ST_SchemeColorValPhClr } } ; _aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _gec ) ;
_aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _gec ) ; _aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties = append ( _aec . ThemeElements . FmtScheme . BgFillStyleLst . EG_FillProperties , _bbfb ) ;
_afc . _fcae = append ( _afc . _fcae , _aec ) ; _ecc := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . ThemeType , 1 ) ; _afc . ContentTypes . AddOverride ( _ecc , _gbg . ThemeContentType ) ; _afc . _ede . AddAutoRelationship ( _gbg . DocTypePresentation , _gbg . OfficeDocumentType , 1 , _gbg . ThemeType ) ;
_bed := _gb . NewRelationships ( ) ; _afc . _baa = append ( _afc . _baa , _bed ) ; _afc . _cdga = append ( _afc . _cdga , len ( _afc . _fcae ) ) ; return _afc ; } ; func ( _eddg * Presentation ) save ( _gce _b . Writer , _faa bool ) error { const _bfb = "\u0050\u0072\u0065\u0073en\u0074\u0061\u0074\u0069\u006f\u006e\u003a\u0070\u002e\u0053\u0061\u0076\u0065" ;
if _ega := _eddg . _eec . Validate ( ) ; _ega != nil { _ga . Log . Debug ( "\u0076\u0061\u006c\u0069\u0064\u0061\u0074\u0069\u006f\u006e\u0020\u0065\u0072\u0072\u006fr\u0020i\u006e\u0020\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u003a\u0020\u0025\u0073" , _ega ) ;
} ; if ! _ce . GetLicenseKey ( ) . IsLicensed ( ) && ! _fee { _be . Println ( "\u0055\u006e\u006ci\u0063\u0065\u006e\u0073e\u0064\u0020\u0076\u0065\u0072\u0073\u0069o\u006e\u0020\u006f\u0066\u0020\u0055\u006e\u0069\u004f\u0066\u0066\u0069\u0063\u0065" ) ; _be . Println ( "\u002d\u0020\u0047e\u0074\u0020\u0061\u0020\u0074\u0072\u0069\u0061\u006c\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f" ) ;
return _gab . New ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065\u0020\u006ci\u0063\u0065\u006e\u0073\u0065\u0020\u0072\u0065\u0071\u0075i\u0072\u0065\u0064" ) ; } ; _bfff := "\u0075n\u006b\u006e\u006f\u0077\u006e" ; if _dda , _ffbb := _gce . ( * _e . File ) ;
_ffbb { _bfff = _dda . Name ( ) ; } ; if len ( _eddg . _eaa ) == 0 { _acf , _cfbbb := _ce . GenRefId ( "\u0070\u0077" ) ; if _cfbbb != nil { _ga . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _cfbbb ) ; return _cfbbb ; } ; _eddg . _eaa = _acf ; } ; if _gdf := _ce . Track ( _eddg . _eaa , _bfb , _bfff ) ;
_gdf != nil { _ga . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _gdf ) ; return _gdf ; } ; if _faa { _eddg . ContentTypes . RemoveOverride ( "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_eddg . ContentTypes . EnsureOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070pl\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074s\u002d\u006f\u0066\u0066ic\u0065\u0064o\u0063u\u006d\u0065\u006e\u0074\u002e\u0070r\u0065\u0073\u0065n\u0074\u0061t\u0069\u006f\u006e\u006d\u006c\u002e\u0074\u0065\u006d\u0070\u006c\u0061\u0074\u0065.\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
} else { _eddg . ContentTypes . RemoveOverride ( "\u0061\u0070pl\u0069\u0063\u0061\u0074\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066o\u0072\u006d\u0061\u0074s\u002d\u006f\u0066\u0066ic\u0065\u0064o\u0063u\u006d\u0065\u006e\u0074\u002e\u0070r\u0065\u0073\u0065n\u0074\u0061t\u0069\u006f\u006e\u006d\u006c\u002e\u0074\u0065\u006d\u0070\u006c\u0061\u0074\u0065.\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
_eddg . ContentTypes . EnsureOverride ( "/\u0070\u0070\u0074\u002fpr\u0065s\u0065\u006e\u0074\u0061\u0074i\u006f\u006e\u002e\u0078\u006d\u006c" , "\u0061\u0070\u0070\u006c\u0069\u0063\u0061t\u0069\u006f\u006e\u002f\u0076\u006e\u0064\u002e\u006f\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072m\u0061\u0074\u0073\u002d\u006ff\u0066\u0069\u0063\u0065\u0064\u006f\u0063\u0075\u006de\u006e\u0074\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u006d\u006c\u002e\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e\u002e\u006d\u0061\u0069\u006e\u002b\u0078\u006d\u006c" ) ;
} ; _adab := _gbg . DocTypePresentation ; _cef := _gg . NewWriter ( _gce ) ; defer _cef . Close ( ) ; if _gfff := _f . MarshalXML ( _cef , _gbg . BaseRelsFilename , _eddg . Rels . X ( ) ) ; _gfff != nil { return _gfff ; } ; if _gdc := _f . MarshalXMLByType ( _cef , _adab , _gbg . ExtendedPropertiesType , _eddg . AppProperties . X ( ) ) ;
_gdc != nil { return _gdc ; } ; if _agec := _f . MarshalXMLByType ( _cef , _adab , _gbg . CorePropertiesType , _eddg . CoreProperties . X ( ) ) ; _agec != nil { return _agec ; } ; if _ffeg := _f . MarshalXMLByType ( _cef , _adab , _gbg . PresentationPropertiesType , _eddg . _bd . X ( ) ) ;
_ffeg != nil { return _ffeg ; } ; if _bge := _f . MarshalXMLByType ( _cef , _adab , _gbg . ViewPropertiesType , _eddg . _edd . X ( ) ) ; _bge != nil { return _bge ; } ; if _ebf := _f . MarshalXMLByType ( _cef , _adab , _gbg . TableStylesType , _eddg . _ffb . X ( ) ) ; _ebf != nil { return _ebf ;
} ; if _eddg . CustomProperties . X ( ) != nil { if _ebba := _f . MarshalXMLByType ( _cef , _adab , _gbg . CustomPropertiesType , _eddg . CustomProperties . X ( ) ) ; _ebba != nil { return _ebba ; } ; } ; if _eddg . Thumbnail != nil { _bfea , _dcg := _cef . Create ( "\u0064\u006f\u0063Pr\u006f\u0070\u0073\u002f\u0074\u0068\u0075\u006d\u0062\u006e\u0061\u0069\u006c\u002e\u006a\u0070\u0065\u0067" ) ;
if _dcg != nil { return _dcg ; } ; if _fbd := _ge . Encode ( _bfea , _eddg . Thumbnail , nil ) ; _fbd != nil { return _fbd ; } ; } ; _dcce := _gbg . AbsoluteFilename ( _adab , _gbg . OfficeDocumentType , 0 ) ; if _dad := _f . MarshalXML ( _cef , _dcce , _eddg . _eec ) ; _dad != nil { return _dad ;
} ; if _aeg := _f . MarshalXML ( _cef , _f . RelationsPathFor ( _dcce ) , _eddg . _ede . X ( ) ) ; _aeg != nil { return _aeg ; } ; for _eef , _bcdg := range _eddg . _bbf { if _bcdg == nil { continue ; } ; _bcdgc := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideType , _eddg . _bgf [ _eef ] ) ;
_f . MarshalXML ( _cef , _bcdgc , _bcdg ) ; if ! _eddg . _edg [ _eef ] . IsEmpty ( ) { _dfbb := _f . RelationsPathFor ( _bcdgc ) ; _f . MarshalXML ( _cef , _dfbb , _eddg . _edg [ _eef ] . X ( ) ) ; } ; } ; for _cbd , _eeef := range _eddg . _cgf { if _eeef == nil { continue ; } ; _bbbe := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideMasterType , _eddg . _gca [ _cbd ] ) ;
_f . MarshalXML ( _cef , _bbbe , _eeef ) ; if ! _eddg . _bae [ _cbd ] . IsEmpty ( ) { _bcgb := _f . RelationsPathFor ( _bbbe ) ; _f . MarshalXML ( _cef , _bcgb , _eddg . _bae [ _cbd ] . X ( ) ) ; } ; } ; for _gbca , _cac := range _eddg . _ffg { if _cac == nil { continue ; } ; _afaf := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . SlideLayoutType , _gbca + 1 ) ;
_f . MarshalXML ( _cef , _afaf , _cac ) ; if ! _eddg . _bff [ _gbca ] . IsEmpty ( ) { _fab := _f . RelationsPathFor ( _afaf ) ; _f . MarshalXML ( _cef , _fab , _eddg . _bff [ _gbca ] . X ( ) ) ; } ; } ; for _eadg , _fcaa := range _eddg . _fcae { if _fcaa == nil { continue ; } ; _fcfb := _gbg . AbsoluteFilename ( _gbg . DocTypePresentation , _gbg . ThemeType , _eddg . _cdga [ _eadg ] ) ;
_f . MarshalXML ( _cef , _fcfb , _fcaa ) ; if ! _eddg . _baa [ _eadg ] . IsEmpty ( ) { _bbfbf := _f . RelationsPathFor ( _fcfb ) ; _f . MarshalXML ( _cef , _bbfbf , _eddg . _baa [ _eadg ] . X ( ) ) ; } ; } ; for _fbf , _cebf := range _eddg . _fac { _dfg := _gbg . AbsoluteFilename ( _adab , _gbg . ChartType , _fbf + 1 ) ;
_f . MarshalXML ( _cef , _dfg , _cebf ) ; } ; for _gfdg , _cbg := range _eddg . _cdf { _gef := _gbg . AbsoluteFilename ( _adab , _gbg . HandoutMasterType , _gfdg + 1 ) ; _f . MarshalXML ( _cef , _gef , _cbg ) ; } ; for _gga , _adabe := range _eddg . _cee { if _adabe == nil { continue ; } ;
_ddd := _gbg . AbsoluteFilename ( _adab , _gbg . NotesMasterType , _eddg . _egg [ _gga ] ) ; _f . MarshalXML ( _cef , _ddd , _adabe ) ; } ; for _aecc , _ccc := range _eddg . Images { _eeg := _aecc + 1 ; if _adc , _gdb := _fd . StringToNumbers ( _ccc . Target ( ) ) ; _gdb && _eeg != _adc { _eeg = _adc ;
} ; if _gafg := _gb . AddImageToZip ( _cef , _ccc , _eeg , _gbg . DocTypePresentation ) ; _gafg != nil { return _gafg ; } ; } ; _eddg . ContentTypes . EnsureDefault ( "\u0070\u006e\u0067" , "\u0069m\u0061\u0067\u0065\u002f\u0070\u006eg" ) ; _eddg . ContentTypes . EnsureDefault ( "\u006a\u0070\u0065\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ;
_eddg . ContentTypes . EnsureDefault ( "\u006a\u0070\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _eddg . ContentTypes . EnsureDefault ( "\u0077\u006d\u0066" , "i\u006d\u0061\u0067\u0065\u002f\u0078\u002d\u0077\u006d\u0066" ) ; if _fcgf := _f . MarshalXML ( _cef , _gbg . ContentTypesFilename , _eddg . ContentTypes . X ( ) ) ;
_fcgf != nil { return _fcgf ; } ; if _cadea := _eddg . WriteExtraFiles ( _cef ) ; _cadea != nil { return _cadea ; } ; return nil ; } ; func ( _ceae * Presentation ) Validate ( ) error { if _afd := _ceae . _eec . Validate ( ) ; _afd != nil { return _afd ; } ; for _acb , _dcb := range _ceae . Slides ( ) { if _gbfb := _dcb . ValidateWithPath ( _be . Sprintf ( "\u0053l\u0069\u0064\u0065\u005b\u0025\u0064]" , _acb ) ) ;
_gbfb != nil { return _gbfb ; } ; } ; for _baaa , _gfbf := range _ceae . _cgf { if _decd := _gfbf . ValidateWithPath ( _be . Sprintf ( "\u0053l\u0069d\u0065\u004d\u0061\u0073\u0074\u0065\u0072\u005b\u0025\u0064\u005d" , _baaa ) ) ; _decd != nil { return _decd ; } ; } ; for _edfa , _efa := range _ceae . _ffg { if _fcfg := _efa . ValidateWithPath ( _be . Sprintf ( "\u0053l\u0069d\u0065\u004c\u0061\u0079\u006f\u0075\u0074\u005b\u0025\u0064\u005d" , _edfa ) ) ;
_fcfg != nil { return _fcfg ; } ; } ; return nil ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// SetOffsetY sets vertical offset of text box in distance units (see measurement package).
func ( _adce TextBox ) SetOffsetY ( offY float64 ) { _egcb := _adce . getOff ( ) ; _cbe := _ca . ToEMU ( offY ) ; _egcb . YAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _cbe } ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// GetTableStyleById returns *dml.CT_TableStyle by its style id.
func ( _cacf * Presentation ) GetTableStyleById ( id string ) * _db . CT_TableStyle { _ccd := _cacf . _ffb . TblStyle ( ) ; for _ , _beec := range _ccd { if _beec . StyleIdAttr == id { return _beec ; } ; } ; return nil ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// Read reads a document from an io.Reader.
func Read ( r _b . ReaderAt , size int64 ) ( * Presentation , error ) { const _ebae = "\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e:\u0052\u0065\u0061\u0064" ; if ! _ce . GetLicenseKey ( ) . IsLicensed ( ) && ! _fee { _be . Println ( "\u0055\u006e\u006ci\u0063\u0065\u006e\u0073e\u0064\u0020\u0076\u0065\u0072\u0073\u0069o\u006e\u0020\u006f\u0066\u0020\u0055\u006e\u0069\u004f\u0066\u0066\u0069\u0063\u0065" ) ;
_be . Println ( "\u002d\u0020\u0047e\u0074\u0020\u0061\u0020\u0074\u0072\u0069\u0061\u006c\u0020\u006c\u0069\u0063\u0065\u006e\u0073\u0065\u0020\u006f\u006e\u0020\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002fu\u006e\u0069\u0064\u006f\u0063\u002e\u0069\u006f" ) ;
return nil , _gab . New ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065\u0020\u006ci\u0063\u0065\u006e\u0073\u0065\u0020\u0072\u0065\u0071\u0075i\u0072\u0065\u0064" ) ; } ; _efde := "\u0075n\u006b\u006e\u006f\u0077\u006e" ; if _eecb , _gcff := r . ( * _e . File ) ;
_gcff { _efde = _eecb . Name ( ) ; } ; _aaef := _egeg ( ) ; _fcb , _gba := _ce . GenRefId ( "\u0070\u0072" ) ; if _gba != nil { _ga . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _gba ) ; return nil , _gba ; } ; _aaef . _eaa = _fcb ; if _dcca := _ce . Track ( _aaef . _eaa , _ebae , _efde ) ;
_dcca != nil { _ga . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _dcca ) ; return nil , _dcca ; } ; _abba , _gba := _ff . TempDir ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065-\u0070\u0070\u0074\u0078" ) ; if _gba != nil { return nil , _gba ; } ;
_aaef . TmpPath = _abba ; _feb , _gba := _gg . NewReader ( r , size ) ; if _gba != nil { return nil , _be . Errorf ( "\u0070a\u0072s\u0069\u006e\u0067\u0020\u007a\u0069\u0070\u003a\u0020\u0025\u0073" , _gba ) ; } ; _bbec := [ ] * _gg . File { } ; _bbec = append ( _bbec , _feb . File ... ) ;
_bcgc := false ; for _ , _cff := range _bbec { if _cff . FileHeader . Name == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _bcgc = true ; break ; } ; } ; if _bcgc { _aaef . CreateCustomProperties ( ) ; } ; _dfab := _f . DecodeMap { } ;
_dfab . SetOnNewRelationshipFunc ( _aaef . onNewRelationship ) ; _dfab . AddTarget ( _gbg . ContentTypesFilename , _aaef . ContentTypes . X ( ) , "" , 0 ) ; _dfab . AddTarget ( _gbg . BaseRelsFilename , _aaef . Rels . X ( ) , "" , 0 ) ; if _dge := _dfab . Decode ( _bbec ) ; _dge != nil { return nil , _dge ;
} ; for _ , _abd := range _bbec { if _abd == nil { continue ; } ; if _fcga := _aaef . AddExtraFileFromZip ( _abd ) ; _fcga != nil { return nil , _fcga ; } ; } ; if _bcgc { _dgag := false ; for _ , _cba := range _aaef . Rels . X ( ) . Relationship { if _cba . TargetAttr == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _dgag = true ;
break ; } ; } ; if ! _dgag { _aaef . AddCustomRelationships ( ) ; } ; } ; return _aaef , nil ; } ; func ( _eag * Presentation ) saveToFile ( _aaf string , _fdg bool ) error { _cbga , _accg := _e . Create ( _aaf ) ; if _accg != nil { return _accg ; } ; defer _cbga . Close ( ) ; return _eag . save ( _cbga , _fdg ) ;
} ; func _egeg ( ) * Presentation { _afa := & Presentation { _eec : _ed . NewPresentation ( ) } ; _afa . _eec . SldIdLst = _ed . NewCT_SlideIdList ( ) ; _afa . _eec . ConformanceAttr = _a . ST_ConformanceClassTransitional ; _afa . AppProperties = _gb . NewAppProperties ( ) ; _afa . CoreProperties = _gb . NewCoreProperties ( ) ;
_afa . _ffb = _gb . NewTableStyles ( ) ; _afa . ContentTypes = _gb . NewContentTypes ( ) ; _afa . Rels = _gb . NewRelationships ( ) ; _afa . _ede = _gb . NewRelationships ( ) ; _afa . _bd = NewPresentationProperties ( ) ; _afa . _edd = NewViewProperties ( ) ; _afa . _gage = map [ string ] string { } ;
return _afa ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// X returns the inner wrapped XML type.
func ( _dacc ViewProperties ) X ( ) * _ed . ViewPr { return _dacc . _agecf } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// TableInfo is used for keep information about a table, a row and a cell where the text is located.
type TableInfo struct { Table * _db . CT_Table ; Row * _db . CT_TableRow ; Cell * _db . CT_TableCell ; RowIndex int ; ColIndex int ; } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// SlideLayout is a layout from which slides can be created.
type SlideLayout struct { _acdd * _ed . SldLayout } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// AddTable adds an empty table to a slide.
func ( _bgfc Slide ) AddTable ( ) * _gb . Table { _ggc := _ed . NewCT_GroupShapeChoice ( ) ; _bgfc . _efg . CSld . SpTree . Choice = append ( _bgfc . _efg . CSld . SpTree . Choice , _ggc ) ; _gabe := _ed . NewCT_GraphicalObjectFrame ( ) ; _ggc . GraphicFrame = append ( _ggc . GraphicFrame , _gabe ) ;
_gabe . Xfrm . Off = _db . NewCT_Point2D ( ) ; _bag := int64 ( 1 ) ; _gabe . Xfrm . Off . XAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _bag } ; _gabe . Xfrm . Off . YAttr = _db . ST_Coordinate { ST_CoordinateUnqualified : & _bag } ; _fgcg := _gabe . Graphic . CT_GraphicalObject . GraphicData ;
_fgcg . UriAttr = "\u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0073\u0063\u0068\u0065\u006d\u0061\u0073\u002eo\u0070\u0065\u006e\u0078\u006d\u006c\u0066\u006f\u0072\u006d\u0061\u0074\u0073.\u006f\u0072\u0067\u002f\u0064\u0072\u0061\u0077\u0069\u006e\u0067\u006dl/\u0032\u0030\u0030\u0036\u002f\u0074\u0061\u0062\u006c\u0065" ;
_cgab := _gb . NewTableWithXfrm ( _gabe . Xfrm ) ; _fgcg . Any = append ( _fgcg . Any , _cgab . X ( ) ) ; return _cgab ; } ;
2024-05-22 00:21:11 +00:00
2024-11-22 00:17:48 +00:00
// Type returns the type of the slide layout.
func ( _cfaa SlideLayout ) Type ( ) _ed . ST_SlideLayoutType { return _cfaa . _acdd . TypeAttr } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// AddTextBox adds an empty textbox to a slide.
func ( _cgdc Slide ) AddTextBox ( ) TextBox { _ebgg := _ed . NewCT_GroupShapeChoice ( ) ; _cgdc . _efg . CSld . SpTree . Choice = append ( _cgdc . _efg . CSld . SpTree . Choice , _ebgg ) ; _acfd := _ed . NewCT_Shape ( ) ; _ebgg . Sp = append ( _ebgg . Sp , _acfd ) ; _acfd . SpPr = _db . NewCT_ShapeProperties ( ) ;
_acfd . SpPr . Xfrm = _db . NewCT_Transform2D ( ) ; _acfd . SpPr . PrstGeom = _db . NewCT_PresetGeometry2D ( ) ; _acfd . SpPr . PrstGeom . PrstAttr = _db . ST_ShapeTypeRect ; _acfd . NvSpPr = _ed . NewCT_ShapeNonVisual ( ) ; _acfd . NvSpPr . CNvSpPr = _db . NewCT_NonVisualDrawingShapeProps ( ) ;
_agf := true ; _acfd . NvSpPr . CNvSpPr . TxBoxAttr = & _agf ; _acfd . TxBody = _db . NewCT_TextBody ( ) ; _acfd . TxBody . BodyPr = _db . NewCT_TextBodyProperties ( ) ; _acfd . TxBody . BodyPr . WrapAttr = _db . ST_TextWrappingTypeSquare ; _acfd . TxBody . BodyPr . SpAutoFit = _db . NewCT_TextShapeAutofit ( ) ;
_bfcb := TextBox { _acfd } ; _bfcb . Properties ( ) . SetWidth ( 3 * _ca . Inch ) ; _bfcb . Properties ( ) . SetHeight ( 1 * _ca . Inch ) ; _bfcb . Properties ( ) . SetPosition ( 0 , 0 ) ; return _bfcb ; } ;
2024-07-28 07:48:26 +00:00
2024-11-22 00:17:48 +00:00
// Image is an image within a slide.
type Image struct { _dea * _ed . CT_Picture } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// GetPlaceholder returns a placeholder given its type. If there are multiplace
// placeholders of the same type, this method returns the first one. You must use the
// PlaceHolders() method to access the others.
func ( _ceag Slide ) GetPlaceholder ( t _ed . ST_PlaceholderType ) ( PlaceHolder , error ) { for _ , _eae := range _ceag . _efg . CSld . SpTree . Choice { for _ , _geacb := range _eae . Sp { if _geacb . NvSpPr != nil && _geacb . NvSpPr . NvPr != nil && _geacb . NvSpPr . NvPr . Ph != nil { if _geacb . NvSpPr . NvPr . Ph . TypeAttr == t { return PlaceHolder { _geacb , _ceag . _efg } , nil ;
} ; } ; } ; } ; return PlaceHolder { } , _gab . New ( "\u0075\u006e\u0061\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0070\u006c\u0061\u0063\u0065\u0068\u006fl\u0064\u0065\u0072" ) ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// PresentationProperties contains document specific properties.
type PresentationProperties struct { _cda * _ed . PresentationPr } ; type sort2d [ ] * TextItem ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// SorterViewPr returns the SorterViewPr property.
func ( _abab ViewProperties ) SorterViewPr ( ) * _ed . CT_SlideSorterViewProperties { return _abab . _agecf . SorterViewPr ; } ;
2024-10-17 17:05:28 +00:00
2024-11-22 00:17:48 +00:00
// PlaceHolder is a place holder from a slide.
type PlaceHolder struct { _dfd * _ed . CT_Shape ; _ebd * _ed . Sld ; } ; func ( _ebed * Slide ) getSlideLayoutRels ( ) _gb . Relationships { _bcdgb := _ebed . _fagc ; for _deag , _dfbab := range _bcdgb . SlideLayouts ( ) { if * _ebed . GetSlideLayout ( ) . CSld == * _dfbab . _acdd . CSld { return _bcdgb . _bff [ _deag ] ;
} ; } ; return _gb . Relationships { } ; } ;