mirror of
https://github.com/huderlem/porymap.git
synced 2026-08-20 07:36:31 -05:00
move source parsing functions from project to parseutil
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QRegularExpression>
|
||||
|
||||
enum TokenType {
|
||||
Number,
|
||||
@@ -14,29 +15,6 @@ enum TokenType {
|
||||
Error,
|
||||
};
|
||||
|
||||
class DebugInfo {
|
||||
public:
|
||||
DebugInfo(QString file, QStringList lines) {
|
||||
this->file = file;
|
||||
this->lines = lines;
|
||||
};
|
||||
QString file;
|
||||
int line;
|
||||
bool err;
|
||||
QStringList lines;
|
||||
void error(QString expression, QString token) {
|
||||
int lineNo = 0;
|
||||
for (QString line_ : lines) {
|
||||
lineNo++;
|
||||
if (line_.contains(expression)) {
|
||||
this->line = lineNo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
logError(QString("%1:%2: unknown identifier found in expression: '%3'.").arg(file).arg(line).arg(token));
|
||||
}
|
||||
};
|
||||
|
||||
class Token {
|
||||
public:
|
||||
Token(QString value = "", QString type = "") {
|
||||
@@ -60,15 +38,29 @@ public:
|
||||
class ParseUtil
|
||||
{
|
||||
public:
|
||||
ParseUtil(QString, QString);
|
||||
ParseUtil();
|
||||
void set_root(QString);
|
||||
QString readTextFile(QString);
|
||||
void strip_comment(QString*);
|
||||
QList<QStringList>* parseAsm(QString);
|
||||
int evaluateDefine(QString, QMap<QString, int>*);
|
||||
DebugInfo *debug;
|
||||
QStringList readCArray(QString text, QString label);
|
||||
QMap<QString, QString> readNamedIndexCArray(QString text, QString label);
|
||||
QString readCIncbin(QString text, QString label);
|
||||
QMap<QString, int> readCDefines(QString filename, QStringList prefixes);
|
||||
void readCDefinesSorted(QString, QStringList, QStringList*);
|
||||
QList<QStringList>* getLabelMacros(QList<QStringList>*, QString);
|
||||
QStringList* getLabelValues(QList<QStringList>*, QString);
|
||||
bool tryParseJsonFile(QJsonDocument *out, QString filepath);
|
||||
|
||||
private:
|
||||
QString root;
|
||||
QString text;
|
||||
QString file;
|
||||
QList<Token> tokenizeExpression(QString expression, QMap<QString, int>* knownIdentifiers);
|
||||
QList<Token> generatePostfix(QList<Token> tokens);
|
||||
int evaluatePostfix(QList<Token> postfix);
|
||||
void error(QString message, QString expression);
|
||||
};
|
||||
|
||||
#endif // PARSEUTIL_H
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "blockdata.h"
|
||||
#include "heallocation.h"
|
||||
#include "event.h"
|
||||
#include "parseutil.h"
|
||||
|
||||
#include <QStringList>
|
||||
#include <QList>
|
||||
@@ -46,6 +47,9 @@ public:
|
||||
QMap<QString, int> metatileBehaviorMap;
|
||||
QMap<int, QString> metatileBehaviorMapInverse;
|
||||
QMap<QString, QString> facingDirections;
|
||||
ParseUtil parser;
|
||||
|
||||
void set_root(QString);
|
||||
|
||||
struct DataQualifiers
|
||||
{
|
||||
@@ -66,7 +70,6 @@ public:
|
||||
Blockdata* readBlockdata(QString);
|
||||
void loadBlockdata(Map*);
|
||||
|
||||
QString readTextFile(QString path);
|
||||
void saveTextFile(QString path, QString text);
|
||||
void appendTextFile(QString path, QString text);
|
||||
void deleteFile(QString path);
|
||||
@@ -80,8 +83,6 @@ public:
|
||||
QString readMapLayoutId(QString map_name);
|
||||
QString readMapLocation(QString map_name);
|
||||
|
||||
QList<QStringList>* getLabelMacros(QList<QStringList>*, QString);
|
||||
QStringList* getLabelValues(QList<QStringList>*, QString);
|
||||
QMap<QString, bool> getTopLevelMapFields();
|
||||
bool loadMapData(Map*);
|
||||
void readMapLayouts();
|
||||
@@ -107,7 +108,6 @@ public:
|
||||
void saveTilesetTilesImage(Tileset*);
|
||||
void saveTilesetPalettes(Tileset*, bool);
|
||||
|
||||
QList<QStringList>* parseAsm(QString text);
|
||||
QStringList getSongNames();
|
||||
QStringList getVisibilities();
|
||||
QMap<QString, QStringList> getTilesetLabels();
|
||||
@@ -136,22 +136,15 @@ public:
|
||||
|
||||
void saveMapHealEvents(Map *map);
|
||||
|
||||
QStringList readCArray(QString text, QString label);
|
||||
QString readCIncbin(QString text, QString label);
|
||||
QMap<QString, int> readCDefines(QString filename, QStringList prefixes);
|
||||
QMap<QString, QString> readNamedIndexCArray(QString text, QString label);
|
||||
|
||||
static int getNumTilesPrimary();
|
||||
static int getNumTilesTotal();
|
||||
static int getNumMetatilesPrimary();
|
||||
static int getNumMetatilesTotal();
|
||||
static int getNumPalettesPrimary();
|
||||
static int getNumPalettesTotal();
|
||||
static bool tryParseJsonFile(QJsonDocument *out, QString filepath);
|
||||
|
||||
private:
|
||||
void updateMapLayout(Map*);
|
||||
void readCDefinesSorted(QString, QStringList, QStringList*);
|
||||
void readCDefinesSorted(QString, QStringList, QStringList*, QString, int);
|
||||
|
||||
void setNewMapHeader(Map* map, int mapIndex);
|
||||
void setNewMapLayout(Map* map);
|
||||
|
||||
Reference in New Issue
Block a user