public List<PdfChunk> CreateArrayOfPdfChunks(int startIdx, int endIdx, PdfChunk extraPdfChunk)
{
bool bidi = (runDirection == PdfWriter.RUN_DIRECTION_LTR || runDirection == PdfWriter.RUN_DIRECTION_RTL);
if (bidi)
Reorder(startIdx, endIdx);
List<PdfChunk> ar = new List<PdfChunk>();
PdfChunk refCk = detailChunks[startIdx];
PdfChunk ck = null;
StringBuilder buf = new StringBuilder();
char c;
int 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;
}