• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdesdk API Reference
  • KDE Home
  • Contact Us
 

okteta

  • sources
  • kde-4.12
  • kdesdk
  • okteta
  • kasten
  • controllers
  • view
  • structures
  • parsers
parserutils.h
Go to the documentation of this file.
1 /*
2  * This file is part of the Okteta Kasten Framework, made within the KDE community.
3  *
4  * Copyright 2012 Alex Richardson <alex.richardson@gmx.de>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) version 3, or any
10  * later version accepted by the membership of KDE e.V. (or its
11  * successor approved by the membership of KDE e.V.), which shall
12  * act as a proxy defined in Section 6 of version 3 of the license.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
21  */
22 #ifndef PARSERUTILS_H_
23 #define PARSERUTILS_H_
24 
25 #include <QDebug>
26 #include <QStringList>
27 #include <KLocalizedString>
28 
29 #include "../datatypes/datainformation.h"
30 #include "../datatypes/strings/stringdatainformation.h"
31 #include "../script/scriptlogger.h"
32 
33 //forward declare so I don't have to repeat in all the parsers
34 class ArrayDataInformation;
35 class PrimitiveDataInformation;
36 class AbstractBitfieldDataInformation;
37 class StructureDataInformation;
38 class UnionDataInformation;
39 class EnumDataInformation;
40 class StringDataInformation;
41 class TaggedUnionDataInformation;
42 class PointerDataInformation;
43 
44 class QScriptValue;
45 class QScriptEngine;
46 
48 struct ParserInfo
49 {
50  inline ParserInfo(const QString& name, ScriptLogger* logger, DataInformation* parent, QScriptEngine* engine)
51  : name(name), logger(logger), parent(parent), engine(engine)
52  {
53  Q_CHECK_PTR(logger);
54  }
55  inline ParserInfo(const ParserInfo& i)
56  : name(i.name), logger(i.logger), parent(i.parent), engine(i.engine) {}
57  inline ~ParserInfo() {}
58  QString name;
59  ScriptLogger* logger;
60  DataInformation* parent;
61  QScriptEngine* engine;
62 
63  inline QString context() const
64  {
65  return parent ? parent->fullObjectPath() + QLatin1Char('.') + name : name;
66  }
67  inline QDebug info() const { return logger->info(context()); }
68  inline QDebug warn() const { return logger->warn(context()); }
69  inline QDebug error() const { return logger->error(context()); }
70 };
71 
72 class ChildrenParser {
73 public:
74  virtual DataInformation* next() = 0;
75  virtual bool hasNext() = 0;
76  virtual void setParent(DataInformation* parent) = 0;
77  virtual ~ChildrenParser() {};
78 };
79 
83 template<typename T>
84 struct ParsedNumber {
85  ParsedNumber() : value(0), isValid(false) {}
86  ParsedNumber(T val, const QString& str, bool ok) : string(str), value(val), isValid(ok) {}
87  QString string;
88  T value;
89  bool isValid;
90  static ParsedNumber<T> badInput(const QString& str) { return ParsedNumber<T>(T(), str, false); }
91  inline bool isError() { return !isValid && !string.isEmpty(); }
92  inline bool isEmpty() { Q_ASSERT(!isValid); return string.isEmpty(); }
93 };
94 
95 namespace ParserStrings {
96  const QString TYPE_ARRAY = QLatin1String("array");
97  const QString TYPE_BITFIELD = QLatin1String("bitfield");
98  const QString TYPE_ENUM = QLatin1String("enum");
99  const QString TYPE_FLAGS = QLatin1String("flags");
100  const QString TYPE_PRIMITIVE = QLatin1String("primitive");
101  const QString TYPE_STRING = QLatin1String("string");
102  const QString TYPE_STRUCT = QLatin1String("struct");
103  const QString TYPE_UNION = QLatin1String("union");
104  const QString TYPE_POINTER = QLatin1String("pointer");
105  const QString TYPE_TAGGED_UNION = QLatin1String("taggedUnion");
107  const QString TYPE_ENUMDEF = QLatin1String("enumDef");
108  const QString TYPE_ALTERNATIVES = QLatin1String("alternatives");
109  const QString TYPE_GROUP= QLatin1String("group");
110 
111  //lock offset
112  const QString PROPERTY_DEFAULT_LOCK_OFFSET = QLatin1String("defaultLockOffset");
113  //all types
114  const QString PROPERTY_NAME = QLatin1String("name");
115  const QString PROPERTY_BYTEORDER = QLatin1String("byteOrder");
116  const QString PROPERTY_PARENT= QLatin1String("parent");
117  const QString PROPERTY_VALIDATION_ERROR = QLatin1String("validationError");
118  const QString PROPERTY_VALID = QLatin1String("valid");
119  const QString PROPERTY_ABLE_TO_READ = QLatin1String("wasAbleToRead");
120  const QString PROPERTY_UPDATE_FUNC = QLatin1String("updateFunc");
121  const QString PROPERTY_VALIDATION_FUNC = QLatin1String("validationFunc");
122  const QString PROPERTY_TO_STRING_FUNC = QLatin1String("toStringFunc");
123  const QString PROPERTY_DATATYPE = QLatin1String("datatype");
124  const QString PROPERTY_CUSTOM_TYPE_NAME = QLatin1String("typeName");
125  //enum
126  const QString PROPERTY_ENUM_VALUES = QLatin1String("enumValues");
127  //this one is javascript only
128  const QString PROPERTY_ENUM_NAME = QLatin1String("enumName");
129  //array/bitfield
130  const QString PROPERTY_TYPE = QLatin1String("type");
131  //array
132  const QString PROPERTY_LENGTH = QLatin1String("length");
133  //bitfield
134  const QString PROPERTY_WIDTH = QLatin1String("width");
135  //struct/union
136  const QString PROPERTY_CHILDREN = QLatin1String("fields");
137  const QString PROPERTY_CHILD_COUNT = QLatin1String("childCount");
138  const QString PROPERTY_CHILD = QLatin1String("child");
139  //strings
140  const QString PROPERTY_CHAR_COUNT = QLatin1String("charCount");
141  const QString PROPERTY_BYTE_COUNT = QLatin1String("byteCount");
142  const QString PROPERTY_MAX_CHAR_COUNT = QLatin1String("maxCharCount");
143  const QString PROPERTY_MAX_BYTE_COUNT = QLatin1String("maxByteCount");
144  const QString PROPERTY_TERMINATED_BY = QLatin1String("terminatedBy");
145  const QString PROPERTY_ENCODING = QLatin1String("encoding");
146  //primitive
147  const QString PROPERTY_VALUE = QLatin1String("value");
148  //pointer
149  const QString PROPERTY_TARGET = QLatin1String("target");
150  //tagged union
151  const QString PROPERTY_ALTERNATIVES = QLatin1String("alternatives");
152  const QString PROPERTY_DEFAULT_CHILDREN = QLatin1String("defaultFields");
153  const QString PROPERTY_SELECT_IF = QLatin1String("selectIf");
154  const QString PROPERTY_STRUCT_NAME = QLatin1String("structName");
155 
156  const QString PROPERTY_INTERNAL_TYPE = QLatin1String("__type");
157 
158  const QStringList ALL_PROPERTIES = QStringList()
159  << PROPERTY_ABLE_TO_READ << PROPERTY_ALTERNATIVES << PROPERTY_BYTEORDER
160  << PROPERTY_BYTE_COUNT << PROPERTY_CHAR_COUNT << PROPERTY_CHAR_COUNT << PROPERTY_CHILD
161  << PROPERTY_CHILDREN << PROPERTY_CHILD_COUNT << PROPERTY_DATATYPE << PROPERTY_DEFAULT_CHILDREN
162  << PROPERTY_ENCODING << PROPERTY_ENUM_NAME << PROPERTY_ENUM_VALUES << PROPERTY_INTERNAL_TYPE <<
163  PROPERTY_LENGTH << PROPERTY_MAX_BYTE_COUNT << PROPERTY_MAX_CHAR_COUNT << PROPERTY_NAME
164  << PROPERTY_PARENT << PROPERTY_SELECT_IF << PROPERTY_STRUCT_NAME << PROPERTY_TARGET
165  << PROPERTY_TERMINATED_BY << PROPERTY_TYPE << PROPERTY_UPDATE_FUNC << PROPERTY_VALID <<
166  PROPERTY_VALIDATION_ERROR << PROPERTY_VALIDATION_FUNC << PROPERTY_VALUE << PROPERTY_WIDTH;
167 
168  const QString NAME_POINTER_VALUE_TYPE = QLatin1String("<pointer value type>");
169  const QString NAME_POINTER_TARGET = QLatin1String("<pointer target>");
170  const QString NAME_ARRAY_TYPE = QLatin1String("<array type>");
171 
172 }
173 
174 namespace ParserUtils
175 {
181  ParsedNumber<int> intFromString(const QString& str);
183  ParsedNumber<uint> uintFromString(const QString& str);
185  ParsedNumber<quint64> uint64FromString(const QString& str);
191  ParsedNumber<int> intFromScriptValue(const QScriptValue& val);
193  ParsedNumber<uint> uintFromScriptValue(const QScriptValue& val);
195  ParsedNumber<quint64> uint64FromScriptValue(const QScriptValue& val);
196 
197  DataInformation::DataInformationEndianess byteOrderFromString(const QString& string, const LoggerWithContext& logger);
198  QString byteOrderToString(DataInformation::DataInformationEndianess order);
199 
200  StringDataInformation::StringType toStringEncoding(const QString& str, const LoggerWithContext& logger);
201 
203  QScriptValue functionSafeEval(QScriptEngine* engine, const QString& str);
204 }
205 
206 #endif /* PARSERUTILS_H_ */
ParsedNumber::isError
bool isError()
Definition: parserutils.h:91
ParserInfo::info
QDebug info() const
Definition: parserutils.h:67
DataInformation
Interface that must be implemented by all datatypes.
Definition: datainformation.h:67
ChildrenParser::hasNext
virtual bool hasNext()=0
ParserStrings::TYPE_ALTERNATIVES
const QString TYPE_ALTERNATIVES
Definition: parserutils.h:108
DataInformation::fullObjectPath
QString fullObjectPath() const
Definition: datainformation.cpp:258
ParserStrings::PROPERTY_CHILD_COUNT
const QString PROPERTY_CHILD_COUNT
Definition: parserutils.h:137
LoggerWithContext
Definition: scriptlogger.h:94
ParserStrings::NAME_POINTER_VALUE_TYPE
const QString NAME_POINTER_VALUE_TYPE
Definition: parserutils.h:168
ParsedNumber::ParsedNumber
ParsedNumber(T val, const QString &str, bool ok)
Definition: parserutils.h:86
ParserStrings::PROPERTY_TARGET
const QString PROPERTY_TARGET
Definition: parserutils.h:149
ParserStrings::PROPERTY_PARENT
const QString PROPERTY_PARENT
Definition: parserutils.h:116
ParserStrings::TYPE_PRIMITIVE
const QString TYPE_PRIMITIVE
Definition: parserutils.h:100
ParserStrings::PROPERTY_MAX_BYTE_COUNT
const QString PROPERTY_MAX_BYTE_COUNT
Definition: parserutils.h:143
ParserStrings::TYPE_BITFIELD
const QString TYPE_BITFIELD
Definition: parserutils.h:97
PointerDataInformation
Definition: pointerdatainformation.h:30
ParserStrings::NAME_POINTER_TARGET
const QString NAME_POINTER_TARGET
Definition: parserutils.h:169
ParserStrings::PROPERTY_DATATYPE
const QString PROPERTY_DATATYPE
Definition: parserutils.h:123
ChildrenParser::next
virtual DataInformation * next()=0
ParserInfo::engine
QScriptEngine * engine
Definition: parserutils.h:61
ParsedNumber::value
T value
Definition: parserutils.h:88
ParserUtils::intFromScriptValue
ParsedNumber< int > intFromScriptValue(const QScriptValue &val)
Checks whether the value is a number, and if it is converts it.
Definition: parserutils.cpp:86
ParserUtils::functionSafeEval
QScriptValue functionSafeEval(QScriptEngine *engine, const QString &str)
This essentially calls engine->evaluate(str), but ensures it can be a function (QTBUG-5757) ...
Definition: parserutils.cpp:184
ParserStrings::NAME_ARRAY_TYPE
const QString NAME_ARRAY_TYPE
Definition: parserutils.h:170
ParsedNumber::string
QString string
Definition: parserutils.h:87
ChildrenParser::~ChildrenParser
virtual ~ChildrenParser()
Definition: parserutils.h:77
ParserStrings::TYPE_FLAGS
const QString TYPE_FLAGS
Definition: parserutils.h:99
ParsedNumber
Holds a number that was converted either from a QScriptValue or a QString.
Definition: parserutils.h:84
ParserStrings::PROPERTY_VALID
const QString PROPERTY_VALID
Definition: parserutils.h:118
EnumDataInformation
Definition: enumdatainformation.h:29
ParserStrings::PROPERTY_BYTE_COUNT
const QString PROPERTY_BYTE_COUNT
Definition: parserutils.h:141
DataInformation::DataInformationEndianess
DataInformationEndianess
Definition: datainformation.h:86
ChildrenParser
Definition: parserutils.h:72
ParserStrings::PROPERTY_CHILD
const QString PROPERTY_CHILD
Definition: parserutils.h:138
ParserStrings::PROPERTY_CUSTOM_TYPE_NAME
const QString PROPERTY_CUSTOM_TYPE_NAME
Definition: parserutils.h:124
ChildrenParser::setParent
virtual void setParent(DataInformation *parent)=0
ParserStrings::TYPE_ENUM
const QString TYPE_ENUM
Definition: parserutils.h:98
ParserStrings::PROPERTY_TO_STRING_FUNC
const QString PROPERTY_TO_STRING_FUNC
Definition: parserutils.h:122
ParserStrings::PROPERTY_DEFAULT_LOCK_OFFSET
const QString PROPERTY_DEFAULT_LOCK_OFFSET
Definition: parserutils.h:112
ParserStrings::PROPERTY_VALUE
const QString PROPERTY_VALUE
Definition: parserutils.h:147
ParserUtils::intFromString
ParsedNumber< int > intFromString(const QString &str)
If string starts with 0x, the remainder is interpreted as a hexadecimal (unsigned) number otherwise i...
Definition: parserutils.cpp:27
ParserStrings::PROPERTY_WIDTH
const QString PROPERTY_WIDTH
Definition: parserutils.h:134
TaggedUnionDataInformation
A class holding the data of a struct for Okteta.
Definition: taggeduniondatainformation.h:31
ParserStrings::PROPERTY_SELECT_IF
const QString PROPERTY_SELECT_IF
Definition: parserutils.h:153
ParsedNumber::badInput
static ParsedNumber< T > badInput(const QString &str)
Definition: parserutils.h:90
ArrayDataInformation
Definition: arraydatainformation.h:36
ParserStrings::PROPERTY_ENCODING
const QString PROPERTY_ENCODING
Definition: parserutils.h:145
ParserUtils::uintFromScriptValue
ParsedNumber< uint > uintFromScriptValue(const QScriptValue &val)
Definition: parserutils.cpp:103
ParserStrings::PROPERTY_TYPE
const QString PROPERTY_TYPE
Definition: parserutils.h:130
ParserStrings::PROPERTY_LENGTH
const QString PROPERTY_LENGTH
Definition: parserutils.h:132
ParserInfo::logger
ScriptLogger * logger
Definition: parserutils.h:59
ParserStrings::PROPERTY_UPDATE_FUNC
const QString PROPERTY_UPDATE_FUNC
Definition: parserutils.h:120
ParsedNumber::ParsedNumber
ParsedNumber()
Definition: parserutils.h:85
ParserUtils::toStringEncoding
StringDataInformation::StringType toStringEncoding(const QString &str, const LoggerWithContext &logger)
Definition: parserutils.cpp:148
ParserInfo::parent
DataInformation * parent
Definition: parserutils.h:60
ParserStrings::TYPE_TAGGED_UNION
const QString TYPE_TAGGED_UNION
Definition: parserutils.h:105
ParserStrings::TYPE_ENUMDEF
const QString TYPE_ENUMDEF
Only needed for .osd.
Definition: parserutils.h:107
ParserStrings::PROPERTY_CHAR_COUNT
const QString PROPERTY_CHAR_COUNT
Definition: parserutils.h:140
ScriptLogger
NOT THREAD SAFE!
Definition: scriptlogger.h:35
ParserInfo
For use by the parsers so that the functions don't have as many parameters.
Definition: parserutils.h:48
ParserInfo::context
QString context() const
Definition: parserutils.h:63
ParserStrings::TYPE_ARRAY
const QString TYPE_ARRAY
Definition: parserutils.h:96
UnionDataInformation
A class holding the data of a union for Okteta.
Definition: uniondatainformation.h:28
ParserStrings::PROPERTY_ENUM_NAME
const QString PROPERTY_ENUM_NAME
Definition: parserutils.h:128
StringDataInformation::StringType
StringType
Definition: stringdatainformation.h:43
ParserUtils::byteOrderToString
QString byteOrderToString(DataInformation::DataInformationEndianess order)
Definition: parserutils.cpp:137
ParserStrings::PROPERTY_ENUM_VALUES
const QString PROPERTY_ENUM_VALUES
Definition: parserutils.h:126
ParserUtils::uint64FromString
ParsedNumber< quint64 > uint64FromString(const QString &str)
Definition: parserutils.cpp:56
ParserInfo::ParserInfo
ParserInfo(const QString &name, ScriptLogger *logger, DataInformation *parent, QScriptEngine *engine)
Definition: parserutils.h:50
ParserUtils::uintFromString
ParsedNumber< uint > uintFromString(const QString &str)
Definition: parserutils.cpp:45
ParserInfo::ParserInfo
ParserInfo(const ParserInfo &i)
Definition: parserutils.h:55
ScriptLogger::info
QDebug info(const DataInformation *origin)
Definition: scriptlogger.h:66
ParserStrings::TYPE_STRING
const QString TYPE_STRING
Definition: parserutils.h:101
ParserStrings::PROPERTY_VALIDATION_FUNC
const QString PROPERTY_VALIDATION_FUNC
Definition: parserutils.h:121
ParserStrings::ALL_PROPERTIES
const QStringList ALL_PROPERTIES
Definition: parserutils.h:158
ScriptLogger::error
QDebug error(const DataInformation *origin)
Definition: scriptlogger.h:68
ParserStrings::PROPERTY_BYTEORDER
const QString PROPERTY_BYTEORDER
Definition: parserutils.h:115
ScriptLogger::warn
QDebug warn(const DataInformation *origin)
Definition: scriptlogger.h:67
ParserStrings::TYPE_POINTER
const QString TYPE_POINTER
Definition: parserutils.h:104
ParserStrings::TYPE_UNION
const QString TYPE_UNION
Definition: parserutils.h:103
ParserStrings::TYPE_GROUP
const QString TYPE_GROUP
Definition: parserutils.h:109
ParserInfo::error
QDebug error() const
Definition: parserutils.h:69
ParsedNumber::isEmpty
bool isEmpty()
Definition: parserutils.h:92
ParserUtils::byteOrderFromString
DataInformation::DataInformationEndianess byteOrderFromString(const QString &string, const LoggerWithContext &logger)
Definition: parserutils.cpp:67
ParserInfo::name
QString name
Definition: parserutils.h:58
ParserStrings::PROPERTY_ABLE_TO_READ
const QString PROPERTY_ABLE_TO_READ
Definition: parserutils.h:119
ParserStrings::PROPERTY_STRUCT_NAME
const QString PROPERTY_STRUCT_NAME
Definition: parserutils.h:154
ParserUtils::uint64FromScriptValue
ParsedNumber< quint64 > uint64FromScriptValue(const QScriptValue &val)
Definition: parserutils.cpp:120
ParserStrings::PROPERTY_MAX_CHAR_COUNT
const QString PROPERTY_MAX_CHAR_COUNT
Definition: parserutils.h:142
ParserStrings::PROPERTY_NAME
const QString PROPERTY_NAME
Definition: parserutils.h:114
ParserStrings::PROPERTY_ALTERNATIVES
const QString PROPERTY_ALTERNATIVES
Definition: parserutils.h:151
ParserStrings::PROPERTY_CHILDREN
const QString PROPERTY_CHILDREN
Definition: parserutils.h:136
ParsedNumber::isValid
bool isValid
Definition: parserutils.h:89
ParserStrings::PROPERTY_INTERNAL_TYPE
const QString PROPERTY_INTERNAL_TYPE
Definition: parserutils.h:156
AbstractBitfieldDataInformation
Definition: abstractbitfielddatainformation.h:28
PrimitiveDataInformation
A base class for all primitive data elements (e.g.
Definition: primitivedatainformation.h:34
ParserStrings::TYPE_STRUCT
const QString TYPE_STRUCT
Definition: parserutils.h:102
StringDataInformation
Definition: stringdatainformation.h:39
ParserStrings::PROPERTY_TERMINATED_BY
const QString PROPERTY_TERMINATED_BY
Definition: parserutils.h:144
ParserInfo::warn
QDebug warn() const
Definition: parserutils.h:68
StructureDataInformation
A class holding the data of a struct for Okteta.
Definition: structuredatainformation.h:28
ParserInfo::~ParserInfo
~ParserInfo()
Definition: parserutils.h:57
ParserStrings::PROPERTY_DEFAULT_CHILDREN
const QString PROPERTY_DEFAULT_CHILDREN
Definition: parserutils.h:152
ParserStrings::PROPERTY_VALIDATION_ERROR
const QString PROPERTY_VALIDATION_ERROR
Definition: parserutils.h:117
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:04:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

okteta

Skip menu "okteta"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdesdk API Reference

Skip menu "kdesdk API Reference"
  • kapptemplate
  • kcachegrind
  • kompare
  • lokalize
  • okteta
  • umbrello
  •   umbrello

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal