mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-19 08:52:15 -07:00
Comments.
This commit is contained in:
parent
38c5cb1259
commit
a8f5343fad
1 changed files with 16 additions and 13 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue