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); }