Expat C API
***********

"xml.parsers.expat" モジュールは、"expat_CAPI" カプセルを通じて Expat
の一部の関数を公開しています。 これにより、拡張モジュールで Python と
同じ Expat ライブラリを使えます。 このインターフェースは "pyexpat.h"
で宣言されています。 このヘッダは Expat の "expat.h" ヘッダより後にイ
ンクルードする必要があります。

PyExpat_CAPSULE_NAME

   Expat C API を格納するカプセルの名前 ""pyexpat.expat_CAPI""。 これ
   を "PyCapsule_Import()" に渡すと、"PyExpat_CAPI" へのポインタを取得
   できます。

PyExpat_CAPI_MAGIC

   "PyExpat_CAPI" のレイアウトを識別する文字列。 構造体内の関数ポイン
   タを使う前に、"strcmp()" で "magic" メンバがこの文字列と等しいこと
   を確認し、"size" メンバが sizeof(struct PyExpat_CAPI) 以上であるこ
   とを確認してください。

struct PyExpat_CAPI

   "xml.parsers.expat" がエクスポートする関数ポインタのテーブル。 この
   構造体はカプセルが所有しています。 読み取り専用として扱い、解放しな
   いでください。 テーブルの使用中は、カプセルへの強参照を保持してくだ
   さい。

   関数ポインタを使う前に、"PyExpat_CAPI_MAGIC" の説明に従って互換性を
   示すフィールドを確認してください。

   char *magic

      インターフェースの識別子。 "PyExpat_CAPI_MAGIC" に設定されます。

   int size

      構造体のサイズ (バイト単位)。 カプセルを作成した
      "xml.parsers.expat" モジュールによって "sizeof(struct
      PyExpat_CAPI)" に設定されます。

   int MAJOR_VERSION
   int MINOR_VERSION
   int MICRO_VERSION

      "xml.parsers.expat" が使う Expat ライブラリのメジャー、マイナー
      、マイクロバージョン番号。

   void (*SetUnknownEncodingHandler)(XML_Parser parser, XML_UnknownEncodingHandler handler, void *encodingHandlerData)

      XML_SetUnknownEncodingHandler へのポインタ。 ハンドラは失敗時に
      Python の例外を設定する場合があります。 呼び出し側は解析後に
      Python の例外の有無を確認する必要があります。

   int (*DefaultUnknownEncodingHandler)(void *encodingHandlerData, const XML_Char *name, XML_Encoding *info)

      "XML_SetUnknownEncodingHandler" で使う、Expat の未知のエンコーデ
      ィングに対応する Python のハンドラ。 Python のコーデックレジスト
      リを使って "info" に値を設定します。 "encodingHandlerData" 引数
      は使いません。 このハンドラを呼び出すには *スレッド状態がアタッ
      チされている* 必要があります。

   以下は、対応する Expat 関数へのポインタです。 "xml.parsers.expat"
   が使う Expat のバージョンで利用できない場合は "NULL" です。

   メンバ名では "XML_" 接頭辞を省略しています。 例えば "SetHashSalt"
   は Expat の "XML_SetHashSalt" 関数を公開します。 動作と利用可能にな
   る Expat の最小バージョンについては、Expat API リファレンス を参照
   してください。

   const XML_LChar *(*ErrorString)(enum XML_Error code)
   enum XML_Error (*GetErrorCode)(XML_Parser parser)
   XML_Size (*GetErrorColumnNumber)(XML_Parser parser)
   XML_Size (*GetErrorLineNumber)(XML_Parser parser)
   enum XML_Status (*Parse)(XML_Parser parser, const char *s, int len, int isFinal)
   XML_Parser (*ParserCreate_MM)(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *namespaceSeparator)
   void (*ParserFree)(XML_Parser parser)
   void (*SetCharacterDataHandler)(XML_Parser parser, XML_CharacterDataHandler handler)
   void (*SetCommentHandler)(XML_Parser parser, XML_CommentHandler handler)
   void (*SetDefaultHandlerExpand)(XML_Parser parser, XML_DefaultHandler handler)
   void (*SetElementHandler)(XML_Parser parser, XML_StartElementHandler start, XML_EndElementHandler end)
   void (*SetNamespaceDeclHandler)(XML_Parser parser, XML_StartNamespaceDeclHandler start, XML_EndNamespaceDeclHandler end)
   void (*SetProcessingInstructionHandler)(XML_Parser parser, XML_ProcessingInstructionHandler handler)
   void (*SetUserData)(XML_Parser parser, void *userData)
   void (*SetStartDoctypeDeclHandler)(XML_Parser parser, XML_StartDoctypeDeclHandler start)
   enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding)
   int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt)
   XML_Bool (*SetReparseDeferralEnabled)(XML_Parser parser, XML_Bool enabled)
   XML_Bool (*SetAllocTrackerActivationThreshold)(XML_Parser parser, unsigned long long activationThresholdBytes)
   XML_Bool (*SetAllocTrackerMaximumAmplification)(XML_Parser parser, float maxAmplificationFactor)
   XML_Bool (*SetBillionLaughsAttackProtectionActivationThreshold)(XML_Parser parser, unsigned long long activationThresholdBytes)
   XML_Bool (*SetBillionLaughsAttackProtectionMaximumAmplification)(XML_Parser parser, float maxAmplificationFactor)
   XML_Bool (*SetHashSalt16Bytes)(XML_Parser parser, const uint8_t entropy[16])

      Expat API リファレンス を参照してください。
