Comments.

This commit is contained in:
Lukas Brübach 2024-12-23 18:46:42 +01:00
parent 38c5cb1259
commit a8f5343fad

View file

@ -533,10 +533,11 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
// Regex for advanced card parsing // Regex for advanced card parsing
const QRegularExpression reMultiplier(R"(^[xX\(\[]*(\d+)[xX\*\)\]]* ?(.+))"); const QRegularExpression reMultiplier(R"(^[xX\(\[]*(\d+)[xX\*\)\]]* ?(.+))");
const QRegularExpression reSplitCard(R"( ?\/\/ ?)"); const QRegularExpression reSplitCard(R"( ?\/\/ ?)");
const QRegularExpression reBrace(R"( ?[\[\{][^\]\}]*[\]\}] ?)"); const QRegularExpression reBrace(R"( ?[\[\{][^\]\}]*[\]\}] ?)"); // not nested
const QRegularExpression reRoundBrace(R"(^\([^\)]*\) ?)"); const QRegularExpression reRoundBrace(R"(^\([^\)]*\) ?)"); // () are only matched at start of string
const QRegularExpression reDigitBrace(R"( ?\(\d*\) ?)"); const QRegularExpression reDigitBrace(R"( ?\(\d*\) ?)"); // () are matched if containing digits
const QRegularExpression reBraceDigit(R"( ?\([\dA-Z]+\) *\d+$)"); const QRegularExpression reBraceDigit(
R"( ?\([\dA-Z]+\) *\d+$)"); // () are matched if containing setcode then a number
const QRegularExpression reDoubleFacedMarker(R"( ?\(Transform\) ?)"); const QRegularExpression reDoubleFacedMarker(R"( ?\(Transform\) ?)");
// Regex for extracting set code and collector number with attached symbols // Regex for extracting set code and collector number with attached symbols
@ -567,7 +568,7 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
} }
} }
// Find sideboard position // find sideboard position, if marks are used this won't be needed
int sBStart = -1; int sBStart = -1;
if (inputs.indexOf(reSBMark, deckStart) == -1) { if (inputs.indexOf(reSBMark, deckStart) == -1) {
sBStart = inputs.indexOf(reSBComment, deckStart); sBStart = inputs.indexOf(reSBComment, deckStart);
@ -609,13 +610,14 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
++index; ++index;
} }
// Discard lines that indicate sections like "mainboard" // Discard line if it starts with deck or mainboard, all cards until the sideboard starts are in the mainboard
if (inputs.at(index).contains(reDeckComment)) { if (inputs.at(index).contains(reDeckComment)) {
++index; ++index;
} }
// Parse decklist // Parse decklist
for (; index < max_line; ++index) { for (; index < max_line; ++index) {
// check if line is a card
match = reCardLine.match(inputs.at(index)); match = reCardLine.match(inputs.at(index));
if (!match.hasMatch()) if (!match.hasMatch())
continue; continue;
@ -647,14 +649,14 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
cardName.chop(3); // Remove the "*F*" from the card name cardName.chop(3); // Remove the "*F*" from the card name
} }
// Attempt to match the hyphen-separated format // Attempt to match the hyphen-separated format (PLST-2094)
match = reHyphenFormat.match(cardName); match = reHyphenFormat.match(cardName);
if (match.hasMatch()) { if (match.hasMatch()) {
setCode = match.captured(2).toUpper(); setCode = match.captured(2).toUpper();
collectorNumber = match.captured(3); collectorNumber = match.captured(3);
cardName = cardName.left(match.capturedStart()).trimmed(); cardName = cardName.left(match.capturedStart()).trimmed();
} else { } else {
// Attempt to match the regular format // Attempt to match the regular format (PLST) 2094
match = reRegularFormat.match(cardName); match = reRegularFormat.match(cardName);
if (match.hasMatch()) { if (match.hasMatch()) {
setCode = match.captured(1).toUpper(); setCode = match.captured(1).toUpper();
@ -663,7 +665,7 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
} }
} }
// Check for amount // check if a specific amount is mentioned
int amount = 1; int amount = 1;
match = reMultiplier.match(cardName); match = reMultiplier.match(cardName);
if (match.hasMatch()) { if (match.hasMatch()) {
@ -683,21 +685,22 @@ bool DeckList::loadFromStream_Plain(QTextStream &in)
// Remove unnecessary characters // Remove unnecessary characters
cardName.remove(reBrace); cardName.remove(reBrace);
cardName.remove(reRoundBrace); cardName.remove(reRoundBrace); // I'll be entirely honest here, these are split to accommodate just three cards
cardName.remove(reDigitBrace); cardName.remove(reDigitBrace); // from un-sets that have a word in between round braces at the end
cardName.remove(reBraceDigit); cardName.remove(reBraceDigit); // very specific format with the set code in () and collectors number after
// Normalize names // Normalize names
for (auto diff = differences.constBegin(); diff != differences.constEnd(); ++diff) { for (auto diff = differences.constBegin(); diff != differences.constEnd(); ++diff) {
cardName.replace(diff.key(), diff.value()); cardName.replace(diff.key(), diff.value());
} }
// Resolve complete card name // Resolve complete card name, this function does nothing if the name is not found
cardName = getCompleteCardName(cardName); cardName = getCompleteCardName(cardName);
// Determine the zone (mainboard/sideboard) // Determine the zone (mainboard/sideboard)
QString zoneName = getCardZoneFromName(cardName, sideboard ? DECK_ZONE_SIDE : DECK_ZONE_MAIN); QString zoneName = getCardZoneFromName(cardName, sideboard ? DECK_ZONE_SIDE : DECK_ZONE_MAIN);
// make new entry in decklist
new DecklistCardNode(cardName, amount, getZoneObjFromName(zoneName), setCode, collectorNumber); new DecklistCardNode(cardName, amount, getZoneObjFromName(zoneName), setCode, collectorNumber);
} }