parse static method

PackageDocument? parse(
  1. XmlElement document,
  2. String filePath
)

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));
}