mirror of
https://github.com/storytold/designcraft.git
synced 2026-11-11 16:30:16 -06:00
Cross-references: the edited text's IDML export moves into its own method
Keeps story_para under clippy's cognitive-complexity limit, which upstream now enforces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CgGsJkVe5GYG9qK6VFdECa
This commit is contained in:
@@ -327,6 +327,34 @@ impl<'a> Ex<'a> {
|
||||
segs
|
||||
}
|
||||
|
||||
/// A cross-reference source's text: `generated`, or the text typed over it, its page numbers
|
||||
/// as InDesign's live cross-reference page number.
|
||||
fn xref_content(&mut self, c: &mut El, x: &designcraft_doc::CrossRef, generated: String) {
|
||||
let Some(t) = &x.text else {
|
||||
let mut content = El::new("Content");
|
||||
content.children.push(Node::Text(generated));
|
||||
c.push(content);
|
||||
return;
|
||||
};
|
||||
let page = x.page.clone().unwrap_or_else(|| "?".into());
|
||||
for (n, part) in t.split(designcraft_doc::xref::PAGE_NUM_BLOCK).enumerate() {
|
||||
if n > 0 {
|
||||
c.push(
|
||||
El::new("TextVariableInstance")
|
||||
.attr("Self", self.fresh())
|
||||
.attr("Name", "<?AID 001b?>TV XRefPageNumber")
|
||||
.attr("ResultText", &page)
|
||||
.attr("AssociatedTextVariable", "dTextVariablen<?AID 001b?>TV XRefPageNumber"),
|
||||
);
|
||||
}
|
||||
if !part.is_empty() {
|
||||
let mut content = El::new("Content");
|
||||
content.children.push(Node::Text(part.to_string()));
|
||||
c.push(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn story_para(&mut self, s: &Story, pi: usize, r: std::ops::Range<usize>, last: bool) -> El {
|
||||
let pf = s.paras.get(pi).cloned().unwrap_or_default();
|
||||
let mut psr = self.psr_el(&pf);
|
||||
@@ -424,34 +452,7 @@ impl<'a> Ex<'a> {
|
||||
designcraft_doc::xref::expand(self.d.xref_format(&x.format).map_or("<fullPara />", |ff| ff.definition.as_str()), &v)
|
||||
});
|
||||
let mut c = self.csr_el(&f);
|
||||
match &x.text {
|
||||
// Edited text as typed, its page numbers as InDesign's live
|
||||
// cross-reference page number.
|
||||
Some(t) => {
|
||||
let page = x.page.clone().unwrap_or_else(|| "?".into());
|
||||
for (n, part) in t.split(designcraft_doc::xref::PAGE_NUM_BLOCK).enumerate() {
|
||||
if n > 0 {
|
||||
c.push(
|
||||
El::new("TextVariableInstance")
|
||||
.attr("Self", self.fresh())
|
||||
.attr("Name", "<?AID 001b?>TV XRefPageNumber")
|
||||
.attr("ResultText", &page)
|
||||
.attr("AssociatedTextVariable", "dTextVariablen<?AID 001b?>TV XRefPageNumber"),
|
||||
);
|
||||
}
|
||||
if !part.is_empty() {
|
||||
let mut content = El::new("Content");
|
||||
content.children.push(Node::Text(part.to_string()));
|
||||
c.push(content);
|
||||
}
|
||||
}
|
||||
}
|
||||
None => {
|
||||
let mut content = El::new("Content");
|
||||
content.children.push(Node::Text(text));
|
||||
c.push(content);
|
||||
}
|
||||
}
|
||||
self.xref_content(&mut c, x, text);
|
||||
let mut src = El::new("CrossReferenceSource")
|
||||
.attr("Self", &me)
|
||||
.attr("AppliedFormat", fmt)
|
||||
|
||||
Reference in New Issue
Block a user