diff options
202 files changed, 5027 insertions, 4773 deletions
diff --git a/FreeFileSync/Build/Changelog.txt b/FreeFileSync/Build/Changelog.txt index 7db0e62c..f3a74ea2 100644 --- a/FreeFileSync/Build/Changelog.txt +++ b/FreeFileSync/Build/Changelog.txt @@ -1,3 +1,17 @@ +FreeFileSync 6.1 +---------------- +Released RealtimeSync for OS X +Handle errors loading reference batch config +Disable user mode exception swallowing for Windows 7 SP1 +Always exclude root nodes on manual selection when excluded items are hidden +Fixed showing duplicate custom "on completion" commands +Close old directory handle first before executing directory traversal fallback +Show negative batch synchronization result in log file name +Avoid file system race when creating temporary files +Transfer creation and modification times on folder creation +Fixed empty main dialog configuration migration issue on Mac OS X + + FreeFileSync 6.0 [2013-12-01] ----------------------------- Revised main dialog panel layout diff --git a/FreeFileSync/Build/Languages/french.lng b/FreeFileSync/Build/Languages/french.lng index ac33a190..5b2fb8f2 100644 --- a/FreeFileSync/Build/Languages/french.lng +++ b/FreeFileSync/Build/Languages/french.lng @@ -924,7 +924,7 @@ La commande est déclenchée si : <target>Sauvegarder le fichier log :</target> <source>Limit:</source> -<target>Mimite :</target> +<target>Limite :</target> <source>Limit maximum number of log files</source> <target>Nombre maximal de fichiers log</target> diff --git a/FreeFileSync/Build/Languages/hebrew.lng b/FreeFileSync/Build/Languages/hebrew.lng index 2f9cf56a..daf06a69 100644 --- a/FreeFileSync/Build/Languages/hebrew.lng +++ b/FreeFileSync/Build/Languages/hebrew.lng @@ -7,18 +7,6 @@ <plural_definition>n == 1 ? 0 : 1</plural_definition> </header> -<source> -<pluralform>Showing %y of 1 row</pluralform> -<pluralform>Showing %y of %x rows</pluralform> -</source> -<target></target> - -<source> -<pluralform>Automatic retry in 1 second...</pluralform> -<pluralform>Automatic retry in %x seconds...</pluralform> -</source> -<target></target> - <source>Both sides have changed since last synchronization.</source> <target>שני הצדדים שונו מאז הסנכרון האחרון.</target> @@ -585,6 +573,15 @@ The command is triggered if: <source>Switching to FreeFileSync's main window</source> <target>מעבר אל החלון הראשי של FreeFileSybc</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>נסיון מחדש אוטומטי בתוך שניה 1...</pluralform> +<pluralform>נסיון מחדש אוטומטי בתוך %x שניות...</pluralform> +</target> + <source>&Ignore subsequent errors</source> <target>&התעלם מאזהרות נוספות</target> @@ -1127,6 +1124,15 @@ This guarantees a consistent state even in case of a serious error. <pluralform>%x קבצים</pluralform> </target> +<source> +<pluralform>Showing %y of 1 row</pluralform> +<pluralform>Showing %y of %x rows</pluralform> +</source> +<target> +<pluralform>מראה %y מתוך שורה 1</pluralform> +<pluralform>מראה %y מתוך %x שורות</pluralform> +</target> + <source>Set direction:</source> <target>בחר כוון:</target> diff --git a/FreeFileSync/Build/Languages/ukrainian.lng b/FreeFileSync/Build/Languages/ukrainian.lng index 47246650..31fd6bbf 100644 --- a/FreeFileSync/Build/Languages/ukrainian.lng +++ b/FreeFileSync/Build/Languages/ukrainian.lng @@ -7,52 +7,6 @@ <plural_definition>n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2</plural_definition> </header> -<source>Select all</source> -<target></target> - -<source> -<pluralform>Showing %y of 1 row</pluralform> -<pluralform>Showing %y of %x rows</pluralform> -</source> -<target></target> - -<source> -<pluralform>Do you really want to execute the command %y for one item?</pluralform> -<pluralform>Do you really want to execute the command %y for %x items?</pluralform> -</source> -<target></target> - -<source> -- Requires and creates database files -- Detection active after initial sync -- Not supported by all file systems -</source> -<target></target> - -<source>Create a mirror backup of the left folder by adapting the right folder to match.</source> -<target></target> - -<source>&Check</source> -<target></target> - -<source>Retrying operation...</source> -<target></target> - -<source> -<pluralform>Automatic retry in 1 second...</pluralform> -<pluralform>Automatic retry in %x seconds...</pluralform> -</source> -<target></target> - -<source>Detecting abandoned lock...</source> -<target></target> - -<source>Lock owner:</source> -<target></target> - -<source>Waiting while directory is locked:</source> -<target></target> - <source>Both sides have changed since last synchronization.</source> <target>З моменту останньої синхронізації з обох сторін відбулися зміни.</target> @@ -269,6 +223,12 @@ <source>Cannot get process information.</source> <target>Не вдається отримати інформацію процесу</target> +<source>Waiting while directory is locked:</source> +<target>Очікування на заблокований каталог:</target> + +<source>Lock owner:</source> +<target>Власник блокування:</target> + <source> <pluralform>1 sec</pluralform> <pluralform>%x sec</pluralform> @@ -279,6 +239,9 @@ <pluralform>%x сек</pluralform> </target> +<source>Detecting abandoned lock...</source> +<target>Виявлено покинуте блокування...</target> + <source>Creating file %x</source> <target>Створення файлу %x</target> @@ -616,9 +579,22 @@ The command is triggered if: <source>Switching to FreeFileSync's main window</source> <target>Перехід до головного вікна FreeFileSync</target> +<source> +<pluralform>Automatic retry in 1 second...</pluralform> +<pluralform>Automatic retry in %x seconds...</pluralform> +</source> +<target> +<pluralform>Автоматичний повтор за %x секунду...</pluralform> +<pluralform>Автоматичний повтор за %x секунди...</pluralform> +<pluralform>Автоматичний повтор за %x секунд...</pluralform> +</target> + <source>&Ignore subsequent errors</source> <target>&Ігнорувати наступні помилки</target> +<source>Retrying operation...</source> +<target>Повтор операції...</target> + <source>Serious Error</source> <target>Серйозна помилка</target> @@ -643,6 +619,9 @@ The command is triggered if: <source>Cannot find current FreeFileSync version number online. Do you want to check manually?</source> <target>Не вдається знайти номер поточної версії FreeFileSync онлайн. Бажаєте перевірити вручну?</target> +<source>&Check</source> +<target>&Перевірити</target> + <source>Symlink</source> <target>Символьне посилання</target> @@ -832,6 +811,9 @@ The command is triggered if: <source>Identify and propagate changes on both sides. Deletions, moves and conflicts are detected automatically using a database.</source> <target>Виявити та поширити зміни на обидві сторони. Видалення, перейменування та конфлікти визначаються автоматично використовуючи базу даних.</target> +<source>Create a mirror backup of the left folder by adapting the right folder to match.</source> +<target>Створення дзеркальної резервної копії лівої папки шляхом адаптації правої папки.</target> + <source>Copy new and updated files to the right folder.</source> <target>Скопіювати нові та оновлені файли в праву папку.</target> @@ -841,6 +823,17 @@ The command is triggered if: <source>Detect moved files</source> <target>Виявляти переміщені файли</target> +<source> +- Requires and creates database files +- Detection active after initial sync +- Not supported by all file systems +</source> +<target> +- Вимагає і створює файли бази даних +- Активне спостереження після первинної синхронізації +- Підтримується не всіма файловими системами +</target> + <source>Delete files:</source> <target>Вилучити файли:</target> @@ -1108,6 +1101,16 @@ This guarantees a consistent state even in case of a serious error. <source>Confirm</source> <target>Підтвердити</target> +<source> +<pluralform>Do you really want to execute the command %y for one item?</pluralform> +<pluralform>Do you really want to execute the command %y for %x items?</pluralform> +</source> +<target> +<pluralform>Справді хочете виконати команду %y для %x елемента?</pluralform> +<pluralform>Справді хочете виконати команду %y для %x елементів?</pluralform> +<pluralform>Справді хочете виконати команду %y для %x елементів?</pluralform> +</target> + <source>&Execute</source> <target>&Виконати</target> @@ -1131,6 +1134,16 @@ This guarantees a consistent state even in case of a serious error. <pluralform>%x файлів</pluralform> </target> +<source> +<pluralform>Showing %y of 1 row</pluralform> +<pluralform>Showing %y of %x rows</pluralform> +</source> +<target> +<pluralform>Показано %y з %x рядка</pluralform> +<pluralform>Показано %y з %x рядків</pluralform> +<pluralform>Показано %y з %x рядків</pluralform> +</target> + <source>Set direction:</source> <target>Виберіть напрям:</target> @@ -1284,6 +1297,9 @@ This guarantees a consistent state even in case of a serious error. <source>Warning</source> <target>Увага</target> +<source>Select all</source> +<target>Виділити все</target> + <source>Paused</source> <target>Призупинено</target> diff --git a/FreeFileSync/Source/FreeFileSync.vcxproj b/FreeFileSync/Source/FreeFileSync.vcxproj index 2417efc1..02c70ef8 100644 --- a/FreeFileSync/Source/FreeFileSync.vcxproj +++ b/FreeFileSync/Source/FreeFileSync.vcxproj @@ -163,6 +163,8 @@ <AdditionalDependencies>Rpcrt4.lib;winmm.lib;comctl32.lib;Wininet.lib;wxmsw30u_aui.lib;wxmsw30u_adv.lib;wxmsw30u_core.lib;wxbase30u.lib;wxpng.lib;wxzlib.lib;wxbase30u_net.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> </Link> <ResourceCompile> <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> @@ -190,6 +192,8 @@ <AdditionalDependencies>Rpcrt4.lib;winmm.lib;comctl32.lib;Wininet.lib;wxmsw30u_aui.lib;wxmsw30u_adv.lib;wxmsw30u_core.lib;wxbase30u.lib;wxpng.lib;wxzlib.lib;wxbase30u_net.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> </Link> <ResourceCompile> <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> diff --git a/FreeFileSync/Source/RealtimeSync/RealtimeSync.vcxproj b/FreeFileSync/Source/RealtimeSync/RealtimeSync.vcxproj index bc04423f..d599cc17 100644 --- a/FreeFileSync/Source/RealtimeSync/RealtimeSync.vcxproj +++ b/FreeFileSync/Source/RealtimeSync/RealtimeSync.vcxproj @@ -166,6 +166,8 @@ <AdditionalDependencies>comctl32.lib;wxmsw30u_adv.lib;wxbase30u_net.lib;wxbase30u.lib;wxmsw30u_core.lib;wxpng.lib;wxzlib.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage\lib;C:\Data\C++\wxWidgets\lib\vc12_x86_release_lib</AdditionalLibraryDirectories> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> </Link> <ResourceCompile> <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> @@ -194,6 +196,8 @@ <AdditionalDependencies>comctl32.lib;wxmsw30u_adv.lib;wxbase30u_net.lib;wxbase30u.lib;wxmsw30u_core.lib;wxpng.lib;wxzlib.lib;ws2_32.lib;winmm.lib;Rpcrt4.lib;%(AdditionalDependencies)</AdditionalDependencies> <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> <AdditionalLibraryDirectories>C:\Data\C++\Boost\stage_x64\lib;C:\Data\C++\wxWidgets\lib\vc12_x64_release_lib</AdditionalLibraryDirectories> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> </Link> <ResourceCompile> <AdditionalIncludeDirectories>C:\Data\C++\wxWidgets\include</AdditionalIncludeDirectories> diff --git a/FreeFileSync/Source/RealtimeSync/main_dlg.cpp b/FreeFileSync/Source/RealtimeSync/main_dlg.cpp index 519ca555..5a6302ef 100644 --- a/FreeFileSync/Source/RealtimeSync/main_dlg.cpp +++ b/FreeFileSync/Source/RealtimeSync/main_dlg.cpp @@ -23,10 +23,12 @@ #include "../lib/help_provider.h" #include "../lib/process_xml.h" #include "../lib/ffs_paths.h" + #ifdef ZEN_LINUX #include <gtk/gtk.h> #elif defined ZEN_MAC #include <ApplicationServices/ApplicationServices.h> +#include <wx/app.h> #endif using namespace zen; @@ -130,7 +132,7 @@ MainDialog::MainDialog(wxDialog* dlg, const Zstring& cfgFileName) #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon, even if we're not an application bundle - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + ::SetFrontProcess(&psn); //if the executable is not yet in a bundle or if it is called through a launcher, we need to set focus manually: #endif } @@ -219,15 +221,16 @@ void MainDialog::OnKeyPressed(wxKeyEvent& event) void MainDialog::OnStart(wxCommandEvent& event) { - xmlAccess::XmlRealConfig currentCfg = getConfiguration(); - Hide(); #ifdef ZEN_MAC //hide dock icon: else user is able to forcefully show the hidden main dialog by clicking on the icon!! ProcessSerialNumber psn = { 0, kCurrentProcess }; ::TransformProcessType(&psn, kProcessTransformToUIElementApplication); + wxTheApp->Yield(); //required to complete TransformProcessType: else a subsequent modal dialog will be erroneously hidden! #endif + xmlAccess::XmlRealConfig currentCfg = getConfiguration(); + switch (rts::startDirectoryMonitor(currentCfg, xmlAccess::extractJobName(utfCvrtTo<Zstring>(currentConfigFileName)))) { case rts::EXIT_APP: @@ -237,11 +240,11 @@ void MainDialog::OnStart(wxCommandEvent& event) case rts::SHOW_GUI: break; } + Show(); //don't show for EXIT_APP #ifdef ZEN_MAC - //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon again - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif Raise(); } diff --git a/FreeFileSync/Source/RealtimeSync/monitor.cpp b/FreeFileSync/Source/RealtimeSync/monitor.cpp index 5ac74884..09b92af6 100644 --- a/FreeFileSync/Source/RealtimeSync/monitor.cpp +++ b/FreeFileSync/Source/RealtimeSync/monitor.cpp @@ -117,20 +117,17 @@ WaitResult waitForChanges(const std::vector<Zstring>& dirnamePhrases, //throw Fi //remove to be ignored changes vector_remove_if(changedItems, [](const DirWatcher::Entry& e) { - return endsWith(e.filename_, Zstr(".ffs_lock")) || //sync.ffs_lock, sync.Del.ffs_lock - endsWith(e.filename_, Zstr(".ffs_db")); //sync.ffs_db, .sync.tmp.ffs_db + return +#ifdef ZEN_MAC + endsWith(e.filename_, Zstr("/.DS_Store")) || +#endif + endsWith(e.filename_, Zstr(".ffs_lock")) || //sync.ffs_lock, sync.Del.ffs_lock + endsWith(e.filename_, Zstr(".ffs_db")); //sync.ffs_db, .sync.tmp.ffs_db //no need to ignore temporal recycle bin directory: this must be caused by a file deletion anyway }); if (!changedItems.empty()) - { - /* - std::for_each(changedItems.begin(), changedItems.end(), - [](const Zstring& fn) { wxMessageBox(toWx(fn));}); - */ return WaitResult(changedItems[0]); //directory change detected - } - } catch (FileError&) { diff --git a/FreeFileSync/Source/RealtimeSync/tray_menu.cpp b/FreeFileSync/Source/RealtimeSync/tray_menu.cpp index 6e67b5ec..df84974e 100644 --- a/FreeFileSync/Source/RealtimeSync/tray_menu.cpp +++ b/FreeFileSync/Source/RealtimeSync/tray_menu.cpp @@ -290,7 +290,6 @@ rts::AbortReason rts::startDirectoryMonitor(const xmlAccess::XmlRealConfig& conf } catch (const FileError& e) { - warn_static("fix dialog hiding on OSX !!") showNotificationDialog(nullptr, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); } } diff --git a/FreeFileSync/Source/algorithm.cpp b/FreeFileSync/Source/algorithm.cpp index 5f7f4abe..a58d4bb8 100644 --- a/FreeFileSync/Source/algorithm.cpp +++ b/FreeFileSync/Source/algorithm.cpp @@ -1307,15 +1307,13 @@ void deleteFromGridAndHDOneSide(std::vector<FileSystemObject*>& ptrList, { ItemDeleter<side> deleter(useRecycleBin, handler); - for (auto it = ptrList.begin(); it != ptrList.end(); ++it) //VS 2010 bug prevents replacing this by std::for_each + lamba + for (FileSystemObject* fsObj : ptrList) //all pointers are required(!) to be bound { - FileSystemObject& fsObj = **it; //all pointers are required(!) to be bound - - if (!fsObj.isEmpty<side>()) //element may be implicitly deleted, e.g. if parent folder was deleted first + if (!fsObj->isEmpty<side>()) //element may be implicitly deleted, e.g. if parent folder was deleted first tryReportingError([&] { - fsObj.accept(deleter); //throw FileError - fsObj.removeObject<side>(); //if directory: removes recursively! + fsObj->accept(deleter); //throw FileError + fsObj->removeObject<side>(); //if directory: removes recursively! }, handler); } } @@ -1409,7 +1407,7 @@ void zen::deleteFromGridAndHD(const std::vector<FileSystemObject*>& rowsToDelete if (!it->second) msg += std::wstring(L"\n") + it->first; - statusHandler.reportWarning(msg, warningRecyclerMissing); + statusHandler.reportWarning(msg, warningRecyclerMissing); //throw? } deleteFromGridAndHDOneSide<LEFT_SIDE>(deleteRecylerLeft, true, statusHandler); diff --git a/FreeFileSync/Source/application.cpp b/FreeFileSync/Source/application.cpp index b474d05f..4b3453ff 100644 --- a/FreeFileSync/Source/application.cpp +++ b/FreeFileSync/Source/application.cpp @@ -7,6 +7,7 @@ #include "application.h" #include <memory> #include <zen/file_handling.h> +#include <zen/dll.h> #include <wx/tooltip.h> #include <wx/log.h> #include <wx+/app_main.h> @@ -36,6 +37,17 @@ using namespace xmlAccess; IMPLEMENT_APP(Application) +warn_static("remove after test") +#ifdef _MSC_VER +//catch CRT floating point errors: http://msdn.microsoft.com/en-us/library/k3backsw.aspx +int _matherr(struct _exception* except) +{ + assert(false); + return 0; //use default action +} +#endif + + namespace { /* @@ -52,10 +64,27 @@ wxSafeShowMessage(_("An exception occurred"), msg); std::abort(); } */ +#ifdef ZEN_WIN + void enableCrashingOnCrashes() //should be needed for 32-bit code only: http://randomascii.wordpress.com/2012/07/05/when-even-crashing-doesnt-work + { + typedef BOOL (WINAPI* GetProcessUserModeExceptionPolicyFun)(LPDWORD lpFlags); + typedef BOOL (WINAPI* SetProcessUserModeExceptionPolicyFun)( DWORD dwFlags); + const DWORD EXCEPTION_SWALLOWING = 0x1; + + const SysDllFun<GetProcessUserModeExceptionPolicyFun> getProcessUserModeExceptionPolicy(L"kernel32.dll", "GetProcessUserModeExceptionPolicy"); + const SysDllFun<SetProcessUserModeExceptionPolicyFun> setProcessUserModeExceptionPolicy(L"kernel32.dll", "SetProcessUserModeExceptionPolicy"); + if (getProcessUserModeExceptionPolicy && setProcessUserModeExceptionPolicy) //available since Windows 7 SP1 + { + DWORD dwFlags = 0; + if (getProcessUserModeExceptionPolicy(&dwFlags) && (dwFlags & EXCEPTION_SWALLOWING)) + setProcessUserModeExceptionPolicy(dwFlags & ~EXCEPTION_SWALLOWING); + } + } #ifdef _MSC_VER void crtInvalidParameterHandler(const wchar_t* expression, const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved) { assert(false); } #endif +#endif std::vector<Zstring> getCommandlineArgs(const wxApp& app) @@ -122,6 +151,8 @@ bool Application::OnInit() //std::set_terminate(onTerminationRequested); //unlike wxWidgets uncaught exception handling, this works for all worker threads #ifdef ZEN_WIN + enableCrashingOnCrashes(); + #ifdef _MSC_VER _set_invalid_parameter_handler(crtInvalidParameterHandler); //see comment in <zen/time.h> #endif diff --git a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp b/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp index f56df9e7..8d53db3b 100644 --- a/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp +++ b/FreeFileSync/Source/dll/IFileDialog_Vista/ifile_dialog.cpp @@ -34,6 +34,7 @@ bool showFolderPickerImpl(HWND ownerWindow, //throw SysError; return "false" if FILEOPENDIALOGOPTIONS dlgOptions = 0; ZEN_COM_CHECK(fileDlg->GetOptions(&dlgOptions)); //throw SysError ZEN_COM_CHECK(fileDlg->SetOptions(dlgOptions | FOS_PICKFOLDERS | FOS_NOVALIDATE | FOS_FORCEFILESYSTEM)); + //the C:\Windows\Fonts system folder is not shown with FOS_PICKFOLDERS but incorrectly categorized as system *file*!!! if (defaultFolder) //show last selection instead of top level if no default available { @@ -61,6 +62,7 @@ bool showFolderPickerImpl(HWND ownerWindow, //throw SysError; return "false" if return true; } + wchar_t* allocString(const std::wstring& msg) //ownership passed { auto tmp = new wchar_t [msg.size() + 1]; //std::bad_alloc ? diff --git a/FreeFileSync/Source/file_hierarchy.h b/FreeFileSync/Source/file_hierarchy.h index 51ad113b..72134f00 100644 --- a/FreeFileSync/Source/file_hierarchy.h +++ b/FreeFileSync/Source/file_hierarchy.h @@ -8,6 +8,7 @@ #define FILEHIERARCHY_H_INCLUDED #include <map> +#include <cstddef> //required by GCC 4.8.1 to find ptrdiff_t #include <string> #include <memory> #include <functional> diff --git a/FreeFileSync/Source/lib/db_file.cpp b/FreeFileSync/Source/lib/db_file.cpp index b8952c8a..b90794f9 100644 --- a/FreeFileSync/Source/lib/db_file.cpp +++ b/FreeFileSync/Source/lib/db_file.cpp @@ -544,8 +544,8 @@ private: //create or update new "in-sync" state InSyncFile& file = updateItem(dbFiles, fileObj.getObjShortName(), - InSyncFile(InSyncDescrFile(fileObj.getLastWriteTime<LEFT_SIDE>(), - fileObj.getFileId <LEFT_SIDE>()), + InSyncFile(InSyncDescrFile(fileObj.getLastWriteTime<LEFT_SIDE >(), + fileObj.getFileId <LEFT_SIDE >()), InSyncDescrFile(fileObj.getLastWriteTime<RIGHT_SIDE>(), fileObj.getFileId <RIGHT_SIDE>()), activeCmpVar_, diff --git a/FreeFileSync/Source/lib/generate_logfile.h b/FreeFileSync/Source/lib/generate_logfile.h index 34e1c247..313a80ed 100644 --- a/FreeFileSync/Source/lib/generate_logfile.h +++ b/FreeFileSync/Source/lib/generate_logfile.h @@ -106,9 +106,9 @@ void saveLogToFile(const SummaryInfo& summary, //throw FileError fileOut.write(&*header.begin(), header.size()); //throw FileError //write log items one after the other instead of creating one big string: memory allocation might fail; think 1 million entries! - for (auto iter = log.begin(); iter != log.end(); ++iter) + for (const LogEntry& entry : log) { - Utf8String msg = replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(*iter)), '\n', LINE_BREAK); + Utf8String msg = replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(entry)), '\n', LINE_BREAK); msg += LINE_BREAK; //make sure string is not empty! fileOut.write(&*msg.begin(), msg.size()); //throw FileError @@ -128,9 +128,9 @@ void saveToLastSyncsLog(const SummaryInfo& summary, //throw FileError newStream += LINE_BREAK; //check size of "newStream": memory allocation might fail - think 1 million entries! - for (auto iter = log.begin(); iter != log.end(); ++iter) + for (const LogEntry& entry : log) { - newStream += replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(*iter)), '\n', LINE_BREAK); + newStream += replaceCpy(utfCvrtTo<Utf8String>(formatMessage<std::wstring>(entry)), '\n', LINE_BREAK); newStream += LINE_BREAK; if (newStream.size() > maxBytesToWrite) diff --git a/FreeFileSync/Source/lib/icon_buffer.cpp b/FreeFileSync/Source/lib/icon_buffer.cpp index 82bdda62..2781fe95 100644 --- a/FreeFileSync/Source/lib/icon_buffer.cpp +++ b/FreeFileSync/Source/lib/icon_buffer.cpp @@ -150,7 +150,7 @@ const bool wereVistaOrLater = vistaOrLater(); //thread-safety: init at startup thumb::IconSizeType getThumbSizeType(IconBuffer::IconSize sz) { - //coordinate with IconBuffer::getSize()! + //coordinate with IconBuffer::getSize()! using namespace thumb; switch (sz) { @@ -239,7 +239,7 @@ bool zen::hasLinkExtension(const Zstring& filename) const Zstring& extension = getFileExtension(filename); return linkExt.find(extension) != linkExt.end(); #elif defined ZEN_LINUX - const Zstring& extension = getFileExtension(filename); + const Zstring& extension = getFileExtension(filename); return extension == "desktop"; #elif defined ZEN_MAC return false; //alias files already get their arrow icon via "NSWorkspace::iconForFile" @@ -667,7 +667,7 @@ namespace { const wchar_t* getLinkResourceName(IconBuffer::IconSize sz) { - //coordinate with IconBuffer::getSize()! + //coordinate with IconBuffer::getSize()! switch (sz) { case IconBuffer::SIZE_SMALL: diff --git a/FreeFileSync/Source/lib/process_xml.cpp b/FreeFileSync/Source/lib/process_xml.cpp index fb0000f7..128f1f14 100644 --- a/FreeFileSync/Source/lib/process_xml.cpp +++ b/FreeFileSync/Source/lib/process_xml.cpp @@ -117,40 +117,26 @@ xmlAccess::XmlGuiConfig xmlAccess::convertBatchToGui(const xmlAccess::XmlBatchCo } -xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatch(const xmlAccess::XmlGuiConfig& guiCfg) //noexcept +xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatch(const xmlAccess::XmlGuiConfig& guiCfg, const XmlBatchConfig* referenceBatchCfg) //noexcept { - XmlBatchConfig output; //use default batch-settings - output.mainCfg = guiCfg.mainCfg; - - switch (guiCfg.handleError) - { - case ON_GUIERROR_POPUP: - output.handleError = ON_ERROR_POPUP; - break; - case ON_GUIERROR_IGNORE: - output.handleError = ON_ERROR_IGNORE; - break; - } - return output; -} + XmlBatchConfig output; - -xmlAccess::XmlBatchConfig xmlAccess::convertGuiToBatchPreservingExistingBatch(const xmlAccess::XmlGuiConfig& guiCfg, const Zstring& referenceBatchFile) //noexcept -{ - //try to take over batch-specific settings from reference file if possible - if (!referenceBatchFile.empty()) - try + //try to take over batch-specific settings from reference if available + if (referenceBatchCfg) + output = *referenceBatchCfg; + else + switch (guiCfg.handleError) { - XmlBatchConfig batchCfg; - readConfig(referenceBatchFile, batchCfg); //throw FfsXmlError - - batchCfg.mainCfg = guiCfg.mainCfg; - return batchCfg; + case ON_GUIERROR_POPUP: + output.handleError = ON_ERROR_POPUP; + break; + case ON_GUIERROR_IGNORE: + output.handleError = ON_ERROR_IGNORE; + break; } - catch (xmlAccess::FfsXmlError&) {} - warn_static("not good enough") - return convertGuiToBatch(guiCfg); + output.mainCfg = guiCfg.mainCfg; + return output; } @@ -1114,7 +1100,7 @@ void readConfig(const XmlIn& in, XmlGlobalSettings& config) //########################################################### inWnd["DefaultView" ](config.gui.viewFilterDefault); - inWnd["Perspective"](config.gui.guiPerspectiveLast); + inWnd["Perspective3"](config.gui.guiPerspectiveLast); std::vector<Zstring> tmp = splitFilterByLines(config.gui.defaultExclusionFilter); //default value inGui["DefaultExclusionFilter"](tmp); @@ -1501,7 +1487,7 @@ void writeConfig(const XmlGlobalSettings& config, XmlOut& out) //########################################################### outWnd["DefaultView" ](config.gui.viewFilterDefault); - outWnd["Perspective"](config.gui.guiPerspectiveLast); + outWnd["Perspective3"](config.gui.guiPerspectiveLast); outGui["DefaultExclusionFilter"](splitFilterByLines(config.gui.defaultExclusionFilter)); diff --git a/FreeFileSync/Source/lib/process_xml.h b/FreeFileSync/Source/lib/process_xml.h index a7724e25..33981ebe 100644 --- a/FreeFileSync/Source/lib/process_xml.h +++ b/FreeFileSync/Source/lib/process_xml.h @@ -287,8 +287,7 @@ void readAnyConfig(const std::vector<Zstring>& filenames, XmlGuiConfig& config); //config conversion utilities XmlGuiConfig convertBatchToGui(const XmlBatchConfig& batchCfg); //noexcept -XmlBatchConfig convertGuiToBatch(const XmlGuiConfig& guiCfg ); // -XmlBatchConfig convertGuiToBatchPreservingExistingBatch(const xmlAccess::XmlGuiConfig& guiCfg, const Zstring& referenceBatchFile); //noexcept +XmlBatchConfig convertGuiToBatch(const XmlGuiConfig& guiCfg, const XmlBatchConfig* referenceBatchCfg); // std::wstring extractJobName(const Zstring& configFilename); } diff --git a/FreeFileSync/Source/lib/versioning.cpp b/FreeFileSync/Source/lib/versioning.cpp index 19d90dbc..bc24b8d4 100644 --- a/FreeFileSync/Source/lib/versioning.cpp +++ b/FreeFileSync/Source/lib/versioning.cpp @@ -1,5 +1,6 @@ #include "versioning.h" #include <map> +#include <cstddef> //required by GCC 4.8.1 to find ptrdiff_t #include <zen/file_handling.h> #include <zen/file_traverser.h> #include <zen/string_tools.h> diff --git a/FreeFileSync/Source/structures.cpp b/FreeFileSync/Source/structures.cpp index c04eb222..b3bff7e8 100644 --- a/FreeFileSync/Source/structures.cpp +++ b/FreeFileSync/Source/structures.cpp @@ -436,7 +436,7 @@ MainConfiguration zen::merge(const std::vector<MainConfiguration>& mainCfgs) fp.localFilter = mergeFilterConfig(mainCfg.globalFilter, fp.localFilter); } - fpMerged.insert(fpMerged.end(), fpTmp.begin(), fpTmp.end()); + vector_append(fpMerged, fpTmp); } if (fpMerged.empty()) diff --git a/FreeFileSync/Source/synchronization.cpp b/FreeFileSync/Source/synchronization.cpp index 1c1aad7e..6f2cdb6a 100644 --- a/FreeFileSync/Source/synchronization.cpp +++ b/FreeFileSync/Source/synchronization.cpp @@ -935,34 +935,30 @@ bool haveNameClash(const Zstring& shortname, List& m) } -Zstring findUnusedTempName(const Zstring& filename) -{ - Zstring output = filename + zen::TEMP_FILE_ENDING; - - //ensure uniqueness (+ minor file system race condition!) - for (int i = 1; somethingExists(output); ++i) - output = filename + Zchar('_') + numberTo<Zstring>(i) + zen::TEMP_FILE_ENDING; - - return output; -} - - template <SelectedSide side> void SynchronizeFolderPair::prepare2StepMove(FilePair& sourceObj, FilePair& targetObj) //throw FileError { const Zstring& source = sourceObj.getFullName<side>(); - const Zstring& tmpTarget = findUnusedTempName(sourceObj.getBaseDirPf<side>() + sourceObj.getShortName<side>()); + Zstring tmpTarget = sourceObj.getBaseDirPf<side>() + sourceObj.getShortName<side>() + TEMP_FILE_ENDING; //this could still lead to a name-clash in obscure cases, if some file exists on the other side with //the very same (.ffs_tmp) name and is copied before the second step of the move is executed //good news: even in this pathologic case, this may only prevent the copy of the other file, but not the move - reportInfo(txtMovingFile, source, tmpTarget); + for (int i = 1;; ++i) + try + { + reportInfo(txtMovingFile, source, tmpTarget); + renameFile(source, tmpTarget); //throw FileError, ErrorTargetExisting + break; + } + catch (const ErrorTargetExisting&) //repeat until unique name found: no file system race condition! + { + tmpTarget = sourceObj.getBaseDirPf<side>() + sourceObj.getShortName<side>() + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING; + } warn_static("was wenn diff volume: symlink aliasing!") //throw FileError, ErrorDifferentVolume, ErrorTargetExisting - renameFile(source, tmpTarget); //throw FileError - //update file hierarchy const FileDescriptor descrSource(sourceObj.getLastWriteTime <side>(), sourceObj.getFileSize <side>(), diff --git a/FreeFileSync/Source/ui/batch_status_handler.cpp b/FreeFileSync/Source/ui/batch_status_handler.cpp index e9663654..50537e84 100644 --- a/FreeFileSync/Source/ui/batch_status_handler.cpp +++ b/FreeFileSync/Source/ui/batch_status_handler.cpp @@ -22,6 +22,21 @@ using namespace zen; namespace { +//"Backup FreeFileSync 2013-09-15 015052.log" -> +//"Backup FreeFileSync 2013-09-15 015052 (Error).log" +Zstring addStatusToLogfilename(const Zstring& logfilename, const std::wstring& status) +{ + //attention: do not interfere with naming convention required by limitLogfileCount()! + size_t pos = logfilename.rfind(Zstr(".")); + if (pos != Zstring::npos) + return Zstring(logfilename.begin(), logfilename.begin() + pos) + + utfCvrtTo<Zstring>(L" (" + status + L")") + + Zstring(logfilename.begin() + pos, logfilename.end()); + assert(false); + return logfilename; +} + + class FindLogfiles : public TraverseCallback { public: @@ -49,9 +64,7 @@ void limitLogfileCount(const Zstring& logdir, const std::wstring& jobname, size_ { std::vector<Zstring> logFiles; FindLogfiles traverseCallback(utfCvrtTo<Zstring>(jobname), logFiles); //throw()! - - traverseFolder(logdir, - traverseCallback); + traverseFolder(logdir, traverseCallback); if (logFiles.size() <= maxCount) return; @@ -68,11 +81,11 @@ std::unique_ptr<FileOutput> prepareNewLogfile(const Zstring& logfileDirectory, / const std::wstring& jobName, const TimeComp& timeStamp) //return value always bound! { - //create logfile directory if required Zstring logfileDir = logfileDirectory.empty() ? getConfigDir() + Zstr("Logs") : getFormattedDirectoryName(logfileDirectory); + //create logfile directory if required makeDirectory(logfileDir); //throw FileError //assemble logfile name @@ -236,6 +249,16 @@ BatchStatusHandler::~BatchStatusHandler() try { saveLogToFile(summary, errorLog, *logFile); //throw FileError + + //additionally notify errors by showing in log file name + const Zstring oldLogfilename = logFile->getFilename(); + logFile.reset(); + + if (abortIsRequested()) + renameFile(oldLogfilename, addStatusToLogfilename(oldLogfilename, _("Stopped"))); //throw FileError + else if (totalErrors > 0) + renameFile(oldLogfilename, addStatusToLogfilename(oldLogfilename, _("Error"))); //throw FileError + //status "warning" is not important enough to show up in log file name } catch (FileError&) {} } diff --git a/FreeFileSync/Source/ui/exec_finished_box.cpp b/FreeFileSync/Source/ui/exec_finished_box.cpp index cbbfa17d..2c7464c7 100644 --- a/FreeFileSync/Source/ui/exec_finished_box.cpp +++ b/FreeFileSync/Source/ui/exec_finished_box.cpp @@ -107,23 +107,21 @@ void ExecFinishedBox::addItemHistory() std::wstring command = getValue(); trim(command); - bool skipCmd = command == separationLine || //do not add sep. line + if (command == separationLine || //do not add sep. line command == cmdTxtCloseProgressDlg || //do not add special command - command.empty(); + command.empty()) + return; //do not add built-in commands to history - if (!skipCmd) - { - for (auto it = defaultCommands.begin(); it != defaultCommands.end(); ++it) - if (command == it->first || - command == it->second) - { - skipCmd = true; - break; - } - } + for (const auto& item : defaultCommands) + if (command == item.first || + command == item.second) + return; + + for (const std::wstring& item : *history_) + if (command == item) + return; - if (!skipCmd) history_->insert(history_->begin(), command); if (history_->size() > historyMax_) @@ -176,7 +174,7 @@ void ExecFinishedBox::setValueAndUpdateList(const std::wstring& value) if (history_ && !history_->empty()) { items.push_back(separationLine); - items.insert(items.end(), history_->begin(), history_->end()); + vector_append(items, *history_); std::sort(items.end() - history_->size(), items.end()); } diff --git a/FreeFileSync/Source/ui/gui_generated.cpp b/FreeFileSync/Source/ui/gui_generated.cpp index 8ddfc163..17bde8bd 100644 --- a/FreeFileSync/Source/ui/gui_generated.cpp +++ b/FreeFileSync/Source/ui/gui_generated.cpp @@ -1327,6 +1327,8 @@ SyncCfgDlgGenerated::SyncCfgDlgGenerated( wxWindow* parent, wxWindowID id, const bSizerConfig->Add( 0, 5, 0, 0, 5 ); m_bitmapDatabase = new wxStaticBitmap( m_panel37, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), 0 ); + m_bitmapDatabase->SetToolTip( _("Detect synchronization directions with the help of database files") ); + bSizerConfig->Add( m_bitmapDatabase, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP, 10 ); wxBoxSizer* sbSizerKeepWidthStableIfSyncDirsNotShown; diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp index 9d7aa4c2..d4a76765 100644 --- a/FreeFileSync/Source/ui/main_dlg.cpp +++ b/FreeFileSync/Source/ui/main_dlg.cpp @@ -444,8 +444,8 @@ void MainDialog::create(const xmlAccess::XmlGuiConfig& guiCfg, frame->Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon, even if we're not an application bundle + ::SetFrontProcess(&psn); //if the executable is not yet in a bundle or if it is called through a launcher, we need to set focus manually: #endif } @@ -1078,16 +1078,25 @@ std::vector<FileSystemObject*> MainDialog::getTreeSelection() const if (std::unique_ptr<TreeView::Node> node = treeDataView->getLine(row)) { if (auto root = dynamic_cast<const TreeView::RootNode*>(node.get())) - { - //select first level of child elements - for (auto& fsObj : root->baseDirObj_.refSubDirs ()) output.push_back(&fsObj); - for (auto& fsObj : root->baseDirObj_.refSubFiles()) output.push_back(&fsObj); - for (auto& fsObj : root->baseDirObj_.refSubLinks()) output.push_back(&fsObj); - } + { + //selecting root means "select everything", *ignoring* current view filter! + BaseDirPair& baseDir = root->baseDirObj_; + + std::vector<FileSystemObject*> dirsFilesAndLinks; + + for (FileSystemObject& fsObj : baseDir.refSubDirs()) //no need to explicitly add child elements! + dirsFilesAndLinks.push_back(&fsObj); + for (FileSystemObject& fsObj : baseDir.refSubFiles()) + dirsFilesAndLinks.push_back(&fsObj); + for (FileSystemObject& fsObj : baseDir.refSubLinks()) + dirsFilesAndLinks.push_back(&fsObj); + + vector_append(output, dirsFilesAndLinks); + } else if (auto dir = dynamic_cast<const TreeView::DirNode*>(node.get())) output.push_back(&(dir->dirObj_)); else if (auto file = dynamic_cast<const TreeView::FilesNode*>(node.get())) - output.insert(output.end(), file->filesAndLinks_.begin(), file->filesAndLinks_.end()); + vector_append(output, file->filesAndLinks_); else assert(false); } return output; @@ -1688,7 +1697,9 @@ void MainDialog::onTreeButtonEvent(wxKeyEvent& event) { const std::vector<FileSystemObject*>& selection = getTreeSelection(); if (!selection.empty()) - setFilterManually(selection, !selection[0]->isActive()); + setFilterManually(selection, m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()); + //always exclude items if "m_bpButtonShowExcluded is unchecked" => yes, it's possible to have already unchecked items in selection, so we need to overwrite: + //e.g. select root node while the first item returned is not shown on grid! } return; @@ -1779,7 +1790,7 @@ void MainDialog::onGridButtonEvent(wxKeyEvent& event, Grid& grid, bool leftSide) { const std::vector<FileSystemObject*>& selection = getGridSelection(); if (!selection.empty()) - setFilterManually(selection, !selection[0]->isActive()); + setFilterManually(selection, m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()); } return; @@ -2041,10 +2052,10 @@ void MainDialog::onNaviGridContext(GridClickEvent& event) //---------------------------------------------------------------------------------------------------- if (!selection.empty()) { - if (selection[0]->isActive()) - menu.addItem(_("Exclude temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, false); }, &getResourceImage(L"checkboxFalse")); - else + if (m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()) menu.addItem(_("Include temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, true); }, &getResourceImage(L"checkboxTrue")); + else + menu.addItem(_("Exclude temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, false); }, &getResourceImage(L"checkboxFalse")); } else menu.addItem(_("Exclude temporarily") + L"\tSpace", [] {}, nullptr, false); @@ -2169,10 +2180,10 @@ void MainDialog::onMainGridContextRim(bool leftSide) //---------------------------------------------------------------------------------------------------- if (!selection.empty()) { - if (selection[0]->isActive()) - menu.addItem(_("Exclude temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, false); }, &getResourceImage(L"checkboxFalse")); - else + if (m_bpButtonShowExcluded->isActive() && !selection[0]->isActive()) menu.addItem(_("Include temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, true); }, &getResourceImage(L"checkboxTrue")); + else + menu.addItem(_("Exclude temporarily") + L"\tSpace", [this, &selection] { setFilterManually(selection, false); }, &getResourceImage(L"checkboxFalse")); } else menu.addItem(_("Exclude temporarily") + L"\tSpace", [] {}, nullptr, false); @@ -2709,13 +2720,13 @@ void MainDialog::OnSaveAsBatchJob(wxCommandEvent& event) } -bool MainDialog::trySaveConfig(const Zstring* fileNameGui) //return true if saved successfully +bool MainDialog::trySaveConfig(const Zstring* guiFilename) //return true if saved successfully { Zstring targetFilename; - if (fileNameGui) + if (guiFilename) { - targetFilename = *fileNameGui; + targetFilename = *guiFilename; assert(endsWith(targetFilename, Zstr(".ffs_gui"))); } else @@ -2755,27 +2766,50 @@ bool MainDialog::trySaveConfig(const Zstring* fileNameGui) //return true if save } -bool MainDialog::trySaveBatchConfig(const Zstring* fileNameBatch) +bool MainDialog::trySaveBatchConfig(const Zstring* batchFileToUpdate) { - //essentially behave like trySaveConfig(): the collateral damage of not saving GUI-only settings "hideExcludedItems, m_bpButtonViewTypeSyncAction" is negliable + using namespace xmlAccess; - const xmlAccess::XmlGuiConfig guiCfg = getConfig(); + //essentially behave like trySaveConfig(): the collateral damage of not saving GUI-only settings "m_bpButtonViewTypeSyncAction" is negliable - Zstring targetFilename; - xmlAccess::XmlBatchConfig batchCfg; + const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && !EqualFilename()(activeConfigFiles[0], lastRunConfigName()) ? activeConfigFiles[0] : Zstring(); + const XmlGuiConfig guiCfg = getConfig(); - if (fileNameBatch) + //prepare batch config: reuse existing batch-specific settings from file if available + XmlBatchConfig batchCfg; + try { - targetFilename = *fileNameBatch; - batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, *fileNameBatch); - assert(endsWith(targetFilename, Zstr(".ffs_batch"))); + Zstring referenceBatchFile; + if (batchFileToUpdate) + referenceBatchFile = *batchFileToUpdate; + else if (!activeCfgFilename.empty()) + if (getXmlType(activeCfgFilename) == XML_TYPE_BATCH) //throw FfsXmlError + referenceBatchFile = activeCfgFilename; + + if (referenceBatchFile.empty()) + batchCfg = convertGuiToBatch(guiCfg, nullptr); + else + { + XmlBatchConfig referenceBatchCfg; + readConfig(referenceBatchFile, referenceBatchCfg); //throw FfsXmlError + batchCfg = convertGuiToBatch(guiCfg, &referenceBatchCfg); + } } - else + catch (const FfsXmlError& e) { - const Zstring activeCfgFilename = activeConfigFiles.size() == 1 && !EqualFilename()(activeConfigFiles[0], lastRunConfigName()) ? activeConfigFiles[0] : Zstring(); - batchCfg = convertGuiToBatchPreservingExistingBatch(guiCfg, activeCfgFilename); + showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); + return false; + } - //let user change batch config: this should change batch-exclusive settings only, else the "setLastUsedConfig" below would be somewhat of a lie + Zstring targetFilename; + if (batchFileToUpdate) + { + targetFilename = *batchFileToUpdate; + assert(endsWith(targetFilename, Zstr(".ffs_batch"))); + } + else + { + //let user update batch config: this should change batch-exclusive settings only, else the "setLastUsedConfig" below would be somewhat of a lie if (!customizeBatchConfig(this, batchCfg, //in/out globalCfg.gui.onCompletionHistory, @@ -2801,13 +2835,13 @@ bool MainDialog::trySaveBatchConfig(const Zstring* fileNameBatch) try { - xmlAccess::writeConfig(batchCfg, targetFilename); //throw FfsXmlError + writeConfig(batchCfg, targetFilename); //throw FfsXmlError setLastUsedConfig(targetFilename, guiCfg); //[!] behave as if we had saved guiCfg flashStatusInformation(_("Configuration saved")); return true; } - catch (const xmlAccess::FfsXmlError& e) + catch (const FfsXmlError& e) { showNotificationDialog(this, DialogInfoType::ERROR2, PopupDialogCfg().setDetailInstructions(e.toString())); return false; diff --git a/FreeFileSync/Source/ui/main_dlg.h b/FreeFileSync/Source/ui/main_dlg.h index 7600edc4..43889fcb 100644 --- a/FreeFileSync/Source/ui/main_dlg.h +++ b/FreeFileSync/Source/ui/main_dlg.h @@ -74,8 +74,8 @@ private: bool loadConfiguration(const std::vector<Zstring>& filenames); //return true if loaded successfully - bool trySaveConfig (const Zstring* fileNameGui); //return true if saved successfully - bool trySaveBatchConfig(const Zstring* fileNameBatch); // + bool trySaveConfig (const Zstring* guiFilename); //return true if saved successfully + bool trySaveBatchConfig(const Zstring* batchFileToUpdate); // bool saveOldConfig(); //return false on user abort static const Zstring& lastRunConfigName(); diff --git a/FreeFileSync/Source/ui/progress_indicator.cpp b/FreeFileSync/Source/ui/progress_indicator.cpp index 972ea820..1eebd3bb 100644 --- a/FreeFileSync/Source/ui/progress_indicator.cpp +++ b/FreeFileSync/Source/ui/progress_indicator.cpp @@ -1335,7 +1335,7 @@ SyncProgressDialogImpl<TopLevelDialog>::SyncProgressDialogImpl(long style, //wxF #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon (consider non-silent batch mode) - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + ::SetFrontProcess(&psn); #endif pnl.m_buttonStop->SetFocus(); //don't steal focus when starting in sys-tray! @@ -1359,9 +1359,8 @@ SyncProgressDialogImpl<TopLevelDialog>::~SyncProgressDialogImpl() parentFrame_->Show(); #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; - //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon (consider GUI mode with "close progress dialog") - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif //if (parentFrame_->IsIconized()) //caveat: if window is maximized calling Iconize(false) will erroneously un-maximize! // parentFrame_->Iconize(false); @@ -2090,6 +2089,8 @@ void SyncProgressDialogImpl<TopLevelDialog>::minimizeToTray() //hide dock icon: else user is able to forcefully show the hidden main dialog by clicking on the icon!! ProcessSerialNumber psn = { 0, kCurrentProcess }; ::TransformProcessType(&psn, kProcessTransformToUIElementApplication); + wxTheApp->Yield(); //required to complete TransformProcessType: else a subsequent modal dialog will be erroneously hidden! + //-> Yield probably not needed here since we continue the event loop afterwards! #endif } } @@ -2121,9 +2122,8 @@ void SyncProgressDialogImpl<TopLevelDialog>::resumeFromSystray() #ifdef ZEN_MAC ProcessSerialNumber psn = { 0, kCurrentProcess }; - //why isn't this covered by wxWindows::Raise()?? ::TransformProcessType(&psn, kProcessTransformToForegroundApplication); //show dock icon again - ::SetFrontProcess(&psn); //call before TransformProcessType() so that OSX menu is updated correctly + ::SetFrontProcess(&psn); //why isn't this covered by wxWindows::Raise()?? #endif } } diff --git a/FreeFileSync/Source/ui/tree_view.cpp b/FreeFileSync/Source/ui/tree_view.cpp index 04da8827..e2db3673 100644 --- a/FreeFileSync/Source/ui/tree_view.cpp +++ b/FreeFileSync/Source/ui/tree_view.cpp @@ -672,15 +672,15 @@ std::unique_ptr<TreeView::Node> TreeView::getLine(size_t row) const { if (row < flatTree.size()) { - const auto level = flatTree[row].level_; + const auto level = flatTree[row].level_; const int percent = flatTree[row].percent_; switch (flatTree[row].type_) { case TreeView::TYPE_ROOT: { - const auto* root = static_cast<const TreeView::RootNodeImpl*>(flatTree[row].node_); - return make_unique<TreeView::RootNode>(percent, root->bytesGross, root->itemCountGross, getStatus(row), *(root->baseDirObj), root->displayName); + const auto& root = *static_cast<const TreeView::RootNodeImpl*>(flatTree[row].node_); + return make_unique<TreeView::RootNode>(percent, root.bytesGross, root.itemCountGross, getStatus(row), *root.baseDirObj, root.displayName); } break; diff --git a/FreeFileSync/Source/ui/tree_view.h b/FreeFileSync/Source/ui/tree_view.h index 1c648171..c9152c89 100644 --- a/FreeFileSync/Source/ui/tree_view.h +++ b/FreeFileSync/Source/ui/tree_view.h @@ -70,8 +70,10 @@ public: struct FilesNode : public Node { - FilesNode(int percent, UInt64 bytes, int itemCount, unsigned int level, const std::vector<FileSystemObject*>& filesAndLinks) : Node(percent, bytes, itemCount, level, STATUS_EMPTY), filesAndLinks_(filesAndLinks) {} - std::vector<FileSystemObject*> filesAndLinks_; //files or symlinks; pointers are bound! + FilesNode(int percent, UInt64 bytes, int itemCount, unsigned int level, const std::vector<FileSystemObject*>& filesAndLinks) : + Node(percent, bytes, itemCount, level, STATUS_EMPTY), filesAndLinks_(filesAndLinks) {} + + std::vector<FileSystemObject*> filesAndLinks_; //files and symlinks matching view filter; pointers are bound! }; struct DirNode : public Node @@ -82,7 +84,9 @@ public: struct RootNode : public Node { - RootNode(int percent, UInt64 bytes, int itemCount, NodeStatus status, BaseDirPair& baseDirObj, const Zstring displayName) : Node(percent, bytes, itemCount, 0, status), baseDirObj_(baseDirObj), displayName_(displayName) {} + RootNode(int percent, UInt64 bytes, int itemCount, NodeStatus status, BaseDirPair& baseDirObj, const Zstring displayName) : + Node(percent, bytes, itemCount, 0, status), baseDirObj_(baseDirObj), displayName_(displayName) {} + BaseDirPair& baseDirObj_; Zstring displayName_; }; @@ -113,7 +117,7 @@ private: std::vector<DirNodeImpl> subDirs; FileSystemObject::ObjectId firstFileId; //weak pointer to first FilePair or SymlinkPair //- "compress" algorithm may hide file nodes for directories with a single included file, i.e. itemCountGross == itemCountNet == 1 - //- a HierarchyObject* would a better fit, but we need weak pointer semantics! + //- a HierarchyObject* would be a better fit, but we need weak pointer semantics! //- a std::vector<FileSystemObject::ObjectId> would be a better design, but we don't want a second memory structure as large as custom grid! }; diff --git a/FreeFileSync/Source/version/version.h b/FreeFileSync/Source/version/version.h index fa50d479..e3b7e082 100644 --- a/FreeFileSync/Source/version/version.h +++ b/FreeFileSync/Source/version/version.h @@ -3,7 +3,7 @@ namespace zen { -const wchar_t currentVersion[] = L"6.0"; //internal linkage! +const wchar_t currentVersion[] = L"6.1"; //internal linkage! } #endif diff --git a/zen/FindFilePlus/find_file_plus.cpp b/zen/FindFilePlus/find_file_plus.cpp index ea58005e..247b916c 100644 --- a/zen/FindFilePlus/find_file_plus.cpp +++ b/zen/FindFilePlus/find_file_plus.cpp @@ -285,15 +285,15 @@ bool FileSearcher::readDirImpl(FileInformation& output) //throw NtFileError; ret /* corresponding first access in ::FindFirstFileW() NTSTATUS rv = ntQueryDirectoryFile(hDir, //__in HANDLE fileHandle, - nullptr, //__in_opt HANDLE event, - nullptr, //__in_opt PIO_APC_ROUTINE apcRoutine, - nullptr, //__in_opt PVOID apcContext, + nullptr, //__in_opt HANDLE event, + nullptr, //__in_opt PIO_APC_ROUTINE apcRoutine, + nullptr, //__in_opt PVOID apcContext, &status, //__out PIO_STATUS_BLOCK ioStatusBlock, &buffer, //__out_bcount(Length) PVOID fileInformation, BUFFER_SIZE, //__in ULONG length, ::FindFirstFileW() on all XP/Win7/Win8 uses sizeof(FILE_BOTH_DIR_INFORMATION) + sizeof(TCHAR) * MAX_PATH == 0x268 FileIdBothDirectoryInformation, //__in FILE_INFORMATION_CLASS fileInformationClass - all XP/Win7/Win8 use "FileBothDirectoryInformation" true, //__in BOOLEAN returnSingleEntry, - nullptr, //__in_opt PUNICODE_STRING mask, + nullptr, //__in_opt PUNICODE_STRING mask, false); //__in BOOLEAN restartScan */ diff --git a/zen/debug_minidump.cpp b/zen/debug_minidump.cpp index 1b625015..29500ae4 100644 --- a/zen/debug_minidump.cpp +++ b/zen/debug_minidump.cpp @@ -9,18 +9,33 @@ #include <sstream> #include <cassert> #include <cstdlib> //malloc(), free() +#include <zen/file_error.h> +#include <zen/scope_guard.h> +#include <zen/time.h> #include "win.h" //includes "windows.h" #include "DbgHelp.h" //available for MSC only #pragma comment(lib, "Dbghelp.lib") +using namespace zen; + namespace { -LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo) +LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo) //blocks showing message boxes on success and error! { - HANDLE hFile = ::CreateFile(L"exception.dmp", GENERIC_READ | GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile != INVALID_HANDLE_VALUE) + assert(false); + + const Zstring filename = L"CrashDump " + formatTime<Zstring>(L"%Y-%m-%d %H%M%S") + L".dmp"; + { + HANDLE hFile = ::CreateFile(filename.c_str(), GENERIC_READ | GENERIC_WRITE, 0, nullptr, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, nullptr); + if (hFile == INVALID_HANDLE_VALUE) + { + ::MessageBox(nullptr, (replaceCpy<std::wstring>(L"Cannot write file %x.", L"%x", fmtFileName(filename)) + L"\n\n" + formatSystemError(L"CreateFile", ::GetLastError())).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); + std::terminate(); + } + ZEN_ON_SCOPE_EXIT(::CloseHandle(hFile)); + MINIDUMP_EXCEPTION_INFORMATION exInfo = {}; exInfo.ThreadId = ::GetCurrentThreadId(); exInfo.ExceptionPointers = pExceptionInfo; @@ -28,23 +43,33 @@ LONG WINAPI writeDumpOnException(EXCEPTION_POINTERS* pExceptionInfo) MINIDUMP_EXCEPTION_INFORMATION* exceptParam = pExceptionInfo ? &exInfo : nullptr; - /*bool rv = */ - ::MiniDumpWriteDump(::GetCurrentProcess (), //__in HANDLE hProcess, - ::GetCurrentProcessId(), //__in DWORD ProcessId, - hFile, //__in HANDLE hFile, - MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory - exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, - nullptr, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, - nullptr); //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam + if (!::MiniDumpWriteDump(::GetCurrentProcess (), //__in HANDLE hProcess, + ::GetCurrentProcessId(), //__in DWORD ProcessId, + hFile, //__in HANDLE hFile, + MiniDumpWithDataSegs, //__in MINIDUMP_TYPE DumpType, ->Standard: MiniDumpNormal, Medium: MiniDumpWithDataSegs, Full: MiniDumpWithFullMemory + exceptParam, //__in PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, + nullptr, //__in PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, + nullptr)) //__in PMINIDUMP_CALLBACK_INFORMATION CallbackParam + { + ::MessageBox(nullptr, (replaceCpy<std::wstring>(L"Cannot write file %x.", L"%x", fmtFileName(filename)) + L"\n\n" + formatSystemError(L"MiniDumpWriteDump", ::GetLastError())).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); + std::terminate(); + } + } //close file before showing success message + + //attention: the app has not yet officially crashed! => use MB_SERVICE_NOTIFICATION to avoid Win32 GUI callbacks while message box is shown! + ::MessageBox(nullptr, replaceCpy<std::wstring>(L"Crash dump file %x written!", L"%x", fmtFileName(filename)).c_str(), L"Application Crash", MB_SERVICE_NOTIFICATION | MB_ICONERROR); + std::terminate(); - ::CloseHandle(hFile); - } - assert(false); return EXCEPTION_EXECUTE_HANDLER; } //ensure that a dump-file is written for uncaught exceptions -struct OnStartup { OnStartup() { ::SetUnhandledExceptionFilter(writeDumpOnException); }} dummy; +struct OnStartup { + OnStartup() + { + /*LPTOP_LEVEL_EXCEPTION_FILTER oldFilter = */ ::SetUnhandledExceptionFilter(writeDumpOnException); + //oldFilter == &__CxxUnhandledExceptionFilter() by default! + }} dummy; } diff --git a/zen/dir_watcher.cpp b/zen/dir_watcher.cpp index 1945ada7..951dd3ae 100644 --- a/zen/dir_watcher.cpp +++ b/zen/dir_watcher.cpp @@ -21,10 +21,8 @@ #include "file_traverser.h" #elif defined ZEN_MAC -//#include <sys/types.h> -//#include <sys/event.h> -//#include <sys/time.h> -#include "file_traverser.h" +#include <CoreServices/CoreServices.h> +#include <zen/osx_string.h> #endif using namespace zen; @@ -97,7 +95,7 @@ public: //context of main thread - void getChanges(std::vector<DirWatcher::Entry>& output) //throw FileError + void fetchChanges(std::vector<DirWatcher::Entry>& output) //throw FileError { boost::lock_guard<boost::mutex> dummy(lockAccess); @@ -162,6 +160,14 @@ public: //end of constructor, no need to start managing "hDir" } + ReadChangesAsync(ReadChangesAsync&& other) : + hDir(INVALID_HANDLE_VALUE) + { + shared_ = std::move(other.shared_); + dirnamePf = std::move(other.dirnamePf); + std::swap(hDir, other.hDir); + } + ~ReadChangesAsync() { if (hDir != INVALID_HANDLE_VALUE) //valid hDir is NOT an invariant, see move constructor! @@ -250,14 +256,6 @@ public: } } - ReadChangesAsync(ReadChangesAsync&& other) : - hDir(INVALID_HANDLE_VALUE) - { - shared_ = std::move(other.shared_); - dirnamePf = std::move(other.dirnamePf); - std::swap(hDir, other.hDir); - } - HANDLE getDirHandle() const { return hDir; } //for reading/monitoring purposes only, don't abuse (e.g. close handle)! private: @@ -364,7 +362,7 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() output.push_back(Entry(ACTION_DELETE, pimpl_->dirname)); //report removal as change to main directory } else //the normal case... - pimpl_->shared->getChanges(output); //throw FileError + pimpl_->shared->fetchChanges(output); //throw FileError return output; } @@ -395,6 +393,8 @@ private: struct DirWatcher::Pimpl { + Pimpl() : notifDescr() {} + Zstring baseDirname; int notifDescr; std::map<int, Zstring> watchDescrs; //watch descriptor and (sub-)directory name (postfixed with separator) -> owned by "notifDescr" @@ -519,188 +519,116 @@ std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void() } #elif defined ZEN_MAC -warn_static("finish"); -struct DirWatcher::Pimpl {}; -DirWatcher::DirWatcher(const Zstring& directory) {} -DirWatcher::~DirWatcher() {} -std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void()>&) { return std::vector<DirWatcher::Entry>(); } - -#if 0 namespace { -class DirsOnlyTraverser : public zen::TraverseCallback +void eventCallback(ConstFSEventStreamRef streamRef, + void* clientCallBackInfo, + size_t numEvents, + void* eventPaths, + const FSEventStreamEventFlags eventFlags[], + const FSEventStreamEventId eventIds[]) { -public: - DirsOnlyTraverser(std::vector<Zstring>& dirs) : dirs_(dirs) {} + std::vector<DirWatcher::Entry>& changedFiles = *static_cast<std::vector<DirWatcher::Entry>*>(clientCallBackInfo); - virtual void onFile (const Zchar* shortName, const Zstring& fullName, const FileInfo& details) {} - virtual HandleLink onSymlink(const Zchar* shortName, const Zstring& fullName, const SymlinkInfo& details) { return LINK_SKIP; } - virtual TraverseCallback* onDir(const Zchar* shortName, const Zstring& fullName) + auto paths = static_cast<const char**>(eventPaths); + for (size_t i = 0; i < numEvents; ++i) { - dirs_.push_back(fullName); - return this; + //::printf("0x%08x\t%s\n", static_cast<unsigned int>(eventFlags[i]), paths[i]); + + //events are aggregated => it's possible to see a single event with flags + //kFSEventStreamEventFlagItemCreated | kFSEventStreamEventFlagItemModified | kFSEventStreamEventFlagItemRemoved + + if (eventFlags[i] & kFSEventStreamEventFlagItemCreated || + eventFlags[i] & kFSEventStreamEventFlagMount) + changedFiles.push_back(DirWatcher::Entry(DirWatcher::ACTION_CREATE, paths[i])); + if (eventFlags[i] & kFSEventStreamEventFlagItemModified || // + eventFlags[i] & kFSEventStreamEventFlagItemXattrMod || // + eventFlags[i] & kFSEventStreamEventFlagItemChangeOwner || //aggregate these into a single event + eventFlags[i] & kFSEventStreamEventFlagItemInodeMetaMod || // + eventFlags[i] & kFSEventStreamEventFlagItemFinderInfoMod || // + eventFlags[i] & kFSEventStreamEventFlagItemRenamed || //OS X sends the same event flag for both old and new names!!! + eventFlags[i] & kFSEventStreamEventFlagMustScanSubDirs) //something changed in one of the subdirs: NOT expected due to kFSEventStreamCreateFlagFileEvents + changedFiles.push_back(DirWatcher::Entry(DirWatcher::ACTION_UPDATE, paths[i])); + if (eventFlags[i] & kFSEventStreamEventFlagItemRemoved || + eventFlags[i] & kFSEventStreamEventFlagRootChanged || //root is (indirectly) deleted or renamed + eventFlags[i] & kFSEventStreamEventFlagUnmount) + changedFiles.push_back(DirWatcher::Entry(DirWatcher::ACTION_DELETE, paths[i])); + + //kFSEventStreamEventFlagEventIdsWrapped -> irrelevant! + //kFSEventStreamEventFlagHistoryDone -> not expected due to kFSEventStreamEventIdSinceNow below } - virtual HandleError reportDirError (const std::wstring& msg, size_t retryNumber) { throw FileError(msg); } - virtual HandleError reportItemError(const std::wstring& msg, size_t retryNumber, const Zchar* shortName) { throw FileError(msg); } - -private: - std::vector<Zstring>& dirs_; -}; - - -class DirDescriptor //throw FileError -{ -public: - DirDescriptor(const Zstring& dirname) : dirname_(dirname) - { - fdDir = ::open(dirname.c_str(), O_EVTONLY); //"descriptor requested for event notifications only"; O_EVTONLY does not exist on Linux - if (fdDir == -1) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(dirname)), formatSystemError(L"open", getLastError())); - } - - ~DirDescriptor() { if (fdDir != -1) ::close(fdDir); } //check for "-1" only needed by move-constructor - - DirDescriptor(DirDescriptor&& other) : fdDir(other.fdDir), dirname_(std::move(other.dirname_)) { other.fdDir = -1; } - - int getDescriptor() const { return fdDir; } - Zstring getDirname() const { return dirname_; } - -private: - DirDescriptor(const DirDescriptor&) = delete; - DirDescriptor& operator=(const DirDescriptor&) = delete; - - int fdDir; - Zstring dirname_; -}; +} } -warn_static("finish") + struct DirWatcher::Pimpl { - Zstring baseDirname; - int queueDescr; - std::map<int, DirDescriptor> watchDescrs; //directory descriptors and corresponding (sub-)directory name (postfixed with separator!) - std::vector<struct ::kevent> changelist; + Pimpl() : eventStream() {} + FSEventStreamRef eventStream; + std::vector<DirWatcher::Entry> changedFiles; }; -DirWatcher::DirWatcher(const Zstring& directory) : //throw FileError +DirWatcher::DirWatcher(const Zstring& directory) : pimpl_(new Pimpl) { - //get all subdirectories - Zstring dirname = directory; - if (endsWith(dirname, FILE_NAME_SEPARATOR)) - dirname.resize(dirname.size() - 1); - - std::vector<Zstring> fullDirList { dirname }; - { - DirsOnlyTraverser traverser(fullDirList); //throw FileError - zen::traverseFolder(dirname, traverser); //don't traverse into symlinks (analog to windows build) - } - - pimpl_->baseDirname = directory; - - pimpl_->queueDescr = ::kqueue(); - if (pimpl_->queueDescr == -1) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"kqueue", getLastError())); - zen::ScopeGuard guardDescr = zen::makeGuard([&] { ::close(pimpl_->queueDescr); }); - - for (const Zstring& subdir : fullDirList) - { - DirDescriptor descr(subdir); - const int rawDescr = descr.getDescriptor(); - pimpl_->watchDescrs.insert(std::make_pair(rawDescr, std::move(descr))); - - pimpl_->changelist.push_back({}); - EV_SET(&pimpl_->changelist.back(), - rawDescr, //identifier for this event - EVFILT_VNODE, //filter for event - EV_ADD | EV_CLEAR, //general flags - NOTE_DELETE | NOTE_REVOKE | NOTE_RENAME | NOTE_WRITE | NOTE_EXTEND | NOTE_ATTRIB, //filter-specific flags - 0, //filter-specific data - nullptr); //opaque user data identifier - } - - //what about EINTR? - struct ::timespec timeout = {}; //=> poll - if (::kevent(pimpl_->queueDescr, &pimpl_->changelist[0], pimpl_->changelist.size(), nullptr, 0, &timeout) < 0) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), formatSystemError(L"kevent", getLastError())); - - guardDescr.dismiss(); + CFStringRef dirnameCf = osx::createCFString(directory.c_str()); //returns nullptr on error + if (!dirnameCf) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), L"Function call failed: createCFString"); //no error code documented! + ZEN_ON_SCOPE_EXIT(::CFRelease(dirnameCf)); + + CFArrayRef dirnameCfArray = ::CFArrayCreate(nullptr, //CFAllocatorRef allocator, + reinterpret_cast<const void**>(&dirnameCf), //const void** values, + 1, //CFIndex numValues, + nullptr); //const CFArrayCallBacks* callBacks + if (!dirnameCfArray) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), L"Function call failed: CFArrayCreate"); //no error code documented! + ZEN_ON_SCOPE_EXIT(::CFRelease(dirnameCfArray)); + + FSEventStreamContext context = {}; + context.info = &pimpl_->changedFiles; + + pimpl_->eventStream = ::FSEventStreamCreate(nullptr, //CFAllocatorRef allocator, + &eventCallback, //FSEventStreamCallback callback, + &context, //FSEventStreamContext* context, + dirnameCfArray, //CFArrayRef pathsToWatch, + kFSEventStreamEventIdSinceNow, //FSEventStreamEventId sinceWhen, + 0, //CFTimeInterval latency, in seconds + kFSEventStreamCreateFlagWatchRoot | + kFSEventStreamCreateFlagFileEvents); //FSEventStreamCreateFlags flags + //can this fail?? not documented! + + zen::ScopeGuard guardCreate = zen::makeGuard([&] { ::FSEventStreamRelease(pimpl_->eventStream); }); + + ::FSEventStreamScheduleWithRunLoop(pimpl_->eventStream, //FSEventStreamRef streamRef, + ::CFRunLoopGetCurrent(), //CFRunLoopRef runLoop; CFRunLoopGetCurrent(): failure not documented! + kCFRunLoopDefaultMode); //CFStringRef runLoopMode + //no-fail + + zen::ScopeGuard guardRunloop = zen::makeGuard([&] { ::FSEventStreamInvalidate(pimpl_->eventStream); }); + + if (!::FSEventStreamStart(pimpl_->eventStream)) + throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(directory)), L"Function call failed: FSEventStreamStart"); //no error code documented! + + guardCreate .dismiss(); + guardRunloop.dismiss(); } DirWatcher::~DirWatcher() { - ::close(pimpl_->queueDescr); + ::FSEventStreamStop (pimpl_->eventStream); + ::FSEventStreamInvalidate(pimpl_->eventStream); + ::FSEventStreamRelease (pimpl_->eventStream); } -std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void()>&) //throw FileError +std::vector<DirWatcher::Entry> DirWatcher::getChanges(const std::function<void()>&) { - std::vector<Entry> output; - - std::vector<struct ::kevent> events(512); - for (;;) - { - assert(!pimpl_->changelist.empty()); //contains at least parent directory - struct ::timespec timeout = {}; //=> poll - - int evtCount = 0; - do - { - evtCount = ::kevent(pimpl_->queueDescr, //int kq, - &pimpl_->changelist[0], //const struct kevent* changelist, - pimpl_->changelist.size(), //int nchanges, - &events[0], //struct kevent* eventlist, - events.size(), //int nevents, - &timeout); //const struct timespec* timeout - } - while (evtCount < 0 && errno == EINTR); - - if (evtCount == -1) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->baseDirname)), formatSystemError(L"kevent", getLastError())); - - for (int i = 0; i < evtCount; ++i) - { - const auto& evt = events[i]; - - auto it = pimpl_->watchDescrs.find(static_cast<int>(evt.ident)); - if (it == pimpl_->watchDescrs.end()) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(pimpl_->baseDirname)), L"Received event from unknown source."); + ::FSEventStreamFlushSync(pimpl_->eventStream); //flushes pending events + execs runloop - //"If an error occurs [...] and there is enough room in the eventlist, then the event will - // be placed in the eventlist with EV_ERROR set in flags and the system error in data." - if (evt.flags & EV_ERROR) - throw FileError(replaceCpy(_("Cannot monitor directory %x."), L"%x", fmtFileName(it->second.getDirname())), formatSystemError(L"kevent", static_cast<ErrorCode>(evt.data))); - - assert(evt.filter == EVFILT_VNODE); - if (evt.filter == EVFILT_VNODE) - { - if (evt.fflags & NOTE_DELETE) - wxMessageBox(L"NOTE_DELETE "+ it->second.getDirname()); - else if (evt.fflags & NOTE_REVOKE) - wxMessageBox(L"NOTE_REVOKE "+ it->second.getDirname()); - else if (evt.fflags & NOTE_RENAME) - wxMessageBox(L"NOTE_RENAME "+ it->second.getDirname()); - else if (evt.fflags & NOTE_WRITE) - wxMessageBox(L"NOTE_WRITE "+ it->second.getDirname()); - else if (evt.fflags & NOTE_EXTEND) - wxMessageBox(L"NOTE_EXTEND "+ it->second.getDirname()); - else if (evt.fflags & NOTE_ATTRIB) - wxMessageBox(L"NOTE_ATTRIB "+ it->second.getDirname()); - else - assert(false); - } - } - - if (evtCount < events.size()) - break; - } - - return output; + std::vector<DirWatcher::Entry> changes; + changes.swap(pimpl_->changedFiles); + return changes; } #endif - - -#endif diff --git a/zen/dir_watcher.h b/zen/dir_watcher.h index 233bdc59..bc9714a0 100644 --- a/zen/dir_watcher.h +++ b/zen/dir_watcher.h @@ -21,13 +21,16 @@ namespace zen //watch directory including subdirectories /* !Note handling of directories!: - Linux: newly added subdirectories are reported but not automatically added for watching! -> reset Dirwatcher! - removal of top watched directory is NOT notified! - Windows: removal of top watched directory also NOT notified (e.g. brute force usb stick removal) + Windows: removal of top watched directory is NOT notified (e.g. brute force usb stick removal) however manual unmount IS notified (e.g. usb stick removal, then re-insert), but watching is stopped! Renaming of top watched directory handled incorrectly: Not notified(!) + additional changes in subfolders now do report FILE_ACTION_MODIFIED for directory (check that should prevent this fails!) + Linux: newly added subdirectories are reported but not automatically added for watching! -> reset Dirwatcher! + removal of top watched directory is NOT notified! + + OS X: everything works as expected; renaming of top level folder is also detected + Overcome all issues portably: check existence of top watched directory externally + reinstall watch after changes in directory structure (added directories) are detected */ class DirWatcher @@ -38,9 +41,9 @@ public: enum ActionType { - ACTION_CREATE, - ACTION_UPDATE, - ACTION_DELETE, + ACTION_CREATE, //informal only! + ACTION_UPDATE, //use for debugging/logging only! + ACTION_DELETE, // }; struct Entry diff --git a/zen/file_handling.cpp b/zen/file_handling.cpp index 8c5584db..563a07ce 100644 --- a/zen/file_handling.cpp +++ b/zen/file_handling.cpp @@ -14,7 +14,7 @@ #include "file_io.h" #include "assert_static.h" #include "file_id_def.h" -#include <boost/thread/tss.hpp> +//#include <boost/thread/tss.hpp> #ifdef ZEN_WIN #include <Aclapi.h> @@ -1303,36 +1303,42 @@ void zen::makeDirectoryPlain(const Zstring& directory, //throw FileError, ErrorT ::SetFileAttributes(applyLongPathPrefix(directory).c_str(), dirInfo.dwFileAttributes); //copy "read-only and system attributes": http://blogs.msdn.com/b/oldnewthing/archive/2003/09/30/55100.aspx - const bool isCompressed = (dirInfo.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; const bool isEncrypted = (dirInfo.dwFileAttributes & FILE_ATTRIBUTE_ENCRYPTED) != 0; + const bool isCompressed = (dirInfo.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) != 0; if (isEncrypted) ::EncryptFile(directory.c_str()); //seems no long path is required (check passed!) - if (isCompressed) + HANDLE hDirTrg = ::CreateFile(applyLongPathPrefix(directory).c_str(), + GENERIC_READ | GENERIC_WRITE, //read access required for FSCTL_SET_COMPRESSION + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + nullptr, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + nullptr); + if (hDirTrg != INVALID_HANDLE_VALUE) { - HANDLE hDirTrg = ::CreateFile(applyLongPathPrefix(directory).c_str(), - GENERIC_READ | GENERIC_WRITE, //read access required for FSCTL_SET_COMPRESSION - FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, - nullptr, - OPEN_EXISTING, - FILE_FLAG_BACKUP_SEMANTICS, - nullptr); - if (hDirTrg != INVALID_HANDLE_VALUE) - { - ZEN_ON_SCOPE_EXIT(::CloseHandle(hDirTrg)); + ZEN_ON_SCOPE_EXIT(::CloseHandle(hDirTrg)); + if (isCompressed) + { USHORT cmpState = COMPRESSION_FORMAT_DEFAULT; DWORD bytesReturned = 0; - ::DeviceIoControl(hDirTrg, //handle to file or directory - FSCTL_SET_COMPRESSION, //dwIoControlCode - &cmpState, //input buffer - sizeof(cmpState), //size of input buffer - nullptr, //lpOutBuffer - 0, //OutBufferSize - &bytesReturned, //number of bytes returned - nullptr); //OVERLAPPED structure + /*bool rv = */::DeviceIoControl(hDirTrg, //handle to file or directory + FSCTL_SET_COMPRESSION, //dwIoControlCode + &cmpState, //input buffer + sizeof(cmpState), //size of input buffer + nullptr, //lpOutBuffer + 0, //OutBufferSize + &bytesReturned, //number of bytes returned + nullptr); //OVERLAPPED structure } + + //(try to) set creation and modification time + /*bool rv = */::SetFileTime(hDirTrg, //_In_ HANDLE hFile, + &dirInfo.ftCreationTime, //_Out_opt_ LPFILETIME lpCreationTime, + nullptr, //_Out_opt_ LPFILETIME lpLastAccessTime, + &dirInfo.ftLastWriteTime); //_Out_opt_ LPFILETIME lpLastWriteTime } } } @@ -1783,12 +1789,12 @@ public: throw ErrorShouldCopyAsSparse(L"sparse dummy value"); if (exceptionInUserCallback) - try - { - exceptionInUserCallback(0); //should throw again!!! - assert(false); - } - catch (...) { throw; } + try + { + exceptionInUserCallback(0); //should throw again!!! + assert(false); + } + catch (...) { throw; } if (!errorMsg.first.empty()) throw FileError(errorMsg.first, errorMsg.second); @@ -2171,19 +2177,6 @@ void copyFileLinuxMac(const Zstring& sourceFile, } #endif - -Zstring findUnusedTempName(const Zstring& filename) -{ - Zstring output = filename + zen::TEMP_FILE_ENDING; - - //ensure uniqueness (+ minor file system race condition!) - for (int i = 1; somethingExists(output); ++i) - output = filename + Zchar('_') + numberTo<Zstring>(i) + zen::TEMP_FILE_ENDING; - - return output; -} - - /* ------------------ |File Copy Layers| @@ -2225,25 +2218,22 @@ void zen::copyFile(const Zstring& sourceFile, //throw FileError, ErrorTargetPath { if (transactionalCopy) { - Zstring temporary = targetFile + zen::TEMP_FILE_ENDING; //use temporary file until a correct date has been set + Zstring tmpTarget = targetFile + TEMP_FILE_ENDING; //use temporary file until a correct date has been set //raw file copy - try - { - copyFileSelectOs(sourceFile, temporary, onUpdateCopyStatus, sourceAttr); //throw FileError: ErrorTargetPathMissing, ErrorTargetExisting, ErrorFileLocked - } - catch (ErrorTargetExisting&) - { - //determine non-used temp file name "first": - //using optimistic strategy: assume everything goes well, but recover on error -> minimize file accesses - temporary = findUnusedTempName(targetFile); - - //retry - copyFileSelectOs(sourceFile, temporary, onUpdateCopyStatus, sourceAttr); //throw FileError - } + for (int i = 1;; ++i) + try + { + copyFileSelectOs(sourceFile, tmpTarget, onUpdateCopyStatus, sourceAttr); //throw FileError: ErrorTargetPathMissing, ErrorTargetExisting, ErrorFileLocked + break; + } + catch (const ErrorTargetExisting&) //using optimistic strategy: assume everything goes well, but recover on error -> minimize file accesses + { + tmpTarget = targetFile + Zchar('_') + numberTo<Zstring>(i) + TEMP_FILE_ENDING; + } //transactional behavior: ensure cleanup; not needed before copyFileSelectOs() which is already transactional - zen::ScopeGuard guardTempFile = zen::makeGuard([&] { try { removeFile(temporary); } catch (FileError&) {} }); + zen::ScopeGuard guardTempFile = zen::makeGuard([&] { try { removeFile(tmpTarget); } catch (FileError&) {} }); //have target file deleted (after read access on source and target has been confirmed) => allow for almost transactional overwrite if (onDeleteTargetFile) @@ -2251,7 +2241,7 @@ void zen::copyFile(const Zstring& sourceFile, //throw FileError, ErrorTargetPath //rename temporary file: //perf: this call is REALLY expensive on unbuffered volumes! ~40% performance decrease on FAT USB stick! - renameFile(temporary, targetFile); //throw FileError + renameFile(tmpTarget, targetFile); //throw FileError /* CAVEAT on FAT/FAT32: the sequence of deleting the target file and renaming "file.txt.ffs_tmp" to "file.txt" does diff --git a/zen/file_traverser.cpp b/zen/file_traverser.cpp index 9c1b01a4..70593d1d 100644 --- a/zen/file_traverser.cpp +++ b/zen/file_traverser.cpp @@ -22,6 +22,7 @@ #endif #if defined ZEN_LINUX || defined ZEN_MAC +#include <cstddef> //required by GCC 4.8.1 to find ptrdiff_t #include <sys/stat.h> #include <dirent.h> #endif @@ -153,8 +154,7 @@ typedef ... FindData; static void create(const Zstring& directory, DirHandle& hnd); //throw FileError - *no* concession to FindFirstFile(): open handle only, *no* return of data! static void destroy(DirHandle hnd); //throw() -template <class FallbackFun> -static bool getEntry(DirHandle hnd, const Zstring& directory, FindData& fileInfo, FallbackFun fb) //throw FileError -> fb: fallback to FindFirstFile()/FindNextFile() +static bool getEntry(DirHandle hnd, const Zstring& directory, FindData& fileInfo) //throw FileError, NeedFallbackToWin32Traverser -> fallback to FindFirstFile()/FindNextFile() //FindData "member" functions static void extractFileInfo (const FindData& fileInfo, DWORD volumeSerial, TraverseCallback::FileInfo& output); //volumeSerial may be 0 if not available! @@ -207,8 +207,7 @@ struct Win32Traverser static void destroy(const DirHandle& hnd) { ::FindClose(hnd.searchHandle); } //throw() - template <class FallbackFun> - static bool getEntry(DirHandle& hnd, const Zstring& dirname, FindData& fileInfo, FallbackFun) //throw FileError + static bool getEntry(DirHandle& hnd, const Zstring& dirname, FindData& fileInfo) //throw FileError { if (hnd.searchHandle == INVALID_HANDLE_VALUE) //handle special case of "truly empty directories" return false; @@ -247,6 +246,9 @@ struct Win32Traverser }; +class NeedFallbackToWin32Traverser {}; //special exception class + + struct FilePlusTraverser { struct DirHandle @@ -267,8 +269,7 @@ struct FilePlusTraverser static void destroy(DirHandle hnd) { ::closeDir(hnd.searchHandle); } //throw() - template <class FallbackFun> - static bool getEntry(DirHandle hnd, const Zstring& dirname, FindData& fileInfo, FallbackFun fb) //throw FileError + static bool getEntry(DirHandle hnd, const Zstring& dirname, FindData& fileInfo) //throw FileError, NeedFallbackToWin32Traverser { if (!::readDir(hnd.searchHandle, fileInfo)) { @@ -281,10 +282,8 @@ struct FilePlusTraverser this is required for NetDrive mounted Webdav, e.g. www.box.net and NT4, 2000 remote drives, et al. */ if (lastError == ERROR_NOT_SUPPORTED) - { - fb(); //fallback should apply to whole directory sub-tree! => client needs to handle duplicate file notifications! - return false; - } + throw NeedFallbackToWin32Traverser(); + //fallback should apply to whole directory sub-tree! => client needs to handle duplicate file notifications! //else we have a problem... report it: throw FileError(replaceCpy(_("Cannot enumerate directory %x."), L"%x", fmtFileName(dirname)), formatSystemError(L"readDir", lastError)); @@ -312,6 +311,12 @@ struct FilePlusTraverser class DirTraverser { public: + static void execute(const Zstring& baseDirectory, TraverseCallback& sink, DstHackCallback* dstCallback) + { + DirTraverser(baseDirectory, sink, dstCallback); + } + +private: DirTraverser(const Zstring& baseDirectory, TraverseCallback& sink, DstHackCallback* dstCallback) : needDstHack(dstCallback ? dst::isFatDrive(baseDirectory) : false) { @@ -322,7 +327,13 @@ public: catch (FileError&) {} //don't cause issues in user mode if (::openDir && ::readDir && ::closeDir) - traverse<FilePlusTraverser>(baseDirectory, sink, retrieveVolumeSerial(baseDirectory)); //retrieveVolumeSerial returns 0 on error + { + try + { + traverse<FilePlusTraverser>(baseDirectory, sink, retrieveVolumeSerial(baseDirectory)); //throw NeedFallbackToWin32Traverser; retrieveVolumeSerial returns 0 on error + } + catch (NeedFallbackToWin32Traverser&) { traverse<Win32Traverser>(baseDirectory, sink, 0); } + } else //fallback traverse<Win32Traverser>(baseDirectory, sink, 0); @@ -332,33 +343,29 @@ public: applyDstHack(*dstCallback); } -private: DirTraverser(const DirTraverser&); DirTraverser& operator=(const DirTraverser&); template <class Trav> - void traverse(const Zstring& dirname, zen::TraverseCallback& sink, DWORD volumeSerial /*may be 0!*/) + void traverse(const Zstring& dirname, zen::TraverseCallback& sink, DWORD volumeSerial /*may be 0!*/) //throw NeedFallbackToWin32Traverser { //no need to check for endless recursion: Windows seems to have an internal path limit of about 700 chars typename Trav::DirHandle searchHandle; - if (!tryReportingDirError([&] - { - typedef Trav Trav; //f u VS! - Trav::create(dirname, searchHandle); //throw FileError - }, sink)) + if (!tryReportingDirError([&] { Trav::create(dirname, searchHandle); /*throw FileError*/ }, sink)) return; //ignored error - ZEN_ON_SCOPE_EXIT(typedef Trav Trav; Trav::destroy(searchHandle)); + ZEN_ON_SCOPE_EXIT(Trav::destroy(searchHandle)); typename Trav::FindData findData = {}; - auto fallback = [&] { this->traverse<Win32Traverser>(dirname, sink, volumeSerial); }; //help VS2010 a little by avoiding too deeply nested lambdas - for (;;) { bool gotEntry = false; - tryReportingDirError([&] { typedef Trav Trav; /*VS 2010 bug*/ gotEntry = Trav::getEntry(searchHandle, dirname, findData, fallback); }, sink); //throw FileError + tryReportingDirError([&] + { + gotEntry = Trav::getEntry(searchHandle, dirname, findData); //throw FileError, NeedFallbackToWin32Traverser + }, sink); if (!gotEntry) //no more items or ignored error return; @@ -383,7 +390,11 @@ private: if (TraverseCallback* trav = sink.onDir(shortName, fullName)) { ZEN_ON_SCOPE_EXIT(sink.releaseDirTraverser(trav)); - traverse<Trav>(fullName, *trav, retrieveVolumeSerial(fullName)); //symlink may link to different volume => redetermine volume serial! + try + { + traverse<Trav>(fullName, *trav, retrieveVolumeSerial(fullName)); //throw NeedFallbackToWin32Traverser; symlink may link to different volume => redetermine volume serial! + } + catch (NeedFallbackToWin32Traverser&) { traverse<Win32Traverser>(fullName, *trav, 0); } } } else //a file @@ -410,7 +421,11 @@ private: if (TraverseCallback* trav = sink.onDir(shortName, fullName)) { ZEN_ON_SCOPE_EXIT(sink.releaseDirTraverser(trav)); - traverse<Trav>(fullName, *trav, volumeSerial); + try + { + traverse<Trav>(fullName, *trav, volumeSerial); //throw NeedFallbackToWin32Traverser + } + catch (NeedFallbackToWin32Traverser&) { traverse<Win32Traverser>(fullName, *trav, 0); } } } else //a file @@ -493,6 +508,12 @@ private: class DirTraverser { public: + static void execute(const Zstring& baseDirectory, TraverseCallback& sink, DstHackCallback* dstCallback) + { + DirTraverser(baseDirectory, sink, dstCallback); + } + +private: DirTraverser(const Zstring& baseDirectory, zen::TraverseCallback& sink, zen::DstHackCallback* dstCallback) { const Zstring directoryFormatted = //remove trailing slash @@ -511,7 +532,6 @@ public: traverse(directoryFormatted, sink); } -private: DirTraverser(const DirTraverser&); DirTraverser& operator=(const DirTraverser&); @@ -658,5 +678,5 @@ private: void zen::traverseFolder(const Zstring& dirname, TraverseCallback& sink, DstHackCallback* dstCallback) { - DirTraverser(dirname, sink, dstCallback); + DirTraverser::execute(dirname, sink, dstCallback); } diff --git a/zen/int64.h b/zen/int64.h index 6901ebeb..f658e034 100644 --- a/zen/int64.h +++ b/zen/int64.h @@ -39,9 +39,6 @@ void checkRange(U value) //caveat: std::numeric_limits<T>::min returns minimum positive(!) number for T = double, while behaving correctly for integer types... sigh assert(double(std::numeric_limits<T>::lowest()) <= double(value) && //new with C++11! double(std::numeric_limits<T>::max() ) >= double(value)); - - // assert(double(boost::numeric::bounds<T>::lowest ()) <= double(value) && - // double(boost::numeric::bounds<T>::highest()) >= double(value)); } class Int64 diff --git a/zen/osx_string.h b/zen/osx_string.h index 38c54023..ba83ca27 100644 --- a/zen/osx_string.h +++ b/zen/osx_string.h @@ -15,7 +15,7 @@ namespace osx Zstring cfStringToZstring(const CFStringRef& cfStr); CFStringRef createCFString (const char* utf8Str); //returns nullptr on error -CFMutableStringRef createMutableCFString(const char* utf8Str); //pass ownership! => ZEN_ON_SCOPE_EXIT(::CFRelease(utf8Str)); +CFMutableStringRef createMutableCFString(const char* utf8Str); //pass ownership! => ZEN_ON_SCOPE_EXIT(::CFRelease(str)); diff --git a/zen/privilege.cpp b/zen/privilege.cpp index 98eaad43..90612756 100644 --- a/zen/privilege.cpp +++ b/zen/privilege.cpp @@ -1,6 +1,6 @@ #include "privilege.h" #include <map> -#include "thread.h" //includes <boost/thread.hpp> +#include <mutex> #include "zstring.h" #include "scope_guard.h" #include "win_ver.h" @@ -127,12 +127,12 @@ private: std::map<Zstring, bool> activePrivileges; //bool: enabled by this application }; -boost::mutex lockPrivileges; +std::mutex lockPrivileges; } void zen::activatePrivilege(LPCTSTR privilege) //throw FileError { - boost::lock_guard<boost::mutex> dummy(lockPrivileges); + std::lock_guard<std::mutex> dummy(lockPrivileges); Privileges::getInstance().ensureActive(privilege); } diff --git a/zen/stl_tools.h b/zen/stl_tools.h index 2bb4fd3f..92cd86ad 100644 --- a/zen/stl_tools.h +++ b/zen/stl_tools.h @@ -25,6 +25,9 @@ namespace zen template <class V, class Predicate> void vector_remove_if(V& vec, Predicate p); +template <class V, class W> +void vector_append(V& vec, W& vec2); + template <class S, class Predicate> void set_remove_if(S& set, Predicate p); @@ -88,6 +91,13 @@ void vector_remove_if(V& vec, Predicate p) } +template <class V, class W> inline +void vector_append(V& vec, W& vec2) +{ +vec.insert(vec.end(), vec2.begin(), vec2.end()); +} + + template <class S, class Predicate> inline void set_remove_if(S& set, Predicate p) { @@ -196,6 +206,7 @@ template<class T, class Arg1, class Arg2, class Arg3> inline std::u template<class T, class Arg1, class Arg2, class Arg3, class Arg4> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4))); } template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5))); } template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5, Arg6&& arg6) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5), std::forward<Arg6>(arg6))); } +template<class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7> inline std::unique_ptr<T> make_unique(Arg1&& arg1, Arg2&& arg2, Arg3&& arg3, Arg4&& arg4, Arg5&& arg5, Arg6&& arg6, Arg7&& arg7) { return std::unique_ptr<T>(new T(std::forward<Arg1>(arg1), std::forward<Arg2>(arg2), std::forward<Arg3>(arg3), std::forward<Arg4>(arg4), std::forward<Arg5>(arg5), std::forward<Arg6>(arg6), std::forward<Arg7>(arg7))); } //template<typename T, typename ...Args> inline //std::unique_ptr<T> make_unique(Args&& ...args) diff --git a/zen/string_base.h b/zen/string_base.h index c828b240..0e3bbdd3 100644 --- a/zen/string_base.h +++ b/zen/string_base.h @@ -10,8 +10,8 @@ #include <algorithm> #include <cassert> #include <cstdint> +#include <atomic> #include "string_tools.h" -#include <boost/detail/atomic_count.hpp> //Zbase - a policy based string class optimizing performance and flexibility @@ -168,15 +168,14 @@ protected: private: struct Descriptor { - Descriptor(long rc, size_t len, size_t cap) : - refCount(rc), + Descriptor(int rc, size_t len, size_t cap) : length (static_cast<std::uint32_t>(len)), - capacity(static_cast<std::uint32_t>(cap)) {} + capacity(static_cast<std::uint32_t>(cap)), + refCount(rc) { assert_static(ATOMIC_INT_LOCK_FREE == 2); } //2: "the types are always lock-free" - boost::detail::atomic_count refCount; //practically no perf loss: ~0.2%! (FFS comparison) - //replace by #include <atomic> std::atomic_int when finally getting rid of VS2010 std::uint32_t length; std::uint32_t capacity; //allocated size without null-termination + std::atomic<int> refCount; //practically no perf loss: ~0.2%! (FFS comparison) }; static Descriptor* descr( Char* ptr) { return reinterpret_cast< Descriptor*>(ptr) - 1; } diff --git a/zen/thread.h b/zen/thread.h index 1fa2c951..5c6eecc5 100644 --- a/zen/thread.h +++ b/zen/thread.h @@ -184,7 +184,7 @@ template <class T> template <class Fun> inline void RunUntilFirstHit<T>::addJob(Fun f) //f must return a std::unique_ptr<T> containing a value on success { - auto result2 = result; //MSVC2010: this is ridiculous!!! + auto result2 = result; //MSVC 2010: this is ridiculous!!! boost::thread t([result2, f] { result2->reportFinished(f()); }); ++jobsTotal; t.detach(); //we have to be explicit since C++11: [thread.thread.destr] ~thread() calls std::terminate() if joinable()!!! diff --git a/zen/zstring.cpp b/zen/zstring.cpp index 83eb5127..c33ea707 100644 --- a/zen/zstring.cpp +++ b/zen/zstring.cpp @@ -17,7 +17,7 @@ #endif #ifndef NDEBUG -#include "thread.h" //includes <boost/thread.hpp> +#include <mutex> #include <iostream> #endif @@ -32,14 +32,14 @@ class LeakChecker //small test for memory leaks public: void insert(const void* ptr, size_t size) { - boost::lock_guard<boost::mutex> dummy(lockActStrings); + std::lock_guard<std::mutex> dummy(lockActStrings); if (!activeStrings.insert(std::make_pair(ptr, size)).second) reportProblem("Serious Error: New memory points into occupied space: " + rawMemToString(ptr, size)); } void remove(const void* ptr) { - boost::lock_guard<boost::mutex> dummy(lockActStrings); + std::lock_guard<std::mutex> dummy(lockActStrings); if (activeStrings.erase(ptr) != 1) reportProblem("Serious Error: No memory available for deallocation at this location!"); } @@ -89,7 +89,7 @@ private: throw std::logic_error("Memory leak! " + message); } - boost::mutex lockActStrings; + std::mutex lockActStrings; zen::hash_map<const void*, size_t> activeStrings; }; diff --git a/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html b/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html new file mode 100644 index 00000000..ce3e299d --- /dev/null +++ b/zenXml/doc/dir_5fe60cdff4f93e8435d81ae38a3e2e18.html @@ -0,0 +1,121 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> +<title>zen::Xml: zenxml Directory Reference</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/search.js"></script> +<script type="text/javascript"> + $(document).ready(function() { searchBox.OnSelectItem(0); }); +</script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> + <td style="padding-left: 0.5em;"> + <div id="projectname">zen::Xml + </div> + <div id="projectbrief">Simple C++ XML Processing</div> + </td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> +<script type="text/javascript"> +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +</script> + <div id="navrow1" class="tabs"> + <ul class="tablist"> + <li><a href="index.html"><span>Main Page</span></a></li> + <li><a href="namespaces.html"><span>Namespaces</span></a></li> + <li><a href="annotated.html"><span>Classes</span></a></li> + <li> + <div id="MSearchBox" class="MSearchBoxInactive"> + <span class="left"> + <img id="MSearchSelect" src="search/mag_sel.png" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + alt=""/> + <input type="text" id="MSearchField" value="Search" accesskey="S" + onfocus="searchBox.OnSearchFieldFocus(true)" + onblur="searchBox.OnSearchFieldFocus(false)" + onkeyup="searchBox.OnSearchFieldChange(event)"/> + </span><span class="right"> + <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> + </span> + </div> + </li> + </ul> + </div> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> +<div class="header"> + <div class="headertitle"> +<div class="title">zenxml Directory Reference</div> </div> +</div><!--header--> +<div class="contents"> +<table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a> +Files</h2></td></tr> +<tr class="memitem:bind_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>bind.h</b> <a href="bind_8h_source.html">[code]</a></td></tr> +<tr class="memdesc:bind_8h"><td class="mdescLeft"> </td><td class="mdescRight">Map user data types to XML. <br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:cvrt__struc_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cvrt_struc.h</b> <a href="cvrt__struc_8h_source.html">[code]</a></td></tr> +<tr class="memdesc:cvrt__struc_8h"><td class="mdescLeft"> </td><td class="mdescRight">Handle conversion of arbitrary types to and from XML elements. See comments in <a class="el" href="cvrt__text_8h_source.html" title="Handle conversion of string-convertible types to and from std::string. ">cvrt_text.h</a>. <br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:cvrt__text_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>cvrt_text.h</b> <a href="cvrt__text_8h_source.html">[code]</a></td></tr> +<tr class="memdesc:cvrt__text_8h"><td class="mdescLeft"> </td><td class="mdescRight">Handle conversion of string-convertible types to and from std::string. <br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:dom_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>dom.h</b> <a href="dom_8h_source.html">[code]</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:error_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>error.h</b> <a href="error_8h_source.html">[code]</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:io_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>io.h</b> <a href="io_8h_source.html">[code]</a></td></tr> +<tr class="memdesc:io_8h"><td class="mdescLeft"> </td><td class="mdescRight">Save and load byte streams from files. <br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:parser_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>parser.h</b> <a href="parser_8h_source.html">[code]</a></td></tr> +<tr class="memdesc:parser_8h"><td class="mdescLeft"> </td><td class="mdescRight">Convert an XML document object model (class XmlDoc) to and from a byte stream representation. <br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:unit__test_8cpp"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>unit_test.cpp</b></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:xml_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><b>xml.h</b> <a href="xml_8h_source.html">[code]</a></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +</table> +</div><!-- contents --> +<!-- start footer part --> +<hr class="footer"/><address class="footer"><small> +Generated by  <a href="http://www.doxygen.org/index.html"> +<img class="footer" src="doxygen.png" alt="doxygen"/> +</a> 1.8.6 +</small></address> +</body> +</html> diff --git a/zenXml/doc/dynsections.js b/zenXml/doc/dynsections.js new file mode 100644 index 00000000..ed092c7f --- /dev/null +++ b/zenXml/doc/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l<level+1) { + i.attr('src','ftv2folderopen.png'); + a.attr('src','ftv2mnode.png'); + $(this).show(); + } else if (l==level+1) { + i.attr('src','ftv2folderclosed.png'); + a.attr('src','ftv2pnode.png'); + $(this).show(); + } else { + $(this).hide(); + } + }); + updateStripes(); +} + +function toggleFolder(id) +{ + //The clicked row + var currentRow = $('#row_'+id); + var currentRowImages = currentRow.find("img"); + + //All rows after the clicked row + var rows = currentRow.nextAll("tr"); + + //Only match elements AFTER this one (can't hide elements before) + var childRows = rows.filter(function() { + var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub + return this.id.match(re); + }); + + //First row is visible we are HIDING + if (childRows.filter(':first').is(':visible')===true) { + currentRowImages.filter("[id^=arr]").attr('src', 'ftv2pnode.png'); + currentRowImages.filter("[id^=img]").attr('src', 'ftv2folderclosed.png'); + rows.filter("[id^=row_"+id+"]").hide(); + } else { //We are SHOWING + //All sub images + var childImages = childRows.find("img"); + var childImg = childImages.filter("[id^=img]"); + var childArr = childImages.filter("[id^=arr]"); + + currentRow.find("[id^=arr]").attr('src', 'ftv2mnode.png'); //open row + currentRow.find("[id^=img]").attr('src', 'ftv2folderopen.png'); //open row + childImg.attr('src','ftv2folderclosed.png'); //children closed + childArr.attr('src','ftv2pnode.png'); //children closed + childRows.show(); //show all children + } + updateStripes(); +} + + +function toggleInherit(id) +{ + var rows = $('tr.inherit.'+id); + var img = $('tr.inherit_header.'+id+' img'); + var src = $(img).attr('src'); + if (rows.filter(':first').is(':visible')===true) { + rows.css('display','none'); + $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + rows.css('display','table-row'); // using show() causes jump in firefox + $(img).attr('src',src.substring(0,src.length-10)+'open.png'); + } +} + diff --git a/zenXml/doc/ftv2blank.png b/zenXml/doc/ftv2blank.png Binary files differnew file mode 100644 index 00000000..63c605bb --- /dev/null +++ b/zenXml/doc/ftv2blank.png diff --git a/zenXml/doc/ftv2cl.png b/zenXml/doc/ftv2cl.png Binary files differnew file mode 100644 index 00000000..132f6577 --- /dev/null +++ b/zenXml/doc/ftv2cl.png diff --git a/zenXml/doc/ftv2doc.png b/zenXml/doc/ftv2doc.png Binary files differnew file mode 100644 index 00000000..17edabff --- /dev/null +++ b/zenXml/doc/ftv2doc.png diff --git a/zenXml/doc/ftv2folderclosed.png b/zenXml/doc/ftv2folderclosed.png Binary files differnew file mode 100644 index 00000000..bb8ab35e --- /dev/null +++ b/zenXml/doc/ftv2folderclosed.png diff --git a/zenXml/doc/ftv2folderopen.png b/zenXml/doc/ftv2folderopen.png Binary files differnew file mode 100644 index 00000000..d6c7f676 --- /dev/null +++ b/zenXml/doc/ftv2folderopen.png diff --git a/zenXml/doc/ftv2lastnode.png b/zenXml/doc/ftv2lastnode.png Binary files differnew file mode 100644 index 00000000..63c605bb --- /dev/null +++ b/zenXml/doc/ftv2lastnode.png diff --git a/zenXml/doc/ftv2link.png b/zenXml/doc/ftv2link.png Binary files differnew file mode 100644 index 00000000..17edabff --- /dev/null +++ b/zenXml/doc/ftv2link.png diff --git a/zenXml/doc/ftv2mlastnode.png b/zenXml/doc/ftv2mlastnode.png Binary files differnew file mode 100644 index 00000000..0b63f6d3 --- /dev/null +++ b/zenXml/doc/ftv2mlastnode.png diff --git a/zenXml/doc/ftv2mnode.png b/zenXml/doc/ftv2mnode.png Binary files differnew file mode 100644 index 00000000..0b63f6d3 --- /dev/null +++ b/zenXml/doc/ftv2mnode.png diff --git a/zenXml/doc/ftv2mo.png b/zenXml/doc/ftv2mo.png Binary files differnew file mode 100644 index 00000000..4bfb80f7 --- /dev/null +++ b/zenXml/doc/ftv2mo.png diff --git a/zenXml/doc/ftv2node.png b/zenXml/doc/ftv2node.png Binary files differnew file mode 100644 index 00000000..63c605bb --- /dev/null +++ b/zenXml/doc/ftv2node.png diff --git a/zenXml/doc/ftv2ns.png b/zenXml/doc/ftv2ns.png Binary files differnew file mode 100644 index 00000000..72e3d71c --- /dev/null +++ b/zenXml/doc/ftv2ns.png diff --git a/zenXml/doc/ftv2plastnode.png b/zenXml/doc/ftv2plastnode.png Binary files differnew file mode 100644 index 00000000..c6ee22f9 --- /dev/null +++ b/zenXml/doc/ftv2plastnode.png diff --git a/zenXml/doc/ftv2pnode.png b/zenXml/doc/ftv2pnode.png Binary files differnew file mode 100644 index 00000000..c6ee22f9 --- /dev/null +++ b/zenXml/doc/ftv2pnode.png diff --git a/zenXml/doc/ftv2splitbar.png b/zenXml/doc/ftv2splitbar.png Binary files differnew file mode 100644 index 00000000..fe895f2c --- /dev/null +++ b/zenXml/doc/ftv2splitbar.png diff --git a/zenXml/doc/ftv2vertline.png b/zenXml/doc/ftv2vertline.png Binary files differnew file mode 100644 index 00000000..63c605bb --- /dev/null +++ b/zenXml/doc/ftv2vertline.png diff --git a/zenXml/doc/nav_g.png b/zenXml/doc/nav_g.png Binary files differnew file mode 100644 index 00000000..2093a237 --- /dev/null +++ b/zenXml/doc/nav_g.png diff --git a/zenxml/doc/search/all_67.html b/zenXml/doc/search/all_0.html index 41a459ae..17b6da85 100644 --- a/zenxml/doc/search/all_67.html +++ b/zenXml/doc/search/all_0.html @@ -1,8 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><head><title></title> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> <link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_67.js"></script> +<script type="text/javascript" src="all_0.js"></script> <script type="text/javascript" src="search.js"></script> </head> <body class="SRPage"> diff --git a/zenxml/doc/search/all_61.js b/zenXml/doc/search/all_0.js index 2b7cd296..2b7cd296 100644 --- a/zenxml/doc/search/all_61.js +++ b/zenXml/doc/search/all_0.js diff --git a/zenxml/doc/search/all_61.html b/zenXml/doc/search/all_1.html index a3164d55..e2906449 100644 --- a/zenxml/doc/search/all_61.html +++ b/zenXml/doc/search/all_1.html @@ -1,8 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><head><title></title> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> <link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_61.js"></script> +<script type="text/javascript" src="all_1.js"></script> <script type="text/javascript" src="search.js"></script> </head> <body class="SRPage"> diff --git a/zenxml/doc/search/all_63.js b/zenXml/doc/search/all_1.js index 3c8f3573..3c8f3573 100644 --- a/zenxml/doc/search/all_63.js +++ b/zenXml/doc/search/all_1.js diff --git a/zenxml/doc/search/all_63.html b/zenXml/doc/search/all_2.html index 56b5ad1e..95ded122 100644 --- a/zenxml/doc/search/all_63.html +++ b/zenXml/doc/search/all_2.html @@ -1,8 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><head><title></title> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> <link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_63.js"></script> +<script type="text/javascript" src="all_2.js"></script> <script type="text/javascript" src="search.js"></script> </head> <body class="SRPage"> diff --git a/zenxml/doc/search/all_65.js b/zenXml/doc/search/all_2.js index 46ba186a..46ba186a 100644 --- a/zenxml/doc/search/all_65.js +++ b/zenXml/doc/search/all_2.js diff --git a/zenxml/doc/search/all_65.html b/zenXml/doc/search/all_3.html index 66cc8348..4d312d03 100644 --- a/zenxml/doc/search/all_65.html +++ b/zenXml/doc/search/all_3.html @@ -1,8 +1,9 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html><head><title></title> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> <link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_65.js"></script> +<script type="text/javascript" src="all_3.js"></script> <script type="text/javascript" src="search.js"></script> </head> <body class="SRPage"> diff --git a/zenxml/doc/search/all_67.js b/zenXml/doc/search/all_3.js index 029444b8..029444b8 100644 --- a/zenxml/doc/search/all_67.js +++ b/zenXml/doc/search/all_3.js diff --git a/zenXml/doc/search/all_4.html b/zenXml/doc/search/all_4.html new file mode 100644 index 00000000..d72a9104 --- /dev/null +++ b/zenXml/doc/search/all_4.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_4.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_6c.js b/zenXml/doc/search/all_4.js index 0e6b8f02..a4b529ae 100644 --- a/zenxml/doc/search/all_6c.js +++ b/zenXml/doc/search/all_4.js @@ -1,6 +1,6 @@ var searchData= [ ['lasterror',['lastError',['../structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f',1,'zen::XmlFileError']]], - ['load',['load',['../namespacezen.html#a900c1fb290f0eedc24354c487145dbee',1,'zen']]], + ['load',['load',['../namespacezen.html#a872a48c0616e7f12ae8caca464835e00',1,'zen']]], ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]] ]; diff --git a/zenXml/doc/search/all_5.html b/zenXml/doc/search/all_5.html new file mode 100644 index 00000000..99ef7267 --- /dev/null +++ b/zenXml/doc/search/all_5.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_5.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_6e.js b/zenXml/doc/search/all_5.js index 250e97da..250e97da 100644 --- a/zenxml/doc/search/all_6e.js +++ b/zenXml/doc/search/all_5.js diff --git a/zenXml/doc/search/all_6.html b/zenXml/doc/search/all_6.html new file mode 100644 index 00000000..6133ab3a --- /dev/null +++ b/zenXml/doc/search/all_6.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_6.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_6f.js b/zenXml/doc/search/all_6.js index 4152ba50..c1c7d7a1 100644 --- a/zenxml/doc/search/functions_6f.js +++ b/zenXml/doc/search/all_6.js @@ -1,6 +1,7 @@ var searchData= [ ['_2a',['*',['../classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72',1,'zen::XmlIn']]], + ['overview',['Overview',['../index.html',1,'']]], ['operator_28_29',['operator()',['../classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb',1,'zen::XmlOut::operator()()'],['../classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506',1,'zen::XmlIn::operator()()']]], ['operator_5b_5d',['operator[]',['../classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831',1,'zen::XmlOut::operator[]()'],['../classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d',1,'zen::XmlIn::operator[]()']]] ]; diff --git a/zenXml/doc/search/all_7.html b/zenXml/doc/search/all_7.html new file mode 100644 index 00000000..57481259 --- /dev/null +++ b/zenXml/doc/search/all_7.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_7.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_70.js b/zenXml/doc/search/all_7.js index b293cd99..3175e452 100644 --- a/zenxml/doc/search/all_70.js +++ b/zenXml/doc/search/all_7.js @@ -1,5 +1,5 @@ var searchData= [ ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]], - ['parse',['parse',['../namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7',1,'zen']]] + ['parse',['parse',['../namespacezen.html#a1ae1a4688d724b554fe3bf4638700477',1,'zen']]] ]; diff --git a/zenXml/doc/search/all_8.html b/zenXml/doc/search/all_8.html new file mode 100644 index 00000000..0179bdd4 --- /dev/null +++ b/zenXml/doc/search/all_8.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_8.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_72.js b/zenXml/doc/search/all_8.js index 86fadf65..86fadf65 100644 --- a/zenxml/doc/search/all_72.js +++ b/zenXml/doc/search/all_8.js diff --git a/zenXml/doc/search/all_9.html b/zenXml/doc/search/all_9.html new file mode 100644 index 00000000..cd46d440 --- /dev/null +++ b/zenXml/doc/search/all_9.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_9.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_73.js b/zenXml/doc/search/all_9.js index a062befe..a062befe 100644 --- a/zenxml/doc/search/all_73.js +++ b/zenXml/doc/search/all_9.js diff --git a/zenXml/doc/search/all_a.html b/zenXml/doc/search/all_a.html new file mode 100644 index 00000000..eab65530 --- /dev/null +++ b/zenXml/doc/search/all_a.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_a.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_77.js b/zenXml/doc/search/all_a.js index 5e349623..5e349623 100644 --- a/zenxml/doc/search/all_77.js +++ b/zenXml/doc/search/all_a.js diff --git a/zenXml/doc/search/all_b.html b/zenXml/doc/search/all_b.html new file mode 100644 index 00000000..a2c161e0 --- /dev/null +++ b/zenXml/doc/search/all_b.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_b.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_78.js b/zenXml/doc/search/all_b.js index 371f5dde..371f5dde 100644 --- a/zenxml/doc/search/all_78.js +++ b/zenXml/doc/search/all_b.js diff --git a/zenXml/doc/search/all_c.html b/zenXml/doc/search/all_c.html new file mode 100644 index 00000000..bdd3ee2c --- /dev/null +++ b/zenXml/doc/search/all_c.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="all_c.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_7a.js b/zenXml/doc/search/all_c.js index 14074229..14074229 100644 --- a/zenxml/doc/search/all_7a.js +++ b/zenXml/doc/search/all_c.js diff --git a/zenXml/doc/search/classes_0.html b/zenXml/doc/search/classes_0.html new file mode 100644 index 00000000..fabdc036 --- /dev/null +++ b/zenXml/doc/search/classes_0.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="classes_0.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/classes_78.js b/zenXml/doc/search/classes_0.js index fa78dcd3..fa78dcd3 100644 --- a/zenxml/doc/search/classes_78.js +++ b/zenXml/doc/search/classes_0.js diff --git a/zenXml/doc/search/functions_0.html b/zenXml/doc/search/functions_0.html new file mode 100644 index 00000000..16a5a527 --- /dev/null +++ b/zenXml/doc/search/functions_0.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_0.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_61.js b/zenXml/doc/search/functions_0.js index 2b7cd296..2b7cd296 100644 --- a/zenxml/doc/search/functions_61.js +++ b/zenXml/doc/search/functions_0.js diff --git a/zenXml/doc/search/functions_1.html b/zenXml/doc/search/functions_1.html new file mode 100644 index 00000000..3b4eacfe --- /dev/null +++ b/zenXml/doc/search/functions_1.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_1.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_65.js b/zenXml/doc/search/functions_1.js index 46ba186a..46ba186a 100644 --- a/zenxml/doc/search/functions_65.js +++ b/zenXml/doc/search/functions_1.js diff --git a/zenXml/doc/search/functions_2.html b/zenXml/doc/search/functions_2.html new file mode 100644 index 00000000..78be8b41 --- /dev/null +++ b/zenXml/doc/search/functions_2.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_2.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_67.js b/zenXml/doc/search/functions_2.js index 029444b8..029444b8 100644 --- a/zenxml/doc/search/functions_67.js +++ b/zenXml/doc/search/functions_2.js diff --git a/zenXml/doc/search/functions_3.html b/zenXml/doc/search/functions_3.html new file mode 100644 index 00000000..ebf2eebd --- /dev/null +++ b/zenXml/doc/search/functions_3.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_3.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_6c.js b/zenXml/doc/search/functions_3.js index 93c6b2bd..e0022972 100644 --- a/zenxml/doc/search/functions_6c.js +++ b/zenXml/doc/search/functions_3.js @@ -1,5 +1,5 @@ var searchData= [ - ['load',['load',['../namespacezen.html#a900c1fb290f0eedc24354c487145dbee',1,'zen']]], + ['load',['load',['../namespacezen.html#a872a48c0616e7f12ae8caca464835e00',1,'zen']]], ['loadstream',['loadStream',['../namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607',1,'zen']]] ]; diff --git a/zenXml/doc/search/functions_4.html b/zenXml/doc/search/functions_4.html new file mode 100644 index 00000000..7317ea91 --- /dev/null +++ b/zenXml/doc/search/functions_4.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_4.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_6e.js b/zenXml/doc/search/functions_4.js index 250e97da..250e97da 100644 --- a/zenxml/doc/search/functions_6e.js +++ b/zenXml/doc/search/functions_4.js diff --git a/zenXml/doc/search/functions_5.html b/zenXml/doc/search/functions_5.html new file mode 100644 index 00000000..1f1d9ce1 --- /dev/null +++ b/zenXml/doc/search/functions_5.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_5.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/all_6f.js b/zenXml/doc/search/functions_5.js index 4152ba50..4152ba50 100644 --- a/zenxml/doc/search/all_6f.js +++ b/zenXml/doc/search/functions_5.js diff --git a/zenXml/doc/search/functions_6.html b/zenXml/doc/search/functions_6.html new file mode 100644 index 00000000..c9faaa6a --- /dev/null +++ b/zenXml/doc/search/functions_6.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_6.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_70.js b/zenXml/doc/search/functions_6.js index b293cd99..3175e452 100644 --- a/zenxml/doc/search/functions_70.js +++ b/zenXml/doc/search/functions_6.js @@ -1,5 +1,5 @@ var searchData= [ ['parent',['parent',['../classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1',1,'zen::XmlElement::parent()'],['../classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c',1,'zen::XmlElement::parent() const ']]], - ['parse',['parse',['../namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7',1,'zen']]] + ['parse',['parse',['../namespacezen.html#a1ae1a4688d724b554fe3bf4638700477',1,'zen']]] ]; diff --git a/zenXml/doc/search/functions_7.html b/zenXml/doc/search/functions_7.html new file mode 100644 index 00000000..ec330da8 --- /dev/null +++ b/zenXml/doc/search/functions_7.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_7.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_72.js b/zenXml/doc/search/functions_7.js index 86b2b142..86b2b142 100644 --- a/zenxml/doc/search/functions_72.js +++ b/zenXml/doc/search/functions_7.js diff --git a/zenXml/doc/search/functions_8.html b/zenXml/doc/search/functions_8.html new file mode 100644 index 00000000..afd4facf --- /dev/null +++ b/zenXml/doc/search/functions_8.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_8.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_73.js b/zenXml/doc/search/functions_8.js index a062befe..a062befe 100644 --- a/zenxml/doc/search/functions_73.js +++ b/zenXml/doc/search/functions_8.js diff --git a/zenXml/doc/search/functions_9.html b/zenXml/doc/search/functions_9.html new file mode 100644 index 00000000..542b9e0a --- /dev/null +++ b/zenXml/doc/search/functions_9.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_9.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_77.js b/zenXml/doc/search/functions_9.js index 5e349623..5e349623 100644 --- a/zenxml/doc/search/functions_77.js +++ b/zenXml/doc/search/functions_9.js diff --git a/zenXml/doc/search/functions_a.html b/zenXml/doc/search/functions_a.html new file mode 100644 index 00000000..94fd395d --- /dev/null +++ b/zenXml/doc/search/functions_a.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="functions_a.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/functions_78.js b/zenXml/doc/search/functions_a.js index b9817184..b9817184 100644 --- a/zenxml/doc/search/functions_78.js +++ b/zenXml/doc/search/functions_a.js diff --git a/zenXml/doc/search/namespaces_0.html b/zenXml/doc/search/namespaces_0.html new file mode 100644 index 00000000..dc606861 --- /dev/null +++ b/zenXml/doc/search/namespaces_0.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="namespaces_0.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/namespaces_7a.js b/zenXml/doc/search/namespaces_0.js index 14074229..14074229 100644 --- a/zenxml/doc/search/namespaces_7a.js +++ b/zenXml/doc/search/namespaces_0.js diff --git a/zenXml/doc/search/pages_0.html b/zenXml/doc/search/pages_0.html new file mode 100644 index 00000000..c51c8345 --- /dev/null +++ b/zenXml/doc/search/pages_0.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="pages_0.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenXml/doc/search/pages_0.js b/zenXml/doc/search/pages_0.js new file mode 100644 index 00000000..277cca08 --- /dev/null +++ b/zenXml/doc/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['overview',['Overview',['../index.html',1,'']]] +]; diff --git a/zenXml/doc/search/variables_0.html b/zenXml/doc/search/variables_0.html new file mode 100644 index 00000000..1b8adc9b --- /dev/null +++ b/zenXml/doc/search/variables_0.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="variables_0.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/variables_63.js b/zenXml/doc/search/variables_0.js index 3c8f3573..3c8f3573 100644 --- a/zenxml/doc/search/variables_63.js +++ b/zenXml/doc/search/variables_0.js diff --git a/zenXml/doc/search/variables_1.html b/zenXml/doc/search/variables_1.html new file mode 100644 index 00000000..78f63cd1 --- /dev/null +++ b/zenXml/doc/search/variables_1.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="variables_1.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/variables_6c.js b/zenXml/doc/search/variables_1.js index e2e327ad..e2e327ad 100644 --- a/zenxml/doc/search/variables_6c.js +++ b/zenXml/doc/search/variables_1.js diff --git a/zenXml/doc/search/variables_2.html b/zenXml/doc/search/variables_2.html new file mode 100644 index 00000000..ea80d201 --- /dev/null +++ b/zenXml/doc/search/variables_2.html @@ -0,0 +1,26 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html><head><title></title> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta name="generator" content="Doxygen 1.8.6"> +<link rel="stylesheet" type="text/css" href="search.css"/> +<script type="text/javascript" src="variables_2.js"></script> +<script type="text/javascript" src="search.js"></script> +</head> +<body class="SRPage"> +<div id="SRIndex"> +<div class="SRStatus" id="Loading">Loading...</div> +<div id="SRResults"></div> +<script type="text/javascript"><!-- +createResults(); +--></script> +<div class="SRStatus" id="Searching">Searching...</div> +<div class="SRStatus" id="NoMatches">No Matches</div> +<script type="text/javascript"><!-- +document.getElementById("Loading").style.display="none"; +document.getElementById("NoMatches").style.display="none"; +var searchResults = new SearchResults("searchResults"); +searchResults.Search(); +--></script> +</div> +</body> +</html> diff --git a/zenxml/doc/search/variables_72.js b/zenXml/doc/search/variables_2.js index f37305dd..f37305dd 100644 --- a/zenxml/doc/search/variables_72.js +++ b/zenXml/doc/search/variables_2.js diff --git a/zenXml/doc/sync_off.png b/zenXml/doc/sync_off.png Binary files differnew file mode 100644 index 00000000..3b443fc6 --- /dev/null +++ b/zenXml/doc/sync_off.png diff --git a/zenXml/doc/sync_on.png b/zenXml/doc/sync_on.png Binary files differnew file mode 100644 index 00000000..e08320fb --- /dev/null +++ b/zenXml/doc/sync_on.png diff --git a/zenxml/doc/annotated.html b/zenxml/doc/annotated.html index b5e05616..c11dd07e 100644 --- a/zenxml/doc/annotated.html +++ b/zenxml/doc/annotated.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -78,13 +67,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -98,23 +87,24 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <div class="title">Class List</div> </div> </div><!--header--> <div class="contents"> -<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><table> - <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="indexvalue">The complete XML document </td></tr> - <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="indexvalue">An XML element </td></tr> - <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a></td><td class="indexvalue">Exception base class for zen::Xml </td></tr> - <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td class="indexvalue">Exception thrown due to failed file I/O </td></tr> - <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="indexvalue">Proxy class to conveniently convert XML structure to user data </td></tr> - <tr><td class="indexkey"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="indexvalue">Proxy class to conveniently convert user data into XML structure </td></tr> - <tr><td class="indexkey"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="indexvalue">Exception thrown due to an XML parsing error </td></tr> +<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory"> +<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><img id="arr_0_" src="ftv2mlastnode.png" alt="\" width="16" height="22" onclick="toggleFolder('0_')"/><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespacezen.html" target="_self">zen</a></td><td class="desc">The zen::Xml namespace </td></tr> +<tr id="row_0_0_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_out.html" target="_self">XmlOut</a></td><td class="desc">Proxy class to conveniently convert user data into XML structure </td></tr> +<tr id="row_0_1_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_in.html" target="_self">XmlIn</a></td><td class="desc">Proxy class to conveniently convert XML structure to user data </td></tr> +<tr id="row_0_2_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_element.html" target="_self">XmlElement</a></td><td class="desc">An XML element </td></tr> +<tr id="row_0_3_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_doc.html" target="_self">XmlDoc</a></td><td class="desc">The complete XML document </td></tr> +<tr id="row_0_4_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_error.html" target="_self">XmlError</a></td><td class="desc">Exception base class for zen::Xml </td></tr> +<tr id="row_0_5_" class="even"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_file_error.html" target="_self">XmlFileError</a></td><td class="desc">Exception thrown due to failed file I/O </td></tr> +<tr id="row_0_6_"><td class="entry"><img src="ftv2blank.png" alt=" " width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_parsing_error.html" target="_self">XmlParsingError</a></td><td class="desc">Exception thrown due to an XML parsing error </td></tr> </table> +</div><!-- directory --> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/bc_s.png b/zenxml/doc/bc_s.png Binary files differindex 51ba0066..224b29aa 100644 --- a/zenxml/doc/bc_s.png +++ b/zenxml/doc/bc_s.png diff --git a/zenxml/doc/bdwn.png b/zenxml/doc/bdwn.png Binary files differindex d0b575b7..940a0b95 100644 --- a/zenxml/doc/bdwn.png +++ b/zenxml/doc/bdwn.png diff --git a/zenxml/doc/bind_8h_source.html b/zenxml/doc/bind_8h_source.html index 300a10aa..e8e9e831 100644 --- a/zenxml/doc/bind_8h_source.html +++ b/zenxml/doc/bind_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: bind.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,230 +73,263 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">bind.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_BIND_HEADER_9081740816593478258435</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_BIND_HEADER_9081740816593478258435</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include <set></span> -<a name="l00011"></a>00011 <span class="preprocessor">#include "cvrt_struc.h"</span> -<a name="l00012"></a>00012 <span class="preprocessor">#include "parser.h"</span> -<a name="l00013"></a>00013 <span class="preprocessor">#include "io.h"</span> -<a name="l00014"></a>00014 -<a name="l00015"></a><a class="code" href="namespacezen.html">00015</a> <span class="keyword">namespace </span>zen -<a name="l00016"></a>00016 { -<a name="l00022"></a>00022 -<a name="l00023"></a>00023 -<a name="l00032"></a>00032 <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span> -<a name="l00033"></a><a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">00033</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="keyword">const</span> String& filename, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc) <span class="comment">//throw XmlFileError, XmlParsingError</span> -<a name="l00034"></a>00034 { -<a name="l00035"></a>00035 std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(filename); <span class="comment">//throw XmlFileError</span> -<a name="l00036"></a>00036 <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span> -<a name="l00037"></a>00037 } -<a name="l00038"></a>00038 -<a name="l00039"></a>00039 -<a name="l00041"></a>00041 -<a name="l00051"></a>00051 <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span> -<a name="l00052"></a><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">00052</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc, -<a name="l00053"></a>00053 <span class="keyword">const</span> String& filename, -<a name="l00054"></a>00054 <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>, -<a name="l00055"></a>00055 <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>) <span class="comment">//throw XmlFileError</span> -<a name="l00056"></a>00056 { -<a name="l00057"></a>00057 std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc, lineBreak, indent); <span class="comment">//throw ()</span> -<a name="l00058"></a>00058 <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(stream, filename); <span class="comment">//throw XmlFileError</span> -<a name="l00059"></a>00059 } -<a name="l00060"></a>00060 -<a name="l00061"></a>00061 -<a name="l00063"></a><a class="code" href="classzen_1_1_xml_out.html">00063</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">XmlOut</a> -<a name="l00064"></a>00064 { -<a name="l00065"></a>00065 <span class="keyword">public</span>: -<a name="l00067"></a>00067 -<a name="l00088"></a><a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">00088</a> <a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document.">XmlOut</a>(<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc) : ref_(&doc.root()) {} -<a name="l00090"></a>00090 -<a name="l00093"></a><a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">00093</a> <a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0" title="Construct an output proxy for a single XML element.">XmlOut</a>(<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& element) : ref_(&element) {} -<a name="l00094"></a>00094 -<a name="l00096"></a>00096 -<a name="l00101"></a>00101 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00102"></a><a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">00102</a> <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">XmlOut</a> <a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831" title="Retrieve a handle to an XML child element for writing.">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span> -<a name="l00103"></a>00103 <span class="keyword"> </span>{ -<a name="l00104"></a>00104 <span class="keyword">const</span> std::string utf8name = utfCvrtTo<std::string>(name); -<a name="l00105"></a>00105 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* child = ref_-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(utf8name); -<a name="l00106"></a>00106 <span class="keywordflow">return</span> child ? *child : ref_-><a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(utf8name); -<a name="l00107"></a>00107 } -<a name="l00108"></a>00108 -<a name="l00110"></a>00110 -<a name="l00114"></a>00114 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00115"></a><a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">00115</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb" title="Write user data to the underlying XML element.">operator()</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, *ref_); } -<a name="l00116"></a>00116 -<a name="l00118"></a>00118 -<a name="l00142"></a>00142 <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T> -<a name="l00143"></a><a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">00143</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805" title="Write user data to an XML attribute.">attribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value) { ref_-><a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">setAttribute</a>(name, value); } -<a name="l00144"></a>00144 -<a name="l00146"></a><a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">00146</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& <a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2" title="Return a reference to the underlying Xml element.">ref</a>() { <span class="keywordflow">return</span> *ref_; } -<a name="l00147"></a>00147 -<a name="l00148"></a>00148 <span class="keyword">private</span>: -<a name="l00149"></a>00149 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* ref_; <span class="comment">//always bound!</span> -<a name="l00150"></a>00150 }; -<a name="l00151"></a>00151 -<a name="l00152"></a>00152 -<a name="l00154"></a><a class="code" href="classzen_1_1_xml_in.html">00154</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> -<a name="l00155"></a>00155 { -<a name="l00156"></a>00156 <span class="keyword">class </span>ErrorLog; -<a name="l00157"></a>00157 <span class="keyword">struct </span>ConversionToBool { <span class="keywordtype">int</span> dummy; }; -<a name="l00158"></a>00158 -<a name="l00159"></a>00159 <span class="keyword">public</span>: -<a name="l00161"></a>00161 -<a name="l00171"></a><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">00171</a> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document's root element.">root</a>()); } -<a name="l00173"></a>00173 -<a name="l00176"></a><a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">00176</a> <a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430" title="Construct an input proxy for a single XML element, may be nullptr.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(element); } -<a name="l00178"></a>00178 -<a name="l00181"></a><a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">00181</a> <a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8" title="Construct an input proxy for a single XML element.">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&element); } -<a name="l00182"></a>00182 -<a name="l00184"></a>00184 -<a name="l00189"></a>00189 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00190"></a><a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">00190</a> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> <a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d" title="Retrieve a handle to an XML child element for reading.">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span> -<a name="l00191"></a>00191 <span class="keyword"> </span>{ -<a name="l00192"></a>00192 std::vector<const XmlElement*> childList; -<a name="l00193"></a>00193 -<a name="l00194"></a>00194 <span class="keywordflow">if</span> (refIndex < refList.size()) -<a name="l00195"></a>00195 { -<a name="l00196"></a>00196 <span class="keyword">auto</span> iterPair = refList[refIndex]->getChildren(name); -<a name="l00197"></a>00197 std::for_each(iterPair.first, iterPair.second, -<a name="l00198"></a>00198 [&](<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& child) { childList.push_back(&child); }); -<a name="l00199"></a>00199 } -<a name="l00200"></a>00200 -<a name="l00201"></a>00201 <span class="keywordflow">return</span> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a>(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log); -<a name="l00202"></a>00202 } -<a name="l00203"></a>00203 -<a name="l00205"></a>00205 -<a name="l00225"></a><a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">00225</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4" title="Refer to next sibling element with the same name.">next</a>() { ++refIndex; } -<a name="l00226"></a>00226 -<a name="l00228"></a>00228 -<a name="l00233"></a>00233 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00234"></a><a class="code" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">00234</a> <span class="keywordtype">bool</span> operator()(T& value)<span class="keyword"> const</span> -<a name="l00235"></a>00235 <span class="keyword"> </span>{ -<a name="l00236"></a>00236 <span class="keywordflow">if</span> (refIndex < refList.size()) -<a name="l00237"></a>00237 { -<a name="l00238"></a>00238 <span class="keywordtype">bool</span> success = <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(*refList[refIndex], value); -<a name="l00239"></a>00239 <span class="keywordflow">if</span> (!success) -<a name="l00240"></a>00240 log->notifyConversionError(getNameFormatted()); -<a name="l00241"></a>00241 <span class="keywordflow">return</span> success; -<a name="l00242"></a>00242 } -<a name="l00243"></a>00243 <span class="keywordflow">else</span> -<a name="l00244"></a>00244 { -<a name="l00245"></a>00245 log->notifyMissingElement(getNameFormatted()); -<a name="l00246"></a>00246 <span class="keywordflow">return</span> <span class="keyword">false</span>; -<a name="l00247"></a>00247 } -<a name="l00248"></a>00248 } -<a name="l00249"></a>00249 -<a name="l00251"></a>00251 -<a name="l00268"></a>00268 <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T> -<a name="l00269"></a><a class="code" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">00269</a> <span class="keywordtype">bool</span> attribute(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span> -<a name="l00270"></a>00270 <span class="keyword"> </span>{ -<a name="l00271"></a>00271 <span class="keywordflow">if</span> (refIndex < refList.size()) -<a name="l00272"></a>00272 { -<a name="l00273"></a>00273 <span class="keywordtype">bool</span> success = refList[refIndex]->getAttribute(name, value); -<a name="l00274"></a>00274 <span class="keywordflow">if</span> (!success) -<a name="l00275"></a>00275 log->notifyMissingAttribute(getNameFormatted(), utfCvrtTo<std::string>(name)); -<a name="l00276"></a>00276 <span class="keywordflow">return</span> success; -<a name="l00277"></a>00277 } -<a name="l00278"></a>00278 <span class="keywordflow">else</span> -<a name="l00279"></a>00279 { -<a name="l00280"></a>00280 log->notifyMissingElement(getNameFormatted()); -<a name="l00281"></a>00281 <span class="keywordflow">return</span> <span class="keyword">false</span>; -<a name="l00282"></a>00282 } -<a name="l00283"></a>00283 } -<a name="l00284"></a>00284 -<a name="l00286"></a><a class="code" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">00286</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> refIndex < refList.size() ? refList[refIndex] : <span class="keyword">nullptr</span>; } -<a name="l00287"></a>00287 -<a name="l00289"></a>00289 -<a name="l00298"></a><a class="code" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">00298</a> operator int ConversionToBool::* ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">get</span>() ? &ConversionToBool::dummy : <span class="keyword">nullptr</span>; } -<a name="l00299"></a>00299 -<a name="l00301"></a>00301 -<a name="l00320"></a><a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">00320</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a" title="Notifies errors while mapping the XML to user data.">errorsOccured</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !log->elementList().empty(); } -<a name="l00321"></a>00321 -<a name="l00323"></a>00323 -<a name="l00327"></a>00327 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00328"></a><a class="code" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">00328</a> std::vector<String> getErrorsAs()<span class="keyword"> const</span> -<a name="l00329"></a>00329 <span class="keyword"> </span>{ -<a name="l00330"></a>00330 std::vector<String> output; -<a name="l00331"></a>00331 <span class="keyword">const</span> <span class="keyword">auto</span>& elements = log->elementList(); -<a name="l00332"></a>00332 std::transform(elements.begin(), elements.end(), std::back_inserter(output), [](<span class="keyword">const</span> std::string& str) { <span class="keywordflow">return</span> utfCvrtTo<String>(str); }); -<a name="l00333"></a>00333 <span class="keywordflow">return</span> output; -<a name="l00334"></a>00334 } -<a name="l00335"></a>00335 -<a name="l00336"></a>00336 <span class="keyword">private</span>: -<a name="l00337"></a>00337 <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a>(<span class="keyword">const</span> std::vector<const XmlElement*>& siblingList, <span class="keyword">const</span> std::string& elementNameFmt, <span class="keyword">const</span> std::shared_ptr<ErrorLog>& sharedlog) : -<a name="l00338"></a>00338 refList(siblingList), refIndex(0), formattedName(elementNameFmt), log(sharedlog) -<a name="l00339"></a>00339 { assert((!siblingList.empty() && elementNameFmt.empty()) || (siblingList.empty() && !elementNameFmt.empty())); } -<a name="l00340"></a>00340 -<a name="l00341"></a>00341 <span class="keyword">static</span> std::string getNameFormatted(<span class="keyword">const</span> XmlElement& elem) <span class="comment">//"<Root> <Level1> <Level2>"</span> -<a name="l00342"></a>00342 { -<a name="l00343"></a>00343 <span class="keywordflow">return</span> (elem.parent() ? getNameFormatted(*elem.parent()) + <span class="stringliteral">" "</span> : std::string()) + <span class="stringliteral">"<"</span> + elem.getNameAs<std::string>() + <span class="stringliteral">">"</span>; -<a name="l00344"></a>00344 } -<a name="l00345"></a>00345 -<a name="l00346"></a>00346 std::string getNameFormatted()<span class="keyword"> const</span> -<a name="l00347"></a>00347 <span class="keyword"> </span>{ -<a name="l00348"></a>00348 <span class="keywordflow">if</span> (refIndex < refList.size()) -<a name="l00349"></a>00349 { -<a name="l00350"></a>00350 assert(formattedName.empty()); -<a name="l00351"></a>00351 <span class="keywordflow">return</span> getNameFormatted(*refList[refIndex]); -<a name="l00352"></a>00352 } -<a name="l00353"></a>00353 <span class="keywordflow">else</span> -<a name="l00354"></a>00354 <span class="keywordflow">return</span> formattedName; -<a name="l00355"></a>00355 } -<a name="l00356"></a>00356 -<a name="l00357"></a>00357 std::string getChildNameFormatted(<span class="keyword">const</span> std::string& childName)<span class="keyword"> const</span> -<a name="l00358"></a>00358 <span class="keyword"> </span>{ -<a name="l00359"></a>00359 std::string parentName = getNameFormatted(); -<a name="l00360"></a>00360 <span class="keywordflow">return</span> (parentName.empty() ? std::string() : (parentName + <span class="stringliteral">" "</span>)) + <span class="stringliteral">"<"</span> + childName + <span class="stringliteral">">"</span>; -<a name="l00361"></a>00361 } -<a name="l00362"></a>00362 -<a name="l00363"></a>00363 <span class="keyword">class </span>ErrorLog -<a name="l00364"></a>00364 { -<a name="l00365"></a>00365 <span class="keyword">public</span>: -<a name="l00366"></a>00366 <span class="keywordtype">void</span> notifyConversionError (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); } -<a name="l00367"></a>00367 <span class="keywordtype">void</span> notifyMissingElement (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); } -<a name="l00368"></a>00368 <span class="keywordtype">void</span> notifyMissingAttribute(<span class="keyword">const</span> std::string& formattedName, <span class="keyword">const</span> std::string& attribName) { insert(formattedName + <span class="stringliteral">" @"</span> + attribName); } -<a name="l00369"></a>00369 -<a name="l00370"></a>00370 <span class="keyword">const</span> std::vector<std::string>& elementList()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failedElements; } -<a name="l00371"></a>00371 -<a name="l00372"></a>00372 <span class="keyword">private</span>: -<a name="l00373"></a>00373 <span class="keywordtype">void</span> insert(<span class="keyword">const</span> std::string& newVal) -<a name="l00374"></a>00374 { -<a name="l00375"></a>00375 <span class="keywordflow">if</span> (usedElements.insert(newVal).second) -<a name="l00376"></a>00376 failedElements.push_back(newVal); -<a name="l00377"></a>00377 } -<a name="l00378"></a>00378 -<a name="l00379"></a>00379 std::vector<std::string> failedElements; <span class="comment">//unique list of failed elements</span> -<a name="l00380"></a>00380 std::set<std::string> usedElements; -<a name="l00381"></a>00381 }; -<a name="l00382"></a>00382 -<a name="l00383"></a>00383 std::vector<const XmlElement*> refList; <span class="comment">//all sibling elements with same name (all pointers bound!)</span> -<a name="l00384"></a>00384 <span class="keywordtype">size_t</span> refIndex; <span class="comment">//this sibling's index in refList</span> -<a name="l00385"></a>00385 std::string formattedName; <span class="comment">//contains full and formatted element name if (and only if) refList is empty</span> -<a name="l00386"></a>00386 std::shared_ptr<ErrorLog> log; <span class="comment">//always bound</span> -<a name="l00387"></a>00387 }; -<a name="l00388"></a>00388 } -<a name="l00389"></a>00389 -<a name="l00390"></a>00390 <span class="preprocessor">#endif //ZEN_XML_BIND_HEADER_9081740816593478258435</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <set></span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "cvrt_struc.h"</span></div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "parser.h"</span></div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "io.h"</span></div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="namespacezen.html"> 15</a></span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> {</div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> +<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00"> 33</a></span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError, XmlParsingError</span></div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> {</div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(filename); <span class="comment">//throw XmlFileError</span></div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(stream); <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> +<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc,</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">const</span> String& filename,</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>,</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>) <span class="comment">//throw XmlFileError</span></div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc, lineBreak, indent); <span class="comment">//throw ()</span></div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(stream, filename); <span class="comment">//throw XmlFileError</span></div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> +<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html"> 63</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_out.html">XmlOut</a></div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div> +<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc"> 88</a></span>  <a class="code" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc) : ref_(&doc.root()) {}</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0"> 93</a></span>  <a class="code" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(<a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& element) : ref_(&element) {}</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831"> 102</a></span>  <a class="code" href="classzen_1_1_xml_out.html">XmlOut</a> <a class="code" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keyword">const</span> std::string utf8name = utfCvrtTo<std::string>(name);</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* child = ref_-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(utf8name);</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> child ? *child : ref_-><a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(utf8name);</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb"> 115</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, *ref_); }</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> +<div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805"> 143</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value) { ref_-><a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(name, value); }</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div> +<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2"> 146</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>() { <span class="keywordflow">return</span> *ref_; }</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* ref_; <span class="comment">//always bound!</span></div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> };</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div> +<div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html"> 154</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_in.html">XmlIn</a></div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> {</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">class </span>ErrorLog;</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">struct </span>ConversionToBool { <span class="keywordtype">int</span> dummy; };</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div> +<div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f"> 171</a></span>  <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>()); }</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div> +<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430"> 176</a></span>  <a class="code" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(element); }</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> +<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8"> 181</a></span>  <a class="code" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& element) : refIndex(0), log(std::make_shared<ErrorLog>()) { refList.push_back(&element); }</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d"> 190</a></span>  <a class="code" href="classzen_1_1_xml_in.html">XmlIn</a> <a class="code" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  std::vector<const XmlElement*> childList;</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  {</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keyword">auto</span> iterPair = refList[refIndex]->getChildren(name);</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  std::for_each(iterPair.first, iterPair.second,</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  [&](<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& child) { childList.push_back(&child); });</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</span> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(childList, childList.empty() ? getChildNameFormatted(name) : std::string(), log);</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div> +<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4"> 225</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>() { ++refIndex; }</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506"> 234</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  {</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordtype">bool</span> success = <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(*refList[refIndex], value);</div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (!success)</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  log->notifyConversionError(getNameFormatted());</div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> success;</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  log->notifyMissingElement(getNameFormatted());</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> +<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01"> 269</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">bool</span> success = refList[refIndex]->getAttribute(name, value);</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (!success)</div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  log->notifyMissingAttribute(getNameFormatted(), utfCvrtTo<std::string>(name));</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">return</span> success;</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  log->notifyMissingElement(getNameFormatted());</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div> +<div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f"> 286</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <span class="keyword">get</span>() <span class="keyword">const</span> { <span class="keywordflow">return</span> refIndex < refList.size() ? refList[refIndex] : <span class="keyword">nullptr</span>; }</div> +<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div> +<div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72"> 298</a></span>  <span class="keyword">operator</span> <span class="keywordtype">int</span> ConversionToBool::* () <span class="keyword">const</span> { <span class="keywordflow">return</span> <span class="keyword">get</span>() ? &ConversionToBool::dummy : <span class="keyword">nullptr</span>; }</div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> </div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div> +<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a"> 320</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> !log->elementList().empty(); }</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e"> 328</a></span>  std::vector<String> <a class="code" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>()<span class="keyword"> const</span></div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  std::vector<String> output;</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keyword">const</span> <span class="keyword">auto</span>& elements = log->elementList();</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  std::transform(elements.begin(), elements.end(), std::back_inserter(output), [](<span class="keyword">const</span> std::string& str) { <span class="keywordflow">return</span> utfCvrtTo<String>(str); });</div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">return</span> output;</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="classzen_1_1_xml_in.html">XmlIn</a>(<span class="keyword">const</span> std::vector<const XmlElement*>& siblingList, <span class="keyword">const</span> std::string& elementNameFmt, <span class="keyword">const</span> std::shared_ptr<ErrorLog>& sharedlog) :</div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  refList(siblingList), refIndex(0), formattedName(elementNameFmt), log(sharedlog)</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  { assert((!siblingList.empty() && elementNameFmt.empty()) || (siblingList.empty() && !elementNameFmt.empty())); }</div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">static</span> std::string getNameFormatted(<span class="keyword">const</span> XmlElement& elem) <span class="comment">//"<Root> <Level1> <Level2>"</span></div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  {</div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">return</span> (elem.parent() ? getNameFormatted(*elem.parent()) + <span class="stringliteral">" "</span> : std::string()) + <span class="stringliteral">"<"</span> + elem.getNameAs<std::string>() + <span class="stringliteral">">"</span>;</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  std::string getNameFormatted()<span class="keyword"> const</span></div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">if</span> (refIndex < refList.size())</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  {</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  assert(formattedName.empty());</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">return</span> getNameFormatted(*refList[refIndex]);</div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">return</span> formattedName;</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> </div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  std::string getChildNameFormatted(<span class="keyword">const</span> std::string& childName)<span class="keyword"> const</span></div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  std::string parentName = getNameFormatted();</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> (parentName.empty() ? std::string() : (parentName + <span class="stringliteral">" "</span>)) + <span class="stringliteral">"<"</span> + childName + <span class="stringliteral">">"</span>;</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keyword">class </span>ErrorLog</div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">public</span>:</div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordtype">void</span> notifyConversionError (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); }</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keywordtype">void</span> notifyMissingElement (<span class="keyword">const</span> std::string& formattedName) { insert(formattedName); }</div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordtype">void</span> notifyMissingAttribute(<span class="keyword">const</span> std::string& formattedName, <span class="keyword">const</span> std::string& attribName) { insert(formattedName + <span class="stringliteral">" @"</span> + attribName); }</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">const</span> std::vector<std::string>& elementList()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> failedElements; }</div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">private</span>:</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordtype">void</span> insert(<span class="keyword">const</span> std::string& newVal)</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (usedElements.insert(newVal).second)</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  failedElements.push_back(newVal);</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  std::vector<std::string> failedElements; <span class="comment">//unique list of failed elements</span></div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  std::set<std::string> usedElements;</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  };</div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  std::vector<const XmlElement*> refList; <span class="comment">//all sibling elements with same name (all pointers bound!)</span></div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordtype">size_t</span> refIndex; <span class="comment">//this sibling's index in refList</span></div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  std::string formattedName; <span class="comment">//contains full and formatted element name if (and only if) refList is empty</span></div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  std::shared_ptr<ErrorLog> log; <span class="comment">//always bound</span></div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> };</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> }</div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor">#endif //ZEN_XML_BIND_HEADER_9081740816593478258435</span></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a33b5dd504d3165aa3f923f6b33e9991a"><div class="ttname"><a href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn::errorsOccured</a></div><div class="ttdeci">bool errorsOccured() const </div><div class="ttdoc">Notifies errors while mapping the XML to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:320</div></div> +<div class="ttc" id="namespacezen_html_adeeb6b2318097382ae47aa939fc15d4d"><div class="ttname"><a href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen::save</a></div><div class="ttdeci">void save(const XmlDoc &doc, const String &filename, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document to a file. </div><div class="ttdef"><b>Definition:</b> bind.h:52</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_ad4a9594d93885fc1a12db28e8246648d"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc::root</a></div><div class="ttdeci">const XmlElement & root() const </div><div class="ttdoc">Get a const reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:267</div></div> +<div class="ttc" id="namespacezen_html_a1ae1a4688d724b554fe3bf4638700477"><div class="ttname"><a href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen::parse</a></div><div class="ttdeci">XmlDoc parse(const std::string &stream)</div><div class="ttdoc">Load XML document from a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:612</div></div> +<div class="ttc" id="namespacezen_html_afaa4920e275078e6c8009fbdf58b57ee"><div class="ttname"><a href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a></div><div class="ttdeci">std::string serialize(const XmlDoc &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document as a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:287</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><div class="ttname"><a href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a></div><div class="ttdeci">XmlOut(XmlDoc &doc)</div><div class="ttdoc">Construct an output proxy for an XML document. </div><div class="ttdef"><b>Definition:</b> bind.h:88</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_aec117344e8a534382e8d5e76711f97b2"><div class="ttname"><a href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">zen::XmlOut::ref</a></div><div class="ttdeci">XmlElement & ref()</div><div class="ttdoc">Return a reference to the underlying Xml element. </div><div class="ttdef"><b>Definition:</b> bind.h:146</div></div> +<div class="ttc" id="namespacezen_html_a4ba7bbaa14a787b07fc13da9145aabe2"><div class="ttname"><a href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a></div><div class="ttdeci">void saveStream(const std::string &stream, const String &filename)</div><div class="ttdoc">Save byte stream to a file. </div><div class="ttdef"><b>Definition:</b> io.h:66</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html"><div class="ttname"><a href="classzen_1_1_xml_in.html">zen::XmlIn</a></div><div class="ttdoc">Proxy class to conveniently convert XML structure to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:154</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_a09ca9144515e3c109b36062b0475c8eb"><div class="ttname"><a href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut::operator()</a></div><div class="ttdeci">void operator()(const T &value)</div><div class="ttdoc">Write user data to the underlying XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:115</div></div> +<div class="ttc" id="namespacezen_html_a04fe23c3bd9b7d03309620b5ea763607"><div class="ttname"><a href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a></div><div class="ttdeci">std::string loadStream(const String &filename)</div><div class="ttdoc">Load byte stream from a file. </div><div class="ttdef"><b>Definition:</b> io.h:94</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a5b48c9848e6c631a04cec2477ff85c0f"><div class="ttname"><a href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlDoc &doc)</div><div class="ttdoc">Construct an input proxy for an XML document. </div><div class="ttdef"><b>Definition:</b> bind.h:171</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a33de75412df69cb25e0fd8b3bc70c9f8"><div class="ttname"><a href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlElement &element)</div><div class="ttdoc">Construct an input proxy for a single XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:181</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a60cf2678c989621545d27745dcafa4a4"><div class="ttname"><a href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn::next</a></div><div class="ttdeci">void next()</div><div class="ttdoc">Refer to next sibling element with the same name. </div><div class="ttdef"><b>Definition:</b> bind.h:225</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_acaf9b71fe1d907dd63dd4b91e2e03805"><div class="ttname"><a href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut::attribute</a></div><div class="ttdeci">void attribute(const String &name, const T &value)</div><div class="ttdoc">Write user data to an XML attribute. </div><div class="ttdef"><b>Definition:</b> bind.h:143</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a9b38167835a28eac9a2297f35f51e53d"><div class="ttname"><a href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn::operator[]</a></div><div class="ttdeci">XmlIn operator[](const String &name) const </div><div class="ttdoc">Retrieve a handle to an XML child element for reading. </div><div class="ttdef"><b>Definition:</b> bind.h:190</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a971cd7054c551c4460d5220f6ec5cf01"><div class="ttname"><a href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn::attribute</a></div><div class="ttdeci">bool attribute(const String &name, T &value) const </div><div class="ttdoc">Read user data from an XML attribute. </div><div class="ttdef"><b>Definition:</b> bind.h:269</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a84bb497d3b3fc753d054e52c4823c05e"><div class="ttname"><a href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn::getErrorsAs</a></div><div class="ttdeci">std::vector< String > getErrorsAs() const </div><div class="ttdoc">Get a list of XML element and attribute names which failed to convert to user data. </div><div class="ttdef"><b>Definition:</b> bind.h:328</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html"><div class="ttname"><a href="classzen_1_1_xml_out.html">zen::XmlOut</a></div><div class="ttdoc">Proxy class to conveniently convert user data into XML structure. </div><div class="ttdef"><b>Definition:</b> bind.h:63</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_a98cc59f687c89549381e76105f8fb506"><div class="ttname"><a href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn::operator()</a></div><div class="ttdeci">bool operator()(T &value) const </div><div class="ttdoc">Read user data from the underlying XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:234</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a653caffa6fad89db7d14f67f987ad0f9"><div class="ttname"><a href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a></div><div class="ttdeci">XmlElement & addChild(const String &name)</div><div class="ttdoc">Create a new child element and return a reference to it. </div><div class="ttdef"><b>Definition:</b> dom.h:97</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a3ab82b1720460487f4afabcd115d0c7e"><div class="ttname"><a href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a></div><div class="ttdeci">const XmlElement * getChild(const String &name) const </div><div class="ttdoc">Retrieve a child element with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:113</div></div> +<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a211a6f037c22a54d3facb7a8347a8421"><div class="ttname"><a href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a></div><div class="ttdeci">void setAttribute(const String &name, const T &value)</div><div class="ttdoc">Create or update an XML attribute. </div><div class="ttdef"><b>Definition:</b> dom.h:77</div></div> +<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_a00f883d3f9d60535b06b5ae609dc8831"><div class="ttname"><a href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut::operator[]</a></div><div class="ttdeci">XmlOut operator[](const String &name) const </div><div class="ttdoc">Retrieve a handle to an XML child element for writing. </div><div class="ttdef"><b>Definition:</b> bind.h:102</div></div> +<div class="ttc" id="classzen_1_1_xml_in_html_ae072660cde71fd4695c04d074098b430"><div class="ttname"><a href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn::XmlIn</a></div><div class="ttdeci">XmlIn(const XmlElement *element)</div><div class="ttdoc">Construct an input proxy for a single XML element, may be nullptr. </div><div class="ttdef"><b>Definition:</b> bind.h:176</div></div> +<div class="ttc" id="classzen_1_1_xml_out_html_aa80be3a56f70a58d2730a763166088c0"><div class="ttname"><a href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut::XmlOut</a></div><div class="ttdeci">XmlOut(XmlElement &element)</div><div class="ttdoc">Construct an output proxy for a single XML element. </div><div class="ttdef"><b>Definition:</b> bind.h:93</div></div> +<div class="ttc" id="namespacezen_html_a872a48c0616e7f12ae8caca464835e00"><div class="ttname"><a href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen::load</a></div><div class="ttdeci">XmlDoc load(const String &filename)</div><div class="ttdoc">Load XML document from a file. </div><div class="ttdef"><b>Definition:</b> bind.h:33</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classes.html b/zenxml/doc/classes.html index 4670ccf3..d14feac0 100644 --- a/zenxml/doc/classes.html +++ b/zenxml/doc/classes.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class Index</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -78,13 +67,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -108,13 +97,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </table> <div class="qindex"><a class="qindex" href="#letter_X">X</a></div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_doc-members.html b/zenxml/doc/classzen_1_1_xml_doc-members.html index 4a936065..b635379d 100644 --- a/zenxml/doc/classzen_1_1_xml_doc-members.html +++ b/zenxml/doc/classzen_1_1_xml_doc-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,37 +81,35 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlDoc Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>() const </td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>()</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(const String &encoding)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(const String &standalone)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(const String &version)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>()</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName)</td><td><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(const String &encoding)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(const String &standalone)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(const String &version)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName)</td><td class="entry"><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_doc.html b/zenxml/doc/classzen_1_1_xml_doc.html index 80e05844..174e84fc 100644 --- a/zenxml/doc/classzen_1_1_xml_doc.html +++ b/zenxml/doc/classzen_1_1_xml_doc.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlDoc Class Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> </div> +<a href="#pub-methods">Public Member Functions</a> | +<a href="classzen_1_1_xml_doc-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlDoc Class Reference</div> </div> </div><!--header--> @@ -111,44 +99,52 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <a href="classzen_1_1_xml_doc.html#details">More...</a></p> <p><code>#include <<a class="el" href="dom_8h_source.html">dom.h</a>></code></p> - -<p><a href="classzen_1_1_xml_doc-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-methods"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:adbed9c31066d456a9cc8c610f15670ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="adbed9c31066d456a9cc8c610f15670ed"></a>  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a> ()</td></tr> <tr class="memdesc:adbed9c31066d456a9cc8c610f15670ed"><td class="mdescLeft"> </td><td class="mdescRight">Default constructor setting up an empty XML document with a standard declaration: <?xml version="1.0" encoding="UTF-8" ?> <br/></td></tr> +<tr class="separator:adbed9c31066d456a9cc8c610f15670ed"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a74ff8434848672fe6483845d04c082df"><td class="memTemplItemLeft" align="right" valign="top"> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a> (String rootName)</td></tr> +<tr class="separator:a74ff8434848672fe6483845d04c082df"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad4a9594d93885fc1a12db28e8246648d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4a9594d93885fc1a12db28e8246648d"></a> const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a> () const </td></tr> <tr class="memdesc:ad4a9594d93885fc1a12db28e8246648d"><td class="mdescLeft"> </td><td class="mdescRight">Get a const reference to the document's root element. <br/></td></tr> +<tr class="separator:ad4a9594d93885fc1a12db28e8246648d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a094e156f9d265443e52a527638e88a1e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a094e156f9d265443e52a527638e88a1e"></a> <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a> ()</td></tr> <tr class="memdesc:a094e156f9d265443e52a527638e88a1e"><td class="mdescLeft"> </td><td class="mdescRight">Get a reference to the document's root element. <br/></td></tr> +<tr class="separator:a094e156f9d265443e52a527638e88a1e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a> () const </td></tr> -<tr class="memdesc:a7f93dcdc00cdc8d98926cf8e47161665"><td class="mdescLeft"> </td><td class="mdescRight">Get the version used in the XML declaration. <a href="#a7f93dcdc00cdc8d98926cf8e47161665"></a><br/></td></tr> +<tr class="memdesc:a7f93dcdc00cdc8d98926cf8e47161665"><td class="mdescLeft"> </td><td class="mdescRight">Get the version used in the XML declaration. <a href="#a7f93dcdc00cdc8d98926cf8e47161665">More...</a><br/></td></tr> +<tr class="separator:a7f93dcdc00cdc8d98926cf8e47161665"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:ab45914339c476e1da35746f5e00dbc64"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a> (const String &version)</td></tr> -<tr class="memdesc:ab45914339c476e1da35746f5e00dbc64"><td class="mdescLeft"> </td><td class="mdescRight">Set the version used in the XML declaration. <a href="#ab45914339c476e1da35746f5e00dbc64"></a><br/></td></tr> +<tr class="memdesc:ab45914339c476e1da35746f5e00dbc64"><td class="mdescLeft"> </td><td class="mdescRight">Set the version used in the XML declaration. <a href="#ab45914339c476e1da35746f5e00dbc64">More...</a><br/></td></tr> +<tr class="separator:ab45914339c476e1da35746f5e00dbc64"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a64ece4a1f3f8c802192b8f31506535da"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a> () const </td></tr> -<tr class="memdesc:a64ece4a1f3f8c802192b8f31506535da"><td class="mdescLeft"> </td><td class="mdescRight">Get the encoding used in the XML declaration. <a href="#a64ece4a1f3f8c802192b8f31506535da"></a><br/></td></tr> +<tr class="memdesc:a64ece4a1f3f8c802192b8f31506535da"><td class="mdescLeft"> </td><td class="mdescRight">Get the encoding used in the XML declaration. <a href="#a64ece4a1f3f8c802192b8f31506535da">More...</a><br/></td></tr> +<tr class="separator:a64ece4a1f3f8c802192b8f31506535da"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a2ae30bca2f490479f58c272148935a62"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a> (const String &encoding)</td></tr> -<tr class="memdesc:a2ae30bca2f490479f58c272148935a62"><td class="mdescLeft"> </td><td class="mdescRight">Set the encoding used in the XML declaration. <a href="#a2ae30bca2f490479f58c272148935a62"></a><br/></td></tr> +<tr class="memdesc:a2ae30bca2f490479f58c272148935a62"><td class="mdescLeft"> </td><td class="mdescRight">Set the encoding used in the XML declaration. <a href="#a2ae30bca2f490479f58c272148935a62">More...</a><br/></td></tr> +<tr class="separator:a2ae30bca2f490479f58c272148935a62"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a> () const </td></tr> -<tr class="memdesc:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="mdescLeft"> </td><td class="mdescRight">Get the standalone string used in the XML declaration. <a href="#ac1bfb9776852dc8195b9ffb4f65452e4"></a><br/></td></tr> +<tr class="memdesc:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="mdescLeft"> </td><td class="mdescRight">Get the standalone string used in the XML declaration. <a href="#ac1bfb9776852dc8195b9ffb4f65452e4">More...</a><br/></td></tr> +<tr class="separator:ac1bfb9776852dc8195b9ffb4f65452e4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a4c92f9b8c1bb47247b827d89794590d4"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a> (const String &standalone)</td></tr> -<tr class="memdesc:a4c92f9b8c1bb47247b827d89794590d4"><td class="mdescLeft"> </td><td class="mdescRight">Set the standalone string used in the XML declaration. <a href="#a4c92f9b8c1bb47247b827d89794590d4"></a><br/></td></tr> +<tr class="memdesc:a4c92f9b8c1bb47247b827d89794590d4"><td class="mdescLeft"> </td><td class="mdescRight">Set the standalone string used in the XML declaration. <a href="#a4c92f9b8c1bb47247b827d89794590d4">More...</a><br/></td></tr> +<tr class="separator:a4c92f9b8c1bb47247b827d89794590d4"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>The complete XML document. </p> -</div><hr/><h2>Constructor & Destructor Documentation</h2> +</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a class="anchor" id="a74ff8434848672fe6483845d04c082df"></a> <div class="memitem"> <div class="memproto"> @@ -156,22 +152,21 @@ const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & template<class String > </div> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc::XmlDoc</a> </td> + <td class="memname">zen::XmlDoc::XmlDoc </td> <td>(</td> <td class="paramtype">String </td> <td class="paramname"><em>rootName</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +</div><div class="memdoc"> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">rootName</td><td>The name of the XML document's root element. </td></tr> </table> @@ -180,7 +175,7 @@ template<class String > </div> </div> </div> -<hr/><h2>Member Function Documentation</h2> +<h2 class="groupheader">Member Function Documentation</h2> <a class="anchor" id="a64ece4a1f3f8c802192b8f31506535da"></a> <div class="memitem"> <div class="memproto"> @@ -188,18 +183,17 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc::getEncodingAs</a> </td> + <td class="memname">String zen::XmlDoc::getEncodingAs </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Get the encoding used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -214,18 +208,17 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc::getStandaloneAs</a> </td> + <td class="memname">String zen::XmlDoc::getStandaloneAs </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Get the standalone string used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -240,18 +233,17 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">String <a class="el" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc::getVersionAs</a> </td> + <td class="memname">String zen::XmlDoc::getVersionAs </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Get the version used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -266,19 +258,18 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc::setEncoding</a> </td> + <td class="memname">void zen::XmlDoc::setEncoding </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>encoding</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Set the encoding used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -293,19 +284,18 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc::setStandalone</a> </td> + <td class="memname">void zen::XmlDoc::setStandalone </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>standalone</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Set the standalone string used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -320,19 +310,18 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc::setVersion</a> </td> + <td class="memname">void zen::XmlDoc::setVersion </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>version</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Set the version used in the XML declaration. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -341,13 +330,11 @@ template<class String > </div> </div> </div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_element-members.html b/zenxml/doc/classzen_1_1_xml_element-members.html index bccd92d1..90f795dd 100644 --- a/zenxml/doc/classzen_1_1_xml_element-members.html +++ b/zenxml/doc/classzen_1_1_xml_element-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,42 +81,40 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlElement Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(const String &name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(const String &name, T &value) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(const String &name) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(const String &name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(const String &name) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(const String &name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>()</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T &value) const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>()</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>() const </td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(const String &name)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(const String &name, const T &value)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(const T &value)</td><td><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(const String &name, T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(const String &name)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(const String &name, const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_element.html b/zenxml/doc/classzen_1_1_xml_element.html index fc87396a..17eef773 100644 --- a/zenxml/doc/classzen_1_1_xml_element.html +++ b/zenxml/doc/classzen_1_1_xml_element.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlElement Class Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> </div> +<a href="#pub-methods">Public Member Functions</a> | +<a href="classzen_1_1_xml_element-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlElement Class Reference</div> </div> </div><!--header--> @@ -111,57 +99,70 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <a href="classzen_1_1_xml_element.html#details">More...</a></p> <p><code>#include <<a class="el" href="dom_8h_source.html">dom.h</a>></code></p> - -<p><a href="classzen_1_1_xml_element-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-methods"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a7c911eb06a59c864197b1a4098728e50"><td class="memTemplItemLeft" align="right" valign="top">String </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a> () const </td></tr> -<tr class="memdesc:a7c911eb06a59c864197b1a4098728e50"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the name of this XML element. <a href="#a7c911eb06a59c864197b1a4098728e50"></a><br/></td></tr> +<tr class="memdesc:a7c911eb06a59c864197b1a4098728e50"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the name of this XML element. <a href="#a7c911eb06a59c864197b1a4098728e50">More...</a><br/></td></tr> +<tr class="separator:a7c911eb06a59c864197b1a4098728e50"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a> (T &value) const </td></tr> -<tr class="memdesc:a5ac9d586a5668c2c64e3c06c6203b070"><td class="mdescLeft"> </td><td class="mdescRight">Get the value of this element as a user type. <a href="#a5ac9d586a5668c2c64e3c06c6203b070"></a><br/></td></tr> +<tr class="memdesc:a5ac9d586a5668c2c64e3c06c6203b070"><td class="mdescLeft"> </td><td class="mdescRight">Get the value of this element as a user type. <a href="#a5ac9d586a5668c2c64e3c06c6203b070">More...</a><br/></td></tr> +<tr class="separator:a5ac9d586a5668c2c64e3c06c6203b070"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a> (const T &value)</td></tr> -<tr class="memdesc:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="mdescLeft"> </td><td class="mdescRight">Set the value of this element. <a href="#aaf3a26f6199fc88cce7d9d911ba21b01"></a><br/></td></tr> +<tr class="memdesc:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="mdescLeft"> </td><td class="mdescRight">Set the value of this element. <a href="#aaf3a26f6199fc88cce7d9d911ba21b01">More...</a><br/></td></tr> +<tr class="separator:aaf3a26f6199fc88cce7d9d911ba21b01"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> <tr class="memitem:af90ac6f435b03ba37cf47ee188c58887"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a> (const String &name, T &value) const </td></tr> -<tr class="memdesc:af90ac6f435b03ba37cf47ee188c58887"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an attribute by name. <a href="#af90ac6f435b03ba37cf47ee188c58887"></a><br/></td></tr> +<tr class="memdesc:af90ac6f435b03ba37cf47ee188c58887"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve an attribute by name. <a href="#af90ac6f435b03ba37cf47ee188c58887">More...</a><br/></td></tr> +<tr class="separator:af90ac6f435b03ba37cf47ee188c58887"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> <tr class="memitem:a211a6f037c22a54d3facb7a8347a8421"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a> (const String &name, const T &value)</td></tr> -<tr class="memdesc:a211a6f037c22a54d3facb7a8347a8421"><td class="mdescLeft"> </td><td class="mdescRight">Create or update an XML attribute. <a href="#a211a6f037c22a54d3facb7a8347a8421"></a><br/></td></tr> +<tr class="memdesc:a211a6f037c22a54d3facb7a8347a8421"><td class="mdescLeft"> </td><td class="mdescRight">Create or update an XML attribute. <a href="#a211a6f037c22a54d3facb7a8347a8421">More...</a><br/></td></tr> +<tr class="separator:a211a6f037c22a54d3facb7a8347a8421"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:ad9c2ce2e55294c8110825988595e3934"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a> (const String &name)</td></tr> -<tr class="memdesc:ad9c2ce2e55294c8110825988595e3934"><td class="mdescLeft"> </td><td class="mdescRight">Remove the attribute with the given name. <a href="#ad9c2ce2e55294c8110825988595e3934"></a><br/></td></tr> +<tr class="memdesc:ad9c2ce2e55294c8110825988595e3934"><td class="mdescLeft"> </td><td class="mdescRight">Remove the attribute with the given name. <a href="#ad9c2ce2e55294c8110825988595e3934">More...</a><br/></td></tr> +<tr class="separator:ad9c2ce2e55294c8110825988595e3934"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a653caffa6fad89db7d14f67f987ad0f9"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a> (const String &name)</td></tr> -<tr class="memdesc:a653caffa6fad89db7d14f67f987ad0f9"><td class="mdescLeft"> </td><td class="mdescRight">Create a new child element and return a reference to it. <a href="#a653caffa6fad89db7d14f67f987ad0f9"></a><br/></td></tr> +<tr class="memdesc:a653caffa6fad89db7d14f67f987ad0f9"><td class="mdescLeft"> </td><td class="mdescRight">Create a new child element and return a reference to it. <a href="#a653caffa6fad89db7d14f67f987ad0f9">More...</a><br/></td></tr> +<tr class="separator:a653caffa6fad89db7d14f67f987ad0f9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a3ab82b1720460487f4afabcd115d0c7e"><td class="memTemplItemLeft" align="right" valign="top">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a> (const String &name) const </td></tr> -<tr class="memdesc:a3ab82b1720460487f4afabcd115d0c7e"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a child element with the given name. <a href="#a3ab82b1720460487f4afabcd115d0c7e"></a><br/></td></tr> +<tr class="memdesc:a3ab82b1720460487f4afabcd115d0c7e"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a child element with the given name. <a href="#a3ab82b1720460487f4afabcd115d0c7e">More...</a><br/></td></tr> +<tr class="separator:a3ab82b1720460487f4afabcd115d0c7e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a5d672e8ccc7592442ab927bb267af658"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a> (const String &name)</td></tr> +<tr class="separator:a5d672e8ccc7592442ab927bb267af658"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memTemplItemLeft" align="right" valign="top">std::pair< ChildIterConst2, <br class="typebreak"/> ChildIterConst2 > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a> (const String &name) const </td></tr> -<tr class="memdesc:a2640b438c4984f5eeb8760d82d73c5b8"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements with the given name via STL iterators. <a href="#a2640b438c4984f5eeb8760d82d73c5b8"></a><br/></td></tr> +<tr class="memdesc:a2640b438c4984f5eeb8760d82d73c5b8"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements with the given name via STL iterators. <a href="#a2640b438c4984f5eeb8760d82d73c5b8">More...</a><br/></td></tr> +<tr class="separator:a2640b438c4984f5eeb8760d82d73c5b8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:ae209dac9655bc36121abb87688ece41d"><td class="memTemplItemLeft" align="right" valign="top">std::pair< ChildIter2, ChildIter2 > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a> (const String &name)</td></tr> +<tr class="separator:ae209dac9655bc36121abb87688ece41d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a55a6d1849490d82ae900cd9b923908f2"><td class="memItemLeft" align="right" valign="top">std::pair< ChildIterConst, <br class="typebreak"/> ChildIterConst > </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a> () const </td></tr> -<tr class="memdesc:a55a6d1849490d82ae900cd9b923908f2"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements sequentially via STL iterators. <a href="#a55a6d1849490d82ae900cd9b923908f2"></a><br/></td></tr> +<tr class="memdesc:a55a6d1849490d82ae900cd9b923908f2"><td class="mdescLeft"> </td><td class="mdescRight">Access all child elements sequentially via STL iterators. <a href="#a55a6d1849490d82ae900cd9b923908f2">More...</a><br/></td></tr> +<tr class="separator:a55a6d1849490d82ae900cd9b923908f2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac59268177d162931f937b6a7f235ad96"><td class="memItemLeft" align="right" valign="top">std::pair< ChildIter, ChildIter > </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a> ()</td></tr> +<tr class="separator:ac59268177d162931f937b6a7f235ad96"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4af309f59ef09f46a559f1f0e1eac6c1"></a> <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a> ()</td></tr> <tr class="memdesc:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="mdescLeft"> </td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr> +<tr class="separator:a4af309f59ef09f46a559f1f0e1eac6c1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7ba1f26be5629f89ba7648d658f7058c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7ba1f26be5629f89ba7648d658f7058c"></a> const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a> () const </td></tr> <tr class="memdesc:a7ba1f26be5629f89ba7648d658f7058c"><td class="mdescLeft"> </td><td class="mdescRight">Get parent XML element, may be nullptr for root element. <br/></td></tr> +<tr class="separator:a7ba1f26be5629f89ba7648d658f7058c"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>An XML element. </p> -</div><hr/><h2>Member Function Documentation</h2> +</div><h2 class="groupheader">Member Function Documentation</h2> <a class="anchor" id="a653caffa6fad89db7d14f67f987ad0f9"></a> <div class="memitem"> <div class="memproto"> @@ -169,24 +170,23 @@ const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * < template<class String > </div> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="el" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a> </td> + <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>& zen::XmlElement::addChild </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Create a new child element and return a reference to it. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the child element to be created. </td></tr> </table> @@ -202,7 +202,7 @@ template<class String > </div> template<class String , class T > </div> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement::getAttribute</a> </td> + <td class="memname">bool zen::XmlElement::getAttribute </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em>, </td> @@ -219,25 +219,24 @@ template<class String , class T > </div> <td></td><td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Retrieve an attribute by name. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string class, all built-in arithmetic numbers </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the attribute to retrieve. </td></tr> <tr><td class="paramname">value</td><td>The value of the attribute converted to T. </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if value was retrieved successfully. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if value was retrieved successfully. </dd></dl> </div> </div> @@ -248,30 +247,29 @@ template<class String , class T > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a> </td> + <td class="memname">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* zen::XmlElement::getChild </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Retrieve a child element with the given name. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the child element to be retrieved. </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>A pointer to the child element or nullptr if none was found. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>A pointer to the child element or nullptr if none was found. </dd></dl> </div> </div> @@ -282,16 +280,15 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a> </td> + <td class="memname"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a>* zen::XmlElement::getChild </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a> </dd></dl> +</div><div class="memdoc"> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name. ">getChild</a> </dd></dl> </div> </div> @@ -302,27 +299,26 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">std::pair<ChildIterConst2, ChildIterConst2> <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td> + <td class="memname">std::pair<ChildIterConst2, ChildIterConst2> zen::XmlElement::getChildren </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Access all child elements with the given name via STL iterators. </p> -<div class="fragment"><pre class="fragment"> <span class="keyword">auto</span> iterPair = elem.getChildren(<span class="stringliteral">"Item"</span>); - std::for_each(iterPair.first, iterPair.second, - [](<span class="keyword">const</span> XmlElement& child) { ... }); -</pre></div> <dl class="params"><dt><b>Parameters:</b></dt><dd> +<div class="fragment"><div class="line"><span class="keyword">auto</span> iterPair = elem.getChildren(<span class="stringliteral">"Item"</span>);</div> +<div class="line">std::for_each(iterPair.first, iterPair.second,</div> +<div class="line"> [](<span class="keyword">const</span> XmlElement& child) { ... });</div> +</div><!-- fragment --> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the child elements to be retrieved. </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>A pair of STL begin/end iterators to access the child elements sequentially. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>A pair of STL begin/end iterators to access the child elements sequentially. </dd></dl> </div> </div> @@ -333,16 +329,15 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">std::pair<ChildIter2, ChildIter2> <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td> + <td class="memname">std::pair<ChildIter2, ChildIter2> zen::XmlElement::getChildren </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a> </dd></dl> +</div><div class="memdoc"> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators. ">getChildren</a> </dd></dl> </div> </div> @@ -351,20 +346,19 @@ template<class String > </div> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">std::pair<ChildIterConst, ChildIterConst> <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td> + <td class="memname">std::pair<ChildIterConst, ChildIterConst> zen::XmlElement::getChildren </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Access all child elements sequentially via STL iterators. </p> -<div class="fragment"><pre class="fragment"> <span class="keyword">auto</span> iterPair = elem.getChildren(); - std::for_each(iterPair.first, iterPair.second, - [](<span class="keyword">const</span> XmlElement& child) { ... }); -</pre></div> <dl class="section return"><dt>Returns:</dt><dd>A pair of STL begin/end iterators to access all child elements sequentially. </dd></dl> +<div class="fragment"><div class="line"><span class="keyword">auto</span> iterPair = elem.getChildren();</div> +<div class="line">std::for_each(iterPair.first, iterPair.second,</div> +<div class="line"> [](<span class="keyword">const</span> XmlElement& child) { ... });</div> +</div><!-- fragment --> <dl class="section return"><dt>Returns</dt><dd>A pair of STL begin/end iterators to access all child elements sequentially. </dd></dl> </div> </div> @@ -373,15 +367,14 @@ template<class String > </div> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">std::pair<ChildIter, ChildIter> <a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a> </td> + <td class="memname">std::pair<ChildIter, ChildIter> zen::XmlElement::getChildren </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a> </dd></dl> +</div><div class="memdoc"> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators. ">getChildren</a> </dd></dl> </div> </div> @@ -392,23 +385,22 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">String <a class="el" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement::getNameAs</a> </td> + <td class="memname">String zen::XmlElement::getNameAs </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Retrieve the name of this XML element. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>Name of the XML element. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Name of the XML element. </dd></dl> </div> </div> @@ -419,24 +411,23 @@ template<class String > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement::getValue</a> </td> + <td class="memname">bool zen::XmlElement::getValue </td> <td>(</td> <td class="paramtype">T & </td> <td class="paramname"><em>value</em></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Get the value of this element as a user type. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string class, all built-in arithmetic numbers, STL container, ... </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if Xml element was successfully converted to value, cannot fail for string-like types </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if Xml element was successfully converted to value, cannot fail for string-like types </dd></dl> </div> </div> @@ -447,19 +438,18 @@ template<class T > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement::removeAttribute</a> </td> + <td class="memname">void zen::XmlElement::removeAttribute </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Remove the attribute with the given name. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> @@ -474,7 +464,7 @@ template<class String > </div> template<class String , class T > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a> </td> + <td class="memname">void zen::XmlElement::setAttribute </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em>, </td> @@ -491,18 +481,17 @@ template<class String , class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Create or update an XML attribute. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the attribute to create or update. </td></tr> <tr><td class="paramname">value</td><td>The value to set. </td></tr> @@ -519,19 +508,18 @@ template<class String , class T > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement::setValue</a> </td> + <td class="memname">void zen::XmlElement::setValue </td> <td>(</td> <td class="paramtype">const T & </td> <td class="paramname"><em>value</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Set the value of this element. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">T</td><td>Arbitrary user data type: e.g. any string-like type, all built-in arithmetic numbers, STL container, ... </td></tr> </table> </dd> @@ -540,13 +528,11 @@ template<class T > </div> </div> </div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_in-members.html b/zenxml/doc/classzen_1_1_xml_in-members.html index 794b180d..56de270c 100644 --- a/zenxml/doc/classzen_1_1_xml_in-members.html +++ b/zenxml/doc/classzen_1_1_xml_in-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,38 +81,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlIn Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(const String &name, T &value) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>()</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a>() const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T &value) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(const String &name) const </td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(const XmlDoc &doc)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(const XmlElement *element)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(const XmlElement &element)</td><td><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a>(const String &name, T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a>() const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a>(T &value) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a>(const XmlDoc &doc)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a>(const XmlElement *element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a>(const XmlElement &element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_in.html b/zenxml/doc/classzen_1_1_xml_in.html index f1093061..15153347 100644 --- a/zenxml/doc/classzen_1_1_xml_in.html +++ b/zenxml/doc/classzen_1_1_xml_in.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlIn Class Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> </div> +<a href="#pub-methods">Public Member Functions</a> | +<a href="classzen_1_1_xml_in-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlIn Class Reference</div> </div> </div><!--header--> @@ -111,65 +99,73 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <a href="classzen_1_1_xml_in.html#details">More...</a></p> <p><code>#include <<a class="el" href="bind_8h_source.html">bind.h</a>></code></p> - -<p><a href="classzen_1_1_xml_in-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-methods"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:a5b48c9848e6c631a04cec2477ff85c0f"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:a5b48c9848e6c631a04cec2477ff85c0f"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for an XML document. <a href="#a5b48c9848e6c631a04cec2477ff85c0f"></a><br/></td></tr> +<tr class="memdesc:a5b48c9848e6c631a04cec2477ff85c0f"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for an XML document. <a href="#a5b48c9848e6c631a04cec2477ff85c0f">More...</a><br/></td></tr> +<tr class="separator:a5b48c9848e6c631a04cec2477ff85c0f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae072660cde71fd4695c04d074098b430"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> *element)</td></tr> -<tr class="memdesc:ae072660cde71fd4695c04d074098b430"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element, may be nullptr. <a href="#ae072660cde71fd4695c04d074098b430"></a><br/></td></tr> +<tr class="memdesc:ae072660cde71fd4695c04d074098b430"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element, may be nullptr. <a href="#ae072660cde71fd4695c04d074098b430">More...</a><br/></td></tr> +<tr class="separator:ae072660cde71fd4695c04d074098b430"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">XmlIn</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &element)</td></tr> -<tr class="memdesc:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element. <a href="#a33de75412df69cb25e0fd8b3bc70c9f8"></a><br/></td></tr> +<tr class="memdesc:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="mdescLeft"> </td><td class="mdescRight">Construct an input proxy for a single XML element. <a href="#a33de75412df69cb25e0fd8b3bc70c9f8">More...</a><br/></td></tr> +<tr class="separator:a33de75412df69cb25e0fd8b3bc70c9f8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a9b38167835a28eac9a2297f35f51e53d"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">operator[]</a> (const String &name) const </td></tr> -<tr class="memdesc:a9b38167835a28eac9a2297f35f51e53d"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for reading. <a href="#a9b38167835a28eac9a2297f35f51e53d"></a><br/></td></tr> +<tr class="memdesc:a9b38167835a28eac9a2297f35f51e53d"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for reading. <a href="#a9b38167835a28eac9a2297f35f51e53d">More...</a><br/></td></tr> +<tr class="separator:a9b38167835a28eac9a2297f35f51e53d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a60cf2678c989621545d27745dcafa4a4"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a> ()</td></tr> -<tr class="memdesc:a60cf2678c989621545d27745dcafa4a4"><td class="mdescLeft"> </td><td class="mdescRight">Refer to next sibling element with the same name. <a href="#a60cf2678c989621545d27745dcafa4a4"></a><br/></td></tr> +<tr class="memdesc:a60cf2678c989621545d27745dcafa4a4"><td class="mdescLeft"> </td><td class="mdescRight">Refer to next sibling element with the same name. <a href="#a60cf2678c989621545d27745dcafa4a4">More...</a><br/></td></tr> +<tr class="separator:a60cf2678c989621545d27745dcafa4a4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a98cc59f687c89549381e76105f8fb506"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">operator()</a> (T &value) const </td></tr> -<tr class="memdesc:a98cc59f687c89549381e76105f8fb506"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from the underlying XML element. <a href="#a98cc59f687c89549381e76105f8fb506"></a><br/></td></tr> +<tr class="memdesc:a98cc59f687c89549381e76105f8fb506"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from the underlying XML element. <a href="#a98cc59f687c89549381e76105f8fb506">More...</a><br/></td></tr> +<tr class="separator:a98cc59f687c89549381e76105f8fb506"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> <tr class="memitem:a971cd7054c551c4460d5220f6ec5cf01"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">attribute</a> (const String &name, T &value) const </td></tr> -<tr class="memdesc:a971cd7054c551c4460d5220f6ec5cf01"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from an XML attribute. <a href="#a971cd7054c551c4460d5220f6ec5cf01"></a><br/></td></tr> +<tr class="memdesc:a971cd7054c551c4460d5220f6ec5cf01"><td class="mdescLeft"> </td><td class="mdescRight">Read user data from an XML attribute. <a href="#a971cd7054c551c4460d5220f6ec5cf01">More...</a><br/></td></tr> +<tr class="separator:a971cd7054c551c4460d5220f6ec5cf01"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a647b468b7c6c95b25f2e43627184177f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a647b468b7c6c95b25f2e43627184177f"></a> const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f">get</a> () const </td></tr> <tr class="memdesc:a647b468b7c6c95b25f2e43627184177f"><td class="mdescLeft"> </td><td class="mdescRight">Return a pointer to the underlying Xml element, may be nullptr. <br/></td></tr> +<tr class="separator:a647b468b7c6c95b25f2e43627184177f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a954950849b52557369932ab2a8b4ad72"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">operator int ConversionToBool::*</a> () const </td></tr> -<tr class="memdesc:a954950849b52557369932ab2a8b4ad72"><td class="mdescLeft"> </td><td class="mdescRight">Test whether the underlying XML element exists. <a href="#a954950849b52557369932ab2a8b4ad72"></a><br/></td></tr> +<tr class="memdesc:a954950849b52557369932ab2a8b4ad72"><td class="mdescLeft"> </td><td class="mdescRight">Test whether the underlying XML element exists. <a href="#a954950849b52557369932ab2a8b4ad72">More...</a><br/></td></tr> +<tr class="separator:a954950849b52557369932ab2a8b4ad72"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a33b5dd504d3165aa3f923f6b33e9991a"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">errorsOccured</a> () const </td></tr> -<tr class="memdesc:a33b5dd504d3165aa3f923f6b33e9991a"><td class="mdescLeft"> </td><td class="mdescRight">Notifies errors while mapping the XML to user data. <a href="#a33b5dd504d3165aa3f923f6b33e9991a"></a><br/></td></tr> +<tr class="memdesc:a33b5dd504d3165aa3f923f6b33e9991a"><td class="mdescLeft"> </td><td class="mdescRight">Notifies errors while mapping the XML to user data. <a href="#a33b5dd504d3165aa3f923f6b33e9991a">More...</a><br/></td></tr> +<tr class="separator:a33b5dd504d3165aa3f923f6b33e9991a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a84bb497d3b3fc753d054e52c4823c05e"><td class="memTemplItemLeft" align="right" valign="top">std::vector< String > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">getErrorsAs</a> () const </td></tr> -<tr class="memdesc:a84bb497d3b3fc753d054e52c4823c05e"><td class="mdescLeft"> </td><td class="mdescRight">Get a list of XML element and attribute names which failed to convert to user data. <a href="#a84bb497d3b3fc753d054e52c4823c05e"></a><br/></td></tr> +<tr class="memdesc:a84bb497d3b3fc753d054e52c4823c05e"><td class="mdescLeft"> </td><td class="mdescRight">Get a list of XML element and attribute names which failed to convert to user data. <a href="#a84bb497d3b3fc753d054e52c4823c05e">More...</a><br/></td></tr> +<tr class="separator:a84bb497d3b3fc753d054e52c4823c05e"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Proxy class to conveniently convert XML structure to user data. </p> -</div><hr/><h2>Constructor & Destructor Documentation</h2> +</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a class="anchor" id="a5b48c9848e6c631a04cec2477ff85c0f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td> + <td class="memname">zen::XmlIn::XmlIn </td> <td>(</td> <td class="paramtype">const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> & </td> <td class="paramname"><em>doc</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Construct an input proxy for an XML document. </p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - ... <span class="comment">//load document</span> - <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); - in[<span class="stringliteral">"elem1"</span>](value1); <span class="comment">//</span> - in[<span class="stringliteral">"elem2"</span>](value2); <span class="comment">//read data from XML elements into variables "value1", "value2", "value3"</span> - in[<span class="stringliteral">"elem3"</span>](value3); <span class="comment">//</span> -</pre></div> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"> ... <span class="comment">//load document</span></div> +<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> +<div class="line">in[<span class="stringliteral">"elem1"</span>](value1); <span class="comment">//</span></div> +<div class="line">in[<span class="stringliteral">"elem2"</span>](value2); <span class="comment">//read data from XML elements into variables "value1", "value2", "value3"</span></div> +<div class="line">in[<span class="stringliteral">"elem3"</span>](value3); <span class="comment">//</span></div> +</div><!-- fragment --> </div> </div> <a class="anchor" id="ae072660cde71fd4695c04d074098b430"></a> @@ -177,18 +173,17 @@ const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * < <div class="memproto"> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td> + <td class="memname">zen::XmlIn::XmlIn </td> <td>(</td> <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * </td> <td class="paramname"><em>element</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Construct an input proxy for a single XML element, may be nullptr. </p> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn(const XmlDoc& doc)</a> </dd></dl> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document. ">XmlIn(const XmlDoc& doc)</a> </dd></dl> </div> </div> @@ -197,22 +192,21 @@ const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * < <div class="memproto"> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn::XmlIn</a> </td> + <td class="memname">zen::XmlIn::XmlIn </td> <td>(</td> <td class="paramtype">const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td> <td class="paramname"><em>element</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Construct an input proxy for a single XML element. </p> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn(const XmlDoc& doc)</a> </dd></dl> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document. ">XmlIn(const XmlDoc& doc)</a> </dd></dl> </div> </div> -<hr/><h2>Member Function Documentation</h2> +<h2 class="groupheader">Member Function Documentation</h2> <a class="anchor" id="a971cd7054c551c4460d5220f6ec5cf01"></a> <div class="memitem"> <div class="memproto"> @@ -220,7 +214,7 @@ const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> * < template<class String , class T > </div> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="classzen_1_1_xml_in.html#a971cd7054c551c4460d5220f6ec5cf01">zen::XmlIn::attribute</a> </td> + <td class="memname">bool zen::XmlIn::attribute </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em>, </td> @@ -237,26 +231,25 @@ template<class String , class T > </div> <td></td><td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Read user data from an XML attribute. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> for type T.</p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - ... <span class="comment">//load document</span> - <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); - in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, value1); <span class="comment">//</span> - in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, value2); <span class="comment">//read data from XML attributes into variables "value1", "value2", "value3"</span> - in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, value3); <span class="comment">//</span> -</pre></div><dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> for type T.</p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"> ... <span class="comment">//load document</span></div> +<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> +<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, value1); <span class="comment">//</span></div> +<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, value2); <span class="comment">//read data from XML attributes into variables "value1", "value2", "value3"</span></div> +<div class="line">in[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, value3); <span class="comment">//</span></div> +</div><!-- fragment --><dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if the attribute was found and the conversion to the output value was successful. </dd></dl> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name.">XmlElement::getAttribute()</a> </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if the attribute was found and the conversion to the output value was successful. </dd></dl> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name. ">XmlElement::getAttribute()</a> </dd></dl> </div> </div> @@ -265,28 +258,27 @@ template<class String , class T > </div> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="classzen_1_1_xml_in.html#a33b5dd504d3165aa3f923f6b33e9991a">zen::XmlIn::errorsOccured</a> </td> + <td class="memname">bool zen::XmlIn::errorsOccured </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Notifies errors while mapping the XML to user data. </p> -<p>Error logging is shared by each hiearchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxy instances that are created from each other. Consequently it doesn't matter which instance you query for errors: </p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> in(doc); - <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> inItem = in[<span class="stringliteral">"item1"</span>]; - - <span class="keywordtype">int</span> value = 0; - inItem(value); <span class="comment">//let's assume this conversion failed</span> - - assert(in.errorsOccured() == inItem.errorsOccured()); - assert(in.getErrorsAs<std::string>() == inItem.getErrorsAs<std::string>()); -</pre></div><p>Note that error logging is <b>NOT</b> global, but owned by all instances of a hierarchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxies. Therefore it's safe to use unrelated <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">XmlIn</a> proxies in multiple threads. <br/> +<p>Error logging is shared by each hiearchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxy instances that are created from each other. Consequently it doesn't matter which instance you query for errors: </p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> in(doc);</div> +<div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> inItem = in[<span class="stringliteral">"item1"</span>];</div> +<div class="line"></div> +<div class="line"><span class="keywordtype">int</span> value = 0;</div> +<div class="line">inItem(value); <span class="comment">//let's assume this conversion failed</span></div> +<div class="line"></div> +<div class="line">assert(in.errorsOccured() == inItem.errorsOccured());</div> +<div class="line">assert(in.getErrorsAs<std::string>() == inItem.getErrorsAs<std::string>());</div> +</div><!-- fragment --><p>Note that error logging is <b>NOT</b> global, but owned by all instances of a hierarchy of <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxies. Therefore it's safe to use unrelated <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">XmlIn</a> proxies in multiple threads. <br/> <br/> - However be aware that the chain of connected proxy instances will be broken once you call <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f" title="Return a pointer to the underlying Xml element, may be nullptr.">XmlIn::get()</a> to retrieve the underlying pointer. Errors that occur when working with this pointer are not logged by the original set of related instances. </p> + However be aware that the chain of connected proxy instances will be broken once you call <a class="el" href="classzen_1_1_xml_in.html#a647b468b7c6c95b25f2e43627184177f" title="Return a pointer to the underlying Xml element, may be nullptr. ">XmlIn::get()</a> to retrieve the underlying pointer. Errors that occur when working with this pointer are not logged by the original set of related instances. </p> </div> </div> @@ -297,23 +289,22 @@ template<class String , class T > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">std::vector<String> <a class="el" href="classzen_1_1_xml_in.html#a84bb497d3b3fc753d054e52c4823c05e">zen::XmlIn::getErrorsAs</a> </td> + <td class="memname">std::vector<String> zen::XmlIn::getErrorsAs </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Get a list of XML element and attribute names which failed to convert to user data. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string class: e.g. std::string, std::wstring, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>A list of XML element and attribute names, empty list if no errors occured. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>A list of XML element and attribute names, empty list if no errors occured. </dd></dl> </div> </div> @@ -322,29 +313,29 @@ template<class String > </div> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">zen::XmlIn::next</a> </td> + <td class="memname">void zen::XmlIn::next </td> <td>(</td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Refer to next sibling element with the same name. </p> <p><b>Example:</b> Loop over all XML child elements named "Item" </p> -<div class="fragment"><pre class="fragment"> <?xml version="1.0" encoding="UTF-8"?> - <Root> - <Item>1</Item> - <Item>3</Item> - <Item>5</Item> - </Root></pre></div><div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); - ... - <span class="keywordflow">for</span> (<a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> child = in[<span class="stringliteral">"Item"</span>]; child; child.<a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4" title="Refer to next sibling element with the same name.">next</a>()) - { - ... - } -</pre></div> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<Root> + <Item>1</Item> + <Item>3</Item> + <Item>5</Item> +</Root> +</pre><div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> +<div class="line">...</div> +<div class="line">for (<a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> child = in[<span class="stringliteral">"Item"</span>]; child; child.<a class="code" href="classzen_1_1_xml_in.html#a60cf2678c989621545d27745dcafa4a4">next</a>())</div> +<div class="line">{</div> +<div class="line"> ...</div> +<div class="line">}</div> +</div><!-- fragment --> </div> </div> <a class="anchor" id="a954950849b52557369932ab2a8b4ad72"></a> @@ -358,15 +349,14 @@ template<class String > </div> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Test whether the underlying XML element exists. </p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> in(doc); - <a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f" title="Construct an input proxy for an XML document.">XmlIn</a> child = in[<span class="stringliteral">"elem1"</span>]; - <span class="keywordflow">if</span> (child) - ... -</pre></div><p> Use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) </p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> in(doc);</div> +<div class="line"><a class="code" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">XmlIn</a> child = in[<span class="stringliteral">"elem1"</span>];</div> +<div class="line"><span class="keywordflow">if</span> (child)</div> +<div class="line"> ...</div> +</div><!-- fragment --><p> Use member pointer as implicit conversion to bool (C++ Templates - Vandevoorde/Josuttis; chapter 20) </p> </div> </div> @@ -384,18 +374,17 @@ template<class T > </div> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Read user data from the underlying XML element. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> for type T. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> for type T. </p> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">T</td><td>User type that receives the data </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if data was read successfully </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if data was read successfully </dd></dl> </div> </div> @@ -413,18 +402,17 @@ template<class String > </div> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Retrieve a handle to an XML child element for reading. </p> <p>It is <b>not</b> an error if the child element does not exist, but only later if a conversion to user data is attempted. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the child element </td></tr> </table> @@ -434,13 +422,11 @@ template<class String > </div> </div> </div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_out-members.html b/zenxml/doc/classzen_1_1_xml_out-members.html index 368b094f..0bcc8777 100644 --- a/zenxml/doc/classzen_1_1_xml_out-members.html +++ b/zenxml/doc/classzen_1_1_xml_out-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,33 +81,31 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlOut Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(const String &name, const T &value)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(const T &value)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(const String &name) const </td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>()</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(XmlDoc &doc)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(XmlElement &element)</td><td><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a>(const String &name, const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a>(const T &value)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a>(const String &name) const </td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a>()</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> + <tr class="even"><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a>(XmlDoc &doc)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a>(XmlElement &element)</td><td class="entry"><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/classzen_1_1_xml_out.html b/zenxml/doc/classzen_1_1_xml_out.html index e7fea1d5..33434c67 100644 --- a/zenxml/doc/classzen_1_1_xml_out.html +++ b/zenxml/doc/classzen_1_1_xml_out.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlOut Class Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-methods">Public Member Functions</a> </div> +<a href="#pub-methods">Public Member Functions</a> | +<a href="classzen_1_1_xml_out-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlOut Class Reference</div> </div> </div><!--header--> @@ -111,62 +99,66 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <a href="classzen_1_1_xml_out.html#details">More...</a></p> <p><code>#include <<a class="el" href="bind_8h_source.html">bind.h</a>></code></p> - -<p><a href="classzen_1_1_xml_out-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-methods"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">XmlOut</a> (<a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for an XML document. <a href="#ad8b1ccb8f3d4e7b0ab2598597ea50bcc"></a><br/></td></tr> +<tr class="memdesc:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for an XML document. <a href="#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">More...</a><br/></td></tr> +<tr class="separator:ad8b1ccb8f3d4e7b0ab2598597ea50bcc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa80be3a56f70a58d2730a763166088c0"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">XmlOut</a> (<a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &element)</td></tr> -<tr class="memdesc:aa80be3a56f70a58d2730a763166088c0"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for a single XML element. <a href="#aa80be3a56f70a58d2730a763166088c0"></a><br/></td></tr> +<tr class="memdesc:aa80be3a56f70a58d2730a763166088c0"><td class="mdescLeft"> </td><td class="mdescRight">Construct an output proxy for a single XML element. <a href="#aa80be3a56f70a58d2730a763166088c0">More...</a><br/></td></tr> +<tr class="separator:aa80be3a56f70a58d2730a763166088c0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a00f883d3f9d60535b06b5ae609dc8831"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">operator[]</a> (const String &name) const </td></tr> -<tr class="memdesc:a00f883d3f9d60535b06b5ae609dc8831"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for writing. <a href="#a00f883d3f9d60535b06b5ae609dc8831"></a><br/></td></tr> +<tr class="memdesc:a00f883d3f9d60535b06b5ae609dc8831"><td class="mdescLeft"> </td><td class="mdescRight">Retrieve a handle to an XML child element for writing. <a href="#a00f883d3f9d60535b06b5ae609dc8831">More...</a><br/></td></tr> +<tr class="separator:a00f883d3f9d60535b06b5ae609dc8831"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a09ca9144515e3c109b36062b0475c8eb"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">operator()</a> (const T &value)</td></tr> -<tr class="memdesc:a09ca9144515e3c109b36062b0475c8eb"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to the underlying XML element. <a href="#a09ca9144515e3c109b36062b0475c8eb"></a><br/></td></tr> +<tr class="memdesc:a09ca9144515e3c109b36062b0475c8eb"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to the underlying XML element. <a href="#a09ca9144515e3c109b36062b0475c8eb">More...</a><br/></td></tr> +<tr class="separator:a09ca9144515e3c109b36062b0475c8eb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplParams" colspan="2">template<class String , class T > </td></tr> <tr class="memitem:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">attribute</a> (const String &name, const T &value)</td></tr> -<tr class="memdesc:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to an XML attribute. <a href="#acaf9b71fe1d907dd63dd4b91e2e03805"></a><br/></td></tr> +<tr class="memdesc:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="mdescLeft"> </td><td class="mdescRight">Write user data to an XML attribute. <a href="#acaf9b71fe1d907dd63dd4b91e2e03805">More...</a><br/></td></tr> +<tr class="separator:acaf9b71fe1d907dd63dd4b91e2e03805"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aec117344e8a534382e8d5e76711f97b2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aec117344e8a534382e8d5e76711f97b2"></a> <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html#aec117344e8a534382e8d5e76711f97b2">ref</a> ()</td></tr> <tr class="memdesc:aec117344e8a534382e8d5e76711f97b2"><td class="mdescLeft"> </td><td class="mdescRight">Return a reference to the underlying Xml element. <br/></td></tr> +<tr class="separator:aec117344e8a534382e8d5e76711f97b2"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Proxy class to conveniently convert user data into XML structure. </p> -</div><hr/><h2>Constructor & Destructor Documentation</h2> +</div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a class="anchor" id="ad8b1ccb8f3d4e7b0ab2598597ea50bcc"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a> </td> + <td class="memname">zen::XmlOut::XmlOut </td> <td>(</td> <td class="paramtype"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> & </td> <td class="paramname"><em>doc</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Construct an output proxy for an XML document. </p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - - <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); - out[<span class="stringliteral">"elem1"</span>]( 1); <span class="comment">//</span> - out[<span class="stringliteral">"elem2"</span>]( 2); <span class="comment">//write data into XML elements</span> - out[<span class="stringliteral">"elem3"</span>](-3); <span class="comment">//</span> - - <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span> -</pre></div><p> Output: </p> -<div class="fragment"><pre class="fragment"> <?xml version="1.0" encoding="UTF-8"?> - <Root> - <elem1>1</elem1> - <elem2>2</elem2> - <elem3>-3</elem3> - </Root></pre></div> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[<span class="stringliteral">"elem1"</span>]( 1); <span class="comment">//</span></div> +<div class="line">out[<span class="stringliteral">"elem2"</span>]( 2); <span class="comment">//write data into XML elements</span></div> +<div class="line">out[<span class="stringliteral">"elem3"</span>](-3); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +</div><!-- fragment --><p> Output: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<Root> + <elem1>1</elem1> + <elem2>2</elem2> + <elem3>-3</elem3> +</Root> +</pre> </div> </div> <a class="anchor" id="aa80be3a56f70a58d2730a763166088c0"></a> @@ -174,22 +166,21 @@ Public Member Functions</h2></td></tr> <div class="memproto"> <table class="memname"> <tr> - <td class="memname"><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc">zen::XmlOut::XmlOut</a> </td> + <td class="memname">zen::XmlOut::XmlOut </td> <td>(</td> <td class="paramtype"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> & </td> <td class="paramname"><em>element</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Construct an output proxy for a single XML element. </p> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document.">XmlOut(XmlDoc& doc)</a> </dd></dl> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_out.html#ad8b1ccb8f3d4e7b0ab2598597ea50bcc" title="Construct an output proxy for an XML document. ">XmlOut(XmlDoc& doc)</a> </dd></dl> </div> </div> -<hr/><h2>Member Function Documentation</h2> +<h2 class="groupheader">Member Function Documentation</h2> <a class="anchor" id="acaf9b71fe1d907dd63dd4b91e2e03805"></a> <div class="memitem"> <div class="memproto"> @@ -197,7 +188,7 @@ Public Member Functions</h2></td></tr> template<class String , class T > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="classzen_1_1_xml_out.html#acaf9b71fe1d907dd63dd4b91e2e03805">zen::XmlOut::attribute</a> </td> + <td class="memname">void zen::XmlOut::attribute </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>name</em>, </td> @@ -214,31 +205,30 @@ template<class String , class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Write user data to an XML attribute. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> for type T. </p> -<div class="fragment"><pre class="fragment"> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - - <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); - out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, 1); <span class="comment">//</span> - out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2); <span class="comment">//write data into XML attributes</span> - out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, -3); <span class="comment">//</span> - - <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span> -</pre></div><p> Output: </p> -<div class="fragment"><pre class="fragment"> <?xml version="1.0" encoding="UTF-8"?> - <Root> - <elem attr1="1" attr2="2" attr3="-3"/> - </Root></pre></div><dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> for type T. </p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, 1); <span class="comment">//</span></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2); <span class="comment">//write data into XML attributes</span></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, -3); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"out.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +</div><!-- fragment --><p> Output: </p> +<pre class="fragment"> <?xml version="1.0" encoding="UTF-8"?> + <Root> + <elem attr1="1" attr2="2" attr3="-3"/> + </Root></pre><dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> <tr><td class="paramname">T</td><td>String-convertible user data type: e.g. any string-like type, all built-in arithmetic numbers </td></tr> </table> </dd> </dl> -<dl class="section see"><dt>See also:</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">XmlElement::setAttribute()</a> </dd></dl> +<dl class="section see"><dt>See Also</dt><dd><a class="el" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute. ">XmlElement::setAttribute()</a> </dd></dl> </div> </div> @@ -256,13 +246,12 @@ template<class T > </div> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Write user data to the underlying XML element. </p> -<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> or <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a> for type T. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>This conversion requires a specialization of <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> or <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a> for type T. </p> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">T</td><td>User type that is converted into an XML element value. </td></tr> </table> </dd> @@ -284,18 +273,17 @@ template<class String > </div> <td> const</td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Retrieve a handle to an XML child element for writing. </p> <p>The child element will be created if it is not yet existing. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">name</td><td>The name of the child element </td></tr> </table> @@ -305,13 +293,11 @@ template<class String > </div> </div> </div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/closed.png b/zenxml/doc/closed.png Binary files differindex b7d4bd9f..98cc2c90 100644 --- a/zenxml/doc/closed.png +++ b/zenxml/doc/closed.png diff --git a/zenxml/doc/cvrt__struc_8h_source.html b/zenxml/doc/cvrt__struc_8h_source.html index 6bd4e7af..2a229c26 100644 --- a/zenxml/doc/cvrt__struc_8h_source.html +++ b/zenxml/doc/cvrt__struc_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: cvrt_struc.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,216 +73,223 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">cvrt_struc.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include "dom.h"</span> -<a name="l00011"></a>00011 -<a name="l00012"></a>00012 <span class="keyword">namespace </span>zen -<a name="l00013"></a>00013 { -<a name="l00020"></a>00020 -<a name="l00021"></a>00021 -<a name="l00026"></a>00026 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value); -<a name="l00028"></a>00028 -<a name="l00032"></a>00032 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output); -<a name="l00033"></a>00033 -<a name="l00034"></a>00034 -<a name="l00035"></a>00035 -<a name="l00036"></a>00036 -<a name="l00037"></a>00037 -<a name="l00038"></a>00038 -<a name="l00039"></a>00039 -<a name="l00040"></a>00040 -<a name="l00041"></a>00041 -<a name="l00042"></a>00042 -<a name="l00043"></a>00043 -<a name="l00044"></a>00044 -<a name="l00045"></a>00045 -<a name="l00046"></a>00046 -<a name="l00047"></a>00047 -<a name="l00048"></a>00048 -<a name="l00049"></a>00049 -<a name="l00050"></a>00050 <span class="comment">//------------------------------ implementation -------------------------------------</span> -<a name="l00051"></a>00051 <span class="keyword">namespace </span>impl_2384343 -<a name="l00052"></a>00052 { -<a name="l00053"></a>00053 ZEN_INIT_DETECT_MEMBER_TYPE(value_type); -<a name="l00054"></a>00054 ZEN_INIT_DETECT_MEMBER_TYPE(iterator); -<a name="l00055"></a>00055 ZEN_INIT_DETECT_MEMBER_TYPE(const_iterator); -<a name="l00056"></a>00056 -<a name="l00057"></a>00057 ZEN_INIT_DETECT_MEMBER(begin) <span class="comment">//</span> -<a name="l00058"></a>00058 ZEN_INIT_DETECT_MEMBER(end) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span> -<a name="l00059"></a>00059 ZEN_INIT_DETECT_MEMBER(insert) <span class="comment">//</span> -<a name="l00060"></a>00060 } -<a name="l00061"></a>00061 -<a name="l00062"></a>00062 template <typename T> -<a name="l00063"></a>00063 struct IsStlContainer : -<a name="l00064"></a>00064 StaticBool< -<a name="l00065"></a>00065 impl_2384343::HasMemberType_value_type <T>::value&& -<a name="l00066"></a>00066 impl_2384343::HasMemberType_iterator <T>::value&& -<a name="l00067"></a>00067 impl_2384343::HasMemberType_const_iterator<T>::value&& -<a name="l00068"></a>00068 impl_2384343::HasMember_begin <T>::value&& -<a name="l00069"></a>00069 impl_2384343::HasMember_end <T>::value&& -<a name="l00070"></a>00070 impl_2384343::HasMember_insert <T>::value> {}; -<a name="l00071"></a>00071 -<a name="l00072"></a>00072 -<a name="l00073"></a>00073 <span class="keyword">namespace </span>impl_2384343 -<a name="l00074"></a>00074 { -<a name="l00075"></a>00075 ZEN_INIT_DETECT_MEMBER_TYPE(first_type); -<a name="l00076"></a>00076 ZEN_INIT_DETECT_MEMBER_TYPE(second_type); -<a name="l00077"></a>00077 -<a name="l00078"></a>00078 ZEN_INIT_DETECT_MEMBER(first) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span> -<a name="l00079"></a>00079 ZEN_INIT_DETECT_MEMBER(second) <span class="comment">//</span> -<a name="l00080"></a>00080 } -<a name="l00081"></a>00081 -<a name="l00082"></a>00082 template <typename T> -<a name="l00083"></a>00083 struct IsStlPair : -<a name="l00084"></a>00084 StaticBool< -<a name="l00085"></a>00085 impl_2384343::HasMemberType_first_type <T>::value&& -<a name="l00086"></a>00086 impl_2384343::HasMemberType_second_type<T>::value&& -<a name="l00087"></a>00087 impl_2384343::HasMember_first <T>::value&& -<a name="l00088"></a>00088 impl_2384343::HasMember_second <T>::value> {}; -<a name="l00089"></a>00089 -<a name="l00090"></a>00090 <span class="comment">//######################################################################################</span> -<a name="l00091"></a>00091 -<a name="l00092"></a>00092 <span class="comment">//Conversion from arbitrary types to an XML element</span> -<a name="l00093"></a>00093 <span class="keyword">enum</span> ValueType -<a name="l00094"></a>00094 { -<a name="l00095"></a>00095 VALUE_TYPE_STL_CONTAINER, -<a name="l00096"></a>00096 VALUE_TYPE_STL_PAIR, -<a name="l00097"></a>00097 VALUE_TYPE_OTHER, -<a name="l00098"></a>00098 }; -<a name="l00099"></a>00099 -<a name="l00100"></a>00100 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00101"></a>00101 <span class="keyword">struct </span>GetValueType : StaticEnum<ValueType, -<a name="l00102"></a>00102 GetTextType<T>::value != TEXT_TYPE_OTHER ? VALUE_TYPE_OTHER : <span class="comment">//some string classes are also STL containers, so check this first</span> -<a name="l00103"></a>00103 IsStlContainer<T>::value ? VALUE_TYPE_STL_CONTAINER : -<a name="l00104"></a>00104 IsStlPair<T>::value ? VALUE_TYPE_STL_PAIR : -<a name="l00105"></a>00105 VALUE_TYPE_OTHER> {}; -<a name="l00106"></a>00106 -<a name="l00107"></a>00107 -<a name="l00108"></a>00108 <span class="keyword">template</span> <<span class="keyword">class</span> T, ValueType type> -<a name="l00109"></a>00109 <span class="keyword">struct </span>ConvertElement; -<a name="l00110"></a>00110 <span class="comment">/* -> expected interface</span> -<a name="l00111"></a>00111 <span class="comment">{</span> -<a name="l00112"></a>00112 <span class="comment"> void writeStruc(const T& value, XmlElement& output) const;</span> -<a name="l00113"></a>00113 <span class="comment"> bool readStruc(const XmlElement& input, T& value) const;</span> -<a name="l00114"></a>00114 <span class="comment">};</span> -<a name="l00115"></a>00115 <span class="comment">*/</span> -<a name="l00116"></a>00116 -<a name="l00117"></a>00117 -<a name="l00118"></a>00118 <span class="comment">//partial specialization: handle conversion for all STL-container types!</span> -<a name="l00119"></a>00119 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00120"></a>00120 <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_CONTAINER> -<a name="l00121"></a>00121 { -<a name="l00122"></a>00122 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span> -<a name="l00123"></a>00123 <span class="keyword"> </span>{ -<a name="l00124"></a>00124 std::for_each(value.begin(), value.end(), -<a name="l00125"></a>00125 [&](<span class="keyword">const</span> <span class="keyword">typename</span> T::value_type & childVal) -<a name="l00126"></a>00126 { -<a name="l00127"></a>00127 XmlElement& newChild = output.addChild(<span class="stringliteral">"Item"</span>); -<a name="l00128"></a>00128 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(childVal, newChild); -<a name="l00129"></a>00129 }); -<a name="l00130"></a>00130 } -<a name="l00131"></a>00131 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span> -<a name="l00132"></a>00132 <span class="keyword"> </span>{ -<a name="l00133"></a>00133 <span class="keywordtype">bool</span> success = <span class="keyword">true</span>; -<a name="l00134"></a>00134 value.clear(); -<a name="l00135"></a>00135 -<a name="l00136"></a>00136 <span class="keyword">auto</span> iterPair = input.getChildren(<span class="stringliteral">"Item"</span>); -<a name="l00137"></a>00137 <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = iterPair.first; iter != iterPair.second; ++iter) -<a name="l00138"></a>00138 { -<a name="l00139"></a>00139 <span class="keyword">typename</span> T::value_type childVal; <span class="comment">//MSVC 2010 bug: cannot put this into a lambda body</span> -<a name="l00140"></a>00140 <span class="keywordflow">if</span> (<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*iter, childVal)) -<a name="l00141"></a>00141 value.insert(value.end(), childVal); -<a name="l00142"></a>00142 <span class="keywordflow">else</span> -<a name="l00143"></a>00143 success = <span class="keyword">false</span>; -<a name="l00144"></a>00144 } -<a name="l00145"></a>00145 <span class="keywordflow">return</span> success; -<a name="l00146"></a>00146 } -<a name="l00147"></a>00147 }; -<a name="l00148"></a>00148 -<a name="l00149"></a>00149 -<a name="l00150"></a>00150 <span class="comment">//partial specialization: handle conversion for std::pair</span> -<a name="l00151"></a>00151 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00152"></a>00152 <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_PAIR> -<a name="l00153"></a>00153 { -<a name="l00154"></a>00154 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span> -<a name="l00155"></a>00155 <span class="keyword"> </span>{ -<a name="l00156"></a>00156 XmlElement& child1 = output.addChild(<span class="stringliteral">"one"</span>); <span class="comment">//don't use "1st/2nd", this will confuse a few pedantic XML parsers</span> -<a name="l00157"></a>00157 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(value.first, child1); -<a name="l00158"></a>00158 -<a name="l00159"></a>00159 XmlElement& child2 = output.addChild(<span class="stringliteral">"two"</span>); -<a name="l00160"></a>00160 <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc</a>(value.second, child2); -<a name="l00161"></a>00161 } -<a name="l00162"></a>00162 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span> -<a name="l00163"></a>00163 <span class="keyword"> </span>{ -<a name="l00164"></a>00164 <span class="keywordtype">bool</span> success = <span class="keyword">true</span>; -<a name="l00165"></a>00165 <span class="keyword">const</span> XmlElement* child1 = input.getChild(<span class="stringliteral">"one"</span>); -<a name="l00166"></a>00166 <span class="keywordflow">if</span> (!child1 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*child1, value.first)) -<a name="l00167"></a>00167 success = <span class="keyword">false</span>; -<a name="l00168"></a>00168 -<a name="l00169"></a>00169 <span class="keyword">const</span> XmlElement* child2 = input.getChild(<span class="stringliteral">"two"</span>); -<a name="l00170"></a>00170 <span class="keywordflow">if</span> (!child2 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc</a>(*child2, value.second)) -<a name="l00171"></a>00171 success = <span class="keyword">false</span>; -<a name="l00172"></a>00172 -<a name="l00173"></a>00173 <span class="keywordflow">return</span> success; -<a name="l00174"></a>00174 } -<a name="l00175"></a>00175 }; -<a name="l00176"></a>00176 -<a name="l00177"></a>00177 -<a name="l00178"></a>00178 <span class="comment">//partial specialization: not a pure structured type, try text conversion (thereby respect user specializations of writeText()/readText())</span> -<a name="l00179"></a>00179 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00180"></a>00180 <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_OTHER> -<a name="l00181"></a>00181 { -<a name="l00182"></a>00182 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span> -<a name="l00183"></a>00183 <span class="keyword"> </span>{ -<a name="l00184"></a>00184 std::string tmp; -<a name="l00185"></a>00185 <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, tmp); -<a name="l00186"></a>00186 output.setValue(tmp); -<a name="l00187"></a>00187 } -<a name="l00188"></a>00188 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span> -<a name="l00189"></a>00189 <span class="keyword"> </span>{ -<a name="l00190"></a>00190 std::string rawStr; -<a name="l00191"></a>00191 input.getValue(rawStr); -<a name="l00192"></a>00192 <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(rawStr, value); -<a name="l00193"></a>00193 } -<a name="l00194"></a>00194 }; -<a name="l00195"></a>00195 -<a name="l00196"></a>00196 -<a name="l00197"></a>00197 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span> -<a name="l00198"></a><a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">00198</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> T& value, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& output) -<a name="l00199"></a>00199 { -<a name="l00200"></a>00200 ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, output); -<a name="l00201"></a>00201 } -<a name="l00202"></a>00202 -<a name="l00203"></a>00203 -<a name="l00204"></a>00204 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span> -<a name="l00205"></a><a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">00205</a> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& input, T& value) -<a name="l00206"></a>00206 { -<a name="l00207"></a>00207 <span class="keywordflow">return</span> ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(input, value); -<a name="l00208"></a>00208 } -<a name="l00209"></a>00209 } -<a name="l00210"></a>00210 -<a name="l00211"></a>00211 <span class="preprocessor">#endif //ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "dom.h"</span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> {</div> +<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value);</div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output);</div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div> +<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">//------------------------------ implementation -------------------------------------</span></div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">namespace </span>impl_2384343</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> ZEN_INIT_DETECT_MEMBER_TYPE(value_type);</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> ZEN_INIT_DETECT_MEMBER_TYPE(iterator);</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> ZEN_INIT_DETECT_MEMBER_TYPE(const_iterator);</div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> ZEN_INIT_DETECT_MEMBER(begin) <span class="comment">//</span></div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> ZEN_INIT_DETECT_MEMBER(end) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span></div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> ZEN_INIT_DETECT_MEMBER(insert) <span class="comment">//</span></div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> }</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> template <typename T></div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> struct IsStlContainer :</div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  StaticBool<</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  impl_2384343::HasMemberType_value_type <T>::value&&</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  impl_2384343::HasMemberType_iterator <T>::value&&</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  impl_2384343::HasMemberType_const_iterator<T>::value&&</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  impl_2384343::HasMember_begin <T>::value&&</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  impl_2384343::HasMember_end <T>::value&&</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  impl_2384343::HasMember_insert <T>::value> {};</div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">namespace </span>impl_2384343</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> ZEN_INIT_DETECT_MEMBER_TYPE(first_type);</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> ZEN_INIT_DETECT_MEMBER_TYPE(second_type);</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> ZEN_INIT_DETECT_MEMBER(first) <span class="comment">//we don't know the exact declaration of the member attribute: may be in a base class!</span></div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> ZEN_INIT_DETECT_MEMBER(second) <span class="comment">//</span></div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> template <typename T></div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> struct IsStlPair :</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  StaticBool<</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  impl_2384343::HasMemberType_first_type <T>::value&&</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  impl_2384343::HasMemberType_second_type<T>::value&&</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  impl_2384343::HasMember_first <T>::value&&</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  impl_2384343::HasMember_second <T>::value> {};</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">//######################################################################################</span></div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">//Conversion from arbitrary types to an XML element</span></div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">enum</span> ValueType</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  VALUE_TYPE_STL_CONTAINER,</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  VALUE_TYPE_STL_PAIR,</div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  VALUE_TYPE_OTHER,</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> };</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="keyword">struct </span>GetValueType : StaticEnum<ValueType,</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  GetTextType<T>::value != TEXT_TYPE_OTHER ? VALUE_TYPE_OTHER : <span class="comment">//some string classes are also STL containers, so check this first</span></div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  IsStlContainer<T>::value ? VALUE_TYPE_STL_CONTAINER :</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  IsStlPair<T>::value ? VALUE_TYPE_STL_PAIR :</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  VALUE_TYPE_OTHER> {};</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">template</span> <<span class="keyword">class</span> T, ValueType type></div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">struct </span>ConvertElement;</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">/* -> expected interface</span></div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">{</span></div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> void writeStruc(const T& value, XmlElement& output) const;</span></div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> bool readStruc(const XmlElement& input, T& value) const;</span></div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">};</span></div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">*/</span></div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//partial specialization: handle conversion for all STL-container types!</span></div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_CONTAINER></div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> {</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  std::for_each(value.begin(), value.end(),</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  [&](<span class="keyword">const</span> <span class="keyword">typename</span> T::value_type & childVal)</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  XmlElement& newChild = output.addChild(<span class="stringliteral">"Item"</span>);</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(childVal, newChild);</div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  });</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  value.clear();</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">auto</span> iterPair = input.getChildren(<span class="stringliteral">"Item"</span>);</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = iterPair.first; iter != iterPair.second; ++iter)</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keyword">typename</span> T::value_type childVal; <span class="comment">//MSVC 2010 bug: cannot put this into a lambda body</span></div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*iter, childVal))</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  value.insert(value.end(), childVal);</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  success = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> success;</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> };</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment">//partial specialization: handle conversion for std::pair</span></div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_STL_PAIR></div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> {</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  XmlElement& child1 = output.addChild(<span class="stringliteral">"one"</span>); <span class="comment">//don't use "1st/2nd", this will confuse a few pedantic XML parsers</span></div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(value.first, child1);</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  XmlElement& child2 = output.addChild(<span class="stringliteral">"two"</span>);</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a>(value.second, child2);</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keyword">const</span> XmlElement* child1 = input.getChild(<span class="stringliteral">"one"</span>);</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (!child1 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*child1, value.first))</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  success = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">const</span> XmlElement* child2 = input.getChild(<span class="stringliteral">"two"</span>);</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (!child2 || !<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a>(*child2, value.second))</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  success = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> success;</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> };</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">//partial specialization: not a pure structured type, try text conversion (thereby respect user specializations of writeText()/readText())</span></div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="keyword">struct </span>ConvertElement<T, VALUE_TYPE_OTHER></div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> {</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, XmlElement& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  std::string tmp;</div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, tmp);</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  output.setValue(tmp);</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  }</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  std::string rawStr;</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  input.getValue(rawStr);</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(rawStr, value);</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> };</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> +<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6"> 198</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> T& value, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& output)</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> {</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, output);</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> }</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> +<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1"> 205</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& input, T& value)</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">return</span> ConvertElement<T, GetValueType<T>::value>().<a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(input, value);</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> }</div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> }</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor">#endif //ZEN_XML_CONVERT_STRUC_HEADER_018727409908342709743</span></div> +<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> +<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> +<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> +<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/cvrt__text_8h_source.html b/zenxml/doc/cvrt__text_8h_source.html index d10a3b8f..707264ae 100644 --- a/zenxml/doc/cvrt__text_8h_source.html +++ b/zenxml/doc/cvrt__text_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: cvrt_text.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,187 +73,191 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">cvrt_text.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include <zen/utf.h></span> -<a name="l00011"></a>00011 <span class="preprocessor">#include <zen/string_tools.h></span> -<a name="l00012"></a>00012 -<a name="l00013"></a>00013 <span class="keyword">namespace </span>zen -<a name="l00014"></a>00014 { -<a name="l00061"></a>00061 -<a name="l00062"></a>00062 -<a name="l00067"></a>00067 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, T& value); -<a name="l00069"></a>00069 -<a name="l00073"></a>00073 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T& value, std::string& output); -<a name="l00074"></a>00074 -<a name="l00075"></a>00075 -<a name="l00076"></a>00076 <span class="comment">/* Different classes of data types:</span> -<a name="l00077"></a>00077 <span class="comment"></span> -<a name="l00078"></a>00078 <span class="comment">-----------------------------</span> -<a name="l00079"></a>00079 <span class="comment">| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types</span> -<a name="l00080"></a>00080 <span class="comment">| ------------------------- |</span> -<a name="l00081"></a>00081 <span class="comment">| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool</span> -<a name="l00082"></a>00082 <span class="comment">| | --------------- | |</span> -<a name="l00083"></a>00083 <span class="comment">| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</span> -<a name="l00084"></a>00084 <span class="comment">| | --------------- | |</span> -<a name="l00085"></a>00085 <span class="comment">| ------------------------- |</span> -<a name="l00086"></a>00086 <span class="comment">-----------------------------</span> -<a name="l00087"></a>00087 <span class="comment">*/</span> -<a name="l00088"></a>00088 -<a name="l00089"></a>00089 -<a name="l00090"></a>00090 -<a name="l00091"></a>00091 -<a name="l00092"></a>00092 -<a name="l00093"></a>00093 -<a name="l00094"></a>00094 -<a name="l00095"></a>00095 -<a name="l00096"></a>00096 -<a name="l00097"></a>00097 -<a name="l00098"></a>00098 -<a name="l00099"></a>00099 -<a name="l00100"></a>00100 -<a name="l00101"></a>00101 -<a name="l00102"></a>00102 -<a name="l00103"></a>00103 <span class="comment">//------------------------------ implementation -------------------------------------</span> -<a name="l00104"></a>00104 -<a name="l00105"></a>00105 <span class="comment">//Conversion from arbitrary types to text (for use with XML elements and attributes)</span> -<a name="l00106"></a>00106 <span class="keyword">enum</span> TextType -<a name="l00107"></a>00107 { -<a name="l00108"></a>00108 TEXT_TYPE_BOOL, -<a name="l00109"></a>00109 TEXT_TYPE_NUMBER, -<a name="l00110"></a>00110 TEXT_TYPE_STRING, -<a name="l00111"></a>00111 TEXT_TYPE_OTHER, -<a name="l00112"></a>00112 }; -<a name="l00113"></a>00113 -<a name="l00114"></a>00114 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00115"></a>00115 <span class="keyword">struct </span>GetTextType : StaticEnum<TextType, -<a name="l00116"></a>00116 IsSameType<T, bool>::value ? TEXT_TYPE_BOOL : -<a name="l00117"></a>00117 IsStringLike<T>::value ? TEXT_TYPE_STRING : <span class="comment">//string before number to correctly handle char/wchar_t -> this was an issue with Loki only!</span> -<a name="l00118"></a>00118 IsArithmetic<T>::value ? TEXT_TYPE_NUMBER : <span class="comment">//</span> -<a name="l00119"></a>00119 TEXT_TYPE_OTHER> {}; -<a name="l00120"></a>00120 -<a name="l00121"></a>00121 <span class="comment">//######################################################################################</span> -<a name="l00122"></a>00122 -<a name="l00123"></a>00123 <span class="keyword">template</span> <<span class="keyword">class</span> T, TextType type> -<a name="l00124"></a>00124 <span class="keyword">struct </span>ConvertText; -<a name="l00125"></a>00125 <span class="comment">/* -> expected interface</span> -<a name="l00126"></a>00126 <span class="comment">{</span> -<a name="l00127"></a>00127 <span class="comment"> void writeText(const T& value, std::string& output) const;</span> -<a name="l00128"></a>00128 <span class="comment"> bool readText(const std::string& input, T& value) const;</span> -<a name="l00129"></a>00129 <span class="comment">};</span> -<a name="l00130"></a>00130 <span class="comment">*/</span> -<a name="l00131"></a>00131 -<a name="l00132"></a>00132 <span class="comment">//partial specialization: type bool</span> -<a name="l00133"></a>00133 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00134"></a>00134 <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_BOOL> -<a name="l00135"></a>00135 { -<a name="l00136"></a>00136 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keywordtype">bool</span> value, std::string& output)<span class="keyword"> const</span> -<a name="l00137"></a>00137 <span class="keyword"> </span>{ -<a name="l00138"></a>00138 output = value ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>; -<a name="l00139"></a>00139 } -<a name="l00140"></a>00140 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, <span class="keywordtype">bool</span>& value)<span class="keyword"> const</span> -<a name="l00141"></a>00141 <span class="keyword"> </span>{ -<a name="l00142"></a>00142 std::string tmp = input; -<a name="l00143"></a>00143 zen::trim(tmp); -<a name="l00144"></a>00144 <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"true"</span>) -<a name="l00145"></a>00145 value = <span class="keyword">true</span>; -<a name="l00146"></a>00146 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"false"</span>) -<a name="l00147"></a>00147 value = <span class="keyword">false</span>; -<a name="l00148"></a>00148 <span class="keywordflow">else</span> -<a name="l00149"></a>00149 <span class="keywordflow">return</span> <span class="keyword">false</span>; -<a name="l00150"></a>00150 <span class="keywordflow">return</span> <span class="keyword">true</span>; -<a name="l00151"></a>00151 } -<a name="l00152"></a>00152 }; -<a name="l00153"></a>00153 -<a name="l00154"></a>00154 <span class="comment">//partial specialization: handle conversion for all built-in arithmetic types!</span> -<a name="l00155"></a>00155 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00156"></a>00156 <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_NUMBER> -<a name="l00157"></a>00157 { -<a name="l00158"></a>00158 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span> -<a name="l00159"></a>00159 <span class="keyword"> </span>{ -<a name="l00160"></a>00160 output = numberTo<std::string>(value); -<a name="l00161"></a>00161 } -<a name="l00162"></a>00162 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span> -<a name="l00163"></a>00163 <span class="keyword"> </span>{ -<a name="l00164"></a>00164 value = stringTo<T>(input); -<a name="l00165"></a>00165 <span class="keywordflow">return</span> <span class="keyword">true</span>; -<a name="l00166"></a>00166 } -<a name="l00167"></a>00167 }; -<a name="l00168"></a>00168 -<a name="l00169"></a>00169 <span class="comment">//partial specialization: handle conversion for all string-like types!</span> -<a name="l00170"></a>00170 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00171"></a>00171 <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_STRING> -<a name="l00172"></a>00172 { -<a name="l00173"></a>00173 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span> -<a name="l00174"></a>00174 <span class="keyword"> </span>{ -<a name="l00175"></a>00175 output = utfCvrtTo<std::string>(value); -<a name="l00176"></a>00176 } -<a name="l00177"></a>00177 <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span> -<a name="l00178"></a>00178 <span class="keyword"> </span>{ -<a name="l00179"></a>00179 value = utfCvrtTo<T>(input); -<a name="l00180"></a>00180 <span class="keywordflow">return</span> <span class="keyword">true</span>; -<a name="l00181"></a>00181 } -<a name="l00182"></a>00182 }; -<a name="l00183"></a>00183 -<a name="l00184"></a>00184 -<a name="l00185"></a>00185 <span class="comment">//partial specialization: unknown type</span> -<a name="l00186"></a>00186 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00187"></a>00187 <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_OTHER> -<a name="l00188"></a>00188 { -<a name="l00189"></a>00189 <span class="comment">//###########################################################################################################################################</span> -<a name="l00190"></a>00190 assert_static(<span class="keyword">sizeof</span>(T) == -1); -<a name="l00191"></a>00191 <span class="comment">/*</span> -<a name="l00192"></a>00192 <span class="comment"> ATTENTION: The data type T is yet unknown to the zen::Xml framework!</span> -<a name="l00193"></a>00193 <span class="comment"></span> -<a name="l00194"></a>00194 <span class="comment"> Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes</span> -<a name="l00195"></a>00195 <span class="comment"></span> -<a name="l00196"></a>00196 <span class="comment"> template <> void zen::writeText(const T& value, std::string& output)</span> -<a name="l00197"></a>00197 <span class="comment"> template <> bool zen::readText(const std::string& input, T& value)</span> -<a name="l00198"></a>00198 <span class="comment"></span> -<a name="l00199"></a>00199 <span class="comment"> If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements:</span> -<a name="l00200"></a>00200 <span class="comment"></span> -<a name="l00201"></a>00201 <span class="comment"> template <> void zen::writeStruc(const T& value, XmlElement& output)</span> -<a name="l00202"></a>00202 <span class="comment"> template <> bool zen::readStruc(const XmlElement& input, T& value)</span> -<a name="l00203"></a>00203 <span class="comment"> */</span> -<a name="l00204"></a>00204 <span class="comment">//###########################################################################################################################################</span> -<a name="l00205"></a>00205 }; -<a name="l00206"></a>00206 -<a name="l00207"></a>00207 -<a name="l00208"></a>00208 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span> -<a name="l00209"></a><a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">00209</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> T& value, std::string& output) -<a name="l00210"></a>00210 { -<a name="l00211"></a>00211 ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, output); -<a name="l00212"></a>00212 } -<a name="l00213"></a>00213 -<a name="l00214"></a>00214 -<a name="l00215"></a>00215 <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span> -<a name="l00216"></a><a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">00216</a> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, T& value) -<a name="l00217"></a>00217 { -<a name="l00218"></a>00218 <span class="keywordflow">return</span> ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(input, value); -<a name="l00219"></a>00219 } -<a name="l00220"></a>00220 } -<a name="l00221"></a>00221 -<a name="l00222"></a>00222 <span class="preprocessor">#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <zen/utf.h></span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <zen/string_tools.h></span></div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value);</div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output);</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/* Different classes of data types:</span></div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment"></span></div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">-----------------------------</span></div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">| structured | readStruc/writeStruc - e.g. string-convertible types, STL containers, std::pair, structured user types</span></div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">| ------------------------- |</span></div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">| | to-string-convertible | | readText/writeText - e.g. string-like types, all built-in arithmetic numbers, bool</span></div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">| | --------------- | |</span></div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">| | | string-like | | | utfCvrtTo - e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</span></div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">| | --------------- | |</span></div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">| ------------------------- |</span></div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">-----------------------------</span></div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">*/</span></div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">//------------------------------ implementation -------------------------------------</span></div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment">//Conversion from arbitrary types to text (for use with XML elements and attributes)</span></div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="keyword">enum</span> TextType</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> {</div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  TEXT_TYPE_BOOL,</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  TEXT_TYPE_NUMBER,</div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  TEXT_TYPE_STRING,</div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  TEXT_TYPE_OTHER,</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> };</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">struct </span>GetTextType : StaticEnum<TextType,</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  IsSameType<T, bool>::value ? TEXT_TYPE_BOOL :</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  IsStringLike<T>::value ? TEXT_TYPE_STRING : <span class="comment">//string before number to correctly handle char/wchar_t -> this was an issue with Loki only!</span></div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  IsArithmetic<T>::value ? TEXT_TYPE_NUMBER : <span class="comment">//</span></div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  TEXT_TYPE_OTHER> {};</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">//######################################################################################</span></div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">template</span> <<span class="keyword">class</span> T, TextType type></div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">struct </span>ConvertText;</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">/* -> expected interface</span></div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">{</span></div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> void writeText(const T& value, std::string& output) const;</span></div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> bool readText(const std::string& input, T& value) const;</span></div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">};</span></div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">*/</span></div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//partial specialization: type bool</span></div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_BOOL></div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> {</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keywordtype">bool</span> value, std::string& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  output = value ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>;</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, <span class="keywordtype">bool</span>& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  std::string tmp = input;</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  zen::trim(tmp);</div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"true"</span>)</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  value = <span class="keyword">true</span>;</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"false"</span>)</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  value = <span class="keyword">false</span>;</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> };</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment">//partial specialization: handle conversion for all built-in arithmetic types!</span></div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_NUMBER></div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  output = numberTo<std::string>(value);</div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  value = stringTo<T>(input);</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> };</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">//partial specialization: handle conversion for all string-like types!</span></div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_STRING></div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> {</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)<span class="keyword"> const</span></div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  output = utfCvrtTo<std::string>(value);</div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  value = utfCvrtTo<T>(input);</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> };</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//partial specialization: unknown type</span></div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="keyword">struct </span>ConvertText<T, TEXT_TYPE_OTHER></div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> {</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="comment">//###########################################################################################################################################</span></div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  assert_static(<span class="keyword">sizeof</span>(T) == -1);</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">/*</span></div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="comment"> ATTENTION: The data type T is yet unknown to the zen::Xml framework!</span></div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment"></span></div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment"> Please provide a specialization for T of the following two functions in order to handle conversions to XML elements and attributes</span></div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment"></span></div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="comment"> template <> void zen::writeText(const T& value, std::string& output)</span></div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> template <> bool zen::readText(const std::string& input, T& value)</span></div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"></span></div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> If T is structured and cannot be converted to a text representation specialize these two functions to allow at least for conversions to XML elements:</span></div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"></span></div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> template <> void zen::writeStruc(const T& value, XmlElement& output)</span></div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> template <> bool zen::readStruc(const XmlElement& input, T& value)</span></div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> */</span></div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="comment">//###########################################################################################################################################</span></div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> };</div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f"> 209</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> T& value, std::string& output)</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, output);</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> }</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">inline</span></div> +<div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff"> 216</a></span> <span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, T& value)</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> ConvertText<T, GetTextType<T>::value>().<a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(input, value);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor">#endif //ZEN_XML_CONVERT_TEXT_HEADER_018727339083427097434</span></div> +<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> +<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/dom_8h_source.html b/zenxml/doc/dom_8h_source.html index e81e00a9..1b1e1e32 100644 --- a/zenxml/doc/dom_8h_source.html +++ b/zenxml/doc/dom_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: dom.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,257 +73,303 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">dom.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_DOM_HEADER_82085720723894567204564256</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_DOM_HEADER_82085720723894567204564256</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include <string></span> -<a name="l00011"></a>00011 <span class="preprocessor">#include <vector></span> -<a name="l00012"></a>00012 <span class="preprocessor">#include <memory></span> -<a name="l00013"></a>00013 <span class="preprocessor">#include <map></span> -<a name="l00014"></a>00014 <span class="preprocessor">#include "cvrt_text.h"</span> <span class="comment">//"readText/writeText"</span> -<a name="l00015"></a>00015 -<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen -<a name="l00017"></a>00017 { -<a name="l00018"></a>00018 <span class="keyword">class </span>XmlDoc; -<a name="l00019"></a>00019 -<a name="l00021"></a><a class="code" href="classzen_1_1_xml_element.html">00021</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a> -<a name="l00022"></a>00022 { -<a name="l00023"></a>00023 <span class="keyword">struct </span>PrivateConstruction {}; -<a name="l00024"></a>00024 <span class="keyword">public</span>: -<a name="l00025"></a>00025 <span class="comment">//Construct an empty XML element</span> -<a name="l00026"></a>00026 <span class="comment">//This constructor should be private, however std::make_shared() requires public access</span> -<a name="l00027"></a>00027 <span class="comment">//Therefore at least prevent users from calling it via private dummy type PrivateConstruction</span> -<a name="l00028"></a>00028 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00029"></a>00029 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>(<span class="keyword">const</span> String& name, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* parentElement, PrivateConstruction) : name_(utfCvrtTo<std::string>(name)), parent_(parentElement) {} -<a name="l00030"></a>00030 -<a name="l00032"></a>00032 -<a name="l00036"></a>00036 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00037"></a><a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">00037</a> String <a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50" title="Retrieve the name of this XML element.">getNameAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(name_); } -<a name="l00038"></a>00038 -<a name="l00040"></a>00040 -<a name="l00044"></a>00044 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00045"></a><a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">00045</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070" title="Get the value of this element as a user type.">getValue</a>(T& value)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(*<span class="keyword">this</span>, value); } -<a name="l00046"></a>00046 -<a name="l00048"></a>00048 -<a name="l00051"></a>00051 <span class="keyword">template</span> <<span class="keyword">class</span> T> -<a name="l00052"></a><a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">00052</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">setValue</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(value, *<span class="keyword">this</span>); } -<a name="l00053"></a>00053 -<a name="l00055"></a>00055 -<a name="l00062"></a>00062 <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T> -<a name="l00063"></a><a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">00063</a> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887" title="Retrieve an attribute by name.">getAttribute</a>(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span> -<a name="l00064"></a>00064 <span class="keyword"> </span>{ -<a name="l00065"></a>00065 <span class="keyword">auto</span> it = attributes.find(utfCvrtTo<std::string>(name)); -<a name="l00066"></a>00066 <span class="keywordflow">return</span> it == attributes.end() ? <span class="keyword">false</span> : <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(it->second, value); -<a name="l00067"></a>00067 } -<a name="l00068"></a>00068 -<a name="l00070"></a>00070 -<a name="l00076"></a>00076 <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T> -<a name="l00077"></a><a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">00077</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421" title="Create or update an XML attribute.">setAttribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value) -<a name="l00078"></a>00078 { -<a name="l00079"></a>00079 std::string attrValue; -<a name="l00080"></a>00080 <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(value, attrValue); -<a name="l00081"></a>00081 attributes[utfCvrtTo<std::string>(name)] = attrValue; -<a name="l00082"></a>00082 } -<a name="l00083"></a>00083 -<a name="l00085"></a>00085 -<a name="l00088"></a>00088 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00089"></a><a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">00089</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934" title="Remove the attribute with the given name.">removeAttribute</a>(<span class="keyword">const</span> String& name) { attributes.erase(utfCvrtTo<std::string>(name)); } -<a name="l00090"></a>00090 -<a name="l00092"></a>00092 -<a name="l00096"></a>00096 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00097"></a><a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">00097</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& <a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(<span class="keyword">const</span> String& name) -<a name="l00098"></a>00098 { -<a name="l00099"></a>00099 std::string utf8Name = utfCvrtTo<std::string>(name); -<a name="l00100"></a>00100 <span class="keyword">auto</span> newElement = std::make_shared<XmlElement>(utf8Name, <span class="keyword">this</span>, PrivateConstruction()); -<a name="l00101"></a>00101 childElements.push_back(newElement); -<a name="l00102"></a>00102 childElementsSorted.insert(std::make_pair(utf8Name, newElement)); -<a name="l00103"></a>00103 <span class="keywordflow">return</span> *newElement; -<a name="l00104"></a>00104 } -<a name="l00105"></a>00105 -<a name="l00107"></a>00107 -<a name="l00112"></a>00112 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00113"></a><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">00113</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span> -<a name="l00114"></a>00114 <span class="keyword"> </span>{ -<a name="l00115"></a>00115 <span class="keyword">auto</span> it = childElementsSorted.find(utfCvrtTo<std::string>(name)); -<a name="l00116"></a>00116 <span class="keywordflow">return</span> it == childElementsSorted.end() ? <span class="keyword">nullptr</span> : &*(it->second); -<a name="l00117"></a>00117 } -<a name="l00118"></a>00118 -<a name="l00120"></a>00120 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00121"></a><a class="code" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">00121</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="keyword">const</span> String& name) -<a name="l00122"></a>00122 { -<a name="l00123"></a>00123 <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">this</span>)-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(name)); -<a name="l00124"></a>00124 } -<a name="l00125"></a>00125 -<a name="l00126"></a>00126 <span class="keyword">template</span> < <span class="keyword">class </span>IterTy, <span class="comment">//underlying iterator type</span> -<a name="l00127"></a>00127 <span class="keyword">class </span>T, <span class="comment">//target object type</span> -<a name="l00128"></a>00128 <span class="keyword">class </span>AccessPolicy > <span class="comment">//access policy: see AccessPtrMap</span> -<a name="l00129"></a>00129 <span class="keyword">class </span>PtrIter : <span class="keyword">public</span> std::iterator<std::input_iterator_tag, T>, <span class="keyword">private</span> AccessPolicy <span class="comment">//get rid of shared_ptr indirection</span> -<a name="l00130"></a>00130 { -<a name="l00131"></a>00131 <span class="keyword">public</span>: -<a name="l00132"></a>00132 PtrIter(IterTy it) : it_(it) {} -<a name="l00133"></a>00133 PtrIter(<span class="keyword">const</span> PtrIter& other) : it_(other.it_) {} -<a name="l00134"></a>00134 PtrIter& operator++() { ++it_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; } -<a name="l00135"></a>00135 PtrIter operator++(<span class="keywordtype">int</span>) { PtrIter tmp(*<span class="keyword">this</span>); operator++(); <span class="keywordflow">return</span> tmp; } -<a name="l00136"></a>00136 <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> lhs.it_ == rhs.it_; } -<a name="l00137"></a>00137 <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> !(lhs == rhs); } -<a name="l00138"></a>00138 T& operator* () { <span class="keywordflow">return</span> AccessPolicy::template objectRef<T>(it_); } -<a name="l00139"></a>00139 T* operator->() { <span class="keywordflow">return</span> &AccessPolicy::template objectRef<T>(it_); } -<a name="l00140"></a>00140 <span class="keyword">private</span>: -<a name="l00141"></a>00141 IterTy it_; -<a name="l00142"></a>00142 }; -<a name="l00143"></a>00143 -<a name="l00144"></a>00144 <span class="keyword">struct </span>AccessPtrMap -<a name="l00145"></a>00145 { -<a name="l00146"></a>00146 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy> -<a name="l00147"></a>00147 T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> *(it->second); } -<a name="l00148"></a>00148 }; -<a name="l00149"></a>00149 -<a name="l00150"></a>00150 <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrMap> ChildIter2; -<a name="l00151"></a>00151 <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrMap> ChildIterConst2; -<a name="l00152"></a>00152 -<a name="l00154"></a>00154 -<a name="l00163"></a>00163 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00164"></a><a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">00164</a> std::pair<ChildIterConst2, ChildIterConst2> <a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8" title="Access all child elements with the given name via STL iterators.">getChildren</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); } -<a name="l00165"></a>00165 -<a name="l00167"></a>00167 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00168"></a><a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">00168</a> std::pair<ChildIter2, ChildIter2> <a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(<span class="keyword">const</span> String& name) { <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); } -<a name="l00169"></a>00169 -<a name="l00170"></a>00170 <span class="keyword">struct </span>AccessPtrVec -<a name="l00171"></a>00171 { -<a name="l00172"></a>00172 <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy> -<a name="l00173"></a>00173 T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> **it; } -<a name="l00174"></a>00174 }; -<a name="l00175"></a>00175 -<a name="l00176"></a>00176 <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrVec> ChildIter; -<a name="l00177"></a>00177 <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrVec> ChildIterConst; -<a name="l00178"></a>00178 -<a name="l00180"></a>00180 -<a name="l00188"></a><a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">00188</a> std::pair<ChildIterConst, ChildIterConst> <a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2" title="Access all child elements sequentially via STL iterators.">getChildren</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); } -<a name="l00189"></a>00189 -<a name="l00191"></a><a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">00191</a> std::pair<ChildIter, ChildIter> <a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>() { <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); } -<a name="l00192"></a>00192 -<a name="l00194"></a><a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">00194</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1" title="Get parent XML element, may be nullptr for root element.">parent</a>() { <span class="keywordflow">return</span> parent_; }; -<a name="l00196"></a><a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">00196</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c" title="Get parent XML element, may be nullptr for root element.">parent</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parent_; }; -<a name="l00197"></a>00197 -<a name="l00198"></a>00198 -<a name="l00199"></a>00199 <span class="keyword">typedef</span> std::map<std::string, std::string>::const_iterator AttrIter; -<a name="l00200"></a>00200 -<a name="l00201"></a>00201 <span class="comment">/* -> disabled documentation extraction</span> -<a name="l00202"></a>00202 <span class="comment"> \brief Get all attributes associated with the element.</span> -<a name="l00203"></a>00203 <span class="comment"> \code</span> -<a name="l00204"></a>00204 <span class="comment"> auto iterPair = elem.getAttributes();</span> -<a name="l00205"></a>00205 <span class="comment"> for (auto it = iterPair.first; it != iterPair.second; ++it)</span> -<a name="l00206"></a>00206 <span class="comment"> std::cout << "name: " << it->first << " value: " << it->second << "\n";</span> -<a name="l00207"></a>00207 <span class="comment"> \endcode</span> -<a name="l00208"></a>00208 <span class="comment"> \return A pair of STL begin/end iterators to access all attributes sequentially as a list of name/value pairs of std::string.</span> -<a name="l00209"></a>00209 <span class="comment"> */</span> -<a name="l00210"></a>00210 std::pair<AttrIter, AttrIter> getAttributes()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(attributes.begin(), attributes.end()); } -<a name="l00211"></a>00211 -<a name="l00212"></a>00212 <span class="comment">//Transactionally swap two elements. -> disabled documentation extraction</span> -<a name="l00213"></a>00213 <span class="keywordtype">void</span> swap(XmlElement& other) -<a name="l00214"></a>00214 { -<a name="l00215"></a>00215 name_ .swap(other.name_); -<a name="l00216"></a>00216 value_ .swap(other.value_); -<a name="l00217"></a>00217 attributes.swap(other.attributes); -<a name="l00218"></a>00218 childElements.swap(other.childElements); -<a name="l00219"></a>00219 childElementsSorted.swap(other.childElementsSorted); -<a name="l00220"></a>00220 <span class="comment">//std::swap(parent_, other.parent_); -> parent is physical location; update children's parent reference instead:</span> -<a name="l00221"></a>00221 std::for_each( childElements.begin(), childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = <span class="keyword">this</span>; }); -<a name="l00222"></a>00222 std::for_each(other.childElements.begin(), other.childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = &other; }); -<a name="l00223"></a>00223 } -<a name="l00224"></a>00224 -<a name="l00225"></a>00225 <span class="keyword">private</span>: -<a name="l00226"></a>00226 <span class="keyword">friend</span> <span class="keyword">class </span>XmlDoc; -<a name="l00227"></a>00227 -<a name="l00228"></a>00228 XmlElement(<span class="keyword">const</span> XmlElement&); <span class="comment">//not implemented</span> -<a name="l00229"></a>00229 XmlElement& operator=(<span class="keyword">const</span> XmlElement&); <span class="comment">//</span> -<a name="l00230"></a>00230 -<a name="l00231"></a>00231 std::string name_; -<a name="l00232"></a>00232 std::string value_; -<a name="l00233"></a>00233 std::map<std::string, std::string> attributes; -<a name="l00234"></a>00234 std::vector<std::shared_ptr<XmlElement>> childElements; <span class="comment">//all child elements in order of creation</span> -<a name="l00235"></a>00235 std::multimap<std::string, std::shared_ptr<XmlElement>> childElementsSorted; <span class="comment">//alternate key: sorted by element name</span> -<a name="l00236"></a>00236 XmlElement* parent_; -<a name="l00237"></a>00237 }; -<a name="l00238"></a>00238 -<a name="l00239"></a>00239 -<a name="l00240"></a>00240 <span class="comment">//XmlElement::setValue<T>() calls zen::writeStruc() which calls XmlElement::setValue() ... => these two specializations end the circle</span> -<a name="l00241"></a>00241 <span class="keyword">template</span> <> <span class="keyword">inline</span> -<a name="l00242"></a>00242 <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">XmlElement::setValue</a>(<span class="keyword">const</span> std::string& value) { value_ = value; } -<a name="l00243"></a>00243 -<a name="l00244"></a>00244 <span class="keyword">template</span> <> <span class="keyword">inline</span> -<a name="l00245"></a>00245 <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070" title="Get the value of this element as a user type.">XmlElement::getValue</a>(std::string& value)<span class="keyword"> const </span>{ value = value_; <span class="keywordflow">return</span> <span class="keyword">true</span>; } -<a name="l00246"></a>00246 -<a name="l00247"></a>00247 -<a name="l00249"></a><a class="code" href="classzen_1_1_xml_doc.html">00249</a> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a> -<a name="l00250"></a>00250 { -<a name="l00251"></a>00251 <span class="keyword">public</span>: -<a name="l00253"></a><a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">00253</a> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed" title="Default constructor setting up an empty XML document with a standard declaration: <...">XmlDoc</a>() : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(<span class="stringliteral">"Root"</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>::PrivateConstruction()) {} -<a name="l00254"></a>00254 -<a name="l00255"></a>00255 <span class="comment">//Setup an empty XML document</span> -<a name="l00260"></a>00260 <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00261"></a><a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">00261</a> <a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName) : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(rootName, nullptr, <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>::PrivateConstruction()) {} -<a name="l00262"></a>00262 -<a name="l00264"></a><a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">00264</a> <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document's root element.">root</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rootElement; } -<a name="l00266"></a><a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">00266</a> <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e" title="Get a reference to the document's root element.">root</a>() { <span class="keywordflow">return</span> rootElement; } -<a name="l00267"></a>00267 -<a name="l00269"></a>00269 -<a name="l00272"></a>00272 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00273"></a><a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">00273</a> String <a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665" title="Get the version used in the XML declaration.">getVersionAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(version_); } -<a name="l00274"></a>00274 -<a name="l00276"></a>00276 -<a name="l00279"></a>00279 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00280"></a><a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">00280</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64" title="Set the version used in the XML declaration.">setVersion</a>(<span class="keyword">const</span> String& version) { version_ = utfCvrtTo<std::string>(version); } -<a name="l00281"></a>00281 -<a name="l00283"></a>00283 -<a name="l00286"></a>00286 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00287"></a><a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">00287</a> String <a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da" title="Get the encoding used in the XML declaration.">getEncodingAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(encoding_); } -<a name="l00288"></a>00288 -<a name="l00290"></a>00290 -<a name="l00293"></a>00293 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00294"></a><a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">00294</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62" title="Set the encoding used in the XML declaration.">setEncoding</a>(<span class="keyword">const</span> String& encoding) { encoding_ = utfCvrtTo<std::string>(encoding); } -<a name="l00295"></a>00295 -<a name="l00297"></a>00297 -<a name="l00300"></a>00300 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00301"></a><a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">00301</a> String <a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4" title="Get the standalone string used in the XML declaration.">getStandaloneAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(standalone_); } -<a name="l00302"></a>00302 -<a name="l00304"></a>00304 -<a name="l00307"></a>00307 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00308"></a><a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">00308</a> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4" title="Set the standalone string used in the XML declaration.">setStandalone</a>(<span class="keyword">const</span> String& standalone) { standalone_ = utfCvrtTo<std::string>(standalone); } -<a name="l00309"></a>00309 -<a name="l00310"></a>00310 <span class="keyword">private</span>: -<a name="l00311"></a>00311 <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed" title="Default constructor setting up an empty XML document with a standard declaration: <...">XmlDoc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&); <span class="comment">//not implemented, thanks to XmlElement::parent_</span> -<a name="l00312"></a>00312 <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& operator=(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>&); <span class="comment">//</span> -<a name="l00313"></a>00313 -<a name="l00314"></a>00314 std::string version_; -<a name="l00315"></a>00315 std::string encoding_; -<a name="l00316"></a>00316 std::string standalone_; -<a name="l00317"></a>00317 -<a name="l00318"></a>00318 <a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a> rootElement; -<a name="l00319"></a>00319 }; -<a name="l00320"></a>00320 -<a name="l00321"></a>00321 } -<a name="l00322"></a>00322 -<a name="l00323"></a>00323 <span class="preprocessor">#endif //ZEN_XML_DOM_HEADER_82085720723894567204564256</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <string></span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <vector></span></div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <memory></span></div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <map></span></div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "cvrt_text.h"</span> <span class="comment">//"readText/writeText"</span></div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">class </span>XmlDoc;</div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div> +<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html"> 21</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a></div> +<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="keyword">struct </span>PrivateConstruction {};</div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="comment">//Construct an empty XML element</span></div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="comment">//This constructor should be private, however std::make_shared() requires public access</span></div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="comment">//Therefore at least prevent users from calling it via private dummy type PrivateConstruction</span></div> +<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>(<span class="keyword">const</span> String& name, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* parentElement, PrivateConstruction) : name_(utfCvrtTo<std::string>(name)), parent_(parentElement) {}</div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50"> 37</a></span>  String <a class="code" href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">getNameAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(name_); }</div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070"> 45</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">getValue</a>(T& value)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(*<span class="keyword">this</span>, value); }</div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T></div> +<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01"> 52</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(<span class="keyword">const</span> T& value) { <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(value, *<span class="keyword">this</span>); }</div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> +<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887"> 63</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">getAttribute</a>(<span class="keyword">const</span> String& name, T& value)<span class="keyword"> const</span></div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">auto</span> it = attributes.find(utfCvrtTo<std::string>(name));</div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">return</span> it == attributes.end() ? <span class="keyword">false</span> : <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(it->second, value);</div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String, <span class="keyword">class</span> T></div> +<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421"> 77</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">setAttribute</a>(<span class="keyword">const</span> String& name, <span class="keyword">const</span> T& value)</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  std::string attrValue;</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(value, attrValue);</div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  attributes[utfCvrtTo<std::string>(name)] = attrValue;</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934"> 89</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">removeAttribute</a>(<span class="keyword">const</span> String& name) { attributes.erase(utfCvrtTo<std::string>(name)); }</div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9"> 97</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(<span class="keyword">const</span> String& name)</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  {</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  std::string utf8Name = utfCvrtTo<std::string>(name);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">auto</span> newElement = std::make_shared<XmlElement>(utf8Name, <span class="keyword">this</span>, PrivateConstruction());</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  childElements.push_back(newElement);</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  childElementsSorted.insert(std::make_pair(utf8Name, newElement));</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> *newElement;</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e"> 113</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const</span></div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">auto</span> it = childElementsSorted.find(utfCvrtTo<std::string>(name));</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">return</span> it == childElementsSorted.end() ? <span class="keyword">nullptr</span> : &*(it->second);</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658"> 121</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">getChild</a>(<span class="keyword">const</span> String& name)</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>*<span class="keyword">></span>(<span class="keyword">this</span>)-><a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(name));</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span> < <span class="keyword">class </span>IterTy, <span class="comment">//underlying iterator type</span></div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">class </span>T, <span class="comment">//target object type</span></div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">class </span>AccessPolicy > <span class="comment">//access policy: see AccessPtrMap</span></div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">class </span>PtrIter : <span class="keyword">public</span> std::iterator<std::input_iterator_tag, T>, <span class="keyword">private</span> AccessPolicy <span class="comment">//get rid of shared_ptr indirection</span></div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">public</span>:</div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  PtrIter(IterTy it) : it_(it) {}</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  PtrIter(<span class="keyword">const</span> PtrIter& other) : it_(other.it_) {}</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  PtrIter& operator++() { ++it_; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  PtrIter operator++(<span class="keywordtype">int</span>) { PtrIter tmp(*<span class="keyword">this</span>); operator++(); <span class="keywordflow">return</span> tmp; }</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> lhs.it_ == rhs.it_; }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">inline</span> <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> PtrIter& lhs, <span class="keyword">const</span> PtrIter& rhs) { <span class="keywordflow">return</span> !(lhs == rhs); }</div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  T& operator* () { <span class="keywordflow">return</span> AccessPolicy::template objectRef<T>(it_); }</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  T* operator->() { <span class="keywordflow">return</span> &AccessPolicy::template objectRef<T>(it_); }</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">private</span>:</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  IterTy it_;</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">struct </span>AccessPtrMap</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy></div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> *(it->second); }</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  };</div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrMap> ChildIter2;</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keyword">typedef</span> PtrIter<std::multimap<std::string, std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrMap> ChildIterConst2;</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8"> 164</a></span>  std::pair<ChildIterConst2, ChildIterConst2> <a class="code" href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">getChildren</a>(<span class="keyword">const</span> String& name)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); }</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d"> 168</a></span>  std::pair<ChildIter2, ChildIter2> <a class="code" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">getChildren</a>(<span class="keyword">const</span> String& name) { <span class="keywordflow">return</span> childElementsSorted.equal_range(utfCvrtTo<std::string>(name)); }</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">struct </span>AccessPtrVec</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  {</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">template</span> <<span class="keyword">class</span> T, <span class="keyword">class</span> IterTy></div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T& objectRef(<span class="keyword">const</span> IterTy& it) { <span class="keywordflow">return</span> **it; }</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  };</div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::iterator, XmlElement, AccessPtrVec> ChildIter;</div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">typedef</span> PtrIter<std::vector<std::shared_ptr<XmlElement>>::const_iterator, <span class="keyword">const</span> XmlElement, AccessPtrVec> ChildIterConst;</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div> +<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2"> 188</a></span>  std::pair<ChildIterConst, ChildIterConst> <a class="code" href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">getChildren</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div> +<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96"> 191</a></span>  std::pair<ChildIter, ChildIter> <a class="code" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">getChildren</a>() { <span class="keywordflow">return</span> std::make_pair(childElements.begin(), childElements.end()); }</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div> +<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1"> 194</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">parent</a>() { <span class="keywordflow">return</span> parent_; };</div> +<div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c"> 196</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* <a class="code" href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">parent</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> parent_; };</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keyword">typedef</span> std::map<std::string, std::string>::const_iterator AttrIter;</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">/* -> disabled documentation extraction</span></div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> \brief Get all attributes associated with the element.</span></div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> \code</span></div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="comment"> auto iterPair = elem.getAttributes();</span></div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment"> for (auto it = iterPair.first; it != iterPair.second; ++it)</span></div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment"> std::cout << "name: " << it->first << " value: " << it->second << "\n";</span></div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment"> \endcode</span></div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="comment"> \return A pair of STL begin/end iterators to access all attributes sequentially as a list of name/value pairs of std::string.</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="comment"> */</span></div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  std::pair<AttrIter, AttrIter> getAttributes()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> std::make_pair(attributes.begin(), attributes.end()); }</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">//Transactionally swap two elements. -> disabled documentation extraction</span></div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordtype">void</span> swap(XmlElement& other)</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  {</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  name_ .swap(other.name_);</div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  value_ .swap(other.value_);</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  attributes.swap(other.attributes);</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  childElements.swap(other.childElements);</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  childElementsSorted.swap(other.childElementsSorted);</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="comment">//std::swap(parent_, other.parent_); -> parent is physical location; update children's parent reference instead:</span></div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  std::for_each( childElements.begin(), childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = <span class="keyword">this</span>; });</div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  std::for_each(other.childElements.begin(), other.childElements.end(), [&](<span class="keyword">const</span> std::shared_ptr<XmlElement>& child) { child->parent_ = &other; });</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keyword">friend</span> <span class="keyword">class </span>XmlDoc;</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  XmlElement(<span class="keyword">const</span> XmlElement&); <span class="comment">//not implemented</span></div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  XmlElement& operator=(<span class="keyword">const</span> XmlElement&); <span class="comment">//</span></div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  std::string name_;</div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  std::string value_;</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  std::map<std::string, std::string> attributes;</div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  std::vector<std::shared_ptr<XmlElement>> childElements; <span class="comment">//all child elements in order of creation</span></div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  std::multimap<std::string, std::shared_ptr<XmlElement>> childElementsSorted; <span class="comment">//alternate key: sorted by element name</span></div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  XmlElement* parent_;</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> };</div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//XmlElement::setValue<T>() calls zen::writeStruc() which calls XmlElement::setValue() ... => these two specializations end the circle</span></div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">XmlElement::setValue</a>(<span class="keyword">const</span> std::string& value) { value_ = value; }</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">bool</span> <a class="code" href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">XmlElement::getValue</a>(std::string& value)<span class="keyword"> const </span>{ value = value_; <span class="keywordflow">return</span> <span class="keyword">true</span>; }</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div> +<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html"> 249</a></span> <span class="keyword">class </span><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a></div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> {</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed"> 253</a></span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>() : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(<span class="stringliteral">"Root"</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) {}</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>&& tmp) : rootElement(<span class="stringliteral">"Root"</span>, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) { swap(tmp); }</div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>& operator=(<a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&& tmp) { swap(tmp); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">//Setup an empty XML document</span></div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df"> 264</a></span>  <a class="code" href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">XmlDoc</a>(String rootName) : version_(<span class="stringliteral">"1.0"</span>), encoding_(<span class="stringliteral">"UTF-8"</span>), rootElement(rootName, nullptr, <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>::PrivateConstruction()) {}</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div> +<div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d"> 267</a></span>  <span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rootElement; }</div> +<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e"> 269</a></span>  <a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& <a class="code" href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">root</a>() { <span class="keywordflow">return</span> rootElement; }</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665"> 276</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">getVersionAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(version_); }</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64"> 283</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">setVersion</a>(<span class="keyword">const</span> String& version) { version_ = utfCvrtTo<std::string>(version); }</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da"> 290</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">getEncodingAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(encoding_); }</div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62"> 297</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">setEncoding</a>(<span class="keyword">const</span> String& encoding) { encoding_ = utfCvrtTo<std::string>(encoding); }</div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4"> 304</a></span>  String <a class="code" href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">getStandaloneAs</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> utfCvrtTo<String>(standalone_); }</div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> </div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4"> 311</a></span>  <span class="keywordtype">void</span> <a class="code" href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">setStandalone</a>(<span class="keyword">const</span> String& standalone) { standalone_ = utfCvrtTo<std::string>(standalone); }</div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="comment">//Transactionally swap two elements. -> disabled documentation extraction</span></div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordtype">void</span> swap(<a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& other)</div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  {</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  version_ .swap(other.version_);</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  encoding_ .swap(other.encoding_);</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  standalone_.swap(other.standalone_);</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  rootElement.swap(other.rootElement);</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&); <span class="comment">//not implemented, thanks to XmlElement::parent_</span></div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>& operator=(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">XmlDoc</a>&); <span class="comment">//</span></div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  std::string version_;</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  std::string encoding_;</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  std::string standalone_;</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  XmlElement rootElement;</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> };</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif //ZEN_XML_DOM_HEADER_82085720723894567204564256</span></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_ad4a9594d93885fc1a12db28e8246648d"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">zen::XmlDoc::root</a></div><div class="ttdeci">const XmlElement & root() const </div><div class="ttdoc">Get a const reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:267</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a7ba1f26be5629f89ba7648d658f7058c"><div class="ttname"><a href="classzen_1_1_xml_element.html#a7ba1f26be5629f89ba7648d658f7058c">zen::XmlElement::parent</a></div><div class="ttdeci">const XmlElement * parent() const </div><div class="ttdoc">Get parent XML element, may be nullptr for root element. </div><div class="ttdef"><b>Definition:</b> dom.h:196</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a5ac9d586a5668c2c64e3c06c6203b070"><div class="ttname"><a href="classzen_1_1_xml_element.html#a5ac9d586a5668c2c64e3c06c6203b070">zen::XmlElement::getValue</a></div><div class="ttdeci">bool getValue(T &value) const </div><div class="ttdoc">Get the value of this element as a user type. </div><div class="ttdef"><b>Definition:</b> dom.h:45</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_ad9c2ce2e55294c8110825988595e3934"><div class="ttname"><a href="classzen_1_1_xml_element.html#ad9c2ce2e55294c8110825988595e3934">zen::XmlElement::removeAttribute</a></div><div class="ttdeci">void removeAttribute(const String &name)</div><div class="ttdoc">Remove the attribute with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:89</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a2640b438c4984f5eeb8760d82d73c5b8"><div class="ttname"><a href="classzen_1_1_xml_element.html#a2640b438c4984f5eeb8760d82d73c5b8">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIterConst2, ChildIterConst2 > getChildren(const String &name) const </div><div class="ttdoc">Access all child elements with the given name via STL iterators. </div><div class="ttdef"><b>Definition:</b> dom.h:164</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a2ae30bca2f490479f58c272148935a62"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a2ae30bca2f490479f58c272148935a62">zen::XmlDoc::setEncoding</a></div><div class="ttdeci">void setEncoding(const String &encoding)</div><div class="ttdoc">Set the encoding used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:297</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a55a6d1849490d82ae900cd9b923908f2"><div class="ttname"><a href="classzen_1_1_xml_element.html#a55a6d1849490d82ae900cd9b923908f2">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIterConst, ChildIterConst > getChildren() const </div><div class="ttdoc">Access all child elements sequentially via STL iterators. </div><div class="ttdef"><b>Definition:</b> dom.h:188</div></div> +<div class="ttc" id="namespacezen_html_acaf85ab94b61882f957afcd355386bff"><div class="ttname"><a href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a></div><div class="ttdeci">bool readText(const std::string &input, T &value)</div><div class="ttdoc">Convert text to user data - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:216</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html"><div class="ttname"><a href="classzen_1_1_xml_element.html">zen::XmlElement</a></div><div class="ttdoc">An XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:21</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a74ff8434848672fe6483845d04c082df"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a74ff8434848672fe6483845d04c082df">zen::XmlDoc::XmlDoc</a></div><div class="ttdeci">XmlDoc(String rootName)</div><div class="ttdef"><b>Definition:</b> dom.h:264</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_ac59268177d162931f937b6a7f235ad96"><div class="ttname"><a href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIter, ChildIter > getChildren()</div><div class="ttdef"><b>Definition:</b> dom.h:191</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a5d672e8ccc7592442ab927bb267af658"><div class="ttname"><a href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement::getChild</a></div><div class="ttdeci">XmlElement * getChild(const String &name)</div><div class="ttdef"><b>Definition:</b> dom.h:121</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_af90ac6f435b03ba37cf47ee188c58887"><div class="ttname"><a href="classzen_1_1_xml_element.html#af90ac6f435b03ba37cf47ee188c58887">zen::XmlElement::getAttribute</a></div><div class="ttdeci">bool getAttribute(const String &name, T &value) const </div><div class="ttdoc">Retrieve an attribute by name. </div><div class="ttdef"><b>Definition:</b> dom.h:63</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_ab45914339c476e1da35746f5e00dbc64"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ab45914339c476e1da35746f5e00dbc64">zen::XmlDoc::setVersion</a></div><div class="ttdeci">void setVersion(const String &version)</div><div class="ttdoc">Set the version used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:283</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a4c92f9b8c1bb47247b827d89794590d4"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a4c92f9b8c1bb47247b827d89794590d4">zen::XmlDoc::setStandalone</a></div><div class="ttdeci">void setStandalone(const String &standalone)</div><div class="ttdoc">Set the standalone string used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:311</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_adbed9c31066d456a9cc8c610f15670ed"><div class="ttname"><a href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc::XmlDoc</a></div><div class="ttdeci">XmlDoc()</div><div class="ttdoc">Default constructor setting up an empty XML document with a standard declaration: <...</div><div class="ttdef"><b>Definition:</b> dom.h:253</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a64ece4a1f3f8c802192b8f31506535da"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc::getEncodingAs</a></div><div class="ttdeci">String getEncodingAs() const </div><div class="ttdoc">Get the encoding used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:290</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a653caffa6fad89db7d14f67f987ad0f9"><div class="ttname"><a href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">zen::XmlElement::addChild</a></div><div class="ttdeci">XmlElement & addChild(const String &name)</div><div class="ttdoc">Create a new child element and return a reference to it. </div><div class="ttdef"><b>Definition:</b> dom.h:97</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a094e156f9d265443e52a527638e88a1e"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a094e156f9d265443e52a527638e88a1e">zen::XmlDoc::root</a></div><div class="ttdeci">XmlElement & root()</div><div class="ttdoc">Get a reference to the document's root element. </div><div class="ttdef"><b>Definition:</b> dom.h:269</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a3ab82b1720460487f4afabcd115d0c7e"><div class="ttname"><a href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">zen::XmlElement::getChild</a></div><div class="ttdeci">const XmlElement * getChild(const String &name) const </div><div class="ttdoc">Retrieve a child element with the given name. </div><div class="ttdef"><b>Definition:</b> dom.h:113</div></div> +<div class="ttc" id="namespacezen_html_a2bdcecfe7435ef11cedbce47d4e72ee1"><div class="ttname"><a href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a></div><div class="ttdeci">bool readStruc(const XmlElement &input, T &value)</div><div class="ttdoc">Convert XML element to structured user data. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:205</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a4af309f59ef09f46a559f1f0e1eac6c1"><div class="ttname"><a href="classzen_1_1_xml_element.html#a4af309f59ef09f46a559f1f0e1eac6c1">zen::XmlElement::parent</a></div><div class="ttdeci">XmlElement * parent()</div><div class="ttdoc">Get parent XML element, may be nullptr for root element. </div><div class="ttdef"><b>Definition:</b> dom.h:194</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_aaf3a26f6199fc88cce7d9d911ba21b01"><div class="ttname"><a href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">zen::XmlElement::setValue</a></div><div class="ttdeci">void setValue(const T &value)</div><div class="ttdoc">Set the value of this element. </div><div class="ttdef"><b>Definition:</b> dom.h:52</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_a7f93dcdc00cdc8d98926cf8e47161665"><div class="ttname"><a href="classzen_1_1_xml_doc.html#a7f93dcdc00cdc8d98926cf8e47161665">zen::XmlDoc::getVersionAs</a></div><div class="ttdeci">String getVersionAs() const </div><div class="ttdoc">Get the version used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:276</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a211a6f037c22a54d3facb7a8347a8421"><div class="ttname"><a href="classzen_1_1_xml_element.html#a211a6f037c22a54d3facb7a8347a8421">zen::XmlElement::setAttribute</a></div><div class="ttdeci">void setAttribute(const String &name, const T &value)</div><div class="ttdoc">Create or update an XML attribute. </div><div class="ttdef"><b>Definition:</b> dom.h:77</div></div> +<div class="ttc" id="namespacezen_html_a29ddb823fe0a195f19a64448881b8bf6"><div class="ttname"><a href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a></div><div class="ttdeci">void writeStruc(const T &value, XmlElement &output)</div><div class="ttdoc">Convert structured user data into an XML element. </div><div class="ttdef"><b>Definition:</b> cvrt_struc.h:198</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_ae209dac9655bc36121abb87688ece41d"><div class="ttname"><a href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">zen::XmlElement::getChildren</a></div><div class="ttdeci">std::pair< ChildIter2, ChildIter2 > getChildren(const String &name)</div><div class="ttdef"><b>Definition:</b> dom.h:168</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html_ac1bfb9776852dc8195b9ffb4f65452e4"><div class="ttname"><a href="classzen_1_1_xml_doc.html#ac1bfb9776852dc8195b9ffb4f65452e4">zen::XmlDoc::getStandaloneAs</a></div><div class="ttdeci">String getStandaloneAs() const </div><div class="ttdoc">Get the standalone string used in the XML declaration. </div><div class="ttdef"><b>Definition:</b> dom.h:304</div></div> +<div class="ttc" id="classzen_1_1_xml_element_html_a7c911eb06a59c864197b1a4098728e50"><div class="ttname"><a href="classzen_1_1_xml_element.html#a7c911eb06a59c864197b1a4098728e50">zen::XmlElement::getNameAs</a></div><div class="ttdeci">String getNameAs() const </div><div class="ttdoc">Retrieve the name of this XML element. </div><div class="ttdef"><b>Definition:</b> dom.h:37</div></div> +<div class="ttc" id="namespacezen_html_a2ce2998296871fc2f4718ceceb22a23f"><div class="ttname"><a href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a></div><div class="ttdeci">void writeText(const T &value, std::string &output)</div><div class="ttdoc">Convert user data into text - used by XML elements and attributes. </div><div class="ttdef"><b>Definition:</b> cvrt_text.h:209</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/doxygen.css b/zenxml/doc/doxygen.css index c151fde3..f0f36f89 100644 --- a/zenxml/doc/doxygen.css +++ b/zenxml/doc/doxygen.css @@ -1,31 +1,50 @@ -/* The standard CSS for doxygen */ +/* The standard CSS for doxygen 1.8.6 */ body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 13px; - line-height: 1.3; + font: 400 14px/22px Roboto,sans-serif; } /* @group Heading Levels */ -h1 { +h1.groupheader { font-size: 150%; } .title { + font: 400 14px/28px Roboto,sans-serif; font-size: 150%; font-weight: bold; margin: 10px 2px; } -h2 { - font-size: 120%; +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; } -h3 { +h3.groupheader { font-size: 100%; } +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + dt { font-weight: bold; } @@ -37,10 +56,14 @@ div.multicol { -webkit-column-count: 3; } -p.startli, p.startdd, p.starttd { +p.startli, p.startdd { margin-top: 2px; } +p.starttd { + margin-top: 0px; +} + p.endli { margin-bottom: 0px; } @@ -122,11 +145,11 @@ a.el { a.elRef { } -a.code, a.code:visited { +a.code, a.code:visited, a.line, a.line:visited { color: #4665A2; } -a.codeRef, a.codeRef:visited { +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } @@ -136,20 +159,72 @@ dl.el { margin-left: -1cm; } -.fragment { +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { font-family: monospace, fixed; - font-size: 105%; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; } -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; } div.ah { @@ -189,7 +264,7 @@ body { div.contents { margin-top: 10px; - margin-left: 8px; + margin-left: 12px; margin-right: 8px; } @@ -353,6 +428,24 @@ table.memberdecls { padding: 0px; } +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { @@ -367,8 +460,11 @@ table.memberdecls { color: #555; } -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #C4CFE5; +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; } .memItemLeft, .memTemplItemLeft { @@ -382,6 +478,7 @@ table.memberdecls { .memTemplParams { color: #4665A2; white-space: nowrap; + font-size: 80%; } /* @end */ @@ -414,14 +511,28 @@ table.memberdecls { padding: 0; margin-bottom: 10px; margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; } .memname { - white-space: nowrap; font-weight: bold; margin-left: 6px; } +.memname td { + vertical-align: bottom; +} + .memproto, dl.reflist dt { border-top: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; @@ -430,21 +541,21 @@ table.memberdecls { color: #253555; font-weight: bold; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; /* opera specific markup */ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; /* firefox specific markup */ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 8px; - -moz-border-radius-topleft: 8px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; /* webkit specific markup */ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 8px; - -webkit-border-top-left-radius: 8px; - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; } @@ -452,23 +563,24 @@ table.memberdecls { border-bottom: 1px solid #A8B8D9; border-left: 1px solid #A8B8D9; border-right: 1px solid #A8B8D9; - padding: 2px 5px; + padding: 6px 10px 2px 10px; background-color: #FBFCFD; border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; /* opera specific markup */ - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); /* firefox specific markup */ - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); /* webkit specific markup */ - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); } dl.reflist dt { @@ -495,9 +607,13 @@ dl.reflist dd { .paramname em { font-style: normal; } +.paramname code { + line-height: 14px; +} .params, .retval, .exception, .tparams { - border-spacing: 6px 2px; + margin-left: 0px; + padding-left: 0px; } .params .paramname, .retval .paramname { @@ -515,105 +631,117 @@ dl.reflist dd { vertical-align: top; } +table.mlabels { + border-spacing: 0px; +} +td.mlabels-left { + width: 100%; + padding: 0px; +} +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ +span.mlabels { + margin-left: 8px; +} -.ftvtree { - font-family: sans-serif; - margin: 0px; +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; } -/* these are for tree view when used as main index */ -.directory { - font-size: 9pt; - font-weight: bold; - margin: 5px; -} -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} +/* @end */ -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ +/* these are for tree view when not used as main index */ -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; } -*/ -.directory > h3 { - margin-top: 0; +.directory table { + border-collapse:collapse; } -.directory p { - margin: 0px; - white-space: nowrap; +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; } -.directory div { - display: none; - margin: 0px; +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; } -.directory img { - vertical-align: -30%; +.directory td.entry a { + outline:none; } -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; +.directory td.entry a img { + border: none; } -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); } -.directory-alt > h3 { - margin-top: 0; +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; } -.directory-alt p { - margin: 0px; - white-space: nowrap; +.directory img { + vertical-align: -30%; } -.directory-alt div { - display: none; - margin: 0px; +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; } -.directory-alt img { - vertical-align: -30%; +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; } -/* @end */ - div.dynheader { margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } address { @@ -641,7 +769,7 @@ table.doxtable th { } table.fieldtable { - width: 100%; + /*width: 100%;*/ margin-bottom: 10px; border: 1px solid #A8B8D9; border-spacing: 0px; @@ -664,9 +792,21 @@ table.fieldtable { vertical-align: top; } +.fieldtable td.fieldname { + padding-top: 3px; +} + .fieldtable td.fielddoc { border-bottom: 1px solid #A8B8D9; - width: 100%; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; } .fieldtable tr:last-child td { @@ -707,6 +847,7 @@ table.fieldtable { font-size: 11px; background-image:url('tab_b.png'); background-repeat:repeat-x; + background-position: 0 -5px; height:30px; line-height:30px; color:#8AA0CC; @@ -734,6 +875,10 @@ table.fieldtable { display:block; text-decoration: none; outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; } .navpath li.navelem a:hover @@ -771,9 +916,7 @@ div.summary a div.ingroups { - margin-left: 5px; font-size: 8pt; - padding-left: 5px; width: 50%; text-align: left; } @@ -794,7 +937,7 @@ div.header div.headertitle { - padding: 5px 5px 5px 7px; + padding: 5px 5px 5px 10px; } dl @@ -805,42 +948,63 @@ dl /* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ dl.section { - border-left:4px solid; - padding: 0 0 0 6px; + margin-left: 0px; + padding-left: 0px; } dl.note { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #D0C000; } dl.warning, dl.attention { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #FF0000; } dl.pre, dl.post, dl.invariant { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #00D000; } dl.deprecated { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #505050; } dl.todo { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #00C0E0; } dl.test { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #3030E0; } dl.bug { + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; border-color: #C08050; } @@ -905,6 +1069,11 @@ dl.section dd { text-align: center; } +.diagraph +{ + text-align: center; +} + .caption { font-weight: bold; @@ -980,6 +1149,201 @@ div.toc li.level4 { margin-left: 45px; } +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} @media print { @@ -998,15 +1362,5 @@ div.toc li.level4 { overflow:inherit; display:inline; } - pre.fragment - { - overflow: visible; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - } } diff --git a/zenxml/doc/doxygen.png b/zenxml/doc/doxygen.png Binary files differindex 635ed52f..3ff17d80 100644 --- a/zenxml/doc/doxygen.png +++ b/zenxml/doc/doxygen.png diff --git a/zenxml/doc/error_8h_source.html b/zenxml/doc/error_8h_source.html index 8986a17b..91e0421e 100644 --- a/zenxml/doc/error_8h_source.html +++ b/zenxml/doc/error_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: error.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,37 +73,41 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">error.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="keyword">namespace </span>zen -<a name="l00011"></a>00011 { -<a name="l00013"></a><a class="code" href="structzen_1_1_xml_error.html">00013</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a> -<a name="l00014"></a>00014 { -<a name="l00015"></a>00015 <span class="keyword">virtual</span> ~<a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a>() {} -<a name="l00016"></a>00016 }; -<a name="l00017"></a>00017 } -<a name="l00018"></a>00018 -<a name="l00019"></a>00019 <span class="preprocessor">#endif //ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> {</div> +<div class="line"><a name="l00013"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_error.html"> 13</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> {</div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keyword">virtual</span> ~<a class="code" href="structzen_1_1_xml_error.html">XmlError</a>() {}</div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> };</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> }</div> +<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div> +<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#endif //ZEN_XML_ERROR_HEADER_018734618433021489473214873214</span></div> +<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/files.html b/zenxml/doc/files.html deleted file mode 100644 index 31fcf4fd..00000000 --- a/zenxml/doc/files.html +++ /dev/null @@ -1,118 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<title>zen::Xml: File List</title> - -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="search/search.js"></script> -<script type="text/javascript"> - $(document).ready(function() { searchBox.OnSelectItem(0); }); -</script> - -</head> -<body> -<div id="top"><!-- do not remove this div! --> - - -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - - <td style="padding-left: 0.5em;"> - <div id="projectname">zen::Xml - - </div> - <div id="projectbrief">Simple C++ XML Processing</div> - </td> - - - - </tr> - </tbody> -</table> -</div> - -<!-- Generated by Doxygen 1.8.0 --> -<script type="text/javascript"> -var searchBox = new SearchBox("searchBox", "search",false,'Search'); -</script> - <div id="navrow1" class="tabs"> - <ul class="tablist"> - <li><a href="index.html"><span>Main Page</span></a></li> - <li><a href="namespaces.html"><span>Namespaces</span></a></li> - <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> - <li> - <div id="MSearchBox" class="MSearchBoxInactive"> - <span class="left"> - <img id="MSearchSelect" src="search/mag_sel.png" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - alt=""/> - <input type="text" id="MSearchField" value="Search" accesskey="S" - onfocus="searchBox.OnSearchFieldFocus(true)" - onblur="searchBox.OnSearchFieldFocus(false)" - onkeyup="searchBox.OnSearchFieldChange(event)"/> - </span><span class="right"> - <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> - </span> - </div> - </li> - </ul> - </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li class="current"><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> -<!-- window showing the filter options --> -<div id="MSearchSelectWindow" - onmouseover="return searchBox.OnSearchSelectShow()" - onmouseout="return searchBox.OnSearchSelectHide()" - onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> - -<!-- iframe showing the search results (closed by default) --> -<div id="MSearchResultsWindow"> -<iframe src="javascript:void(0)" frameborder="0" - name="MSearchResults" id="MSearchResults"> -</iframe> -</div> - -<div class="header"> - <div class="headertitle"> -<div class="title">File List</div> </div> -</div><!--header--> -<div class="contents"> -<div class="textblock">Here is a list of all documented files with brief descriptions:</div><table> - <tr><td class="indexkey"><b>bind.h</b> <a href="bind_8h_source.html">[code]</a></td><td class="indexvalue">Map user data types to XML </td></tr> - <tr><td class="indexkey"><b>cvrt_struc.h</b> <a href="cvrt__struc_8h_source.html">[code]</a></td><td class="indexvalue">Handle conversion of arbitrary types to and from XML elements. See comments in <a class="el" href="cvrt__text_8h_source.html" title="Handle conversion of string-convertible types to and from std::string.">cvrt_text.h</a> </td></tr> - <tr><td class="indexkey"><b>cvrt_text.h</b> <a href="cvrt__text_8h_source.html">[code]</a></td><td class="indexvalue">Handle conversion of string-convertible types to and from std::string </td></tr> - <tr><td class="indexkey"><b>dom.h</b> <a href="dom_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr> - <tr><td class="indexkey"><b>error.h</b> <a href="error_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr> - <tr><td class="indexkey"><b>io.h</b> <a href="io_8h_source.html">[code]</a></td><td class="indexvalue">Save and load byte streams from files </td></tr> - <tr><td class="indexkey"><b>parser.h</b> <a href="parser_8h_source.html">[code]</a></td><td class="indexvalue">Convert an XML document object model (class XmlDoc) to and from a byte stream representation </td></tr> - <tr><td class="indexkey"><b>xml.h</b> <a href="xml_8h_source.html">[code]</a></td><td class="indexvalue"></td></tr> -</table> -</div><!-- contents --> - - -<hr class="footer"/><address class="footer"><small> -Generated by  <a href="http://www.doxygen.org/index.html"> -<img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 -</small></address> - -</body> -</html> diff --git a/zenxml/doc/functions.html b/zenxml/doc/functions.html index 956af32d..79dbc774 100644 --- a/zenxml/doc/functions.html +++ b/zenxml/doc/functions.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class Members</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -97,16 +86,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="#index_p"><span>p</span></a></li> <li><a href="#index_r"><span>r</span></a></li> <li><a href="#index_s"><span>s</span></a></li> - <li><a href="#index_x"><span>x</span></a></li> + <li class="current"><a href="#index_x"><span>x</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -154,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : <a class="el" href="classzen_1_1_xml_element.html#a5d672e8ccc7592442ab927bb267af658">zen::XmlElement</a> </li> <li>getChildren() -: <a class="el" href="classzen_1_1_xml_element.html#ac59268177d162931f937b6a7f235ad96">zen::XmlElement</a> +: <a class="el" href="classzen_1_1_xml_element.html#ae209dac9655bc36121abb87688ece41d">zen::XmlElement</a> </li> <li>getEncodingAs() : <a class="el" href="classzen_1_1_xml_doc.html#a64ece4a1f3f8c802192b8f31506535da">zen::XmlDoc</a> @@ -196,12 +185,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a> </li> <li>operator()() -: <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> -, <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> +, <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> </li> <li>operator[]() -: <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> -, <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> +, <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> </li> </ul> @@ -253,20 +242,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a> </li> <li>XmlIn() -: <a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a33de75412df69cb25e0fd8b3bc70c9f8">zen::XmlIn</a> </li> <li>XmlOut() : <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a> </li> </ul> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/functions_func.html b/zenxml/doc/functions_func.html index be8e5716..07af5877 100644 --- a/zenxml/doc/functions_func.html +++ b/zenxml/doc/functions_func.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class Members - Functions</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -95,16 +84,16 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="#index_p"><span>p</span></a></li> <li><a href="#index_r"><span>r</span></a></li> <li><a href="#index_s"><span>s</span></a></li> - <li><a href="#index_x"><span>x</span></a></li> + <li class="current"><a href="#index_x"><span>x</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -180,12 +169,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : <a class="el" href="classzen_1_1_xml_in.html#a954950849b52557369932ab2a8b4ad72">zen::XmlIn</a> </li> <li>operator()() -: <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> -, <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a98cc59f687c89549381e76105f8fb506">zen::XmlIn</a> +, <a class="el" href="classzen_1_1_xml_out.html#a09ca9144515e3c109b36062b0475c8eb">zen::XmlOut</a> </li> <li>operator[]() -: <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> -, <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a9b38167835a28eac9a2297f35f51e53d">zen::XmlIn</a> +, <a class="el" href="classzen_1_1_xml_out.html#a00f883d3f9d60535b06b5ae609dc8831">zen::XmlOut</a> </li> </ul> @@ -234,20 +223,18 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); : <a class="el" href="classzen_1_1_xml_doc.html#adbed9c31066d456a9cc8c610f15670ed">zen::XmlDoc</a> </li> <li>XmlIn() -: <a class="el" href="classzen_1_1_xml_in.html#ae072660cde71fd4695c04d074098b430">zen::XmlIn</a> +: <a class="el" href="classzen_1_1_xml_in.html#a5b48c9848e6c631a04cec2477ff85c0f">zen::XmlIn</a> </li> <li>XmlOut() : <a class="el" href="classzen_1_1_xml_out.html#aa80be3a56f70a58d2730a763166088c0">zen::XmlOut</a> </li> </ul> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/functions_vars.html b/zenxml/doc/functions_vars.html index ba8364ef..60a4de36 100644 --- a/zenxml/doc/functions_vars.html +++ b/zenxml/doc/functions_vars.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class Members - Variables</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -85,13 +74,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li class="current"><a href="functions_vars.html"><span>Variables</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -113,13 +102,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/hierarchy.html b/zenxml/doc/hierarchy.html index 363c134b..4e1b2175 100644 --- a/zenxml/doc/hierarchy.html +++ b/zenxml/doc/hierarchy.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Class Hierarchy</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -78,13 +67,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -98,25 +87,23 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <div class="title">Class Hierarchy</div> </div> </div><!--header--> <div class="contents"> -<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><ul> -<li><a class="el" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></li> -<li><a class="el" href="classzen_1_1_xml_element.html">zen::XmlElement</a></li> -<li><a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a><ul> -<li><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></li> -<li><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></li> -</ul> -</li> -<li><a class="el" href="classzen_1_1_xml_in.html">zen::XmlIn</a></li> -<li><a class="el" href="classzen_1_1_xml_out.html">zen::XmlOut</a></li> -</ul> +<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory"> +<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_doc.html" target="_self">zen::XmlDoc</a></td><td class="desc">The complete XML document </td></tr> +<tr id="row_1_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_element.html" target="_self">zen::XmlElement</a></td><td class="desc">An XML element </td></tr> +<tr id="row_2_" class="even"><td class="entry"><img id="arr_2_" src="ftv2mnode.png" alt="o" width="16" height="22" onclick="toggleFolder('2_')"/><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_error.html" target="_self">zen::XmlError</a></td><td class="desc">Exception base class for zen::Xml </td></tr> +<tr id="row_2_0_"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_file_error.html" target="_self">zen::XmlFileError</a></td><td class="desc">Exception thrown due to failed file I/O </td></tr> +<tr id="row_2_1_" class="even"><td class="entry"><img src="ftv2vertline.png" alt="|" width="16" height="22" /><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="structzen_1_1_xml_parsing_error.html" target="_self">zen::XmlParsingError</a></td><td class="desc">Exception thrown due to an XML parsing error </td></tr> +<tr id="row_3_"><td class="entry"><img src="ftv2node.png" alt="o" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_in.html" target="_self">zen::XmlIn</a></td><td class="desc">Proxy class to conveniently convert XML structure to user data </td></tr> +<tr id="row_4_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2cl.png" alt="C" width="24" height="22" /><a class="el" href="classzen_1_1_xml_out.html" target="_self">zen::XmlOut</a></td><td class="desc">Proxy class to conveniently convert user data into XML structure </td></tr> +</table> +</div><!-- directory --> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/index.html b/zenxml/doc/index.html index d7245a6b..1549b9f2 100644 --- a/zenxml/doc/index.html +++ b/zenxml/doc/index.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Overview</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li class="current"><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,13 +59,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -104,8 +93,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a class="el" href="index.html#sec_Structured_user_types">Structured user types</a> </li> <li><a class="el" href="index.html#sec_Type_Safety">Type Safety</a></li> </ul> -<h2><a class="anchor" id="sec_Rationale"></a> -Rationale</h2> +<h1><a class="anchor" id="sec_Rationale"></a> +Rationale</h1> <p>zen::Xml is an XML library serializing structured user data in a convenient way. Using compile-time information gathered by techniques of template metaprogramming it minimizes the manual overhead required and frees the user from implementing fundamental type conversions by himself. Basic data types such as</p> <ul> <li><b>all</b> built-in arithmetic numbers,</li> @@ -123,63 +112,63 @@ Rationale</h2> <li>easily extensible API: allow for internationalization, fine-granular error handling, and custom file I/O</li> </ul> <p>The design follows the philosophy of the Loki library: <br/> - <a href="http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy">http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy</a></p> -<h2><a class="anchor" id="sec_Quick_Start"></a> -Quick Start</h2> +<a href="http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy">http://loki-lib.sourceforge.net/index.php?n=Main.Philosophy</a></p> +<h1><a class="anchor" id="sec_Quick_Start"></a> +Quick Start</h1> <p>1. Download zen::Xml: <a href="http://sourceforge.net/projects/zenxml">http://sourceforge.net/projects/zenxml</a></p> -<p>2. Setup a preprocessor macro for your project to identify the platform (this is only required if you use C-stream-based file IO) </p> -<div class="fragment"><pre class="fragment"> ZEN_PLATFORM_WINDOWS - or - ZEN_PLATFORM_OTHER -</pre></div><p>3. For optimal performance define this global macro in release build: (following convention of the <code>assert</code> macro) </p> -<div class="fragment"><pre class="fragment"> NDEBUG -</pre></div><p>4. Include the main header: </p> -<div class="fragment"><pre class="fragment"><span class="preprocessor">#include <zenxml/xml.h></span> -</pre></div><p>5. Start serializing user data:</p> -<div class="fragment"><pre class="fragment"><span class="keywordtype">size_t</span> a = 10; -<span class="keywordtype">double</span> b = 2.0; -<span class="keywordtype">int</span> c = -1; -</pre></div><div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span> - -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); <span class="comment">//the simplest way to fill the document is to use a data output proxy</span> -out[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span> -out[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map data types to XML elements</span> -out[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span> - -<span class="keywordflow">try</span> -{ - <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw zen::XmlFileError</span> -} -<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">zen::XmlFileError</a>& e) { <span class="comment">/* handle error */</span> } -</pre></div><p>The following XML file will be created: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<p>2. Setup one of the following preprocessor macros for your project to identify the platform (this is only required if you use C-stream-based file IO) </p> +<div class="fragment"><div class="line">ZEN_WIN</div> +<div class="line">ZEN_LINUX </div> +<div class="line">ZEN_MAC</div> +</div><!-- fragment --><p>3. For optimal performance define this global macro in release build: (following convention of the <code>assert</code> macro) </p> +<div class="fragment"><div class="line">NDEBUG</div> +</div><!-- fragment --><p>4. Include the main header: </p> +<div class="fragment"><div class="line"><span class="preprocessor">#include <zenxml/xml.h></span></div> +</div><!-- fragment --><p>5. Start serializing user data:</p> +<div class="fragment"><div class="line"><span class="keywordtype">size_t</span> a = 10;</div> +<div class="line"><span class="keywordtype">double</span> b = 2.0;</div> +<div class="line"><span class="keywordtype">int</span> c = -1;</div> +</div><!-- fragment --><div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc); <span class="comment">//the simplest way to fill the document is to use a data output proxy</span></div> +<div class="line">out[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span></div> +<div class="line">out[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map data types to XML elements</span></div> +<div class="line">out[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line"><span class="keywordflow">try</span></div> +<div class="line">{</div> +<div class="line"> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw zen::XmlFileError</span></div> +<div class="line">}</div> +<div class="line"><span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>& e) { <span class="comment">/* handle error */</span> }</div> +</div><!-- fragment --><p>The following XML file will be created: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <elem1>10</elem1> <elem2>2.000000</elem2> <elem3>-1</elem3> </Root> -</pre></div><p>Load an XML file and map its content to user data: </p> -<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span> - -<span class="keywordflow">try</span> -{ - <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span> -} -<span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> } - -<a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); <span class="comment">//the simplest way to read the document is to use a data input proxy</span> -in[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span> -in[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map XML elements into user data</span> -in[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span> - -<span class="comment">//check for mapping errors, i.e. missing elements or conversion errors: you may consider these as warnings only</span> -<span class="keywordflow">if</span> (in.errorsOccured()) -{ - std::vector<std::wstring> failedElements = in.getErrorsAs<std::wstring>(); - <span class="comment">/* generate error message showing the XML element names that failed to convert */</span> -} -</pre></div><h2><a class="anchor" id="sec_Supported_Platforms"></a> -Supported Platforms</h2> +</pre><p>Load an XML file and map its content to user data: </p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> +<div class="line"></div> +<div class="line"><span class="keywordflow">try</span></div> +<div class="line">{</div> +<div class="line"> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> +<div class="line">}</div> +<div class="line"><span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> }</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc); <span class="comment">//the simplest way to read the document is to use a data input proxy</span></div> +<div class="line">in[<span class="stringliteral">"elem1"</span>](a); <span class="comment">//</span></div> +<div class="line">in[<span class="stringliteral">"elem2"</span>](b); <span class="comment">//map XML elements into user data</span></div> +<div class="line">in[<span class="stringliteral">"elem3"</span>](c); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line"><span class="comment">//check for mapping errors, i.e. missing elements or conversion errors: you may consider these as warnings only</span></div> +<div class="line"><span class="keywordflow">if</span> (in.errorsOccured())</div> +<div class="line">{</div> +<div class="line"> std::vector<std::wstring> failedElements = in.getErrorsAs<std::wstring>();</div> +<div class="line"> <span class="comment">/* generate error message showing the XML element names that failed to convert */</span></div> +<div class="line">}</div> +</div><!-- fragment --><h1><a class="anchor" id="sec_Supported_Platforms"></a> +Supported Platforms</h1> <p>zen::Xml is written in a platform independent manner and runs on any rudimentary C++11 compliant compiler. It has been tested successfully under:</p> <ul> <li>Windows:<ol type="1"> @@ -188,113 +177,103 @@ Supported Platforms</h2> <li>MinGW: GCC 4.5.2 - 32 bit</li> </ol> </li> -</ul> -<ul> <li>Linux:<ol type="1"> <li>GCC 4.5.2 - 32 bit</li> <li>GCC 4.5.2 - 64 bit</li> </ol> </li> -</ul> -<ul> <li>Mac OS X:<ol type="1"> <li>Clang 3.2 - 64 bit</li> </ol> </li> </ul> <p><b>Note:</b> In order to enable C++11 features in GCC it is required to specify either of the following compiler options: </p> -<div class="fragment"><pre class="fragment">-std=c++11 +<pre class="fragment">-std=c++11 -std=c++0x -std=gnu++0x -</pre></div><h2><a class="anchor" id="sec_Flexible_Programming_Model"></a> -Flexible Programming Model</h2> +</pre><h1><a class="anchor" id="sec_Flexible_Programming_Model"></a> +Flexible Programming Model</h1> <p>Depending on what granularity of control is required in a particular application, zen::Xml allows the user to choose between full control or simplicity. <br/> <br/> - The library is structured into the following parts, each of which can be used in isolation: <br/> +The library is structured into the following parts, each of which can be used in isolation: <br/> <br/> - <b><File></b> <br/> - |<br/> - | <a class="el" href="io_8h_source.html" title="Save and load byte streams from files.">io.h</a><br/> - |<br/> - <b><Byte Stream></b><br/> - |<br/> - | <a class="el" href="parser_8h_source.html" title="Convert an XML document object model (class XmlDoc) to and from a byte stream representation.">parser.h</a><br/> - |<br/> - <b><Document Object Model></b><br/> - |<br/> - | <a class="el" href="bind_8h_source.html" title="Map user data types to XML.">bind.h</a><br/> - |<br/> - <b><C++ user data></b> <br/> +<b><File></b> <br/> +|<br/> +| <a class="el" href="io_8h_source.html" title="Save and load byte streams from files. ">io.h</a><br/> +|<br/> +<b><Byte Stream></b><br/> +|<br/> +| <a class="el" href="parser_8h_source.html" title="Convert an XML document object model (class XmlDoc) to and from a byte stream representation. ">parser.h</a><br/> +|<br/> +<b><Document Object Model></b><br/> +|<br/> +| <a class="el" href="bind_8h_source.html" title="Map user data types to XML. ">bind.h</a><br/> +|<br/> +<b><C++ user data></b> <br/> <br/> </p> <ul> -<li>Save an XML document to memory <div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - ... <span class="comment">//fill it</span> -std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc); <span class="comment">//throw ()</span> -<span class="comment">/* you now have a binary XML stream */</span> - -<a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(stream, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span> -<span class="comment">//if all you need is to store XmlDoc in a file direcly you can use zen::save() instead</span> -</pre></div></li> -</ul> -<ul> -<li>Load XML document from memory <div class="fragment"><pre class="fragment"><span class="comment">//get XML byte stream:</span> -std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(<span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span> - -<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; -<span class="comment">//parse byte stream into an XML document:</span> -<a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span> -<span class="comment">//if all you need is to load an XmlDoc from a file you can use zen::load() directly</span> -</pre></div></li> -</ul> -<ul> -<li>Fine-granular error checking with the data input proxy <div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); -<span class="comment">//map XML elements into user data</span> -<span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem1"</span>](a)) - <span class="keywordflow">throw</span> MyCustomException(); -<span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem2"</span>](b)) - <span class="keywordflow">throw</span> MyCustomException(); -<span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem3"</span>](c)) - <span class="keywordflow">throw</span> MyCustomException(); - -<span class="comment">//if (in.errorsOccured()) ... <- not required here: contains the same conversion errors checked manually before</span> -</pre></div></li> -</ul> -<ul> +<li>Save an XML document to memory <div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"> ... <span class="comment">//fill it</span></div> +<div class="line">std::string stream = <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc); <span class="comment">//throw ()</span></div> +<div class="line"><span class="comment">/* you now have a binary XML stream */</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(stream, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +<div class="line"><span class="comment">//if all you need is to store XmlDoc in a file direcly you can use zen::save() instead</span></div> +</div><!-- fragment --></li> +<li>Load XML document from memory <div class="fragment"><div class="line"><span class="comment">//get XML byte stream:</span></div> +<div class="line">std::string stream = <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(<span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"><span class="comment">//parse byte stream into an XML document:</span></div> +<div class="line"><a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(stream, doc); <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><span class="comment">//if all you need is to load an XmlDoc from a file you can use zen::load() directly</span></div> +</div><!-- fragment --></li> +<li>Fine-granular error checking with the data input proxy <div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc);</div> +<div class="line"><span class="comment">//map XML elements into user data</span></div> +<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem1"</span>](a))</div> +<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> +<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem2"</span>](b))</div> +<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> +<div class="line"><span class="keywordflow">if</span> (!in[<span class="stringliteral">"elem3"</span>](c))</div> +<div class="line"> <span class="keywordflow">throw</span> MyCustomException();</div> +<div class="line"></div> +<div class="line"><span class="comment">//if (in.errorsOccured()) ... <- not required here: contains the same conversion errors checked manually before</span></div> +</div><!-- fragment --></li> <li>Access the Document Object Model directly (without input/output proxy) <br/> <br/> - The full power of type conversions which is available via the input/output proxy classes <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> and <a class="el" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> is also available for the document object model! <div class="fragment"><pre class="fragment"><span class="keyword">using namespace </span>zen; - -<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a> doc; - -<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>& child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document's root element.">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9" title="Create a new child element and return a reference to it.">addChild</a>(<span class="stringliteral">"elem1"</span>); -child.<a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01" title="Set the value of this element.">setValue</a>(1234); - -<a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span> -</pre></div> <br/> - <div class="fragment"><pre class="fragment"><span class="keyword">using namespace </span>zen; - -<a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a> doc; -<a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span> - -<a class="code" href="classzen_1_1_xml_element.html" title="An XML element.">XmlElement</a>* child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d" title="Get a const reference to the document's root element.">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e" title="Retrieve a child element with the given name.">getChild</a>(<span class="stringliteral">"elem1"</span>); -<span class="keywordflow">if</span> (child) -{ - <span class="keywordtype">int</span> value = -1; - <span class="keywordflow">if</span> (!child->getValue(value)) - ... <span class="comment">//handle conversion error</span> -} -<span class="keywordflow">else</span> - ... <span class="comment">//XML element not found</span> -</pre></div></li> +The full power of type conversions which is available via the input/output proxy classes <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">zen::XmlIn</a> and <a class="el" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure. ">zen::XmlOut</a> is also available for the document object model! <div class="fragment"><div class="line"><span class="keyword">using namespace </span>zen;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> doc;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>& child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a653caffa6fad89db7d14f67f987ad0f9">addChild</a>(<span class="stringliteral">"elem1"</span>);</div> +<div class="line">child.<a class="code" href="classzen_1_1_xml_element.html#aaf3a26f6199fc88cce7d9d911ba21b01">setValue</a>(1234);</div> +<div class="line"></div> +<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +</div><!-- fragment --> <br/> +<div class="fragment"><div class="line"><span class="keyword">using namespace </span>zen;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> doc;</div> +<div class="line"><a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(<span class="stringliteral">"file.xml"</span>, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_element.html">XmlElement</a>* child = doc.<a class="code" href="classzen_1_1_xml_doc.html#ad4a9594d93885fc1a12db28e8246648d">root</a>().<a class="code" href="classzen_1_1_xml_element.html#a3ab82b1720460487f4afabcd115d0c7e">getChild</a>(<span class="stringliteral">"elem1"</span>);</div> +<div class="line"><span class="keywordflow">if</span> (child)</div> +<div class="line">{</div> +<div class="line"> <span class="keywordtype">int</span> value = -1;</div> +<div class="line"> <span class="keywordflow">if</span> (!child->getValue(value))</div> +<div class="line"> ... <span class="comment">//handle conversion error</span></div> +<div class="line">}</div> +<div class="line"><span class="keywordflow">else</span></div> +<div class="line"> ... <span class="comment">//XML element not found</span></div> +</div><!-- fragment --></li> </ul> -<h2><a class="anchor" id="sec_Structured_XML_element_access"></a> -Structured XML element access</h2> -<div class="fragment"><pre class="fragment"><span class="comment">//write a value into one deeply nested XML element - note the different types used seamlessly: char[], wchar_t[], char, wchar_t, int</span> -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); -out[<span class="stringliteral">"elemento1"</span>][L<span class="stringliteral">"элемент2"</span>][L<span class="stringliteral">"要素3"</span>][L<span class="stringliteral">"στοιχείο4"</span>][<span class="stringliteral">"elem5"</span>][L<span class="stringliteral">"元素6"</span>][L<span class="stringliteral">'元'</span>][<span class="charliteral">'z'</span>](-1234); -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<h1><a class="anchor" id="sec_Structured_XML_element_access"></a> +Structured XML element access</h1> +<div class="fragment"><div class="line"><span class="comment">//write a value into one deeply nested XML element - note the different types used seamlessly: char[], wchar_t[], char, wchar_t, int</span></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[<span class="stringliteral">"elemento1"</span>][L<span class="stringliteral">"элемент2"</span>][L<span class="stringliteral">"要素3"</span>][L<span class="stringliteral">"στοιχείο4"</span>][<span class="stringliteral">"elem5"</span>][L<span class="stringliteral">"元素6"</span>][L<span class="stringliteral">'元'</span>][<span class="charliteral">'z'</span>](-1234);</div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <elemento1> <элемент2> @@ -312,33 +291,33 @@ out[<span class="stringliteral">"elemento1"</span>][L<span class="stri </элемент2> </elemento1> </Root> -</pre></div><h2><a class="anchor" id="sec_Access_XML_attributes"></a> -Access XML attributes</h2> -<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); -out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, -1); <span class="comment">//</span> -out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2.1); <span class="comment">//write data into XML attributes</span> -out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, <span class="keyword">true</span>); <span class="comment">//</span> - -<a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span> -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +</pre><h1><a class="anchor" id="sec_Access_XML_attributes"></a> +Access XML attributes</h1> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, -1); <span class="comment">//</span></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, 2.1); <span class="comment">//write data into XML attributes</span></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr3"</span>, <span class="keyword">true</span>); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <elem attr1="-1" attr2="2.1" attr3="true"/> </Root> -</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_built_in"></a> -Automatic conversion for built-in arithmetic types</h2> +</pre><h1><a class="anchor" id="sec_Automatic_conversion_built_in"></a> +Automatic conversion for built-in arithmetic types</h1> <p>All built-in arithmetic types and <code>bool</code> are detected at compile time and a proper conversion is applied. Common conversions for integer-like types such as <code>int</code>, <code>long</code>, <code>long long</code>, ect. as well as floating point types are optimized for maximum performance.</p> -<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); - -out[<span class="stringliteral">"int"</span>] (-1234); -out[<span class="stringliteral">"double"</span>](1.23); -out[<span class="stringliteral">"float"</span>] (4.56f); -out[<span class="stringliteral">"ulong"</span>] (1234UL); -out[<span class="stringliteral">"bool"</span>] (<span class="keyword">false</span>); -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line"></div> +<div class="line">out[<span class="stringliteral">"int"</span>] (-1234);</div> +<div class="line">out[<span class="stringliteral">"double"</span>](1.23);</div> +<div class="line">out[<span class="stringliteral">"float"</span>] (4.56f);</div> +<div class="line">out[<span class="stringliteral">"ulong"</span>] (1234UL);</div> +<div class="line">out[<span class="stringliteral">"bool"</span>] (<span class="keyword">false</span>);</div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <int>-1234</int> <double>1.23</double> @@ -346,8 +325,8 @@ out[<span class="stringliteral">"bool"</span>] (<span class="keyword" <ulong>1234</ulong> <bool>false</bool> </Root> -</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_string"></a> -Automatic conversion for string-like types</h2> +</pre><h1><a class="anchor" id="sec_Automatic_conversion_string"></a> +Automatic conversion for string-like types</h1> <p>The document object model of zen::Xml internally stores all names and values as a std::string. Consequently everything that is not a std::string but is "string-like" is UTF-converted into a std::string representation. By default zen::Xml accepts all character arrays like <code>char[]</code>, <code>wchar_t[]</code>, <code>char*</code>, <code>wchar_t*</code>, single characters like <code>char</code>, <code>wchar_t</code>, standard string classes like <code>std::string</code>, <code>std::wstring</code> and user-defined string classes. If the input string is based on <code>char</code>, it will simply be copied and thereby preserves any local encodings. If the input string is based on <code>wchar_t</code> it will be converted to an UTF-8 encoded <code>std::string</code>. The correct <code>wchar_t</code> encoding of the system will be detected at compile time, for example UTF-16 on Windows, UTF-32 on most Linux distributions.</p> <p><b>Note:</b> User-defined string classes are automatically supported if they fulfill the following <b>string concept</b> by defining:</p> <ol type="1"> @@ -355,23 +334,23 @@ Automatic conversion for string-like types</h2> <li>A member function <code>c_str()</code> returning something that can be converted into a <code>const value_type*</code></li> <li>A member function <code>length()</code> returning the number of characters returned by <code>c_str()</code></li> </ol> -<div class="fragment"><pre class="fragment">std::string elem1 = <span class="stringliteral">"elemento1"</span>; -std::wstring elem2 = L<span class="stringliteral">"элемент2"</span>; -wxString elem3 = L<span class="stringliteral">"要素3"</span>; -MyString elem4 = L<span class="stringliteral">"στοιχείο4"</span>; - -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); - -out[<span class="stringliteral">"string"</span>] (elem1); -out[<span class="stringliteral">"wstring"</span>] (elem2); -out[<span class="stringliteral">"wxString"</span>] (elem3); -out[<span class="stringliteral">"MyString"</span>] (elem4); -out[<span class="stringliteral">"char[6]"</span>] (<span class="stringliteral">"elem5"</span>); -out[<span class="stringliteral">"wchar_t[4]"</span>](L<span class="stringliteral">"元素6"</span>); -out[<span class="stringliteral">"wchar_t"</span>] (L<span class="stringliteral">'元'</span>); -out[<span class="stringliteral">"char"</span>] (<span class="charliteral">'z'</span>); -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<div class="fragment"><div class="line">std::string elem1 = <span class="stringliteral">"elemento1"</span>;</div> +<div class="line">std::wstring elem2 = L<span class="stringliteral">"элемент2"</span>;</div> +<div class="line">wxString elem3 = L<span class="stringliteral">"要素3"</span>;</div> +<div class="line">MyString elem4 = L<span class="stringliteral">"στοιχείο4"</span>;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line"></div> +<div class="line">out[<span class="stringliteral">"string"</span>] (elem1);</div> +<div class="line">out[<span class="stringliteral">"wstring"</span>] (elem2);</div> +<div class="line">out[<span class="stringliteral">"wxString"</span>] (elem3);</div> +<div class="line">out[<span class="stringliteral">"MyString"</span>] (elem4);</div> +<div class="line">out[<span class="stringliteral">"char[6]"</span>] (<span class="stringliteral">"elem5"</span>);</div> +<div class="line">out[<span class="stringliteral">"wchar_t[4]"</span>](L<span class="stringliteral">"元素6"</span>);</div> +<div class="line">out[<span class="stringliteral">"wchar_t"</span>] (L<span class="stringliteral">'元'</span>);</div> +<div class="line">out[<span class="stringliteral">"char"</span>] (<span class="charliteral">'z'</span>);</div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <string>elemento1</string> <wstring>элемент2</wstring> @@ -382,8 +361,8 @@ out[<span class="stringliteral">"char"</span>] (<span class="char <wchar_t>元</wchar_t> <char>z</char> </Root> -</pre></div><h2><a class="anchor" id="sec_Automatic_conversion_STL"></a> -Automatic conversion for STL container types</h2> +</pre><h1><a class="anchor" id="sec_Automatic_conversion_STL"></a> +Automatic conversion for STL container types</h1> <ul> <li>User-defined STL compatible types are automatically supported if they fulfill the following <b>container concept</b> by defining:<ol type="1"> <li>A typedef named <code>value_type</code> for the underlying element type of the container</li> @@ -397,36 +376,34 @@ Automatic conversion for STL container types</h2> <li>A member function <code>clear()</code> removing all elements from the container</li> </ol> </li> -</ul> -<ul> <li>In order to support combinations of user types and STL containers such as <code>std::vector<MyType></code> or <code>std::vector<std::list<MyType>></code> it is sufficient to only integrate <code>MyType</code> into zen::Xml. <br/> - See <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a></li> +See <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a></li> </ul> -<div class="fragment"><pre class="fragment">std::deque <float> testDeque; -std::list <size_t> testList; -std::map <double, char> testMap; -std::multimap<short, double> testMultiMap; -std::set <int> testSet; -std::multiset<std::string> testMultiSet; -std::vector <wchar_t> testVector; -std::vector <std::list<wchar_t>> testVectorList; -std::pair <char, wchar_t> testPair; - -<span class="comment">/* fill container */</span> - -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); - -out[<span class="stringliteral">"deque"</span>] (testDeque); -out[<span class="stringliteral">"list"</span>] (testList); -out[<span class="stringliteral">"map"</span>] (testMap); -out[<span class="stringliteral">"multimap"</span>] (testMultiMap); -out[<span class="stringliteral">"set"</span>] (testSet); -out[<span class="stringliteral">"multiset"</span>] (testMultiSet); -out[<span class="stringliteral">"vector"</span>] (testVector); -out[<span class="stringliteral">"vect_list"</span>](testVectorList); -out[<span class="stringliteral">"pair"</span> ] (testPair); -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<div class="fragment"><div class="line">std::deque <float> testDeque;</div> +<div class="line">std::list <size_t> testList;</div> +<div class="line">std::map <double, char> testMap;</div> +<div class="line">std::multimap<short, double> testMultiMap;</div> +<div class="line">std::set <int> testSet;</div> +<div class="line">std::multiset<std::string> testMultiSet;</div> +<div class="line">std::vector <wchar_t> testVector;</div> +<div class="line">std::vector <std::list<wchar_t>> testVectorList;</div> +<div class="line">std::pair <char, wchar_t> testPair;</div> +<div class="line"></div> +<div class="line"><span class="comment">/* fill container */</span></div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line"></div> +<div class="line">out[<span class="stringliteral">"deque"</span>] (testDeque);</div> +<div class="line">out[<span class="stringliteral">"list"</span>] (testList);</div> +<div class="line">out[<span class="stringliteral">"map"</span>] (testMap);</div> +<div class="line">out[<span class="stringliteral">"multimap"</span>] (testMultiMap);</div> +<div class="line">out[<span class="stringliteral">"set"</span>] (testSet);</div> +<div class="line">out[<span class="stringliteral">"multiset"</span>] (testMultiSet);</div> +<div class="line">out[<span class="stringliteral">"vector"</span>] (testVector);</div> +<div class="line">out[<span class="stringliteral">"vect_list"</span>](testVectorList);</div> +<div class="line">out[<span class="stringliteral">"pair"</span> ] (testPair);</div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <deque> <Item>1.234</Item> @@ -490,106 +467,106 @@ out[<span class="stringliteral">"pair"</span> ] (testPair); <two>â</two> </pair> </Root> -</pre></div><h2><a class="anchor" id="sec_Support_user_defined"></a> -Support for user-defined types</h2> -<p>User types can be integrated into zen::Xml by providing specializations of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">zen::readText()</a> and <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">zen::writeText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a>. The first pair should be used for all non-structured types that can be represented as a simple text string. This specialization is then used to convert the type to XML elements and XML attributes. The second pair should be specialized for structured types that require an XML representation as a hierarchy of elements. This specialization is used when converting the type to XML elements only. <br/> +</pre><h1><a class="anchor" id="sec_Support_user_defined"></a> +Support for user-defined types</h1> +<p>User types can be integrated into zen::Xml by providing specializations of <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes. ">zen::readText()</a> and <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes. ">zen::writeText()</a> or <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a>. The first pair should be used for all non-structured types that can be represented as a simple text string. This specialization is then used to convert the type to XML elements and XML attributes. The second pair should be specialized for structured types that require an XML representation as a hierarchy of elements. This specialization is used when converting the type to XML elements only. <br/> <br/> - See section <a class="el" href="index.html#sec_Type_Safety">Type Safety</a> for a discussion of type categories. <br/> +See section <a class="el" href="index.html#sec_Type_Safety">Type Safety</a> for a discussion of type categories. <br/> <br/> - <b>Example: Specialization for an enum type</b> </p> -<div class="fragment"><pre class="fragment"><span class="keyword">enum</span> UnitTime -{ - UNIT_SECOND, - UNIT_MINUTE, - UNIT_HOUR -}; - -<span class="keyword">namespace </span>zen -{ -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> UnitTime& value, std::string& output) -{ - <span class="keywordflow">switch</span> (value) - { - <span class="keywordflow">case</span> UNIT_SECOND: output = <span class="stringliteral">"second"</span>; <span class="keywordflow">break</span>; - <span class="keywordflow">case</span> UNIT_MINUTE: output = <span class="stringliteral">"minute"</span>; <span class="keywordflow">break</span>; - <span class="keywordflow">case</span> UNIT_HOUR: output = <span class="stringliteral">"hour"</span> ; <span class="keywordflow">break</span>; - } -} - -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, UnitTime& value) -{ - std::string tmp = input; - zen::trim(tmp); - <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"second"</span>) - value = UNIT_SECOND; - <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"minute"</span>) - value = UNIT_MINUTE; - <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"hour"</span>) - value = UNIT_HOUR; - <span class="keywordflow">else</span> - <span class="keywordflow">return</span> <span class="keyword">false</span>; - <span class="keywordflow">return</span> <span class="keyword">true</span>; -} -} -</pre></div><p><b>Example: Brute-force specialization for an enum type</b> </p> -<div class="fragment"><pre class="fragment"><span class="keyword">namespace </span>zen -{ -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f" title="Convert user data into text - used by XML elements and attributes.">writeText</a>(<span class="keyword">const</span> EnumType& value, std::string& output) -{ - output = zen::numberTo<std::string>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(value)); <span class="comment">//treat enum like an integer</span> -} - -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff" title="Convert text to user data - used by XML elements and attributes.">readText</a>(<span class="keyword">const</span> std::string& input, EnumType& value) -{ - value = <span class="keyword">static_cast<</span>EnumType<span class="keyword">></span>(zen::stringTo<int>(input)); <span class="comment">//treat enum like an integer</span> - <span class="keywordflow">return</span> <span class="keyword">true</span>; -} -} -</pre></div><p><b>Example: Specialization for a structured user type</b> </p> -<div class="fragment"><pre class="fragment"><span class="keyword">struct </span>Config -{ - <span class="keywordtype">int</span> a; - std::wstring b; -}; - -<span class="keyword">namespace </span>zen -{ -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">writeStruc</a>(<span class="keyword">const</span> Config& value, XmlElement& output) -{ - XmlOut out(output); - out[<span class="stringliteral">"number"</span> ](value.a); - out[<span class="stringliteral">"address"</span>](value.b); -} - -<span class="keyword">template</span> <> <span class="keyword">inline</span> -<span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">readStruc</a>(<span class="keyword">const</span> XmlElement& input, Config& value) -{ - XmlIn in(input); - <span class="keywordtype">bool</span> rv1 = in[<span class="stringliteral">"number"</span> ](value.a); - <span class="keywordtype">bool</span> rv2 = in[<span class="stringliteral">"address"</span>](value.b); - <span class="keywordflow">return</span> rv1 && rv2; -} -} - -<span class="keywordtype">int</span> main() -{ - Config cfg = { 2, L<span class="stringliteral">"Abc 3"</span> }; - - std::vector<Config> cfgList; - cfgList.push_back(cfg); - - <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; - <a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); <span class="comment">//write to Xml via output proxy</span> - out[<span class="stringliteral">"config"</span>](cfgList); - <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d" title="Save XML document to a file.">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span> -} -</pre></div><p>The resulting XML: </p> -<div class="fragment"><pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> +<b>Example: Specialization for an enum type</b> </p> +<div class="fragment"><div class="line"><span class="keyword">enum</span> UnitTime</div> +<div class="line">{</div> +<div class="line"> UNIT_SECOND,</div> +<div class="line"> UNIT_MINUTE,</div> +<div class="line"> UNIT_HOUR</div> +<div class="line">};</div> +<div class="line"></div> +<div class="line"><span class="keyword">namespace </span>zen</div> +<div class="line">{</div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> UnitTime& value, std::string& output)</div> +<div class="line">{</div> +<div class="line"> <span class="keywordflow">switch</span> (value)</div> +<div class="line"> {</div> +<div class="line"> <span class="keywordflow">case</span> UNIT_SECOND: output = <span class="stringliteral">"second"</span>; <span class="keywordflow">break</span>;</div> +<div class="line"> <span class="keywordflow">case</span> UNIT_MINUTE: output = <span class="stringliteral">"minute"</span>; <span class="keywordflow">break</span>;</div> +<div class="line"> <span class="keywordflow">case</span> UNIT_HOUR: output = <span class="stringliteral">"hour"</span> ; <span class="keywordflow">break</span>;</div> +<div class="line"> }</div> +<div class="line">}</div> +<div class="line"></div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, UnitTime& value)</div> +<div class="line">{</div> +<div class="line"> std::string tmp = input;</div> +<div class="line"> zen::trim(tmp);</div> +<div class="line"> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"second"</span>)</div> +<div class="line"> value = UNIT_SECOND;</div> +<div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"minute"</span>)</div> +<div class="line"> value = UNIT_MINUTE;</div> +<div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tmp == <span class="stringliteral">"hour"</span>)</div> +<div class="line"> value = UNIT_HOUR;</div> +<div class="line"> <span class="keywordflow">else</span></div> +<div class="line"> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line">}</div> +<div class="line">}</div> +</div><!-- fragment --><p><b>Example: Brute-force specialization for an enum type</b> </p> +<div class="fragment"><div class="line"><span class="keyword">namespace </span>zen</div> +<div class="line">{</div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a>(<span class="keyword">const</span> EnumType& value, std::string& output)</div> +<div class="line">{</div> +<div class="line"> output = zen::numberTo<std::string>(<span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(value)); <span class="comment">//treat enum like an integer</span></div> +<div class="line">}</div> +<div class="line"></div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a>(<span class="keyword">const</span> std::string& input, EnumType& value)</div> +<div class="line">{</div> +<div class="line"> value = <span class="keyword">static_cast<</span>EnumType<span class="keyword">></span>(zen::stringTo<int>(input)); <span class="comment">//treat enum like an integer</span></div> +<div class="line"> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line">}</div> +<div class="line">}</div> +</div><!-- fragment --><p><b>Example: Specialization for a structured user type</b> </p> +<div class="fragment"><div class="line"><span class="keyword">struct </span>Config</div> +<div class="line">{</div> +<div class="line"> <span class="keywordtype">int</span> a;</div> +<div class="line"> std::wstring b;</div> +<div class="line">};</div> +<div class="line"></div> +<div class="line"><span class="keyword">namespace </span>zen</div> +<div class="line">{</div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a>(<span class="keyword">const</span> Config& value, XmlElement& output)</div> +<div class="line">{</div> +<div class="line"> XmlOut out(output);</div> +<div class="line"> out[<span class="stringliteral">"number"</span> ](value.a);</div> +<div class="line"> out[<span class="stringliteral">"address"</span>](value.b);</div> +<div class="line">}</div> +<div class="line"></div> +<div class="line"><span class="keyword">template</span> <> <span class="keyword">inline</span></div> +<div class="line"><span class="keywordtype">bool</span> <a class="code" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a>(<span class="keyword">const</span> XmlElement& input, Config& value)</div> +<div class="line">{</div> +<div class="line"> XmlIn in(input);</div> +<div class="line"> <span class="keywordtype">bool</span> rv1 = in[<span class="stringliteral">"number"</span> ](value.a);</div> +<div class="line"> <span class="keywordtype">bool</span> rv2 = in[<span class="stringliteral">"address"</span>](value.b);</div> +<div class="line"> <span class="keywordflow">return</span> rv1 && rv2;</div> +<div class="line">}</div> +<div class="line">}</div> +<div class="line"></div> +<div class="line"><span class="keywordtype">int</span> main()</div> +<div class="line">{</div> +<div class="line"> Config cfg = { 2, L<span class="stringliteral">"Abc 3"</span> };</div> +<div class="line"></div> +<div class="line"> std::vector<Config> cfgList;</div> +<div class="line"> cfgList.push_back(cfg);</div> +<div class="line"></div> +<div class="line"> <a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc;</div> +<div class="line"> <a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc); <span class="comment">//write to Xml via output proxy</span></div> +<div class="line"> out[<span class="stringliteral">"config"</span>](cfgList);</div> +<div class="line"> <a class="code" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a>(doc, <span class="stringliteral">"file.xml"</span>); <span class="comment">//throw XmlFileError</span></div> +<div class="line">}</div> +</div><!-- fragment --><p>The resulting XML: </p> +<pre class="fragment"><?xml version="1.0" encoding="UTF-8"?> <Root> <config> <Item> @@ -598,40 +575,40 @@ Support for user-defined types</h2> </Item> </config> </Root> -</pre></div><h2><a class="anchor" id="sec_Structured_user_types"></a> -Structured user types</h2> -<p>Although it is possible to enable conversion of structured user types by specializing <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data.">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element.">zen::writeStruc()</a> (see <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a>), this approach has one drawback: If a mapping error occurs when converting an XML element to structured user data, for example a child-element is missing, the input proxy class <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> is only able to detect that the whole conversion failed. It cannot say which child-elements in particular failed to convert. <br/> +</pre><h1><a class="anchor" id="sec_Structured_user_types"></a> +Structured user types</h1> +<p>Although it is possible to enable conversion of structured user types by specializing <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1" title="Convert XML element to structured user data. ">zen::readStruc()</a> and <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6" title="Convert structured user data into an XML element. ">zen::writeStruc()</a> (see <a class="el" href="index.html#sec_Support_user_defined">Support for user-defined types</a>), this approach has one drawback: If a mapping error occurs when converting an XML element to structured user data, for example a child-element is missing, the input proxy class <a class="el" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data. ">zen::XmlIn</a> is only able to detect that the whole conversion failed. It cannot say which child-elements in particular failed to convert. <br/> <br/> - Therefore it may be appropriate to convert structured types by calling subroutines in order to enable fine-granular logging:</p> -<div class="fragment"><pre class="fragment"><span class="keywordtype">void</span> readConfig(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a>& in, Config& cfg) -{ - in[<span class="stringliteral">"number"</span> ](value.a); <span class="comment">//failed conversions will now be logged for each single item by XmlIn</span> - in[<span class="stringliteral">"address"</span>](value.b); <span class="comment">//instead of only once for the complete Config type!</span> -} - - -<span class="keywordtype">void</span> loadConfig(<span class="keyword">const</span> wxString& filename, Config& cfg) -{ - <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span> - - <span class="keywordflow">try</span> - { - <a class="code" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee" title="Load XML document from a file.">load</a>(filename, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span> - } - <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> } - - <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> in(doc); - - <a class="code" href="classzen_1_1_xml_in.html" title="Proxy class to conveniently convert XML structure to user data.">zen::XmlIn</a> inConfig = in[<span class="stringliteral">"config"</span>]; <span class="comment">//get input proxy for child element "config"</span> - - readConfig(inConfig, cfg); <span class="comment">//map child element to user data by calling subroutine</span> - - <span class="comment">//check for mapping errors: errors occuring in subroutines are considered, too!</span> - <span class="keywordflow">if</span> (in.errorsOccured()) - <span class="comment">/* show mapping errors */</span> -} -</pre></div><h2><a class="anchor" id="sec_Type_Safety"></a> -Type Safety</h2> +Therefore it may be appropriate to convert structured types by calling subroutines in order to enable fine-granular logging:</p> +<div class="fragment"><div class="line"><span class="keywordtype">void</span> readConfig(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a>& in, Config& cfg)</div> +<div class="line">{</div> +<div class="line"> in[<span class="stringliteral">"number"</span> ](value.a); <span class="comment">//failed conversions will now be logged for each single item by XmlIn</span></div> +<div class="line"> in[<span class="stringliteral">"address"</span>](value.b); <span class="comment">//instead of only once for the complete Config type!</span></div> +<div class="line">}</div> +<div class="line"></div> +<div class="line"></div> +<div class="line"><span class="keywordtype">void</span> loadConfig(<span class="keyword">const</span> wxString& filename, Config& cfg)</div> +<div class="line">{</div> +<div class="line"> <a class="code" href="classzen_1_1_xml_doc.html">zen::XmlDoc</a> doc; <span class="comment">//empty XML document</span></div> +<div class="line"></div> +<div class="line"> <span class="keywordflow">try</span></div> +<div class="line"> {</div> +<div class="line"> <a class="code" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a>(filename, doc); <span class="comment">//throw XmlFileError, XmlParsingError</span></div> +<div class="line"> }</div> +<div class="line"> <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="structzen_1_1_xml_error.html">zen::XmlError</a>& e) { <span class="comment">/* handle error */</span> }</div> +<div class="line"></div> +<div class="line"> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> in(doc); </div> +<div class="line"> </div> +<div class="line"> <a class="code" href="classzen_1_1_xml_in.html">zen::XmlIn</a> inConfig = in[<span class="stringliteral">"config"</span>]; <span class="comment">//get input proxy for child element "config"</span></div> +<div class="line"> </div> +<div class="line"> readConfig(inConfig, cfg); <span class="comment">//map child element to user data by calling subroutine</span></div> +<div class="line"></div> +<div class="line"> <span class="comment">//check for mapping errors: errors occuring in subroutines are considered, too!</span></div> +<div class="line"> <span class="keywordflow">if</span> (in.errorsOccured())</div> +<div class="line"> <span class="comment">/* show mapping errors */</span></div> +<div class="line">}</div> +</div><!-- fragment --><h1><a class="anchor" id="sec_Type_Safety"></a> +Type Safety</h1> <p>zen::Xml heavily uses methods of compile-time introspection in order to free the user from managing basic type conversions by himself. Thereby it is important to find the right balance between automatic conversions and type safety so that program correctness is not compromised. In the context of XML processing three fundamental type categories can be recognized:</p> <ul> <li><b>string-like types</b>: <code>std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ...</code></li> @@ -639,7 +616,7 @@ Type Safety</h2> <li><b>structured types</b>: any to-string-convertible type, STL containers, <code>std::pair</code>, structured user types</li> </ul> <p>These categories can be seen as a sequence of inclusive sets: </p> -<div class="fragment"><pre class="fragment">----------------------------- +<pre class="fragment">----------------------------- | structured | Used as: XML element value | ------------------------- | Conversion via: readStruc(), writeStruc() - may be specialized for user-defined types! | | to-string-convertible | | Used as: XML element/attribute value @@ -648,32 +625,30 @@ Type Safety</h2> | | --------------- | | Conversion via: utfCvrtTo<>() | ------------------------- | ----------------------------- -</pre></div><p>A practical implication of this design is that conversions that do not make sense in a particular context simply lead to compile-time errors: </p> -<div class="fragment"><pre class="fragment"><a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); -out[L<span class="charliteral">'Z'</span>](someValue); <span class="comment">//fine: a wchar_t is acceptable as an element name</span> -out[1234](someValue); <span class="comment">//compiler error: an integer is NOT "string-like"!</span> -</pre></div><p> <br/> - </p> -<div class="fragment"><pre class="fragment"><span class="keywordtype">int</span> i = 0; -std::vector<int> v; - -<a class="code" href="classzen_1_1_xml_out.html" title="Proxy class to conveniently convert user data into XML structure.">zen::XmlOut</a> out(doc); -out[<span class="stringliteral">"elem1"</span>](i); <span class="comment">//fine: both i and v can be converted to an XML element</span> -out[<span class="stringliteral">"elem2"</span>](v); <span class="comment">//</span> - -out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, i); <span class="comment">//fine: an integer can be converted to an XML attribute</span> -out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, v); <span class="comment">//compiler error: a std::vector<int> is NOT "to-string-convertible"!</span> -</pre></div><dl class="section author"><dt>Author:</dt><dd><b>Zenju</b> <br/> +</pre><p>A practical implication of this design is that conversions that do not make sense in a particular context simply lead to compile-time errors: </p> +<div class="fragment"><div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[L<span class="charliteral">'Z'</span>](someValue); <span class="comment">//fine: a wchar_t is acceptable as an element name</span></div> +<div class="line">out[1234](someValue); <span class="comment">//compiler error: an integer is NOT "string-like"!</span></div> +</div><!-- fragment --><p> <br/> +</p> +<div class="fragment"><div class="line"><span class="keywordtype">int</span> i = 0;</div> +<div class="line">std::vector<int> v;</div> +<div class="line"></div> +<div class="line"><a class="code" href="classzen_1_1_xml_out.html">zen::XmlOut</a> out(doc);</div> +<div class="line">out[<span class="stringliteral">"elem1"</span>](i); <span class="comment">//fine: both i and v can be converted to an XML element</span></div> +<div class="line">out[<span class="stringliteral">"elem2"</span>](v); <span class="comment">//</span></div> +<div class="line"></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr1"</span>, i); <span class="comment">//fine: an integer can be converted to an XML attribute</span></div> +<div class="line">out[<span class="stringliteral">"elem"</span>].attribute(<span class="stringliteral">"attr2"</span>, v); <span class="comment">//compiler error: a std::vector<int> is NOT "to-string-convertible"!</span></div> +</div><!-- fragment --><dl class="section author"><dt>Author</dt><dd><b>Zenju</b> <br/> <br/> <b>Email:</b> zenju AT gmx DOT de </dd></dl> </div></div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/io_8h_source.html b/zenxml/doc/io_8h_source.html index 09ec749d..825df7ca 100644 --- a/zenxml/doc/io_8h_source.html +++ b/zenxml/doc/io_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: io.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,124 +73,133 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">io.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_IO_HEADER_8917640501480763248343343</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include <cstdio></span> -<a name="l00011"></a>00011 <span class="preprocessor">#include <cerrno></span> -<a name="l00012"></a>00012 <span class="preprocessor">#include <zen/scope_guard.h></span> -<a name="l00013"></a>00013 <span class="preprocessor">#include <zen/utf.h></span> -<a name="l00014"></a>00014 <span class="preprocessor">#include "error.h"</span> -<a name="l00015"></a>00015 -<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen -<a name="l00017"></a>00017 { -<a name="l00023"></a>00023 <span class="preprocessor">#if !defined(ZEN_PLATFORM_WINDOWS) && !defined(ZEN_PLATFORM_OTHER)</span> -<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#error Please specify your platform: #define ZEN_PLATFORM_WINDOWS or ZEN_PLATFORM_OTHER</span> -<a name="l00025"></a>00025 <span class="preprocessor"></span><span class="preprocessor">#endif</span> -<a name="l00026"></a>00026 <span class="preprocessor"></span> -<a name="l00028"></a><a class="code" href="structzen_1_1_xml_file_error.html">00028</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a> -<a name="l00029"></a>00029 { -<a name="l00030"></a>00030 <span class="keyword">typedef</span> <span class="keywordtype">int</span> ErrorCode; -<a name="l00031"></a>00031 -<a name="l00032"></a>00032 <span class="keyword">explicit</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(ErrorCode ec) : <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f" title="Native error code: errno.">lastError</a>(ec) {} -<a name="l00034"></a><a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">00034</a> ErrorCode <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f" title="Native error code: errno.">lastError</a>; -<a name="l00035"></a>00035 }; -<a name="l00036"></a>00036 -<a name="l00037"></a>00037 -<a name="l00038"></a>00038 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span> -<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="keyword">namespace </span>implemenation <span class="comment">//sad but true</span> -<a name="l00040"></a>00040 { -<a name="l00041"></a>00041 <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span> -<a name="l00042"></a>00042 FILE* fopen(<span class="keyword">const</span> String& filename, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* mode) -<a name="l00043"></a>00043 { -<a name="l00044"></a>00044 <span class="preprocessor">#ifdef _MSC_VER</span> -<a name="l00045"></a>00045 <span class="preprocessor"></span> FILE* handle = <span class="keyword">nullptr</span>; -<a name="l00046"></a>00046 errno_t rv = ::_wfopen_s(&handle, utfCvrtTo<std::wstring>(filename).c_str(), mode); <span class="comment">//more secure?</span> -<a name="l00047"></a>00047 (void)rv; -<a name="l00048"></a>00048 <span class="keywordflow">return</span> handle; -<a name="l00049"></a>00049 <span class="preprocessor">#else</span> -<a name="l00050"></a>00050 <span class="preprocessor"></span> return ::_wfopen(utfCvrtTo<std::wstring>(filename).c_str(), mode); -<a name="l00051"></a>00051 <span class="preprocessor">#endif</span> -<a name="l00052"></a>00052 <span class="preprocessor"></span>} -<a name="l00053"></a>00053 } -<a name="l00054"></a>00054 <span class="preprocessor">#endif</span> -<a name="l00055"></a>00055 <span class="preprocessor"></span> -<a name="l00056"></a>00056 -<a name="l00058"></a>00058 -<a name="l00064"></a>00064 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00065"></a><a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">00065</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream</a>(<span class="keyword">const</span> std::string& stream, <span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span> -<a name="l00066"></a>00066 { -<a name="l00067"></a>00067 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span> -<a name="l00068"></a>00068 <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"wb"</span>); -<a name="l00069"></a>00069 <span class="preprocessor">#else</span> -<a name="l00070"></a>00070 <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"w"</span>); -<a name="l00071"></a>00071 <span class="preprocessor">#endif</span> -<a name="l00072"></a>00072 <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>) -<a name="l00073"></a>00073 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno); -<a name="l00074"></a>00074 ZEN_ON_SCOPE_EXIT(::fclose(handle)); -<a name="l00075"></a>00075 -<a name="l00076"></a>00076 <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle); -<a name="l00077"></a>00077 <span class="keywordflow">if</span> (::ferror(handle) != 0) -<a name="l00078"></a>00078 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno); -<a name="l00079"></a>00079 -<a name="l00080"></a>00080 (void)bytesWritten; -<a name="l00081"></a>00081 assert(bytesWritten == stream.size()); -<a name="l00082"></a>00082 } -<a name="l00083"></a>00083 -<a name="l00084"></a>00084 -<a name="l00086"></a>00086 -<a name="l00092"></a>00092 <span class="keyword">template</span> <<span class="keyword">class</span> String> -<a name="l00093"></a><a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">00093</a> std::string <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream</a>(<span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span> -<a name="l00094"></a>00094 { -<a name="l00095"></a>00095 <span class="preprocessor">#ifdef ZEN_PLATFORM_WINDOWS</span> -<a name="l00096"></a>00096 <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"rb"</span>); -<a name="l00097"></a>00097 <span class="preprocessor">#else</span> -<a name="l00098"></a>00098 <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"r"</span>); -<a name="l00099"></a>00099 <span class="preprocessor">#endif</span> -<a name="l00100"></a>00100 <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>) -<a name="l00101"></a>00101 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno); -<a name="l00102"></a>00102 ZEN_ON_SCOPE_EXIT(::fclose(handle)); -<a name="l00103"></a>00103 -<a name="l00104"></a>00104 std::string stream; -<a name="l00105"></a>00105 <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockSize = 64 * 1024; -<a name="l00106"></a>00106 <span class="keywordflow">do</span> -<a name="l00107"></a>00107 { -<a name="l00108"></a>00108 stream.resize(stream.size() + blockSize); <span class="comment">//let's pray std::string implements exponential growth!</span> -<a name="l00109"></a>00109 -<a name="l00110"></a>00110 <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesRead = ::fread(&*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle); -<a name="l00111"></a>00111 <span class="keywordflow">if</span> (::ferror(handle)) -<a name="l00112"></a>00112 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(errno); -<a name="l00113"></a>00113 <span class="keywordflow">if</span> (bytesRead > blockSize) -<a name="l00114"></a>00114 <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a>(0); -<a name="l00115"></a>00115 <span class="keywordflow">if</span> (bytesRead < blockSize) -<a name="l00116"></a>00116 stream.resize(stream.size() - (blockSize - bytesRead)); <span class="comment">//caveat: unsigned arithmetics</span> -<a name="l00117"></a>00117 } -<a name="l00118"></a>00118 <span class="keywordflow">while</span> (!::feof(handle)); -<a name="l00119"></a>00119 -<a name="l00120"></a>00120 <span class="keywordflow">return</span> stream; -<a name="l00121"></a>00121 } -<a name="l00122"></a>00122 } -<a name="l00123"></a>00123 -<a name="l00124"></a>00124 <span class="preprocessor">#endif //ZEN_XML_IO_HEADER_8917640501480763248343343</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstdio></span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cerrno></span></div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <zen/scope_guard.h></span></div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <zen/utf.h></span></div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "error.h"</span></div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#if !defined(ZEN_WIN) && !defined(ZEN_LINUX) && !defined(ZEN_MAC)</span></div> +<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"></span><span class="preprocessor">#error Please specify your platform: #define ZEN_WIN, ZEN_LINUX or ZEN_MAC</span></div> +<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div> +<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_file_error.html"> 29</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> ErrorCode;</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">explicit</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(ErrorCode ec) : <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a>(ec) {}</div> +<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f"> 35</a></span>  ErrorCode <a class="code" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a>;</div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> };</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div> +<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> +<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> +<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"></span><span class="keyword">namespace </span>implemenation <span class="comment">//sad but true</span></div> +<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">template</span> <<span class="keyword">class</span> String> <span class="keyword">inline</span></div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> FILE* fopen(<span class="keyword">const</span> String& filename, <span class="keyword">const</span> <span class="keywordtype">wchar_t</span>* mode)</div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div> +<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifdef _MSC_VER</span></div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span> FILE* handle = <span class="keyword">nullptr</span>;</div> +<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  errno_t rv = ::_wfopen_s(&handle, utfCvrtTo<std::wstring>(filename).c_str(), mode); <span class="comment">//more secure?</span></div> +<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  (void)rv;</div> +<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordflow">return</span> handle;</div> +<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#else</span></div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"></span> return ::_wfopen(utfCvrtTo<std::wstring>(filename).c_str(), mode);</div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor"></span>}</div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> }</div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2"> 66</a></span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a>(<span class="keyword">const</span> std::string& stream, <span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span></div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> {</div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"wb"</span>);</div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#else</span></div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"w"</span>);</div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)</div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  ZEN_ON_SCOPE_EXIT(::fclose(handle));</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesWritten = ::fwrite(stream.c_str(), 1, stream.size(), handle);</div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (::ferror(handle) != 0)</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  (void)bytesWritten;</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  assert(bytesWritten == stream.size());</div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> }</div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keyword">template</span> <<span class="keyword">class</span> String></div> +<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607"> 94</a></span> std::string <a class="code" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a>(<span class="keyword">const</span> String& filename) <span class="comment">//throw XmlFileError</span></div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#ifdef ZEN_WIN</span></div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span> FILE* handle = implemenation::fopen(utfCvrtTo<std::wstring>(filename).c_str(), L<span class="stringliteral">"rb"</span>);</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#else</span></div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span> FILE* handle = ::fopen(utfCvrtTo<std::string>(filename).c_str(), <span class="stringliteral">"r"</span>);</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#endif</span></div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span> <span class="keywordflow">if</span> (handle == <span class="keyword">nullptr</span>)</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  ZEN_ON_SCOPE_EXIT(::fclose(handle));</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::string stream;</div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> blockSize = 64 * 1024;</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">do</span></div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  {</div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  stream.resize(stream.size() + blockSize); <span class="comment">//let's pray std::string implements exponential growth!</span></div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> bytesRead = ::fread(&*(stream.begin() + stream.size() - blockSize), 1, blockSize, handle);</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (::ferror(handle))</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(errno);</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (bytesRead > blockSize)</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">throw</span> <a class="code" href="structzen_1_1_xml_file_error.html">XmlFileError</a>(0);</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (bytesRead < blockSize)</div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  stream.resize(stream.size() - (blockSize - bytesRead)); <span class="comment">//caveat: unsigned arithmetics</span></div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (!::feof(handle));</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">return</span> stream;</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> }</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor">#endif //ZEN_XML_IO_HEADER_8917640501480763248343343</span></div> +<div class="ttc" id="namespacezen_html_a4ba7bbaa14a787b07fc13da9145aabe2"><div class="ttname"><a href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a></div><div class="ttdeci">void saveStream(const std::string &stream, const String &filename)</div><div class="ttdoc">Save byte stream to a file. </div><div class="ttdef"><b>Definition:</b> io.h:66</div></div> +<div class="ttc" id="namespacezen_html_a04fe23c3bd9b7d03309620b5ea763607"><div class="ttname"><a href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a></div><div class="ttdeci">std::string loadStream(const String &filename)</div><div class="ttdoc">Load byte stream from a file. </div><div class="ttdef"><b>Definition:</b> io.h:94</div></div> +<div class="ttc" id="structzen_1_1_xml_file_error_html_a4a109e749675a3887af8cfc140303b8f"><div class="ttname"><a href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">zen::XmlFileError::lastError</a></div><div class="ttdeci">ErrorCode lastError</div><div class="ttdoc">Native error code: errno. </div><div class="ttdef"><b>Definition:</b> io.h:35</div></div> +<div class="ttc" id="structzen_1_1_xml_file_error_html"><div class="ttname"><a href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></div><div class="ttdoc">Exception thrown due to failed file I/O. </div><div class="ttdef"><b>Definition:</b> io.h:29</div></div> +<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/jquery.js b/zenxml/doc/jquery.js index 90b3a2bc..c197801c 100644 --- a/zenxml/doc/jquery.js +++ b/zenxml/doc/jquery.js @@ -1,64 +1,31 @@ -/* - * jQuery JavaScript Library v1.3.2 +/*! + * jQuery JavaScript Library v1.7.1 * http://jquery.com/ * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){ -var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv)) +}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false +}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) -{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() -{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); - -/* - * jQuery hashchange event - v1.3 - 7/21/2010 - * http://benalman.com/projects/jquery-hashchange-plugin/ - * - * Copyright (c) 2010 "Cowboy" Ben Alman - * Dual licensed under the MIT and GPL licenses. - * http://benalman.com/about/license/ - */ -(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this); -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) -{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com - * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). - * Date: 2/8/2008 - * @author Ariel Flesler - * @version 1.3.2 - */ -;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); - +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1) +}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/zenxml/doc/namespacemembers.html b/zenxml/doc/namespacemembers.html index fe4340e5..9703003f 100644 --- a/zenxml/doc/namespacemembers.html +++ b/zenxml/doc/namespacemembers.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Namespace Members</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -82,13 +71,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="namespacemembers_func.html"><span>Functions</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -100,13 +89,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <div class="contents"> <div class="textblock">Here is a list of all documented namespace members with links to the namespaces they belong to:</div><ul> <li>load() -: <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen</a> +: <a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen</a> </li> <li>loadStream() : <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a> </li> <li>parse() -: <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen</a> +: <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen</a> </li> <li>readStruc() : <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a> @@ -131,13 +120,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/namespacemembers_func.html b/zenxml/doc/namespacemembers_func.html index dd473af8..30987dd8 100644 --- a/zenxml/doc/namespacemembers_func.html +++ b/zenxml/doc/namespacemembers_func.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Namespace Members</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -82,13 +71,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li class="current"><a href="namespacemembers_func.html"><span>Functions</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -100,13 +89,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <div class="contents">  <ul> <li>load() -: <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen</a> +: <a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">zen</a> </li> <li>loadStream() : <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen</a> </li> <li>parse() -: <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen</a> +: <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen</a> </li> <li>readStruc() : <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen</a> @@ -131,13 +120,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/namespaces.html b/zenxml/doc/namespaces.html index 6a17ec0a..6a23f6a0 100644 --- a/zenxml/doc/namespaces.html +++ b/zenxml/doc/namespaces.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Namespace List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -76,13 +65,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="namespacemembers.html"><span>Namespace Members</span></a></li> </ul> </div> -</div> +</div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -96,17 +85,17 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <div class="title">Namespace List</div> </div> </div><!--header--> <div class="contents"> -<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><table> - <tr><td class="indexkey"><a class="el" href="namespacezen.html">zen</a></td><td class="indexvalue">The zen::Xml namespace </td></tr> +<div class="textblock">Here is a list of all documented namespaces with brief descriptions:</div><div class="directory"> +<table class="directory"> +<tr id="row_0_" class="even"><td class="entry"><img src="ftv2lastnode.png" alt="\" width="16" height="22" /><img src="ftv2ns.png" alt="N" width="24" height="22" /><a class="el" href="namespacezen.html" target="_self">zen</a></td><td class="desc">The zen::Xml namespace </td></tr> </table> +</div><!-- directory --> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/namespacezen.html b/zenxml/doc/namespacezen.html index c05f255c..1d961e87 100644 --- a/zenxml/doc/namespacezen.html +++ b/zenxml/doc/namespacezen.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen Namespace Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li class="current"><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -81,7 +70,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,7 +79,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> -</div> +</div><!-- top --> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | @@ -103,102 +92,109 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <p>The zen::Xml namespace. <a href="#details">More...</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="nested-classes"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_out.html">XmlOut</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Proxy class to conveniently convert user data into XML structure. <a href="classzen_1_1_xml_out.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_in.html">XmlIn</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Proxy class to conveniently convert XML structure to user data. <a href="classzen_1_1_xml_in.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_element.html">XmlElement</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">An XML element. <a href="classzen_1_1_xml_element.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The complete XML document. <a href="classzen_1_1_xml_doc.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception base class for zen::Xml. <a href="structzen_1_1_xml_error.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception thrown due to failed file I/O. <a href="structzen_1_1_xml_file_error.html#details">More...</a><br/></td></tr> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></td></tr> <tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Exception thrown due to an XML parsing error. <a href="structzen_1_1_xml_parsing_error.html#details">More...</a><br/></td></tr> -<tr><td colspan="2"><h2><a name="func-members"></a> +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> +</table><table class="memberdecls"> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> -<tr class="memitem:a900c1fb290f0eedc24354c487145dbee"><td class="memTemplParams" colspan="2">template<class String > </td></tr> -<tr class="memitem:a900c1fb290f0eedc24354c487145dbee"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">load</a> (const String &filename, <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:a900c1fb290f0eedc24354c487145dbee"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a file. <a href="#a900c1fb290f0eedc24354c487145dbee"></a><br/></td></tr> +<tr class="memitem:a872a48c0616e7f12ae8caca464835e00"><td class="memTemplParams" colspan="2">template<class String > </td></tr> +<tr class="memitem:a872a48c0616e7f12ae8caca464835e00"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a872a48c0616e7f12ae8caca464835e00">load</a> (const String &filename)</td></tr> +<tr class="memdesc:a872a48c0616e7f12ae8caca464835e00"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a file. <a href="#a872a48c0616e7f12ae8caca464835e00">More...</a><br/></td></tr> +<tr class="separator:a872a48c0616e7f12ae8caca464835e00"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:adeeb6b2318097382ae47aa939fc15d4d"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">save</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc, const String &filename, const std::string &lineBreak="\r\n", const std::string &indent=" ")</td></tr> -<tr class="memdesc:adeeb6b2318097382ae47aa939fc15d4d"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document to a file. <a href="#adeeb6b2318097382ae47aa939fc15d4d"></a><br/></td></tr> +<tr class="memdesc:adeeb6b2318097382ae47aa939fc15d4d"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document to a file. <a href="#adeeb6b2318097382ae47aa939fc15d4d">More...</a><br/></td></tr> +<tr class="separator:adeeb6b2318097382ae47aa939fc15d4d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">readStruc</a> (const <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &input, T &value)</td></tr> -<tr class="memdesc:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="mdescLeft"> </td><td class="mdescRight">Convert XML element to structured user data. <a href="#a2bdcecfe7435ef11cedbce47d4e72ee1"></a><br/></td></tr> +<tr class="memdesc:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="mdescLeft"> </td><td class="mdescRight">Convert XML element to structured user data. <a href="#a2bdcecfe7435ef11cedbce47d4e72ee1">More...</a><br/></td></tr> +<tr class="separator:a2bdcecfe7435ef11cedbce47d4e72ee1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a29ddb823fe0a195f19a64448881b8bf6"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">writeStruc</a> (const T &value, <a class="el" href="classzen_1_1_xml_element.html">XmlElement</a> &output)</td></tr> -<tr class="memdesc:a29ddb823fe0a195f19a64448881b8bf6"><td class="mdescLeft"> </td><td class="mdescRight">Convert structured user data into an XML element. <a href="#a29ddb823fe0a195f19a64448881b8bf6"></a><br/></td></tr> +<tr class="memdesc:a29ddb823fe0a195f19a64448881b8bf6"><td class="mdescLeft"> </td><td class="mdescRight">Convert structured user data into an XML element. <a href="#a29ddb823fe0a195f19a64448881b8bf6">More...</a><br/></td></tr> +<tr class="separator:a29ddb823fe0a195f19a64448881b8bf6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:acaf85ab94b61882f957afcd355386bff"><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">readText</a> (const std::string &input, T &value)</td></tr> -<tr class="memdesc:acaf85ab94b61882f957afcd355386bff"><td class="mdescLeft"> </td><td class="mdescRight">Convert text to user data - used by XML elements and attributes. <a href="#acaf85ab94b61882f957afcd355386bff"></a><br/></td></tr> +<tr class="memdesc:acaf85ab94b61882f957afcd355386bff"><td class="mdescLeft"> </td><td class="mdescRight">Convert text to user data - used by XML elements and attributes. <a href="#acaf85ab94b61882f957afcd355386bff">More...</a><br/></td></tr> +<tr class="separator:acaf85ab94b61882f957afcd355386bff"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplParams" colspan="2">template<class T > </td></tr> <tr class="memitem:a2ce2998296871fc2f4718ceceb22a23f"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">writeText</a> (const T &value, std::string &output)</td></tr> -<tr class="memdesc:a2ce2998296871fc2f4718ceceb22a23f"><td class="mdescLeft"> </td><td class="mdescRight">Convert user data into text - used by XML elements and attributes. <a href="#a2ce2998296871fc2f4718ceceb22a23f"></a><br/></td></tr> +<tr class="memdesc:a2ce2998296871fc2f4718ceceb22a23f"><td class="mdescLeft"> </td><td class="mdescRight">Convert user data into text - used by XML elements and attributes. <a href="#a2ce2998296871fc2f4718ceceb22a23f">More...</a><br/></td></tr> +<tr class="separator:a2ce2998296871fc2f4718ceceb22a23f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memTemplItemLeft" align="right" valign="top">void </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">saveStream</a> (const std::string &stream, const String &filename)</td></tr> -<tr class="memdesc:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="mdescLeft"> </td><td class="mdescRight">Save byte stream to a file. <a href="#a4ba7bbaa14a787b07fc13da9145aabe2"></a><br/></td></tr> +<tr class="memdesc:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="mdescLeft"> </td><td class="mdescRight">Save byte stream to a file. <a href="#a4ba7bbaa14a787b07fc13da9145aabe2">More...</a><br/></td></tr> +<tr class="separator:a4ba7bbaa14a787b07fc13da9145aabe2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplParams" colspan="2">template<class String > </td></tr> <tr class="memitem:a04fe23c3bd9b7d03309620b5ea763607"><td class="memTemplItemLeft" align="right" valign="top">std::string </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">loadStream</a> (const String &filename)</td></tr> -<tr class="memdesc:a04fe23c3bd9b7d03309620b5ea763607"><td class="mdescLeft"> </td><td class="mdescRight">Load byte stream from a file. <a href="#a04fe23c3bd9b7d03309620b5ea763607"></a><br/></td></tr> +<tr class="memdesc:a04fe23c3bd9b7d03309620b5ea763607"><td class="mdescLeft"> </td><td class="mdescRight">Load byte stream from a file. <a href="#a04fe23c3bd9b7d03309620b5ea763607">More...</a><br/></td></tr> +<tr class="separator:a04fe23c3bd9b7d03309620b5ea763607"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afaa4920e275078e6c8009fbdf58b57ee"><td class="memItemLeft" align="right" valign="top">std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a> (const <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</td></tr> -<tr class="memdesc:afaa4920e275078e6c8009fbdf58b57ee"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document as a byte stream. <a href="#afaa4920e275078e6c8009fbdf58b57ee"></a><br/></td></tr> -<tr class="memitem:a6cf1ec0b57fc1ae9aa95761800e67ec7"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">parse</a> (const std::string &stream, <a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> &doc)</td></tr> -<tr class="memdesc:a6cf1ec0b57fc1ae9aa95761800e67ec7"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a byte stream. <a href="#a6cf1ec0b57fc1ae9aa95761800e67ec7"></a><br/></td></tr> +<tr class="memdesc:afaa4920e275078e6c8009fbdf58b57ee"><td class="mdescLeft"> </td><td class="mdescRight">Save XML document as a byte stream. <a href="#afaa4920e275078e6c8009fbdf58b57ee">More...</a><br/></td></tr> +<tr class="separator:afaa4920e275078e6c8009fbdf58b57ee"><td class="memSeparator" colspan="2"> </td></tr> +<tr class="memitem:a1ae1a4688d724b554fe3bf4638700477"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a> (const std::string &stream)</td></tr> +<tr class="memdesc:a1ae1a4688d724b554fe3bf4638700477"><td class="mdescLeft"> </td><td class="mdescRight">Load XML document from a byte stream. <a href="#a1ae1a4688d724b554fe3bf4638700477">More...</a><br/></td></tr> +<tr class="separator:a1ae1a4688d724b554fe3bf4638700477"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>The zen::Xml namespace. </p> -</div><hr/><h2>Function Documentation</h2> -<a class="anchor" id="a900c1fb290f0eedc24354c487145dbee"></a> +</div><h2 class="groupheader">Function Documentation</h2> +<a class="anchor" id="a872a48c0616e7f12ae8caca464835e00"></a> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#a900c1fb290f0eedc24354c487145dbee">zen::load</a> </td> + <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> zen::load </td> <td>(</td> <td class="paramtype">const String & </td> - <td class="paramname"><em>filename</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> - <td></td> - <td class="paramtype">XmlDoc & </td> - <td class="paramname"><em>doc</em> </td> - </tr> - <tr> + <td class="paramname"><em>filename</em></td><td>)</td> <td></td> - <td>)</td> - <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Load XML document from a file. </p> -<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file.">loadStream()</a> and <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse()</a>.</p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607" title="Load byte stream from a file. ">loadStream()</a> and <a class="el" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477" title="Load XML document from a byte stream. ">parse()</a>.</p> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">filename</td><td>Input file name </td></tr> - <tr><td class="paramname">doc</td><td>The XML document to load </td></tr> </table> </dd> </dl> -<dl class="exception"><dt><b>Exceptions:</b></dt><dd> +<dl class="section return"><dt>Returns</dt><dd>The loaded XML document </dd></dl> +<dl class="exception"><dt>Exceptions</dt><dd> <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. ">XmlParsingError</a></td><td></td></tr> </table> </dd> </dl> @@ -212,75 +208,63 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">std::string <a class="el" href="namespacezen.html#a04fe23c3bd9b7d03309620b5ea763607">zen::loadStream</a> </td> + <td class="memname">std::string zen::loadStream </td> <td>(</td> <td class="paramtype">const String & </td> <td class="paramname"><em>filename</em></td><td>)</td> <td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Load byte stream from a file. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">filename</td><td>Input file name </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>Output byte stream </dd></dl> -<dl class="exception"><dt><b>Exceptions:</b></dt><dd> +<dl class="section return"><dt>Returns</dt><dd>Output byte stream </dd></dl> +<dl class="exception"><dt>Exceptions</dt><dd> <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> </table> </dd> </dl> </div> </div> -<a class="anchor" id="a6cf1ec0b57fc1ae9aa95761800e67ec7"></a> +<a class="anchor" id="a1ae1a4688d724b554fe3bf4638700477"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">zen::parse</a> </td> + <td class="memname"><a class="el" href="classzen_1_1_xml_doc.html">XmlDoc</a> zen::parse </td> <td>(</td> <td class="paramtype">const std::string & </td> - <td class="paramname"><em>stream</em>, </td> - </tr> - <tr> - <td class="paramkey"></td> + <td class="paramname"><em>stream</em></td><td>)</td> <td></td> - <td class="paramtype">XmlDoc & </td> - <td class="paramname"><em>doc</em> </td> - </tr> - <tr> - <td></td> - <td>)</td> - <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Load XML document from a byte stream. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">stream</td><td>Input byte stream </td></tr> - <tr><td class="paramname">doc</td><td>Output XML document </td></tr> </table> </dd> </dl> -<dl class="exception"><dt><b>Exceptions:</b></dt><dd> +<dl class="section return"><dt>Returns</dt><dd>Output XML document </dd></dl> +<dl class="exception"><dt>Exceptions</dt><dd> <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. ">XmlParsingError</a></td><td></td></tr> </table> </dd> </dl> @@ -294,7 +278,7 @@ template<class String > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="namespacezen.html#a2bdcecfe7435ef11cedbce47d4e72ee1">zen::readStruc</a> </td> + <td class="memname">bool zen::readStruc </td> <td>(</td> <td class="paramtype">const XmlElement & </td> <td class="paramname"><em>input</em>, </td> @@ -311,18 +295,17 @@ template<class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Convert XML element to structured user data. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">input</td><td>The input XML element. </td></tr> <tr><td class="paramname">value</td><td>Conversion target value. </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if value was read successfully. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if value was read successfully. </dd></dl> </div> </div> @@ -333,7 +316,7 @@ template<class T > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">bool <a class="el" href="namespacezen.html#acaf85ab94b61882f957afcd355386bff">zen::readText</a> </td> + <td class="memname">bool zen::readText </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"><em>input</em>, </td> @@ -350,18 +333,17 @@ template<class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Convert text to user data - used by XML elements and attributes. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">input</td><td>Input text. </td></tr> <tr><td class="paramname">value</td><td>Conversion target value. </td></tr> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>"true" if value was read successfully. </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>"true" if value was read successfully. </dd></dl> </div> </div> @@ -372,7 +354,7 @@ template<class T > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#adeeb6b2318097382ae47aa939fc15d4d">zen::save</a> </td> + <td class="memname">void zen::save </td> <td>(</td> <td class="paramtype">const XmlDoc & </td> <td class="paramname"><em>doc</em>, </td> @@ -401,18 +383,17 @@ template<class String > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Save XML document to a file. </p> -<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize()</a> and <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file.">saveStream()</a>.</p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<p>Convenience function that does nothing more than calling <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream. ">serialize()</a> and <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2" title="Save byte stream to a file. ">saveStream()</a>.</p> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">doc</td><td>The XML document to save </td></tr> <tr><td class="paramname">filename</td><td>Output file name </td></tr> @@ -421,9 +402,9 @@ template<class String > </div> </table> </dd> </dl> -<dl class="exception"><dt><b>Exceptions:</b></dt><dd> +<dl class="exception"><dt>Exceptions</dt><dd> <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> </table> </dd> </dl> @@ -437,7 +418,7 @@ template<class String > </div> template<class String > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#a4ba7bbaa14a787b07fc13da9145aabe2">zen::saveStream</a> </td> + <td class="memname">void zen::saveStream </td> <td>(</td> <td class="paramtype">const std::string & </td> <td class="paramname"><em>stream</em>, </td> @@ -454,26 +435,25 @@ template<class String > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Save byte stream to a file. </p> -<dl class=""><dt><b>Template Parameters:</b></dt><dd> - <table class=""> +<dl class="tparams"><dt>Template Parameters</dt><dd> + <table class="tparams"> <tr><td class="paramname">String</td><td>Arbitrary string-like type: e.g. std::string, wchar_t*, char[], wchar_t, wxString, MyStringClass, ... </td></tr> </table> </dd> </dl> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">stream</td><td>Input byte stream </td></tr> <tr><td class="paramname">filename</td><td>Output file name </td></tr> </table> </dd> </dl> -<dl class="exception"><dt><b>Exceptions:</b></dt><dd> +<dl class="exception"><dt>Exceptions</dt><dd> <table class="exception"> - <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O.">XmlFileError</a></td><td></td></tr> + <tr><td class="paramname"><a class="el" href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. ">XmlFileError</a></td><td></td></tr> </table> </dd> </dl> @@ -485,7 +465,7 @@ template<class String > </div> <div class="memproto"> <table class="memname"> <tr> - <td class="memname">std::string <a class="el" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a> </td> + <td class="memname">std::string zen::serialize </td> <td>(</td> <td class="paramtype">const XmlDoc & </td> <td class="paramname"><em>doc</em>, </td> @@ -508,11 +488,10 @@ template<class String > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Save XML document as a byte stream. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">doc</td><td>Input XML document </td></tr> <tr><td class="paramname">lineBreak</td><td>Line break, default: carriage return + new line </td></tr> @@ -520,7 +499,7 @@ template<class String > </div> </table> </dd> </dl> -<dl class="section return"><dt>Returns:</dt><dd>Output byte stream </dd></dl> +<dl class="section return"><dt>Returns</dt><dd>Output byte stream </dd></dl> </div> </div> @@ -531,7 +510,7 @@ template<class String > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#a29ddb823fe0a195f19a64448881b8bf6">zen::writeStruc</a> </td> + <td class="memname">void zen::writeStruc </td> <td>(</td> <td class="paramtype">const T & </td> <td class="paramname"><em>value</em>, </td> @@ -548,11 +527,10 @@ template<class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Convert structured user data into an XML element. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">value</td><td>The value to be converted. </td></tr> <tr><td class="paramname">output</td><td>The output XML element. </td></tr> @@ -569,7 +547,7 @@ template<class T > </div> template<class T > </div> <table class="memname"> <tr> - <td class="memname">void <a class="el" href="namespacezen.html#a2ce2998296871fc2f4718ceceb22a23f">zen::writeText</a> </td> + <td class="memname">void zen::writeText </td> <td>(</td> <td class="paramtype">const T & </td> <td class="paramname"><em>value</em>, </td> @@ -586,11 +564,10 @@ template<class T > </div> <td></td><td></td> </tr> </table> -</div> -<div class="memdoc"> +</div><div class="memdoc"> <p>Convert user data into text - used by XML elements and attributes. </p> -<dl class="params"><dt><b>Parameters:</b></dt><dd> +<dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">value</td><td>The value to be converted. </td></tr> <tr><td class="paramname">output</td><td>Output text. </td></tr> @@ -601,13 +578,11 @@ template<class T > </div> </div> </div> </div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/nav_f.png b/zenxml/doc/nav_f.png Binary files differindex 1b07a162..72a58a52 100644 --- a/zenxml/doc/nav_f.png +++ b/zenxml/doc/nav_f.png diff --git a/zenxml/doc/nav_h.png b/zenxml/doc/nav_h.png Binary files differindex 01f5fa6a..33389b10 100644 --- a/zenxml/doc/nav_h.png +++ b/zenxml/doc/nav_h.png diff --git a/zenxml/doc/open.png b/zenxml/doc/open.png Binary files differindex 7b35d2c2..30f75c7e 100644 --- a/zenxml/doc/open.png +++ b/zenxml/doc/open.png diff --git a/zenxml/doc/parser_8h_source.html b/zenxml/doc/parser_8h_source.html index 97bdc7e3..d049c188 100644 --- a/zenxml/doc/parser_8h_source.html +++ b/zenxml/doc/parser_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: parser.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,598 +73,628 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">parser.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_PARSER_HEADER_81248670213764583021432</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_PARSER_HEADER_81248670213764583021432</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include <cstdio></span> -<a name="l00011"></a>00011 <span class="preprocessor">#include <cstddef></span> <span class="comment">//ptrdiff_t; req. on Linux</span> -<a name="l00012"></a>00012 <span class="preprocessor">#include <zen/string_traits.h></span> -<a name="l00013"></a>00013 <span class="preprocessor">#include "dom.h"</span> -<a name="l00014"></a>00014 <span class="preprocessor">#include "error.h"</span> -<a name="l00015"></a>00015 -<a name="l00016"></a>00016 <span class="keyword">namespace </span>zen -<a name="l00017"></a>00017 { -<a name="l00023"></a>00023 -<a name="l00024"></a>00024 -<a name="l00030"></a>00030 std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlDoc& doc, -<a name="l00031"></a>00031 <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>, -<a name="l00032"></a>00032 <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>); <span class="comment">//throw ()</span> -<a name="l00033"></a>00033 -<a name="l00035"></a><a class="code" href="structzen_1_1_xml_parsing_error.html">00035</a> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml.">XmlError</a> -<a name="l00036"></a>00036 { -<a name="l00037"></a>00037 <a class="code" href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error.">XmlParsingError</a>(<span class="keywordtype">size_t</span> rowNo, <span class="keywordtype">size_t</span> colNo) : <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e" title="Input file row where the parsing error occured (zero-based)">row</a>(rowNo), <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd" title="Input file column where the parsing error occured (zero-based)">col</a>(colNo) {} -<a name="l00039"></a><a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">00039</a> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e" title="Input file row where the parsing error occured (zero-based)">row</a>; <span class="comment">//beginning with 0</span> -<a name="l00041"></a><a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">00041</a> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd" title="Input file column where the parsing error occured (zero-based)">col</a>; <span class="comment">//</span> -<a name="l00042"></a>00042 }; -<a name="l00043"></a>00043 -<a name="l00044"></a>00044 -<a name="l00046"></a>00046 -<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(<span class="keyword">const</span> std::string& stream, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc); <span class="comment">//throw XmlParsingError</span> -<a name="l00052"></a>00052 -<a name="l00053"></a>00053 -<a name="l00054"></a>00054 -<a name="l00055"></a>00055 -<a name="l00056"></a>00056 -<a name="l00057"></a>00057 -<a name="l00058"></a>00058 -<a name="l00059"></a>00059 -<a name="l00060"></a>00060 -<a name="l00061"></a>00061 -<a name="l00062"></a>00062 -<a name="l00063"></a>00063 -<a name="l00064"></a>00064 -<a name="l00065"></a>00065 -<a name="l00066"></a>00066 -<a name="l00067"></a>00067 -<a name="l00068"></a>00068 -<a name="l00069"></a>00069 -<a name="l00070"></a>00070 -<a name="l00071"></a>00071 -<a name="l00072"></a>00072 <span class="comment">//---------------------------- implementation ----------------------------</span> -<a name="l00073"></a>00073 <span class="comment">//see: http://www.w3.org/TR/xml/</span> -<a name="l00074"></a>00074 -<a name="l00075"></a>00075 <span class="keyword">namespace </span>implementation -<a name="l00076"></a>00076 { -<a name="l00077"></a>00077 <span class="keyword">inline</span> -<a name="l00078"></a>00078 std::pair<char, char> hexify(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c) -<a name="l00079"></a>00079 { -<a name="l00080"></a>00080 <span class="keyword">auto</span> hexifyDigit = [](<span class="keywordtype">int</span> num) -> <span class="keywordtype">char</span> <span class="comment">//input [0, 15], output 0-9, A-F</span> -<a name="l00081"></a>00081 { -<a name="l00082"></a>00082 assert(0 <= num&& num <= 15); <span class="comment">//guaranteed by design below!</span> -<a name="l00083"></a>00083 <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(num <= 9 ? <span class="comment">//no signed/unsigned char problem here!</span> -<a name="l00084"></a>00084 <span class="charliteral">'0'</span> + num : -<a name="l00085"></a>00085 <span class="charliteral">'A'</span> + (num - 10)); -<a name="l00086"></a>00086 }; -<a name="l00087"></a>00087 <span class="keywordflow">return</span> std::make_pair(hexifyDigit(c / 16), hexifyDigit(c % 16)); -<a name="l00088"></a>00088 } -<a name="l00089"></a>00089 -<a name="l00090"></a>00090 -<a name="l00091"></a>00091 <span class="keyword">inline</span> -<a name="l00092"></a>00092 <span class="keywordtype">char</span> unhexify(<span class="keywordtype">char</span> high, <span class="keywordtype">char</span> low) -<a name="l00093"></a>00093 { -<a name="l00094"></a>00094 <span class="keyword">auto</span> unhexifyDigit = [](<span class="keywordtype">char</span> hex) -> <span class="keywordtype">int</span> <span class="comment">//input 0-9, a-f, A-F; output range: [0, 15]</span> -<a name="l00095"></a>00095 { -<a name="l00096"></a>00096 <span class="keywordflow">if</span> (<span class="charliteral">'0'</span> <= hex && hex <= <span class="charliteral">'9'</span>) <span class="comment">//no signed/unsigned char problem here!</span> -<a name="l00097"></a>00097 <span class="keywordflow">return</span> hex - <span class="charliteral">'0'</span>; -<a name="l00098"></a>00098 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'A'</span> <= hex && hex <= <span class="charliteral">'F'</span>) -<a name="l00099"></a>00099 <span class="keywordflow">return</span> (hex - <span class="charliteral">'A'</span>) + 10; -<a name="l00100"></a>00100 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'a'</span> <= hex && hex <= <span class="charliteral">'f'</span>) -<a name="l00101"></a>00101 <span class="keywordflow">return</span> (hex - <span class="charliteral">'a'</span>) + 10; -<a name="l00102"></a>00102 assert(<span class="keyword">false</span>); -<a name="l00103"></a>00103 <span class="keywordflow">return</span> 0; -<a name="l00104"></a>00104 }; -<a name="l00105"></a>00105 <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(16 * unhexifyDigit(high) + unhexifyDigit(low)); <span class="comment">//[!] convert to unsigned char first, then to char (which may be signed)</span> -<a name="l00106"></a>00106 }; -<a name="l00107"></a>00107 -<a name="l00108"></a>00108 -<a name="l00109"></a>00109 <span class="keyword">template</span> <<span class="keyword">class</span> Predicate> <span class="keyword">inline</span> -<a name="l00110"></a>00110 std::string normalize(<span class="keyword">const</span> std::string& str, Predicate pred) <span class="comment">//pred: unary function taking a char, return true if value shall be encoded as hex</span> -<a name="l00111"></a>00111 { -<a name="l00112"></a>00112 std::string output; -<a name="l00113"></a>00113 std::for_each(str.begin(), str.end(), -<a name="l00114"></a>00114 [&](<span class="keywordtype">char</span> c) -<a name="l00115"></a>00115 { -<a name="l00116"></a>00116 <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>) <span class="comment">//</span> -<a name="l00117"></a>00117 output += <span class="stringliteral">"&amp;"</span>; -<a name="l00118"></a>00118 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'<'</span>) <span class="comment">//normalization mandatory: http://www.w3.org/TR/xml/#syntax</span> -<a name="l00119"></a>00119 output += <span class="stringliteral">"&lt;"</span>; -<a name="l00120"></a>00120 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'>'</span>) <span class="comment">//</span> -<a name="l00121"></a>00121 output += <span class="stringliteral">"&gt;"</span>; -<a name="l00122"></a>00122 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pred(c)) -<a name="l00123"></a>00123 { -<a name="l00124"></a>00124 <span class="keywordflow">if</span> (c == <span class="charliteral">'\''</span>) -<a name="l00125"></a>00125 output += <span class="stringliteral">"&apos;"</span>; -<a name="l00126"></a>00126 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\"'</span>) -<a name="l00127"></a>00127 output += <span class="stringliteral">"&quot;"</span>; -<a name="l00128"></a>00128 <span class="keywordflow">else</span> -<a name="l00129"></a>00129 { -<a name="l00130"></a>00130 output += <span class="stringliteral">"&#x"</span>; -<a name="l00131"></a>00131 <span class="keyword">const</span> <span class="keyword">auto</span> hexDigits = hexify(c); <span class="comment">//hexify beats "printNumber<std::string>("&#x%02X;", c)" by a nice factor of 3!</span> -<a name="l00132"></a>00132 output += hexDigits.first; -<a name="l00133"></a>00133 output += hexDigits.second; -<a name="l00134"></a>00134 output += <span class="charliteral">';'</span>; -<a name="l00135"></a>00135 } -<a name="l00136"></a>00136 } -<a name="l00137"></a>00137 <span class="keywordflow">else</span> -<a name="l00138"></a>00138 output += c; -<a name="l00139"></a>00139 }); -<a name="l00140"></a>00140 <span class="keywordflow">return</span> output; -<a name="l00141"></a>00141 } -<a name="l00142"></a>00142 -<a name="l00143"></a>00143 <span class="keyword">inline</span> -<a name="l00144"></a>00144 std::string normalizeName(<span class="keyword">const</span> std::string& str) -<a name="l00145"></a>00145 { -<a name="l00146"></a>00146 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> isWhiteSpace(c) || c == <span class="charliteral">'='</span> || c == <span class="charliteral">'/'</span> || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; }); -<a name="l00147"></a>00147 } -<a name="l00148"></a>00148 -<a name="l00149"></a>00149 <span class="keyword">inline</span> -<a name="l00150"></a>00150 std::string normalizeElementValue(<span class="keyword">const</span> std::string& str) -<a name="l00151"></a>00151 { -<a name="l00152"></a>00152 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32; }); -<a name="l00153"></a>00153 } -<a name="l00154"></a>00154 -<a name="l00155"></a>00155 <span class="keyword">inline</span> -<a name="l00156"></a>00156 std::string normalizeAttribValue(<span class="keyword">const</span> std::string& str) -<a name="l00157"></a>00157 { -<a name="l00158"></a>00158 <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32 || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; }); -<a name="l00159"></a>00159 } -<a name="l00160"></a>00160 -<a name="l00161"></a>00161 -<a name="l00162"></a>00162 <span class="keyword">template</span> <<span class="keyword">class</span> CharIterator, <span class="keywordtype">size_t</span> N> <span class="keyword">inline</span> -<a name="l00163"></a>00163 <span class="keywordtype">bool</span> checkEntity(CharIterator& first, CharIterator last, <span class="keyword">const</span> <span class="keywordtype">char</span> (&placeholder)[N]) -<a name="l00164"></a>00164 { -<a name="l00165"></a>00165 assert(placeholder[N - 1] == 0); -<a name="l00166"></a>00166 <span class="keyword">const</span> ptrdiff_t strLen = N - 1; <span class="comment">//don't count null-terminator</span> -<a name="l00167"></a>00167 <span class="keywordflow">if</span> (last - first >= strLen && std::equal(first, first + strLen, placeholder)) -<a name="l00168"></a>00168 { -<a name="l00169"></a>00169 first += strLen - 1; -<a name="l00170"></a>00170 <span class="keywordflow">return</span> <span class="keyword">true</span>; -<a name="l00171"></a>00171 } -<a name="l00172"></a>00172 <span class="keywordflow">return</span> <span class="keyword">false</span>; -<a name="l00173"></a>00173 } -<a name="l00174"></a>00174 -<a name="l00175"></a>00175 -<a name="l00176"></a>00176 <span class="keyword">namespace</span> -<a name="l00177"></a>00177 { -<a name="l00178"></a>00178 std::string denormalize(<span class="keyword">const</span> std::string& str) -<a name="l00179"></a>00179 { -<a name="l00180"></a>00180 std::string output; -<a name="l00181"></a>00181 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = str.begin(); it != str.end(); ++it) -<a name="l00182"></a>00182 { -<a name="l00183"></a>00183 <span class="keyword">const</span> <span class="keywordtype">char</span> c = *it; -<a name="l00184"></a>00184 -<a name="l00185"></a>00185 <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>) -<a name="l00186"></a>00186 { -<a name="l00187"></a>00187 <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&amp;"</span>)) -<a name="l00188"></a>00188 output += <span class="charliteral">'&'</span>; -<a name="l00189"></a>00189 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&lt;"</span>)) -<a name="l00190"></a>00190 output += <span class="charliteral">'<'</span>; -<a name="l00191"></a>00191 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&gt;"</span>)) -<a name="l00192"></a>00192 output += <span class="charliteral">'>'</span>; -<a name="l00193"></a>00193 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&apos;"</span>)) -<a name="l00194"></a>00194 output += <span class="charliteral">'\''</span>; -<a name="l00195"></a>00195 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&quot;"</span>)) -<a name="l00196"></a>00196 output += <span class="charliteral">'\"'</span>; -<a name="l00197"></a>00197 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.end() - it >= 6 && -<a name="l00198"></a>00198 it[1] == <span class="charliteral">'#'</span> && -<a name="l00199"></a>00199 it[2] == <span class="charliteral">'x'</span> && -<a name="l00200"></a>00200 it[5] == <span class="charliteral">';'</span>) -<a name="l00201"></a>00201 { -<a name="l00202"></a>00202 output += unhexify(it[3], it[4]); <span class="comment">//unhexify beats "::sscanf(&it[3], "%02X", &tmp)" by a factor of 3000 for ~250000 calls!!!</span> -<a name="l00203"></a>00203 it += 5; -<a name="l00204"></a>00204 } -<a name="l00205"></a>00205 <span class="keywordflow">else</span> -<a name="l00206"></a>00206 output += c; <span class="comment">//unexpected char!</span> -<a name="l00207"></a>00207 } -<a name="l00208"></a>00208 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\r'</span>) <span class="comment">//map all end-of-line characters to \n http://www.w3.org/TR/xml/#sec-line-ends</span> -<a name="l00209"></a>00209 { -<a name="l00210"></a>00210 <span class="keyword">auto</span> itNext = it + 1; -<a name="l00211"></a>00211 <span class="keywordflow">if</span> (itNext != str.end() && *itNext == <span class="charliteral">'\n'</span>) -<a name="l00212"></a>00212 ++it; -<a name="l00213"></a>00213 output += <span class="charliteral">'\n'</span>; -<a name="l00214"></a>00214 } -<a name="l00215"></a>00215 <span class="keywordflow">else</span> -<a name="l00216"></a>00216 output += c; -<a name="l00217"></a>00217 }; -<a name="l00218"></a>00218 <span class="keywordflow">return</span> output; -<a name="l00219"></a>00219 } -<a name="l00220"></a>00220 -<a name="l00221"></a>00221 -<a name="l00222"></a>00222 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlElement& element, std::string& stream, -<a name="l00223"></a>00223 <span class="keyword">const</span> std::string& lineBreak, -<a name="l00224"></a>00224 <span class="keyword">const</span> std::string& indent, -<a name="l00225"></a>00225 <span class="keywordtype">size_t</span> indentLevel) -<a name="l00226"></a>00226 { -<a name="l00227"></a>00227 <span class="keyword">const</span> std::string& nameFmt = normalizeName(element.getNameAs<std::string>()); -<a name="l00228"></a>00228 -<a name="l00229"></a>00229 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i) -<a name="l00230"></a>00230 stream += indent; -<a name="l00231"></a>00231 -<a name="l00232"></a>00232 stream += <span class="charliteral">'<'</span> + nameFmt; -<a name="l00233"></a>00233 -<a name="l00234"></a>00234 <span class="keyword">auto</span> attr = element.getAttributes(); -<a name="l00235"></a>00235 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = attr.first; it != attr.second; ++it) -<a name="l00236"></a>00236 stream += <span class="charliteral">' '</span> + normalizeName(it->first) + <span class="stringliteral">"=\""</span> + normalizeAttribValue(it->second) + <span class="charliteral">'\"'</span>; -<a name="l00237"></a>00237 -<a name="l00238"></a>00238 <span class="comment">//no support for mixed-mode content</span> -<a name="l00239"></a>00239 <span class="keyword">auto</span> iterPair = element.getChildren(); -<a name="l00240"></a>00240 <span class="keywordflow">if</span> (iterPair.first != iterPair.second) <span class="comment">//structured element</span> -<a name="l00241"></a>00241 { -<a name="l00242"></a>00242 stream += <span class="charliteral">'>'</span> + lineBreak; -<a name="l00243"></a>00243 -<a name="l00244"></a>00244 std::for_each(iterPair.first, iterPair.second, -<a name="l00245"></a>00245 [&](<span class="keyword">const</span> XmlElement & el) { <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(el, stream, lineBreak, indent, indentLevel + 1); }); -<a name="l00246"></a>00246 -<a name="l00247"></a>00247 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i) -<a name="l00248"></a>00248 stream += indent; -<a name="l00249"></a>00249 stream += <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak; -<a name="l00250"></a>00250 } -<a name="l00251"></a>00251 <span class="keywordflow">else</span> -<a name="l00252"></a>00252 { -<a name="l00253"></a>00253 std::string value; -<a name="l00254"></a>00254 element.getValue(value); -<a name="l00255"></a>00255 -<a name="l00256"></a>00256 <span class="keywordflow">if</span> (!value.empty()) <span class="comment">//value element</span> -<a name="l00257"></a>00257 stream += <span class="charliteral">'>'</span> + normalizeElementValue(value) + <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak; -<a name="l00258"></a>00258 <span class="keywordflow">else</span> <span class="comment">//empty element</span> -<a name="l00259"></a>00259 stream += <span class="stringliteral">"/>"</span> + lineBreak; -<a name="l00260"></a>00260 } -<a name="l00261"></a>00261 } -<a name="l00262"></a>00262 -<a name="l00263"></a>00263 std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> XmlDoc& doc, -<a name="l00264"></a>00264 <span class="keyword">const</span> std::string& lineBreak, -<a name="l00265"></a>00265 <span class="keyword">const</span> std::string& indent) -<a name="l00266"></a>00266 { -<a name="l00267"></a>00267 std::string version = doc.getVersionAs<std::string>(); -<a name="l00268"></a>00268 <span class="keywordflow">if</span> (!version.empty()) -<a name="l00269"></a>00269 version = <span class="stringliteral">" version=\""</span> + normalizeAttribValue(version) + <span class="charliteral">'\"'</span>; -<a name="l00270"></a>00270 -<a name="l00271"></a>00271 std::string encoding = doc.getEncodingAs<std::string>(); -<a name="l00272"></a>00272 <span class="keywordflow">if</span> (!encoding.empty()) -<a name="l00273"></a>00273 encoding = <span class="stringliteral">" encoding=\""</span> + normalizeAttribValue(encoding) + <span class="charliteral">'\"'</span>; -<a name="l00274"></a>00274 -<a name="l00275"></a>00275 std::string standalone = doc.getStandaloneAs<std::string>(); -<a name="l00276"></a>00276 <span class="keywordflow">if</span> (!standalone.empty()) -<a name="l00277"></a>00277 standalone = <span class="stringliteral">" standalone=\""</span> + normalizeAttribValue(standalone) + <span class="charliteral">'\"'</span>; -<a name="l00278"></a>00278 -<a name="l00279"></a>00279 std::string output = <span class="stringliteral">"<?xml"</span> + version + encoding + standalone + <span class="stringliteral">"?>"</span> + lineBreak; -<a name="l00280"></a>00280 <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(doc.root(), output, lineBreak, indent, 0); -<a name="l00281"></a>00281 <span class="keywordflow">return</span> output; -<a name="l00282"></a>00282 } -<a name="l00283"></a>00283 } -<a name="l00284"></a>00284 } -<a name="l00285"></a>00285 -<a name="l00286"></a>00286 <span class="keyword">inline</span> -<a name="l00287"></a><a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">00287</a> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee" title="Save XML document as a byte stream.">serialize</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc, -<a name="l00288"></a>00288 <span class="keyword">const</span> std::string& lineBreak, -<a name="l00289"></a>00289 <span class="keyword">const</span> std::string& indent) { <span class="keywordflow">return</span> implementation::serialize(doc, lineBreak, indent); } -<a name="l00290"></a>00290 -<a name="l00291"></a>00291 <span class="comment">/*</span> -<a name="l00292"></a>00292 <span class="comment">Grammar for XML parser</span> -<a name="l00293"></a>00293 <span class="comment">-------------------------------</span> -<a name="l00294"></a>00294 <span class="comment">document-expression:</span> -<a name="l00295"></a>00295 <span class="comment"> <?xml version="1.0" encoding="UTF-8" standalone="yes"?></span> -<a name="l00296"></a>00296 <span class="comment"> element-expression:</span> -<a name="l00297"></a>00297 <span class="comment"></span> -<a name="l00298"></a>00298 <span class="comment">element-expression:</span> -<a name="l00299"></a>00299 <span class="comment"> <string attributes-expression/></span> -<a name="l00300"></a>00300 <span class="comment"> <string attributes-expression> pm-expression </string></span> -<a name="l00301"></a>00301 <span class="comment"></span> -<a name="l00302"></a>00302 <span class="comment">element-list-expression:</span> -<a name="l00303"></a>00303 <span class="comment"> <empty></span> -<a name="l00304"></a>00304 <span class="comment"> element-expression element-list-expression</span> -<a name="l00305"></a>00305 <span class="comment"></span> -<a name="l00306"></a>00306 <span class="comment">attributes-expression:</span> -<a name="l00307"></a>00307 <span class="comment"> <empty></span> -<a name="l00308"></a>00308 <span class="comment"> string="string" attributes-expression</span> -<a name="l00309"></a>00309 <span class="comment"></span> -<a name="l00310"></a>00310 <span class="comment">pm-expression:</span> -<a name="l00311"></a>00311 <span class="comment"> string</span> -<a name="l00312"></a>00312 <span class="comment"> element-list-expression</span> -<a name="l00313"></a>00313 <span class="comment">*/</span> -<a name="l00314"></a>00314 -<a name="l00315"></a>00315 <span class="keyword">namespace </span>implementation -<a name="l00316"></a>00316 { -<a name="l00317"></a>00317 <span class="keyword">struct </span>Token -<a name="l00318"></a>00318 { -<a name="l00319"></a>00319 <span class="keyword">enum</span> Type -<a name="l00320"></a>00320 { -<a name="l00321"></a>00321 TK_LESS, -<a name="l00322"></a>00322 TK_GREATER, -<a name="l00323"></a>00323 TK_LESS_SLASH, -<a name="l00324"></a>00324 TK_SLASH_GREATER, -<a name="l00325"></a>00325 TK_EQUAL, -<a name="l00326"></a>00326 TK_QUOTE, -<a name="l00327"></a>00327 TK_DECL_BEGIN, -<a name="l00328"></a>00328 TK_DECL_END, -<a name="l00329"></a>00329 TK_NAME, -<a name="l00330"></a>00330 TK_END -<a name="l00331"></a>00331 }; -<a name="l00332"></a>00332 -<a name="l00333"></a>00333 Token(Type t) : type(t) {} -<a name="l00334"></a>00334 Token(<span class="keyword">const</span> std::string& txt) : type(TK_NAME), name(txt) {} -<a name="l00335"></a>00335 -<a name="l00336"></a>00336 Type type; -<a name="l00337"></a>00337 std::string name; <span class="comment">//filled if type == TK_NAME</span> -<a name="l00338"></a>00338 }; -<a name="l00339"></a>00339 -<a name="l00340"></a>00340 <span class="keyword">class </span>Scanner -<a name="l00341"></a>00341 { -<a name="l00342"></a>00342 <span class="keyword">public</span>: -<a name="l00343"></a>00343 Scanner(<span class="keyword">const</span> std::string& stream) : stream_(stream), pos(stream_.begin()) -<a name="l00344"></a>00344 { -<a name="l00345"></a>00345 <span class="keywordflow">if</span> (zen::startsWith(stream_, BYTE_ORDER_MARK_UTF8)) -<a name="l00346"></a>00346 pos += strLength(BYTE_ORDER_MARK_UTF8); -<a name="l00347"></a>00347 -<a name="l00348"></a>00348 tokens.push_back(std::make_pair(<span class="stringliteral">"<?xml"</span>, Token::TK_DECL_BEGIN)); -<a name="l00349"></a>00349 tokens.push_back(std::make_pair(<span class="stringliteral">"?>"</span>, Token::TK_DECL_END)); -<a name="l00350"></a>00350 tokens.push_back(std::make_pair(<span class="stringliteral">"</"</span>, Token::TK_LESS_SLASH)); -<a name="l00351"></a>00351 tokens.push_back(std::make_pair(<span class="stringliteral">"/>"</span>, Token::TK_SLASH_GREATER)); -<a name="l00352"></a>00352 tokens.push_back(std::make_pair(<span class="stringliteral">"<"</span> , Token::TK_LESS)); <span class="comment">//evaluate after TK_DECL_BEGIN!</span> -<a name="l00353"></a>00353 tokens.push_back(std::make_pair(<span class="stringliteral">">"</span> , Token::TK_GREATER)); -<a name="l00354"></a>00354 tokens.push_back(std::make_pair(<span class="stringliteral">"="</span> , Token::TK_EQUAL)); -<a name="l00355"></a>00355 tokens.push_back(std::make_pair(<span class="stringliteral">"\""</span>, Token::TK_QUOTE)); -<a name="l00356"></a>00356 tokens.push_back(std::make_pair(<span class="stringliteral">"\'"</span>, Token::TK_QUOTE)); -<a name="l00357"></a>00357 } -<a name="l00358"></a>00358 -<a name="l00359"></a>00359 Token nextToken() <span class="comment">//throw XmlParsingError</span> -<a name="l00360"></a>00360 { -<a name="l00361"></a>00361 <span class="comment">//skip whitespace</span> -<a name="l00362"></a>00362 pos = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> !zen::isWhiteSpace(c); }); -<a name="l00363"></a>00363 -<a name="l00364"></a>00364 <span class="keywordflow">if</span> (pos == stream_.end()) -<a name="l00365"></a>00365 <span class="keywordflow">return</span> Token::TK_END; -<a name="l00366"></a>00366 -<a name="l00367"></a>00367 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = tokens.begin(); it != tokens.end(); ++it) -<a name="l00368"></a>00368 <span class="keywordflow">if</span> (startsWith(pos, it->first)) -<a name="l00369"></a>00369 { -<a name="l00370"></a>00370 pos += it->first.size(); -<a name="l00371"></a>00371 <span class="keywordflow">return</span> it->second; -<a name="l00372"></a>00372 } -<a name="l00373"></a>00373 -<a name="l00374"></a>00374 <span class="keyword">auto</span> nameEnd = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) -<a name="l00375"></a>00375 { -<a name="l00376"></a>00376 <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> || -<a name="l00377"></a>00377 c == <span class="charliteral">'>'</span> || -<a name="l00378"></a>00378 c == <span class="charliteral">'='</span> || -<a name="l00379"></a>00379 c == <span class="charliteral">'/'</span> || -<a name="l00380"></a>00380 c == <span class="charliteral">'\''</span> || -<a name="l00381"></a>00381 c == <span class="charliteral">'\"'</span> || -<a name="l00382"></a>00382 zen::isWhiteSpace(c); -<a name="l00383"></a>00383 }); -<a name="l00384"></a>00384 -<a name="l00385"></a>00385 <span class="keywordflow">if</span> (nameEnd != pos) -<a name="l00386"></a>00386 { -<a name="l00387"></a>00387 std::string name(&*pos, nameEnd - pos); -<a name="l00388"></a>00388 pos = nameEnd; -<a name="l00389"></a>00389 <span class="keywordflow">return</span> implementation::denormalize(name); -<a name="l00390"></a>00390 } -<a name="l00391"></a>00391 -<a name="l00392"></a>00392 <span class="comment">//unknown token</span> -<a name="l00393"></a>00393 <span class="keywordflow">throw</span> XmlParsingError(posRow(), posCol()); -<a name="l00394"></a>00394 } -<a name="l00395"></a>00395 -<a name="l00396"></a>00396 std::string extractElementValue() -<a name="l00397"></a>00397 { -<a name="l00398"></a>00398 <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) -<a name="l00399"></a>00399 { -<a name="l00400"></a>00400 <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> || -<a name="l00401"></a>00401 c == <span class="charliteral">'>'</span>; -<a name="l00402"></a>00402 }); -<a name="l00403"></a>00403 std::string output(pos, it); -<a name="l00404"></a>00404 pos = it; -<a name="l00405"></a>00405 <span class="keywordflow">return</span> implementation::denormalize(output); -<a name="l00406"></a>00406 } -<a name="l00407"></a>00407 -<a name="l00408"></a>00408 std::string extractAttributeValue() -<a name="l00409"></a>00409 { -<a name="l00410"></a>00410 <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) -<a name="l00411"></a>00411 { -<a name="l00412"></a>00412 <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> || -<a name="l00413"></a>00413 c == <span class="charliteral">'>'</span> || -<a name="l00414"></a>00414 c == <span class="charliteral">'\''</span> || -<a name="l00415"></a>00415 c == <span class="charliteral">'\"'</span>; -<a name="l00416"></a>00416 }); -<a name="l00417"></a>00417 std::string output(pos, it); -<a name="l00418"></a>00418 pos = it; -<a name="l00419"></a>00419 <span class="keywordflow">return</span> implementation::denormalize(output); -<a name="l00420"></a>00420 } -<a name="l00421"></a>00421 -<a name="l00422"></a>00422 <span class="keywordtype">size_t</span> posRow() const <span class="comment">//current row beginning with 0</span> -<a name="l00423"></a>00423 { -<a name="l00424"></a>00424 <span class="keyword">const</span> <span class="keywordtype">size_t</span> crSum = std::count(stream_.begin(), pos, <span class="charliteral">'\r'</span>); <span class="comment">//carriage returns</span> -<a name="l00425"></a>00425 <span class="keyword">const</span> <span class="keywordtype">size_t</span> nlSum = std::count(stream_.begin(), pos, <span class="charliteral">'\n'</span>); <span class="comment">//new lines</span> -<a name="l00426"></a>00426 assert(crSum == 0 || nlSum == 0 || crSum == nlSum); -<a name="l00427"></a>00427 <span class="keywordflow">return</span> std::max(crSum, nlSum); <span class="comment">//be compatible with Linux/Mac/Win</span> -<a name="l00428"></a>00428 } -<a name="l00429"></a>00429 -<a name="l00430"></a>00430 <span class="keywordtype">size_t</span> posCol() const <span class="comment">//current col beginning with 0</span> -<a name="l00431"></a>00431 { -<a name="l00432"></a>00432 <span class="comment">//seek beginning of line</span> -<a name="l00433"></a>00433 <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pos; it != stream_.begin(); ) -<a name="l00434"></a>00434 { -<a name="l00435"></a>00435 --it; -<a name="l00436"></a>00436 <span class="keywordflow">if</span> (*it == <span class="charliteral">'\r'</span> || *it == <span class="charliteral">'\n'</span>) -<a name="l00437"></a>00437 <span class="keywordflow">return</span> pos - it - 1; -<a name="l00438"></a>00438 } -<a name="l00439"></a>00439 <span class="keywordflow">return</span> pos - stream_.begin(); -<a name="l00440"></a>00440 } -<a name="l00441"></a>00441 -<a name="l00442"></a>00442 <span class="keyword">private</span>: -<a name="l00443"></a>00443 Scanner(<span class="keyword">const</span> Scanner&); -<a name="l00444"></a>00444 Scanner& operator=(<span class="keyword">const</span> Scanner&); -<a name="l00445"></a>00445 -<a name="l00446"></a>00446 <span class="keywordtype">bool</span> startsWith(std::string::const_iterator it, <span class="keyword">const</span> std::string& prefix)<span class="keyword"> const</span> -<a name="l00447"></a>00447 <span class="keyword"> </span>{ -<a name="l00448"></a>00448 <span class="keywordflow">if</span> (stream_.end() - it < static_cast<ptrdiff_t>(prefix.size())) -<a name="l00449"></a>00449 <span class="keywordflow">return</span> <span class="keyword">false</span>; -<a name="l00450"></a>00450 <span class="keywordflow">return</span> std::equal(prefix.begin(), prefix.end(), it); -<a name="l00451"></a>00451 } -<a name="l00452"></a>00452 -<a name="l00453"></a>00453 <span class="keyword">typedef</span> std::vector<std::pair<std::string, Token::Type> > TokenList; -<a name="l00454"></a>00454 TokenList tokens; -<a name="l00455"></a>00455 -<a name="l00456"></a>00456 <span class="keyword">const</span> std::string stream_; -<a name="l00457"></a>00457 std::string::const_iterator pos; -<a name="l00458"></a>00458 }; -<a name="l00459"></a>00459 -<a name="l00460"></a>00460 -<a name="l00461"></a>00461 <span class="keyword">class </span>XmlParser -<a name="l00462"></a>00462 { -<a name="l00463"></a>00463 <span class="keyword">public</span>: -<a name="l00464"></a>00464 XmlParser(<span class="keyword">const</span> std::string& stream) : -<a name="l00465"></a>00465 scn(stream), -<a name="l00466"></a>00466 tk(scn.nextToken()) {} -<a name="l00467"></a>00467 -<a name="l00468"></a>00468 <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(XmlDoc& doc) <span class="comment">//throw XmlParsingError</span> -<a name="l00469"></a>00469 { -<a name="l00470"></a>00470 <span class="comment">//declaration (optional)</span> -<a name="l00471"></a>00471 <span class="keywordflow">if</span> (token().type == Token::TK_DECL_BEGIN) -<a name="l00472"></a>00472 { -<a name="l00473"></a>00473 nextToken(); -<a name="l00474"></a>00474 -<a name="l00475"></a>00475 <span class="keywordflow">while</span> (token().type == Token::TK_NAME) -<a name="l00476"></a>00476 { -<a name="l00477"></a>00477 std::string attribName = token().name; -<a name="l00478"></a>00478 nextToken(); -<a name="l00479"></a>00479 -<a name="l00480"></a>00480 consumeToken(Token::TK_EQUAL); -<a name="l00481"></a>00481 expectToken(Token::TK_QUOTE); -<a name="l00482"></a>00482 std::string attribValue = scn.extractAttributeValue(); -<a name="l00483"></a>00483 nextToken(); -<a name="l00484"></a>00484 -<a name="l00485"></a>00485 consumeToken(Token::TK_QUOTE); -<a name="l00486"></a>00486 -<a name="l00487"></a>00487 <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"version"</span>) -<a name="l00488"></a>00488 doc.setVersion(attribValue); -<a name="l00489"></a>00489 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"encoding"</span>) -<a name="l00490"></a>00490 doc.setEncoding(attribValue); -<a name="l00491"></a>00491 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"standalone"</span>) -<a name="l00492"></a>00492 doc.setStandalone(attribValue); -<a name="l00493"></a>00493 } -<a name="l00494"></a>00494 consumeToken(Token::TK_DECL_END); -<a name="l00495"></a>00495 } -<a name="l00496"></a>00496 -<a name="l00497"></a>00497 XmlDoc dummy; -<a name="l00498"></a>00498 XmlElement& elemTmp = dummy.root(); -<a name="l00499"></a>00499 parseChildElements(elemTmp); -<a name="l00500"></a>00500 -<a name="l00501"></a>00501 <span class="keyword">auto</span> iterPair = elemTmp.getChildren(); -<a name="l00502"></a>00502 <span class="keywordflow">if</span> (iterPair.first != iterPair.second) -<a name="l00503"></a>00503 doc.root().swap(*iterPair.first); -<a name="l00504"></a>00504 -<a name="l00505"></a>00505 expectToken(Token::TK_END); -<a name="l00506"></a>00506 }; -<a name="l00507"></a>00507 -<a name="l00508"></a>00508 <span class="keyword">private</span>: -<a name="l00509"></a>00509 XmlParser(<span class="keyword">const</span> XmlParser&); -<a name="l00510"></a>00510 XmlParser& operator=(<span class="keyword">const</span> XmlParser&); -<a name="l00511"></a>00511 -<a name="l00512"></a>00512 <span class="keywordtype">void</span> parseChildElements(XmlElement& parent) -<a name="l00513"></a>00513 { -<a name="l00514"></a>00514 <span class="keywordflow">while</span> (token().type == Token::TK_LESS) -<a name="l00515"></a>00515 { -<a name="l00516"></a>00516 nextToken(); -<a name="l00517"></a>00517 -<a name="l00518"></a>00518 expectToken(Token::TK_NAME); -<a name="l00519"></a>00519 std::string elementName = token().name; -<a name="l00520"></a>00520 nextToken(); -<a name="l00521"></a>00521 -<a name="l00522"></a>00522 XmlElement& newElement = parent.addChild(elementName); -<a name="l00523"></a>00523 -<a name="l00524"></a>00524 parseAttributes(newElement); -<a name="l00525"></a>00525 -<a name="l00526"></a>00526 <span class="keywordflow">if</span> (token().type == Token::TK_SLASH_GREATER) <span class="comment">//empty element</span> -<a name="l00527"></a>00527 { -<a name="l00528"></a>00528 nextToken(); -<a name="l00529"></a>00529 <span class="keywordflow">continue</span>; -<a name="l00530"></a>00530 } -<a name="l00531"></a>00531 -<a name="l00532"></a>00532 expectToken(Token::TK_GREATER); -<a name="l00533"></a>00533 std::string elementValue = scn.extractElementValue(); -<a name="l00534"></a>00534 nextToken(); -<a name="l00535"></a>00535 -<a name="l00536"></a>00536 <span class="comment">//no support for mixed-mode content</span> -<a name="l00537"></a>00537 <span class="keywordflow">if</span> (token().type == Token::TK_LESS) <span class="comment">//structured element</span> -<a name="l00538"></a>00538 parseChildElements(newElement); -<a name="l00539"></a>00539 <span class="keywordflow">else</span> <span class="comment">//value element</span> -<a name="l00540"></a>00540 newElement.setValue(elementValue); -<a name="l00541"></a>00541 -<a name="l00542"></a>00542 consumeToken(Token::TK_LESS_SLASH); -<a name="l00543"></a>00543 -<a name="l00544"></a>00544 <span class="keywordflow">if</span> (token().type != Token::TK_NAME || -<a name="l00545"></a>00545 elementName != token().name) -<a name="l00546"></a>00546 <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol()); -<a name="l00547"></a>00547 nextToken(); -<a name="l00548"></a>00548 -<a name="l00549"></a>00549 consumeToken(Token::TK_GREATER); -<a name="l00550"></a>00550 } -<a name="l00551"></a>00551 }; -<a name="l00552"></a>00552 -<a name="l00553"></a>00553 <span class="keywordtype">void</span> parseAttributes(XmlElement& element) -<a name="l00554"></a>00554 { -<a name="l00555"></a>00555 <span class="keywordflow">while</span> (token().type == Token::TK_NAME) -<a name="l00556"></a>00556 { -<a name="l00557"></a>00557 std::string attribName = token().name; -<a name="l00558"></a>00558 nextToken(); -<a name="l00559"></a>00559 -<a name="l00560"></a>00560 consumeToken(Token::TK_EQUAL); -<a name="l00561"></a>00561 expectToken(Token::TK_QUOTE); -<a name="l00562"></a>00562 std::string attribValue = scn.extractAttributeValue(); -<a name="l00563"></a>00563 nextToken(); -<a name="l00564"></a>00564 -<a name="l00565"></a>00565 consumeToken(Token::TK_QUOTE); -<a name="l00566"></a>00566 element.setAttribute(attribName, attribValue); -<a name="l00567"></a>00567 } -<a name="l00568"></a>00568 } -<a name="l00569"></a>00569 -<a name="l00570"></a>00570 <span class="keyword">const</span> Token& token()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tk; } -<a name="l00571"></a>00571 <span class="keywordtype">void</span> nextToken() { tk = scn.nextToken(); } -<a name="l00572"></a>00572 -<a name="l00573"></a>00573 <span class="keywordtype">void</span> consumeToken(Token::Type t) <span class="comment">//throw XmlParsingError</span> -<a name="l00574"></a>00574 { -<a name="l00575"></a>00575 expectToken(t); <span class="comment">//throw XmlParsingError</span> -<a name="l00576"></a>00576 nextToken(); -<a name="l00577"></a>00577 } -<a name="l00578"></a>00578 -<a name="l00579"></a>00579 <span class="keywordtype">void</span> expectToken(Token::Type t) <span class="comment">//throw XmlParsingError</span> -<a name="l00580"></a>00580 { -<a name="l00581"></a>00581 <span class="keywordflow">if</span> (token().type != t) -<a name="l00582"></a>00582 <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol()); -<a name="l00583"></a>00583 } -<a name="l00584"></a>00584 -<a name="l00585"></a>00585 Scanner scn; -<a name="l00586"></a>00586 Token tk; -<a name="l00587"></a>00587 }; -<a name="l00588"></a>00588 } -<a name="l00589"></a>00589 -<a name="l00590"></a>00590 <span class="keyword">inline</span> -<a name="l00591"></a><a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7">00591</a> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#a6cf1ec0b57fc1ae9aa95761800e67ec7" title="Load XML document from a byte stream.">parse</a>(<span class="keyword">const</span> std::string& stream, <a class="code" href="classzen_1_1_xml_doc.html" title="The complete XML document.">XmlDoc</a>& doc) <span class="comment">//throw XmlParsingError</span> -<a name="l00592"></a>00592 { -<a name="l00593"></a>00593 implementation::XmlParser(stream).parse(doc); <span class="comment">//throw XmlParsingError</span> -<a name="l00594"></a>00594 } -<a name="l00595"></a>00595 } -<a name="l00596"></a>00596 -<a name="l00597"></a>00597 <span class="preprocessor">#endif //ZEN_XML_PARSER_HEADER_81248670213764583021432</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include <cstdio></span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <cstddef></span> <span class="comment">//ptrdiff_t; req. on Linux</span></div> +<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <zen/string_traits.h></span></div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "dom.h"</span></div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "error.h"</span></div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div> +<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="keyword">namespace </span>zen</div> +<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div> +<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> </div> +<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlDoc& doc,</div> +<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">const</span> std::string& lineBreak = <span class="stringliteral">"\r\n"</span>,</div> +<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">const</span> std::string& indent = <span class="stringliteral">" "</span>); <span class="comment">//throw ()</span></div> +<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div> +<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html"> 35</a></span> <span class="keyword">struct </span><a class="code" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> : <span class="keyword">public</span> <a class="code" href="structzen_1_1_xml_error.html">XmlError</a></div> +<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> {</div> +<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a>(<span class="keywordtype">size_t</span> rowNo, <span class="keywordtype">size_t</span> colNo) : <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a>(rowNo), <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a>(colNo) {}</div> +<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e"> 39</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a>; <span class="comment">//beginning with 0</span></div> +<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd"> 41</a></span> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a>; <span class="comment">//</span></div> +<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> };</div> +<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div> +<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div> +<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> +<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(<span class="keyword">const</span> std::string& stream); <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div> +<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div> +<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div> +<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div> +<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div> +<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> +<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div> +<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div> +<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div> +<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div> +<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div> +<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div> +<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div> +<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div> +<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div> +<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div> +<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div> +<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div> +<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div> +<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div> +<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">//---------------------------- implementation ----------------------------</span></div> +<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment">//see: http://www.w3.org/TR/xml/</span></div> +<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div> +<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">namespace </span>implementation</div> +<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> {</div> +<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> std::pair<char, char> hexify(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c)</div> +<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> {</div> +<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">auto</span> hexifyDigit = [](<span class="keywordtype">int</span> num) -> <span class="keywordtype">char</span> <span class="comment">//input [0, 15], output 0-9, A-F</span></div> +<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  {</div> +<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  assert(0 <= num&& num <= 15); <span class="comment">//guaranteed by design below!</span></div> +<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">char</span><span class="keyword">></span>(num <= 9 ? <span class="comment">//no signed/unsigned char problem here!</span></div> +<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="charliteral">'0'</span> + num :</div> +<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="charliteral">'A'</span> + (num - 10));</div> +<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  };</div> +<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> std::make_pair(hexifyDigit(c / 16), hexifyDigit(c % 16));</div> +<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div> +<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> +<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div> +<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keywordtype">char</span> unhexify(<span class="keywordtype">char</span> high, <span class="keywordtype">char</span> low)</div> +<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div> +<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keyword">auto</span> unhexifyDigit = [](<span class="keywordtype">char</span> hex) -> <span class="keywordtype">int</span> <span class="comment">//input 0-9, a-f, A-F; output range: [0, 15]</span></div> +<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div> +<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (<span class="charliteral">'0'</span> <= hex && hex <= <span class="charliteral">'9'</span>) <span class="comment">//no signed/unsigned char problem here!</span></div> +<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> hex - <span class="charliteral">'0'</span>;</div> +<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'A'</span> <= hex && hex <= <span class="charliteral">'F'</span>)</div> +<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> (hex - <span class="charliteral">'A'</span>) + 10;</div> +<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="charliteral">'a'</span> <= hex && hex <= <span class="charliteral">'f'</span>)</div> +<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> (hex - <span class="charliteral">'a'</span>) + 10;</div> +<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  assert(<span class="keyword">false</span>);</div> +<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">return</span> 0;</div> +<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  };</div> +<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(16 * unhexifyDigit(high) + unhexifyDigit(low)); <span class="comment">//[!] convert to unsigned char first, then to char (which may be signed)</span></div> +<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> };</div> +<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div> +<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> +<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="keyword">template</span> <<span class="keyword">class</span> Predicate> <span class="keyword">inline</span></div> +<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> std::string normalize(<span class="keyword">const</span> std::string& str, Predicate pred) <span class="comment">//pred: unary function taking a char, return true if value shall be encoded as hex</span></div> +<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> {</div> +<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  std::string output;</div> +<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  std::for_each(str.begin(), str.end(),</div> +<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  [&](<span class="keywordtype">char</span> c)</div> +<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  {</div> +<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>) <span class="comment">//</span></div> +<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  output += <span class="stringliteral">"&amp;"</span>;</div> +<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'<'</span>) <span class="comment">//normalization mandatory: http://www.w3.org/TR/xml/#syntax</span></div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  output += <span class="stringliteral">"&lt;"</span>;</div> +<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'>'</span>) <span class="comment">//</span></div> +<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  output += <span class="stringliteral">"&gt;"</span>;</div> +<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pred(c))</div> +<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div> +<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'\''</span>)</div> +<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  output += <span class="stringliteral">"&apos;"</span>;</div> +<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\"'</span>)</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  output += <span class="stringliteral">"&quot;"</span>;</div> +<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div> +<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  output += <span class="stringliteral">"&#x"</span>;</div> +<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">const</span> <span class="keyword">auto</span> hexDigits = hexify(c); <span class="comment">//hexify beats "printNumber<std::string>("&#x%02X;", c)" by a nice factor of 3!</span></div> +<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  output += hexDigits.first;</div> +<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  output += hexDigits.second;</div> +<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  output += <span class="charliteral">';'</span>;</div> +<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div> +<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div> +<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  output += c;</div> +<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  });</div> +<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> output;</div> +<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> }</div> +<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div> +<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> std::string normalizeName(<span class="keyword">const</span> std::string& str)</div> +<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> {</div> +<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> isWhiteSpace(c) || c == <span class="charliteral">'='</span> || c == <span class="charliteral">'/'</span> || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; });</div> +<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> }</div> +<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div> +<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> std::string normalizeElementValue(<span class="keyword">const</span> std::string& str)</div> +<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div> +<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32; });</div> +<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> }</div> +<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> std::string normalizeAttribValue(<span class="keyword">const</span> std::string& str)</div> +<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> {</div> +<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">return</span> normalize(str, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(c) < 32 || c == <span class="charliteral">'\''</span> || c == <span class="charliteral">'\"'</span>; });</div> +<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div> +<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div> +<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div> +<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span> <<span class="keyword">class</span> CharIterator, <span class="keywordtype">size_t</span> N> <span class="keyword">inline</span></div> +<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">bool</span> checkEntity(CharIterator& first, CharIterator last, <span class="keyword">const</span> <span class="keywordtype">char</span> (&placeholder)[N])</div> +<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> {</div> +<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  assert(placeholder[N - 1] == 0);</div> +<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">const</span> ptrdiff_t strLen = N - 1; <span class="comment">//don't count null-terminator</span></div> +<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">if</span> (last - first >= strLen && std::equal(first, first + strLen, placeholder))</div> +<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  {</div> +<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  first += strLen - 1;</div> +<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div> +<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> }</div> +<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div> +<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div> +<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">namespace</span></div> +<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div> +<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> std::string denormalize(<span class="keyword">const</span> std::string& str)</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> {</div> +<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  std::string output;</div> +<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = str.begin(); it != str.end(); ++it)</div> +<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  {</div> +<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> c = *it;</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div> +<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (c == <span class="charliteral">'&'</span>)</div> +<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  {</div> +<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&amp;"</span>))</div> +<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  output += <span class="charliteral">'&'</span>;</div> +<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&lt;"</span>))</div> +<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  output += <span class="charliteral">'<'</span>;</div> +<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&gt;"</span>))</div> +<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  output += <span class="charliteral">'>'</span>;</div> +<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&apos;"</span>))</div> +<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  output += <span class="charliteral">'\''</span>;</div> +<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (checkEntity(it, str.end(), <span class="stringliteral">"&quot;"</span>))</div> +<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  output += <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (str.end() - it >= 6 &&</div> +<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  it[1] == <span class="charliteral">'#'</span> &&</div> +<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  it[2] == <span class="charliteral">'x'</span> &&</div> +<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  it[5] == <span class="charliteral">';'</span>)</div> +<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div> +<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  output += unhexify(it[3], it[4]); <span class="comment">//unhexify beats "::sscanf(&it[3], "%02X", &tmp)" by a factor of 3000 for ~250000 calls!!!</span></div> +<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  it += 5;</div> +<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div> +<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  output += c; <span class="comment">//unexpected char!</span></div> +<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div> +<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (c == <span class="charliteral">'\r'</span>) <span class="comment">//map all end-of-line characters to \n http://www.w3.org/TR/xml/#sec-line-ends</span></div> +<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  {</div> +<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keyword">auto</span> itNext = it + 1;</div> +<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">if</span> (itNext != str.end() && *itNext == <span class="charliteral">'\n'</span>)</div> +<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  ++it;</div> +<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  output += <span class="charliteral">'\n'</span>;</div> +<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div> +<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  output += c;</div> +<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  };</div> +<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> output;</div> +<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> }</div> +<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div> +<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div> +<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keywordtype">void</span> <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlElement& element, std::string& stream,</div> +<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keyword">const</span> std::string& lineBreak,</div> +<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keyword">const</span> std::string& indent,</div> +<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordtype">size_t</span> indentLevel)</div> +<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> {</div> +<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">const</span> std::string& nameFmt = normalizeName(element.getNameAs<std::string>());</div> +<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div> +<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i)</div> +<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  stream += indent;</div> +<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div> +<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  stream += <span class="charliteral">'<'</span> + nameFmt;</div> +<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div> +<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">auto</span> attr = element.getAttributes();</div> +<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = attr.first; it != attr.second; ++it)</div> +<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  stream += <span class="charliteral">' '</span> + normalizeName(it->first) + <span class="stringliteral">"=\""</span> + normalizeAttribValue(it->second) + <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div> +<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="comment">//no support for mixed-mode content</span></div> +<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">auto</span> iterPair = element.getChildren();</div> +<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">if</span> (iterPair.first != iterPair.second) <span class="comment">//structured element</span></div> +<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div> +<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  stream += <span class="charliteral">'>'</span> + lineBreak;</div> +<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div> +<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  std::for_each(iterPair.first, iterPair.second,</div> +<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  [&](<span class="keyword">const</span> XmlElement & el) { <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(el, stream, lineBreak, indent, indentLevel + 1); });</div> +<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div> +<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < indentLevel; ++i)</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  stream += indent;</div> +<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  stream += <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak;</div> +<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div> +<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">else</span></div> +<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  {</div> +<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  std::string value;</div> +<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  element.getValue(value);</div> +<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div> +<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (!value.empty()) <span class="comment">//value element</span></div> +<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  stream += <span class="charliteral">'>'</span> + normalizeElementValue(value) + <span class="stringliteral">"</"</span> + nameFmt + <span class="charliteral">'>'</span> + lineBreak;</div> +<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">else</span> <span class="comment">//empty element</span></div> +<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  stream += <span class="stringliteral">"/>"</span> + lineBreak;</div> +<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  }</div> +<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> }</div> +<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div> +<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> XmlDoc& doc,</div> +<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keyword">const</span> std::string& lineBreak,</div> +<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> std::string& indent)</div> +<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div> +<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  std::string version = doc.getVersionAs<std::string>();</div> +<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span> (!version.empty())</div> +<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  version = <span class="stringliteral">" version=\""</span> + normalizeAttribValue(version) + <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div> +<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  std::string encoding = doc.getEncodingAs<std::string>();</div> +<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">if</span> (!encoding.empty())</div> +<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  encoding = <span class="stringliteral">" encoding=\""</span> + normalizeAttribValue(encoding) + <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div> +<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  std::string standalone = doc.getStandaloneAs<std::string>();</div> +<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">if</span> (!standalone.empty())</div> +<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  standalone = <span class="stringliteral">" standalone=\""</span> + normalizeAttribValue(standalone) + <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div> +<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  std::string output = <span class="stringliteral">"<?xml"</span> + version + encoding + standalone + <span class="stringliteral">"?>"</span> + lineBreak;</div> +<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(doc.root(), output, lineBreak, indent, 0);</div> +<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span> output;</div> +<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> }</div> +<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div> +<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> }</div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div> +<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee"> 287</a></span> std::string <a class="code" href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">serialize</a>(<span class="keyword">const</span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a>& doc,</div> +<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">const</span> std::string& lineBreak,</div> +<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> std::string& indent) { <span class="keywordflow">return</span> implementation::serialize(doc, lineBreak, indent); }</div> +<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div> +<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="comment">/*</span></div> +<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="comment">Grammar for XML parser</span></div> +<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="comment">-------------------------------</span></div> +<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="comment">document-expression:</span></div> +<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="comment"> <?xml version="1.0" encoding="UTF-8" standalone="yes"?></span></div> +<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="comment"> element-expression:</span></div> +<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="comment"></span></div> +<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="comment">element-expression:</span></div> +<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="comment"> <string attributes-expression/></span></div> +<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="comment"> <string attributes-expression> pm-expression </string></span></div> +<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="comment"></span></div> +<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="comment">element-list-expression:</span></div> +<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="comment"> <empty></span></div> +<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="comment"> element-expression element-list-expression</span></div> +<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="comment"></span></div> +<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="comment">attributes-expression:</span></div> +<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="comment"> <empty></span></div> +<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="comment"> string="string" attributes-expression</span></div> +<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="comment"></span></div> +<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment">pm-expression:</span></div> +<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> string</span></div> +<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment"> element-list-expression</span></div> +<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">*/</span></div> +<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div> +<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keyword">namespace </span>implementation</div> +<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> {</div> +<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">struct </span>Token</div> +<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div> +<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">enum</span> Type</div> +<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div> +<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  TK_LESS,</div> +<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  TK_GREATER,</div> +<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  TK_LESS_SLASH,</div> +<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  TK_SLASH_GREATER,</div> +<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  TK_EQUAL,</div> +<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  TK_QUOTE,</div> +<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  TK_DECL_BEGIN,</div> +<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  TK_DECL_END,</div> +<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  TK_NAME,</div> +<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  TK_END</div> +<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  };</div> +<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div> +<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  Token(Type t) : type(t) {}</div> +<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  Token(<span class="keyword">const</span> std::string& txt) : type(TK_NAME), name(txt) {}</div> +<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div> +<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  Type type;</div> +<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  std::string name; <span class="comment">//filled if type == TK_NAME</span></div> +<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> };</div> +<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div> +<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">class </span>Scanner</div> +<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> {</div> +<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  Scanner(<span class="keyword">const</span> std::string& stream) :</div> +<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  xmlCommentBegin(<span class="stringliteral">"<!--"</span>),</div> +<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  xmlCommentEnd (<span class="stringliteral">"-->"</span>),</div> +<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  stream_(stream),</div> +<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  pos(stream_.begin())</div> +<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  {</div> +<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">if</span> (zen::startsWith(stream_, BYTE_ORDER_MARK_UTF8))</div> +<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  pos += strLength(BYTE_ORDER_MARK_UTF8);</div> +<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div> +<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"<?xml"</span>, Token::TK_DECL_BEGIN));</div> +<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"?>"</span>, Token::TK_DECL_END));</div> +<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"</"</span>, Token::TK_LESS_SLASH));</div> +<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"/>"</span>, Token::TK_SLASH_GREATER));</div> +<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"<"</span> , Token::TK_LESS)); <span class="comment">//evaluate after TK_DECL_BEGIN!</span></div> +<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  tokens.push_back(std::make_pair(<span class="stringliteral">">"</span> , Token::TK_GREATER));</div> +<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"="</span> , Token::TK_EQUAL));</div> +<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"\""</span>, Token::TK_QUOTE));</div> +<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  tokens.push_back(std::make_pair(<span class="stringliteral">"\'"</span>, Token::TK_QUOTE));</div> +<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div> +<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div> +<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  Token nextToken() <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div> +<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="comment">//skip whitespace</span></div> +<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  pos = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> !zen::isWhiteSpace(c); });</div> +<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div> +<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">if</span> (pos == stream_.end())</div> +<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> Token::TK_END;</div> +<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div> +<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="comment">//skip XML comments</span></div> +<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (startsWith(xmlCommentBegin))</div> +<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  {</div> +<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keyword">auto</span> it = std::search(pos + xmlCommentBegin.size(), stream_.end(), xmlCommentEnd.begin(), xmlCommentEnd.end());</div> +<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">if</span> (it != stream_.end())</div> +<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  {</div> +<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  pos = it + xmlCommentEnd.size();</div> +<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="keywordflow">return</span> nextToken();</div> +<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  }</div> +<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  }</div> +<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div> +<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = tokens.begin(); it != tokens.end(); ++it)</div> +<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keywordflow">if</span> (startsWith(it->first))</div> +<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  {</div> +<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  pos += it->first.size();</div> +<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> it->second;</div> +<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div> +<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div> +<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keyword">auto</span> nameEnd = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> +<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div> +<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> +<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  c == <span class="charliteral">'>'</span> ||</div> +<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  c == <span class="charliteral">'='</span> ||</div> +<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  c == <span class="charliteral">'/'</span> ||</div> +<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  c == <span class="charliteral">'\''</span> ||</div> +<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  c == <span class="charliteral">'\"'</span> ||</div> +<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  zen::isWhiteSpace(c);</div> +<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  });</div> +<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> </div> +<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (nameEnd != pos)</div> +<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  {</div> +<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  std::string name(&*pos, nameEnd - pos);</div> +<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  pos = nameEnd;</div> +<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">return</span> implementation::denormalize(name);</div> +<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div> +<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div> +<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="comment">//unknown token</span></div> +<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">throw</span> XmlParsingError(posRow(), posCol());</div> +<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div> +<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div> +<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  std::string extractElementValue()</div> +<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  {</div> +<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> +<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  {</div> +<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> +<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  c == <span class="charliteral">'>'</span>;</div> +<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  });</div> +<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  std::string output(pos, it);</div> +<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  pos = it;</div> +<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">return</span> implementation::denormalize(output);</div> +<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div> +<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div> +<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  std::string extractAttributeValue()</div> +<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  {</div> +<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keyword">auto</span> it = std::find_if(pos, stream_.end(), [](<span class="keywordtype">char</span> c)</div> +<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  {</div> +<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> c == <span class="charliteral">'<'</span> ||</div> +<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  c == <span class="charliteral">'>'</span> ||</div> +<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  c == <span class="charliteral">'\''</span> ||</div> +<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  c == <span class="charliteral">'\"'</span>;</div> +<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  });</div> +<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  std::string output(pos, it);</div> +<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  pos = it;</div> +<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">return</span> implementation::denormalize(output);</div> +<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div> +<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> </div> +<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordtype">size_t</span> posRow() const <span class="comment">//current row beginning with 0</span></div> +<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  {</div> +<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> crSum = std::count(stream_.begin(), pos, <span class="charliteral">'\r'</span>); <span class="comment">//carriage returns</span></div> +<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> nlSum = std::count(stream_.begin(), pos, <span class="charliteral">'\n'</span>); <span class="comment">//new lines</span></div> +<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  assert(crSum == 0 || nlSum == 0 || crSum == nlSum);</div> +<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">return</span> std::max(crSum, nlSum); <span class="comment">//be compatible with Linux/Mac/Win</span></div> +<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  }</div> +<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div> +<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordtype">size_t</span> posCol() const <span class="comment">//current col beginning with 0</span></div> +<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div> +<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="comment">//seek beginning of line</span></div> +<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pos; it != stream_.begin(); )</div> +<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div> +<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  --it;</div> +<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">if</span> (*it == <span class="charliteral">'\r'</span> || *it == <span class="charliteral">'\n'</span>)</div> +<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">return</span> pos - it - 1;</div> +<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div> +<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> pos - stream_.begin();</div> +<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div> +<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div> +<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  Scanner(<span class="keyword">const</span> Scanner&);</div> +<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  Scanner& operator=(<span class="keyword">const</span> Scanner&);</div> +<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div> +<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordtype">bool</span> startsWith(<span class="keyword">const</span> std::string& prefix)<span class="keyword"> const</span></div> +<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="keyword"> </span>{</div> +<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">if</span> (stream_.end() - pos < static_cast<ptrdiff_t>(prefix.size()))</div> +<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keywordflow">return</span> std::equal(prefix.begin(), prefix.end(), pos);</div> +<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  }</div> +<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> </div> +<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keyword">typedef</span> std::vector<std::pair<std::string, Token::Type> > TokenList;</div> +<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  TokenList tokens;</div> +<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div> +<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">const</span> std::string xmlCommentBegin;</div> +<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keyword">const</span> std::string xmlCommentEnd;</div> +<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div> +<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">const</span> std::string stream_;</div> +<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  std::string::const_iterator pos;</div> +<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> };</div> +<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div> +<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div> +<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="keyword">class </span>XmlParser</div> +<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> {</div> +<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  XmlParser(<span class="keyword">const</span> std::string& stream) :</div> +<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  scn(stream),</div> +<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  tk(scn.nextToken()) {}</div> +<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div> +<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  XmlDoc <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>() <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  {</div> +<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  XmlDoc doc;</div> +<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div> +<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="comment">//declaration (optional)</span></div> +<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">if</span> (token().type == Token::TK_DECL_BEGIN)</div> +<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div> +<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  nextToken();</div> +<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div> +<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordflow">while</span> (token().type == Token::TK_NAME)</div> +<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  {</div> +<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  std::string attribName = token().name;</div> +<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  nextToken();</div> +<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div> +<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  consumeToken(Token::TK_EQUAL);</div> +<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  expectToken(Token::TK_QUOTE);</div> +<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  std::string attribValue = scn.extractAttributeValue();</div> +<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  nextToken();</div> +<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div> +<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  consumeToken(Token::TK_QUOTE);</div> +<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div> +<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"version"</span>)</div> +<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  doc.setVersion(attribValue);</div> +<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"encoding"</span>)</div> +<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  doc.setEncoding(attribValue);</div> +<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (attribName == <span class="stringliteral">"standalone"</span>)</div> +<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  doc.setStandalone(attribValue);</div> +<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  }</div> +<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  consumeToken(Token::TK_DECL_END);</div> +<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div> +<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div> +<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  XmlDoc dummy;</div> +<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  XmlElement& elemTmp = dummy.root();</div> +<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  parseChildElements(elemTmp);</div> +<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div> +<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">auto</span> iterPair = elemTmp.getChildren();</div> +<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">if</span> (iterPair.first != iterPair.second)</div> +<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  doc.root().swap(*iterPair.first);</div> +<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div> +<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  expectToken(Token::TK_END);</div> +<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> doc;</div> +<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  };</div> +<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div> +<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  XmlParser(<span class="keyword">const</span> XmlParser&);</div> +<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  XmlParser& operator=(<span class="keyword">const</span> XmlParser&);</div> +<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div> +<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordtype">void</span> parseChildElements(XmlElement& parent)</div> +<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div> +<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">while</span> (token().type == Token::TK_LESS)</div> +<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div> +<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  nextToken();</div> +<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> </div> +<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  expectToken(Token::TK_NAME);</div> +<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  std::string elementName = token().name;</div> +<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  nextToken();</div> +<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div> +<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  XmlElement& newElement = parent.addChild(elementName);</div> +<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div> +<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  parseAttributes(newElement);</div> +<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div> +<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (token().type == Token::TK_SLASH_GREATER) <span class="comment">//empty element</span></div> +<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div> +<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  nextToken();</div> +<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">continue</span>;</div> +<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div> +<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div> +<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  expectToken(Token::TK_GREATER);</div> +<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  std::string elementValue = scn.extractElementValue();</div> +<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  nextToken();</div> +<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div> +<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="comment">//no support for mixed-mode content</span></div> +<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (token().type == Token::TK_LESS) <span class="comment">//structured element</span></div> +<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  parseChildElements(newElement);</div> +<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">else</span> <span class="comment">//value element</span></div> +<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  newElement.setValue(elementValue);</div> +<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div> +<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  consumeToken(Token::TK_LESS_SLASH);</div> +<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> </div> +<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="keywordflow">if</span> (token().type != Token::TK_NAME ||</div> +<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  elementName != token().name)</div> +<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());</div> +<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  nextToken();</div> +<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div> +<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  consumeToken(Token::TK_GREATER);</div> +<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div> +<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  };</div> +<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> </div> +<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">void</span> parseAttributes(XmlElement& element)</div> +<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div> +<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">while</span> (token().type == Token::TK_NAME)</div> +<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div> +<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  std::string attribName = token().name;</div> +<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  nextToken();</div> +<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div> +<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  consumeToken(Token::TK_EQUAL);</div> +<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  expectToken(Token::TK_QUOTE);</div> +<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  std::string attribValue = scn.extractAttributeValue();</div> +<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  nextToken();</div> +<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div> +<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  consumeToken(Token::TK_QUOTE);</div> +<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  element.setAttribute(attribName, attribValue);</div> +<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div> +<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div> +<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div> +<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">const</span> Token& token()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> tk; }</div> +<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordtype">void</span> nextToken() { tk = scn.nextToken(); }</div> +<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div> +<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordtype">void</span> consumeToken(Token::Type t) <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  {</div> +<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  expectToken(t); <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  nextToken();</div> +<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div> +<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div> +<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordtype">void</span> expectToken(Token::Type t) <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div> +<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">if</span> (token().type != t)</div> +<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">throw</span> XmlParsingError(scn.posRow(), scn.posCol());</div> +<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  }</div> +<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div> +<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  Scanner scn;</div> +<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  Token tk;</div> +<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> };</div> +<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div> +<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div> +<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="keyword">inline</span></div> +<div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477"> 612</a></span> <a class="code" href="classzen_1_1_xml_doc.html">XmlDoc</a> <a class="code" href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">parse</a>(<span class="keyword">const</span> std::string& stream) <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> {</div> +<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> implementation::XmlParser(stream).parse(); <span class="comment">//throw XmlParsingError</span></div> +<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> }</div> +<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> }</div> +<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div> +<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor">#endif //ZEN_XML_PARSER_HEADER_81248670213764583021432</span></div> +<div class="ttc" id="namespacezen_html_a1ae1a4688d724b554fe3bf4638700477"><div class="ttname"><a href="namespacezen.html#a1ae1a4688d724b554fe3bf4638700477">zen::parse</a></div><div class="ttdeci">XmlDoc parse(const std::string &stream)</div><div class="ttdoc">Load XML document from a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:612</div></div> +<div class="ttc" id="namespacezen_html_afaa4920e275078e6c8009fbdf58b57ee"><div class="ttname"><a href="namespacezen.html#afaa4920e275078e6c8009fbdf58b57ee">zen::serialize</a></div><div class="ttdeci">std::string serialize(const XmlDoc &doc, const std::string &lineBreak="\r\n", const std::string &indent=" ")</div><div class="ttdoc">Save XML document as a byte stream. </div><div class="ttdef"><b>Definition:</b> parser.h:287</div></div> +<div class="ttc" id="structzen_1_1_xml_parsing_error_html_a3ed4cd1b5599df9b52500f620421496e"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">zen::XmlParsingError::row</a></div><div class="ttdeci">size_t row</div><div class="ttdoc">Input file row where the parsing error occured (zero-based) </div><div class="ttdef"><b>Definition:</b> parser.h:39</div></div> +<div class="ttc" id="classzen_1_1_xml_doc_html"><div class="ttname"><a href="classzen_1_1_xml_doc.html">zen::XmlDoc</a></div><div class="ttdoc">The complete XML document. </div><div class="ttdef"><b>Definition:</b> dom.h:249</div></div> +<div class="ttc" id="structzen_1_1_xml_parsing_error_html_a4a37dc48883337499804a9dc791669fd"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">zen::XmlParsingError::col</a></div><div class="ttdeci">size_t col</div><div class="ttdoc">Input file column where the parsing error occured (zero-based) </div><div class="ttdef"><b>Definition:</b> parser.h:41</div></div> +<div class="ttc" id="structzen_1_1_xml_parsing_error_html"><div class="ttname"><a href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></div><div class="ttdoc">Exception thrown due to an XML parsing error. </div><div class="ttdef"><b>Definition:</b> parser.h:35</div></div> +<div class="ttc" id="structzen_1_1_xml_error_html"><div class="ttname"><a href="structzen_1_1_xml_error.html">zen::XmlError</a></div><div class="ttdoc">Exception base class for zen::Xml. </div><div class="ttdef"><b>Definition:</b> error.h:13</div></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/search/all_6c.html b/zenxml/doc/search/all_6c.html deleted file mode 100644 index f6383cc2..00000000 --- a/zenxml/doc/search/all_6c.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_6c.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_6e.html b/zenxml/doc/search/all_6e.html deleted file mode 100644 index 1f92ee5b..00000000 --- a/zenxml/doc/search/all_6e.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_6e.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_6f.html b/zenxml/doc/search/all_6f.html deleted file mode 100644 index 61827e82..00000000 --- a/zenxml/doc/search/all_6f.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_6f.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_70.html b/zenxml/doc/search/all_70.html deleted file mode 100644 index 0340151b..00000000 --- a/zenxml/doc/search/all_70.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_70.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_72.html b/zenxml/doc/search/all_72.html deleted file mode 100644 index 0ab18d65..00000000 --- a/zenxml/doc/search/all_72.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_72.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_73.html b/zenxml/doc/search/all_73.html deleted file mode 100644 index 1ec8f174..00000000 --- a/zenxml/doc/search/all_73.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_73.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_77.html b/zenxml/doc/search/all_77.html deleted file mode 100644 index 73323d31..00000000 --- a/zenxml/doc/search/all_77.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_77.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_78.html b/zenxml/doc/search/all_78.html deleted file mode 100644 index 10780d66..00000000 --- a/zenxml/doc/search/all_78.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_78.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/all_7a.html b/zenxml/doc/search/all_7a.html deleted file mode 100644 index 0593a62d..00000000 --- a/zenxml/doc/search/all_7a.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="all_7a.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/classes_78.html b/zenxml/doc/search/classes_78.html deleted file mode 100644 index dfce8ecc..00000000 --- a/zenxml/doc/search/classes_78.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="classes_78.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_61.html b/zenxml/doc/search/functions_61.html deleted file mode 100644 index 7f395337..00000000 --- a/zenxml/doc/search/functions_61.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_61.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_65.html b/zenxml/doc/search/functions_65.html deleted file mode 100644 index a77debae..00000000 --- a/zenxml/doc/search/functions_65.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_65.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_67.html b/zenxml/doc/search/functions_67.html deleted file mode 100644 index d0ab42a3..00000000 --- a/zenxml/doc/search/functions_67.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_67.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_6c.html b/zenxml/doc/search/functions_6c.html deleted file mode 100644 index da371cfa..00000000 --- a/zenxml/doc/search/functions_6c.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_6c.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_6e.html b/zenxml/doc/search/functions_6e.html deleted file mode 100644 index d734dd07..00000000 --- a/zenxml/doc/search/functions_6e.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_6e.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_6f.html b/zenxml/doc/search/functions_6f.html deleted file mode 100644 index 222f0f83..00000000 --- a/zenxml/doc/search/functions_6f.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_6f.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_70.html b/zenxml/doc/search/functions_70.html deleted file mode 100644 index c62125ed..00000000 --- a/zenxml/doc/search/functions_70.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_70.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_72.html b/zenxml/doc/search/functions_72.html deleted file mode 100644 index a4336f7c..00000000 --- a/zenxml/doc/search/functions_72.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_72.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_73.html b/zenxml/doc/search/functions_73.html deleted file mode 100644 index 774d577f..00000000 --- a/zenxml/doc/search/functions_73.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_73.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_77.html b/zenxml/doc/search/functions_77.html deleted file mode 100644 index 8fe97554..00000000 --- a/zenxml/doc/search/functions_77.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_77.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/functions_78.html b/zenxml/doc/search/functions_78.html deleted file mode 100644 index 2b33d25e..00000000 --- a/zenxml/doc/search/functions_78.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="functions_78.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/namespaces_7a.html b/zenxml/doc/search/namespaces_7a.html deleted file mode 100644 index c8f3629d..00000000 --- a/zenxml/doc/search/namespaces_7a.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="namespaces_7a.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/search.css b/zenxml/doc/search/search.css index d18c1da8..4d7612ff 100644 --- a/zenxml/doc/search/search.css +++ b/zenxml/doc/search/search.css @@ -48,7 +48,7 @@ height:19px; background:url('search_m.png') repeat-x; border:none; - width:116px; + width:111px; margin-left:20px; padding-left:4px; color: #909090; @@ -236,3 +236,36 @@ DIV.searchresults { margin-left: 10px; margin-right: 10px; } + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/zenxml/doc/search/search.js b/zenxml/doc/search/search.js index e2269bf9..281d08b7 100644 --- a/zenxml/doc/search/search.js +++ b/zenxml/doc/search/search.js @@ -7,11 +7,12 @@ var indexSectionsWithContent = { - 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010100001011101100011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100010100001011101100011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + 0: "aceglnoprswxz", + 1: "x", + 2: "z", + 3: "aeglnoprswx", + 4: "clr", + 5: "o" }; var indexSectionNames = @@ -20,7 +21,8 @@ var indexSectionNames = 1: "classes", 2: "namespaces", 3: "functions", - 4: "variables" + 4: "variables", + 5: "pages" }; function convertToId(search) @@ -30,7 +32,7 @@ function convertToId(search) { var c = search.charAt(i); var cn = c.charCodeAt(0); - if (c.match(/[a-z0-9]/)) + if (c.match(/[a-z0-9\u0080-\uFFFF]/)) { result+=c; } @@ -335,22 +337,20 @@ function SearchBox(name, resultsPath, inFrame, label) var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); var code = searchValue.toLowerCase().charCodeAt(0); - var hexCode; - if (code<16) + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair { - hexCode="0"+code.toString(16); - } - else - { - hexCode=code.toString(16); + idxChar = searchValue.substr(0, 2); } var resultsPage; var resultsPageWithSearch; var hasResultsPage; - if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + var hexCode=idx.toString(16); resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; resultsPageWithSearch = resultsPage+'?'+escape(searchValue); hasResultsPage = true; diff --git a/zenxml/doc/search/variables_63.html b/zenxml/doc/search/variables_63.html deleted file mode 100644 index c649c81f..00000000 --- a/zenxml/doc/search/variables_63.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_63.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/variables_6c.html b/zenxml/doc/search/variables_6c.html deleted file mode 100644 index 6016f5cc..00000000 --- a/zenxml/doc/search/variables_6c.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_6c.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/search/variables_72.html b/zenxml/doc/search/variables_72.html deleted file mode 100644 index 29b87f04..00000000 --- a/zenxml/doc/search/variables_72.html +++ /dev/null @@ -1,25 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html><head><title></title> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<link rel="stylesheet" type="text/css" href="search.css"/> -<script type="text/javascript" src="variables_72.js"></script> -<script type="text/javascript" src="search.js"></script> -</head> -<body class="SRPage"> -<div id="SRIndex"> -<div class="SRStatus" id="Loading">Loading...</div> -<div id="SRResults"></div> -<script type="text/javascript"><!-- -createResults(); ---></script> -<div class="SRStatus" id="Searching">Searching...</div> -<div class="SRStatus" id="NoMatches">No Matches</div> -<script type="text/javascript"><!-- -document.getElementById("Loading").style.display="none"; -document.getElementById("NoMatches").style.display="none"; -var searchResults = new SearchResults("searchResults"); -searchResults.Search(); ---></script> -</div> -</body> -</html> diff --git a/zenxml/doc/structzen_1_1_xml_error-members.html b/zenxml/doc/structzen_1_1_xml_error-members.html index cc906ffc..d71a4ab6 100644 --- a/zenxml/doc/structzen_1_1_xml_error-members.html +++ b/zenxml/doc/structzen_1_1_xml_error-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,27 +81,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlError Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a>, including all inherited members.<table> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_error.html">zen::XmlError</a>, including all inherited members.</p> +<table class="directory"> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_error.html b/zenxml/doc/structzen_1_1_xml_error.html index d089d6ee..6660274e 100644 --- a/zenxml/doc/structzen_1_1_xml_error.html +++ b/zenxml/doc/structzen_1_1_xml_error.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlError Struct Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,14 +81,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_error.html">XmlError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> + <div class="summary"> +<a href="structzen_1_1_xml_error-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlError Struct Reference</div> </div> </div><!--header--> @@ -115,22 +104,18 @@ Inheritance diagram for zen::XmlError:</div> <div class="center"> <img src="structzen_1_1_xml_error.png" usemap="#zen::XmlError_map" alt=""/> <map id="zen::XmlError_map" name="zen::XmlError_map"> -<area href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O." alt="zen::XmlFileError" shape="rect" coords="0,56,132,80"/> -<area href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error." alt="zen::XmlParsingError" shape="rect" coords="142,56,274,80"/> +<area href="structzen_1_1_xml_file_error.html" title="Exception thrown due to failed file I/O. " alt="zen::XmlFileError" shape="rect" coords="0,56,132,80"/> +<area href="structzen_1_1_xml_parsing_error.html" title="Exception thrown due to an XML parsing error. " alt="zen::XmlParsingError" shape="rect" coords="142,56,274,80"/> </map> </div></div> - -<p><a href="structzen_1_1_xml_error-members.html">List of all members.</a></p> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Exception base class for zen::Xml. </p> </div></div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_error.png b/zenxml/doc/structzen_1_1_xml_error.png Binary files differindex 0fc21923..f1a74bd5 100644 --- a/zenxml/doc/structzen_1_1_xml_error.png +++ b/zenxml/doc/structzen_1_1_xml_error.png diff --git a/zenxml/doc/structzen_1_1_xml_file_error-members.html b/zenxml/doc/structzen_1_1_xml_file_error-members.html index 53a1115a..1a545d6b 100644 --- a/zenxml/doc/structzen_1_1_xml_file_error-members.html +++ b/zenxml/doc/structzen_1_1_xml_file_error-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,28 +81,26 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlFileError Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td><td><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_file_error.html">zen::XmlFileError</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_file_error.html b/zenxml/doc/structzen_1_1_xml_file_error.html index c7e54c33..4a546151 100644 --- a/zenxml/doc/structzen_1_1_xml_file_error.html +++ b/zenxml/doc/structzen_1_1_xml_file_error.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlFileError Struct Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_file_error.html">XmlFileError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-attribs">Public Attributes</a> </div> +<a href="#pub-attribs">Public Attributes</a> | +<a href="structzen_1_1_xml_file_error-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlFileError Struct Reference</div> </div> </div><!--header--> @@ -117,28 +105,25 @@ Inheritance diagram for zen::XmlFileError:</div> <div class="center"> <img src="structzen_1_1_xml_file_error.png" usemap="#zen::XmlFileError_map" alt=""/> <map id="zen::XmlFileError_map" name="zen::XmlFileError_map"> -<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml." alt="zen::XmlError" shape="rect" coords="0,0,110,24"/> +<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml. " alt="zen::XmlError" shape="rect" coords="0,0,110,24"/> </map> </div></div> - -<p><a href="structzen_1_1_xml_file_error-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-attribs"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> Public Attributes</h2></td></tr> <tr class="memitem:a4a109e749675a3887af8cfc140303b8f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a109e749675a3887af8cfc140303b8f"></a> ErrorCode </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_file_error.html#a4a109e749675a3887af8cfc140303b8f">lastError</a></td></tr> <tr class="memdesc:a4a109e749675a3887af8cfc140303b8f"><td class="mdescLeft"> </td><td class="mdescRight">Native error code: errno. <br/></td></tr> +<tr class="separator:a4a109e749675a3887af8cfc140303b8f"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Exception thrown due to failed file I/O. </p> </div></div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_file_error.png b/zenxml/doc/structzen_1_1_xml_file_error.png Binary files differindex 6393414f..dc28e3bf 100644 --- a/zenxml/doc/structzen_1_1_xml_file_error.png +++ b/zenxml/doc/structzen_1_1_xml_file_error.png diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error-members.html b/zenxml/doc/structzen_1_1_xml_parsing_error-members.html index acc507ae..570b20f6 100644 --- a/zenxml/doc/structzen_1_1_xml_parsing_error-members.html +++ b/zenxml/doc/structzen_1_1_xml_parsing_error-members.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: Member List</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,29 +81,27 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zen::XmlParsingError Member List</div> </div> </div><!--header--> <div class="contents"> -This is the complete list of members for <a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a>, including all inherited members.<table> - <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td><td><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td></td></tr> - <tr class="memlist"><td><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td><td><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td></td></tr> -</table></div><!-- contents --> - +<p>This is the complete list of members for <a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a>, including all inherited members.</p> +<table class="directory"> + <tr class="even"><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="entry"></td></tr> + <tr><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td><td class="entry"><a class="el" href="structzen_1_1_xml_parsing_error.html">zen::XmlParsingError</a></td><td class="entry"></td></tr> +</table></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.html b/zenxml/doc/structzen_1_1_xml_parsing_error.html index bece27d7..a41efc36 100644 --- a/zenxml/doc/structzen_1_1_xml_parsing_error.html +++ b/zenxml/doc/structzen_1_1_xml_parsing_error.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: zen::XmlParsingError Struct Reference</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> - <li><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -83,7 +72,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -92,16 +81,15 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> - <div id="nav-path" class="navpath"> - <ul> - <li class="navelem"><a class="el" href="namespacezen.html">zen</a> </li> - <li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a> </li> - </ul> - </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="namespacezen.html">zen</a></li><li class="navelem"><a class="el" href="structzen_1_1_xml_parsing_error.html">XmlParsingError</a></li> </ul> </div> +</div><!-- top --> <div class="header"> <div class="summary"> -<a href="#pub-attribs">Public Attributes</a> </div> +<a href="#pub-attribs">Public Attributes</a> | +<a href="structzen_1_1_xml_parsing_error-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">zen::XmlParsingError Struct Reference</div> </div> </div><!--header--> @@ -117,31 +105,29 @@ Inheritance diagram for zen::XmlParsingError:</div> <div class="center"> <img src="structzen_1_1_xml_parsing_error.png" usemap="#zen::XmlParsingError_map" alt=""/> <map id="zen::XmlParsingError_map" name="zen::XmlParsingError_map"> -<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml." alt="zen::XmlError" shape="rect" coords="0,0,132,24"/> +<area href="structzen_1_1_xml_error.html" title="Exception base class for zen::Xml. " alt="zen::XmlError" shape="rect" coords="0,0,132,24"/> </map> </div></div> - -<p><a href="structzen_1_1_xml_parsing_error-members.html">List of all members.</a></p> <table class="memberdecls"> -<tr><td colspan="2"><h2><a name="pub-attribs"></a> +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> Public Attributes</h2></td></tr> <tr class="memitem:a3ed4cd1b5599df9b52500f620421496e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3ed4cd1b5599df9b52500f620421496e"></a> size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a3ed4cd1b5599df9b52500f620421496e">row</a></td></tr> <tr class="memdesc:a3ed4cd1b5599df9b52500f620421496e"><td class="mdescLeft"> </td><td class="mdescRight">Input file row where the parsing error occured (zero-based) <br/></td></tr> +<tr class="separator:a3ed4cd1b5599df9b52500f620421496e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4a37dc48883337499804a9dc791669fd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a37dc48883337499804a9dc791669fd"></a> size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structzen_1_1_xml_parsing_error.html#a4a37dc48883337499804a9dc791669fd">col</a></td></tr> <tr class="memdesc:a4a37dc48883337499804a9dc791669fd"><td class="mdescLeft"> </td><td class="mdescRight">Input file column where the parsing error occured (zero-based) <br/></td></tr> +<tr class="separator:a4a37dc48883337499804a9dc791669fd"><td class="memSeparator" colspan="2"> </td></tr> </table> -<hr/><a name="details" id="details"></a><h2>Detailed Description</h2> +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Exception thrown due to an XML parsing error. </p> </div></div><!-- contents --> - - +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> diff --git a/zenxml/doc/structzen_1_1_xml_parsing_error.png b/zenxml/doc/structzen_1_1_xml_parsing_error.png Binary files differindex f0eb8f79..fc7e6dfa 100644 --- a/zenxml/doc/structzen_1_1_xml_parsing_error.png +++ b/zenxml/doc/structzen_1_1_xml_parsing_error.png diff --git a/zenxml/doc/tab_a.png b/zenxml/doc/tab_a.png Binary files differindex 2d99ef23..3b725c41 100644 --- a/zenxml/doc/tab_a.png +++ b/zenxml/doc/tab_a.png diff --git a/zenxml/doc/tab_b.png b/zenxml/doc/tab_b.png Binary files differindex b2c3d2be..e2b4a863 100644 --- a/zenxml/doc/tab_b.png +++ b/zenxml/doc/tab_b.png diff --git a/zenxml/doc/tab_h.png b/zenxml/doc/tab_h.png Binary files differindex c11f48f1..fd5cb705 100644 --- a/zenxml/doc/tab_h.png +++ b/zenxml/doc/tab_h.png diff --git a/zenxml/doc/tab_s.png b/zenxml/doc/tab_s.png Binary files differindex 978943ac..ab478c95 100644 --- a/zenxml/doc/tab_s.png +++ b/zenxml/doc/tab_s.png diff --git a/zenxml/doc/tabs.css b/zenxml/doc/tabs.css index 21920562..9cf578f2 100644 --- a/zenxml/doc/tabs.css +++ b/zenxml/doc/tabs.css @@ -3,6 +3,7 @@ width: 100%; z-index: 101; font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; } .tabs2 { diff --git a/zenxml/doc/xml_8h_source.html b/zenxml/doc/xml_8h_source.html index ecdce60a..74d4da9f 100644 --- a/zenxml/doc/xml_8h_source.html +++ b/zenxml/doc/xml_8h_source.html @@ -3,46 +3,36 @@ <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.6"/> <title>zen::Xml: xml.h Source File</title> - <link href="tabs.css" rel="stylesheet" type="text/css"/> -<link href="doxygen.css" rel="stylesheet" type="text/css" /> - -<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> - +<link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> -<div id="top"><!-- do not remove this div! --> - - +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="zenXml.png"/></td> - - <td style="padding-left: 0.5em;"> <div id="projectname">zen::Xml - </div> <div id="projectbrief">Simple C++ XML Processing</div> </td> - - - </tr> </tbody> </table> </div> - -<!-- Generated by Doxygen 1.8.0 --> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.6 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> @@ -51,7 +41,6 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> - <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> @@ -70,18 +59,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </li> </ul> </div> - <div id="navrow2" class="tabs2"> - <ul class="tablist"> - <li><a href="files.html"><span>File List</span></a></li> - </ul> - </div> -</div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> -<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a></div> +<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> @@ -90,33 +73,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); </iframe> </div> +<div id="nav-path" class="navpath"> + <ul> +<li class="navelem"><a class="el" href="dir_5fe60cdff4f93e8435d81ae38a3e2e18.html">zenxml</a></li> </ul> +</div> +</div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">xml.h</div> </div> </div><!--header--> <div class="contents"> -<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// **************************************************************************</span> -<a name="l00002"></a>00002 <span class="comment">// * This file is part of the zen::Xml project. It is distributed under the *</span> -<a name="l00003"></a>00003 <span class="comment">// * Boost Software License: http://www.boost.org/LICENSE_1_0.txt *</span> -<a name="l00004"></a>00004 <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span> -<a name="l00005"></a>00005 <span class="comment">// **************************************************************************</span> -<a name="l00006"></a>00006 -<a name="l00007"></a>00007 <span class="preprocessor">#ifndef ZEN_XML_HEADER_349578228034572457454554</span> -<a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_HEADER_349578228034572457454554</span> -<a name="l00009"></a>00009 <span class="preprocessor"></span> -<a name="l00010"></a>00010 <span class="preprocessor">#include "bind.h"</span> -<a name="l00011"></a>00011 -<a name="l00013"></a>00013 <span class="keyword">namespace </span>zen {} -<a name="l00014"></a>00014 -<a name="l00015"></a>00015 <span class="preprocessor">#endif //ZEN_XML_HEADER_349578228034572457454554</span> -</pre></div></div><!-- contents --> - - +<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// * This file is part of the FreeFileSync project. It is distributed under *</span></div> +<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *</span></div> +<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *</span></div> +<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// **************************************************************************</span></div> +<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div> +<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#ifndef ZEN_XML_HEADER_349578228034572457454554</span></div> +<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor"></span><span class="preprocessor">#define ZEN_XML_HEADER_349578228034572457454554</span></div> +<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor"></span></div> +<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "bind.h"</span></div> +<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div> +<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">namespace </span>zen {}</div> +<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div> +<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#endif //ZEN_XML_HEADER_349578228034572457454554</span></div> +</div><!-- fragment --></div><!-- contents --> +<!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> -</a> 1.8.0 +</a> 1.8.6 </small></address> - </body> </html> |