in src/java/org/apache/fop/render/pdf/pdfbox/StructureTreeMerger.java [429:472]
private void findLeafKids(COSBase kid, COSObject parent) throws IOException {
if (kid instanceof COSArray) {
COSArray arrayKid = (COSArray)kid;
for (COSBase arrayEntry : arrayKid) {
findLeafKids(arrayEntry, parent);
}
} else if (kid instanceof COSObject) {
COSObject kidObject = (COSObject)kid;
COSBase base = kidObject.getObject();
if (base instanceof COSDictionary) {
COSDictionary temp = (COSDictionary) base;
if (temp.getDictionaryObject(COSName.S) != null && temp.getItem(COSName.K) != null) {
COSBase tempKids = temp.getItem(COSName.K);
findLeafKids(tempKids, kidObject);
} else {
findLeafKids(temp, parent);
}
}
} else if (kid instanceof COSDictionary) {
COSDictionary kidDictionary = (COSDictionary)kid;
COSDictionary parentDict = (COSDictionary)parent.getObject();
if (isElementFromSourcePage(kidDictionary, parentDict)) {
PDFStructElem elem = structElemCache.get((int)parent.getObjectNumber());
if (elem == null) {
elem = createAndRegisterStructElem(parent);
copyElemEntries(parent, elem);
extra.add(parent);
createKids(kid, parentDict, elem, false);
}
}
} else {
assert kid instanceof COSInteger;
COSDictionary parentDict = (COSDictionary)parent.getObject();
if (checkPageEntryInAncestorsRecursively(parentDict)) {
PDFStructElem elem = structElemCache.get((int)parent.getObjectNumber());
if (elem == null) {
elem = createAndRegisterStructElem(parent);
copyElemEntries(parent, elem);
createKids(kid, parentDict, elem, false);
}
}
}
}