parse static method
Implementation
static PackageDocument? parse(XmlElement document, String filePath) {
Map<String, String> packagePrefixes =
document.getAttribute("prefix")?.let((it) => parsePrefixes(it)) ?? {};
Map<String, String> prefixMap = Map.of(packageReservedPrefixes)
..addAll(packagePrefixes); // prefix element overrides reserved prefixes
double epubVersion =
document.getAttribute("version")?.toDoubleOrNull() ?? 1.2;
EpubMetadata? metadata =
MetadataParser(epubVersion, prefixMap).parse(document, filePath);
if (metadata == null) {
return null;
}
XmlElement? manifestElement =
document.getElement("manifest", namespace: Namespaces.opf);
if (manifestElement == null) {
return null;
}
XmlElement? spineElement =
document.getElement("spine", namespace: Namespaces.opf);
if (spineElement == null) {
return null;
}
return PackageDocument(
path: filePath,
epubVersion: epubVersion,
uniqueIdentifierId: document.getAttribute("unique-identifier"),
metadata: metadata,
manifest: manifestElement
.findElements("item", namespace: Namespaces.opf)
.mapNotNull((it) => Item.parse(it, filePath, prefixMap))
.toList(),
spine: Spine.parse(spineElement, prefixMap, epubVersion));
}