mirror of
https://github.com/python/cpython.git
synced 2025-11-03 19:34:08 +00:00
Incorporate Expat 1.95.6.
This commit is contained in:
parent
5a772d32f4
commit
fc03a94aac
11 changed files with 5443 additions and 3941 deletions
|
|
@ -1,6 +1,5 @@
|
||||||
/*
|
/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
See the file COPYING for copying permission.
|
||||||
See the file COPYING for copying permission.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ASCII_A 0x41
|
#define ASCII_A 0x41
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
73
Modules/expat/internal.h
Normal file
73
Modules/expat/internal.h
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
/* internal.h
|
||||||
|
|
||||||
|
Internal definitions used by Expat. This is not needed to compile
|
||||||
|
client code.
|
||||||
|
|
||||||
|
The following calling convention macros are defined for frequently
|
||||||
|
called functions:
|
||||||
|
|
||||||
|
FASTCALL - Used for those internal functions that have a simple
|
||||||
|
body and a low number of arguments and local variables.
|
||||||
|
|
||||||
|
PTRCALL - Used for functions called though function pointers.
|
||||||
|
|
||||||
|
PTRFASTCALL - Like PTRCALL, but for low number of arguments.
|
||||||
|
|
||||||
|
inline - Used for selected internal functions for which inlining
|
||||||
|
may improve performance on some platforms.
|
||||||
|
|
||||||
|
Note: Use of these macros is based on judgement, not hard rules,
|
||||||
|
and therefore subject to change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
/* Instability reported with egcs on a RedHat Linux 7.3.
|
||||||
|
Let's comment it out:
|
||||||
|
#define FASTCALL __attribute__((stdcall, regparm(3)))
|
||||||
|
and let's try this:
|
||||||
|
*/
|
||||||
|
#define FASTCALL __attribute__((regparm(3)))
|
||||||
|
#define PTRCALL
|
||||||
|
#define PTRFASTCALL __attribute__((regparm(3)))
|
||||||
|
|
||||||
|
#elif defined(WIN32)
|
||||||
|
/* Using __fastcall seems to have an unexpected negative effect under
|
||||||
|
MS VC++, especially for function pointers, so we won't use it for
|
||||||
|
now on that platform. It may be reconsidered for a future release
|
||||||
|
if it can be made more effective.
|
||||||
|
Likely reason: __fastcall on Windows is like stdcall, therefore
|
||||||
|
the compiler cannot perform stack optimizations for call clusters.
|
||||||
|
*/
|
||||||
|
#define FASTCALL
|
||||||
|
#define PTRCALL
|
||||||
|
#define PTRFASTCALL
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef FASTCALL
|
||||||
|
#define FASTCALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PTRCALL
|
||||||
|
#define PTRCALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PTRFASTCALL
|
||||||
|
#define PTRFASTCALL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef XML_MIN_SIZE
|
||||||
|
#if !defined(__cplusplus) && !defined(inline)
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define inline __inline
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
#endif
|
||||||
|
#endif /* XML_MIN_SIZE */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#define inline inline
|
||||||
|
#else
|
||||||
|
#ifndef inline
|
||||||
|
#define inline
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,11 +1,16 @@
|
||||||
/*
|
/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
See the file COPYING for copying permission.
|
||||||
See the file COPYING for copying permission.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef XmlRole_INCLUDED
|
#ifndef XmlRole_INCLUDED
|
||||||
#define XmlRole_INCLUDED 1
|
#define XmlRole_INCLUDED 1
|
||||||
|
|
||||||
|
#ifdef __VMS
|
||||||
|
/* 0 1 2 3 0 1 2 3
|
||||||
|
1234567890123456789012345678901 1234567890123456789012345678901 */
|
||||||
|
#define XmlPrologStateInitExternalEntity XmlPrologStateInitExternalEnt
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "xmltok.h"
|
#include "xmltok.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -17,6 +22,7 @@ enum {
|
||||||
XML_ROLE_NONE = 0,
|
XML_ROLE_NONE = 0,
|
||||||
XML_ROLE_XML_DECL,
|
XML_ROLE_XML_DECL,
|
||||||
XML_ROLE_INSTANCE_START,
|
XML_ROLE_INSTANCE_START,
|
||||||
|
XML_ROLE_DOCTYPE_NONE,
|
||||||
XML_ROLE_DOCTYPE_NAME,
|
XML_ROLE_DOCTYPE_NAME,
|
||||||
XML_ROLE_DOCTYPE_SYSTEM_ID,
|
XML_ROLE_DOCTYPE_SYSTEM_ID,
|
||||||
XML_ROLE_DOCTYPE_PUBLIC_ID,
|
XML_ROLE_DOCTYPE_PUBLIC_ID,
|
||||||
|
|
@ -24,11 +30,13 @@ enum {
|
||||||
XML_ROLE_DOCTYPE_CLOSE,
|
XML_ROLE_DOCTYPE_CLOSE,
|
||||||
XML_ROLE_GENERAL_ENTITY_NAME,
|
XML_ROLE_GENERAL_ENTITY_NAME,
|
||||||
XML_ROLE_PARAM_ENTITY_NAME,
|
XML_ROLE_PARAM_ENTITY_NAME,
|
||||||
|
XML_ROLE_ENTITY_NONE,
|
||||||
XML_ROLE_ENTITY_VALUE,
|
XML_ROLE_ENTITY_VALUE,
|
||||||
XML_ROLE_ENTITY_SYSTEM_ID,
|
XML_ROLE_ENTITY_SYSTEM_ID,
|
||||||
XML_ROLE_ENTITY_PUBLIC_ID,
|
XML_ROLE_ENTITY_PUBLIC_ID,
|
||||||
XML_ROLE_ENTITY_COMPLETE,
|
XML_ROLE_ENTITY_COMPLETE,
|
||||||
XML_ROLE_ENTITY_NOTATION_NAME,
|
XML_ROLE_ENTITY_NOTATION_NAME,
|
||||||
|
XML_ROLE_NOTATION_NONE,
|
||||||
XML_ROLE_NOTATION_NAME,
|
XML_ROLE_NOTATION_NAME,
|
||||||
XML_ROLE_NOTATION_SYSTEM_ID,
|
XML_ROLE_NOTATION_SYSTEM_ID,
|
||||||
XML_ROLE_NOTATION_NO_SYSTEM_ID,
|
XML_ROLE_NOTATION_NO_SYSTEM_ID,
|
||||||
|
|
@ -44,11 +52,13 @@ enum {
|
||||||
XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS,
|
XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS,
|
||||||
XML_ROLE_ATTRIBUTE_ENUM_VALUE,
|
XML_ROLE_ATTRIBUTE_ENUM_VALUE,
|
||||||
XML_ROLE_ATTRIBUTE_NOTATION_VALUE,
|
XML_ROLE_ATTRIBUTE_NOTATION_VALUE,
|
||||||
|
XML_ROLE_ATTLIST_NONE,
|
||||||
XML_ROLE_ATTLIST_ELEMENT_NAME,
|
XML_ROLE_ATTLIST_ELEMENT_NAME,
|
||||||
XML_ROLE_IMPLIED_ATTRIBUTE_VALUE,
|
XML_ROLE_IMPLIED_ATTRIBUTE_VALUE,
|
||||||
XML_ROLE_REQUIRED_ATTRIBUTE_VALUE,
|
XML_ROLE_REQUIRED_ATTRIBUTE_VALUE,
|
||||||
XML_ROLE_DEFAULT_ATTRIBUTE_VALUE,
|
XML_ROLE_DEFAULT_ATTRIBUTE_VALUE,
|
||||||
XML_ROLE_FIXED_ATTRIBUTE_VALUE,
|
XML_ROLE_FIXED_ATTRIBUTE_VALUE,
|
||||||
|
XML_ROLE_ELEMENT_NONE,
|
||||||
XML_ROLE_ELEMENT_NAME,
|
XML_ROLE_ELEMENT_NAME,
|
||||||
XML_ROLE_CONTENT_ANY,
|
XML_ROLE_CONTENT_ANY,
|
||||||
XML_ROLE_CONTENT_EMPTY,
|
XML_ROLE_CONTENT_EMPTY,
|
||||||
|
|
@ -64,6 +74,8 @@ enum {
|
||||||
XML_ROLE_CONTENT_ELEMENT_REP,
|
XML_ROLE_CONTENT_ELEMENT_REP,
|
||||||
XML_ROLE_CONTENT_ELEMENT_OPT,
|
XML_ROLE_CONTENT_ELEMENT_OPT,
|
||||||
XML_ROLE_CONTENT_ELEMENT_PLUS,
|
XML_ROLE_CONTENT_ELEMENT_PLUS,
|
||||||
|
XML_ROLE_PI,
|
||||||
|
XML_ROLE_COMMENT,
|
||||||
#ifdef XML_DTD
|
#ifdef XML_DTD
|
||||||
XML_ROLE_TEXT_DECL,
|
XML_ROLE_TEXT_DECL,
|
||||||
XML_ROLE_IGNORE_SECT,
|
XML_ROLE_IGNORE_SECT,
|
||||||
|
|
@ -73,15 +85,17 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct prolog_state {
|
typedef struct prolog_state {
|
||||||
int (*handler)(struct prolog_state *state,
|
int (PTRCALL *handler) (struct prolog_state *state,
|
||||||
int tok,
|
int tok,
|
||||||
const char *ptr,
|
const char *ptr,
|
||||||
const char *end,
|
const char *end,
|
||||||
const ENCODING *enc);
|
const ENCODING *enc);
|
||||||
unsigned level;
|
unsigned level;
|
||||||
|
int role_none;
|
||||||
#ifdef XML_DTD
|
#ifdef XML_DTD
|
||||||
unsigned includeLevel;
|
unsigned includeLevel;
|
||||||
int documentEntity;
|
int documentEntity;
|
||||||
|
int inEntityValue;
|
||||||
#endif /* XML_DTD */
|
#endif /* XML_DTD */
|
||||||
} PROLOG_STATE;
|
} PROLOG_STATE;
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,5 @@
|
||||||
/*
|
/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
See the file COPYING for copying permission.
|
||||||
See the file COPYING for copying permission.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef XmlTok_INCLUDED
|
#ifndef XmlTok_INCLUDED
|
||||||
|
|
@ -11,9 +10,11 @@ extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The following token may be returned by XmlContentTok */
|
/* The following token may be returned by XmlContentTok */
|
||||||
#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be start of
|
#define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be
|
||||||
illegal ]]> sequence */
|
start of illegal ]]> sequence */
|
||||||
/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
|
/* The following tokens may be returned by both XmlPrologTok and
|
||||||
|
XmlContentTok.
|
||||||
|
*/
|
||||||
#define XML_TOK_NONE -4 /* The string to be scanned is empty */
|
#define XML_TOK_NONE -4 /* The string to be scanned is empty */
|
||||||
#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan;
|
#define XML_TOK_TRAILING_CR -3 /* A CR at the end of the scan;
|
||||||
might be part of CRLF sequence */
|
might be part of CRLF sequence */
|
||||||
|
|
@ -22,8 +23,8 @@ extern "C" {
|
||||||
#define XML_TOK_INVALID 0
|
#define XML_TOK_INVALID 0
|
||||||
|
|
||||||
/* The following tokens are returned by XmlContentTok; some are also
|
/* The following tokens are returned by XmlContentTok; some are also
|
||||||
returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok */
|
returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok.
|
||||||
|
*/
|
||||||
#define XML_TOK_START_TAG_WITH_ATTS 1
|
#define XML_TOK_START_TAG_WITH_ATTS 1
|
||||||
#define XML_TOK_START_TAG_NO_ATTS 2
|
#define XML_TOK_START_TAG_NO_ATTS 2
|
||||||
#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
|
#define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
|
||||||
|
|
@ -35,7 +36,9 @@ extern "C" {
|
||||||
#define XML_TOK_ENTITY_REF 9
|
#define XML_TOK_ENTITY_REF 9
|
||||||
#define XML_TOK_CHAR_REF 10 /* numeric character reference */
|
#define XML_TOK_CHAR_REF 10 /* numeric character reference */
|
||||||
|
|
||||||
/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
|
/* The following tokens may be returned by both XmlPrologTok and
|
||||||
|
XmlContentTok.
|
||||||
|
*/
|
||||||
#define XML_TOK_PI 11 /* processing instruction */
|
#define XML_TOK_PI 11 /* processing instruction */
|
||||||
#define XML_TOK_XML_DECL 12 /* XML decl or text decl */
|
#define XML_TOK_XML_DECL 12 /* XML decl or text decl */
|
||||||
#define XML_TOK_COMMENT 13
|
#define XML_TOK_COMMENT 13
|
||||||
|
|
@ -75,8 +78,9 @@ extern "C" {
|
||||||
/* The following token is returned only by XmlCdataSectionTok */
|
/* The following token is returned only by XmlCdataSectionTok */
|
||||||
#define XML_TOK_CDATA_SECT_CLOSE 40
|
#define XML_TOK_CDATA_SECT_CLOSE 40
|
||||||
|
|
||||||
/* With namespace processing this is returned by XmlPrologTok
|
/* With namespace processing this is returned by XmlPrologTok for a
|
||||||
for a name with a colon. */
|
name with a colon.
|
||||||
|
*/
|
||||||
#define XML_TOK_PREFIXED_NAME 41
|
#define XML_TOK_PREFIXED_NAME 41
|
||||||
|
|
||||||
#ifdef XML_DTD
|
#ifdef XML_DTD
|
||||||
|
|
@ -121,37 +125,45 @@ typedef struct {
|
||||||
struct encoding;
|
struct encoding;
|
||||||
typedef struct encoding ENCODING;
|
typedef struct encoding ENCODING;
|
||||||
|
|
||||||
|
typedef int (PTRCALL *SCANNER)(const ENCODING *,
|
||||||
|
const char *,
|
||||||
|
const char *,
|
||||||
|
const char **);
|
||||||
|
|
||||||
struct encoding {
|
struct encoding {
|
||||||
int (*scanners[XML_N_STATES])(const ENCODING *,
|
SCANNER scanners[XML_N_STATES];
|
||||||
|
SCANNER literalScanners[XML_N_LITERAL_TYPES];
|
||||||
|
int (PTRCALL *sameName)(const ENCODING *,
|
||||||
|
const char *,
|
||||||
|
const char *);
|
||||||
|
int (PTRCALL *nameMatchesAscii)(const ENCODING *,
|
||||||
const char *,
|
const char *,
|
||||||
const char *,
|
const char *,
|
||||||
const char **);
|
const char *);
|
||||||
int (*literalScanners[XML_N_LITERAL_TYPES])(const ENCODING *,
|
int (PTRFASTCALL *nameLength)(const ENCODING *, const char *);
|
||||||
|
const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *);
|
||||||
|
int (PTRCALL *getAtts)(const ENCODING *enc,
|
||||||
|
const char *ptr,
|
||||||
|
int attsMax,
|
||||||
|
ATTRIBUTE *atts);
|
||||||
|
int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr);
|
||||||
|
int (PTRCALL *predefinedEntityName)(const ENCODING *,
|
||||||
const char *,
|
const char *,
|
||||||
const char *,
|
const char *);
|
||||||
const char **);
|
void (PTRCALL *updatePosition)(const ENCODING *,
|
||||||
int (*sameName)(const ENCODING *,
|
|
||||||
const char *, const char *);
|
|
||||||
int (*nameMatchesAscii)(const ENCODING *,
|
|
||||||
const char *, const char *, const char *);
|
|
||||||
int (*nameLength)(const ENCODING *, const char *);
|
|
||||||
const char *(*skipS)(const ENCODING *, const char *);
|
|
||||||
int (*getAtts)(const ENCODING *enc, const char *ptr,
|
|
||||||
int attsMax, ATTRIBUTE *atts);
|
|
||||||
int (*charRefNumber)(const ENCODING *enc, const char *ptr);
|
|
||||||
int (*predefinedEntityName)(const ENCODING *, const char *, const char *);
|
|
||||||
void (*updatePosition)(const ENCODING *,
|
|
||||||
const char *ptr,
|
const char *ptr,
|
||||||
const char *end,
|
const char *end,
|
||||||
POSITION *);
|
POSITION *);
|
||||||
int (*isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
|
int (PTRCALL *isPublicId)(const ENCODING *enc,
|
||||||
|
const char *ptr,
|
||||||
|
const char *end,
|
||||||
const char **badPtr);
|
const char **badPtr);
|
||||||
void (*utf8Convert)(const ENCODING *enc,
|
void (PTRCALL *utf8Convert)(const ENCODING *enc,
|
||||||
const char **fromP,
|
const char **fromP,
|
||||||
const char *fromLim,
|
const char *fromLim,
|
||||||
char **toP,
|
char **toP,
|
||||||
const char *toLim);
|
const char *toLim);
|
||||||
void (*utf16Convert)(const ENCODING *enc,
|
void (PTRCALL *utf16Convert)(const ENCODING *enc,
|
||||||
const char **fromP,
|
const char **fromP,
|
||||||
const char *fromLim,
|
const char *fromLim,
|
||||||
unsigned short **toP,
|
unsigned short **toP,
|
||||||
|
|
@ -161,24 +173,25 @@ struct encoding {
|
||||||
char isUtf16;
|
char isUtf16;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* Scan the string starting at ptr until the end of the next complete
|
||||||
Scan the string starting at ptr until the end of the next complete token,
|
token, but do not scan past eptr. Return an integer giving the
|
||||||
but do not scan past eptr. Return an integer giving the type of token.
|
type of token.
|
||||||
|
|
||||||
Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
|
Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
|
||||||
|
|
||||||
Return XML_TOK_PARTIAL when the string does not contain a complete token;
|
Return XML_TOK_PARTIAL when the string does not contain a complete
|
||||||
nextTokPtr will not be set.
|
token; nextTokPtr will not be set.
|
||||||
|
|
||||||
Return XML_TOK_INVALID when the string does not start a valid token; nextTokPtr
|
Return XML_TOK_INVALID when the string does not start a valid
|
||||||
will be set to point to the character which made the token invalid.
|
token; nextTokPtr will be set to point to the character which made
|
||||||
|
the token invalid.
|
||||||
|
|
||||||
Otherwise the string starts with a valid token; nextTokPtr will be set to point
|
Otherwise the string starts with a valid token; nextTokPtr will be
|
||||||
to the character following the end of that token.
|
set to point to the character following the end of that token.
|
||||||
|
|
||||||
Each data character counts as a single token, but adjacent data characters
|
Each data character counts as a single token, but adjacent data
|
||||||
may be returned together. Similarly for characters in the prolog outside
|
characters may be returned together. Similarly for characters in
|
||||||
literals, comments and processing instructions.
|
the prolog outside literals, comments and processing instructions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -201,9 +214,9 @@ literals, comments and processing instructions.
|
||||||
|
|
||||||
#endif /* XML_DTD */
|
#endif /* XML_DTD */
|
||||||
|
|
||||||
/* This is used for performing a 2nd-level tokenization on
|
/* This is used for performing a 2nd-level tokenization on the content
|
||||||
the content of a literal that has already been returned by XmlTok. */
|
of a literal that has already been returned by XmlTok.
|
||||||
|
*/
|
||||||
#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
|
#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
|
||||||
(((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
|
(((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
|
||||||
|
|
||||||
|
|
@ -264,14 +277,16 @@ int XmlParseXmlDecl(int isGeneralTextEntity,
|
||||||
int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
|
int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
|
||||||
const ENCODING *XmlGetUtf8InternalEncoding(void);
|
const ENCODING *XmlGetUtf8InternalEncoding(void);
|
||||||
const ENCODING *XmlGetUtf16InternalEncoding(void);
|
const ENCODING *XmlGetUtf16InternalEncoding(void);
|
||||||
int XmlUtf8Encode(int charNumber, char *buf);
|
int FASTCALL XmlUtf8Encode(int charNumber, char *buf);
|
||||||
int XmlUtf16Encode(int charNumber, unsigned short *buf);
|
int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf);
|
||||||
|
|
||||||
int XmlSizeOfUnknownEncoding(void);
|
int XmlSizeOfUnknownEncoding(void);
|
||||||
|
|
||||||
|
typedef int (*CONVERTER)(void *userData, const char *p);
|
||||||
|
|
||||||
ENCODING *
|
ENCODING *
|
||||||
XmlInitUnknownEncoding(void *mem,
|
XmlInitUnknownEncoding(void *mem,
|
||||||
int *table,
|
int *table,
|
||||||
int (*conv)(void *userData, const char *p),
|
CONVERTER convert,
|
||||||
void *userData);
|
void *userData);
|
||||||
|
|
||||||
int XmlParseXmlDeclNS(int isGeneralTextEntity,
|
int XmlParseXmlDeclNS(int isGeneralTextEntity,
|
||||||
|
|
@ -284,13 +299,14 @@ int XmlParseXmlDeclNS(int isGeneralTextEntity,
|
||||||
const char **encodingNamePtr,
|
const char **encodingNamePtr,
|
||||||
const ENCODING **namedEncodingPtr,
|
const ENCODING **namedEncodingPtr,
|
||||||
int *standalonePtr);
|
int *standalonePtr);
|
||||||
|
|
||||||
int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
|
int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
|
||||||
const ENCODING *XmlGetUtf8InternalEncodingNS(void);
|
const ENCODING *XmlGetUtf8InternalEncodingNS(void);
|
||||||
const ENCODING *XmlGetUtf16InternalEncodingNS(void);
|
const ENCODING *XmlGetUtf16InternalEncodingNS(void);
|
||||||
ENCODING *
|
ENCODING *
|
||||||
XmlInitUnknownEncodingNS(void *mem,
|
XmlInitUnknownEncodingNS(void *mem,
|
||||||
int *table,
|
int *table,
|
||||||
int (*conv)(void *userData, const char *p),
|
CONVERTER convert,
|
||||||
void *userData);
|
void *userData);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
/*
|
/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
||||||
Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
|
See the file COPYING for copying permission.
|
||||||
See the file COPYING for copying permission.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IS_INVALID_CHAR
|
#ifndef IS_INVALID_CHAR
|
||||||
|
|
@ -87,9 +86,9 @@ See the file COPYING for copying permission.
|
||||||
|
|
||||||
/* ptr points to character following "<!-" */
|
/* ptr points to character following "<!-" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanComment)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr != end) {
|
if (ptr != end) {
|
||||||
if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
|
if (!CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
|
||||||
|
|
@ -125,9 +124,9 @@ int PREFIX(scanComment)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "<!" */
|
/* ptr points to character following "<!" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanDecl)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
|
|
@ -172,8 +171,9 @@ int PREFIX(scanDecl)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end, int *tokPtr)
|
PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr,
|
||||||
|
const char *end, int *tokPtr)
|
||||||
{
|
{
|
||||||
int upper = 0;
|
int upper = 0;
|
||||||
*tokPtr = XML_TOK_PI;
|
*tokPtr = XML_TOK_PI;
|
||||||
|
|
@ -216,9 +216,9 @@ int PREFIX(checkPiTarget)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "<?" */
|
/* ptr points to character following "<?" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanPi)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
int tok;
|
int tok;
|
||||||
const char *target = ptr;
|
const char *target = ptr;
|
||||||
|
|
@ -278,12 +278,12 @@ int PREFIX(scanPi)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int PTRCALL
|
||||||
static
|
PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr,
|
||||||
int PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *end,
|
const char *end, const char **nextTokPtr)
|
||||||
const char **nextTokPtr)
|
|
||||||
{
|
{
|
||||||
static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB };
|
static const char CDATA_LSQB[] = { ASCII_C, ASCII_D, ASCII_A,
|
||||||
|
ASCII_T, ASCII_A, ASCII_LSQB };
|
||||||
int i;
|
int i;
|
||||||
/* CDATA[ */
|
/* CDATA[ */
|
||||||
if (end - ptr < 6 * MINBPC(enc))
|
if (end - ptr < 6 * MINBPC(enc))
|
||||||
|
|
@ -298,9 +298,9 @@ int PREFIX(scanCdataSection)(const ENCODING *enc, const char *ptr, const char *e
|
||||||
return XML_TOK_CDATA_SECT_OPEN;
|
return XML_TOK_CDATA_SECT_OPEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
return XML_TOK_NONE;
|
return XML_TOK_NONE;
|
||||||
|
|
@ -376,9 +376,9 @@ int PREFIX(cdataSectionTok)(const ENCODING *enc, const char *ptr, const char *en
|
||||||
|
|
||||||
/* ptr points to character following "</" */
|
/* ptr points to character following "</" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
|
|
@ -407,7 +407,8 @@ int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
#ifdef XML_NS
|
#ifdef XML_NS
|
||||||
case BT_COLON:
|
case BT_COLON:
|
||||||
/* no need to check qname syntax here, since end-tag must match exactly */
|
/* no need to check qname syntax here,
|
||||||
|
since end-tag must match exactly */
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -424,9 +425,9 @@ int PREFIX(scanEndTag)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "&#X" */
|
/* ptr points to character following "&#X" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr != end) {
|
if (ptr != end) {
|
||||||
switch (BYTE_TYPE(enc, ptr)) {
|
switch (BYTE_TYPE(enc, ptr)) {
|
||||||
|
|
@ -456,9 +457,9 @@ int PREFIX(scanHexCharRef)(const ENCODING *enc, const char *ptr, const char *end
|
||||||
|
|
||||||
/* ptr points to character following "&#" */
|
/* ptr points to character following "&#" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr != end) {
|
if (ptr != end) {
|
||||||
if (CHAR_MATCHES(enc, ptr, ASCII_x))
|
if (CHAR_MATCHES(enc, ptr, ASCII_x))
|
||||||
|
|
@ -488,8 +489,8 @@ int PREFIX(scanCharRef)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "&" */
|
/* ptr points to character following "&" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -518,8 +519,8 @@ int PREFIX(scanRef)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following first character of attribute name */
|
/* ptr points to character following first character of attribute name */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
#ifdef XML_NS
|
#ifdef XML_NS
|
||||||
|
|
@ -574,7 +575,6 @@ int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
hadColon = 0;
|
hadColon = 0;
|
||||||
#endif
|
#endif
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
|
|
@ -678,8 +678,8 @@ int PREFIX(scanAtts)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "<" */
|
/* ptr points to character following "<" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
#ifdef XML_NS
|
#ifdef XML_NS
|
||||||
|
|
@ -696,7 +696,8 @@ int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
case BT_MINUS:
|
case BT_MINUS:
|
||||||
return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
|
return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
|
||||||
case BT_LSQB:
|
case BT_LSQB:
|
||||||
return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
|
return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc),
|
||||||
|
end, nextTokPtr);
|
||||||
}
|
}
|
||||||
*nextTokPtr = ptr;
|
*nextTokPtr = ptr;
|
||||||
return XML_TOK_INVALID;
|
return XML_TOK_INVALID;
|
||||||
|
|
@ -777,8 +778,8 @@ int PREFIX(scanLt)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -876,8 +877,8 @@ int PREFIX(contentTok)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
|
|
||||||
/* ptr points to character following "%" */
|
/* ptr points to character following "%" */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -905,8 +906,8 @@ int PREFIX(scanPercent)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -932,8 +933,8 @@ int PREFIX(scanPoundName)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return -XML_TOK_POUND_NAME;
|
return -XML_TOK_POUND_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(scanLit)(int open, const ENCODING *enc,
|
PREFIX(scanLit)(int open, const ENCODING *enc,
|
||||||
const char *ptr, const char *end,
|
const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
|
|
@ -964,8 +965,8 @@ int PREFIX(scanLit)(int open, const ENCODING *enc,
|
||||||
return XML_TOK_PARTIAL;
|
return XML_TOK_PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
int tok;
|
int tok;
|
||||||
|
|
@ -1008,8 +1009,11 @@ int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return XML_TOK_INVALID;
|
return XML_TOK_INVALID;
|
||||||
}
|
}
|
||||||
case BT_CR:
|
case BT_CR:
|
||||||
if (ptr + MINBPC(enc) == end)
|
if (ptr + MINBPC(enc) == end) {
|
||||||
|
*nextTokPtr = end;
|
||||||
|
/* indicate that this might be part of a CR/LF pair */
|
||||||
return -XML_TOK_PROLOG_S;
|
return -XML_TOK_PROLOG_S;
|
||||||
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case BT_S: case BT_LF:
|
case BT_S: case BT_LF:
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
@ -1192,9 +1196,9 @@ int PREFIX(prologTok)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return -tok;
|
return -tok;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
const char *start;
|
const char *start;
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -1250,9 +1254,9 @@ int PREFIX(attributeValueTok)(const ENCODING *enc, const char *ptr, const char *
|
||||||
return XML_TOK_DATA_CHARS;
|
return XML_TOK_DATA_CHARS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
const char *start;
|
const char *start;
|
||||||
if (ptr == end)
|
if (ptr == end)
|
||||||
|
|
@ -1307,9 +1311,9 @@ int PREFIX(entityValueTok)(const ENCODING *enc, const char *ptr, const char *end
|
||||||
|
|
||||||
#ifdef XML_DTD
|
#ifdef XML_DTD
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr,
|
||||||
const char **nextTokPtr)
|
const char *end, const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
int level = 0;
|
int level = 0;
|
||||||
if (MINBPC(enc) > 1) {
|
if (MINBPC(enc) > 1) {
|
||||||
|
|
@ -1360,8 +1364,8 @@ int PREFIX(ignoreSectionTok)(const ENCODING *enc, const char *ptr, const char *e
|
||||||
|
|
||||||
#endif /* XML_DTD */
|
#endif /* XML_DTD */
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
|
PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **badPtr)
|
const char **badPtr)
|
||||||
{
|
{
|
||||||
ptr += MINBPC(enc);
|
ptr += MINBPC(enc);
|
||||||
|
|
@ -1415,12 +1419,13 @@ int PREFIX(isPublicId)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This must only be called for a well-formed start-tag or empty element tag.
|
/* This must only be called for a well-formed start-tag or empty
|
||||||
Returns the number of attributes. Pointers to the first attsMax attributes
|
element tag. Returns the number of attributes. Pointers to the
|
||||||
are stored in atts. */
|
first attsMax attributes are stored in atts.
|
||||||
|
*/
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
|
PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
|
||||||
int attsMax, ATTRIBUTE *atts)
|
int attsMax, ATTRIBUTE *atts)
|
||||||
{
|
{
|
||||||
enum { other, inName, inValue } state = inName;
|
enum { other, inName, inValue } state = inName;
|
||||||
|
|
@ -1512,14 +1517,16 @@ int PREFIX(getAtts)(const ENCODING *enc, const char *ptr,
|
||||||
/* not reached */
|
/* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRFASTCALL
|
||||||
int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
|
PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
/* skip &# */
|
/* skip &# */
|
||||||
ptr += 2*MINBPC(enc);
|
ptr += 2*MINBPC(enc);
|
||||||
if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
|
if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
|
||||||
for (ptr += MINBPC(enc); !CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
|
for (ptr += MINBPC(enc);
|
||||||
|
!CHAR_MATCHES(enc, ptr, ASCII_SEMI);
|
||||||
|
ptr += MINBPC(enc)) {
|
||||||
int c = BYTE_TO_ASCII(enc, ptr);
|
int c = BYTE_TO_ASCII(enc, ptr);
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4:
|
case ASCII_0: case ASCII_1: case ASCII_2: case ASCII_3: case ASCII_4:
|
||||||
|
|
@ -1527,11 +1534,13 @@ int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
|
||||||
result <<= 4;
|
result <<= 4;
|
||||||
result |= (c - ASCII_0);
|
result |= (c - ASCII_0);
|
||||||
break;
|
break;
|
||||||
case ASCII_A: case ASCII_B: case ASCII_C: case ASCII_D: case ASCII_E: case ASCII_F:
|
case ASCII_A: case ASCII_B: case ASCII_C:
|
||||||
|
case ASCII_D: case ASCII_E: case ASCII_F:
|
||||||
result <<= 4;
|
result <<= 4;
|
||||||
result += 10 + (c - ASCII_A);
|
result += 10 + (c - ASCII_A);
|
||||||
break;
|
break;
|
||||||
case ASCII_a: case ASCII_b: case ASCII_c: case ASCII_d: case ASCII_e: case ASCII_f:
|
case ASCII_a: case ASCII_b: case ASCII_c:
|
||||||
|
case ASCII_d: case ASCII_e: case ASCII_f:
|
||||||
result <<= 4;
|
result <<= 4;
|
||||||
result += 10 + (c - ASCII_a);
|
result += 10 + (c - ASCII_a);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1552,8 +1561,9 @@ int PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr)
|
||||||
return checkCharRefNumber(result);
|
return checkCharRefNumber(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const char *end)
|
PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr,
|
||||||
|
const char *end)
|
||||||
{
|
{
|
||||||
switch ((end - ptr)/MINBPC(enc)) {
|
switch ((end - ptr)/MINBPC(enc)) {
|
||||||
case 2:
|
case 2:
|
||||||
|
|
@ -1605,8 +1615,8 @@ int PREFIX(predefinedEntityName)(const ENCODING *enc, const char *ptr, const cha
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
|
PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
|
||||||
{
|
{
|
||||||
for (;;) {
|
for (;;) {
|
||||||
switch (BYTE_TYPE(enc, ptr1)) {
|
switch (BYTE_TYPE(enc, ptr1)) {
|
||||||
|
|
@ -1669,8 +1679,8 @@ int PREFIX(sameName)(const ENCODING *enc, const char *ptr1, const char *ptr2)
|
||||||
/* not reached */
|
/* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
|
PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
|
||||||
const char *end1, const char *ptr2)
|
const char *end1, const char *ptr2)
|
||||||
{
|
{
|
||||||
for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
|
for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
|
||||||
|
|
@ -1682,8 +1692,8 @@ int PREFIX(nameMatchesAscii)(const ENCODING *enc, const char *ptr1,
|
||||||
return ptr1 == end1;
|
return ptr1 == end1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRFASTCALL
|
||||||
int PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
|
PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
|
||||||
{
|
{
|
||||||
const char *start = ptr;
|
const char *start = ptr;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
@ -1709,8 +1719,8 @@ int PREFIX(nameLength)(const ENCODING *enc, const char *ptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static const char * PTRFASTCALL
|
||||||
const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr)
|
PREFIX(skipS)(const ENCODING *enc, const char *ptr)
|
||||||
{
|
{
|
||||||
for (;;) {
|
for (;;) {
|
||||||
switch (BYTE_TYPE(enc, ptr)) {
|
switch (BYTE_TYPE(enc, ptr)) {
|
||||||
|
|
@ -1725,8 +1735,8 @@ const char *PREFIX(skipS)(const ENCODING *enc, const char *ptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static void PTRCALL
|
||||||
void PREFIX(updatePosition)(const ENCODING *enc,
|
PREFIX(updatePosition)(const ENCODING *enc,
|
||||||
const char *ptr,
|
const char *ptr,
|
||||||
const char *end,
|
const char *end,
|
||||||
POSITION *pos)
|
POSITION *pos)
|
||||||
|
|
@ -1766,3 +1776,4 @@ void PREFIX(updatePosition)(const ENCODING *enc,
|
||||||
#undef CHECK_NAME_CASES
|
#undef CHECK_NAME_CASES
|
||||||
#undef CHECK_NMSTRT_CASE
|
#undef CHECK_NMSTRT_CASE
|
||||||
#undef CHECK_NMSTRT_CASES
|
#undef CHECK_NMSTRT_CASES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,25 @@
|
||||||
const ENCODING *NS(XmlGetUtf8InternalEncoding)(void)
|
const ENCODING *
|
||||||
|
NS(XmlGetUtf8InternalEncoding)(void)
|
||||||
{
|
{
|
||||||
return &ns(internal_utf8_encoding).enc;
|
return &ns(internal_utf8_encoding).enc;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ENCODING *NS(XmlGetUtf16InternalEncoding)(void)
|
const ENCODING *
|
||||||
|
NS(XmlGetUtf16InternalEncoding)(void)
|
||||||
{
|
{
|
||||||
#if XML_BYTE_ORDER == 12
|
#if BYTEORDER == 1234
|
||||||
return &ns(internal_little2_encoding).enc;
|
return &ns(internal_little2_encoding).enc;
|
||||||
#elif XML_BYTE_ORDER == 21
|
#elif BYTEORDER == 4321
|
||||||
return &ns(internal_big2_encoding).enc;
|
return &ns(internal_big2_encoding).enc;
|
||||||
#else
|
#else
|
||||||
const short n = 1;
|
const short n = 1;
|
||||||
return *(const char *)&n ? &ns(internal_little2_encoding).enc : &ns(internal_big2_encoding).enc;
|
return (*(const char *)&n
|
||||||
|
? &ns(internal_little2_encoding).enc
|
||||||
|
: &ns(internal_big2_encoding).enc);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static const ENCODING *NS(encodings)[] = {
|
||||||
const ENCODING *NS(encodings)[] = {
|
|
||||||
&ns(latin1_encoding).enc,
|
&ns(latin1_encoding).enc,
|
||||||
&ns(ascii_encoding).enc,
|
&ns(ascii_encoding).enc,
|
||||||
&ns(utf8_encoding).enc,
|
&ns(utf8_encoding).enc,
|
||||||
|
|
@ -26,21 +29,25 @@ const ENCODING *NS(encodings)[] = {
|
||||||
&ns(utf8_encoding).enc /* NO_ENC */
|
&ns(utf8_encoding).enc /* NO_ENC */
|
||||||
};
|
};
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
|
NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE, ptr, end, nextTokPtr);
|
return initScan(NS(encodings), (const INIT_ENCODING *)enc,
|
||||||
|
XML_PROLOG_STATE, ptr, end, nextTokPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static int PTRCALL
|
||||||
int NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
|
NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
|
||||||
const char **nextTokPtr)
|
const char **nextTokPtr)
|
||||||
{
|
{
|
||||||
return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE, ptr, end, nextTokPtr);
|
return initScan(NS(encodings), (const INIT_ENCODING *)enc,
|
||||||
|
XML_CONTENT_STATE, ptr, end, nextTokPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *name)
|
int
|
||||||
|
NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
|
||||||
|
const char *name)
|
||||||
{
|
{
|
||||||
int i = getEncodingIndex(name);
|
int i = getEncodingIndex(name);
|
||||||
if (i == UNKNOWN_ENC)
|
if (i == UNKNOWN_ENC)
|
||||||
|
|
@ -54,8 +61,8 @@ int NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, const char *n
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static const ENCODING *
|
||||||
const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
|
NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
|
||||||
{
|
{
|
||||||
#define ENCODING_MAX 128
|
#define ENCODING_MAX 128
|
||||||
char buf[ENCODING_MAX];
|
char buf[ENCODING_MAX];
|
||||||
|
|
@ -73,7 +80,8 @@ const ENCODING *NS(findEncoding)(const ENCODING *enc, const char *ptr, const cha
|
||||||
return NS(encodings)[i];
|
return NS(encodings)[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
int NS(XmlParseXmlDecl)(int isGeneralTextEntity,
|
int
|
||||||
|
NS(XmlParseXmlDecl)(int isGeneralTextEntity,
|
||||||
const ENCODING *enc,
|
const ENCODING *enc,
|
||||||
const char *ptr,
|
const char *ptr,
|
||||||
const char *end,
|
const char *end,
|
||||||
|
|
|
||||||
7
setup.py
7
setup.py
|
|
@ -690,9 +690,9 @@ class PyBuildExt(build_ext):
|
||||||
# More information on Expat can be found at www.libexpat.org.
|
# More information on Expat can be found at www.libexpat.org.
|
||||||
#
|
#
|
||||||
if sys.byteorder == "little":
|
if sys.byteorder == "little":
|
||||||
xmlbo = "12"
|
xmlbo = "1234"
|
||||||
else:
|
else:
|
||||||
xmlbo = "21"
|
xmlbo = "4321"
|
||||||
expatinc = os.path.join(os.getcwd(), srcdir, 'Modules', 'expat')
|
expatinc = os.path.join(os.getcwd(), srcdir, 'Modules', 'expat')
|
||||||
exts.append(Extension('pyexpat',
|
exts.append(Extension('pyexpat',
|
||||||
sources = [
|
sources = [
|
||||||
|
|
@ -702,10 +702,9 @@ class PyBuildExt(build_ext):
|
||||||
'expat/xmltok.c',
|
'expat/xmltok.c',
|
||||||
],
|
],
|
||||||
define_macros = [
|
define_macros = [
|
||||||
('HAVE_EXPAT_H',None),
|
|
||||||
('XML_NS', '1'),
|
('XML_NS', '1'),
|
||||||
('XML_DTD', '1'),
|
('XML_DTD', '1'),
|
||||||
('XML_BYTE_ORDER', xmlbo),
|
('BYTEORDER', xmlbo),
|
||||||
('XML_CONTEXT_BYTES','1024'),
|
('XML_CONTEXT_BYTES','1024'),
|
||||||
],
|
],
|
||||||
include_dirs = [expatinc]
|
include_dirs = [expatinc]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue