Mercurial > projects > qtd
comparison generator/typesystem.cpp @ 4:0a29ce1ae854
CMake build script.
Small fixes in examples.
author | SokoL_SD |
---|---|
date | Wed, 13 May 2009 19:01:55 +0000 |
parents | e78566595089 |
children | 5015aede8edd |
comparison
equal
deleted
inserted
replaced
3:323efbe5c2f7 | 4:0a29ce1ae854 |
---|---|
136 }; | 136 }; |
137 | 137 |
138 class Handler : public QXmlDefaultHandler | 138 class Handler : public QXmlDefaultHandler |
139 { | 139 { |
140 public: | 140 public: |
141 Handler(TypeDatabase *database, bool generate) | 141 Handler(TypeDatabase *database, const QString &source_dir, bool generate) |
142 : m_database(database), m_generate(generate ? TypeEntry::GenerateAll : TypeEntry::GenerateForSubclass) | 142 : m_database(database), m_generate(generate ? TypeEntry::GenerateAll : TypeEntry::GenerateForSubclass), m_source_dir(source_dir) |
143 { | 143 { |
144 m_current_enum = 0; | 144 m_current_enum = 0; |
145 current = 0; | 145 current = 0; |
146 | 146 |
147 tagNames["rejection"] = StackElement::Rejection; | 147 tagNames["rejection"] = StackElement::Rejection; |
213 CodeSnipList m_code_snips; | 213 CodeSnipList m_code_snips; |
214 FunctionModificationList m_function_mods; | 214 FunctionModificationList m_function_mods; |
215 FieldModificationList m_field_mods; | 215 FieldModificationList m_field_mods; |
216 | 216 |
217 QHash<QString, StackElement::ElementType> tagNames; | 217 QHash<QString, StackElement::ElementType> tagNames; |
218 | |
219 QString m_source_dir; | |
218 }; | 220 }; |
219 | 221 |
220 bool Handler::error(const QXmlParseException &e) | 222 bool Handler::error(const QXmlParseException &e) |
221 { | 223 { |
222 qWarning("Error: line=%d, column=%d, message=%s\n", | 224 qWarning("Error: line=%d, column=%d, message=%s\n", |
838 if (name.isEmpty()) { | 840 if (name.isEmpty()) { |
839 m_error = "No typesystem name specified"; | 841 m_error = "No typesystem name specified"; |
840 return false; | 842 return false; |
841 } | 843 } |
842 | 844 |
843 if (!m_database->parseFile(name, convertBoolean(attributes["generate"], "generate", true))) { | 845 if (!m_database->parseFile(name, m_source_dir, convertBoolean(attributes["generate"], "generate", true))) { |
844 m_error = QString("Failed to parse: '%1'").arg(name); | 846 m_error = QString("Failed to parse: '%1'").arg(name); |
845 return false; | 847 return false; |
846 } | 848 } |
847 } | 849 } |
848 break; | 850 break; |
1510 // addType(new QModelIndexTypeEntry()); | 1512 // addType(new QModelIndexTypeEntry()); |
1511 | 1513 |
1512 addRemoveFunctionToTemplates(this); | 1514 addRemoveFunctionToTemplates(this); |
1513 } | 1515 } |
1514 | 1516 |
1515 bool TypeDatabase::parseFile(const QString &filename, bool generate) | 1517 bool TypeDatabase::parseFile(const QString &filename, const QString &source_dir, bool generate) |
1516 { | 1518 { |
1517 QFile file(filename); | 1519 QString name; |
1520 if (source_dir.isEmpty()) | |
1521 name = filename; | |
1522 else | |
1523 name = source_dir + "/" + filename; | |
1524 QFile file(name); | |
1518 Q_ASSERT(file.exists()); | 1525 Q_ASSERT(file.exists()); |
1519 QXmlInputSource source(&file); | 1526 QXmlInputSource source(&file); |
1520 | 1527 |
1521 int count = m_entries.size(); | 1528 int count = m_entries.size(); |
1522 | 1529 |
1523 QXmlSimpleReader reader; | 1530 QXmlSimpleReader reader; |
1524 Handler handler(this, generate); | 1531 Handler handler(this, source_dir, generate); |
1525 | 1532 |
1526 reader.setContentHandler(&handler); | 1533 reader.setContentHandler(&handler); |
1527 reader.setErrorHandler(&handler); | 1534 reader.setErrorHandler(&handler); |
1528 | 1535 |
1529 bool ok = reader.parse(&source, false); | 1536 bool ok = reader.parse(&source, false); |