OSDN Git Service

7zArcでのxmlによる設定を可能にしたのに伴い、xml関連の操作をcommon/library/xmldoc.cppへ移動して共通化。
authorsirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Mon, 15 Nov 2010 14:04:22 +0000 (14:04 +0000)
committersirakaba <sirakaba@9df91469-1e22-0410-86e7-ea8537beb833>
Mon, 15 Nov 2010 14:04:22 +0000 (14:04 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/tpi/tpi@435 9df91469-1e22-0410-86e7-ea8537beb833

12 files changed:
bin/lib/7zArc.xml [new file with mode: 0644]
doc/files.html
doc/history.html
doc/readme.html
src/common/library/Makefile
src/plugin/7zArc/7zArc.cpp
src/plugin/7zArc/7zArc.h
src/plugin/7zArc/7zArc.vcproj
src/plugin/Makefile.default
src/plugin/cuiWrapper/cuiWrapper.cpp
src/plugin/rarArc/Makefile
src/tpi.sln

diff --git a/bin/lib/7zArc.xml b/bin/lib/7zArc.xml
new file mode 100644 (file)
index 0000000..7e18453
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<libraries>
+ <library name="0x01" typename="7-zip"    suffix="zip"         extract='%a5' test=''
+        level-min="0" level-max="9"
+        create  ='-mx=%94 %a5 %a7 %a1'
+        add     ='-mx=%94 %a5' />
+ <library name="0x02" typename="BZip2"    suffix="bz2"         extract='%a5' test='' archive="no"
+        level-min="0" level-max="9"
+        create  ='-mx=%94' />
+ <library name="0x03" typename="Rar"      suffix="rar"         extract='%a5 %a1' test='' disable="1" />
+ <library name="0x04" typename="Arj"      suffix="arj"         extract='%a5 %a1' test='' disable-win="1" />
+ <library name="0x05" typename="Z"        suffix="Z"           extract='%a5' test='' archive="no" />
+ <library name="0x06" typename="Lzh"      suffix="lzh;lha;lzs" extract='%a1' test='' disable-win="1" />
+ <library name="0x07" typename="7z"       suffix="7z"          extract=''    test=''
+        level-min="0" level-max="9"
+        create  ='-mx=%94 -ms=%a2{on|off} -mhe=%a4{on|off} %a5 %a7 %a1'
+        add     ='-mx=%94 -ms=%a2{on|off} -mhe=%a4{on|off} %a5'
+        delete  ='' />
+ <library name="0x08" typename="Cab"      suffix="cab"         extract='%a1' test='' disable-win="1" />
+ <library name="0x09" typename="NSIS"     suffix="exe"         extract='%a1' test='' />
+ <library name="0x0a" typename="LZMA"     suffix="lzma"        extract=''    test='' />
+ <library name="0x0b" typename="LZMA86"   suffix="lzma"        extract=''    test='' />
+ <library name="0x0c" typename="XZ"       suffix="xz"          extract='%5'  test='' archive="no"
+        level-min="0" level-max="9"
+        create  ='-mx=%94' />
+ <library name="0x0d" typename="PPMd"     suffix="pmd"         extract=''    test='' archive="no" />
+ <library name="0xd2" typename="SquashFS" suffix="squashfs"    extract=''    test='' />
+ <library name="0xd3" typename="CramFS"   suffix="cramfs"      extract=''    test='' />
+ <library name="0xd4" typename="Apm"                           extract=''    test='' />
+ <library name="0xd5" typename="MSLZ"                          extract=''    test='' archive="no" />
+ <library name="0xd6" typename="FLV"      suffix="flv"         extract=''    test='' />
+ <library name="0xd7" typename="Swf"      suffix="swf"         extract=''    test='' disable="1" />
+ <library name="0xd8" typename="SWFc"     suffix="swf"         extract=''    test='' />
+ <library name="0xd9" typename="NTFS"     suffix="ntfs;img"    extract=''    test='' />
+ <library name="0xda" typename="FAT"      suffix="fat;img"     extract=''    test='' />
+ <library name="0xdb" typename="MBR"      suffix="mbr"         extract=''    test='' />
+ <library name="0xdc" typename="VHD"      suffix="vhd"         extract=''    test='' />
+ <library name="0xdd" typename="PE"       suffix="exe"         extract=''    test='' disable="1" />
+ <library name="0xde" typename="ELF"                           extract=''    test='' disable="1" />
+ <library name="0xdf" typename="Mach-O"                        extract=''    test='' />
+ <library name="0xe0" typename="UDF"      suffix="iso;img"     extract=''    test='' />
+ <library name="0xe1" typename="Xar"      suffix="xar"         extract=''    test='' />
+ <library name="0xe2" typename="Mub"      suffix="mub"         extract=''    test='' />
+ <library name="0xe3" typename="HFS"      suffix="hfs"         extract=''    test='' />
+ <library name="0xe4" typename="DMG"      suffix="dmg"         extract=''    test='' />
+ <library name="0xe5" typename="Compound" suffix="msi;msp"     extract=''    test='' />
+ <library name="0xe6" typename="WIM"      suffix="wim;swm"     extract=''    test=''
+        create  =''
+        add     ='' />
+ <library name="0xe7" typename="Iso"      suffix="iso;img"     extract=''    test='' />
+ <library name="0xe8" typename="Bkf"      suffix="bkf"         extract=''    test='' />
+ <library name="0xe9" typename="Chm"      suffix="chm;chi;chq;chw;hxs;hxi;hxr;hxq;hxw;lit" extract='' test='' />
+ <library name="0xea" typename="Split"    suffix="001"         extract=''    test='' />
+ <library name="0xeb" typename="RPM"      suffix="rpm"         extract=''    test='' disable-win="1" />
+ <library name="0xec" typename="Deb"      suffix="deb"         extract=''    test='' disable-win="1" />
+ <library name="0xed" typename="Cpio"     suffix="cpio"        extract=''    test='' disable-win="1" />
+ <library name="0xee" typename="TAR"      suffix="tar"         extract=''    test='' disable-win="1"
+        create  =''
+        add     ='' />
+ <library name="0xef" typename="GZip"     suffix="gz"          extract=''    test='' archive="no"
+        level-min="0" level-max="9"
+        create  ='-mx=%94' />
+ <!--
+; 7zArc plug-in. See cuiWrapper.xml for details.
+-->
+</libraries>
index 1420998..d15f642 100644 (file)
@@ -37,6 +37,7 @@
         <dl>\r
          <dt class="file_win">7zArc.dll</dt><dd>7zArcの本体です。</dd>\r
          <dt class="file_lin">7zArc.so</dt><dd>7zArcの本体です。</dd>\r
+         <dt><a href="../bin/lib/7zArc.xml" id="bin_lib_7zArc.xml">7zArc.xml</a></dt><dd>7zArcの設定ファイルです。</dd>\r
          <dt class="file_win">calLibrary.dll</dt><dd>calLibraryの本体です。</dd>\r
          <dt><a href="../bin/lib/calLibrary.xml" id="bin_lib_calLibrary.xml">calLibrary.xml</a></dt><dd>calLibraryの設定ファイルです。</dd>\r
          <dt class="file_win">cuiWrapper.dll</dt><dd>cuiWrapperの本体です。</dd>\r
index ce07043..72af33e 100644 (file)
@@ -35,6 +35,7 @@
        <li class="add">書庫を複製する機能を追加。</li>\r
        <li class="add">ツリービューとリストビューでコンテキストメニューを表示する機能を追加。</li>\r
        <li class="add">単ファイル格納形式の処理において、書庫ファイル名から格納ファイル名を生成する機能を追加。</li>\r
+       <li class="add">改行文字やタブ文字を名前に含むファイルを含む書庫を開こうとした場合に警告する機能を追加。</li>\r
        <li class="chg">ファイルを開く動作でアプリケーションが起動している間も、Lycheeのウインドウを操作できるよう変更。</li>\r
        <li class="chg">書庫閲覧時のメモリ使用量を削減。</li>\r
        <li class="chg">書庫のアイコンを変更。</li>\r
@@ -51,6 +52,7 @@
      <dt>7zArc</dt>\r
      <dd>\r
       <ul>\r
+       <li class="add">対応するファイルの種類を指定する<a href="files.html#bin_lib_7zArc.xml">7zArc.xml</a>を追加。</li>\r
        <li class="add">SquashFS,CramFS,PPMdへの対応を追加。</li>\r
        <li class="add">ファイルの属性と作成/参照時刻の復元を行う機能を追加。</li>\r
       </ul>\r
index 9fdd148..47bc4dc 100644 (file)
@@ -44,6 +44,7 @@
   <h3 class="file">7zArc</h3>\r
   <p>7z,zip,NSIS,MSIなど、<a href="http://www.7-zip.org/">7-zip</a>で対応している諸形式の処理に対応するTPIです。</p>\r
   <p>動作には<span class="file_win">7z.dll</span>か<span class="file_lin">7z.so</span>が必要です。</p>\r
+  <p>動作の設定については<a href="files.html#bin_lib_7zArc.xml">7zArc.xml</a>を参照してください。また、このファイルに記述することで7zArcで対応する形式を変更することができます。<a href="files.html#bin_lib_cuiWrapper.xml">cuiWrapper.xml</a>には簡単な書式の説明を行っていますので、そちらも参考にしてください。</p>\r
 \r
   <h3 class="file_win">calLibrary</h3>\r
   <p><a href="http://www.madobe.net/archiver/">統合アーカイバライブラリ</a>に対応するTPIです。統合アーカイバ仕様に従う一般的なライブラリに対応しています。</p>\r
index 1808fa0..5a3a84f 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile.\r
 # $Id: Makefile 125 2009-11-19 14:17:38Z sirakaba $\r
 \r
-OBJS = library.o\r
+OBJS = library.o xmldoc.o\r
 DIR_OBJ = ../../tmp\r
 include ../Makefile.default\r
index 170b644..447eea7 100644 (file)
 #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/dynlib.h>\r
 #include "7zArc.h"\r
 \r
 #ifdef __LINUX__\r
 #define LIB_NAME wxT("7z.so")\r
 #else\r
-#define LIB_NAME g_hLib.CanonicalizeName(wxT("7z"))\r
+#define LIB_NAME g_LibInfo.hLib.CanonicalizeName(wxT("7z"))\r
 #endif\r
 \r
 //******************************************************************************\r
 //    Global varients\r
 //******************************************************************************\r
 \r
-wxDynamicLibrary g_hLib;\r
-void * g_fpProc;\r
+struct g_LibInfo\r
+{\r
+       wxDynamicLibrary hLib;\r
+       int nLibIndex;\r
+       wxXmlNode node;\r
+       void * fpProc;\r
+}      g_LibInfo;\r
+\r
 TPI_PROC g_prProc;\r
-wxULongLong_t g_nEngineId;\r
 \r
 #ifdef __LINUX__\r
 extern int global_use_utf16_conversion;\r
@@ -133,151 +139,6 @@ int GetFileInformation2(void * _hArchive, TPI_FILEINFO * _fiInfo, wxULongLong_t
        return TPI_ERROR_SUCCESS;\r
 }\r
 \r
-int __stdcall GetFormatInformation2(TPI_FORMATINFO * _fiInfo, wxULongLong_t & nIndex)\r
-{\r
-       // Initialization.\r
-       _fiInfo->fArchive           = true;\r
-       _fiInfo->fComment           = false;\r
-       _fiInfo->fEncryptKeyFile    = false;\r
-       _fiInfo->fEncryptPassword   = false;\r
-       _fiInfo->fEncryptHeader     = false;\r
-       _fiInfo->fCompressHeader    = false;\r
-       _fiInfo->fMMOptimize        = false;\r
-       _fiInfo->fMultiVolume       = false;\r
-       _fiInfo->fSFX               = false;\r
-       _fiInfo->fSolid             = false;\r
-       _fiInfo->nCompressLevelMin  = 0;\r
-       _fiInfo->nCompressLevelMax  = 0;\r
-       _fiInfo->nRecoveryRecordMin = 0;\r
-       _fiInfo->nRecoveryRecordMax = 0;\r
-       _fiInfo->szTypeName.Empty();\r
-       _fiInfo->szSuffix.Empty();\r
-       _fiInfo->szEngineName       = LIB_NAME;\r
-       _fiInfo->szTPIName          = wxT("7zArc");\r
-       _fiInfo->eSupportedCommand  = TPI_COMMAND_EXTRACT | TPI_COMMAND_TEST;\r
-       _fiInfo->nTypeId            = nIndex;\r
-       _fiInfo->pCustomInfo        = NULL;\r
-       wxULongLong_t nBase = nIndex++;\r
-       if (nBase >= sizeof(guidList) / sizeof(GUID))\r
-       {\r
-               return TPI_ERROR_S_ENDOFDATA;\r
-       }\r
-       else if (guidList[nBase] == CLSID_CFormatZip)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("7-zip");\r
-               _fiInfo->szSuffix            = wxT("zip");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;// | TPI_COMMAND_ADD;\r
-               _fiInfo->fSFX                = true;\r
-               _fiInfo->fMultiVolume        = true;\r
-               _fiInfo->fEncryptPassword    = true;\r
-               _fiInfo->nCompressLevelMin   = 0;\r
-               _fiInfo->nCompressLevelMax   = 9;\r
-       }\r
-       else if (guidList[nBase] == CLSID_CFormatBZip2)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("BZip2");\r
-               _fiInfo->szSuffix            = wxT("bz2");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;\r
-               _fiInfo->fArchive            = false;\r
-               _fiInfo->nCompressLevelMin   = 1;\r
-               _fiInfo->nCompressLevelMax   = 9;\r
-       }\r
-//     else if (guidList[nBase] == CLSID_CFormatRar)  { _fiInfo->szTypeName = wxT("Rar");     _fiInfo->szSuffix = wxT("rar"); }\r
-#ifdef __LINUX__\r
-       else if (guidList[nBase] == CLSID_CFormatArj)  { _fiInfo->szTypeName = wxT("Arj");     _fiInfo->szSuffix = wxT("arj"); _fiInfo->fEncryptPassword = true; _fiInfo->fSFX = true; }\r
-#endif\r
-       else if (guidList[nBase] == CLSID_CFormatZ)    { _fiInfo->szTypeName = wxT("Z");       _fiInfo->szSuffix = wxT("Z"); _fiInfo->fArchive = false; }\r
-#ifdef __LINUX__\r
-       else if (guidList[nBase] == CLSID_CFormatLzh)  { _fiInfo->szTypeName = wxT("Lzh");     _fiInfo->szSuffix = wxT("lzh;lha;lzs"); _fiInfo->fSFX = true; }\r
-#endif\r
-       else if (guidList[nBase] == CLSID_CFormat7z)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("7z");\r
-               _fiInfo->szSuffix            = wxT("7z");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;// | TPI_COMMAND_ADD;\r
-               _fiInfo->fSFX                = true;\r
-               _fiInfo->fMultiVolume        = true;\r
-               _fiInfo->fSolid              = true;\r
-               _fiInfo->fEncryptPassword    = true;\r
-               _fiInfo->fEncryptHeader      = true;\r
-               _fiInfo->fCompressHeader     = true;\r
-               _fiInfo->nCompressLevelMin   = 0;\r
-               _fiInfo->nCompressLevelMax   = 9;\r
-       }\r
-#ifdef __LINUX__\r
-       else if (guidList[nBase] == CLSID_CFormatCab)  { _fiInfo->szTypeName = wxT("Cab");     _fiInfo->szSuffix = wxT("cab"); _fiInfo->fMultiVolume = true; _fiInfo->fSFX = true; }\r
-#endif\r
-       else if (guidList[nBase] == CLSID_CFormatNsis) { _fiInfo->szTypeName = wxT("NSIS");    _fiInfo->szSuffix = wxT("exe"); _fiInfo->fSFX = true; }\r
-       else if (guidList[nBase] == CLSID_CFormatLzma) { _fiInfo->szTypeName = wxT("LZMA");    _fiInfo->szSuffix = wxT("lzma"); _fiInfo->fArchive = false; }\r
-       else if (guidList[nBase] == CLSID_CFormatLzma86){_fiInfo->szTypeName = wxT("LZMA86");  _fiInfo->szSuffix = wxT("lzma"); _fiInfo->fArchive = false; }\r
-       else if (guidList[nBase] == CLSID_CFormatXz)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("XZ");\r
-               _fiInfo->szSuffix            = wxT("xz");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;\r
-               _fiInfo->fArchive            = false;\r
-               _fiInfo->nCompressLevelMin   = 0;\r
-               _fiInfo->nCompressLevelMax   = 9;\r
-       }\r
-       else if (guidList[nBase] == CLSID_CFormatPpmd) { _fiInfo->szTypeName = wxT("PPMd");    _fiInfo->szSuffix = wxT("pmd"); }\r
-       else if (guidList[nBase] == CLSID_CFormatSquash){_fiInfo->szTypeName = wxT("SquashFS");_fiInfo->szSuffix = wxT("squashfs"); }\r
-       else if (guidList[nBase] == CLSID_CFormatCram) { _fiInfo->szTypeName = wxT("CramFS");  _fiInfo->szSuffix = wxT("cramfs"); }\r
-       else if (guidList[nBase] == CLSID_CFormatApm)  { _fiInfo->szTypeName = wxT("Apm"); }\r
-       else if (guidList[nBase] == CLSID_CFormatMslz) { _fiInfo->szTypeName = wxT("MSLZ");    _fiInfo->szSuffix = wxT("xx_"); _fiInfo->fArchive = false; }\r
-       else if (guidList[nBase] == CLSID_CFormatFlv)  { _fiInfo->szTypeName = wxT("Flv");     _fiInfo->szSuffix = wxT("flv"); }\r
-//     else if (guidList[nBase] == CLSID_CFormatSwf)  { _fiInfo->szTypeName = wxT("Swf");     _fiInfo->szSuffix = wxT("swf"); }\r
-       else if (guidList[nBase] == CLSID_CFormatSwfc) { _fiInfo->szTypeName = wxT("Swfc");    _fiInfo->szSuffix = wxT("swf"); }\r
-       else if (guidList[nBase] == CLSID_CFormatNtfs) { _fiInfo->szTypeName = wxT("NTFS");    _fiInfo->szSuffix = wxT("ntfs;img");}\r
-       else if (guidList[nBase] == CLSID_CFormatFat)  { _fiInfo->szTypeName = wxT("FAT");     _fiInfo->szSuffix = wxT("fat;img"); }\r
-       else if (guidList[nBase] == CLSID_CFormatMbr)  { _fiInfo->szTypeName = wxT("Mbr");     _fiInfo->szSuffix = wxT("mbr"); }\r
-       else if (guidList[nBase] == CLSID_CFormatVhd)  { _fiInfo->szTypeName = wxT("Vhd");     _fiInfo->szSuffix = wxT("vhd"); }\r
-//     else if (guidList[nBase] == CLSID_CFormatPe)   { _fiInfo->szTypeName = wxT("PE");      _fiInfo->szSuffix = wxT("exe"); _fiInfo->fArchive = false; }\r
-//     else if (guidList[nBase] == CLSID_CFormatElf)  { _fiInfo->szTypeName = wxT("ELF");     _fiInfo->fArchive = false; }\r
-       else if (guidList[nBase] == CLSID_CFormatMachO){ _fiInfo->szTypeName = wxT("Mach-O"); }\r
-       else if (guidList[nBase] == CLSID_CFormatUdf)  { _fiInfo->szTypeName = wxT("Udf");     _fiInfo->szSuffix = wxT("iso;img"); }\r
-       else if (guidList[nBase] == CLSID_CFormatXar)  { _fiInfo->szTypeName = wxT("Xar");     _fiInfo->szSuffix = wxT("xar"); }\r
-       else if (guidList[nBase] == CLSID_CFormatMub)  { _fiInfo->szTypeName = wxT("Mub"); }\r
-       else if (guidList[nBase] == CLSID_CFormatHfs)  { _fiInfo->szTypeName = wxT("HFS");     _fiInfo->szSuffix = wxT("hfs"); }\r
-       else if (guidList[nBase] == CLSID_CFormatDmg)  { _fiInfo->szTypeName = wxT("DMG");     _fiInfo->szSuffix = wxT("dmg"); }\r
-       else if (guidList[nBase] == CLSID_CFormatCom)  { _fiInfo->szTypeName = wxT("Compound");_fiInfo->szSuffix = wxT("msi;msp"); _fiInfo->fSFX = true; }\r
-       else if (guidList[nBase] == CLSID_CFormatWim)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("WIM");\r
-               _fiInfo->szSuffix            = wxT("wim;swm");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;// | TPI_COMMAND_ADD;\r
-       }\r
-       else if (guidList[nBase] == CLSID_CFormatIso)  { _fiInfo->szTypeName = wxT("ISO");     _fiInfo->szSuffix = wxT("iso;img"); }\r
-       else if (guidList[nBase] == CLSID_CFormatBkf)  { _fiInfo->szTypeName = wxT("Bkf");     _fiInfo->szSuffix = wxT("bkf"); }\r
-       else if (guidList[nBase] == CLSID_CFormatChm)  { _fiInfo->szTypeName = wxT("Chm");     _fiInfo->szSuffix = wxT("chm;chi;chq;chw;hxs;hxi;hxr;hxq;hxw;lit"); }\r
-       else if (guidList[nBase] == CLSID_CFormatSplit){ _fiInfo->szTypeName = wxT("Split");   _fiInfo->szSuffix = wxT("001"); }\r
-#ifdef __LINUX__\r
-       else if (guidList[nBase] == CLSID_CFormatRpm)  { _fiInfo->szTypeName = wxT("RPM");     _fiInfo->szSuffix = wxT("rpm"); _fiInfo->fArchive = false; }\r
-       else if (guidList[nBase] == CLSID_CFormatDeb)  { _fiInfo->szTypeName = wxT("Deb");     _fiInfo->szSuffix = wxT("deb"); }\r
-       else if (guidList[nBase] == CLSID_CFormatCpio) { _fiInfo->szTypeName = wxT("Cpio");    _fiInfo->szSuffix = wxT("cpio");}\r
-       else if (guidList[nBase] == CLSID_CFormatTar)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("TAR");\r
-               _fiInfo->szSuffix            = wxT("tar");\r
-               _fiInfo->fSFX                = true;\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;// | TPI_COMMAND_ADD;\r
-       }\r
-#endif\r
-       else if (guidList[nBase] == CLSID_CFormatGZip)\r
-       {\r
-               _fiInfo->szTypeName          = wxT("GZip");\r
-               _fiInfo->szSuffix            = wxT("gz");\r
-               _fiInfo->eSupportedCommand  |= TPI_COMMAND_CREATE;\r
-               _fiInfo->fArchive            = false;\r
-               _fiInfo->nCompressLevelMin   = 1;\r
-               _fiInfo->nCompressLevelMax   = 9;\r
-       }\r
-       else\r
-       {\r
-               return GetFormatInformation2(_fiInfo, nIndex);\r
-       }\r
-       return TPI_ERROR_SUCCESS;\r
-}\r
-\r
 //******************************************************************************\r
 //    Callback Wrapper\r
 //******************************************************************************\r
