+ if (pEnd == NULL) {
+ pEnd = &fChars[charCount];
+ }
+
+ if (pEnd != pStart) {
+ subsetFontRuns(fontRuns, pStart - fChars, pEnd - fChars, &fr);
+
+ paragraphLayout = new ParagraphLayout(pStart, pEnd - pStart, &fr, NULL, NULL, locales, fParagraphLevel, FALSE, status);
+
+ if (LE_FAILURE(status)) {
+ delete paragraphLayout;
+ break; // return? something else?
+ }
+
+ if (fParagraphLevel == UBIDI_DEFAULT_LTR) {
+ fParagraphLevel = paragraphLayout->getParagraphLevel();
+ }
+
+ pAscent = paragraphLayout->getAscent();
+ pDescent = paragraphLayout->getDescent();
+ pLeading = paragraphLayout->getLeading();
+
+ if (pAscent > ascent) {
+ ascent = pAscent;
+ }
+
+ if (pDescent > descent) {
+ descent = pDescent;
+ }
+
+ if (pLeading > leading) {
+ leading = pLeading;
+ }
+ }
+
+ if (fParagraphCount >= fParagraphMax) {
+ fParagraphLayout = (ParagraphLayout **) LE_GROW_ARRAY(fParagraphLayout, fParagraphMax + fParagraphGrow);
+ fParagraphMax += fParagraphGrow;
+ }
+
+ fParagraphLayout[fParagraphCount++] = paragraphLayout;
+
+ if (*pEnd == 0) {
+ break;
+ }
+
+ pStart = skipLineEnd(pEnd);
+ }