#include "../../common/header/plugin.h"\r
#include "../../common/header/plugin-extra.h"\r
#include "../../common/library/library.h"\r
+#include "../../common/library/xmldoc.h"\r
#include <wx/config.h>\r
-#include <wx/stdpaths.h>\r
-#include <wx/xml/xml.h>\r
#include <wx/tokenzr.h>\r
#include "cuiWrapper.h"\r
\r
PosInfo MakePosInfo(const wxString & szPrefix)\r
{\r
PosInfo pi;\r
- g_LibInfo.node.GetAttribute(wxT("list-") + szPrefix + wxT("-s"), wxEmptyString).ToULongLong(& pi.nStart);\r
- g_LibInfo.node.GetAttribute(wxT("list-") + szPrefix + wxT("-c"), wxEmptyString).ToULongLong(& pi.nCount);\r
- g_LibInfo.node.GetAttribute(wxT("list-") + szPrefix + wxT("-l"), wxT("0")).ToULongLong(& pi.nLine);\r
+ pi.nStart = myGetAttributeInt(& g_LibInfo.node, wxT("list-") + szPrefix + wxT("-s"));\r
+ pi.nCount = myGetAttributeInt(& g_LibInfo.node, wxT("list-") + szPrefix + wxT("-c"));\r
+ pi.nLine = myGetAttributeInt(& g_LibInfo.node, wxT("list-") + szPrefix + wxT("-l"));\r
return pi;\r
}\r
\r
int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)\r
{\r
static wxULongLong_t s_nFileId;\r
- wxStandardPaths p;\r
- wxXmlDocument config(wxPathOnly(p.GetExecutablePath()) + wxT("/lib/cuiWrapper.xml"));\r
- // 一気に先頭のライブラリの情報を取得。\r
- wxXmlNode * xmlLibrary = config.GetRoot()->GetChildren();\r
-\r
+ static wxXmlDocument xmlDoc(myMakeXMLName(wxT("cuiWrapper")));\r
+ static wxXmlNode * xmlLibrary;\r
if (_bFirst)\r
{\r
// xml解析開始。\r
s_nFileId = 0;\r
+ xmlLibrary = myGetFirstLib(& xmlDoc);\r
}\r
else\r
{\r
- for (wxULongLong_t i = 0; i < s_nFileId && xmlLibrary != NULL; i++)\r
- {\r
- xmlLibrary = xmlLibrary->GetNext();\r
- }\r
+ xmlLibrary = myGetNextLib(xmlLibrary);\r
}\r
-\r
- if (xmlLibrary == NULL || xmlLibrary->GetName() != wxT("library"))\r
+ if (xmlLibrary == NULL)\r
{\r
// データの終端に達した場合。\r
return TPI_ERROR_S_ENDOFDATA;\r
}\r
\r
- MakeFormatInfo(wxT("cuiWrapper"), _fiInfo, xmlLibrary, s_nFileId++);\r
+ MakeFormatInfo(xmlLibrary, wxT("cuiWrapper"), _fiInfo, s_nFileId++);\r
wxString szExeFile = xmlLibrary->GetAttribute(wxT("name"), wxEmptyString);\r
if (myExecute(szExeFile, NULL, wxEmptyString, szExeFile.Find(wxT('.')) != wxNOT_FOUND && szExeFile.AfterLast(wxT('.')) == wxT("exe")) != TPI_ERROR_SUCCESS)\r
{\r
_fiInfo->eSupportedCommand = 0;\r
}\r
-\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
int __stdcall LoadPlugin\r
(\r
const wxString & _szArcName,\r
- wxULongLong_t _llTypeId\r
+ wxULongLong_t _nTypeId\r
)\r
{\r
// xml解析開始。\r
- wxStandardPaths p;\r
- wxXmlDocument config(wxPathOnly(p.GetExecutablePath()) + wxT("/lib/cuiWrapper.xml"));\r
- if (! config.IsOk())\r
- {\r
- return TPI_ERROR_UNDEFINED;\r
- }\r
- // 一気に先頭のライブラリの情報を取得。\r
- wxXmlNode * xmlLibrary = config.GetRoot()->GetChildren();\r
+ wxXmlDocument xmlDoc(myMakeXMLName(wxT("cuiWrapper")));\r
+ wxXmlNode * xmlLibrary;\r
\r
// 対象が存在するならば対応するライブラリを調査、\r
// 対象が存在しないならば指示されたライブラリをロード。\r
if (! ::wxFileExists(_szArcName))\r
{\r
- // 適当な位置まで移動。\r
- for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < _llTypeId && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
- {\r
- xmlLibrary = xmlLibrary->GetNext();\r
- }\r
- if (xmlLibrary == NULL || xmlLibrary->GetName() != wxT("library"))\r
+ xmlLibrary = myGetFirstLib(& xmlDoc, _nTypeId);\r
+ if (xmlLibrary == NULL)\r
{\r
// xml文法エラー。\r
return TPI_ERROR_UNDEFINED;\r
g_LibInfo.szExeFile = xmlLibrary->GetAttribute(wxT("name"), wxEmptyString);\r
g_LibInfo.szExeFileAlt = xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString);\r
g_LibInfo.node = * xmlLibrary;\r
-\r
+ g_LibInfo.nLibIndex = _nTypeId;\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
// 無限ループに陥らないよう上限を設定。\r
+ xmlLibrary = myGetFirstLib(& xmlDoc);\r
for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
{\r
- // ライブラリをロード。\r
- g_LibInfo.szExeFile = xmlLibrary->GetAttribute(wxT("name"), wxEmptyString);\r
- g_LibInfo.szExeFileAlt = xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString);\r
- g_LibInfo.node = * xmlLibrary;\r
-\r
// 書庫に対応しているかチェック。\r
wxFileName fnArchive(_szArcName);\r
- wxArrayString asExt = ::wxStringTokenize(g_LibInfo.node.GetAttribute(wxT("suffix"), wxEmptyString), wxT(";"));\r
- if (! g_LibInfo.node.HasAttribute(wxT("list")))\r
+ wxArrayString asExt = ::wxStringTokenize(xmlLibrary->GetAttribute(wxT("suffix"), wxEmptyString), wxT(";"));\r
+ if (xmlLibrary->HasAttribute(wxT("list")))\r
{\r
- xmlLibrary = xmlLibrary->GetNext();\r
- continue;\r
- }\r
-\r
- for (size_t i = 0; i < asExt.GetCount(); i++)\r
- {\r
- // .tar.XXXなど二重判定への対応。\r
-// if (asExt[i].IsSameAs(fnArchive.GetExt(), false))\r
- if (fnArchive.GetFullName().EndsWith(wxT('.') + asExt[i]))\r
+ for (size_t i = 0; i < asExt.GetCount(); i++)\r
{\r
- return TPI_ERROR_SUCCESS;\r
+ // .tar.XXXなど二重判定への対応。\r
+// if (asExt[i].IsSameAs(fnArchive.GetExt(), false))\r
+ if (fnArchive.GetFullName().EndsWith(wxT('.') + asExt[i]))\r
+ {\r
+ // ライブラリをロード。\r
+ g_LibInfo.szExeFile = xmlLibrary->GetAttribute(wxT("name"), wxEmptyString);\r
+ g_LibInfo.szExeFileAlt = xmlLibrary->GetAttribute(wxT("name-alt"), wxEmptyString);\r
+ g_LibInfo.node = * xmlLibrary;\r
+ g_LibInfo.nLibIndex = _nTypeId;\r
+ return TPI_ERROR_SUCCESS;\r
+ }\r
}\r
}\r
-\r
- xmlLibrary = xmlLibrary->GetNext();\r
+ xmlLibrary = myGetNextLib(xmlLibrary);\r
}\r
-\r
return TPI_ERROR_U_LOAD_LIBRARY;\r
}\r
\r
}\r
\r
// 初期設定。\r
- g_LibInfo.node.GetAttribute(wxT("list-line-c"), wxT("1")).ToULongLong(& nProcessPerLine);\r
+ nProcessPerLine = myGetAttributeInt(& g_LibInfo.node, wxT("list-line-c"), 1);\r
szEndLine = g_LibInfo.node.GetAttribute(wxT("list-line-e"), szStartLine);\r
szDateFormat = g_LibInfo.node.GetAttribute(wxT("list-date-f"), wxDefaultDateTimeFormat);\r
piFName = MakePosInfo(wxT("fname"));\r
)\r
{\r
// 形式に関する情報を取得。\r
- MakeFormatInfo(wxT("cuiWrapper"), & _aiInfo->fiInfo, & g_LibInfo.node, 0);\r
+ MakeFormatInfo(& g_LibInfo.node, wxT("cuiWrapper"), & _aiInfo->fiInfo, 0);\r
return TPI_ERROR_SUCCESS;\r
}\r
\r
\r
// コマンドライン・レスポンスファイル作成。\r
wxString\r
- szResponceFileName = MakeResponceFile(_szFiles, g_LibInfo.node.GetAttribute(wxT("quote-resp"), wxT("1")) == wxT("1")),\r
+ szResponceFileName = MakeResponceFile(_szFiles, myGetAttributeBool(& g_LibInfo.node, wxT("quote-resp"), true)),\r
szCommandLineSend = MakeCommandLineSend(szCommandLine, _szArcName, _swInfo, _szFiles, szResponceFileName);\r
\r
// コマンドライン実行。\r