@@ -786,12 +647,26 @@ int __stdcall GetPluginInformation
 \r
 int __stdcall GetFormatInformation(TPI_FORMATINFO * _fiInfo, bool _bFirst)\r
 {\r
-       static wxULongLong_t s_nTypeId;\r
+       static wxULongLong_t s_nFileId;\r
+       static wxXmlDocument xmlDoc(myMakeXMLName(wxT("7zArc")));\r
+       static wxXmlNode * xmlLibrary;\r
        if (_bFirst)\r
        {\r
-               s_nTypeId = 0;\r
+               // xml解析開始。\r
+               s_nFileId = 0;\r
+               xmlLibrary = myGetFirstLib(& xmlDoc);\r
        }\r
-       return GetFormatInformation2(_fiInfo, s_nTypeId);\r
+       else\r
+       {\r
+               xmlLibrary = myGetNextLib(xmlLibrary);\r
+       }\r
+       if (xmlLibrary == NULL)\r
+       {\r
+               // データの終端に達した場合。\r
+               return TPI_ERROR_S_ENDOFDATA;\r
+       }\r
+       MakeFormatInfo(xmlLibrary, wxT("7zArc"), _fiInfo, s_nFileId++);\r
+       return TPI_ERROR_SUCCESS;\r
 }\r
 \r
 int __stdcall LoadPlugin\r
