Files
Notare/lib/notare/xml/relationships.rb
mathias234 597bc91c40
All checks were successful
CI Pipeline / build (pull_request) Successful in 12s
Implement many more nodes
Adds these new styling and formatting nodes
* strike
* highlight
* linebreaks
* pagebreaks
* Hyperlinks
2025-12-02 14:43:53 +01:00

82 lines
2.6 KiB
Ruby

# frozen_string_literal: true
module Notare
module Xml
class Relationships
NAMESPACE = "http://schemas.openxmlformats.org/package/2006/relationships"
def to_xml
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.Relationships(xmlns: NAMESPACE) do
xml.Relationship(
Id: "rId1",
Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
Target: "word/document.xml"
)
end
end
builder.to_xml
end
end
class DocumentRelationships
NAMESPACE = "http://schemas.openxmlformats.org/package/2006/relationships"
STYLES_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"
NUMBERING_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"
IMAGE_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
HYPERLINK_TYPE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
def initialize(has_numbering: false, images: [], hyperlinks: [], has_styles: false)
@has_numbering = has_numbering
@images = images
@hyperlinks = hyperlinks
@has_styles = has_styles
end
def to_xml
builder = Nokogiri::XML::Builder.new(encoding: "UTF-8") do |xml|
xml.Relationships(xmlns: NAMESPACE) do
# rId1 = styles.xml (always first when present)
if @has_styles
xml.Relationship(
Id: "rId1",
Type: STYLES_TYPE,
Target: "styles.xml"
)
end
# rId2 = numbering.xml (if lists present)
if @has_numbering
xml.Relationship(
Id: "rId2",
Type: NUMBERING_TYPE,
Target: "numbering.xml"
)
end
# Images start at rId2 or rId3 depending on numbering
@images.each do |image|
xml.Relationship(
Id: image.rid,
Type: IMAGE_TYPE,
Target: "media/#{image.filename}"
)
end
# Hyperlinks come after images
@hyperlinks.each do |hyperlink|
xml.Relationship(
Id: hyperlink.rid,
Type: HYPERLINK_TYPE,
Target: hyperlink.url,
TargetMode: "External"
)
end
end
end
builder.to_xml
end
end
end
end