docx_rust/font_table/
font.rs1use hard_xml::{XmlRead, XmlWrite};
2use std::borrow::Cow;
3
4use crate::{
5 __setter, __xml_test_suites,
6 font_table::{Charset, Family, Pitch},
7};
8
9#[derive(Debug, Default, XmlRead, XmlWrite, Clone)]
20#[cfg_attr(test, derive(PartialEq))]
21#[xml(tag = "w:font")]
22pub struct Font<'a> {
23 #[xml(attr = "w:name")]
24 pub name: Cow<'a, str>,
25 #[xml(child = "w:charset")]
26 pub charset: Option<Charset<'a>>,
27 #[xml(child = "w:family")]
28 pub family: Option<Family<'a>>,
29 #[xml(child = "w:pitch")]
30 pub pitch: Option<Pitch<'a>>,
31}
32
33impl<'a> Font<'a> {
34 __setter!(charset: Option<Charset<'a>>);
35 __setter!(family: Option<Family<'a>>);
36 __setter!(pitch: Option<Pitch<'a>>);
37
38 pub fn new<T: Into<Cow<'a, str>>>(name: T) -> Self {
39 Font {
40 name: name.into(),
41 ..Default::default()
42 }
43 }
44}
45
46impl<'a, T: Into<Cow<'a, str>>> From<T> for Font<'a> {
47 fn from(val: T) -> Self {
48 Font::new(val)
49 }
50}
51
52__xml_test_suites!(
53 Font,
54 Font::new("Arial"),
55 r#"<w:font w:name="Arial"/>"#,
56 Font::new("Arial").charset("00"),
57 r#"<w:font w:name="Arial"><w:charset w:val="00"/></w:font>"#,
58 Font::new("Arial").family("swiss"),
59 r#"<w:font w:name="Arial"><w:family w:val="swiss"/></w:font>"#,
60 Font::new("Arial").pitch("variable"),
61 r#"<w:font w:name="Arial"><w:pitch w:val="variable"/></w:font>"#,
62);