public ArrayList CreateArrayOfPdfChunks(int startIdx, int endIdx, PdfChunk extraPdfChunk)
{
var bidi = (RunDirection == PdfWriter.RUN_DIRECTION_LTR || RunDirection == PdfWriter.RUN_DIRECTION_RTL);
if (bidi)
{
Reorder(startIdx, endIdx);
}
var ar = new ArrayList();
var refCk = DetailChunks[startIdx];
PdfChunk ck = null;
var buf = new StringBuilder();
char c;
var idx = 0;
for (; startIdx <= endIdx; ++startIdx)
{
idx = bidi ? IndexChars[startIdx] : startIdx;
c = Text[idx];
ck = DetailChunks[idx];
if (PdfChunk.NoPrint(ck.GetUnicodeEquivalent(c)))
{
continue;
}
if (ck.IsImage() || ck.IsSeparator() || ck.IsTab())
{
if (buf.Length > 0)
{
ar.Add(new PdfChunk(buf.ToString(), refCk));
buf = new StringBuilder();
}
ar.Add(ck);
}
else if (ck == refCk)
{
buf.Append(c);
}
else
{
if (buf.Length > 0)
{
ar.Add(new PdfChunk(buf.ToString(), refCk));
buf = new StringBuilder();
}
if (!ck.IsImage() && !ck.IsSeparator() && !ck.IsTab())
{
buf.Append(c);
}
refCk = ck;
}
}
if (buf.Length > 0)
{
ar.Add(new PdfChunk(buf.ToString(), refCk));
}
if (extraPdfChunk != null)
{
ar.Add(extraPdfChunk);
}
return(ar);
}