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);