Code Documentation 3.4
Social Network Visualizer
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1
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 <memory>
28
29class QXmlStreamReader;
30class QXmlStreamAttributes;
31
36struct Actor
37{
38 QString key;
39 int value;
40};
41
48{
49public:
50 bool operator()(Actor &t1, Actor &t2)
51 {
52 if (t1.value == t2.value)
53 return t1.key > t2.key;
54 // qDebug () << t1.value << " > " << t2.value << "?"
55 // << ( t1.value > t2.value ) ;
56 return t1.value > t2.value; // minimum priority
57 // Returns true if t2.value smaller than t1.value
58 }
59};
60
67class Parser : public QObject
68{
69 Q_OBJECT
70
71private:
72 bool validateAndInitialize(const QByteArray &rawData, const QString &delimiter, const bool &sm_has_labels, QStringList &nodeLabels);
73 void resetCounters();
74 bool doParseAdjacency(QTextStream &ts, const QString &delimiter, const QStringList &nodeLabels);
75 void createNodeWithDefaults(int nodeIndex, const QString &label);
76 bool createEdgesForRow(const QStringList &currentRow, int rowIndex);
77 bool containsReservedKeywords(const QString &str) const;
78
105
107 std::unique_ptr<SocNetV::IO::IGraphParseSink> m_ownedParseSink;
108 QHash<QString, int> nodeHash;
109 QHash<QString, QString> keyFor, keyName, keyType, keyDefaultValue;
110 QHash<QString, QString> edgesMissingNodesHash;
113 QXmlStreamReader *xml;
114 QString fileDirPath;
116 QString networkName;
138 double randX, randY;
139
140public:
141 Parser();
142 ~Parser();
144 void setOwnedParseSink(std::unique_ptr<SocNetV::IO::IGraphParseSink> sink);
145 void load(const QString &fileName, const QString &codecName, const int &defNodeSize,
146 const QString &defNodeColor, const QString &defNodeShape, const QString &defNodeNumberColor,
147 const int &defNodeNumberSize, const QString &defNodeLabelColor, const int &defNodeLabelSize,
148 const QString &defEdgeColor, const int &canvasWidth, const int &canvasHeight, const int &format,
149 const QString &delim = QString(), const int &sm_mode = 1, const bool &sm_has_labels = false);
150
151 bool parseAsPajek(const QByteArray &rawData);
152 bool parseAsAdjacency(const QByteArray &rawData, const ParseConfig &cfg, const QString &delimiter);
153 bool parseAsDot(const QByteArray &rawData);
154 QString preprocessDotContent(const QString &dotContent);
155 bool parseAsGraphML(const QByteArray &rawData);
156 bool parseAsGML(const QByteArray &rawData);
157 bool parseAsDL(const QByteArray &rawData);
158 bool parseAsEdgeListSimple(const QByteArray &rawData, const QString &delimiter);
159 bool parseAsEdgeListWeighted(const QByteArray &rawData, const QString &delimiter);
160 bool parseAsTwoModeSociomatrix(const QByteArray &rawData);
161
162 bool readDLKeywords(QStringList &strList,
163 int &N,
164 int &NM,
165 int &NR,
166 int &NC,
167 bool &fullmatrixFormat,
168 bool &edgelist1Format,
169 bool &diagonalPresent);
170
171 void readDotProperties(QString str, qreal &, QString &label,
172 QString &shape, QString &color, QString &fontName,
173 QString &fontColor);
174
175 bool readGraphML(QXmlStreamReader &);
176 void readGraphMLElementGraph(QXmlStreamReader &);
177 void readGraphMLElementNode(QXmlStreamReader &);
178 void endGraphMLElementNode(QXmlStreamReader &);
179 void readGraphMLElementEdge(QXmlStreamAttributes &);
180 void endGraphMLElementEdge(QXmlStreamReader &);
181 void readGraphMLElementData(QXmlStreamReader &);
182 void readGraphMLElementUnknown(QXmlStreamReader &);
183 void readGraphMLElementKey(QXmlStreamAttributes &);
184 void readGraphMLElementDefaultValue(QXmlStreamReader &);
185 void readGraphMLElementNodeGraphics(QXmlStreamReader &);
186 void readGraphMLElementEdgeGraphics(QXmlStreamReader &);
188
189 bool isComment(QString str);
190 void createRandomNodes(const int &fixedNum = 1, const QString &label = QString(),
191 const int &newNodes = 1);
192
193 static QString normalizeQuotedIdentifier(const QString &s);
194
195signals:
196
197 void finished(QString);
198};
199
200#endif
The CompareActors class Implements a min-priority queue Used while parsing weighted edge lists.
Definition parser.h:48
bool operator()(Actor &t1, Actor &t2)
Definition parser.h:50
Defines a class for network file loading and parsing.
Definition parser.h:68
QString initNodeCustomIcon
Definition parser.h:117
void readGraphMLElementNodeGraphics(QXmlStreamReader &)
Reads node graphics data and properties: label, color, shape, size, coordinates, etc.
Definition parser_graphml.cpp:840
int totalNodes
Definition parser.h:128
bool missingNode
Definition parser.h:133
QString initEdgeLabel
Definition parser.h:119
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:951
qreal bez_p1_y
Definition parser.h:132
QHash< QString, QString > edgesMissingNodesHash
Definition parser.h:110
QString initNodeNumberColor
Definition parser.h:118
Parser()
Definition parser.cpp:32
int nodeSize
Definition parser.h:130
QHash< QString, QString > keyName
Definition parser.h:109
QString networkName
Definition parser.h:116
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:133
qreal edgeWeight
Definition parser.h:131
bool fileContainsLinkLabels
Definition parser.h:137
int initNodeNumberSize
Definition parser.h:129
QString initNodeShape
Definition parser.h:117
void readGraphMLElementNode(QXmlStreamReader &)
Reads basic node attributes and sets the nodeNumber.
Definition parser_graphml.cpp:457
QString key_type
Definition parser.h:125
int gwHeight
Definition parser.h:127
bool bezier
Definition parser.h:134
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:88
QString edge_weight
Definition parser.h:126
~Parser()
Definition parser.cpp:37
QString initNodeColor
Definition parser.h:117
std::unique_ptr< SocNetV::IO::IGraphParseSink > m_ownedParseSink
Definition parser.h:107
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:800
QMultiMap< int, int > firstModeMultiMap
Definition parser.h:112
int gwWidth
Definition parser.h:127
qreal bez_p1_x
Definition parser.h:132
int fileFormat
Definition parser.h:128
bool parseAsEdgeListWeighted(const QByteArray &rawData, const QString &delimiter)
Parses the data as weighted edgelist formatted network.
Definition parser_edgelist.cpp:56
double randY
Definition parser.h:138
qreal initEdgeWeight
Definition parser.h:131
void setOwnedParseSink(std::unique_ptr< SocNetV::IO::IGraphParseSink > sink)
Definition parser.cpp:64
QString initEdgeColor
Definition parser.h:119
void readGraphMLElementGraph(QXmlStreamReader &)
Reads a graph definition.
Definition parser_graphml.cpp:287
QString key_name
Definition parser.h:125
void createMissingNodeEdges()
Creates any missing node edges.
Definition parser_graphml.cpp:1044
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:498
bool fileContainsNodeCoords
Definition parser.h:136
QMultiMap< int, int > secondModeMultiMap
Definition parser.h:112
QHash< QString, int > nodeHash
Definition parser.h:108
int edgeDirType
Definition parser.h:128
QHash< QString, QString > keyDefaultValue
Definition parser.h:109
QString edge_source
Definition parser.h:126
void readGraphMLElementDefaultValue(QXmlStreamReader &)
Reads default key values.
Definition parser_graphml.cpp:371
QString fileDirPath
Definition parser.h:114
QString errorMessage
Definition parser.h:120
QString nodeIconPath
Definition parser.h:122
QString key_value
Definition parser.h:125
QString edgeLabel
Definition parser.h:121
int target
Definition parser.h:130
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:129
static QString normalizeQuotedIdentifier(const QString &s)
Normalizes a quoted identifier from external network formats.
Definition parser_pajek.cpp:854
QString node_id
Definition parser.h:126
QString nodeNumberColor
Definition parser.h:123
int source
Definition parser.h:130
bool conv_OK
Definition parser.h:134
int totalLinks
Definition parser.h:128
QString edgeColor
Definition parser.h:121
QXmlStreamReader * xml
Definition parser.h:113
qreal arrowSize
Definition parser.h:131
QString edge_id
Definition parser.h:126
QString delimiter
Definition parser.h:119
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:494
QHash< QString, QString > nodeCustomAttributes
Definition parser.h:124
bool bool_key
Definition parser.h:135
QString key_what
Definition parser.h:125
bool fileContainsNodeColors
Definition parser.h:135
qreal bez_p2_y
Definition parser.h:132
void readGraphMLElementEdgeGraphics(QXmlStreamReader &)
Reads edge graphics data and properties: path, linestyle,width, arrows, etc.
Definition parser_graphml.cpp:923
bool readGraphML(QXmlStreamReader &)
Checks the xml token name and calls the appropriate function.
Definition parser_graphml.cpp:192
QStringList edgeMissingNodesList
Definition parser.h:111
int nodeLabelSize
Definition parser.h:130
void readGraphMLElementData(QXmlStreamReader &)
Reads data for edges and nodes.
Definition parser_graphml.cpp:659
QString m_textCodecName
Definition parser.h:115
bool doParseAdjacency(QTextStream &ts, const QString &delimiter, const QStringList &nodeLabels)
Definition parser_adjacency.cpp:203
QString edge_directed
Definition parser.h:126
int nodeNumberSize
Definition parser.h:129
QString initNodeLabelColor
Definition parser.h:118
int two_sm_mode
Definition parser.h:128
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:121
void readGraphMLElementEdge(QXmlStreamAttributes &)
Reads basic edge creation properties.
Definition parser_graphml.cpp:559
bool bool_node
Definition parser.h:135
bool fileContainsLinkColors
Definition parser.h:136
bool parseAsGML(const QByteArray &rawData)
Parses the data as GML formatted network.
Definition parser_gml.cpp:54
QString key_id
Definition parser.h:125
void readGraphMLElementUnknown(QXmlStreamReader &)
Trivial call for unknown elements.
Definition parser_graphml.cpp:1035
QStringList edgeMissingNodesListData
Definition parser.h:111
void readDotProperties(QString str, qreal &, QString &label, QString &shape, QString &color, QString &fontName, QString &fontColor)
Reads the properties of a dot element with improved handling of quoted values.
Definition parser_dot.cpp:598
bool bool_edge
Definition parser.h:135
QHash< QString, QString > keyType
Definition parser.h:109
QString nodeLabelColor
Definition parser.h:123
bool arrows
Definition parser.h:134
qreal bez_p2_x
Definition parser.h:132
QString edgeType
Definition parser.h:121
int initNodeSize
Definition parser.h:129
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:124
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:106
QHash< QString, QString > keyFor
Definition parser.h:109
QStringList relationsList
Definition parser.h:111
void endGraphMLElementEdge(QXmlStreamReader &)
Signals for a new edge to be created/added.
Definition parser_graphml.cpp:631
void setParseSink(SocNetV::IO::IGraphParseSink *sink)
Definition parser.cpp:60
double randX
Definition parser.h:138
QString nodeShape
Definition parser.h:121
QString nodeColor
Definition parser.h:121
QString edge_target
Definition parser.h:126
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:37
QString key
Definition parser.h:38
int value
Definition parser.h:39
ParseConfig boundary - the immutable config object.
Definition parser.h:83
int initNodeNumberSize
Definition parser.h:96
QString initNodeLabelColor
Definition parser.h:97
bool sm_has_labels
Definition parser.h:90
int sm_mode
Definition parser.h:89
QString initNodeShape
Definition parser.h:94
QString delim
Definition parser.h:88
QString codecName
Definition parser.h:85
int gwHeight
Definition parser.h:103
int initNodeSize
Definition parser.h:92
QString fileName
Definition parser.h:84
int gwWidth
Definition parser.h:102
QString initNodeNumberColor
Definition parser.h:95
QString initEdgeColor
Definition parser.h:100
int fileFormat
Definition parser.h:87
QString initNodeColor
Definition parser.h:93
int initNodeLabelSize
Definition parser.h:98