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 リファレンス を参照してください。