QString DiceServer::startDiceParsing(QString cmd) { QString result(""); bool highlight = true; if(m_diceParser->parseLine(cmd)) { m_diceParser->Start(); if(!m_diceParser->getErrorMap().isEmpty()) { result += "<span style=\"color: #FF0000\">Error:</span>" + m_diceParser->humanReadableError() + "<br/>"; } else { ExportedDiceResult list; bool homogeneous = true; m_diceParser->getLastDiceResult(list,homogeneous); QString diceText = diceToText(list,highlight,homogeneous); QString scalarText; QString str; if(m_diceParser->hasIntegerResultNotInFirst()) { scalarText = QString("%1").arg(m_diceParser->getLastIntegerResult()); } else if(!list.isEmpty()) { scalarText = QString("%1").arg(m_diceParser->getSumOfDiceResult()); } if(highlight) { str = QString("Result: <span class=\"dice\">%1</span>, details:[%3 (%2)]").arg(scalarText).arg(diceText).arg(m_diceParser->getDiceCommand()); } else { str = QString("Result: %1, details:[%3 (%2)]").arg(scalarText).arg(diceText).arg(m_diceParser->getDiceCommand()); } if(m_diceParser->hasStringResult()) { str = m_diceParser->getStringResult(); } result += str + "<br/>"; } } else { result += "<span style=\"color: #00FF00\">Error:</span>" + m_diceParser->humanReadableError() + "<br/>"; } return result; }
QString ChatWindow::diceToText(ExportedDiceResult& dice) { QStringList resultGlobal; foreach(int face, dice.keys()) { QStringList result; QStringList currentStreak; QList<QStringList> allStreakList; ListDiceResult diceResult = dice.value(face); bool previousHighlight=false; QString patternColor("<span class=\"dice\">"); foreach (DiceAndHighlight tmp, diceResult) { QStringList diceListStr; if((previousHighlight)&&(!tmp.second)) { QStringList list; list << patternColor+currentStreak.join(',')+"</span>"; allStreakList.append(list); currentStreak.clear(); } else if((!previousHighlight)&&(tmp.second)) { if(!currentStreak.isEmpty()) { QStringList list; list << currentStreak.join(','); allStreakList.append(list); currentStreak.clear(); } } previousHighlight = tmp.second; for(int i =0; i < tmp.first.size(); ++i) { qint64 dievalue = tmp.first[i]; diceListStr << QString::number(dievalue); } if(diceListStr.size()>1) { QString first = diceListStr.takeFirst(); first = QString("%1 [%2]").arg(first).arg(diceListStr.join(',')); diceListStr.clear(); diceListStr << first; } currentStreak << diceListStr.join(' '); } if(previousHighlight) { QStringList list; list << patternColor+currentStreak.join(',')+"</span>"; allStreakList.append(list); } else { if(!currentStreak.isEmpty()) { QStringList list; list << currentStreak.join(','); allStreakList.append(list); } } foreach(QStringList a, allStreakList) { result << a; } if(dice.keys().size()>1) { resultGlobal << QString(" d%2:(%1)").arg(result.join(",")).arg(face); } else { resultGlobal << result.join(","); } }
QString DiceServer::diceToText(ExportedDiceResult& dice,bool highlight,bool homogeneous) { QStringList resultGlobal; foreach(int face, dice.keys()) { QStringList result; QStringList currentStreak; QList<QStringList> allStreakList; ListDiceResult diceResult = dice.value(face); bool previousHighlight=false; QString previousColor; QString patternColor("<span class=\"dice\">"); foreach (HighLightDice tmp, diceResult) { if(previousColor != tmp.getColor()) { if(!currentStreak.isEmpty()) { QStringList list; list << patternColor+currentStreak.join(',')+"</span>"; allStreakList.append(list); currentStreak.clear(); } if(tmp.getColor().isEmpty()) { patternColor = QStringLiteral("<span class=\"dice\">"); } else { patternColor = QStringLiteral("<span style=\"color:%1;font-weight:bold\">").arg(tmp.getColor()); } } QStringList diceListStr; if((previousHighlight)&&(!tmp.isHighlighted())) { if(!currentStreak.isEmpty()) { QStringList list; list << patternColor+currentStreak.join(',')+"</span>"; allStreakList.append(list); currentStreak.clear(); } } else if((!previousHighlight)&&(tmp.isHighlighted())) { if(!currentStreak.isEmpty()) { QStringList list; list << currentStreak.join(','); allStreakList.append(list); currentStreak.clear(); } } previousHighlight = tmp.isHighlighted(); previousColor = tmp.getColor(); for(int i =0; i < tmp.getResult().size(); ++i) { qint64 dievalue = tmp.getResult()[i]; diceListStr << QString::number(dievalue); } if(diceListStr.size()>1) { QString first = diceListStr.takeFirst(); first = QString("%1 [%2]").arg(first).arg(diceListStr.join(',')); diceListStr.clear(); diceListStr << first; } currentStreak << diceListStr.join(' '); } if(previousHighlight) { QStringList list; list << patternColor+currentStreak.join(',')+"</span>"; allStreakList.append(list); } else { if(!currentStreak.isEmpty()) { QStringList list; list << currentStreak.join(','); allStreakList.append(list); } } foreach(QStringList a, allStreakList) { result << a; } if(dice.keys().size()>1) { resultGlobal << QString(" d%2:(%1)").arg(result.join(",")).arg(face); } else { resultGlobal << result.join(","); } } return resultGlobal.join(""); }