void WordAndPara(PageItem* currItem, int *w, int *p, int *c, int *wN, int *pN, int *cN) { QChar Dat = QChar(32); int para = 0; int ww = 0; int cc = 0; int paraN = 0; int wwN = 0; int ccN = 0; bool first = true; PageItem *nextItem = currItem; PageItem *nbl = currItem; while (nextItem != 0) { if (nextItem->prevInChain() != 0) nextItem = nextItem->prevInChain(); else break; } while (nextItem != 0) { for (int a = qMax(nextItem->firstInFrame(),0); a <= nextItem->lastInFrame() && a < nextItem->itemText.length(); ++a) { QChar b = nextItem->itemText.text(a); if (b == SpecialChars::PARSEP) { para++; } if ((!b.isLetterOrNumber()) && (Dat.isLetterOrNumber()) && (!first)) { ww++; } if (b.isSurrogate()) ++a; cc++; Dat = b; first = false; } nbl = nextItem; nextItem = nextItem->nextInChain(); } if (nbl->frameOverflows()) { paraN++; for (int a = nbl->lastInFrame()+1; a < nbl->itemText.length(); ++a) { QChar b = nbl->itemText.text(a); if (b == SpecialChars::PARSEP) { paraN++; } if ((!b.isLetterOrNumber()) && (Dat.isLetterOrNumber()) && (!first)) { wwN++; } if (b.isSurrogate()) ++a; ccN++; Dat = b; first = false; } } else { para++; } if (Dat.isLetterOrNumber()) { if (nbl->frameOverflows()) wwN++; else ww++; } *w = ww; *p = para; *c = cc; *wN = wwN; *pN = paraN; *cN = ccN; }