mirror of
https://github.com/unidoc/unioffice.git
synced 2025-04-25 13:48:53 +08:00
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
// Copyright 2017 Baliance. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by the terms of the Affero GNU General
|
|
// Public License version 3.0 as published by the Free Software Foundation and
|
|
// appearing in the file LICENSE included in the packaging of this file. A
|
|
// commercial license can be purchased by contacting sales@baliance.com.
|
|
|
|
package presentation
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
|
|
"baliance.com/gooxml/common"
|
|
"baliance.com/gooxml/schema/soo/pml"
|
|
)
|
|
|
|
// SlideMaster is the slide master for a presentation.
|
|
type SlideMaster struct {
|
|
p *Presentation
|
|
rels common.Relationships
|
|
x *pml.SldMaster
|
|
}
|
|
|
|
// X returns the inner wrapped XML type.
|
|
func (s SlideMaster) X() *pml.SldMaster {
|
|
return s.x
|
|
}
|
|
|
|
func (s SlideMaster) SlideLayouts() []SlideLayout {
|
|
nameToLayoutIdx := map[string]int{}
|
|
layouts := []SlideLayout{}
|
|
for _, r := range s.rels.Relationships() {
|
|
idxTxt := strings.Replace(r.Target(), "../slideLayouts/slideLayout", "", -1)
|
|
idxTxt = strings.Replace(idxTxt, ".xml", "", -1)
|
|
if idx, err := strconv.ParseInt(idxTxt, 10, 32); err == nil {
|
|
nameToLayoutIdx[r.ID()] = int(idx)
|
|
}
|
|
}
|
|
|
|
for _, lid := range s.x.SldLayoutIdLst.SldLayoutId {
|
|
if idx, ok := nameToLayoutIdx[lid.RIdAttr]; ok {
|
|
lout := s.p.layouts[idx-1]
|
|
layouts = append(layouts, SlideLayout{lout})
|
|
}
|
|
}
|
|
return layouts
|
|
}
|