diff options
Diffstat (limited to 'quackleio')
-rw-r--r-- | quackleio/gcgio.cpp | 22 | ||||
-rw-r--r-- | quackleio/util.cpp | 6 | ||||
-rw-r--r-- | quackleio/util.h | 1 |
3 files changed, 26 insertions, 3 deletions
diff --git a/quackleio/gcgio.cpp b/quackleio/gcgio.cpp index 30fac0f..8f8112f 100644 --- a/quackleio/gcgio.cpp +++ b/quackleio/gcgio.cpp @@ -61,6 +61,7 @@ Quackle::Game *GCGIO::read(QTextStream &stream, int flags) bool gameStarted = false; QString line; + stream.setCodec(QTextCodec::codecForName("ISO-8859-1")); while (!stream.atEnd()) { line = stream.readLine(); @@ -129,6 +130,11 @@ Quackle::Game *GCGIO::read(QTextStream &stream, int flags) incompleteRack = Util::encode(rackString); hasIncompleteRack = true; } + else if (line.startsWith("#character-encoding")) + { + QString encoding{line.right(line.length() - 20).trimmed()}; + stream.setCodec(QTextCodec::codecForName(encoding.toAscii())); + } } else if (line.startsWith(">")) { @@ -180,10 +186,21 @@ Quackle::Game *GCGIO::read(QTextStream &stream, int flags) else if (firstMoveBite.startsWith("-")) { const QString exchangedLetters = firstMoveBite.right(firstMoveBite.length() - 1); - if (exchangedLetters.isEmpty()) + bool isLetterCount = false; + uint letterCount = exchangedLetters.toUInt(&isLetterCount); + + if (exchangedLetters.isEmpty() || (isLetterCount && letterCount == 0)) move = Quackle::Move::createPassMove(); + else if (isLetterCount) + { + Quackle::LetterString encodedLetters; + + for (uint i = 0; i < letterCount; ++i) + encodedLetters.push_back(QUACKLE_BLANK_MARK); + move = Quackle::Move::createExchangeMove(encodedLetters, true); + } else - move = Quackle::Move::createExchangeMove(Util::encode(exchangedLetters)); + move = Quackle::Move::createExchangeMove(Util::encode(exchangedLetters), false); } else if (firstMoveBite.startsWith("(time)")) { @@ -311,6 +328,7 @@ bool GCGIO::canRead(QTextStream &stream) const void GCGIO::write(const Quackle::Game &game, QTextStream &stream) { Quackle::PlayerList players = game.players(); + stream.setCodec(QTextCodec::codecForName("ISO-8859-1")); for (Quackle::PlayerList::iterator it = players.begin(); it != players.end(); ++it) { stream << "#player" << (*it).id() + 1 << " " << Util::uvStringToQString((*it).abbreviatedName()) << " " << Util::uvStringToQString((*it).name()) << endl; diff --git a/quackleio/util.cpp b/quackleio/util.cpp index 817edac..901c65e 100644 --- a/quackleio/util.cpp +++ b/quackleio/util.cpp @@ -34,7 +34,7 @@ UtilSettings *UtilSettings::self() } UtilSettings::UtilSettings() - : octothorpBritish(true), vowelFirst(false) + : octothorpBritish(true), vowelFirst(false), scoreInvalidAsZero(false) { m_self = this; } @@ -55,6 +55,10 @@ QString Util::moveToDetailedString(const Quackle::Move &move) ret = QObject::tr("Exch. %1").arg(prettyTiles); break; + case Quackle::Move::BlindExchange: + ret = QObject::tr("Exch. %1").arg(move.tiles().length()); + break; + case Quackle::Move::UnusedTilesBonus: ret = QObject::tr("2*(%1)").arg(letterStringToQString(Util::alphagram(move.usedTiles()))); break; diff --git a/quackleio/util.h b/quackleio/util.h index 10a57a2..62545bb 100644 --- a/quackleio/util.h +++ b/quackleio/util.h @@ -42,6 +42,7 @@ public: bool octothorpBritish; bool vowelFirst; + bool scoreInvalidAsZero; private: static UtilSettings *m_self; |