private returnType CopyPageMarks(PdfDictionary parentTree, PdfNumber arrayNumber, int newArrayNumber)
{
PdfArray pages = (PdfArray)GetDirectObject(parentTree.Get(PdfName.NUMS));
if (pages == null) {
PdfArray kids = (PdfArray)GetDirectObject(parentTree.Get(PdfName.KIDS));
if (kids == null)
return returnType.NOTFOUND;
int cur = kids.Size/2;
int begin = 0;
while (true) {
PdfDictionary kidTree = (PdfDictionary)GetDirectObject(kids[cur + begin]);
switch (CopyPageMarks(kidTree,arrayNumber,newArrayNumber)) {
case returnType.FOUND:
return returnType.FOUND;
case returnType.ABOVE:
begin += cur;
cur /= 2;
if (cur == 0)
cur = 1;
if (cur + begin == kids.Size)
return returnType.ABOVE;
break;
case returnType.BELOW:
if (cur + begin == 0)
return returnType.BELOW;
if (cur == 0)
return returnType.NOTFOUND;
cur /= 2;
break;
default:
return returnType.NOTFOUND;
}
}
} else {
return FindAndCopyMarks(pages, arrayNumber.IntValue, newArrayNumber);
}
}