All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.adobe.epubcheck.ctc.EpubRenditionCheck Maven / Gradle / Ivy

Go to download

EPUBCheck is a tool to validate the conformance of EPUB publications against the EPUB specifications. EPUBCheck can be run as a standalone command-line tool or used as a Java library.

There is a newer version: 5.1.0
Show newest version
package com.adobe.epubcheck.ctc;

import com.adobe.epubcheck.api.Report;
import com.adobe.epubcheck.ctc.epubpackage.EpubPackage;
import com.adobe.epubcheck.ctc.epubpackage.ManifestItem;
import com.adobe.epubcheck.opf.DocumentValidator;
import com.adobe.epubcheck.util.FeatureEnum;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 *  ===  WARNING  ==========================================
* This class is scheduled to be refactored and integrated
* in another package.
* Please keep changes minimal (bug fixes only) until then.
* ========================================================
*/ public class EpubRenditionCheck implements DocumentValidator { private final Document doc; private final EpubPackage epack; private final Report report; public EpubRenditionCheck(EpubPackage epack, Report report) { this.epack = epack; this.doc = epack.getPackDoc(); this.report = report; } @Override public boolean validate() { return isRenditionDefined(doc); } private boolean isRenditionDefined(Document doc) { boolean result = false; NodeList nList = doc.getElementsByTagName("metadata"); if (nList.getLength() > 0) { Node metadata = nList.item(0); NodeList metaNodes = metadata.getChildNodes(); for (int i = 0; i < metaNodes.getLength(); i++) { if (metaNodes.item(i).getNodeName().compareToIgnoreCase("meta") == 0) { Node n = metaNodes.item(i); String nodeValue; if (n.hasChildNodes()) { nodeValue = n.getFirstChild().getNodeValue(); } else { nodeValue = n.getNodeValue(); } NamedNodeMap attrs = n.getAttributes(); Node p = attrs.getNamedItem("property"); if (p != null) { if (p.getNodeValue().contains("rendition:layout")) { report.info(null, FeatureEnum.RENDITION_LAYOUT, nodeValue); result = true; } if (p.getNodeValue().contains("rendition:orientation")) { report.info(null, FeatureEnum.RENDITION_ORIENTATION, nodeValue); result = true; } if (p.getNodeValue().contains("rendition:spread")) { report.info(null, FeatureEnum.RENDITION_SPREAD, nodeValue); result = true; } } } } } NodeList mList = doc.getElementsByTagName("spine"); if (mList.getLength() > 0) { Node manifest = mList.item(0); NodeList itemNodes = manifest.getChildNodes(); String renditionLayout = "rendition:layout-"; String renditionOrientation = "rendition:orientation-"; String renditionSpread = "rendition:spread-"; for (int i = 0; i < itemNodes.getLength(); i++) { if (itemNodes.item(i).getNodeName().compareToIgnoreCase("itemref") == 0) { Node n = itemNodes.item(i); String nodeValue; NamedNodeMap attrs = n.getAttributes(); Node p = attrs.getNamedItem("properties"); Node idrefNode = attrs.getNamedItem("idref"); String idref; ManifestItem manifestItem; String href = ""; if (idrefNode != null) { idref = idrefNode.getNodeValue(); manifestItem = epack.getManifest().getItem(idref); if (manifestItem != null) { href = epack.getManifestItemFileName(manifestItem); } } if (p != null) { // if (p.hasChildNodes()) { nodeValue = p.getFirstChild().getNodeValue(); } else { nodeValue = p.getNodeValue(); } if (p.getNodeValue().contains(renditionLayout)) { report.info(href, FeatureEnum.RENDITION_LAYOUT, nodeValue.substring(renditionLayout.length())); result = true; } if (p.getNodeValue().contains(renditionOrientation)) { report.info(href, FeatureEnum.RENDITION_ORIENTATION, nodeValue.substring(renditionOrientation.length())); result = true; } if (p.getNodeValue().contains(renditionSpread)) { report.info(href, FeatureEnum.RENDITION_SPREAD, nodeValue.substring(renditionSpread.length())); result = true; } } } } } return result; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy