Exemple #1
0
QString KNHelper::rewrapStringList(QStringList text, int wrapAt, QChar quoteChar, bool stopAtSig, bool alwaysSpace)
{
    QString quoted, lastPrefix, thisPrefix, leftover, thisLine;
    int breakPos;

    for(QStringList::Iterator line = text.begin(); line != text.end(); ++line)
    {

        if(stopAtSig && (*line) == "-- ")
            break;

        thisLine = (*line);
        if(!alwaysSpace && (thisLine[0] == quoteChar))
            thisLine.prepend(quoteChar);  // second quote level without space
        else
            thisLine.prepend(quoteChar + ' ');

        thisPrefix = QString::null;
        QChar c;
        for(int idx = 0; idx < (int)(thisLine.length()); idx++)
        {
            c = thisLine.at(idx);
            if((c == ' ') ||
                    (c == quoteChar) || (c == '>') || (c == '|') || (c == ':') || (c == '#') || (c == '[') || (c == '{'))
                thisPrefix.append(c);
            else
                break;
        }

        thisLine.remove(0, thisPrefix.length());
        thisLine = thisLine.stripWhiteSpace();

        if(!leftover.isEmpty())     // don't break paragraphs, tables and quote levels
        {
            if(thisLine.isEmpty() || (thisPrefix != lastPrefix) || thisLine.contains("  ") || thisLine.contains('\t'))
                appendTextWPrefix(quoted, leftover, wrapAt, lastPrefix);
            else
                thisLine.prepend(leftover + " ");
            leftover = QString::null;
        }

        if((int)(thisPrefix.length() + thisLine.length()) > wrapAt)
        {
            breakPos = findBreakPos(thisLine, wrapAt - thisPrefix.length());
            if(breakPos < (int)(thisLine.length()))
            {
                leftover = thisLine.right(thisLine.length() - breakPos - 1);
                thisLine.truncate(breakPos);
            }
        }

        quoted += thisPrefix + thisLine + "\n";
        lastPrefix = thisPrefix;
    }

    if(!leftover.isEmpty())
        appendTextWPrefix(quoted, leftover, wrapAt, lastPrefix);

    return quoted;
}
void appendTextWPrefix(QString &result, const QString &text, int wrapAt, const QString &prefix)
{
  QString txt=text;
  int breakPos;

  while(!txt.isEmpty()) {

    if((int)(prefix.length()+txt.length()) > wrapAt) {
      breakPos=findBreakPos(txt,wrapAt-prefix.length());
      result+=(prefix+txt.left(breakPos)+'\n');
      txt.remove(0,breakPos+1);
    } else {
      result+=(prefix+txt+'\n');
      txt.clear();
    }
  }
}