Use shared IDML part and designmap serializers

This commit is contained in:
Dylan M. Taylor committed 2026-11-13 06:30:58 -05:00
1 parent dbc21ce1e9
commit a1ce27bd50
6 files changed
+37 -56

No files matched your search

Generated
+26 -26
View File
@@ -1242,10 +1242,10 @@ dependencies = [
[[package]]
name = "craft-idml"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=cbd672594#cbd672594eedcbb95624735e5c9f473720faf591"
source = "git+https://github.com/storytold/craft-libs?rev=632ad8800#632ad8800da272b74a2fe46831926c92be63d7e8"
dependencies = [
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-zip 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"craft-zip 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"thiserror 2.0.21",
]
@@ -1653,6 +1653,15 @@ dependencies = [
"thiserror 2.0.21",
]
[[package]]
name = "craft-xml"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=632ad8800#632ad8800da272b74a2fe46831926c92be63d7e8"
dependencies = [
"quick-xml 0.41.0",
"thiserror 2.0.21",
]
[[package]]
name = "craft-xml"
version = "0.1.0"
@@ -1671,15 +1680,6 @@ dependencies = [
"thiserror 2.0.21",
]
[[package]]
name = "craft-xml"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=cbd672594#cbd672594eedcbb95624735e5c9f473720faf591"
dependencies = [
"quick-xml 0.41.0",
"thiserror 2.0.21",
]
[[package]]
name = "craft-xml"
version = "0.1.0"
@@ -1727,6 +1727,16 @@ dependencies = [
"zip 9.1.1",
]
[[package]]
name = "craft-zip"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=632ad8800#632ad8800da272b74a2fe46831926c92be63d7e8"
dependencies = [
"flate2",
"thiserror 2.0.21",
"zip 9.1.1",
]
[[package]]
name = "craft-zip"
version = "0.1.0"
@@ -1747,16 +1757,6 @@ dependencies = [
"zip 9.1.1",
]
[[package]]
name = "craft-zip"
version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=cbd672594#cbd672594eedcbb95624735e5c9f473720faf591"
dependencies = [
"flate2",
"thiserror 2.0.21",
"zip 9.1.1",
]
[[package]]
name = "craft-zip"
version = "0.1.0"
@@ -2021,7 +2021,7 @@ dependencies = [
"craft-prepress",
"craft-print",
"craft-svg 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cc23ffd4d26f3074808e2187d332564817624f8f)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=f23b0f33f0d00b157476533a43cbbcfd901aa1f1)",
"designcraft-color",
"designcraft-compose",
@@ -2103,9 +2103,9 @@ name = "designcraft-idml"
version = "0.20.1"
dependencies = [
"craft-file-formats",
"craft-idml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-idml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"craft-svg 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cc23ffd4d26f3074808e2187d332564817624f8f)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-xml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"designcraft-color",
"designcraft-compose",
"designcraft-doc",
@@ -2222,7 +2222,7 @@ version = "0.20.1"
dependencies = [
"craft-docx",
"craft-file-formats",
"craft-idml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=cbd672594)",
"craft-idml 0.1.0 (git+https://github.com/storytold/craft-libs?rev=632ad8800)",
"craft-rtf",
"craft-wordmodel",
"craft-xlsx",
+2 -2
View File
@@ -16,10 +16,10 @@ craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "4052591363
craft-designcraft-format = { git = "https://github.com/storytold/craft-libs", rev = "19692b6190465671e41967c75d0cd4c439d0c84c", version = "=0.1.0" }
craft-eps = { git = "https://github.com/storytold/craft-libs", rev = "ba24fe2435adb3c81ad6057faf36365fbba736cf", version = "=0.1.0" }
craft-epub = { git = "https://github.com/storytold/craft-libs", rev = "ba24fe2435adb3c81ad6057faf36365fbba736cf", version = "=0.1.0" }
craft-idml = { git = "https://github.com/storytold/craft-libs", rev = "cbd672594", version = "=0.1.0" }
craft-idml = { git = "https://github.com/storytold/craft-libs", rev = "632ad8800", version = "=0.1.0" }
craft-indd = { git = "https://github.com/storytold/craft-libs", rev = "47bf5650b0d503b97bfb5e841746c4957897d11f", version = "=0.1.0" }
craft-svg = { git = "https://github.com/storytold/craft-libs", rev = "cc23ffd4d26f3074808e2187d332564817624f8f", version = "=0.1.0", features = ["tree-render", "tree-text"] }
craft-xml = { git = "https://github.com/storytold/craft-libs", rev = "cbd672594", version = "=0.1.0" }
craft-xml = { git = "https://github.com/storytold/craft-libs", rev = "632ad8800", version = "=0.1.0" }
craft-xml-dtd = { package = "craft-xml", git = "https://github.com/storytold/craft-libs", rev = "f23b0f33f0d00b157476533a43cbbcfd901aa1f1", version = "=0.1.0" }
craft-rtf = { git = "https://github.com/storytold/craft-libs", rev = "ba24fe2435adb3c81ad6057faf36365fbba736cf", version = "=0.1.0" }
craft-xlsx = { git = "https://github.com/storytold/craft-libs", rev = "ba24fe2435adb3c81ad6057faf36365fbba736cf", version = "=0.1.0" }
+1 -1
View File
@@ -10,7 +10,7 @@ use designcraft_doc::{
use designcraft_geom::{Affine, PathData};
use crate::names::{self, CHAR_BUILTINS, OBJECT_BUILTINS, PARA_BUILTINS, escape_id, num, pt};
use crate::xml::{El, Node, document, document_with_pi};
use crate::xml::{El, Node, document};
use crate::{DOM_VERSION, base64_encode};
mod common;
+5 -10
View File
@@ -1,25 +1,20 @@
use super::{Affine, Color, DOM_VERSION, El, Node, PKG_NS, escape_id, num};
use super::{Affine, Color, El, escape_id, num};
pub(crate) fn uid(n: u64) -> String {
format!("u{n:x}")
}
pub(super) fn p(name: &str, ty: &str, val: impl Into<String>) -> El {
El::new(name).attr("type", ty).text(val)
crate::xml::from_craft(craft_idml::prop(name, ty, val))
}
/// Insert a `<Properties>` element as the first child when there are any.
pub(super) fn with_props(mut el: El, props: Vec<El>) -> El {
if !props.is_empty() {
let mut pe = El::new("Properties");
pe.children = props.into_iter().map(Node::El).collect();
el.children.insert(0, Node::El(pe));
}
el
pub(super) fn with_props(el: El, props: Vec<El>) -> El {
crate::xml::from_craft(craft_idml::with_props(crate::xml::to_craft(&el), props.into_iter().map(|p| crate::xml::to_craft(&p)).collect()))
}
pub(super) fn pkg_root(kind: &str) -> El {
El::new(&format!("idPkg:{kind}")).attr("xmlns:idPkg", PKG_NS).attr("DOMVersion", DOM_VERSION)
crate::xml::from_craft(craft_idml::part_root(kind))
}
pub(super) fn bool_s(b: bool) -> &'static str {
+2 -5
View File
@@ -1,5 +1,5 @@
use super::common::{anchor_self, bool_s, p, uid, with_props, xref_format_self};
use super::{CHAR_BUILTINS, DOM_VERSION, Document, El, Ex, HashSet, PARA_BUILTINS, PKG_NS, document_with_pi, escape_id, names, num};
use super::{CHAR_BUILTINS, DOM_VERSION, Document, El, Ex, HashSet, PARA_BUILTINS, PKG_NS, escape_id, names, num};
impl<'a> Ex<'a> {
// ---------- designmap ----------
@@ -257,10 +257,7 @@ impl<'a> Ex<'a> {
}
self.next += 1;
root.push(cg);
document_with_pi(
&root,
&format!("<?aid style=\"50\" type=\"document\" readerVersion=\"6.0\" featureSet=\"257\" product=\"{DOM_VERSION}(1)\" ?>"),
)
craft_idml::designmap_xml(&crate::xml::to_craft(&root))
}
}
+1 -12
View File
@@ -181,18 +181,7 @@ pub fn escape_into(out: &mut String, s: &str, attr: bool) {
/// Serialize a part: XML declaration + root element.
pub fn document(root: &El) -> Vec<u8> {
let mut s = String::from("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
s.push_str(&to_craft(root).to_xml_pretty("\t"));
s.into_bytes()
}
/// Serialize with extra processing instructions after the declaration (designmap's `<?aid …?>`).
pub fn document_with_pi(root: &El, pi: &str) -> Vec<u8> {
let mut s = String::from("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n");
s.push_str(pi);
s.push('\n');
s.push_str(&to_craft(root).to_xml_pretty("\t"));
s.into_bytes()
craft_idml::part_xml(&to_craft(root))
}
pub(crate) fn to_craft(el: &El) -> craft_xml::El {