aboutsummaryrefslogtreecommitdiff
path: root/src/xml.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/xml.rs')
-rw-r--r--src/xml.rs21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/xml.rs b/src/xml.rs
index 239fac3..f37b169 100644
--- a/src/xml.rs
+++ b/src/xml.rs
@@ -124,6 +124,7 @@ pub fn build_epub_chapter<R: BufRead, W: Write>(
pub fn write_modified_opf<R: BufRead, W: Write>(
opf_input: R,
mut out: &mut W,
+ bookid: &str,
description: &str,
) -> Result<()> {
// Setup the XML Reader and Writer.
@@ -146,11 +147,21 @@ pub fn write_modified_opf<R: BufRead, W: Write>(
writer.write_event(Event::Start(tag_data))?;
}
Ok(Event::End(tag_data)) => {
- // Write description if end of metadata is reached without finding one.
- if tag_data.name().as_ref() == b"metadata" && !desc_found {
- writer.write_event(Event::Start(BytesStart::new("dc:description")))?;
- writer.write_event(Event::Text(BytesText::new(description)))?;
- writer.write_event(Event::End(BytesEnd::new("dc:description")))?;
+ // Extra attributes are added just before the closing metadata tag.
+ if tag_data.name().as_ref() == b"metadata" {
+ // A new dc:identifier records the O'Reilly resource ID used to obtain the book.
+ let mut start_elem = BytesStart::new("dc:identifier");
+ start_elem.push_attribute(("id", "oreilly-id"));
+ writer.write_event(Event::Start(start_elem))?;
+ let oreilly_id = &format!("urn:orm:book:{bookid}");
+ writer.write_event(Event::Text(BytesText::new(oreilly_id)))?;
+ writer.write_event(Event::End(BytesEnd::new("dc:identifier")))?;
+ // Write description if end of metadata is reached without finding one.
+ if !desc_found {
+ writer.write_event(Event::Start(BytesStart::new("dc:description")))?;
+ writer.write_event(Event::Text(BytesText::new(description)))?;
+ writer.write_event(Event::End(BytesEnd::new("dc:description")))?;
+ }
}
// Pass through unmodified.
writer.write_event(Event::End(tag_data))?;