Skip to content

Commit 3b960f8

Browse files
Add functionality for visibility of /OCMD /P (#682)
* Add PDOCMDDictionary class * Add isContainsName method to PDOptionalContentPropeties
1 parent e1cf260 commit 3b960f8

File tree

3 files changed

+59
-5
lines changed

3 files changed

+59
-5
lines changed

src/main/java/org/verapdf/as/ASAtom.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,17 @@ public class ASAtom implements Comparable<ASAtom> {
6060
public static final ASAtom AF_RELATIONSHIP = new ASAtom("AFRelationship");
6161
public static final ASAtom AFTER = new ASAtom("After");
6262
public static final ASAtom AIS = new ASAtom("AIS");
63-
public static final ASAtom ALT = new ASAtom("Alt");
63+
public static final ASAtom ALL_OFF = new ASAtom("AllOff");
64+
public static final ASAtom ALL_ON = new ASAtom("AllOn");
6465
public static final ASAtom ALPHA = new ASAtom("Alpha");
66+
public static final ASAtom ALT = new ASAtom("Alt");
6567
public static final ASAtom ALTERNATE = new ASAtom("Alternate");
6668
public static final ASAtom ALTERNATES = new ASAtom("Alternates");
6769
public static final ASAtom ANNOT = new ASAtom("Annot");
6870
public static final ASAtom ANNOTS = new ASAtom("Annots");
6971
public static final ASAtom ANTI_ALIAS = new ASAtom("AntiAlias");
72+
public static final ASAtom ANY_OFF = new ASAtom("AnyOff");
73+
public static final ASAtom ANY_ON = new ASAtom("AnyOn");
7074
public static final ASAtom AP = new ASAtom("AP");
7175
public static final ASAtom AP_REF = new ASAtom("APRef");
7276
public static final ASAtom APP = new ASAtom("App");
@@ -408,6 +412,7 @@ public class ASAtom implements Comparable<ASAtom> {
408412
public static final ASAtom OBJR = new ASAtom("OBJR");
409413
public static final ASAtom OBJ_STM = new ASAtom("ObjStm");
410414
public static final ASAtom OC = new ASAtom("OC");
415+
public static final ASAtom OCMD = new ASAtom("OCMD");
411416
public static final ASAtom OCG = new ASAtom("OCG");
412417
public static final ASAtom OCGS = new ASAtom("OCGs");
413418
public static final ASAtom OCPROPERTIES = new ASAtom("OCProperties");
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.verapdf.pd.optionalcontent;
2+
3+
import org.verapdf.as.ASAtom;
4+
import org.verapdf.cos.COSArray;
5+
import org.verapdf.cos.COSBase;
6+
import org.verapdf.cos.COSObjType;
7+
import org.verapdf.cos.COSObject;
8+
9+
public class PDOCMDDictionary {
10+
public static boolean isVisibleOCMDByP(COSBase property, PDOptionalContentProperties optProperties) {
11+
COSObject ocgProperty = property.getKey(ASAtom.OCGS);
12+
if (ocgProperty == null || ocgProperty.getType() != COSObjType.COS_ARRAY) {
13+
return true;
14+
}
15+
COSArray ocgs = (COSArray) ocgProperty.getDirectBase();
16+
ASAtom pValue = property.getNameKey(ASAtom.P);
17+
for (COSObject obj : ocgs) {
18+
boolean isVisible = optProperties.isVisibleLayer(obj.getStringKey(ASAtom.NAME));
19+
if (isVisible) {
20+
if (pValue == null || ASAtom.ANY_ON.equals(pValue)) {
21+
return true;
22+
}
23+
if (ASAtom.ALL_OFF.equals(pValue)) {
24+
return false;
25+
}
26+
} else {
27+
if (ASAtom.ALL_ON.equals(pValue)) {
28+
return false;
29+
}
30+
if (ASAtom.ANY_OFF.equals(pValue)) {
31+
return true;
32+
}
33+
}
34+
}
35+
return ASAtom.ALL_OFF.equals(pValue) || ASAtom.ALL_ON.equals(pValue);
36+
}
37+
}

src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@
2121
package org.verapdf.pd.optionalcontent;
2222

2323
import org.verapdf.as.ASAtom;
24-
import org.verapdf.cos.COSArray;
25-
import org.verapdf.cos.COSDictionary;
26-
import org.verapdf.cos.COSObjType;
27-
import org.verapdf.cos.COSObject;
24+
import org.verapdf.cos.*;
2825
import org.verapdf.pd.PDObject;
2926

3027
import java.util.ArrayList;
@@ -55,6 +52,21 @@ public List<String> getGroupNames() {
5552
return groups;
5653
}
5754

55+
public boolean isContainsName(String name) {
56+
if (name == null) {
57+
return false;
58+
}
59+
COSObject ocgs = getObject().getKey(ASAtom.OCGS);
60+
if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) {
61+
for (COSObject obj : (COSArray) ocgs.getDirectBase()) {
62+
if (!obj.empty() && obj.getType() == COSObjType.COS_DICT && name.equals(obj.getStringKey(ASAtom.NAME))) {
63+
return true;
64+
}
65+
}
66+
}
67+
return false;
68+
}
69+
5870
public boolean isVisibleLayer(String name) {
5971
if (name == null) {
6072
return true;

0 commit comments

Comments
 (0)