@@ -804,26 +679,37 @@ int __stdcall LoadPlugin
 #ifdef __LINUX__\r
        global_use_utf16_conversion = 1;\r
 #endif\r
-       g_hLib.Load(LIB_NAME);\r
-       if (! g_hLib.IsLoaded())\r
+       g_LibInfo.hLib.Load(LIB_NAME);\r
+       if (! g_LibInfo.hLib.IsLoaded())\r
        {\r
-               g_hLib.Unload();\r
+               g_LibInfo.hLib.Unload();\r
                return TPI_ERROR_U_LOAD_LIBRARY;\r
        }\r
 \r
-       if (! g_hLib.HasSymbol(wxT("CreateObject")))\r
+       if (! g_LibInfo.hLib.HasSymbol(wxT("CreateObject")))\r
        {\r
                return TPI_ERROR_U_USE_LIBRARY;\r
        }\r
-       g_fpProc = g_hLib.GetSymbol(wxT("CreateObject"));\r
-       if (! g_fpProc)\r
+       g_LibInfo.fpProc = g_LibInfo.hLib.GetSymbol(wxT("CreateObject"));\r
+       if (! g_LibInfo.fpProc)\r
        {\r
                return TPI_ERROR_U_USE_LIBRARY;\r
        }\r
 \r
