bool KonqMFIcon::hasMicroFormat(DOM::NodeList nodes) { bool ok = false; unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } if (map.item(j).nodeValue().string() == "vevent") { ok = true; extractEvent(node); break; } if (map.item(j).nodeValue().string() == "vcard") { ok = true; extractCard(node); break; } } if (hasMicroFormat(node.childNodes())) { ok = true; } } return ok; }
bool iCalConverter::convert(WString& errorDescription, long* errorCode) { errorDescription = TEXT(""); *errorCode = ERROR_SUCCESS; if(!calendar && !iCalendar) return false; if(calendar && iCalendar) return true; if(calendar) { iCalendar = calendar->toString(); if(!calendar->getProdID() || !calendar->getProdID()->getValue()) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'PRODID' property is missing"); delete [] iCalendar; iCalendar = NULL; return false; } if(!calendar->getVersion() || !calendar->getVersion()->getValue()) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'VERSION' property is missing"); delete [] iCalendar; iCalendar = NULL; return false; } if(calendar->getEvents()) for(int i=0; i<calendar->getEvents()->size(); i++) if(!validateEvent(((Event*)calendar->getEvents()->get(i)), errorDescription, errorCode)) { delete [] iCalendar; iCalendar = NULL; return false; } if(calendar->getToDos()) for(int i=0; i<calendar->getToDos()->size(); i++) if(!validateTodo(((ToDo*)calendar->getToDos()->get(i)), errorDescription, errorCode)) { delete [] iCalendar; iCalendar = NULL; return false; } return true; } if (iCalendar) { calendar = new Calendar(); VObject* vo = VConverter::parse(iCalendar); if(!vo) { *errorCode = ERROR_PARSING_ERROR; errorDescription = TEXT("Invalid VObject returned"); return false; } int n = vo->propertiesCount(); if(wcscmp(vo->getProperty(0)->getName(), TEXT("BEGIN")) || !vo->getProperty(0)->getValue() || wcscmp(vo->getProperty(0)->getValue(), TEXT("VCALENDAR"))) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'BEGIN:VCALENDAR' property is missing"); return false; } if(wcscmp(vo->getProperty(n-1)->getName(), TEXT("END")) || !vo->getProperty(n-1)->getValue() || wcscmp(vo->getProperty(n-1)->getValue(), TEXT("VCALENDAR"))) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'END:VCALENDAR' property is missing"); return false; } if(!vo->containsProperty(TEXT("VERSION"))) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'VERSION' property is missing"); return false; } if(vo->containsProperty(TEXT("VERSION")) && (!vo->getProperty(TEXT("VERSION")) || wcscmp(vo->getProperty(TEXT("VERSION"))->getValue(), TEXT("2.0")))) { *errorCode = ERROR_ILLEGAL_VERSION_NUMBER; if(vo->getProperty(TEXT("VERSION"))) { errorDescription = TEXT("Illegal version number : "); errorDescription += vo->getProperty(TEXT("VERSION"))->getValue(); } else { errorDescription = TEXT("Illegal version number"); } return false; } else { iCalProperty* prop = new iCalProperty(vo->getProperty(TEXT("VERSION"))->getValue()); calendar->setVersion(*prop); vo->removeProperty(TEXT("VERSION")); delete prop; } if(!vo->containsProperty(TEXT("PRODID")) || !vo->getProperty(TEXT("PRODID"))) { *errorCode = ERROR_KEY_PROPERTY_MISSING; errorDescription = TEXT("'PRODID' property is missing"); return false; } else { iCalProperty* prop = new iCalProperty(vo->getProperty(TEXT("PRODID"))->getValue()); calendar->setProdID(*prop); vo->removeProperty(TEXT("PRODID")); delete prop; } if(vo->containsProperty(TEXT("CALSCALE")) || vo->getProperty(TEXT("CALSCALE"))) { iCalProperty* prop = new iCalProperty(vo->getProperty(TEXT("CALSCALE"))->getValue()); calendar->setCalScale(*prop); vo->removeProperty(TEXT("CALSCALE")); delete prop; } if(vo->containsProperty(TEXT("METHOD")) || vo->getProperty(TEXT("METHOD"))) { iCalProperty* prop = new iCalProperty(vo->getProperty(TEXT("METHOD"))->getValue()); calendar->setMethod(*prop); vo->removeProperty(TEXT("METHOD")); delete prop; } //extract VEVENTs from vo Event* ev; while((ev = extractEvent(vo, errorDescription, errorCode))) { if (!validateEvent(ev, errorDescription, errorCode)) { delete ev; ev = NULL; return false; } calendar->addEvent(ev); delete ev; ev = NULL; } //extract VTODOs from vo ToDo* task; while((task = extractTask(vo, errorDescription, errorCode))) { if (!validateTodo(task, errorDescription, errorCode)) { delete task; task = NULL; return false; } calendar->addToDo(task); delete task; task = NULL; } } return true; }
void adventure(eventList* pEvent, pirateTree*& aTree) { int eventCode, backEvent = 0; eventList *backup = pEvent; myTree = aTree; eventNum = 0; prev11 = 0; while (pEvent != NULL) { eventCode = (pEvent->nEventCode > 0)? pEvent->nEventCode: (pEvent->nEventCode * -1); eventNum++; switch (extractEvent(pEvent->nEventCode)) { case 1: if (!isSoulLand && !isRiverCrossed) addShip(eventCode); break; case 2: if (!isPosiden && !isRiverCrossed) monsterAttack(eventCode); break; case 3: if (!isSoulLand && !isRiverCrossed && ((!isBermuda && !isPosiden) || (isPosiden && isSteeled))) Bermuda(); break; case 4: if (!isSteeled && !isRiverCrossed) Poseiden(); break; case 5: if (isSteeled && !isRiverCrossed && !isSoulLand) monsterAttack2(eventCode); break; case 6: if (isSoulLand || isRiverCrossed) break; if (isSteeled) soulLand(); else deleteMyTree(myTree->root); break; case 7: if (isSoulLand && isJack) deadManNoTell(); break; case 8: if (isSoulLand) strangeWedding(); break; case 9: if (isS9 && !isRiverCrossed) driverGuy(eventCode); break; case 10: if (!isJack && isRiverCrossed && prev11 == 0) { Hades(); prev11 = eventNum; } break; case 11: if (isJack && prev11 > 0) { backEvent = (999 % prev11) + 1; isS12 = 1; eventNum = 0; pEvent = backup; isAVL = 0; isS9 = 0; isRiverCrossed = 0; isSoulLand = 0; isPosiden = 0; isBermuda = 0; isSteeled = 0; isBlackBeard = 1; prev11 = 0; deleteMyTree(myTree->root); continue; } break; } if (myTree->root == NULL) break; if (isHalt) break; if (isS12 && eventNum == backEvent) { if (!isJack) { deleteMyTree(myTree->root); } break; } pEvent = pEvent->pNext; } }