2012-10-22T01:29:57の更新内容

works/libs/Smdn.Formats.Mime/releases/index.wiki.txt

current previous
10,7 10,6
 
-開発版
-開発版
 
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
--[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
-0.3x
-0.3x
+
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.33.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.32.tar.bz2}
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.32.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.31.tar.bz2}
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.31.tar.bz2}
 
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.30.tar.bz2}
--${smdncms:distfilelink,../Smdn.Formats.Mime-0.30.tar.bz2}
31,21 30,6
 
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
---[[works/tools/junk/TundereBird]]に含まれているものを使ってください
 

        

        
 
**ビルド済みパッケージ
**ビルド済みパッケージ
+
|*0.33 (2012-10-22)
+
|~種類|~パッケージ|h
+
|~通常版|{{
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx4.5.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx4.0.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx3.5.zip,.NET 3.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx2.0.zip,.NET 2.1}
+
}}|
+
|~単一アセンブリ版&sub{*1};|{{
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx4.5-combined.zip,.NET 4.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx4.0-combined.zip,.NET 4}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx3.5-combined.zip,.NET 3.5}
+
${smdncms:distfilelink,../Smdn.Formats.Mime-0.33-netfx2.0-combined.zip,.NET 2.1}
+
}}|
+

          
 
|*0.32 (2012-10-08)
|*0.32 (2012-10-08)
 
|~種類|~パッケージ|h
|~種類|~パッケージ|h
 
