pptx_rs/oxml/
slidemaster.rs1use crate::oxml::shape::Sp;
19use crate::oxml::slide::SlideBackground;
20
21const TX_STYLES: &str = r##"<p:txStyles><p:titleStyle><a:lvl1pPr algn="ctr" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="0"/></a:spcBef><a:buNone/><a:defRPr sz="4400" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mj-lt"/><a:ea typeface="+mj-ea"/><a:cs typeface="+mj-cs"/></a:defRPr></a:lvl1pPr></p:titleStyle><p:bodyStyle><a:lvl1pPr marL="342900" indent="-342900" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:spcBef><a:spcPct val="20000"/></a:spcBef><a:buFont typeface="Arial"/><a:buChar char="•"/><a:defRPr sz="3200" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mj-ea"/><a:cs typeface="+mn-cs"/></a:defRPr></a:lvl1pPr></p:bodyStyle><p:otherStyle><a:defPPr><a:defRPr lang="en-US"/></a:defPPr><a:lvl1pPr marL="0" algn="l" defTabSz="457200" rtl="0" eaLnBrk="1" latinLnBrk="0" hangingPunct="1"><a:defRPr sz="1800" kern="1200"><a:solidFill><a:schemeClr val="tx1"/></a:solidFill><a:latin typeface="+mn-lt"/><a:ea typeface="+mj-ea"/><a:cs typeface="+mj-cs"/></a:defRPr></a:lvl1pPr></p:otherStyle></p:txStyles>"##;
24
25#[derive(Clone, Debug, Default)]
26pub struct SldMaster {
27 pub shapes: Vec<Sp>,
29 pub layout_rids: Vec<String>,
31 pub background: Option<SlideBackground>,
35}
36
37impl SldMaster {
38 pub fn to_xml(&self) -> String {
40 let mut xml = String::with_capacity(1024);
42 xml.push_str("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
43 xml.push_str(
44 "<p:sldMaster xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"",
45 );
46 xml.push_str(" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"");
47 xml.push_str(
48 " xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">",
49 );
50 xml.push_str("<p:cSld>");
52 if let Some(bg) = &self.background {
54 let mut w = crate::oxml::writer::XmlWriter::default();
55 bg.write_xml(&mut w);
56 xml.push_str(&w.into_string());
57 }
58 xml.push_str("<p:spTree>");
59 xml.push_str(
61 "<p:nvGrpSpPr><p:cNvPr id=\"1\" name=\"\"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr>",
62 );
63 xml.push_str("<p:grpSpPr><a:xfrm><a:off x=\"0\" y=\"0\"/><a:ext cx=\"0\" cy=\"0\"/><a:chOff x=\"0\" y=\"0\"/><a:chExt cx=\"0\" cy=\"0\"/></a:xfrm></p:grpSpPr>");
64 let mut w = crate::oxml::writer::XmlWriter::default();
66 for s in &self.shapes {
67 s.write_xml(&mut w);
68 }
69 xml.push_str(&w.into_string());
70 xml.push_str("</p:spTree></p:cSld>");
71 xml.push_str("<p:clrMap bg1=\"lt1\" tx1=\"dk1\" bg2=\"lt2\" tx2=\"dk2\" accent1=\"accent1\" accent2=\"accent2\" accent3=\"accent3\" accent4=\"accent4\" accent5=\"accent5\" accent6=\"accent6\" hlink=\"hlink\" folHlink=\"folHlink\"/>");
73 xml.push_str("<p:sldLayoutIdLst>");
77 if self.layout_rids.is_empty() {
78 xml.push_str("<p:sldLayoutId id=\"2147483649\" r:id=\"rId1\"/>");
79 } else {
80 for (i, rid) in self.layout_rids.iter().enumerate() {
81 let layout_id = 2147483649u32 + i as u32;
83 xml.push_str(&format!(
84 "<p:sldLayoutId id=\"{}\" r:id=\"{}\"/>",
85 layout_id, rid
86 ));
87 }
88 }
89 xml.push_str("</p:sldLayoutIdLst>");
90 xml.push_str(TX_STYLES);
92 xml.push_str("</p:sldMaster>");
93 xml
94 }
95}