+       // 対象が存在しないならば指示されたライブラリをロード。\r
        if (! ::wxFileExists(_szArcName))\r
        {\r
-               g_nEngineId = _nTypeId;\r
+               // xml解析開始。\r
+               wxXmlDocument xmlDoc(myMakeXMLName(wxT("7zArc")));\r
+               wxXmlNode * xmlLibrary = myGetFirstLib(& xmlDoc, _nTypeId);\r
+               if (xmlLibrary == NULL)\r
+               {\r
+                       // xml文法エラー。\r
+                       return TPI_ERROR_UNDEFINED;\r
+               }\r
+               g_LibInfo.node = * xmlLibrary;\r
+               g_LibInfo.nLibIndex = _nTypeId;\r
+               return TPI_ERROR_SUCCESS;\r
        }\r
 \r
        return TPI_ERROR_SUCCESS;\r
@@ -834,7 +720,7 @@ int __stdcall FreePlugin
        void * // _pReserved\r
 )\r
 {\r
-       g_hLib.Unload();\r
+       g_LibInfo.hLib.Unload();\r
        return TPI_ERROR_SUCCESS;\r
 }\r
 \r
@@ -852,15 +738,23 @@ int __stdcall OpenArchive
                return TPI_ERROR_IO_ARC_OPEN;\r
        }\r
 \r
