bool XMLexport::writeHost( Host * pT ) { writeStartElement( "Host" ); writeAttribute( "autoClearCommandLineAfterSend", pT->mAutoClearCommandLineAfterSend ? "yes" : "no" ); writeAttribute( "disableAutoCompletion", pT->mDisableAutoCompletion ? "yes" : "no" ); writeAttribute( "printCommand", pT->mPrintCommand ? "yes" : "no" ); writeAttribute( "USE_IRE_DRIVER_BUGFIX", pT->mUSE_IRE_DRIVER_BUGFIX ? "yes" : "no" ); writeAttribute( "mUSE_FORCE_LF_AFTER_PROMPT", pT->mUSE_FORCE_LF_AFTER_PROMPT ? "yes" : "no" ); writeAttribute( "mUSE_UNIX_EOL", pT->mUSE_UNIX_EOL ? "yes" : "no" ); writeAttribute( "mNoAntiAlias", pT->mNoAntiAlias ? "yes" : "no" ); writeAttribute( "mRawStreamDump", pT->mRawStreamDump ? "yes" : "no" ); writeAttribute( "mAlertOnNewData", pT->mAlertOnNewData ? "yes" : "no" ); writeAttribute( "mFORCE_NO_COMPRESSION", pT->mFORCE_NO_COMPRESSION ? "yes" : "no" ); writeAttribute( "mFORCE_GA_OFF", pT->mFORCE_GA_OFF ? "yes" : "no" ); writeAttribute( "mFORCE_SAVE_ON_EXIT", pT->mFORCE_SAVE_ON_EXIT ? "yes" : "no" ); writeAttribute( "mEnableGMCP", pT->mEnableGMCP ? "yes" : "no" ); writeAttribute( "mMapStrongHighlight", pT->mMapStrongHighlight ? "yes" : "no" ); writeAttribute( "mLogStatus", pT->mLogStatus ? "yes" : "no" ); writeAttribute( "mEnableSpellCheck", pT->mEnableSpellCheck ? "yes" : "no" ); writeAttribute( "mShowInfo", pT->mShowInfo ? "yes" : "no" ); writeAttribute( "mAcceptServerGUI", pT->mAcceptServerGUI ? "yes" : "no" ); writeAttribute( "mMapperUseAntiAlias", pT->mMapperUseAntiAlias ? "yes" : "no" ); writeAttribute( "mFORCE_MXP_NEGOTIATION_OFF", pT->mFORCE_MXP_NEGOTIATION_OFF ? "yes" : "no" ); writeAttribute( "mRoomSize", QString::number(pT->mRoomSize)); writeAttribute( "mLineSize", QString::number(pT->mLineSize)); writeAttribute( "mBubbleMode", pT->mBubbleMode ? "yes" : "no"); writeAttribute( "mShowRoomIDs", pT->mShowRoomID ? "yes" : "no"); writeAttribute( "mShowPanel", pT->mShowPanel ? "yes" : "no"); writeAttribute( "mHaveMapperScript", pT->mHaveMapperScript ? "yes" : "no"); QString ignore; QSetIterator<QChar> it(pT->mDoubleClickIgnore); while( it.hasNext() ) { ignore = ignore.append(it.next()); } writeAttribute( "mDoubleClickIgnore", ignore); writeTextElement( "name", pT->mHostName ); //writeTextElement( "login", pT->mLogin ); //writeTextElement( "pass", pT->mPass ); writeStartElement( "mInstalledPackages" ); for( int i=0; i<pT->mInstalledPackages.size(); i++ ) { writeTextElement( "string", pT->mInstalledPackages[i] ); } writeEndElement(); if (pT->mInstalledModules.size()) { qDebug()<<"installed module being done"; writeStartElement( "mInstalledModules" ); QMapIterator<QString, QStringList> it(pT->mInstalledModules); pT->modulesToWrite.clear(); while( it.hasNext() ) { it.next(); writeTextElement("key", it.key()); QStringList entry = it.value(); qDebug()<<"XMLexport"<<entry[0]<<","<<entry[1]; writeTextElement("filepath", entry[0]); writeTextElement("globalSave", entry[1]); if (entry[1].toInt()) { qDebug()<<"adding module to write list:"<<it.key(); pT->modulesToWrite[it.key()] = entry; } writeTextElement("priority", QString::number(pT->mModulePriorities[it.key()])); } writeEndElement(); } writeTextElement( "url", pT->mUrl ); writeTextElement( "serverPackageName", pT->mServerGUI_Package_name ); writeTextElement( "serverPackageVersion", QString::number(pT->mServerGUI_Package_version ) ); writeTextElement( "port", QString::number(pT->mPort) ); writeTextElement( "borderTopHeight", QString::number(pT->mBorderTopHeight) ); writeTextElement( "borderBottomHeight", QString::number(pT->mBorderBottomHeight) ); writeTextElement( "borderLeftWidth", QString::number(pT->mBorderLeftWidth) ); writeTextElement( "borderRightWidth", QString::number(pT->mBorderRightWidth) ); writeTextElement( "wrapAt", QString::number(pT->mWrapAt) ); writeTextElement( "wrapIndentCount", QString::number(pT->mWrapIndentCount) ); writeTextElement( "commandSeperator", pT->mCommandSeperator ); writeTextElement( "mFgColor", pT->mFgColor.name() ); writeTextElement( "mBgColor", pT->mBgColor.name() ); writeTextElement( "mCommandFgColor", pT->mCommandFgColor.name() ); writeTextElement( "mCommandBgColor", pT->mCommandBgColor.name() ); writeTextElement( "mCommandLineFgColor", pT->mCommandLineFgColor.name() ); writeTextElement( "mCommandLineBgColor", pT->mCommandLineBgColor.name() ); writeTextElement( "mBlack", pT->mBlack.name() ); writeTextElement( "mLightBlack", pT->mLightBlack.name() ); writeTextElement( "mRed", pT->mRed.name() ); writeTextElement( "mLightRed", pT->mLightRed.name() ); writeTextElement( "mBlue", pT->mBlue.name() ); writeTextElement( "mLightBlue", pT->mLightBlue.name() ); writeTextElement( "mGreen", pT->mGreen.name() ); writeTextElement( "mLightGreen", pT->mLightGreen.name() ); writeTextElement( "mYellow", pT->mYellow.name() ); writeTextElement( "mLightYellow", pT->mLightYellow.name() ); writeTextElement( "mCyan", pT->mCyan.name() ); writeTextElement( "mLightCyan", pT->mLightCyan.name() ); writeTextElement( "mMagenta", pT->mMagenta.name() ); writeTextElement( "mLightMagenta", pT->mLightMagenta.name() ); writeTextElement( "mWhite", pT->mWhite.name() ); writeTextElement( "mLightWhite", pT->mLightWhite.name() ); writeTextElement( "mDisplayFont", pT->mDisplayFont.toString() ); writeTextElement( "mCommandLineFont", pT->mCommandLineFont.toString() ); writeTextElement( "mCommandSeparator", pT->mCommandSeparator ); writeTextElement( "commandLineMinimumHeight", QString::number(pT->commandLineMinimumHeight) ); writeTextElement( "mFgColor2", pT->mFgColor_2.name() ); writeTextElement( "mBgColor2", pT->mBgColor_2.name() ); writeTextElement( "mBlack2", pT->mBlack_2.name() ); writeTextElement( "mLightBlack2", pT->mLightBlack_2.name() ); writeTextElement( "mRed2", pT->mRed_2.name() ); writeTextElement( "mLightRed2", pT->mLightRed_2.name() ); writeTextElement( "mBlue2", pT->mBlue_2.name() ); writeTextElement( "mLightBlue2", pT->mLightBlue_2.name() ); writeTextElement( "mGreen2", pT->mGreen_2.name() ); writeTextElement( "mLightGreen2", pT->mLightGreen_2.name() ); writeTextElement( "mYellow2", pT->mYellow_2.name() ); writeTextElement( "mLightYellow2", pT->mLightYellow_2.name() ); writeTextElement( "mCyan2", pT->mCyan_2.name() ); writeTextElement( "mLightCyan2", pT->mLightCyan_2.name() ); writeTextElement( "mMagenta2", pT->mMagenta_2.name() ); writeTextElement( "mLightMagenta2", pT->mLightMagenta_2.name() ); writeTextElement( "mWhite2", pT->mWhite_2.name() ); writeTextElement( "mLightWhite2", pT->mLightWhite_2.name() ); writeTextElement( "mSpellDic", pT->mSpellDic ); writeTextElement( "mLineSize", QString::number(pT->mLineSize) ); writeTextElement( "mRoomSize", QString::number(pT->mRoomSize) ); writeEndElement(); // end Host tag writeEndElement(); // end HostPackage tag writeStartElement( "TriggerPackage" ); bool ret = true; typedef list<TTrigger *>::const_iterator ItTriggerUnit; for( ItTriggerUnit it1 = pT->mTriggerUnit.mTriggerRootNodeList.begin(); it1 != pT->mTriggerUnit.mTriggerRootNodeList.end(); it1++) { TTrigger * pChildTrigger = *it1; if( ! pChildTrigger || pChildTrigger->mModuleMember) continue; if( ! pChildTrigger->isTempTrigger()) { ret = writeTrigger( pChildTrigger ); } } writeEndElement(); //end trigger package tag writeStartElement("TimerPackage"); typedef list<TTimer *>::const_iterator ItTimerUnit; for( ItTimerUnit it2 = pT->mTimerUnit.mTimerRootNodeList.begin(); it2 != pT->mTimerUnit.mTimerRootNodeList.end(); it2++) { TTimer * pChildTimer = *it2; if (pChildTimer->mModuleMember) continue; if( ! pChildTimer->isTempTimer()) { ret = writeTimer( pChildTimer ); } } writeEndElement(); writeStartElement("AliasPackage"); typedef list<TAlias *>::const_iterator ItAliasUnit; for( ItAliasUnit it3 = pT->mAliasUnit.mAliasRootNodeList.begin(); it3 != pT->mAliasUnit.mAliasRootNodeList.end(); it3++) { TAlias * pChildAlias = *it3; if (pChildAlias->mModuleMember) continue; if( ! pChildAlias->isTempAlias()) { ret = writeAlias( pChildAlias ); } } writeEndElement(); writeStartElement("ActionPackage"); typedef list<TAction *>::const_iterator ItActionUnit; for( ItActionUnit it4 = pT->mActionUnit.mActionRootNodeList.begin(); it4 != pT->mActionUnit.mActionRootNodeList.end(); it4++) { TAction * pChildAction = *it4; if (pChildAction->mModuleMember) continue; ret = writeAction( pChildAction ); } writeEndElement(); writeStartElement("ScriptPackage"); typedef list<TScript *>::const_iterator ItScriptUnit; for( ItScriptUnit it5 = pT->mScriptUnit.mScriptRootNodeList.begin(); it5 != pT->mScriptUnit.mScriptRootNodeList.end(); it5++) { TScript * pChildScript = *it5; if (pChildScript->mModuleMember) continue; ret = writeScript( pChildScript ); } writeEndElement(); writeStartElement("KeyPackage"); typedef list<TKey *>::const_iterator ItKeyUnit; for( ItKeyUnit it6 = pT->mKeyUnit.mKeyRootNodeList.begin(); it6 != pT->mKeyUnit.mKeyRootNodeList.end(); it6++) { TKey * pChildKey = *it6; if (pChildKey->mModuleMember) continue; ret = writeKey( pChildKey ); } writeEndElement(); writeStartElement("VariablePackage"); LuaInterface * lI = pT->getLuaInterface(); VarUnit * vu = lI->getVarUnit(); //do hidden variables first writeStartElement("HiddenVariables"); QSetIterator<QString> it8( vu->hiddenByUser ); while( it8.hasNext() ) { writeTextElement( "name", it8.next() ); } writeEndElement(); TVar * base = vu->getBase(); if ( !base ) { lI->getVars( false ); base = vu->getBase(); } if ( base ) { QListIterator<TVar *> it7( base->getChildren(0) ); while( it7.hasNext() ) { TVar * var = it7.next(); writeVariable( var, lI, vu ); } } writeEndElement(); return ret; }
bool XMLexport::writeHost(Host* pHost) { bool isOk = true; writeStartElement("Host"); writeAttribute("autoClearCommandLineAfterSend", pHost->mAutoClearCommandLineAfterSend ? "yes" : "no"); writeAttribute("disableAutoCompletion", pHost->mDisableAutoCompletion ? "yes" : "no"); writeAttribute("printCommand", pHost->mPrintCommand ? "yes" : "no"); writeAttribute("USE_IRE_DRIVER_BUGFIX", pHost->mUSE_IRE_DRIVER_BUGFIX ? "yes" : "no"); writeAttribute("mUSE_FORCE_LF_AFTER_PROMPT", pHost->mUSE_FORCE_LF_AFTER_PROMPT ? "yes" : "no"); writeAttribute("mUSE_UNIX_EOL", pHost->mUSE_UNIX_EOL ? "yes" : "no"); writeAttribute("mNoAntiAlias", pHost->mNoAntiAlias ? "yes" : "no"); writeAttribute("mEchoLuaErrors", pHost->mEchoLuaErrors ? "yes" : "no"); // FIXME: Change to a string or integer property when possible to support more // than false (perhaps 0 or "PlainText") or true (perhaps 1 or "HTML") in the // future - phpBB code might be useful if it can be done. writeAttribute("mRawStreamDump", pHost->mIsNextLogFileInHtmlFormat ? "yes" : "no"); writeAttribute("mIsLoggingTimestamps", pHost->mIsLoggingTimestamps ? "yes" : "no"); writeAttribute("mAlertOnNewData", pHost->mAlertOnNewData ? "yes" : "no"); writeAttribute("mFORCE_NO_COMPRESSION", pHost->mFORCE_NO_COMPRESSION ? "yes" : "no"); writeAttribute("mFORCE_GA_OFF", pHost->mFORCE_GA_OFF ? "yes" : "no"); writeAttribute("mFORCE_SAVE_ON_EXIT", pHost->mFORCE_SAVE_ON_EXIT ? "yes" : "no"); writeAttribute("mEnableGMCP", pHost->mEnableGMCP ? "yes" : "no"); writeAttribute("mEnableMSDP", pHost->mEnableMSDP ? "yes" : "no"); writeAttribute("mMapStrongHighlight", pHost->mMapStrongHighlight ? "yes" : "no"); writeAttribute("mLogStatus", pHost->mLogStatus ? "yes" : "no"); writeAttribute("mEnableSpellCheck", pHost->mEnableSpellCheck ? "yes" : "no"); writeAttribute("mShowInfo", pHost->mShowInfo ? "yes" : "no"); writeAttribute("mAcceptServerGUI", pHost->mAcceptServerGUI ? "yes" : "no"); writeAttribute("mMapperUseAntiAlias", pHost->mMapperUseAntiAlias ? "yes" : "no"); writeAttribute("mFORCE_MXP_NEGOTIATION_OFF", pHost->mFORCE_MXP_NEGOTIATION_OFF ? "yes" : "no"); writeAttribute("mRoomSize", QString::number(pHost->mRoomSize, 'f', 1)); writeAttribute("mLineSize", QString::number(pHost->mLineSize, 'f', 1)); writeAttribute("mBubbleMode", pHost->mBubbleMode ? "yes" : "no"); writeAttribute("mShowRoomIDs", pHost->mShowRoomID ? "yes" : "no"); writeAttribute("mShowPanel", pHost->mShowPanel ? "yes" : "no"); writeAttribute("mHaveMapperScript", pHost->mHaveMapperScript ? "yes" : "no"); QString ignore; QSetIterator<QChar> it(pHost->mDoubleClickIgnore); while (it.hasNext()) { ignore = ignore.append(it.next()); } writeAttribute("mDoubleClickIgnore", ignore); { // Blocked so that indentation reflects that of the XML file writeTextElement("name", pHost->mHostName); writeStartElement("mInstalledPackages"); for (int i = 0; i < pHost->mInstalledPackages.size(); ++i) { writeTextElement("string", pHost->mInstalledPackages.at(i)); } writeEndElement(); // </mInstalledPackages> if (pHost->mInstalledModules.size()) { writeStartElement("mInstalledModules"); QMapIterator<QString, QStringList> it(pHost->mInstalledModules); pHost->modulesToWrite.clear(); while (it.hasNext()) { it.next(); writeTextElement("key", it.key()); QStringList entry = it.value(); writeTextElement("filepath", entry.at(0)); writeTextElement("globalSave", entry.at(1)); if (entry.at(1).toInt()) { pHost->modulesToWrite.insert(it.key(), entry); } writeTextElement("priority", QString::number(pHost->mModulePriorities.value(it.key()))); } writeEndElement(); // </mInstalledModules> } // CHECK: Do we need: // else { // writeEmptyElement( "mInstalledModules" ); // i.e. <mInstalledModules /> // } writeTextElement("url", pHost->mUrl); writeTextElement("serverPackageName", pHost->mServerGUI_Package_name); writeTextElement("serverPackageVersion", QString::number(pHost->mServerGUI_Package_version)); writeTextElement("port", QString::number(pHost->mPort)); writeTextElement("borderTopHeight", QString::number(pHost->mBorderTopHeight)); writeTextElement("borderBottomHeight", QString::number(pHost->mBorderBottomHeight)); writeTextElement("borderLeftWidth", QString::number(pHost->mBorderLeftWidth)); writeTextElement("borderRightWidth", QString::number(pHost->mBorderRightWidth)); writeTextElement("wrapAt", QString::number(pHost->mWrapAt)); writeTextElement("wrapIndentCount", QString::number(pHost->mWrapIndentCount)); writeTextElement("mFgColor", pHost->mFgColor.name()); writeTextElement("mBgColor", pHost->mBgColor.name()); writeTextElement("mCommandFgColor", pHost->mCommandFgColor.name()); writeTextElement("mCommandBgColor", pHost->mCommandBgColor.name()); writeTextElement("mCommandLineFgColor", pHost->mCommandLineFgColor.name()); writeTextElement("mCommandLineBgColor", pHost->mCommandLineBgColor.name()); writeTextElement("mBlack", pHost->mBlack.name()); writeTextElement("mLightBlack", pHost->mLightBlack.name()); writeTextElement("mRed", pHost->mRed.name()); writeTextElement("mLightRed", pHost->mLightRed.name()); writeTextElement("mBlue", pHost->mBlue.name()); writeTextElement("mLightBlue", pHost->mLightBlue.name()); writeTextElement("mGreen", pHost->mGreen.name()); writeTextElement("mLightGreen", pHost->mLightGreen.name()); writeTextElement("mYellow", pHost->mYellow.name()); writeTextElement("mLightYellow", pHost->mLightYellow.name()); writeTextElement("mCyan", pHost->mCyan.name()); writeTextElement("mLightCyan", pHost->mLightCyan.name()); writeTextElement("mMagenta", pHost->mMagenta.name()); writeTextElement("mLightMagenta", pHost->mLightMagenta.name()); writeTextElement("mWhite", pHost->mWhite.name()); writeTextElement("mLightWhite", pHost->mLightWhite.name()); writeTextElement("mDisplayFont", pHost->mDisplayFont.toString()); writeTextElement("mCommandLineFont", pHost->mCommandLineFont.toString()); // There was a mis-spelt duplicate commandSeperator above but it is now gone writeTextElement("mCommandSeparator", pHost->mCommandSeparator); writeTextElement("commandLineMinimumHeight", QString::number(pHost->commandLineMinimumHeight)); writeTextElement("mFgColor2", pHost->mFgColor_2.name()); writeTextElement("mBgColor2", pHost->mBgColor_2.name()); writeTextElement("mBlack2", pHost->mBlack_2.name()); writeTextElement("mLightBlack2", pHost->mLightBlack_2.name()); writeTextElement("mRed2", pHost->mRed_2.name()); writeTextElement("mLightRed2", pHost->mLightRed_2.name()); writeTextElement("mBlue2", pHost->mBlue_2.name()); writeTextElement("mLightBlue2", pHost->mLightBlue_2.name()); writeTextElement("mGreen2", pHost->mGreen_2.name()); writeTextElement("mLightGreen2", pHost->mLightGreen_2.name()); writeTextElement("mYellow2", pHost->mYellow_2.name()); writeTextElement("mLightYellow2", pHost->mLightYellow_2.name()); writeTextElement("mCyan2", pHost->mCyan_2.name()); writeTextElement("mLightCyan2", pHost->mLightCyan_2.name()); writeTextElement("mMagenta2", pHost->mMagenta_2.name()); writeTextElement("mLightMagenta2", pHost->mLightMagenta_2.name()); writeTextElement("mWhite2", pHost->mWhite_2.name()); writeTextElement("mLightWhite2", pHost->mLightWhite_2.name()); writeTextElement("mSpellDic", pHost->mSpellDic); // TODO: Consider removing these sub-elements that duplicate the same // attributes - which WERE bugged - when we update the XML format, must leave // them in place for now even though we no longer use them for compatibility // with older version of Mudlet writeTextElement("mLineSize", QString::number(pHost->mLineSize, 'f', 1)); writeTextElement("mRoomSize", QString::number(pHost->mRoomSize, 'f', 1)); writeEndElement(); // </Host> } writeEndElement(); // </HostPackage> if (hasError()) { isOk = false; } // Use if() to block each XXXXPackage element to limit scope of iterator so // we can use more of the same code in each block - and to escape quicker on // error... if (isOk) { writeStartElement("TriggerPackage"); for (auto it = pHost->mTriggerUnit.mTriggerRootNodeList.begin(); isOk && it != pHost->mTriggerUnit.mTriggerRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!(*it)->isTempTrigger()) { if (!writeTrigger(*it)) { isOk = false; } } } writeEndElement(); // </TriggerPackage> } if (isOk) { writeStartElement("TimerPackage"); for (auto it = pHost->mTimerUnit.mTimerRootNodeList.begin(); isOk && it != pHost->mTimerUnit.mTimerRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!(*it)->isTempTimer()) { if (!writeTimer(*it)) { isOk = false; } } } writeEndElement(); // </TimerPackage> } if (isOk) { writeStartElement("AliasPackage"); for (auto it = pHost->mAliasUnit.mAliasRootNodeList.begin(); isOk && it != pHost->mAliasUnit.mAliasRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!(*it)->isTempAlias()) { if (!writeAlias(*it)) { isOk = false; } } } writeEndElement(); // </AliasPackage> } if (isOk) { writeStartElement("ActionPackage"); for (auto it = pHost->mActionUnit.mActionRootNodeList.begin(); isOk && it != pHost->mActionUnit.mActionRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!writeAction(*it)) { isOk = false; } } writeEndElement(); // </ActionPackage> } if (isOk) { writeStartElement("ScriptPackage"); for (auto it = pHost->mScriptUnit.mScriptRootNodeList.begin(); isOk && it != pHost->mScriptUnit.mScriptRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!writeScript(*it)) { isOk = false; } } writeEndElement(); // </ScriptPackage> } if (isOk) { writeStartElement("KeyPackage"); for (auto it = pHost->mKeyUnit.mKeyRootNodeList.begin(); isOk && it != pHost->mKeyUnit.mKeyRootNodeList.end(); ++it) { if (!(*it) || (*it)->mModuleMember) { continue; } if (!writeKey(*it)) { isOk = false; } } writeEndElement(); // </KeyPackage> } if (isOk) { writeStartElement("VariablePackage"); LuaInterface* lI = pHost->getLuaInterface(); VarUnit* vu = lI->getVarUnit(); //do hidden variables first { // Blocked so that indentation reflects that of the XML file writeStartElement("HiddenVariables"); QSetIterator<QString> itHiddenVariableName(vu->hiddenByUser); while (itHiddenVariableName.hasNext()) { writeTextElement("name", itHiddenVariableName.next()); } writeEndElement(); // </HiddenVariables> } TVar* base = vu->getBase(); if (!base) { lI->getVars(false); base = vu->getBase(); } if (base) { QListIterator<TVar*> itVariable(base->getChildren(false)); while (isOk && itVariable.hasNext()) { if (!writeVariable(itVariable.next(), lI, vu)) { isOk = false; } } } writeEndElement(); // </VariablePackage> } return (isOk && (!hasError())); }