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/
2022-02-05 13:05:36 +00:00
package presentation ; import ( _fbf "archive/zip" ; _dd "bytes" ; _ff "encoding/xml" ; _eb "errors" ; _fag "fmt" ; _fa "github.com/unidoc/unioffice" ; _bb "github.com/unidoc/unioffice/common" ; _be "github.com/unidoc/unioffice/common/logger" ; _c "github.com/unidoc/unioffice/common/tempstorage" ; _eg "github.com/unidoc/unioffice/drawing" ; _ba "github.com/unidoc/unioffice/internal/license" ; _da "github.com/unidoc/unioffice/measurement" ; _ffd "github.com/unidoc/unioffice/schema/soo/dml" ; _f "github.com/unidoc/unioffice/schema/soo/dml/chart" ; _b "github.com/unidoc/unioffice/schema/soo/ofc/sharedTypes" ; _ec "github.com/unidoc/unioffice/schema/soo/pkg/relationships" ; _cg "github.com/unidoc/unioffice/schema/soo/pml" ; _d "github.com/unidoc/unioffice/zippkg" ; _aa "image" ; _g "image/jpeg" ; _fb "io" ; _ce "math" ; _bc "os" ; _ca "path" ; _bcc "sort" ; _fe "strconv" ; _a "strings" ; ) ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// AddTextBox adds an empty textbox to a slide.
func ( _fcee Slide ) AddTextBox ( ) TextBox { _ccce := _cg . NewCT_GroupShapeChoice ( ) ; _fcee . _dfbe . CSld . SpTree . Choice = append ( _fcee . _dfbe . CSld . SpTree . Choice , _ccce ) ; _deag := _cg . NewCT_Shape ( ) ; _ccce . Sp = append ( _ccce . Sp , _deag ) ; _deag . SpPr = _ffd . NewCT_ShapeProperties ( ) ; _deag . SpPr . Xfrm = _ffd . NewCT_Transform2D ( ) ; _deag . SpPr . PrstGeom = _ffd . NewCT_PresetGeometry2D ( ) ; _deag . SpPr . PrstGeom . PrstAttr = _ffd . ST_ShapeTypeRect ; _deag . NvSpPr = _cg . NewCT_ShapeNonVisual ( ) ; _deag . NvSpPr . CNvSpPr = _ffd . NewCT_NonVisualDrawingShapeProps ( ) ; _acfb := true ; _deag . NvSpPr . CNvSpPr . TxBoxAttr = & _acfb ; _deag . TxBody = _ffd . NewCT_TextBody ( ) ; _deag . TxBody . BodyPr = _ffd . NewCT_TextBodyProperties ( ) ; _deag . TxBody . BodyPr . WrapAttr = _ffd . ST_TextWrappingTypeSquare ; _deag . TxBody . BodyPr . SpAutoFit = _ffd . NewCT_TextShapeAutofit ( ) ; _fbc := TextBox { _deag } ; _fbc . Properties ( ) . SetWidth ( 3 * _da . Inch ) ; _fbc . Properties ( ) . SetHeight ( 1 * _da . Inch ) ; _fbc . Properties ( ) . SetPosition ( 0 , 0 ) ; return _fbc ; } ; func ( _ge * chart ) Target ( ) string { return _ge . _gc } ;
2017-11-18 11:43:37 -06:00
2022-02-05 13:05:36 +00:00
// Text returns text from a slide as one string separated with line breaks.
func ( _gg * SlideText ) Text ( ) string { _bfg := _dd . NewBuffer ( [ ] byte { } ) ; for _ , _ccee := range _gg . Items { if _ccee . Text != "" { _bfg . WriteString ( _ccee . Text ) ; _bfg . WriteString ( "\u000a" ) ; } ; } ; return _bfg . String ( ) ; } ;
2021-05-31 16:22:30 +00:00
2022-02-05 13:05:36 +00:00
// Type returns the placeholder type
func ( _bdce PlaceHolder ) Type ( ) _cg . ST_PlaceholderType { return _bdce . _edbb . NvSpPr . NvPr . Ph . TypeAttr } ;
2021-05-31 16:22:30 +00:00
2022-02-05 13:05:36 +00:00
// Presentation is the a presentation base document.
type Presentation struct { _bb . DocBase ; _ede * _cg . Presentation ; _aae _bb . Relationships ; _dgb [ ] * _cg . Sld ; _fegc [ ] _bb . Relationships ; _ecc [ ] * _cg . SldMaster ; _cfaa [ ] _bb . Relationships ; _acgb [ ] * _cg . SldLayout ; _ecd [ ] _bb . Relationships ; _ffa [ ] * _ffd . Theme ; _cdb [ ] _bb . Relationships ; _ceb _bb . TableStyles ; _fcge PresentationProperties ; _dcd ViewProperties ; _bag [ ] * _ffd . CT_Hyperlink ; _cff [ ] * chart ; _gaa [ ] * _cg . HandoutMaster ; _dad [ ] * _cg . NotesMaster ; _efb [ ] * _fa . XSDAny ; _aaef map [ string ] string ; _edbc string ; } ; func ( _gf * chart ) RelId ( ) string { return _gf . _bccd } ;
2022-01-15 21:17:38 +00:00
2022-02-05 13:05:36 +00:00
// X returns TextBox's underlying *pml.CT_Shape.
func ( _bcac TextBox ) X ( ) * _cg . CT_Shape { return _bcac . _fdc } ; func _afe ( ) * Presentation { _bga := & Presentation { _ede : _cg . NewPresentation ( ) } ; _bga . _ede . SldIdLst = _cg . NewCT_SlideIdList ( ) ; _bga . _ede . ConformanceAttr = _b . ST_ConformanceClassTransitional ; _bga . AppProperties = _bb . NewAppProperties ( ) ; _bga . CoreProperties = _bb . NewCoreProperties ( ) ; _bga . _ceb = _bb . NewTableStyles ( ) ; _bga . ContentTypes = _bb . NewContentTypes ( ) ; _bga . Rels = _bb . NewRelationships ( ) ; _bga . _aae = _bb . NewRelationships ( ) ; _bga . _fcge = NewPresentationProperties ( ) ; _bga . _dcd = NewViewProperties ( ) ; _bga . _aaef = map [ string ] string { } ; return _bga ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Properties returns the properties of the TextBox.
func ( _eba Image ) Properties ( ) _eg . ShapeProperties { if _eba . _adf . SpPr == nil { _eba . _adf . SpPr = _ffd . NewCT_ShapeProperties ( ) ; } ; return _eg . MakeShapeProperties ( _eba . _adf . SpPr ) ; } ; type sort2d [ ] * TextItem ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// SaveAsTemplate writes the presentation out to a writer in the Zip package format as a template
func ( _ggaa * Presentation ) SaveAsTemplate ( w _fb . Writer ) error { return _ggaa . save ( w , true ) } ; func ( _aca sort2d ) Swap ( i , j int ) { _aca [ i ] , _aca [ j ] = _aca [ j ] , _aca [ i ] } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// ExtLst returns the ExtLst property.
func ( _cgbe ViewProperties ) ExtLst ( ) * _cg . CT_ExtensionList { return _cgbe . _decg . ExtLst } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// ExtractText returns text from a presentation as a PresentationText object.
func ( _fab * Presentation ) ExtractText ( ) * PresentationText { _bfb := [ ] * SlideText { } ; for _ , _cc := range _fab . Slides ( ) { _de := _cc . ExtractText ( ) ; if _de != nil { _bfb = append ( _bfb , _de ) ; } ; } ; return & PresentationText { Slides : _bfb } ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Remove removes a placeholder from a presentation.
func ( _bead PlaceHolder ) Remove ( ) error { for _dee , _cdc := range _bead . _gegg . CSld . SpTree . Choice { for _ , _gfb := range _cdc . Sp { if _gfb == _bead . _edbb { copy ( _bead . _gegg . CSld . SpTree . Choice [ _dee : ] , _bead . _gegg . CSld . SpTree . Choice [ _dee + 1 : ] ) ; _bead . _gegg . CSld . SpTree . Choice = _bead . _gegg . CSld . SpTree . Choice [ 0 : len ( _bead . _gegg . CSld . SpTree . Choice ) - 1 ] ; return nil ; } ; } ; } ; return _eb . 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" ) ; } ;
2020-11-09 01:00:18 +00:00
2022-02-05 13:05:36 +00:00
// Save writes the presentation out to a writer in the Zip package format
func ( _abfg * Presentation ) Save ( w _fb . Writer ) error { return _abfg . save ( w , false ) } ;
2021-05-31 16:22:30 +00:00
2022-02-05 13:05:36 +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 ( _bfgg * Presentation ) AddImage ( i _bb . Image ) ( _bb . ImageRef , error ) { _cgfg := _bb . MakeImageRef ( i , & _bfgg . DocBase , _bfgg . _aae ) ; if i . Data == nil && i . Path == "" { return _cgfg , _eb . 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 _cgfg , _eb . 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 _cgfg , _eb . 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 != "" { _daeb := _c . Add ( i . Path ) ; if _daeb != nil { return _cgfg , _daeb ; } ; } ; _bfgg . Images = append ( _bfgg . Images , _cgfg ) ; _bfgg . ContentTypes . EnsureDefault ( "\u0070\u006e\u0067" , "\u0069m\u0061\u0067\u0065\u002f\u0070\u006eg" ) ; _bfgg . ContentTypes . EnsureDefault ( "\u006a\u0070\u0065\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _bfgg . ContentTypes . EnsureDefault ( "\u006a\u0070\u0067" , "\u0069\u006d\u0061\u0067\u0065\u002f\u006a\u0070\u0065\u0067" ) ; _bfgg . ContentTypes . EnsureDefault ( "\u0077\u006d\u0066" , "i\u006d\u0061\u0067\u0065\u002f\u0078\u002d\u0077\u006d\u0066" ) ; _bfgg . ContentTypes . EnsureDefault ( i . Format , "\u0069\u006d\u0061\u0067\u0065\u002f" + i . Format ) ; return _cgfg , nil ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Index returns the placeholder index
func ( _baa PlaceHolder ) Index ( ) uint32 { if _baa . _edbb . NvSpPr . NvPr . Ph . IdxAttr == nil { return 0 ; } ; return * _baa . _edbb . NvSpPr . NvPr . Ph . IdxAttr ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// ShowCommentsAttr returns the WebPr property.
func ( _abd ViewProperties ) ShowCommentsAttr ( ) * bool { return _abd . _decg . ShowCommentsAttr } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +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 ( _fedc Slide ) GetPlaceholder ( t _cg . ST_PlaceholderType ) ( PlaceHolder , error ) { for _ , _aecg := range _fedc . _dfbe . CSld . SpTree . Choice { for _ , _dabg := range _aecg . Sp { if _dabg . NvSpPr != nil && _dabg . NvSpPr . NvPr != nil && _dabg . NvSpPr . NvPr . Ph != nil { if _dabg . NvSpPr . NvPr . Ph . TypeAttr == t { return PlaceHolder { _dabg , _fedc . _dfbe } , nil ; } ; } ; } ; } ; return PlaceHolder { } , _eb . 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" ) ; } ;
2022-01-15 21:17:38 +00:00
2022-02-05 13:05:36 +00:00
// Read reads a document from an io.Reader.
func Read ( r _fb . ReaderAt , size int64 ) ( * Presentation , error ) { const _gcadg = "\u0070\u0072\u0065\u0073\u0065\u006e\u0074\u0061\u0074\u0069\u006f\u006e:\u0052\u0065\u0061\u0064" ; if ! _ba . GetLicenseKey ( ) . IsLicensed ( ) && ! _gfc { _fag . 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" ) ; _fag . 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 , _eb . 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" ) ; } ; _efce := _afe ( ) ; _cfc , _eag := _ba . GenRefId ( "\u0070\u0072" ) ; if _eag != nil { _be . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _eag ) ; return nil , _eag ; } ; _efce . _edbc = _cfc ; if _cfe := _ba . Track ( _efce . _edbc , _gcadg ) ; _cfe != nil { _be . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _cfe ) ; return nil , _cfe ; } ; _eabe , _eag := _c . TempDir ( "\u0075\u006e\u0069\u006f\u0066\u0066\u0069\u0063\u0065-\u0070\u0070\u0074\u0078" ) ; if _eag != nil { return nil , _eag ; } ; _efce . TmpPath = _eabe ; _dccd , _eag := _fbf . NewReader ( r , size ) ; if _eag != nil { return nil , _fag . Errorf ( "\u0070a\u0072s\u0069\u006e\u0067\u0020\u007a\u0069\u0070\u003a\u0020\u0025\u0073" , _eag ) ; } ; _dbb := [ ] * _fbf . File { } ; _dbb = append ( _dbb , _dccd . File ... ) ; _begg := false ; for _ , _adcd := range _dbb { if _adcd . FileHeader . Name == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _begg = true ; break ; } ; } ; if _begg { _efce . CreateCustomProperties ( ) ; } ; _aade := _d . DecodeMap { } ; _aade . SetOnNewRelationshipFunc ( _efce . onNewRelationship ) ; _aade . AddTarget ( _fa . ContentTypesFilename , _efce . ContentTypes . X ( ) , "" , 0 ) ; _aade . AddTarget ( _fa . BaseRelsFilename , _efce . Rels . X ( ) , "" , 0 ) ; if _egcb := _aade . Decode ( _dbb ) ; _egcb != nil { return nil , _egcb ; } ; for _ , _bcfd := range _dbb { if _bcfd == nil { continue ; } ; if _facg := _efce . AddExtraFileFromZip ( _bcfd ) ; _facg != nil { return nil , _facg ; } ; } ; if _begg { _adfd := false ; for _ , _ggc := range _efce . Rels . X ( ) . Relationship { if _ggc . TargetAttr == "\u0064\u006f\u0063\u0050ro\u0070\u0073\u002f\u0063\u0075\u0073\u0074\u006f\u006d\u002e\u0078\u006d\u006c" { _adfd = true ; break ; } ; } ; if ! _adfd { _efce . AddCustomRelationships ( ) ; } ; } ; return _efce , nil ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// SlideLayout is a layout from which slides can be created.
type SlideLayout struct { _cef * _cg . SldLayout } ; type chart struct { _gb * _f . ChartSpace ; _bccd string ; _gc string ; } ;
2020-11-09 01:00:18 +00:00
2022-02-05 13:05:36 +00:00
// X returns the inner wrapped XML type.
func ( _eaca Slide ) X ( ) * _cg . Sld { return _eaca . _dfbe } ;
2021-03-16 20:51:18 +00:00
2022-02-05 13:05:36 +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 ( _ebe * Presentation ) AddSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _dag := _cg . NewCT_SlideIdListEntry ( ) ; _dag . IdAttr = 256 ; for _ , _bge := range _ebe . _ede . SldIdLst . SldId { if _bge . IdAttr >= _dag . IdAttr { _dag . IdAttr = _bge . IdAttr + 1 ; } ; } ; _ebe . _ede . SldIdLst . SldId = append ( _ebe . _ede . SldIdLst . SldId , _dag ) ; _cgc := _cg . NewSld ( ) ; _ggfb := _dd . Buffer { } ; _bbfa := _ff . NewEncoder ( & _ggfb ) ; _gfag := _ff . StartElement { Name : _ff . Name { Local : "\u0073\u006c\u0069d\u0065" } } ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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" } ) ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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" } ) ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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" } ) ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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" } ) ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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" } ) ; _gfag . Attr = append ( _gfag . Attr , _ff . Attr { Name : _ff . 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 _fbfd := l . _cef . CSld . MarshalXML ( _bbfa , _gfag ) ; _fbfd != nil { return Slide { } , _fbfd ; } ; _bbfa . Flush ( ) ; _ega := _ff . NewDecoder ( & _ggfb ) ; _cgc . CSld = _cg . NewCT_CommonSlideData ( ) ; if _bbfe := _ega . Decode ( _cgc . CSld ) ; _bbfe != nil { return Slide { } , _bbfe ; } ; _cgc . CSld . NameAttr = nil ; _cgc . CSld . SpTree . Choice = _cbe ( _cgc . CSld . SpTree . Choice ) ; _ebe . _dgb = append ( _ebe . _dgb , _cgc ) ; _gfbe := _ebe . _aae . AddAutoRelationship ( _fa . DocTypePresentation , _fa . OfficeDocumentType , len ( _ebe . _dgb ) , _fa . SlideType ) ; _dag . RIdAttr = _gfbe . ID ( ) ; _ddd := _fa . AbsoluteFilename ( _fa . DocTypePresentation , _fa . SlideType , len ( _ebe . _dgb ) ) ; _ebe . ContentTypes . AddOverride ( _ddd , _fa . SlideContentType ) ; _dfb := _bb . NewRelationships ( ) ; _ebe . _fegc = append ( _ebe . _fegc , _dfb ) ; _defb := len ( _ebe . _fegc ) - 1 ; for _gab , _cbd := range _ebe . _acgb { if _cbd == l . X ( ) { _aaf := _ebe . _ecd [ _gab ] ; for _ , _ffda := range _aaf . X ( ) . Relationship { if _ffda . TypeAttr != _fa . SlideMasterType { _ebe . _fegc [ _defb ] . X ( ) . Relationship = append ( _ebe . _fegc [ _defb ] . X (
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +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 * _ffd . CT_Table ; Row * _ffd . CT_TableRow ; Cell * _ffd . CT_TableCell ; RowIndex int ; ColIndex int ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// New initializes and reurns a new presentation
func New ( ) * Presentation { _cbf := _afe ( ) ; _cbf . 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" ) ; _cbf . 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" ) ; _cbf . 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" ) ; _cbf . 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" ) ; _cbf . 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" ) ; _cbf . 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" ) ; _cbf . 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 \ u006
2020-08-23 14:15:53 +00:00
2022-01-15 21:17:38 +00:00
// ValidateWithPath validates the slide passing path informaton for a better
// error message.
2022-02-05 13:05:36 +00:00
func ( _daee Slide ) ValidateWithPath ( path string ) error { if _fga := _daee . _dfbe . ValidateWithPath ( path ) ; _fga != nil { return _fga ; } ; for _ , _fcgf := range _daee . _dfbe . CSld . SpTree . Choice { for _ , _face := range _fcgf . Sp { if _face . TxBody != nil { if len ( _face . TxBody . P ) == 0 { return _eb . 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 ( _ceae * Slide ) ensureClrMap ( ) { if len ( _ceae . _eagc . _ecc ) == 0 || len ( _ceae . _eagc . _ffa ) == 0 { return ; } ; _fegce := _ceae . _eagc . _ecc [ 0 ] ; _gcd := _fegce . ClrMap ; if _fgeb := _ceae . _dfbe . ClrMapOvr ; _fgeb != nil { if _deef := _fgeb . Choice ; _deef != nil { if _deef . MasterClrMapping == nil { if _aaabd := _deef . OverrideClrMapping ; _aaabd != nil { if _aaabd . Bg1Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Bg1Attr = _aaabd . Bg1Attr ; } ; if _aaabd . Tx1Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Tx1Attr = _aaabd . Tx1Attr ; } ; if _aaabd . Bg2Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Bg2Attr = _aaabd . Bg2Attr ; } ; if _aaabd . Tx2Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Tx2Attr = _aaabd . Tx2Attr ; } ; if _aaabd . Accent1Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent1Attr = _aaabd . Accent1Attr ; } ; if _aaabd . Accent2Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent2Attr = _aaabd . Accent2Attr ; } ; if _aaabd . Accent3Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent3Attr = _aaabd . Accent3Attr ; } ; if _aaabd . Accent4Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent4Attr = _aaabd . Accent4Attr ; } ; if _aaabd . Accent5Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent5Attr = _aaabd . Accent5Attr ; } ; if _aaabd . Accent6Attr != _ffd . ST_ColorSchemeIndexUnset { _gcd . Accent6Attr = _aaabd . Accent6Attr ; } ; if _aaabd . HlinkAttr != _ffd . ST_ColorSchemeIndexUnset { _gcd . HlinkAttr = _aaabd . HlinkAttr ; } ; if _aaabd . FolHlinkAttr != _ffd . ST_ColorSchemeIndexUnset { _gcd . FolHlinkAttr = _aaabd . FolHlinkAttr ; } ; } ; } ; } ; } ; _ceae . _gfagd = _gcd ; } ; func ( _ege * Presentation ) Validate ( ) error { if _cgf := _ege . _ede . Validate ( ) ; _cgf != nil { return _cgf ; } ; for _fea , _ffgf := range _ege . Slides ( ) { if _afb := _ffgf . ValidateWithPath ( _fag . Sprintf ( "\u0053l\u0069\u0064\u0065\u005b\u0025\u0064]" , _fea ) ) ; _afb != nil { return _afb ; } ; } ; for _fcf , _gfec := range _ege . _ecc { if _begc := _gfec . ValidateWithPath ( _fag . Sprintf ( "\u0053l\u0069d\u0065\u004d\u0061\u0073\u0074\u0065\u0072\u005b\u0025\u0064\u005d" , _fcf ) ) ; _begc != nil { return _begc ; } ; } ; for _dfe , _ecg := range _ege . _acgb { if _dgdc := _ecg . ValidateWithPath ( _fag . Sprintf ( "\u0053l\u0069d\u0065\u004c\u0061\u0079\u006f\u0075\u0074\u005b\u0025\u0064\u005d" , _dfe ) ) ; _dgdc != nil { return _dgdc ; } ; } ; return nil ; } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +00:00
// NewPresentationProperties constructs a new PresentationProperties.
func NewPresentationProperties ( ) PresentationProperties { return PresentationProperties { _egg : _cg . NewPresentationPr ( ) } ; } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// document.
func ( _agag * Presentation ) GetImageByRelID ( relID string ) ( _bb . ImageRef , bool ) { for _ , _deg := range _agag . Images { if _deg . RelID ( ) == relID { return _deg , true ; } ; } ; return _bb . ImageRef { } , false ; } ;
2021-11-10 11:45:21 +00:00
2022-02-05 13:05:36 +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 * _cg . CT_Shape ; GraphicFrame * _cg . CT_GraphicalObjectFrame ; Paragraph * _ffd . CT_TextParagraph ; Run * _ffd . CT_RegularTextRun ; TableInfo * TableInfo ; _ae [ ] rectangle ; _ea int ; _feg int ; } ;
2021-11-10 11:45:21 +00:00
2022-02-05 13:05:36 +00:00
// Themes returns an array of presentation themes.
func ( _adc * Presentation ) Themes ( ) [ ] * _ffd . Theme { return _adc . _ffa } ; func _cbe ( _cba [ ] * _cg . CT_GroupShapeChoice ) [ ] * _cg . CT_GroupShapeChoice { var _gcfb [ ] * _cg . CT_GroupShapeChoice ; for _ , _ecce := range _cba { if len ( _ecce . Pic ) == 0 { _gcfb = append ( _gcfb , _ecce ) ; } ; } ; return _gcfb ; } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +00:00
// SaveToFileAsTemplate writes the Presentation out to a file as a template.
func ( _fec * Presentation ) SaveToFileAsTemplate ( path string ) error { return _fec . saveToFile ( path , true ) } ;
2020-12-17 22:07:08 +00:00
2022-02-05 13:05:36 +00:00
// GetTextBoxes returns a list of all text boxes from a slide.
func ( _afef Slide ) GetTextBoxes ( ) [ ] * TextBox { _cfbg := [ ] * TextBox { } ; _efdb := _afef . _dfbe . CSld . SpTree . Choice ; for _ , _baee := range _efdb { for _ , _aagdg := range _baee . Sp { if _aagdg . NvSpPr . CNvSpPr . TxBoxAttr != nil && * _aagdg . NvSpPr . CNvSpPr . TxBoxAttr { _cfbg = append ( _cfbg , & TextBox { _aagdg } ) ; } ; } ; } ; return _cfbg ; } ;
2021-06-16 07:10:52 +00:00
2022-02-05 13:05:36 +00:00
// SlideLayouts returns the slide layouts defined in the presentation.
func ( _dcg * Presentation ) SlideLayouts ( ) [ ] SlideLayout { _gceb := [ ] SlideLayout { } ; for _ , _cee := range _dcg . _acgb { _gceb = append ( _gceb , SlideLayout { _cee } ) ; } ; return _gceb ; } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// AddImage adds an image textbox to a slide.
func ( _gcc Slide ) AddImage ( img _bb . ImageRef ) Image { _dgge := _cg . NewCT_GroupShapeChoice ( ) ; _gcc . _dfbe . CSld . SpTree . Choice = append ( _gcc . _dfbe . CSld . SpTree . Choice , _dgge ) ; _ccfe := _cg . NewCT_Picture ( ) ; _dgge . Pic = append ( _dgge . Pic , _ccfe ) ; _ccfe . NvPicPr . CNvPicPr = _ffd . NewCT_NonVisualPictureProperties ( ) ; _ccfe . NvPicPr . CNvPicPr . PicLocks = _ffd . NewCT_PictureLocking ( ) ; _ccfe . NvPicPr . CNvPicPr . PicLocks . NoChangeAspectAttr = _fa . Bool ( true ) ; _ccfe . BlipFill = _ffd . NewCT_BlipFillProperties ( ) ; _ccfe . BlipFill . Blip = _ffd . NewCT_Blip ( ) ; _eaag := _gcc . AddImageToRels ( img ) ; _ccfe . BlipFill . Blip . EmbedAttr = _fa . String ( _eaag ) ; _ccfe . BlipFill . Stretch = _ffd . NewCT_StretchInfoProperties ( ) ; _ccfe . BlipFill . Stretch . FillRect = _ffd . NewCT_RelativeRect ( ) ; _ccfe . SpPr = _ffd . NewCT_ShapeProperties ( ) ; _ccfe . SpPr . PrstGeom = _ffd . NewCT_PresetGeometry2D ( ) ; _ccfe . SpPr . PrstGeom . PrstAttr = _ffd . ST_ShapeTypeRect ; _cdfb := Image { _ccfe } ; _feff := img . Size ( ) ; _cdfb . Properties ( ) . SetWidth ( _da . Distance ( _feff . X ) * _da . Pixel72 ) ; _cdfb . Properties ( ) . SetHeight ( _da . Distance ( _feff . Y ) * _da . Pixel72 ) ; _cdfb . Properties ( ) . SetPosition ( 0 , 0 ) ; return _cdfb ; } ;
// SlideMasters returns the slide masters defined in the presentation.
func ( _gec * Presentation ) SlideMasters ( ) [ ] SlideMaster { _ffbag := [ ] SlideMaster { } ; for _gdb , _fef := range _gec . _ecc { _ffbag = append ( _ffbag , SlideMaster { _gec , _gec . _cfaa [ _gdb ] , _fef } ) ; } ; return _ffbag ; } ;
2021-01-04 16:11:39 +00:00
2022-01-15 21:17:38 +00:00
// X returns the inner wrapped XML type.
2022-02-05 13:05:36 +00:00
func ( _beaf PlaceHolder ) X ( ) * _cg . CT_Shape { return _beaf . _edbb } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// LastViewAttr returns the LastViewAttr property.
func ( _fadd ViewProperties ) LastViewAttr ( ) _cg . ST_ViewType { return _fadd . _decg . LastViewAttr } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// PresentationText is an array of extracted text items which has some methods for representing extracted text.
type PresentationText struct { Slides [ ] * SlideText ; } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +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 ( _cbec * Presentation ) AddDefaultSlideWithLayout ( l SlideLayout ) ( Slide , error ) { _acgf , _gga := _cbec . AddSlideWithLayout ( l ) ; for _ , _dae := range _acgf . PlaceHolders ( ) { _dae . Clear ( ) ; switch _dae . Type ( ) { case _cg . ST_PlaceholderTypeFtr , _cg . ST_PlaceholderTypeDt , _cg . ST_PlaceholderTypeSldNum : _dae . Remove ( ) ; } ; } ; return _acgf , _gga ; } ; func ( _efeg * Presentation ) saveToFile ( _bce string , _agaf bool ) error { _fegb , _gebg := _bc . Create ( _bce ) ; if _gebg != nil { return _gebg ; } ; defer _fegb . Close ( ) ; return _efeg . save ( _fegb , _agaf ) ; } ;
2022-01-15 21:17:38 +00:00
2022-02-05 13:05:36 +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 ( _gde sort2d ) Less ( i , j int ) bool { _dab , _fce := _gde [ i ] , _gde [ j ] ; _ad , _gbc := _dab . _ae , _fce . _ae ; _acf , _cea := len ( _ad ) - 1 , len ( _gbc ) - 1 ; _geg , _egf := 0 , 0 ; for { _fcd , _bbf , _gcfc , _fgd , _edb , _bea , _dafa , _bbc := _ad [ _geg ] . _daa , _gbc [ _egf ] . _daa , _ad [ _geg ] . _ebd , _gbc [ _egf ] . _ebd , _ad [ _geg ] . _baf , _gbc [ _egf ] . _baf , _ad [ _geg ] . _bf , _gbc [ _egf ] . _bf ; if _fcd == _bbf || ( ( _ce . Abs ( float64 ( _fcd ) - float64 ( _bbf ) ) < _gbg ) && ( ( _fcd >= _bbf && _fcd <= _fgd ) || ( _bbf >= _fcd && _bbf <= _gcfc ) ) && ( _dafa < _bea || _edb > _bbc ) ) { if _edb == _bea { if _geg < _acf && _egf < _cea { _geg ++ ; _egf ++ ; continue ; } ; if _geg >= _acf && _egf >= _cea { break ; } ; return _geg >= _acf ; } else { return _edb < _bea ; } ; } else { return _fcd < _bbf ; } ; } ; _fdg , _bef , _cceg , _dfc := _dab . _ea , _fce . _ea , _dab . _feg , _fce . _feg ; if _fdg == _bef { return _cceg <= _dfc ; } ; return _fdg < _bef ; } ;
2022-01-15 21:17:38 +00:00
2022-02-05 13:05:36 +00:00
// Slides returns the slides in the presentation.
func ( _afgb * Presentation ) Slides ( ) [ ] Slide { _gdc := [ ] Slide { } ; for _edag , _afgd := range _afgb . _dgb { _gdc = append ( _gdc , Slide { _afgb . _ede . SldIdLst . SldId [ _edag ] , _afgd , _afgb , nil } ) ; } ; return _gdc ; } ; func ( _bed * chart ) X ( ) * _f . ChartSpace { return _bed . _gb } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// RemoveSlide removes a slide from a presentation.
func ( _aegd * Presentation ) RemoveSlide ( s Slide ) error { _fgf := false ; _eed := 0 ; for _fcfc , _affb := range _aegd . _dgb { if _affb == s . _dfbe { if _aegd . _ede . SldIdLst . SldId [ _fcfc ] != s . _fae { return _eb . 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 ( _aegd . _dgb [ _fcfc : ] , _aegd . _dgb [ _fcfc + 1 : ] ) ; _aegd . _dgb = _aegd . _dgb [ 0 : len ( _aegd . _dgb ) - 1 ] ; copy ( _aegd . _fegc [ _fcfc : ] , _aegd . _fegc [ _fcfc + 1 : ] ) ; _aegd . _fegc = _aegd . _fegc [ 0 : len ( _aegd . _fegc ) - 1 ] ; copy ( _aegd . _ede . SldIdLst . SldId [ _fcfc : ] , _aegd . _ede . SldIdLst . SldId [ _fcfc + 1 : ] ) ; _aegd . _ede . SldIdLst . SldId = _aegd . _ede . SldIdLst . SldId [ 0 : len ( _aegd . _ede . SldIdLst . SldId ) - 1 ] ; _fgf = true ; _eed = _fcfc ; } ; } ; if ! _fgf { return _eb . New ( "u\u006ea\u0062\u006c\u0065\u0020\u0074\u006f\u0020\u0066i\u006e\u0064\u0020\u0073li\u0064\u0065" ) ; } ; _ecb := _fa . AbsoluteFilename ( _fa . DocTypePresentation , _fa . SlideType , 0 ) ; return _aegd . ContentTypes . RemoveOverrideByIndex ( _ecb , _eed ) ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// GetChartSpaceByRelId returns a *crt.ChartSpace with the associated relation ID in the
// slide.
func ( _bgbf * Slide ) GetChartSpaceByRelId ( relId string ) * _f . ChartSpace { _efea := _bgbf . getSlideRels ( ) ; if ( _efea == _bb . Relationships { } ) { return nil ; } ; _fee := _efea . GetTargetByRelId ( relId ) ; for _ , _cdfg := range _bgbf . _eagc . _cff { if _fee == _cdfg . Target ( ) { return _cdfg . _gb ; } ; } ; return nil ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// X returns the inner wrapped XML type.
func ( _gcfa SlideLayout ) X ( ) * _cg . SldLayout { return _gcfa . _cef } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// X returns the inner wrapped XML type.
func ( _fbg * Presentation ) X ( ) * _cg . Presentation { return _fbg . _ede } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +00:00
// NotesViewPr returns the NotesViewPr property.
func ( _dgcad ViewProperties ) NotesViewPr ( ) * _cg . CT_NotesViewProperties { return _dgcad . _decg . NotesViewPr ; } ; func ( _bbde * Slide ) getSlideRels ( ) _bb . Relationships { _caaa := _bbde . _eagc ; for _eggc , _ddf := range _caaa . Slides ( ) { if * _bbde . _dfbe == * _ddf . _dfbe { return _caaa . _fegc [ len ( _caaa . _fegc ) - _eggc - 1 ] ; } ; } ; return _bb . Relationships { } ; } ;
2021-08-23 20:44:48 +00:00
2022-02-05 13:05:36 +00:00
// OpenTemplate opens a template file.
func OpenTemplate ( fn string ) ( * Presentation , error ) { _eaf , _bdg := Open ( fn ) ; if _bdg != nil { return nil , _bdg ; } ; return _eaf , nil ; } ; func _fg ( _aag * Presentation , _gcg [ ] * _cg . CT_GroupShapeChoice , _gcf [ ] rectangle , _ccc [ ] * TextItem ) [ ] * TextItem { for _ , _fgb := range _gcg { _daf := append ( [ ] rectangle { } , _gcf ... ) ; for _ , _ab := range _fgb . Sp { _ccc = append ( _ccc , _cf ( _aag , _ab , nil , nil , _ab . SpPr . Xfrm , 0 , _gcf , _ab . TxBody . P ) ... ) ; } ; for _ , _aaa := range _fgb . GraphicFrame { if _aaa != nil && _aaa . Graphic != nil && _aaa . Graphic . GraphicData != nil { _ecf := _aaa . Xfrm ; for _ , _dc := range _aaa . Graphic . GraphicData . Any { if _cd , _bca := _dc . ( * _ffd . Tbl ) ; _bca { _ccca := & _cd . CT_Table ; _afg := 0 ; for _ac , _bd := range _cd . Tr { for _fc , _ebdd := range _bd . Tc { _ecfd := & TableInfo { Table : _ccca , Row : _bd , Cell : _ebdd , RowIndex : _ac , ColIndex : _fc } ; _ccc = append ( _ccc , _cf ( _aag , nil , _aaa , _ecfd , _ecf , _afg , _gcf , _ebdd . TxBody . P ) ... ) ; _afg ++ ; } ; } ; } ; } ; } ; } ; for _ , _ceg := range _fgb . GrpSp { if _ceg . GrpSpPr != nil { _ccg := _ceg . GrpSpPr . Xfrm ; var _gfd , _ace int64 ; if _ccg . Off != nil { _dg , _aec := _ccg . Off . XAttr . ST_CoordinateUnqualified , _ccg . Off . YAttr . ST_CoordinateUnqualified ; if _dg != nil && _aec != nil { if _gcgf := _ccg . Ext ; _gcgf != nil { _gfd , _ace = _gcgf . CxAttr , _gcgf . CyAttr ; } ; _daf = append ( _daf , rectangle { _baf : * _dg , _daa : * _aec , _bf : * _dg + _gfd , _ebd : * _aec + _ace } ) ; } ; } ; } ; _ccc = _fg ( _aag , _ceg . Choice , _daf , _ccc ) ; } ; } ; return _ccc ; } ;
2022-01-15 21:17:38 +00:00
2022-02-05 13:05:36 +00:00
// SaveToFile writes the Presentation out to a file.
func ( _cad * Presentation ) SaveToFile ( path string ) error { return _cad . saveToFile ( path , false ) } ;
2022-01-15 21:17:38 +00:00
// AddSlide adds a new slide to the presentation.
2022-02-05 13:05:36 +00:00
func ( _agg * Presentation ) AddSlide ( ) Slide { _bbd := _cg . NewCT_SlideIdListEntry ( ) ; _bbd . IdAttr = _agg . nextSlideID ( ) ; _agg . _ede . SldIdLst . SldId = append ( _agg . _ede . SldIdLst . SldId , _bbd ) ; _baeb := _cg . NewSld ( ) ; _baeb . CSld . SpTree . NvGrpSpPr . CNvPr . IdAttr = 1 ; _baeb . CSld . SpTree . GrpSpPr . Xfrm = _ffd . NewCT_GroupTransform2D ( ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Off = _ffd . NewCT_Point2D ( ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Off . XAttr . ST_CoordinateUnqualified = _fa . Int64 ( 0 ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Off . YAttr . ST_CoordinateUnqualified = _fa . Int64 ( 0 ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Ext = _ffd . NewCT_PositiveSize2D ( ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Ext . CxAttr = int64 ( 0 * _da . Point ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . Ext . CyAttr = int64 ( 0 * _da . Point ) ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . ChOff = _baeb . CSld . SpTree . GrpSpPr . Xfrm . Off ; _baeb . CSld . SpTree . GrpSpPr . Xfrm . ChExt = _baeb . CSld . SpTree . GrpSpPr . Xfrm . Ext ; _agg . _dgb = append ( _agg . _dgb , _baeb ) ; _dgca := _agg . _aae . AddAutoRelationship ( _fa . DocTypePresentation , _fa . OfficeDocumentType , len ( _agg . _dgb ) , _fa . SlideType ) ; _bbd . RIdAttr = _dgca . ID ( ) ; _aeg := _fa . AbsoluteFilename ( _fa . DocTypePresentation , _fa . SlideType , len ( _agg . _dgb ) ) ; _agg . ContentTypes . AddOverride ( _aeg , _fa . SlideContentType ) ; _def := _bb . NewRelationships ( ) ; _agg . _fegc = append ( _agg . _fegc , _def ) ; _def . AddAutoRelationship ( _fa . DocTypePresentation , _fa . SlideType , len ( _agg . _acgb ) , _fa . SlideLayoutType ) ; return Slide { _bbd , _baeb , _agg , nil } ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// ExtLst returns the ExtLst property.
func ( _acb PresentationProperties ) ExtLst ( ) * _cg . CT_ExtensionList { return _acb . _egg . ExtLst } ;
2020-08-31 22:58:25 +00:00
2022-02-05 13:05:36 +00:00
// ClearAll completely clears a placeholder. To be useable, at least one
// paragraph must be added after ClearAll via AddParagraph.
func ( _ffg PlaceHolder ) ClearAll ( ) { _ffg . _edbb . SpPr = _ffd . NewCT_ShapeProperties ( ) ; _ffg . _edbb . TxBody = _ffd . NewCT_TextBody ( ) ; _ffg . _edbb . TxBody . LstStyle = _ffd . NewCT_TextListStyle ( ) ; } ;
2019-06-21 21:37:04 +02:00
2022-02-05 13:05:36 +00:00
// ExtractText returns text from a slide as a SlideText object.
func ( _eab * Slide ) ExtractText ( ) * SlideText { _fff := _fg ( _eab . _eagc , _eab . _dfbe . CSld . SpTree . Choice , [ ] rectangle { } , [ ] * TextItem { } ) ; _bcc . Sort ( sort2d ( _fff ) ) ; return & SlideText { Items : _fff } ; } ;
2017-10-03 09:55:27 -05:00
2022-02-05 13:05:36 +00:00
// Image is an image within a slide.
type Image struct { _adf * _cg . CT_Picture } ;
2017-08-28 20:56:18 -05:00
2022-02-05 13:05:36 +00:00
// Open opens and reads a document from a file (.pptx).
func Open ( filename string ) ( * Presentation , error ) { _bbb , _gfa := _bc . Open ( filename ) ; if _gfa != nil { return nil , _fag . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _gfa ) ; } ; defer _bbb . Close ( ) ; _ccgb , _gfa := _bc . Stat ( filename ) ; if _gfa != nil { return nil , _fag . Errorf ( "e\u0072r\u006f\u0072\u0020\u006f\u0070\u0065\u006e\u0069n\u0067\u0020\u0025\u0073: \u0025\u0073" , filename , _gfa ) ; } ; _ = _ccgb ; return Read ( _bbb , _ccgb . Size ( ) ) ; } ; type rectangle struct { _baf int64 ; _daa int64 ; _bf int64 ; _ebd int64 ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Close closes the presentation, removing any temporary files that might have been
// created when opening a document.
func ( _cdfe * Presentation ) Close ( ) error { if _cdfe . TmpPath != "" { return _c . RemoveAll ( _cdfe . TmpPath ) ; } ; return nil ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Properties returns the properties of the TextBox.
func ( _eca TextBox ) Properties ( ) _eg . ShapeProperties { if _eca . _fdc . SpPr == nil { _eca . _fdc . SpPr = _ffd . NewCT_ShapeProperties ( ) ; } ; return _eg . MakeShapeProperties ( _eca . _fdc . SpPr ) ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// AddTable adds an empty table to a slide.
func ( _ffge Slide ) AddTable ( ) * _bb . Table { _dbgb := _cg . NewCT_GroupShapeChoice ( ) ; _ffge . _dfbe . CSld . SpTree . Choice = append ( _ffge . _dfbe . CSld . SpTree . Choice , _dbgb ) ; _ded := _cg . NewCT_GraphicalObjectFrame ( ) ; _dbgb . GraphicFrame = append ( _dbgb . GraphicFrame , _ded ) ; _ded . Xfrm . Off = _ffd . NewCT_Point2D ( ) ; _bdd := int64 ( 1 ) ; _ded . Xfrm . Off . XAttr = _ffd . ST_Coordinate { ST_CoordinateUnqualified : & _bdd } ; _ded . Xfrm . Off . YAttr = _ffd . ST_Coordinate { ST_CoordinateUnqualified : & _bdd } ; _abcg := _ded . Graphic . CT_GraphicalObject . GraphicData ; _abcg . 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" ; _cgcf := _bb . NewTableWithXfrm ( _ded . Xfrm ) ; _abcg . Any = append ( _abcg . Any , _cgcf . X ( ) ) ; return _cgcf ; } ; func ( _gac * Presentation ) nextSlideID ( ) uint32 { _abe := uint32 ( 256 ) ; for _ , _ffc := range _gac . _ede . SldIdLst . SldId { if _ffc . IdAttr >= _abe { _abe = _ffc . IdAttr + 1 ; } ; } ; return _abe ; } ; func ( _ag sort2d ) Len ( ) int { return len ( _ag ) } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// SetTextAnchor controls the text anchoring
func ( _eff TextBox ) SetTextAnchor ( a _ffd . ST_TextAnchoringType ) { _eff . _fdc . TxBody . BodyPr = _ffd . NewCT_TextBodyProperties ( ) ; _eff . _fdc . TxBody . BodyPr . AnchorAttr = a ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// GridSpacing returns the GridSpacing property.
func ( _cbc ViewProperties ) GridSpacing ( ) * _ffd . CT_PositiveSize2D { return _cbc . _decg . GridSpacing } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +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 ( _fefe * Slide ) GetColorBySchemeColor ( schClr _ffd . ST_SchemeColorVal ) * _ffd . CT_Color { _fefe . ensureClrMap ( ) ; _faef := _fefe . _gfagd ; if _faef == nil { return nil ; } ; var _dggec _ffd . ST_ColorSchemeIndex ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _dggec = _faef . Bg1Attr ; case "\u0062\u0067\u0032" : _dggec = _faef . Bg2Attr ; case "\u0074\u0078\u0031" : _dggec = _faef . Tx1Attr ; case "\u0074\u0078\u0032" : _dggec = _faef . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _dggec = _faef . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _dggec = _faef . Accent2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _dggec = _faef . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _dggec = _faef . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _dggec = _faef . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _dggec = _faef . Accent6Attr ; case "\u0068\u006c\u0069n\u006b" : _dggec = _faef . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _dggec = _faef . FolHlinkAttr ; case "\u0064\u006b\u0031" : _dggec = _ffd . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _dggec = _ffd . ST_ColorSchemeIndexDk2 ; case "\u006c\u0074\u0031" : _dggec = _ffd . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _dggec = _ffd . ST_ColorSchemeIndexLt2 ; default : _dggec = _ffd . ST_ColorSchemeIndexUnset ; } ; _dgf := _fefe . _eagc . _ffa [ 0 ] ; _gef := _dgf . ThemeElements ; if _gef == nil { return nil ; } ; var _afdg * _ffd . CT_Color ; _dbe := _gef . ClrScheme ; switch _dggec . String ( ) { case "\u0064\u006b\u0031" : _afdg = _dbe . Dk1 ; case "\u0064\u006b\u0032" : _afdg = _dbe . Dk2 ; case "\u006c\u0074\u0031" : _afdg = _dbe . Lt1 ; case "\u006c\u0074\u0032" : _afdg = _dbe . Lt2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _afdg = _dbe . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _afdg = _dbe . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _afdg = _dbe . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _afdg = _dbe . Accent4 ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _afdg = _dbe . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _afdg = _dbe . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _afdg = _dbe . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _afdg = _dbe . FolHlink ; default : return nil ; } ; return _afdg ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// NormalViewPr returns the NormalViewPr property.
func ( _gag ViewProperties ) NormalViewPr ( ) * _cg . CT_NormalViewProperties { return _gag . _decg . NormalViewPr ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// SlideMaster is the slide master for a presentation.
type SlideMaster struct { _ebddb * Presentation ; _ffcd _bb . Relationships ; _ebc * _cg . SldMaster ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Name returns the name of the slide layout.
func ( _fba SlideLayout ) Name ( ) string { if _fba . _cef . CSld != nil && _fba . _cef . CSld . NameAttr != nil { return * _fba . _cef . CSld . NameAttr ; } ; return "" ; } ; const _gbg float64 = 500000 ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Slide represents a slide of a presentation.
type Slide struct { _fae * _cg . CT_SlideIdListEntry ; _dfbe * _cg . Sld ; _eagc * Presentation ; _gfagd * _ffd . CT_ColorMapping ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// Text returns text from a presentation as one string separated with line breaks.
func ( _gdf * PresentationText ) Text ( ) string { _dec := _dd . NewBuffer ( [ ] byte { } ) ; for _ , _ggf := range _gdf . Slides { _dec . WriteString ( _ggf . Text ( ) ) ; } ; return _dec . String ( ) ; } ;
2020-08-23 14:15:53 +00:00
2022-02-05 13:05:36 +00:00
// WebPr returns the WebPr property.
func ( _cb PresentationProperties ) WebPr ( ) * _cg . CT_WebProperties { return _cb . _egg . WebPr } ;
2021-04-23 20:00:00 +00:00
2022-02-05 13:05:36 +00:00
// X returns the inner wrapped XML type.
func ( _fcc SlideMaster ) X ( ) * _cg . SldMaster { return _fcc . _ebc } ; func ( _gded TextBox ) getOff ( ) * _ffd . CT_Point2D { if _gded . _fdc . SpPr == nil { _gded . _fdc . SpPr = _ffd . NewCT_ShapeProperties ( ) ; } ; if _gded . _fdc . SpPr . Xfrm == nil { _gded . _fdc . SpPr . Xfrm = _ffd . NewCT_Transform2D ( ) ; } ; if _gded . _fdc . SpPr . Xfrm . Off == nil { _gded . _fdc . SpPr . Xfrm . Off = _ffd . NewCT_Point2D ( ) ; } ; return _gded . _fdc . SpPr . Xfrm . Off ; } ;
2020-06-07 20:13:15 +07:00
2022-02-05 13:05:36 +00:00
// HtmlPubPr returns the HtmlPubPr property.
func ( _ffb PresentationProperties ) HtmlPubPr ( ) * _cg . CT_HtmlPublishProperties { return _ffb . _egg . HtmlPubPr ; } ;
2017-10-03 09:55:27 -05:00
2022-02-05 13:05:36 +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 ( _cde PlaceHolder ) SetText ( text string ) { _cde . Clear ( ) ; _fcg := _ffd . NewEG_TextRun ( ) ; _fcg . R = _ffd . NewCT_RegularTextRun ( ) ; _fcg . R . T = text ; if len ( _cde . _edbb . TxBody . P ) == 0 { _cde . _edbb . TxBody . P = append ( _cde . _edbb . TxBody . P , _ffd . NewCT_TextParagraph ( ) ) ; } ; _cde . _edbb . TxBody . P [ 0 ] . EG_TextRun = nil ; _cde . _edbb . TxBody . P [ 0 ] . EG_TextRun = append ( _cde . _edbb . TxBody . P [ 0 ] . EG_TextRun , _fcg ) ; } ;
2017-10-03 09:55:27 -05:00
2022-01-15 21:17:38 +00:00
// SlideLayouts returns a slice of all layouts in SlideMaster.
2022-02-05 13:05:36 +00:00
func ( _aeb SlideMaster ) SlideLayouts ( ) [ ] SlideLayout { _age := map [ string ] int { } ; _egd := [ ] SlideLayout { } ; for _ , _gfgc := range _aeb . _ffcd . Relationships ( ) { _dafc := _a . Replace ( _gfgc . Target ( ) , ".\u002e\u002f\u0073\u006c\u0069\u0064e\u004c\u0061\u0079\u006f\u0075\u0074\u0073\u002f\u0073l\u0069\u0064\u0065L\u0061y\u006f\u0075\u0074" , "" , - 1 ) ; _dafc = _a . Replace ( _dafc , "\u002e\u0078\u006d\u006c" , "" , - 1 ) ; if _gedd , _feca := _fe . ParseInt ( _dafc , 10 , 32 ) ; _feca == nil { _age [ _gfgc . ID ( ) ] = int ( _gedd ) ; } ; } ; for _ , _fefb := range _aeb . _ebc . SldLayoutIdLst . SldLayoutId { if _eec , _ceaed := _age [ _fefb . RIdAttr ] ; _ceaed { _dbeg := _aeb . _ebddb . _acgb [ _eec - 1 ] ; _egd = append ( _egd , SlideLayout { _dbeg } ) ; } ; } ; return _egd ; } ;
2020-10-12 13:59:12 +00:00
2022-02-05 13:05:36 +00:00
// PlaceHolder is a place holder from a slide.
type PlaceHolder struct { _edbb * _cg . CT_Shape ; _gegg * _cg . Sld ; } ;
2021-07-30 17:03:26 +00:00
2022-01-15 21:17:38 +00:00
// NotesTextViewPr returns the NotesTextViewPr property.
2022-02-05 13:05:36 +00:00
func ( _egae ViewProperties ) NotesTextViewPr ( ) * _cg . CT_NotesTextViewProperties { return _egae . _decg . NotesTextViewPr ; } ;
// GetSlideLayout returns a slide layout related to the slide.
func ( _gbdc * Slide ) GetSlideLayout ( ) * _cg . SldLayout { for _dbbg , _bdb := range _gbdc . _eagc . Slides ( ) { if * _gbdc == _bdb { return _gbdc . _eagc . _acgb [ len ( _gbdc . _eagc . Slides ( ) ) - _dbbg - 1 ] ; } ; } ; return nil ; } ;
2020-12-17 22:07:08 +00:00
2022-01-15 21:17:38 +00:00
// X returns the inner wrapped XML type.
2022-02-05 13:05:36 +00:00
func ( _gdd PresentationProperties ) X ( ) * _cg . PresentationPr { return _gdd . _egg } ;
2020-12-17 22:07:08 +00:00
2022-01-15 21:17:38 +00:00
// GetColorBySchemeColor returns *dml.CT_Color mapped to scheme colors like dk1, lt1 etc. depending on what theme is used in the presentation.
2022-02-05 13:05:36 +00:00
func ( _ddc * Presentation ) GetColorBySchemeColor ( schClr _ffd . ST_SchemeColorVal ) * _ffd . CT_Color { if len ( _ddc . _ecc ) == 0 || len ( _ddc . _ffa ) == 0 { return nil ; } ; var _fddc _ffd . ST_ColorSchemeIndex ; _eccf := _ddc . _ecc [ 0 ] ; _dcb := _eccf . ClrMap ; switch schClr . String ( ) { case "\u0062\u0067\u0031" : _fddc = _dcb . Bg1Attr ; case "\u0062\u0067\u0032" : _fddc = _dcb . Bg2Attr ; case "\u0074\u0078\u0031" : _fddc = _dcb . Tx1Attr ; case "\u0074\u0078\u0032" : _fddc = _dcb . Tx2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _fddc = _dcb . Accent1Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _fddc = _dcb . Accent2Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _fddc = _dcb . Accent3Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _fddc = _dcb . Accent4Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _fddc = _dcb . Accent5Attr ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _fddc = _dcb . Accent6Attr ; case "\u0068\u006c\u0069n\u006b" : _fddc = _dcb . HlinkAttr ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _fddc = _dcb . FolHlinkAttr ; case "\u0064\u006b\u0031" : _fddc = _ffd . ST_ColorSchemeIndexDk1 ; case "\u0064\u006b\u0032" : _fddc = _ffd . ST_ColorSchemeIndexDk2 ; case "\u006c\u0074\u0031" : _fddc = _ffd . ST_ColorSchemeIndexLt1 ; case "\u006c\u0074\u0032" : _fddc = _ffd . ST_ColorSchemeIndexLt2 ; default : _fddc = _ffd . ST_ColorSchemeIndexUnset ; } ; _ffdb := _ddc . _ffa [ 0 ] ; _bbda := _ffdb . ThemeElements ; if _bbda == nil { return nil ; } ; var _cdea * _ffd . CT_Color ; _ecfc := _bbda . ClrScheme ; switch _fddc . String ( ) { case "\u0064\u006b\u0031" : _cdea = _ecfc . Dk1 ; case "\u0064\u006b\u0032" : _cdea = _ecfc . Dk2 ; case "\u006c\u0074\u0031" : _cdea = _ecfc . Lt1 ; case "\u006c\u0074\u0032" : _cdea = _ecfc . Lt2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0031" : _cdea = _ecfc . Accent1 ; case "\u0061c\u0063\u0065\u006e\u0074\u0032" : _cdea = _ecfc . Accent2 ; case "\u0061c\u0063\u0065\u006e\u0074\u0033" : _cdea = _ecfc . Accent3 ; case "\u0061c\u0063\u0065\u006e\u0074\u0034" : _cdea = _ecfc . Accent4 ; case "\u0061c\u0063\u0065\u006e\u0074\u0035" : _cdea = _ecfc . Accent5 ; case "\u0061c\u0063\u0065\u006e\u0074\u0036" : _cdea = _ecfc . Accent6 ; case "\u0068\u006c\u0069n\u006b" : _cdea = _ecfc . Hlink ; case "\u0066\u006f\u006c\u0048\u006c\u0069\u006e\u006b" : _cdea = _ecfc . FolHlink ; default : return nil ; } ; return _cdea ; } ; func _cf ( _acg * Presentation , _cga * _cg . CT_Shape , _bac * _cg . CT_GraphicalObjectFrame , _ccf * TableInfo , _ga * _ffd . CT_Transform2D , _bae int , _ed [ ] rectangle , _cfa [ ] * _ffd . CT_TextParagraph ) [ ] * TextItem { _bda := [ ] * TextItem { } ; var _aff , _gae , _cce , _dgc , _beg , _afd int64 ; _caa := _ga == nil ; _bdc := 0 ; for _ , _ebb := range _cfa { for _ , _dcc := range _ebb . EG_TextRun { if _cec := _dcc . R ; _cec != nil { if ! _caa { if _ga . Off != nil { if _fed := _ga . Ext ; _fed != nil { _beg , _afd = _fed . CxAttr , _fed . CyAttr ; } ; if _eabg := _ga . Off . XAttr . ST_CoordinateUnqualified ; _eabg != nil { _aff = * _eabg ; _gae = _aff + _beg ; _caa = true ; } ; if _abf := _ga . Off . YAttr . ST_CoordinateUnqualified ; _abf != nil { _cce = * _abf ; _dgc = _cce + _afd ; _caa = true ; } ; } ; } ; _bdad := append ( [ ] rectangle { } , _ed ... ) ; _bdad = append ( _bdad , rectangle { _baf : _aff , _bf : _gae , _daa : _cce , _ebd : _dgc } ) ; _bda = append ( _bda , & TextItem { Presentation : _acg , Shape : _cga , GraphicFrame : _bac , TableInfo : _ccf , Paragraph : _ebb , Run : _cec , Text : _cec . T , _ae : _bdad , _ea : _bae , _feg : _bdc } ) ; _bdc ++ ; } ; } ; } ; return _bda ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// SlideViewPr returns the SlideViewPr property.
func ( _afeb ViewProperties ) SlideViewPr ( ) * _cg . CT_SlideViewProperties { return _afeb . _decg . SlideViewPr } ;
2021-01-04 16:11:39 +00:00
2022-01-15 21:17:38 +00:00
// X returns the inner wrapped XML type.
2022-02-05 13:05:36 +00:00
func ( _aeee ViewProperties ) X ( ) * _cg . ViewPr { return _aeee . _decg } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// Presentation returns a slide's presentation.
func ( _eaaa Slide ) Presentation ( ) * Presentation { return _eaaa . _eagc } ;
2021-01-04 16:11:39 +00:00
2022-02-05 13:05:36 +00:00
// PlaceHolders returns all of the content place holders within a given slide.
func ( _cgee Slide ) PlaceHolders ( ) [ ] PlaceHolder { _edba := [ ] PlaceHolder { } ; for _ , _gaf := range _cgee . _dfbe . CSld . SpTree . Choice { for _ , _eccg := range _gaf . Sp { if _eccg . NvSpPr != nil && _eccg . NvSpPr . NvPr != nil && _eccg . NvSpPr . NvPr . Ph != nil { _edba = append ( _edba , PlaceHolder { _eccg , _cgee . _dfbe } ) ; } ; } ; } ; return _edba ; } ;
2021-03-16 20:51:18 +00:00
2022-02-05 13:05:36 +00:00
// GetLayoutByName retrieves a slide layout given a layout name.
func ( _gbcf * Presentation ) GetLayoutByName ( name string ) ( SlideLayout , error ) { for _ , _dcfa := range _gbcf . _acgb { if _dcfa . CSld . NameAttr != nil && name == * _dcfa . CSld . NameAttr { return SlideLayout { _dcfa } , nil ; } ; } ; return SlideLayout { } , _eb . 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" ) ; } ;
2021-03-16 20:51:18 +00:00
2022-02-05 13:05:36 +00:00
// PrnPr returns the PrnPr property.
func ( _cda PresentationProperties ) PrnPr ( ) * _cg . CT_PrintProperties { return _cda . _egg . PrnPr } ; var _gfc = false ;
2021-04-23 20:00:00 +00:00
2022-02-05 13:05:36 +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 ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// SorterViewPr returns the SorterViewPr property.
func ( _afff ViewProperties ) SorterViewPr ( ) * _cg . CT_SlideSorterViewProperties { return _afff . _decg . SorterViewPr ; } ;
2021-05-31 16:22:30 +00:00
2022-02-05 13:05:36 +00:00
// NewViewProperties constructs a new ViewProperties.
func NewViewProperties ( ) ViewProperties { return ViewProperties { _decg : _cg . NewViewPr ( ) } } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// OutlineViewPr returns the OutlineViewPr property.
func ( _begf ViewProperties ) OutlineViewPr ( ) * _cg . CT_OutlineViewProperties { return _begf . _decg . OutlineViewPr ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// PresentationProperties contains document specific properties.
type PresentationProperties struct { _egg * _cg . PresentationPr } ;
2021-09-22 16:41:01 +00:00
2022-01-15 21:17:38 +00:00
// AddParagraph adds a new paragraph to a placeholder.
2022-02-05 13:05:36 +00:00
func ( _agf PlaceHolder ) AddParagraph ( ) _eg . Paragraph { _eabgb := _eg . MakeParagraph ( _ffd . NewCT_TextParagraph ( ) ) ; _agf . _edbb . TxBody . P = append ( _agf . _edbb . TxBody . P , _eabgb . X ( ) ) ; return _eabgb ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +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 ( _ef PlaceHolder ) Clear ( ) { _ef . ClearAll ( ) ; _gbe := _ffd . NewCT_TextParagraph ( ) ; _ef . _edbb . TxBody . P = [ ] * _ffd . CT_TextParagraph { _gbe } ; _gbe . EndParaRPr = _ffd . NewCT_TextCharacterProperties ( ) ; _gbe . EndParaRPr . LangAttr = _fa . String ( "\u0065\u006e\u002dU\u0053" ) ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// ShowPr returns the ShowPr property.
func ( _gcb PresentationProperties ) ShowPr ( ) * _cg . CT_ShowProperties { return _gcb . _egg . ShowPr } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// ViewProperties contains presentation specific properties.
type ViewProperties struct { _decg * _cg . ViewPr } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +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 ( _ccff Slide ) GetPlaceholderByIndex ( idx uint32 ) ( PlaceHolder , error ) { for _ , _cfcf := range _ccff . _dfbe . CSld . SpTree . Choice { for _ , _add := range _cfcf . Sp { if _add . NvSpPr != nil && _add . NvSpPr . NvPr != nil && _add . NvSpPr . NvPr . Ph != nil { if ( idx == 0 && _add . NvSpPr . NvPr . Ph . IdxAttr == nil ) || ( _add . NvSpPr . NvPr . Ph . IdxAttr != nil && * _add . NvSpPr . NvPr . Ph . IdxAttr == idx ) { return PlaceHolder { _add , _ccff . _dfbe } , nil ; } ; } ; } ; } ; return PlaceHolder { } , _eb . 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" ) ; } ; func ( _bege * Presentation ) save ( _cgef _fb . Writer , _dca bool ) error { const _aee = "\u0050\u0072\u0065\u0073en\u0074\u0061\u0074\u0069\u006f\u006e\u003a\u0070\u002e\u0053\u0061\u0076\u0065" ; if _db := _bege . _ede . Validate ( ) ; _db != nil { _be . 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" , _db ) ; } ; if ! _ba . GetLicenseKey ( ) . IsLicensed ( ) && ! _gfc { _fag . 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" ) ; _fag . 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 _eb . 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" ) ; } ; if len ( _bege . _edbc ) == 0 { _dda , _bcf := _ba . GenRefId ( "\u0070\u0077" ) ; if _bcf != nil { _be . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _bcf ) ; return _bcf ; } ; _bege . _edbc = _dda ; } ; if _cdf := _ba . Track ( _bege . _edbc , _aee ) ; _cdf != nil { _be . Log . Error ( "\u0045R\u0052\u004f\u0052\u003a\u0020\u0025v" , _cdf ) ; return _cdf ; } ; if _dca { _bege . 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" ) ; _bege . 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 { _bege . 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" ) ; _bege . 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 \ u007
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// AddParagraph adds a paragraph to the text box
func ( _ddfg TextBox ) AddParagraph ( ) _eg . Paragraph { _gfdc := _ffd . NewCT_TextParagraph ( ) ; _ddfg . _fdc . TxBody . P = append ( _ddfg . _fdc . TxBody . P , _gfdc ) ; return _eg . MakeParagraph ( _gfdc ) ; } ;
// Paragraphs returns the paragraphs defined in the placeholder.
func ( _feb PlaceHolder ) Paragraphs ( ) [ ] _eg . Paragraph { _gcgfe := [ ] _eg . Paragraph { } ; for _ , _fega := range _feb . _edbb . TxBody . P { _gcgfe = append ( _gcgfe , _eg . MakeParagraph ( _fega ) ) ; } ; return _gcgfe ; } ;
// ClrMru returns the ClrMru property.
func ( _dfd PresentationProperties ) ClrMru ( ) * _ffd . CT_ColorMRU { return _dfd . _egg . ClrMru } ;
2021-09-22 16:41:01 +00:00
2022-01-15 21:17:38 +00:00
// GetImageByRelID returns an ImageRef with the associated relation ID in the
// slide.
2022-02-05 13:05:36 +00:00
func ( _bccae * Slide ) GetImageByRelID ( relID string ) ( _bb . ImageRef , bool ) { _ebaf := _bccae . getSlideRels ( ) ; if ( _ebaf == _bb . Relationships { } ) { return _bb . ImageRef { } , false ; } ; var _eaac string ; for _ , _fbff := range _ebaf . X ( ) . Relationship { if _fbff . IdAttr == relID { _eaac = _fbff . TargetAttr ; break ; } ; } ; for _ , _fbea := range _bccae . _eagc . Images { if _fbea . Target ( ) == _eaac { return _fbea , true ; } ; } ; return _bb . ImageRef { } , false ; } ;
2021-09-22 16:41:01 +00:00
2022-02-05 13:05:36 +00:00
// SetOffsetX sets horizontal offset of text box in distance units (see measurement package).
func ( _cebf TextBox ) SetOffsetX ( offX float64 ) { _cfbd := _cebf . getOff ( ) ; _dddb := _da . ToEMU ( offX ) ; _cfbd . XAttr = _ffd . ST_Coordinate { ST_CoordinateUnqualified : & _dddb } ; } ;
2021-11-10 11:45:21 +00:00
2022-02-05 13:05:36 +00:00
// Type returns the type of the slide layout.
func ( _baac SlideLayout ) Type ( ) _cg . ST_SlideLayoutType { return _baac . _cef . TypeAttr } ;
// TextBox is a text box within a slide.
type TextBox struct { _fdc * _cg . CT_Shape } ;
// SetOffsetY sets vertical offset of text box in distance units (see measurement package).
func ( _egcea TextBox ) SetOffsetY ( offY float64 ) { _ead := _egcea . getOff ( ) ; _fdf := _da . ToEMU ( offY ) ; _ead . YAttr = _ffd . ST_Coordinate { ST_CoordinateUnqualified : & _fdf } ; } ;
// AddImageToRels adds an image relationship to a slide without putting image on the slide.
func ( _ebed Slide ) AddImageToRels ( img _bb . ImageRef ) string { _agb := 0 ; for _ggb , _dgbb := range _ebed . _eagc . Images { if _dgbb == img { _agb = _ggb + 1 ; break ; } ; } ; var _cbed string ; for _fge , _gedc := range _ebed . _eagc . Slides ( ) { if _gedc . _dfbe == _ebed . _dfbe { _gfg := _fag . Sprintf ( "\u002e\u002e\u002f\u006ded\u0069\u0061\u002f\u0069\u006d\u0061\u0067\u0065\u0025\u0064\u002e\u0025\u0073" , _agb , img . Format ( ) ) ; _gbb := _ebed . _eagc . _fegc [ _fge ] . AddRelationship ( _gfg , _fa . ImageType ) ; _cbed = _gbb . ID ( ) ; } ; } ; return _cbed ; } ;
// GetTableStyleById returns *dml.CT_TableStyle by its style id.
func ( _bcff * Presentation ) GetTableStyleById ( id string ) * _ffd . CT_TableStyle { _fcgc := _bcff . _ceb . TblStyle ( ) ; for _ , _bdf := range _fcgc { if _bdf . StyleIdAttr == id { return _bdf ; } ; } ; return nil ; } ;