diff --git a/include/core/parseutil.h b/include/core/parseutil.h index 96cc1201..399f43fb 100644 --- a/include/core/parseutil.h +++ b/include/core/parseutil.h @@ -44,15 +44,15 @@ public: static QString readTextFile(QString); static int textFileLineCount(const QString &path); void strip_comment(QString*); - QList* parseAsm(QString); + QList parseAsm(const QString &filename); int evaluateDefine(QString, QMap*); QStringList readCArray(QString text, QString label); QMap readNamedIndexCArray(QString text, QString label); QString readCIncbin(QString text, QString label); QMap readCDefines(QString filename, QStringList prefixes, QMap = QMap()); void readCDefinesSorted(QString, QStringList, QStringList*, QMap = QMap()); - QList* getLabelMacros(QList*, QString); - QStringList* getLabelValues(QList*, QString); + QList getLabelMacros(const QList &, const QString &); + QStringList getLabelValues(const QList &, const QString &); bool tryParseJsonFile(QJsonDocument *out, QString filepath); bool ensureFieldsExist(QJsonObject obj, QList fields); diff --git a/src/core/parseutil.cpp b/src/core/parseutil.cpp index e6b8a274..cd053458 100644 --- a/src/core/parseutil.cpp +++ b/src/core/parseutil.cpp @@ -59,27 +59,27 @@ int ParseUtil::textFileLineCount(const QString &path) { return text.split('\n').count() + 1; } -QList* ParseUtil::parseAsm(QString filename) { - QList *parsed = new QList; +QList ParseUtil::parseAsm(const QString &filename) { + QList parsed; - text = readTextFile(root + "/" + filename); - QStringList lines = text.split('\n'); + text = readTextFile(root + '/' + filename); + const QStringList lines = text.split('\n'); for (QString line : lines) { strip_comment(&line); if (line.trimmed().isEmpty()) { } else if (line.contains(':')) { - QString label = line.left(line.indexOf(':')); - QStringList list{ ".label", label }; // .label is not a real keyword. It's used only to make the output more regular. - parsed->append(list); + const QString label = line.left(line.indexOf(':')); + const QStringList list{ ".label", label }; // .label is not a real keyword. It's used only to make the output more regular. + parsed.append(list); // There should not be anything else on the line. // gas will raise a syntax error if there is. } else { line = line.trimmed(); int index = line.indexOf(QRegExp("\\s+")); - QString macro = line.left(index); + const QString macro = line.left(index); QStringList params(line.right(line.length() - index).trimmed().split(QRegExp("\\s*,\\s*"))); params.prepend(macro); - parsed->append(params); + parsed.append(params); } } return parsed; @@ -335,7 +335,7 @@ QMap ParseUtil::readNamedIndexCArray(QString filename, QString QRegularExpression re_text(QString(R"(\b%1\b\s*(\[?[^\]]*\])?\s*=\s*\{([^\}]*)\})").arg(label)); QString body = re_text.match(text).captured(2).replace(QRegularExpression("\\s*"), ""); - + QRegularExpression re("\\[(?[A-Za-z0-9_]*)\\]=(?&?[A-Za-z0-9_]*)"); QRegularExpressionMatchIterator iter = re.globalMatch(body); @@ -349,24 +349,23 @@ QMap ParseUtil::readNamedIndexCArray(QString filename, QString return map; } -QList* ParseUtil::getLabelMacros(QList *list, QString label) { +QList ParseUtil::getLabelMacros(const QList &list, const QString &label) { bool in_label = false; - QList *new_list = new QList; - for (int i = 0; i < list->length(); i++) { - QStringList params = list->value(i); - QString macro = params.value(0); + QList new_list; + for (const auto ¶ms : list) { + const QString macro = params.value(0); if (macro == ".label") { if (params.value(1) == label) { in_label = true; } else if (in_label) { // If nothing has been read yet, assume the label // we're looking for is in a stack of labels. - if (new_list->length() > 0) { + if (new_list.length() > 0) { break; } } } else if (in_label) { - new_list->append(params); + new_list.append(params); } } return new_list; @@ -374,17 +373,16 @@ QList* ParseUtil::getLabelMacros(QList *list, QString // For if you don't care about filtering by macro, // and just want all values associated with some label. -QStringList* ParseUtil::getLabelValues(QList *list, QString label) { - list = getLabelMacros(list, label); - QStringList *values = new QStringList; - for (int i = 0; i < list->length(); i++) { - QStringList params = list->value(i); - QString macro = params.value(0); +QStringList ParseUtil::getLabelValues(const QList &list, const QString &label) { + const QList labelMacros = getLabelMacros(list, label); + QStringList values; + for (const auto ¶ms : labelMacros) { + const QString macro = params.value(0); if (macro == ".align" || macro == ".ifdef" || macro == ".ifndef") { continue; } - for (int j = 1; j < params.length(); j++) { - values->append(params.value(j)); + for (int i = 1; i < params.length(); i++) { + values.append(params.value(i)); } } return values; diff --git a/src/project.cpp b/src/project.cpp index 1f49cf3e..7058cb95 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -1108,26 +1108,26 @@ bool Project::loadMapTilesets(Map* map) { } Tileset* Project::loadTileset(QString label, Tileset *tileset) { - QStringList *values = parser.getLabelValues(parser.parseAsm("data/tilesets/headers.inc"), label); - if (values->isEmpty()) { + const QStringList values = parser.getLabelValues(parser.parseAsm("data/tilesets/headers.inc"), label); + if (values.isEmpty()) { return nullptr; } if (tileset == nullptr) { tileset = new Tileset; } tileset->name = label; - tileset->is_compressed = values->value(0); - tileset->is_secondary = values->value(1); - tileset->padding = values->value(2); - tileset->tiles_label = values->value(3); - tileset->palettes_label = values->value(4); - tileset->metatiles_label = values->value(5); + tileset->is_compressed = values.value(0); + tileset->is_secondary = values.value(1); + tileset->padding = values.value(2); + tileset->tiles_label = values.value(3); + tileset->palettes_label = values.value(4); + tileset->metatiles_label = values.value(5); if (projectConfig.getBaseGameVersion() == BaseGameVersion::pokefirered) { - tileset->callback_label = values->value(6); - tileset->metatile_attrs_label = values->value(7); + tileset->callback_label = values.value(6); + tileset->metatile_attrs_label = values.value(7); } else { - tileset->metatile_attrs_label = values->value(6); - tileset->callback_label = values->value(7); + tileset->metatile_attrs_label = values.value(6); + tileset->callback_label = values.value(7); } loadTilesetAssets(tileset); @@ -1450,15 +1450,15 @@ void Project::loadTilesetAssets(Tileset* tileset) { } QRegularExpression re("([a-z])([A-Z0-9])"); QString tilesetName = tileset->name; - QString dir_path = root + "/data/tilesets/" + category + "/" + tilesetName.replace("gTileset_", "").replace(re, "\\1_\\2").toLower(); + QString dir_path = root + "/data/tilesets/" + category + '/' + tilesetName.replace("gTileset_", "").replace(re, "\\1_\\2").toLower(); - QList *graphics = parser.parseAsm("data/tilesets/graphics.inc"); - QStringList *tiles_values = parser.getLabelValues(graphics, tileset->tiles_label); - QStringList *palettes_values = parser.getLabelValues(graphics, tileset->palettes_label); + const QList graphics = parser.parseAsm("data/tilesets/graphics.inc"); + const QStringList tiles_values = parser.getLabelValues(graphics, tileset->tiles_label); + const QStringList palettes_values = parser.getLabelValues(graphics, tileset->palettes_label); QString tiles_path; - if (!tiles_values->isEmpty()) { - tiles_path = root + "/" + tiles_values->value(0).section('"', 1, 1); + if (!tiles_values.isEmpty()) { + tiles_path = root + '/' + tiles_values.value(0).section('"', 1, 1); } else { tiles_path = dir_path + "/tiles.4bpp"; if (tileset->is_compressed == "TRUE") { @@ -1466,28 +1466,27 @@ void Project::loadTilesetAssets(Tileset* tileset) { } } - if (!palettes_values->isEmpty()) { - for (int i = 0; i < palettes_values->length(); i++) { - QString value = palettes_values->value(i); - tileset->palettePaths.append(this->fixPalettePath(root + "/" + value.section('"', 1, 1))); + if (!palettes_values.isEmpty()) { + for (const auto &value : palettes_values) { + tileset->palettePaths.append(this->fixPalettePath(root + '/' + value.section('"', 1, 1))); } } else { QString palettes_dir_path = dir_path + "/palettes"; for (int i = 0; i < 16; i++) { - tileset->palettePaths.append(palettes_dir_path + "/" + QString("%1").arg(i, 2, 10, QLatin1Char('0')) + ".pal"); + tileset->palettePaths.append(palettes_dir_path + '/' + QString("%1").arg(i, 2, 10, QLatin1Char('0')) + ".pal"); } } - QList *metatiles_macros = parser.parseAsm("data/tilesets/metatiles.inc"); - QStringList *metatiles_values = parser.getLabelValues(metatiles_macros, tileset->metatiles_label); - if (!metatiles_values->isEmpty()) { - tileset->metatiles_path = root + "/" + metatiles_values->value(0).section('"', 1, 1); + const QList metatiles_macros = parser.parseAsm("data/tilesets/metatiles.inc"); + const QStringList metatiles_values = parser.getLabelValues(metatiles_macros, tileset->metatiles_label); + if (!metatiles_values.isEmpty()) { + tileset->metatiles_path = root + '/' + metatiles_values.value(0).section('"', 1, 1); } else { tileset->metatiles_path = dir_path + "/metatiles.bin"; } - QStringList *metatile_attrs_values = parser.getLabelValues(metatiles_macros, tileset->metatile_attrs_label); - if (!metatile_attrs_values->isEmpty()) { - tileset->metatile_attrs_path = root + "/" + metatile_attrs_values->value(0).section('"', 1, 1); + const QStringList metatile_attrs_values = parser.getLabelValues(metatiles_macros, tileset->metatile_attrs_label); + if (!metatile_attrs_values.isEmpty()) { + tileset->metatile_attrs_path = root + '/' + metatile_attrs_values.value(0).section('"', 1, 1); } else { tileset->metatile_attrs_path = dir_path + "/metatile_attributes.bin"; }