-       // 書庫形式を認識\r
+       // xml解析開始\r
        IInArchive * hArc;\r
-       for (wxULongLong_t i = 0; i < sizeof(guidList) / sizeof(GUID); )\r
+       wxXmlDocument xmlDoc(myMakeXMLName(wxT("7zArc")));\r
+       wxXmlNode * xmlLibrary = myGetFirstLib(& xmlDoc);\r
+\r
+       // 対応するライブラリを調査。\r
+       // 無限ループに陥らないよう上限を設定。\r
+       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL; g_LibInfo.nLibIndex++)\r
        {\r
-               if (((unsigned int (__stdcall *)(const GUID *, const GUID *, void * *)) g_fpProc)(& guidList[i], & IID_IInArchive, (void **) & hArc) != S_OK)\r
+               // ライブラリをロード。\r
+               const GUID guid = {0x23170F69, 0x40C1, 0x278A, {0x10, 0x00, 0x00, 0x01, 0x10, myGetAttributeInt(xmlLibrary, wxT("name")), 0x00, 0x00}};\r
+               if (((unsigned int (__stdcall *)(const GUID *, const GUID *, void * *)) g_LibInfo.fpProc)(& guid, & IID_IInArchive, (void **) & hArc) != S_OK)\r
                {\r
-                       i++;\r
+                       xmlLibrary = myGetNextLib(xmlLibrary);\r
                        continue;\r
                }\r
+               g_LibInfo.node = * xmlLibrary;\r
 \r
                // 書庫を開く。\r
                CInFileStream * fileSpec = new CInFileStream;\r
@@ -871,11 +765,10 @@ int __stdcall OpenArchive
                }\r
 \r
                // 形式の情報を取得。\r
