Code Documentation 3.7
Social Network Visualizer
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1
15
16#ifndef PARSER_H
17#define PARSER_H
18
19#include <QThread>
20#include <QHash>
21#include <QStringList>
22#include <QPointF>
23#include <QObject>
24#include <QMultiMap>
25#include <QDebug>
26#include <QLoggingCategory>
27#include <memory>
29
30class QXmlStreamReader;
31class QXmlStreamAttributes;
32
33// WS14 L3: shared across parser.cpp and all parser_*.cpp files (they all include this header) --
34// one category for the whole parsing subsystem rather than one per format, since a user debugging
35// a load issue wants "parser debug" on regardless of which format it turns out to be.
36Q_DECLARE_LOGGING_CATEGORY(lcParser)
37
38
42struct Actor
43{
44 QString key;
45 int value;
46};
47
54{
55public:
56 bool operator()(Actor &t1, Actor &t2)
57 {
58 if (t1.value == t2.value)
59 return t1.key > t2.key;
60 return t1.value > t2.value; // minimum priority
61 // Returns true if t2.value smaller than t1.value
62 }
63};
64
71class Parser : public QObject
72{
73 Q_OBJECT
74
75private:
76 bool validateAndInitialize(const QByteArray &rawData, const QString &delimiter, const bool &sm_has_labels, QStringList &nodeLabels);
77 void resetCounters();
78 bool doParseAdjacency(QTextStream &ts, const QString &delimiter, const QStringList &nodeLabels);
79 void createNodeWithDefaults(int nodeIndex, const QString &label);
80 bool createEdgesForRow(const QStringList &currentRow, int rowIndex);
81 bool containsReservedKeywords(const QString &str) const;
82
109
111 std::unique_ptr<SocNetV::IO::IGraphParseSink> m_ownedParseSink;
112 QHash<QString, int> nodeHash;
113 QHash<QString, QString> keyFor, keyName, keyType, keyDefaultValue;
114 QHash<QString, QString> edgesMissingNodesHash;
117 QXmlStreamReader *xml;
118 QString fileDirPath;
120 QString networkName;
129 QHash<QString, QString> edgeCustomAttributes;
143 double randX, randY;
144
145public:
146 Parser();
147 ~Parser();
149 void setOwnedParseSink(std::unique_ptr<SocNetV::IO::IGraphParseSink> sink);
150 void load(const QString &fileName, const QString &codecName, const int &defNodeSize,
151 const QString &defNodeColor, const QString &defNodeShape, const QString &defNodeNumberColor,
152 const int &defNodeNumberSize, const QString &defNodeLabelColor, const int &defNodeLabelSize,
153 const QString &defEdgeColor, const int &canvasWidth, const int &canvasHeight, const int &format,
154 const QString &delim = QString(), const int &sm_mode = 1, const bool &sm_has_labels = false);
155
156 bool parseAsPajek(const QByteArray &rawData);
157 bool parseAsAdjacency(const QByteArray &rawData, const ParseConfig &cfg, const QString &delimiter);
158 bool parseAsDot(const QByteArray &rawData);
159 QString preprocessDotContent(const QString &dotContent);
160 bool parseAsGraphML(const QByteArray &rawData);
161 bool parseAsGML(const QByteArray &rawData);
162 bool parseAsDL(const QByteArray &rawData);
163 bool parseAsEdgeListSimple(const QByteArray &rawData, const QString &delimiter);
164 bool parseAsEdgeListWeighted(const QByteArray &rawData, const QString &delimiter);
165 bool parseAsTwoModeSociomatrix(const QByteArray &rawData);
166
167 bool readDLKeywords(QStringList &strList,
168 int &N,
169 int &NM,
170 int &NR,
171 int &NC,
172 bool &fullmatrixFormat,
173 bool &edgelist1Format,
174 bool &diagonalPresent);
175
176 void readDotProperties(QString str, qreal &nValue, QString &label,
177 QString &shape, QString &color, QString &fontName,
178 QString &fontColor,
179 QHash<QString, QString> &customAttrs);
180
181 bool readGraphML(QXmlStreamReader &);
182 void readGraphMLElementGraph(QXmlStreamReader &);
183 void readGraphMLElementNode(QXmlStreamReader &);
184 void endGraphMLElementNode(QXmlStreamReader &);
185 void readGraphMLElementEdge(QXmlStreamAttributes &);
186 void endGraphMLElementEdge(QXmlStreamReader &);
187 void readGraphMLElementData(QXmlStreamReader &);
188 void readGraphMLElementUnknown(QXmlStreamReader &);
189 void readGraphMLElementKey(QXmlStreamAttributes &);
190 void readGraphMLElementDefaultValue(QXmlStreamReader &);
191 void readGraphMLElementNodeGraphics(QXmlStreamReader &);
192 void readGraphMLElementEdgeGraphics(QXmlStreamReader &);
194
195 bool isComment(QString str);
196 void createRandomNodes(const int &fixedNum = 1, const QString &label = QString(),
197 const int &newNodes = 1);
198
199 static QString normalizeQuotedIdentifier(const QString &s);
200
201signals:
202
203 void finished(QString);
204};
205
206#endif
The CompareActors class Implements a min-priority queue Used while parsing weighted edge lists.
Definition parser.h:54
bool operator()(Actor &t1, Actor &t2)
Definition parser.h:56
QString initNodeCustomIcon
Definition parser.h:121
void readGraphMLElementNodeGraphics(QXmlStreamReader &)
Reads node graphics data and properties: label, color, shape, size, coordinates, etc.
Definition parser_graphml.cpp:838
int totalNodes
Definition parser.h:133
bool missingNode
Definition parser.h:138
QString initEdgeLabel
Definition parser.h:123
bool parseAsGraphML(const QByteArray &rawData)
Parses the data as GraphML (not GML) formatted network.
Definition parser_graphml.cpp:32
void createRandomNodes(const int &fixedNum=1, const QString &label=QString(), const int &newNodes=1)
Signals to create either a single new node (numbered fixedNum) or multiple new nodes (numbered from 1...
Definition parser_dl.cpp:975
qreal bez_p1_y
Definition parser.h:137
QHash< QString, QString > edgesMissingNodesHash
Definition parser.h:114
QString initNodeNumberColor
Definition parser.h:122
Parser()
Definition parser.cpp:34
int nodeSize
Definition parser.h:135
QHash< QString, QString > keyName
Definition parser.h:113
QString networkName
Definition parser.h:120
bool parseAsTwoModeSociomatrix(const QByteArray &rawData)
Parses a two-mode (bipartite) sociomatrix file (.2sm / .aff).
Definition parser_adjacency.cpp:385
bool parseAsDot(const QByteArray &rawData)
Parses the data as GraphViz (DOT) formatted network.
Definition parser_dot.cpp:55
bool containsReservedKeywords(const QString &str) const
Definition parser_adjacency.cpp:343
bool createEdgesForRow(const QStringList &currentRow, int rowIndex)
Definition parser_adjacency.cpp:297
bool fileLoaded
Definition parser.h:138
qreal edgeWeight
Definition parser.h:136
bool fileContainsLinkLabels
Definition parser.h:142
int initNodeNumberSize
Definition parser.h:134
QString initNodeShape
Definition parser.h:121
void readGraphMLElementNode(QXmlStreamReader &)
Reads basic node attributes and sets the nodeNumber.
Definition parser_graphml.cpp:457
QString key_type
Definition parser.h:130
int gwHeight
Definition parser.h:132
bool bezier
Definition parser.h:139
void finished(QString)
bool parseAsDL(const QByteArray &rawData)
Parses the given raw data as DL formatted (UCINET) data.
Definition parser_dl.cpp:53
void load(const QString &fileName, const QString &codecName, const int &defNodeSize, const QString &defNodeColor, const QString &defNodeShape, const QString &defNodeNumberColor, const int &defNodeNumberSize, const QString &defNodeLabelColor, const int &defNodeLabelSize, const QString &defEdgeColor, const int &canvasWidth, const int &canvasHeight, const int &format, const QString &delim=QString(), const int &sm_mode=1, const bool &sm_has_labels=false)
Loads the data of the given network file, and calls the relevant method to parse it.
Definition parser.cpp:90
QString edge_weight
Definition parser.h:131
~Parser()
Definition parser.cpp:39
QString initNodeColor
Definition parser.h:121
std::unique_ptr< SocNetV::IO::IGraphParseSink > m_ownedParseSink
Definition parser.h:111
bool readDLKeywords(QStringList &strList, int &N, int &NM, int &NR, int &NC, bool &fullmatrixFormat, bool &edgelist1Format, bool &diagonalPresent)
Reads and parses DL keywords from a given QStringList.
Definition parser_dl.cpp:824
QMultiMap< int, int > firstModeMultiMap
Definition parser.h:116
int gwWidth
Definition parser.h:132
qreal bez_p1_x
Definition parser.h:137
int fileFormat
Definition parser.h:133
bool parseAsEdgeListWeighted(const QByteArray &rawData, const QString &delimiter)
Parses the data as weighted edgelist formatted network.
Definition parser_edgelist.cpp:56
void readDotProperties(QString str, qreal &nValue, QString &label, QString &shape, QString &color, QString &fontName, QString &fontColor, QHash< QString, QString > &customAttrs)
Reads the properties of a dot element with improved handling of quoted values.
Definition parser_dot.cpp:638
double randY
Definition parser.h:143
qreal initEdgeWeight
Definition parser.h:136
void setOwnedParseSink(std::unique_ptr< SocNetV::IO::IGraphParseSink > sink)
Definition parser.cpp:66
QString initEdgeColor
Definition parser.h:123
void readGraphMLElementGraph(QXmlStreamReader &)
Reads a graph definition.
Definition parser_graphml.cpp:287
QString key_name
Definition parser.h:130
void createMissingNodeEdges()
Creates any missing node edges.
Definition parser_graphml.cpp:1042
bool validateAndInitialize(const QByteArray &rawData, const QString &delimiter, const bool &sm_has_labels, QStringList &nodeLabels)
Definition parser_adjacency.cpp:112
QString preprocessDotContent(const QString &dotContent)
Preprocesses the content of a DOT file to normalize its formatting, improve parsing and readability.
Definition parser_dot.cpp:538
bool fileContainsNodeCoords
Definition parser.h:141
QMultiMap< int, int > secondModeMultiMap
Definition parser.h:116
QHash< QString, int > nodeHash
Definition parser.h:112
int edgeDirType
Definition parser.h:133
QHash< QString, QString > keyDefaultValue
Definition parser.h:113
QString edge_source
Definition parser.h:131
void readGraphMLElementDefaultValue(QXmlStreamReader &)
Reads default key values.
Definition parser_graphml.cpp:371
QString fileDirPath
Definition parser.h:118
QString errorMessage
Definition parser.h:124
QString nodeIconPath
Definition parser.h:126
QString key_value
Definition parser.h:130
QString edgeLabel
Definition parser.h:125
int target
Definition parser.h:135
bool parseAsAdjacency(const QByteArray &rawData, const ParseConfig &cfg, const QString &delimiter)
Definition parser_adjacency.cpp:61
void createNodeWithDefaults(int nodeIndex, const QString &label)
Definition parser_adjacency.cpp:274
int initNodeLabelSize
Definition parser.h:134
static QString normalizeQuotedIdentifier(const QString &s)
Normalizes a quoted identifier from external network formats.
Definition parser_pajek.cpp:850
QString node_id
Definition parser.h:131
QString nodeNumberColor
Definition parser.h:127
int source
Definition parser.h:135
bool conv_OK
Definition parser.h:139
int totalLinks
Definition parser.h:133
QString edgeColor
Definition parser.h:125
QXmlStreamReader * xml
Definition parser.h:117
qreal arrowSize
Definition parser.h:136
QString edge_id
Definition parser.h:131
QString delimiter
Definition parser.h:123
bool isComment(QString str)
Helper. Checks if the string parameter is a comment (starts with a known char, i.e #).
Definition parser_common.cpp:28
void endGraphMLElementNode(QXmlStreamReader &)
Signals to create a new node.
Definition parser_graphml.cpp:490
QHash< QString, QString > nodeCustomAttributes
Definition parser.h:128
bool bool_key
Definition parser.h:140
QString key_what
Definition parser.h:130
bool fileContainsNodeColors
Definition parser.h:140
qreal bez_p2_y
Definition parser.h:137
void readGraphMLElementEdgeGraphics(QXmlStreamReader &)
Reads edge graphics data and properties: path, linestyle,width, arrows, etc.
Definition parser_graphml.cpp:921
bool readGraphML(QXmlStreamReader &)
Checks the xml token name and calls the appropriate function.
Definition parser_graphml.cpp:192
QStringList edgeMissingNodesList
Definition parser.h:115
int nodeLabelSize
Definition parser.h:135
void readGraphMLElementData(QXmlStreamReader &)
Reads data for edges and nodes.
Definition parser_graphml.cpp:651
QString m_textCodecName
Definition parser.h:119
QHash< QString, QString > edgeCustomAttributes
Definition parser.h:129
bool doParseAdjacency(QTextStream &ts, const QString &delimiter, const QStringList &nodeLabels)
Definition parser_adjacency.cpp:203
QString edge_directed
Definition parser.h:131
int nodeNumberSize
Definition parser.h:134
QString initNodeLabelColor
Definition parser.h:122
int two_sm_mode
Definition parser.h:133
bool parseAsEdgeListSimple(const QByteArray &rawData, const QString &delimiter)
Parses the data as simple edgelist formatted.
Definition parser_edgelist.cpp:375
QString nodeLabel
Definition parser.h:125
void readGraphMLElementEdge(QXmlStreamAttributes &)
Reads basic edge creation properties.
Definition parser_graphml.cpp:555
bool bool_node
Definition parser.h:140
bool fileContainsLinkColors
Definition parser.h:141
bool parseAsGML(const QByteArray &rawData)
Parses the data as GML formatted network.
Definition parser_gml.cpp:54
QString key_id
Definition parser.h:130
void readGraphMLElementUnknown(QXmlStreamReader &)
Trivial call for unknown elements.
Definition parser_graphml.cpp:1033
QStringList edgeMissingNodesListData
Definition parser.h:115
bool bool_edge
Definition parser.h:140
QHash< QString, QString > keyType
Definition parser.h:113
QString nodeLabelColor
Definition parser.h:127
bool arrows
Definition parser.h:139
qreal bez_p2_x
Definition parser.h:137
QString edgeType
Definition parser.h:125
int initNodeSize
Definition parser.h:134
void resetCounters()
Definition parser_adjacency.cpp:184
void readGraphMLElementKey(QXmlStreamAttributes &)
Reads a key definition.
Definition parser_graphml.cpp:336
QHash< QString, QString > initNodeCustomAttributes
Definition parser.h:128
bool parseAsPajek(const QByteArray &rawData)
Parse a Pajek-formatted network from raw bytes.
Definition parser_pajek.cpp:50
SocNetV::IO::IGraphParseSink * m_parseSink
Definition parser.h:110
QHash< QString, QString > keyFor
Definition parser.h:113
QStringList relationsList
Definition parser.h:115
void endGraphMLElementEdge(QXmlStreamReader &)
Signals for a new edge to be created/added.
Definition parser_graphml.cpp:623
void setParseSink(SocNetV::IO::IGraphParseSink *sink)
Definition parser.cpp:62
double randX
Definition parser.h:143
QString nodeShape
Definition parser.h:125
QString nodeColor
Definition parser.h:125
QString edge_target
Definition parser.h:131
Explicit mutation surface for parse-time graph construction.
Definition graph_parse_sink.h:33
Transitional mutation sink interface for Parser -> Graph IO operations.
The Actor struct Used while parsing edge lists.
Definition parser.h:43
QString key
Definition parser.h:44
int value
Definition parser.h:45
ParseConfig boundary - the immutable config object.
Definition parser.h:87
int initNodeNumberSize
Definition parser.h:100
QString initNodeLabelColor
Definition parser.h:101
bool sm_has_labels
Definition parser.h:94
int sm_mode
Definition parser.h:93
QString initNodeShape
Definition parser.h:98
QString delim
Definition parser.h:92
QString codecName
Definition parser.h:89
int gwHeight
Definition parser.h:107
int initNodeSize
Definition parser.h:96
QString fileName
Definition parser.h:88
int gwWidth
Definition parser.h:106
QString initNodeNumberColor
Definition parser.h:99
QString initEdgeColor
Definition parser.h:104
int fileFormat
Definition parser.h:91
QString initNodeColor
Definition parser.h:97
int initNodeLabelSize
Definition parser.h:102