public bool GetParagraph(int runDirection)
{
this.runDirection = runDirection;
currentChar = 0;
totalTextLength = 0;
bool hasText = false;
char c;
char uniC;
BaseFont bf;
for (; indexChunk < chunks.Count; ++indexChunk) {
PdfChunk ck = (PdfChunk)chunks[indexChunk];
bf = ck.Font.Font;
string s = ck.ToString();
int len = s.Length;
for (; indexChunkChar < len; ++indexChunkChar) {
c = s[indexChunkChar];
uniC = (char)bf.GetUnicodeEquivalent(c);
if (uniC == '\r' || uniC == '\n') {
// next condition is never true for CID
if (uniC == '\r' && indexChunkChar + 1 < len && s[indexChunkChar + 1] == '\n')
++indexChunkChar;
++indexChunkChar;
if (indexChunkChar >= len) {
indexChunkChar = 0;
++indexChunk;
}
hasText = true;
if (totalTextLength == 0)
detailChunks[0] = ck;
break;
}
AddPiece(c, ck);
}
if (hasText)
break;
indexChunkChar = 0;
}
if (totalTextLength == 0)
return hasText;
// remove trailing WS
totalTextLength = TrimRight(0, totalTextLength - 1) + 1;
if (totalTextLength == 0)
return true;
if (runDirection == PdfWriter.RUN_DIRECTION_LTR || runDirection == PdfWriter.RUN_DIRECTION_RTL) {
if (orderLevels.Length < totalTextLength) {
orderLevels = new byte[pieceSize];
indexChars = new int[pieceSize];
}
ArabicLigaturizer.ProcessNumbers(text, 0, totalTextLength, arabicOptions);
BidiOrder order = new BidiOrder(text, 0, totalTextLength, (sbyte)(runDirection == PdfWriter.RUN_DIRECTION_RTL ? 1 : 0));
byte[] od = order.GetLevels();
for (int k = 0; k < totalTextLength; ++k) {
orderLevels[k] = od[k];
indexChars[k] = k;
}
DoArabicShapping();
MirrorGlyphs();
}
totalTextLength = TrimRightEx(0, totalTextLength - 1) + 1;
return true;
}