-               g_nEngineId = i;\r
                TPI_FORMATINFO fiInfo;\r
-               GetFormatInformation2(& fiInfo, i);\r
+               MakeFormatInfo(xmlLibrary, wxT("7zArc"), & fiInfo, g_LibInfo.nLibIndex);\r
 \r
-               // æ\9b¸åº«ã\81¨ã\81\97ã\81¦é\96\8bã\81\8f\r
+               // æ\9b¸åº«ã\81«å¯¾å¿\9cã\81\97ã\81¦ã\81\84ã\82\8bã\81\8bã\83\81ã\82§ã\83\83ã\82¯\r
                CArchiveOpenCallback * openCallbackSpec = new CArchiveOpenCallback;\r
                CMyComPtr<IArchiveOpenCallback> openCallback(openCallbackSpec);\r
                // SFXを完全に検出するには全体をロードする必要がある。\r
@@ -897,7 +790,9 @@ int __stdcall OpenArchive
                        * _hArchive = hArc;\r
                        return TPI_ERROR_SUCCESS;\r
                }\r
+               xmlLibrary = myGetNextLib(xmlLibrary);\r
        }\r
+\r
        return TPI_ERROR_IO_ARC_OPEN;\r
 }\r
 \r
@@ -949,8 +844,7 @@ int __stdcall GetArchiveInformation
        {\r
                _aiInfo->szComment  = WC2String(prop.bstrVal);\r
        }\r