|~通常版|{{
|~通常版|{{
96,21 80,6
 
:ビルド設定等|コンパイラにMono gmcs/dmcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
:ビルド設定等|コンパイラにMono gmcs/dmcsを使用、オプションに/debug- /optimize+ /define:TRACEを指定してビルドしています。
 

        

        
 
*変更履歴
*変更履歴
+
**0.33 (2012-10-22)
+
-機能追加
+
--分割メッセージ・分割メール(message/partial)を結合するためのメソッドMimeMessage.ReassembleFragmentedMessageを追加
+
--ヘッダも含めたメッセージ全体を保存するためのメソッドMimeMessage.Saveを追加
+
--カプセル化されたMIMEメッセージを格納するためのプロパティMimeMessage.EncapsulatedMessageを追加
+
--Content-Typeがuuencodeのメールをデコード出来るようにした (ただし、本文中にuuencodeされたファイルが複数格納されている場合は、先頭のファイルのみを取得可能)
+
--MimeMessage.ToString、Mail.ToStringをオーバーライドし、ヘッダを含めたメッセージ全体を文字列で返すようにした
+
--MimeHeader.ToStringをオーバーライドし、入力ストリーム中でのヘッダフィールドの内容(改行・空白文字等を維持したもの)を文字列で返すようにした
+
-修正・改善
+
--Content-Typeがmessage/*のメッセージの場合、カプセル化されたMIMEメッセージをMimeMessage.EncapsulatedMessageに格納するように動作を変更
+
--カプセル化されたメッセージ(message/*)から作成されたAttachedFileインスタンスのSaveメソッドを呼び出した場合、ヘッダも含めたメッセージ全体を保存するように動作を変更
+
--Content-Typeのmedia-typeの大文字小文字の違いを無視していなかったのを修正
+
--ヘッダの最後のパラメータが';'で終わる場合に、MimeHeader.GetParameter()が末尾に';'の付いた値を返してしまう不具合を修正
+
--パーサにおける若干のパフォーマンス改善
+

          
 
**0.32 (2012-10-08)
**0.32 (2012-10-08)
 
-機能追加
-機能追加
 
--MimeMessage.Load(string file)メソッドを使った場合は、デフォルトではメール本文の内容をメモリ上に展開せず、直接ファイルから読み込むようにした
--MimeMessage.Load(string file)メソッドを使った場合は、デフォルトではメール本文の内容をメモリ上に展開せず、直接ファイルから読み込むようにした

works/libs/Smdn.Formats.Mime/index.wiki.txt

current previous
8,25 8,23
 
*ダウンロード
*ダウンロード
 
本ライブラリはMIT X11ライセンスでのリリースとなります。
本ライブラリはMIT X11ライセンスでのリリースとなります。
 

        

        
~
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Formats.Mime-0.33.tar.bz2}
:最新版 (ソースコード)|${smdncms:distfilelink,Smdn.Formats.Mime-0.32.tar.bz2}
 
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
:開発版|[[http://svn.smdn.jp/anonsvn/libs/Smdn/trunk/]]よりチェックアウトできます
 
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Formats.Mime/releases]]をご覧ください
:ビルド済みパッケージ・過去のバージョン|[[works/libs/Smdn.Formats.Mime/releases]]をご覧ください
 

        

        
 
#googleadunit(banner)
#googleadunit(banner)
 

        

        
 
*機能
*機能
~
現在対応している主な機能の一覧です。
現在対応している機能の一覧です。
 
-Content-Type
-Content-Type
~
--multipart/*, message/partialなど
--multipart対応
 
-Content-Disposition
-Content-Disposition
 
--&urn2url(urn:ietf:rfc:2231,short);形式のファイル名
--&urn2url(urn:ietf:rfc:2231,short);形式のファイル名
 
-Content-Transfer-Encoding
-Content-Transfer-Encoding
~
--base64, quoted-printable, 7bit, 8bit, binary, uuencode
--base64, quoted-printable, 7bit, 8bit, binary
 
-MIME Encoding
-MIME Encoding
 
--B-Encoding(base64), Q-Encoding(quoted-printable)
--B-Encoding(base64), Q-Encoding(quoted-printable)
 
-メッセージのパース・デコード
-メッセージのパース・デコード
+
-添付ファイルの読み込み・抽出
+
-分割メールの再結合
 
-メッセージの組み立て・エンコード(不完全)
-メッセージの組み立て・エンコード(不完全)
 

        

        
 
*サンプル
*サンプル
76,7 74,7
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
~
詳細・その他のサンプルコードは[[works/libs/Smdn.Formats.Mime/docs]]をご覧ください。 また、本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/SimpleMailer]], [[works/tools/junk/MailReassembler]]もあわせてご覧ください。
詳細・その他のサンプルコードは[[works/libs/Smdn.Formats.Mime/docs]]をご覧ください。 また、本ライブラリを使用したサンプルアプリケーション[[works/tools/junk/SimpleMailer]]もあわせてご覧ください。
 

        

        
 
*不具合・要望・質問等
*不具合・要望・質問等
 
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。
不具合の報告、ライブラリに対する要望や提案、使い方の質問などは[[掲示板>misc/forum/libs]]へどうぞ。

works/libs/Smdn.Formats.Mime/docs/index.wiki.txt

current previous
2,7 2,7
 
${smdncms:keywords,}
${smdncms:keywords,}
 
${smdncms:document_versions,codelang=cs,codelang=vb}
${smdncms:document_versions,codelang=cs,codelang=vb}
 
${pragma,parser-options,non-limited-list}
${pragma,parser-options,non-limited-list}
~
[[works/libs/Smdn.Formats.Mime]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.33時点のもので、記載不備などがあるかもしれません。
[[works/libs/Smdn.Formats.Mime]]のドキュメントとサンプルです。 ここに記載されているものはversion 0.31時点のもので、記載不備などがあるかもしれません。
 

        

        
 
ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
ご質問などありましたら[[掲示板>misc/forum/libs]]へどうぞ。
 

        

        
38,12 38,7
 
|MimeHeaderBuilderクラス|MIMEヘッダの組立・エンコードを行うクラス。|Smdn.Formats.Mime.dll|
|MimeHeaderBuilderクラス|MIMEヘッダの組立・エンコードを行うクラス。|Smdn.Formats.Mime.dll|
 
|MimeFormat|メッセージ組立時の折り返し文字数・改行文字などの書式を定義するクラス。|Smdn.Formats.Mime.dll|
|MimeFormat|メッセージ組立時の折り返し文字数・改行文字などの書式を定義するクラス。|Smdn.Formats.Mime.dll|
 

        

        
~
|*Smdn.Formats.UUEncoding名前空間の型
version 0.31時点ではSmdn.Formats.Mime.Formatting名前空間のクラスは実装・動作検証が不十分です。 また、今後のバージョンで大きな変更を行う可能性もあります。
+
|~型|~用途|~アセンブリ|h
+
|UUDecoderクラス|uuencodeされたデータを含むストリームからファイルをデコードして抽出するクラス。|Smdn.Core.Standards.dll|
+

          
+

          
+
version 0.33時点ではSmdn.Formats.Mime.Formatting名前空間のクラスは実装・動作検証が不十分です。 また、今後のバージョンで大きな変更を行う可能性もあります。
 

        

        
 

        

        
 

        

        
53,7 48,7
 

        

        
 
*サンプルコード [#samples]
*サンプルコード [#samples]
 
**Mailクラス
**Mailクラス
~
***メールの読み込み・解析 (Loadメソッド)
***Mail.Loadメソッド
 
emlファイルを読み込んで件名・差出人・日付と本文を表示する例。
emlファイルを読み込んで件名・差出人・日付と本文を表示する例。
 

        

        
 
#tabpage(C#)
#tabpage(C#)
106,7 101,7
 

        

        
 
MimeMessage.Loadメソッドも、Mail.Loadメソッドと同様の動作となります。
MimeMessage.Loadメソッドも、Mail.Loadメソッドと同様の動作となります。
 

        

        
~
***文字列からの読み込み (LoadMailメソッド)
***Mail.LoadMailメソッド
 
文字列(string)に格納されているメール内容からMailインスタンスを作成する場合は、Mail.LoadMailメソッドが使えます。
文字列(string)に格納されているメール内容からMailインスタンスを作成する場合は、Mail.LoadMailメソッドが使えます。
 

        

        
 
#tabpage(C#)
#tabpage(C#)
153,7 148,7
 
}}
}}
 
#tabpage-end
#tabpage-end
 

        

        
~
***添付ファイルの保存 (SaveAttachedFilesToDirectoryメソッド)
***Mail.SaveAttachedFilesToDirectoryメソッド
 
emlファイルを読み込んでメールに添付されているファイルを保存する例。
emlファイルを読み込んでメールに添付されているファイルを保存する例。
 

        

        
 
#tabpage(C#)
#tabpage(C#)
276,71 271,6
 

        

        
 

        

        
 
**MimeMessageクラス
**MimeMessageクラス
+

          
+
***分割メールの結合 (ReassembleFragmentedMessageメソッド)
+
分割メール(message/partial)を結合して、結合したメッセージのMimeMessageを取得する例。 ReassembleFragmentedMessageメソッドではメールヘッダを参照して適切な順序に並び替えた上で結合するため、このメソッドに渡す配列・コレクションは結合されるべき順序で並べ替えられている必要はありません。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.IO;
+

          
+
using Smdn.Formats.Mime;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    // ディレクトリ 'fragmented-mails' に保存されている分割メールのファイルを取得
+
    string[] files = Directory.GetFiles("fragmented-mails", "*.eml");
+

          
+
    // ファイルを読み込んでMailインスタンスを作成
+
    Mail[] mails = new Mail[files.Length];
+

          
+
    for (int i = 0; i < files.Length; i++) {
+
      mails[i] = Mail.Load(files[i]);
+
    }
+

          
+
    // メールを結合
+
    using (MimeMessage reassembled = MimeMessage.ReassembleFragmentedMessage(mails)) {
+
      // 結合したメールをファイルに保存
+
      reassembled.Save("reassembled.eml");
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.IO
+

          
+
Imports Smdn.Formats.Mime
+

          
+
Public Class Sample
+
  Public Shared Sub Main()
+
    ' ディレクトリ 'fragmented-mails' に保存されている分割メールのファイルを取得
+
    Dim files As String() = Directory.GetFiles("fragmented-mails", "*.eml")
+

          
+
    ' ファイルを読み込んでMailインスタンスを作成
+
    Dim mails(files.Length - 1) As Mail
+

          
+
    For i As Integer = 0 To files.Length - 1
+
      mails(i) = Mail.Load(files(i))
+
    Next
+

          
+
    ' メールを結合
+
    Using reassembled As MimeMessage = MimeMessage.ReassembleFragmentedMessage(mails)
+
      ' 結合したメールをファイルに保存
+
      reassembled.Save("reassembled.eml")
+
    End Using
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
なお、ReassembleFragmentedMessageメソッドはインスタンスメソッドと静的メソッドでidパラメータの取り扱いで動作が異なります。 インスタンスメソッドのReassembleFragmentedMessageでは、Content-Typeヘッダのidパラメータをチェックして同一のidを持つ分割メッセージのみを順番に結合します(引数に渡されたメッセージのうち、異なるidのメッセージは無視します)。 一方、静的メソッドのReassembleFragmentedMessageではidパラメータのチェックは行わず、numberパラメータのみをチェックして順番に結合します(引数に渡されたメッセージのうち、異なるidのメッセージがある場合でも結合します)。
+

          
+

          
+
***emlファイルの解析
 
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
emlファイルを読み込んでヘッダの一覧とボディの内容を表示する例。
 
#tabpage(C#)
#tabpage(C#)
 
#code(cs){{
#code(cs){{
588,8 518,6
 

        

        
 

        

        
 
**MimeEncodingクラス
**MimeEncodingクラス
+

          
+
***Qエンコードされた文字列のデコード・エンコード (Encode, Decode)
 
Qエンコードされた文字列のデコード・エンコードを行う例。
Qエンコードされた文字列のデコード・エンコードを行う例。
 

        

        
 
#tabpage(C#)
#tabpage(C#)
664,141 592,3
 

        

        
 
MimeEncodingMethod.QEncodingの代わりにMimeEncodingMethod.BEncodingを指定すれば、Bエンコード(BASE64)した文字列を取得出来ます。
MimeEncodingMethod.QEncodingの代わりにMimeEncodingMethod.BEncodingを指定すれば、Bエンコード(BASE64)した文字列を取得出来ます。
 

        

        
+
**UUDecoderクラス
+
***uuencodeされたファイルの抽出 (ExtractFiles)
+
uuencodeされたファイルをデコードし、抽出したファイルを保存する例。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.IO;
+

          
+
using Smdn.Formats.UUEncoding;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    // uuencodeされたファイル 'uuencoded.txt' を開く
+
    using (Stream stream = File.OpenRead("uuencoded.txt")) {
+
      // ストリーム内に含まれる全てのファイルエントリを抽出する
+
      foreach (UUDecoder.FileEntry fileEntry in UUDecoder.ExtractFiles(stream)) {
+
        // エンコード時に指定されたファイル名を使い、デコードしたファイルをカレントディレクトリに保存
+
        fileEntry.Save();
+

          
+
        // メモリ上に展開されているデコード済みのデータを開放
+
        fileEntry.Dispose();
+
      }
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.IO
+

          
+
Imports Smdn.Formats.UUEncoding
+

          
+
Public Class Sample
+
  Public Shared Sub Main()
+
    ' uuencodeされたファイル 'uuencoded.txt' を開く
+
    Using stream As Stream = File.OpenRead("uuencoded.txt")
+
      ' ストリーム内に含まれる全てのファイルエントリを抽出する
+
      For Each fileEntry As UUDecoder.FileEntry In UUDecoder.ExtractFiles(stream)
+
        ' エンコード時に指定されたファイル名を使い、デコードしたファイルをカレントディレクトリに保存
+
        fileEntry.Save()
+

          
+
        ' メモリ上に展開されているデコード済みのデータを開放
+
        fileEntry.Dispose()
+
      Next
+
    End Using
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
以下のようなコマンドでエンコードされたファイルを読み込んだ場合、カレントディレクトリに foo.zip と bar.zip が保存されます。 なお、現在の実装ではファイルに指定されているパーミッションは無視されます。
+

          
+
#code(sh){{
+
uuencode foo.zip bar.zip > uuencoded.txt
+
}}
+

          
+

          
+
***ReadContentメソッドとUUDecoder.ExtractFiles
+
uuencodeコマンドとmailコマンドを使って送信された、複数のファイルが添付されているメールを解析する例。
+

          
+
#code(sh){{
+
uuencode foo.zip bar.zip | mail user@example.net
+
}}
+

          
+
上記のようにして送信されたメールを読み込んだ場合、Mail.AttachedFileプロパティでは添付されたファイルを参照することはできません。 また、SaveContent(), ReadContentAsText(), ReadContent(Action<BinaryReader>)等のメソッドは、添付されているファイルのうち最初の一つのみしか読み込みません(この例ではfoo.zip)。 添付されている全てのファイルを読み込む必要がある場合は、ReadContent(Action<Stream>)メソッドを使ってデコードされていないストリームを取得し、そのストリームをUUDecoder.ExtractFilesメソッドに渡します。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.IO;
+

          
+
using Smdn.Formats.Mime;
+
using Smdn.Formats.UUEncoding;
+

          
+
class Sample {
+
  public static void Main(string[] args)
+
  {
+
    // uuencodeで添付されたファイルを含むメール 'uuencoded.eml' を開く
+
    using (Mail mail = Mail.Load("uuencoded.eml")) {
+
      // 本文を読み込む
+
      mail.ReadContent(ReadUUencodedContent);
+
    }
+
  }
+

          
+
  private static void ReadUUencodedContent(Stream stream)
+
  {
+
    // uuencodeでエンコードされたファイルを抽出する
+
    foreach (UUDecoder.FileEntry fileEntry in UUDecoder.ExtractFiles(stream)) {
+
      // ファイルの名前・パーミッションを表示
+
      Console.WriteLine("{0} {1:x}", fileEntry.FileName, fileEntry.Permissions);
+

          
+
      // デコードされたファイルのストリームを使って必要な処理を行う
+
      fileEntry.Stream.ReadByte();
+

          
+
      // メモリ上に展開されているデコード済みのデータを開放
+
      fileEntry.Dispose();
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.IO
+

          
+
Imports Smdn.Formats.Mime
+
Imports Smdn.Formats.UUEncoding
+

          
+
Public Class Sample
+
  Public Shared Sub Main()
+
    ' uuencodeで添付されたファイルを含むメール 'uuencoded.eml' を開く
+
    Using mail As Mail = Mail.Load("uuencoded.eml")
+
      ' 本文を読み込む
+
      mail.ReadContent(AddressOf ReadUUencodedContent)
+
    End Using
+
  End Sub
+

          
+
  Private Shared Sub ReadUUEncodedContent(ByVal stream As Stream)
+
    ' uuencodeでエンコードされたファイルを抽出する
+
    For Each fileEntry As UUDecoder.FileEntry In UUDecoder.ExtractFiles(stream)
+
      ' ファイルの名前・パーミッションを表示
+
      Console.WriteLine("{0} {1:x}", fileEntry.FileName, fileEntry.Permissions)
+

          
+
      ' デコードされたファイルのストリームを使って必要な処理を行う
+
      fileEntry.Stream.ReadByte()
+

          
+
      ' メモリ上に展開されているデコード済みのデータを開放
+
      fileEntry.Dispose()
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+

          

works/tools/junk/MailReassembler/index.wiki.txt

current previous
1,67 0,0
+
${smdncms:title,MailReassembler}
+
${smdncms:keywords,分割メール,結合,message/partial}
+

          
+
*概要
+
分割メール(message/partial)を結合するコマンドラインツールです。 [[works/libs/Smdn.Formats.Mime]]のデモも兼ねたアプリケーションです。
+

          
+
-関連ページ
+
--[[works/libs/Smdn.Formats.Mime]]
+
--[[works/tools/junk/MRAConnector]]
+
--[[works/tools/junk/TundereBird]]
+

          
+
*ダウンロード
+
#googleadunit
+
-パッケージ
+
--${smdncms:distfilelink,MailReassembler-0.01.zip}
+
-ソースコード
+
--${smdncms:distfilelink,MailReassembler-0.01.tar.bz2}
+

          
+
*使い方
+
まず、分割メールをファイルに保存して一つのフォルダにまとめてください。 その後、コマンドラインから次のようにして起動してください。 次の例では、フォルダ 'C:\Users\User\mails\' に保存されている分割メールを読み込み、結合したものを同じフォルダに保存します。
+

          
+
#code(){{
+
MailReassembler.exe C:\Users\User\mails\
+
}}
+

          
+
メールヘッダに指定されている順で結合順序を決定するため、分割メールのファイル名や件名に連番を振っておく必要はありません。
+

          
+
**オプション
+
''/e'' オプションを指定すると、結合したメールに添付されているファイルを抽出して保存します。 抽出された添付ファイルは結合したメールと同じフォルダに保存されます。
+

          
+
#code(){{
+
MailReassembler.exe C:\Users\User\mails\ /e
+
}}
+

          
+
''/f'' オプションを指定すると、結合したメールを保存する際のパスを指定できます。 次の例では、結合したメールを 'C:\Users\User\mails\reassembled.eml' として保存します。
+

          
+
#code(){{
+
MailReassembler.exe C:\Users\User\mails\ /e C:\Users\User\mails\reassembled.eml
+
}}
+

          
+
''/n'' オプションを指定すると、ファイルへの保存は行わず、結合できるかどうかのテストのみを行います。
+

          
+
#code(){{
+
MailReassembler.exe C:\Users\User\mails\ /n
+
}}
+

          
+
詳しい動作については ''/?'' オプションのヘルプを参照してください。
+

          
+
*動作環境
+
動作に.NET Framework 3.5が必要です。
+

          
+
なお、以下の環境で動作することを確認済みです。
+

          
+
-Windows 7 Professional + .NET Framework 4
+
-Ubuntu 12.04 + Mono 2.11.4
+

          
+
また、以下のメーラーが送信する分割メールが結合できることを確認済みです。
+

          
+
-Windows Live メール
+

          
+
*不具合・要望・質問等
+
不具合・要望等は[[掲示板 (ツール)>misc/forum/tools]]へどうぞ。 ライブラリに関する問題・質問等は[[掲示板 (ライブラリ)>misc/forum/libs]]の方へお願いします。
+

          
+
*変更履歴
+
**0.01 (2012-10-21)
+
初版。
+