diff options
Diffstat (limited to 'src/xml.rs')
| -rw-r--r-- | src/xml.rs | 21 |
1 files changed, 16 insertions, 5 deletions
@@ -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))?; |
