bool FlowParser::importOne(std::list<std::string>& names) { switch (token()) { case FlowToken::Ident: case FlowToken::String: case FlowToken::RawString: names.push_back(stringValue()); nextToken(); break; case FlowToken::RndOpen: nextToken(); if (!importOne(names)) return false; while (token() == FlowToken::Comma) { nextToken(); // skip comma if (!importOne(names)) return false; } if (!consume(FlowToken::RndClose)) return false; break; default: reportError("Syntax error in import declaration."); return false; } return true; }
bool FlowParser::importDecl(Unit* unit) { FNTRACE(); // 'import' NAME_OR_NAMELIST ['from' PATH] ';' nextToken(); // skip 'import' std::list<std::string> names; if (!importOne(names)) { consumeUntil(FlowToken::Semicolon); return false; } while (token() == FlowToken::Comma) { nextToken(); if (!importOne(names)) { consumeUntil(FlowToken::Semicolon); return false; } } std::string path; if (consumeIf(FlowToken::From)) { path = stringValue(); if (!consumeOne(FlowToken::String, FlowToken::RawString)) { consumeUntil(FlowToken::Semicolon); return false; } if (!path.empty() && path[0] != '/') { std::string base(lexer_->location().filename); size_t r = base.rfind('/'); if (r != std::string::npos) ++r; base = base.substr(0, r); path = base + path; } } for (auto i = names.begin(), e = names.end(); i != e; ++i) { if (importHandler && !importHandler(*i, path)) return false; unit->import(*i, path); } consumeIf(FlowToken::Semicolon); return true; }
void importXML::sImportSelected() { bool oldAutoUpdate = _autoUpdate->isChecked(); sHandleAutoUpdate(false); QList<QTreeWidgetItem*> selected = _file->selectedItems(); for (int i = 0; i < selected.size(); i++) { if (selected[i]->data(1, Qt::DisplayRole).toString().isEmpty()) if (importOne(selected[i]->data(0, Qt::DisplayRole).toString())) selected[i]->setData(1, Qt::DisplayRole, tr("Done")); else selected[i]->setData(1, Qt::DisplayRole, tr("Error")); } if (oldAutoUpdate) sHandleAutoUpdate(true); }
void importXML::sImportAll() { bool oldAutoUpdate = _autoUpdate->isChecked(); sHandleAutoUpdate(false); for (int i = 0; i < _file->topLevelItemCount(); i++) { QTreeWidgetItem* pItem = _file->topLevelItem(i); if (pItem->data(1, Qt::DisplayRole).toString().isEmpty()) if (importOne(pItem->data(0, Qt::DisplayRole).toString())) pItem->setData(1, Qt::DisplayRole, tr("Done")); else pItem->setData(1, Qt::DisplayRole, tr("Error")); } if (oldAutoUpdate) sHandleAutoUpdate(true); }