-       wxULongLong_t n = g_nEngineId;\r
-       GetFormatInformation2(& _aiInfo->fiInfo, n);\r
+       MakeFormatInfo(& g_LibInfo.node, wxT("7zArc"), & _aiInfo->fiInfo, g_LibInfo.nLibIndex);\r
        return TPI_ERROR_SUCCESS;\r
 }\r
 \r
@@ -1036,15 +930,15 @@ int __stdcall Command
 \r
                // エンジンを読み込み。\r
                IOutArchive * hArc;\r
-               if (((unsigned int (__stdcall *)(const GUID *, const GUID *, void **)) g_fpProc)(& guidList[g_nEngineId], & IID_IOutArchive, (void **) & hArc) != S_OK)\r
+               const GUID guid = {0x23170F69, 0x40C1, 0x278A, {0x10, 0x00, 0x00, 0x01, 0x10, myGetAttributeInt(& g_LibInfo.node, wxT("name")), 0x00, 0x00}};\r
+               if (((unsigned int (__stdcall *)(const GUID *, const GUID *, void **)) g_LibInfo.fpProc)(& guid, & IID_IOutArchive, (void **) & hArc) != S_OK)\r
                {\r
                        return TPI_ERROR_ARC_UNSUPPORTED;\r
                }\r
 \r
                // 形式情報を取得。\r
                TPI_FORMATINFO fiInfo;\r
-               wxULongLong_t nIndex = g_nEngineId;\r
-               GetFormatInformation2(& fiInfo, nIndex);\r
+               MakeFormatInfo(& g_LibInfo.node, wxT("7zArc"), & fiInfo, g_LibInfo.nLibIndex);\r
 \r
                // パラメータを設定。\r
                ISetProperties * setProp;\r
index debec21..8d6a629 100644 (file)
 \r
 #include "../../IPassword.h"\r
 #include "../../MyVersion.h"\r
