File indexing completed on 2023-05-30 10:45:23

0001 /*
0002     SPDX-FileCopyrightText: 2008-2010 Peter Hedlund <peter.hedlund@kdemail.net>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "blankanswer.h"
0007 
0008 #include <QRegularExpression>
0009 #include <QStringList>
0010 
0011 namespace BlankAnswer
0012 {
0013 
0014 BlankResult blankAnswer(const QString &input)
0015 {
0016     BlankResult result;
0017     QRegularExpression rx(QStringLiteral("\\[(.*?)\\]"));
0018 
0019     QRegularExpressionMatchIterator matchIt = rx.globalMatch(input);
0020 
0021     // When there is no blank return an empty result
0022     if (!matchIt.hasNext()) {
0023         return result;
0024     }
0025 
0026     result.blankedAnswer = input;
0027     result.blankedAnswer.replace(rx, QStringLiteral(".........."));
0028 
0029     QStringList answerParts;
0030 
0031     while (matchIt.hasNext()) {
0032         QRegularExpressionMatch match = matchIt.next();
0033         answerParts << match.captured(1);
0034     }
0035 
0036     result.correctAnswer = answerParts.join(QLatin1String("; "));
0037 
0038     return result;
0039 }
0040 
0041 QString yourAnswerResult(const QString &givenAnswer, const QString &blankedAnswer)
0042 {
0043     QString result = givenAnswer;
0044 
0045     if (!blankedAnswer.isEmpty()) {
0046         result.clear();
0047         QStringList ls;
0048 
0049         if (givenAnswer.indexOf(';') > 0)
0050             ls = givenAnswer.split(';');
0051         else
0052             ls.append(givenAnswer);
0053 
0054         result = QString(blankedAnswer).replace(QLatin1String(".........."), QLatin1String("<u></u>"));
0055 
0056         int offset = 0, counter = 0;
0057         while (offset >= 0 && counter < ls.size()) {
0058             offset = result.indexOf(QStringLiteral("<u>"), offset);
0059             if (offset >= 0) {
0060                 result.insert(offset + 3, ls[counter]);
0061                 offset++;
0062                 counter++;
0063             }
0064         }
0065         result.append("</qt>");
0066         result.prepend("<qt>");
0067     }
0068 
0069     return result;
0070 }
0071 
0072 }; // namespace BlankAnswer