ppt_rs/generator/
theme_xml.rs1use crate::core::append_usize;
4use crate::generator::presentation_theme::PresentationTheme;
5use crate::generator::slide_content::print_settings::PrintSettings;
6
7use super::layout_parts::{self, slide_master_footer_shapes, STANDARD_LAYOUT_COUNT};
8use crate::generator::package_xml::SLIDE_LAYOUT_ID;
9
10pub use super::layout_parts::{append_layout_content_type_overrides, layout_rel_target, STANDARD_LAYOUT_COUNT as LAYOUT_COUNT};
11
12pub fn create_theme_xml(theme: Option<&PresentationTheme>) -> String {
14 match theme {
15 Some(t) => t.to_theme_xml(),
16 None => crate::generator::presentation_theme::office_theme_xml().to_string(),
17 }
18}
19
20pub fn create_layout_rels_xml() -> &'static str {
22 layout_parts::create_layout_rels_xml()
23}
24
25pub fn create_slide_master_xml(print: Option<&PrintSettings>) -> String {
27 const TX_STYLES: &str = include_str!("slide_master_txstyles.xml");
28 let footer_shapes = slide_master_footer_shapes(print);
29
30 let mut layout_ids = String::new();
31 for i in 0..STANDARD_LAYOUT_COUNT {
32 let id = SLIDE_LAYOUT_ID as usize + i;
33 let rid = i + 1;
34 layout_ids.push_str("\n<p:sldLayoutId id=\"");
35 append_usize(&mut layout_ids, id);
36 layout_ids.push_str("\" r:id=\"rId");
37 append_usize(&mut layout_ids, rid);
38 layout_ids.push_str("\"/>");
39 }
40
41 format!(
42 r#"<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
43<p:sldMaster xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main">
44<p:cSld>
45<p:bg>
46<p:bgRef idx="1001">
47<a:schemeClr val="bg1"/>
48</p:bgRef>
49</p:bg>
50<p:spTree>
51<p:nvGrpSpPr>
52<p:cNvPr id="1" name=""/>
53<p:cNvGrpSpPr/>
54<p:nvPr/>
55</p:nvGrpSpPr>
56<p:grpSpPr>
57<a:xfrm>
58<a:off x="0" y="0"/>
59<a:ext cx="0" cy="0"/>
60<a:chOff x="0" y="0"/>
61<a:chExt cx="0" cy="0"/>
62</a:xfrm>
63</p:grpSpPr>
64{footer_shapes}
65</p:spTree>
66</p:cSld>
67<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"/>
68<p:sldLayoutIdLst>{layout_ids}
69</p:sldLayoutIdLst>
70{TX_STYLES}
71</p:sldMaster>"#
72 )
73}
74
75pub fn create_master_rels_xml() -> String {
77 layout_parts::create_master_rels_xml(STANDARD_LAYOUT_COUNT)
78}