diff --git a/src/main/java/org/verapdf/as/ASAtom.java b/src/main/java/org/verapdf/as/ASAtom.java index 8fdeff61..402561b4 100644 --- a/src/main/java/org/verapdf/as/ASAtom.java +++ b/src/main/java/org/verapdf/as/ASAtom.java @@ -60,13 +60,17 @@ public class ASAtom implements Comparable { public static final ASAtom AF_RELATIONSHIP = new ASAtom("AFRelationship"); public static final ASAtom AFTER = new ASAtom("After"); public static final ASAtom AIS = new ASAtom("AIS"); - public static final ASAtom ALT = new ASAtom("Alt"); + public static final ASAtom ALL_OFF = new ASAtom("AllOff"); + public static final ASAtom ALL_ON = new ASAtom("AllOn"); public static final ASAtom ALPHA = new ASAtom("Alpha"); + public static final ASAtom ALT = new ASAtom("Alt"); public static final ASAtom ALTERNATE = new ASAtom("Alternate"); public static final ASAtom ALTERNATES = new ASAtom("Alternates"); public static final ASAtom ANNOT = new ASAtom("Annot"); public static final ASAtom ANNOTS = new ASAtom("Annots"); public static final ASAtom ANTI_ALIAS = new ASAtom("AntiAlias"); + public static final ASAtom ANY_OFF = new ASAtom("AnyOff"); + public static final ASAtom ANY_ON = new ASAtom("AnyOn"); public static final ASAtom AP = new ASAtom("AP"); public static final ASAtom AP_REF = new ASAtom("APRef"); public static final ASAtom APP = new ASAtom("App"); @@ -408,6 +412,7 @@ public class ASAtom implements Comparable { public static final ASAtom OBJR = new ASAtom("OBJR"); public static final ASAtom OBJ_STM = new ASAtom("ObjStm"); public static final ASAtom OC = new ASAtom("OC"); + public static final ASAtom OCMD = new ASAtom("OCMD"); public static final ASAtom OCG = new ASAtom("OCG"); public static final ASAtom OCGS = new ASAtom("OCGs"); public static final ASAtom OCPROPERTIES = new ASAtom("OCProperties"); diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java new file mode 100644 index 00000000..d638a243 --- /dev/null +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java @@ -0,0 +1,37 @@ +package org.verapdf.pd.optionalcontent; + +import org.verapdf.as.ASAtom; +import org.verapdf.cos.COSArray; +import org.verapdf.cos.COSBase; +import org.verapdf.cos.COSObjType; +import org.verapdf.cos.COSObject; + +public class PDOCMDDictionary { + public static boolean isVisibleOCMDByP(COSBase property, PDOptionalContentProperties optProperties) { + COSObject ocgProperty = property.getKey(ASAtom.OCGS); + if (ocgProperty == null || ocgProperty.getType() != COSObjType.COS_ARRAY) { + return true; + } + COSArray ocgs = (COSArray) ocgProperty.getDirectBase(); + ASAtom pValue = property.getNameKey(ASAtom.P); + for (COSObject obj : ocgs) { + boolean isVisible = optProperties.isVisibleLayer(obj.getStringKey(ASAtom.NAME)); + if (isVisible) { + if (pValue == null || ASAtom.ANY_ON.equals(pValue)) { + return true; + } + if (ASAtom.ALL_OFF.equals(pValue)) { + return false; + } + } else { + if (ASAtom.ALL_ON.equals(pValue)) { + return false; + } + if (ASAtom.ANY_OFF.equals(pValue)) { + return true; + } + } + } + return ASAtom.ALL_OFF.equals(pValue) || ASAtom.ALL_ON.equals(pValue); + } +} diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index bcabe94e..a3068a7c 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -21,10 +21,7 @@ package org.verapdf.pd.optionalcontent; import org.verapdf.as.ASAtom; -import org.verapdf.cos.COSArray; -import org.verapdf.cos.COSDictionary; -import org.verapdf.cos.COSObjType; -import org.verapdf.cos.COSObject; +import org.verapdf.cos.*; import org.verapdf.pd.PDObject; import java.util.ArrayList; @@ -55,6 +52,21 @@ public List getGroupNames() { return groups; } + public boolean isContainsName(String name) { + if (name == null) { + return false; + } + COSObject ocgs = getObject().getKey(ASAtom.OCGS); + if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { + for (COSObject obj : (COSArray) ocgs.getDirectBase()) { + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT && name.equals(obj.getStringKey(ASAtom.NAME))) { + return true; + } + } + } + return false; + } + public boolean isVisibleLayer(String name) { if (name == null) { return true;