-\r
-//******************************************************************************\r
-//    Defines\r
-//******************************************************************************\r
-\r
-DEFINE_GUID(CLSID_CFormatZip,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x01, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatBZip2, 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatRar,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x03, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatArj,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x04, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatZ,     0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x05, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatLzh,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x06, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormat7z,    0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatCab,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x08, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatNsis,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x09, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatLzma,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0A, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatLzma86,0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0B, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatXz,    0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0C, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatPpmd,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0D, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatSquash,0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD2, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatCram,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD3, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatApm,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD4, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatMslz,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD5, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatFlv,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD6, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatSwf,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD7, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatSwfc,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD8, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatNtfs,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xD9, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatFat,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDA, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatMbr,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDB, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatVhd,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDC, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatPe,    0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDD, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatElf,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDE, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatMachO, 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xDF, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatUdf,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE0, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatXar,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE1, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatMub,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE2, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatHfs,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE3, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatDmg,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE4, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatCom,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE5, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatWim,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE6, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatIso,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE7, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatBkf,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE8, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatChm,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xE9, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatSplit, 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEA, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatRpm,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEB, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatDeb,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEC, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatCpio,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xED, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatTar,   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEE, 0x00, 0x00);\r
-DEFINE_GUID(CLSID_CFormatGZip,  0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0xEF, 0x00, 0x00);\r
-\r
-const GUID guidList[] = {\r
-       CLSID_CFormatZip,\r
-       CLSID_CFormatBZip2,\r
-//     CLSID_CFormatRar,\r
-#ifdef __LINUX__\r
-       CLSID_CFormatArj,\r
-#endif\r
-       CLSID_CFormatZ,\r
-#ifdef __LINUX__\r
-       CLSID_CFormatLzh,\r
-#endif\r
-       CLSID_CFormat7z,\r
-#ifdef __LINUX__\r
-       CLSID_CFormatCab,\r
-#endif\r
-       CLSID_CFormatNsis,\r
-       CLSID_CFormatLzma,\r
-       CLSID_CFormatLzma86,\r
-       CLSID_CFormatXz,\r
-       CLSID_CFormatPpmd,\r
-       CLSID_CFormatSquash,\r
-       CLSID_CFormatCram,\r
-       CLSID_CFormatApm,\r
-       CLSID_CFormatMslz,\r
-       CLSID_CFormatFlv,\r
-//     CLSID_CFormatSwf,\r
-       CLSID_CFormatSwfc,\r
-       CLSID_CFormatNtfs,\r
-       CLSID_CFormatFat,\r
-       CLSID_CFormatMbr,\r
-       CLSID_CFormatVhd,\r
-//     CLSID_CFormatPe,\r
-//     CLSID_CFormatElf,\r
-       CLSID_CFormatMachO,\r
-       CLSID_CFormatUdf,\r
-       CLSID_CFormatXar,\r
-       CLSID_CFormatMub,\r
-       CLSID_CFormatHfs,\r
-       CLSID_CFormatDmg,\r
-       CLSID_CFormatCom,\r
-       CLSID_CFormatWim,\r
-       CLSID_CFormatIso,\r
-       CLSID_CFormatBkf,\r
-       CLSID_CFormatChm,\r
-       CLSID_CFormatSplit,\r
-#ifdef __LINUX__\r
-       CLSID_CFormatRpm,\r
-       CLSID_CFormatDeb,\r
-       CLSID_CFormatCpio,\r
-       CLSID_CFormatTar,\r
-#endif\r
-       CLSID_CFormatGZip\r
-};\r
-\r
-//******************************************************************************\r
-//    Structures\r
-//******************************************************************************\r
-\r
index 1a74a60..606a360 100644 (file)
@@ -61,7 +61,7 @@
                        />\r
                        <Tool\r
                                Name="VCLinkerTool"\r
-                               AdditionalDependencies="wxmsw29u_core.lib wxbase29u.lib"\r
+                               AdditionalDependencies="wxmsw29u_core.lib wxbase29u.lib wxbase29u_xml.lib wxexpat.lib"\r
                                OutputFile="$(OutDir)/7zArc.dll"\r
                                LinkIncremental="1"\r
                                GenerateManifest="false"\r
                                />\r
                        </FileConfiguration>\r
                </File>\r
+               <File\r
+                       RelativePath="..\..\common\library\xmldoc.cpp"\r
+                       >\r
+               </File>\r
        </Files>\r
        <Globals>\r
        </Globals>\r
index b9b2e33..4cd178b 100644 (file)
@@ -8,10 +8,12 @@ LDFLAGS  = -s -shared -Wl,-Bsymbolic
 \r
 # Define i/o files.\r
 DIR_OBJ  = ../../tmp/$(PLUGIN_NAME)\r
-ifdef NOUSE_LIBRARY\r
-  OBJS   = $(PLUGIN_NAME).o\r
-else\r
-  OBJS   = $(PLUGIN_NAME).o ../library.o\r
+OBJS     = $(PLUGIN_NAME).o\r
+ifndef NOUSE_LIBRARY\r
+  OBJS  += ../library.o\r
+endif\r
+ifndef NOUSE_XML\r
+  OBJS  += ../xmldoc.o\r
 endif\r
 \r
 IN_DEF   = ../../common/header/plugin.def\r
index 18c67d4..5288704 100644 (file)
@@ -26,9 +26,8 @@
 #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
@@ -196,66 +195,49 @@ int __stdcall GetPluginInformation
 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
@@ -263,40 +245,36 @@ int __stdcall LoadPlugin
                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
-       for (g_LibInfo.nLibIndex = 0; g_LibInfo.nLibIndex < 300 && xmlLibrary != NULL && xmlLibrary->GetName() == wxT("library"); g_LibInfo.nLibIndex++)\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
@@ -426,7 +404,7 @@ int __stdcall GetArchiveInformation
 )\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
index df8d582..af627c4 100644 (file)
@@ -1,4 +1,5 @@
 # Makefile.\r
 # $Id$\r
 PLUGIN_NAME = rarArc\r
+NOUSE_XML   = 1\r
 include ../Makefile.default\r
index 98d6174..910564e 100644 (file)
@@ -17,6 +17,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "library", "library", "{85B5
        ProjectSection(SolutionItems) = preProject\r
                common\library\library.cpp = common\library\library.cpp\r
                common\library\library.h = common\library\library.h\r
+               common\library\xmldoc.cpp = common\library\xmldoc.cpp\r
+               common\library\xmldoc.h = common\library\xmldoc.h\r
        EndProjectSection\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lychee", "lychee\lychee.vcproj", "{50F13951-5698-4418-8353-BFDFC5A6BC13}"\r