Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
d774be46
Commit
d774be46
authored
Aug 18, 1998
by
jack
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial revision
parent
d2449399
Changes
21
Show whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
7558 additions
and
0 deletions
+7558
-0
lib/python/Shared/DC/xml/pyexpat/expat/MPL-1_0.html
lib/python/Shared/DC/xml/pyexpat/expat/MPL-1_0.html
+420
-0
lib/python/Shared/DC/xml/pyexpat/expat/Makefile
lib/python/Shared/DC/xml/pyexpat/expat/Makefile
+34
-0
lib/python/Shared/DC/xml/pyexpat/expat/expat.html
lib/python/Shared/DC/xml/pyexpat/expat/expat.html
+42
-0
lib/python/Shared/DC/xml/pyexpat/expat/expat.mak
lib/python/Shared/DC/xml/pyexpat/expat/expat.mak
+954
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.c
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.c
+127
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.h
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.h
+45
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.c
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.c
+1611
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.h
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.h
+131
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/asciitab.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/asciitab.h
+52
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/dllmain.c
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/dllmain.c
+27
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/iasciitab.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/iasciitab.h
+53
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/latin1tab.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/latin1tab.h
+52
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/nametab.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/nametab.h
+150
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/utf8tab.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/utf8tab.h
+53
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmldef.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmldef.h
+32
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.c
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.c
+1095
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.h
+100
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.c
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.c
+759
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.h
+252
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.c
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.c
+1509
-0
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.h
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.h
+60
-0
No files found.
lib/python/Shared/DC/xml/pyexpat/expat/MPL-1_0.html
0 → 100644
View file @
d774be46
<TITLE>
Mozilla Public License version 1.0
</TITLE>
<BODY
BGCOLOR=
"#FFFFFF"
TEXT=
"#000000"
LINK=
"#0000EE"
VLINK=
"#551A8B"
ALINK=
"#FF0000"
>
<P
ALIGN=
CENTER
>
<FONT
SIZE=
"+2"
><B>
MOZILLA PUBLIC LICENSE
</B></FONT><BR>
<B>
Version 1.0
</B>
</P>
<P><HR
WIDTH=
"20%"
><P>
<P><B>
1. Definitions.
</B>
<UL>
<B>
1.1. ``Contributor''
</B>
means each entity that creates or contributes
to the creation of Modifications.
<P><B>
1.2. ``Contributor Version''
</B>
means the combination of the
Original Code, prior Modifications used by a Contributor, and the
Modifications made by that particular Contributor.
<P><B>
1.3. ``Covered Code''
</B>
means the Original Code or Modifications
or the combination of the Original Code and Modifications, in each case
including portions thereof
<B>
.
</B>
<P><B>
1.4. ``Electronic Distribution Mechanism''
</B>
means a mechanism
generally accepted in the software development community for the
electronic transfer of data.
<P><B>
1.5. ``Executable''
</B>
means Covered Code in any form other than
Source Code.
<P><B>
1.6. ``Initial Developer''
</B>
means the individual or entity
identified as the Initial Developer in the Source Code notice required by
<B>
Exhibit A
</B>
.
<P><B>
1.7. ``Larger Work''
</B>
means a work which combines Covered Code
or portions thereof with code not governed by the terms of this License.
<P><B>
1.8. ``License''
</B>
means this document.
<P><B>
1.9. ``Modifications''
</B>
means any addition to or deletion from
the substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:
<UL>
<P><B>
A.
</B>
Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications.
<P><B>
B.
</B>
Any new file that contains any part of the Original
Code or previous Modifications.
</UL>
<P><B>
1.10. ``Original Code''
</B>
means Source Code of computer software
code which is described in the Source Code notice required by
<B>
Exhibit
A
</B>
as Original Code, and which, at the time of its release under this
License is not already Covered Code governed by this License.
<P><B>
1.11. ``Source Code''
</B>
means the preferred form of the Covered
Code for making modifications to it, including all modules it contains,
plus any associated interface definition files, scripts used to control
compilation and installation of an Executable, or a list of source code
differential comparisons against either the Original Code or another well
known, available Covered Code of the Contributor's choice. The Source
Code can be in a compressed or archival form, provided the appropriate
decompression or de-archiving software is widely available for no charge.
<P><B>
1.12. ``You''
</B>
means an individual or a legal entity exercising
rights under, and complying with all of the terms of, this License or a
future version of this License issued under Section 6.1. For legal
entities, ``You'' includes any entity which controls, is controlled by,
or is under common control with You. For purposes of this definition,
``control'' means (a) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or otherwise,
or (b) ownership of fifty percent (50%) or more of the outstanding shares
or beneficial ownership of such entity.
</UL>
<B>
2. Source Code License.
</B>
<UL>
<B>
2.1. The Initial Developer Grant.
</B>
<BR>
The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
<UL>
<P><B>
(a)
</B>
to use, reproduce, modify, display, perform, sublicense
and distribute the Original Code (or portions thereof) with or
without Modifications, or as part of a Larger Work; and
<P><B>
(b)
</B>
under patents now or hereafter owned or controlled by
Initial Developer, to make, have made, use and sell (``Utilize'') the
Original Code (or portions thereof), but solely to the extent that
any such patent is reasonably necessary to enable You to Utilize the
Original Code (or portions thereof) and not to any greater extent
that may be necessary to Utilize further Modifications or
combinations.
</UL>
<P><B>
2.2. Contributor Grant.
</B>
<BR>
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
<UL>
<P><B>
(a)
</B>
to use, reproduce, modify, display, perform, sublicense and
distribute the Modifications created by such Contributor (or portions
thereof) either on an unmodified basis, with other Modifications, as
Covered Code or as part of a Larger Work; and
<P><B>
(b)
</B>
under patents now or hereafter owned or controlled by
Contributor, to Utilize the Contributor Version (or portions thereof),
but solely to the extent that any such patent is reasonably necessary to
enable You to Utilize the Contributor Version (or portions thereof), and
not to any greater extent that may be necessary to Utilize further
Modifications or combinations.
</UL>
</UL>
<B>
3. Distribution Obligations.
</B>
<UL>
<B>
3.1. Application of License.
</B>
<BR>
The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section
<B>
2.2
</B>
. The Source Code version of Covered Code may be
distributed only under the terms of this License or a future version of
this License released under Section
<B>
6.1
</B>
, and You must include a
copy of this License with every copy of the Source Code You
distribute. You may not offer or impose any terms on any Source Code
version that alters or restricts the applicable version of this License
or the recipients' rights hereunder. However, You may include an
additional document offering the additional rights described in Section
<B>
3.5
</B>
.
<P><B>
3.2. Availability of Source Code.
</B>
<BR>
Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License either
on the same media as an Executable version or via an accepted Electronic
Distribution Mechanism to anyone to whom you made an Executable version
available; and if made available via Electronic Distribution Mechanism,
must remain available for at least twelve (12) months after the date it
initially became available, or at least six (6) months after a subsequent
version of that particular Modification has been made available to such
recipients. You are responsible for ensuring that the Source Code version
remains available even if the Electronic Distribution Mechanism is
maintained by a third party.
<P><B>
3.3. Description of Modifications.
</B>
<BR>
You must cause all Covered Code to which you contribute to contain a
file documenting the changes You made to create that Covered Code and the
date of any change. You must include a prominent statement that the
Modification is derived, directly or indirectly, from Original Code
provided by the Initial Developer and including the name of the Initial
Developer in (a) the Source Code, and (b) in any notice in an Executable
version or related documentation in which You describe the origin or
ownership of the Covered Code.
<P><B>
3.4. Intellectual Property Matters
</B>
<UL>
<P><B>
(a) Third Party Claims
</B>
.
<BR>
If You have knowledge that a party claims an intellectual
property right in particular functionality or code (or its
utilization under this License), you must include a text file with
the source code distribution titled ``LEGAL'' which describes the
claim and the party making the claim in sufficient detail that a
recipient will know whom to contact. If you obtain such knowledge
after You make Your Modification available as described in Section
<B>
3.2
</B>
, You shall promptly modify the LEGAL file in all copies
You make available thereafter and shall take other steps (such as
notifying appropriate mailing lists or newsgroups) reasonably
calculated to inform those who received the Covered Code that new
knowledge has been obtained.
<P><B>
(b) Contributor APIs
</B>
.
<BR>
If Your Modification is an application programming interface and
You own or control patents which are reasonably necessary to
implement that API, you must also include this information in the
LEGAL file.
</UL>
<P><B>
3.5. Required Notices.
</B>
<BR>
You must duplicate the notice in
<B>
Exhibit A
</B>
in each file of the
Source Code, and this License in any documentation for the Source Code,
where You describe recipients' rights relating to Covered Code. If You
created one or more Modification(s), You may add your name as a
Contributor to the notice described in
<B>
Exhibit A
</B>
. If it is not
possible to put such notice in a particular Source Code file due to its
structure, then you must include such notice in a location (such as a
relevant directory file) where a user would be likely to look for such a
notice. You may choose to offer, and to charge a fee for, warranty,
support, indemnity or liability obligations to one or more recipients of
Covered Code. However, You may do so only on Your own behalf, and not on
behalf of the Initial Developer or any Contributor. You must make it
absolutely clear than any such warranty, support, indemnity or liability
obligation is offered by You alone, and You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of warranty, support,
indemnity or liability terms You offer.
<P><B>
3.6. Distribution of Executable Versions.
</B>
<BR>
You may distribute Covered Code in Executable form only if the
requirements of Section
<B>
3.1-3.5
</B>
have been met for that Covered
Code, and if You include a notice stating that the Source Code version of
the Covered Code is available under the terms of this License, including
a description of how and where You have fulfilled the obligations of
Section
<B>
3.2
</B>
. The notice must be conspicuously included in any
notice in an Executable version, related documentation or collateral in
which You describe recipients' rights relating to the Covered Code. You
may distribute the Executable version of Covered Code under a license of
Your choice, which may contain terms different from this License,
provided that You are in compliance with the terms of this License and
that the license for the Executable version does not attempt to limit or
alter the recipient's rights in the Source Code version from the rights
set forth in this License. If You distribute the Executable version under
a different license You must make it absolutely clear that any terms
which differ from this License are offered by You alone, not by the
Initial Developer or any Contributor. You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of any such terms You
offer.
<P><B>
3.7. Larger Works.
</B>
<BR>
You may create a Larger Work by combining Covered Code with other
code not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the
requirements of this License are fulfilled for the Covered Code.
</UL>
<B>
4. Inability to Comply Due to Statute or Regulation.
</B>
<UL>
<P>
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to statute or
regulation then You must: (a) comply with the terms of this License to
the maximum extent possible; and (b) describe the limitations and the
code they affect. Such description must be included in the LEGAL file
described in Section
<B>
3.4
</B>
and must be included with all
distributions of the Source Code. Except to the extent prohibited by
statute or regulation, such description must be sufficiently detailed for
a recipient of ordinary skill
to be able to understand it.
</UL>
<B>
5. Application of this License.
</B>
<UL>
This License applies to code to which the Initial Developer has attached
the notice in
<B>
Exhibit A
</B>
, and to related Covered Code.
</UL>
<B>
6. Versions of the License.
</B>
<UL>
<B>
6.1. New Versions
</B>
.
<BR>
Netscape Communications Corporation (``Netscape'') may publish
revised and/or new versions of the License from time to time. Each
version will be given a distinguishing version number.
<P><B>
6.2. Effect of New Versions
</B>
.
<BR>
Once Covered Code has been published under a particular version of
the License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms of
any subsequent version of the License published by Netscape. No one other
than Netscape has the right to modify the terms applicable to Covered
Code created under this License.
<P><B>
6.3. Derivative Works
</B>
.
<BR>
If you create or use a modified version of this License (which you
may only do in order to apply it to code which is not already Covered
Code governed by this License), you must (a) rename Your license so that
the phrases ``Mozilla'', ``MOZILLAPL'', ``MOZPL'', ``Netscape'', ``NPL''
or any confusingly similar phrase do not appear anywhere in your license
and (b) otherwise make it clear that your version of the license contains
terms which differ from the Mozilla Public License and Netscape Public
License. (Filling in the name of the Initial Developer, Original Code or
Contributor in the notice described in
<B>
Exhibit A
</B>
shall not of
themselves be deemed to be modifications of this License.)
</UL>
<B>
7. DISCLAIMER OF WARRANTY.
</B>
<UL>
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN ``AS IS'' BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS,
MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH
YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE
IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
</UL>
<B>
8. TERMINATION.
</B>
<UL>
This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall survive
any termination of this License. Provisions which, by their nature, must
remain in effect beyond the termination of this License shall survive.
</UL>
<B>
9. LIMITATION OF LIABILITY.
</B>
<UL>
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING
NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE INITIAL DEVELOPER, ANY
OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF
ANY OF SUCH PARTIES, BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK
STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED
OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL
NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH
PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION
OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THAT EXCLUSION AND LIMITATION
MAY NOT APPLY TO YOU.
</UL>
<B>
10. U.S. GOVERNMENT END USERS.
</B>
<UL>
The Covered Code is a ``commercial item,'' as that term is defined in 48
C.F.R. 2.101 (Oct. 1995), consisting of ``commercial computer software''
and ``commercial computer software documentation,'' as such terms are
used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212
and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all
U.S. Government End Users acquire Covered Code with only those rights set
forth herein.
</UL>
<B>
11. MISCELLANEOUS.
</B>
<UL>
This License represents the complete agreement concerning subject matter
hereof. If any provision of this License is held to be unenforceable,
such provision shall be reformed only to the extent necessary to make it
enforceable. This License shall be governed by California law provisions
(except to the extent applicable law, if any, provides otherwise),
excluding its conflict-of-law provisions. With respect to disputes in
which at least one party is a citizen of, or an entity chartered or
registered to do business in, the United States of America: (a) unless
otherwise agreed in writing, all disputes relating to this License
(excepting any dispute relating to intellectual property rights) shall be
subject to final and binding arbitration, with the losing party paying
all costs of arbitration; (b) any arbitration relating to this Agreement
shall be held in Santa Clara County, California, under the auspices of
JAMS/EndDispute; and (c) any litigation relating to this Agreement shall
be subject to the jurisdiction of the Federal Courts of the Northern
District of California, with venue lying in Santa Clara County,
California, with the losing party responsible for costs, including
without limitation, court costs and reasonable attorneys fees and
expenses. The application of the United Nations Convention on Contracts
for the International Sale of Goods is expressly excluded. Any law or
regulation which provides that the language of a contract shall be
construed against the drafter shall not apply to this License.
</UL>
<B>
12. RESPONSIBILITY FOR CLAIMS.
</B>
<UL>
Except in cases where another Contributor has failed to comply with
Section
<B>
3.4
</B>
, You are responsible for damages arising, directly or
indirectly, out of Your utilization of rights under this License, based
on the number of copies of Covered Code you made available, the revenues
you received from utilizing such rights, and other relevant factors. You
agree to work with affected parties to distribute responsibility on an
equitable basis.
</UL>
<B>
EXHIBIT A.
</B>
<UL>
``The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
<P>
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations under
the License.
<P>
The Original Code is ______________________________________.
<P>
The Initial Developer of the Original Code is
________________________. Portions created by ______________________ are
Copyright (C) ______ _______________________. All Rights Reserved.
<P>
Contributor(s): ______________________________________.''
</UL>
lib/python/Shared/DC/xml/pyexpat/expat/Makefile
0 → 100644
View file @
d774be46
CC
=
cc
CFLAGS
=
-O2
-Ixmltok
-Ixmlparse
# Use one of the next two lines; unixfilemap is better if it works.
FILEMAP_OBJ
=
xmlwf/unixfilemap.o
#FILEMAP_OBJ=xmlwf/readfilemap.o
OBJS
=
xmltok/xmltok.o
\
xmltok/xmlrole.o
\
xmlwf/xmlwf.o
\
xmlparse/xmlparse.o
\
xmlparse/hashtable.o
\
$(FILEMAP_OBJ)
EXE
=
all
:
xmlwf/xmlwf$(EXE)
libexpat.a
:
$(OBJS)
ar cr libexpat.a
$(OBJS)
xmlwf/xmlwf$(EXE)
:
$(OBJS)
$(CC)
$(CFLAGS)
-o
$@
$(OBJS)
clean
:
rm
-f
$(OBJS)
xmlwf/xmlwf
$(EXE)
xmltok/nametab.h
:
gennmtab/gennmtab$(EXE)
rm
-f
$@
gennmtab/gennmtab
$(EXE)
>
$@
gennmtab/gennmtab$(EXE)
:
gennmtab/gennmtab.c
$(CC)
$(CFLAGS)
-o
$@
gennmtab/gennmtab.c
xmltok/xmltok.o
:
xmltok/nametab.h
.c.o
:
$(CC)
$(CFLAGS)
-c
-o
$@
$<
lib/python/Shared/DC/xml/pyexpat/expat/expat.html
0 → 100644
View file @
d774be46
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<TITLE>
expat
</TITLE>
<BODY>
<H1>
expat - XML Parser Toolkit
</H1>
<H3>
Version 19980405
</H3>
<P>
Copyright (c) 1998 James Clark. Expat is subject to the
<A
HREF=
"MPL-1_0.html"
>
Mozilla Public License Version 1.0
</A>
. You may
not use expat except in compliance with this license. Please contact
me if you wish to negotiate an alternative license.
</P><P>
Expat is an
<A
HREF=
"http://www.w3.org/TR/1998/REC-xml-19980210"
>
XML
1.0
</A>
parser written in C. It aims to be fully conforming. It is
currently not a validating XML processor.
Expat can be downloaded from
<A
href =
"ftp://ftp.jclark.com/pub/xml/expat.zip"
>
ftp://ftp.jclark.com/pub/xml/expat.zip
</A>
.
This is a beta-test version.
</P>
<P>
The directory
<SAMP>
xmltok
</SAMP>
contains a low-level library for
tokenizing XML. The interface is documented in
<SAMP>
xmltok/xmltok.h
</SAMP>
.
</P>
<P>
The directory
<SAMP>
xmlparse
</SAMP>
contains an XML parser library
which is built on top of the
<SAMP>
xmltok
</SAMP>
library. The
interface is documented in
<SAMP>
xmlparse/xmlparse.h
</SAMP>
.
</P>
<P>
The directory
<SAMP>
xmlwf
</SAMP>
contains the
<SAMP>
xmlwf
</SAMP>
application, which uses the
<SAMP>
xmlparse
</SAMP>
library. The
arguments to
<SAMP>
xmlwf
</SAMP>
are one or more files which are each
to be checked for well-formedness. An option
<SAMP>
-d
<VAR>
dir
</VAR></SAMP>
can be specified; for each well-formed input
file the corresponding
<A
href=
"http://www.jclark.com/xml/canonxml.html"
>
canonical XML
</A>
will
be written to
<SAMP>
dir/
<VAR>
f
</VAR></SAMP>
, where
<SAMP><VAR>
f
</VAR></SAMP>
is the filename (without any path) of the
input file.
</P>
<P></P>
<ADDRESS>
<A
HREF=
"mailto:jjc@jclark.com"
>
James Clark
</A>
</ADDRESS>
</BODY>
</HTML>
lib/python/Shared/DC/xml/pyexpat/expat/expat.mak
0 → 100644
View file @
d774be46
# Microsoft Developer Studio Generated NMAKE File, Format Version 4.20
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
!IF
"$(CFG)"
==
""
CFG
=
xmltok - Win32 Debug
!MESSAGE
No
configuration
specified.
Defaulting
to
xmltok
-
Win32
Debug.
!ENDIF
!IF
"$(CFG)"
!=
"xmlwf - Win32 Release"
&&
"$(CFG)"
!=
"xmlwf - Win32 Debug"
&&\
"$(CFG)"
!=
"gennmtab - Win32 Release"
&&
"$(CFG)"
!=
"gennmtab - Win32 Debug"
\
&&
"$(CFG)"
!=
"xmlparse - Win32 Release"
&&
"$(CFG)"
!=\
"xmlparse - Win32 Debug"
&&
"$(CFG)"
!=
"xmltok - Win32 Release"
&&
"$(CFG)"
!=\
"xmltok - Win32 Debug"
!MESSAGE
Invalid
configuration
"$(CFG)"
specified.
!MESSAGE
You
can
specify
a
configuration
when
running
NMAKE
on
this
makefile
!MESSAGE by defining the macro CFG on the command line. For example
:
!MESSAGE
!MESSAGE
NMAKE
/f
"expat.mak"
CFG
=
"xmltok - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are
:
!MESSAGE
!MESSAGE
"xmlwf - Win32 Release"
(based
on
"Win32 (x86) Console Application"
)
!MESSAGE
"xmlwf - Win32 Debug"
(based
on
"Win32 (x86) Console Application"
)
!MESSAGE
"gennmtab - Win32 Release"
(based
on\
"Win32 (x86) Console Application"
)
!MESSAGE
"gennmtab - Win32 Debug"
(based
on
"Win32 (x86) Console Application"
)
!MESSAGE
"xmlparse - Win32 Release"
(based
on\
"Win32 (x86) Dynamic-Link Library"
)
!MESSAGE
"xmlparse - Win32 Debug"
(based
on
"Win32 (x86) Dynamic-Link Library"
)
!MESSAGE
"xmltok - Win32 Release"
(based
on
"Win32 (x86) Dynamic-Link Library"
)
!MESSAGE
"xmltok - Win32 Debug"
(based
on
"Win32 (x86) Dynamic-Link Library"
)
!MESSAGE
!ERROR
An
invalid
configuration
is
specified.
!ENDIF
!IF
"$(OS)"
==
"Windows_NT"
NULL
=
!ELSE
NULL
=
nul
!ENDIF
################################################################################
# Begin Project
# PROP Target_Last_Scanned "xmltok - Win32 Debug"
!IF
"$(CFG)"
==
"xmlwf - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "xmlwf\Release"
# PROP BASE Intermediate_Dir "xmlwf\Release"
# PROP BASE Target_Dir "xmlwf"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "xmlwf\Release"
# PROP Intermediate_Dir "xmlwf\Release"
# PROP Target_Dir "xmlwf"
OUTDIR
=
.
\x
mlwf
\R
elease
INTDIR
=
.
\x
mlwf
\R
elease
ALL
:
"xmlparse - Win32 Release" ".
\b
in
\x
mlwf.exe"
CLEAN
:
-
@erase
"
$(INTDIR)
\w
in32filemap.obj"
-
@erase
"
$(INTDIR)
\x
mlwf.obj"
-
@erase
".
\b
in
\x
mlwf.exe"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /W3 /GX /O2 /I "." /I "xmlparse" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /c
CPP_PROJ
=
/nologo /ML /W3 /GX /O2 /I
"."
/I
"xmlparse"
/D
"NDEBUG"
/D
"WIN32"
/D
\
"_CONSOLE"
/D
XMLTOKAPI
=
__declspec
(
dllimport
)
/D
\
XMLPARSEAPI
=
__declspec
(
dllimport
)
/Fp
"
$(INTDIR)
/xmlwf.pch"
/YX /Fo
"
$(INTDIR)
/"
\
/c
CPP_OBJS
=
.
\x
mlwf
\R
elease/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmlwf.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"bin/xmlwf.exe"
LINK32_FLAGS
=
setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib
\
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib\
odbc32.lib odbccp32.lib /nologo /subsystem
:
console /incremental:no
\
/pdb
:
"$(OUTDIR)/xmlwf.pdb" /machine:I386 /out:"bin/xmlwf.exe"
LINK32_OBJS
=
\
"$(INTDIR)\win32filemap.obj"
\
"$(INTDIR)\xmlwf.obj"
\
".\xmlparse\Release\xmlparse.lib"
".\bin\xmlwf.exe"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"xmlwf - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "xmlwf\Debug"
# PROP BASE Intermediate_Dir "xmlwf\Debug"
# PROP BASE Target_Dir "xmlwf"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "xmlwf\Debug"
# PROP Intermediate_Dir "xmlwf\Debug"
# PROP Target_Dir "xmlwf"
OUTDIR
=
.
\x
mlwf
\D
ebug
INTDIR
=
.
\x
mlwf
\D
ebug
ALL
:
"xmlparse - Win32 Debug" ".
\d
bgbin
\x
mlwf.exe"
CLEAN
:
-
@erase
"
$(INTDIR)
\v
c40.idb"
-
@erase
"
$(INTDIR)
\v
c40.pdb"
-
@erase
"
$(INTDIR)
\w
in32filemap.obj"
-
@erase
"
$(INTDIR)
\x
mlwf.obj"
-
@erase
"
$(OUTDIR)
\x
mlwf.pdb"
-
@erase
".
\d
bgbin
\x
mlwf.exe"
-
@erase
".
\d
bgbin
\x
mlwf.ilk"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "." /I "xmlparse" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllimport) /YX /c
CPP_PROJ
=
/nologo /MDd /W3 /Gm /GX /Zi /Od /I
"."
/I
"xmlparse"
/D
"_DEBUG"
/D
\
"WIN32"
/D
"_CONSOLE"
/D
XMLTOKAPI
=
__declspec
(
dllimport
)
/D
\
XMLPARSEAPI
=
__declspec
(
dllimport
)
/Fp
"
$(INTDIR)
/xmlwf.pch"
/YX /Fo
"
$(INTDIR)
/"
\
/Fd
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\x
mlwf
\D
ebug/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmlwf.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
# ADD LINK32 setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"dbgbin/xmlwf.exe"
LINK32_FLAGS
=
setargv.obj kernel32.lib user32.lib gdi32.lib winspool.lib
\
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib\
odbc32.lib odbccp32.lib /nologo /subsystem
:
console /incremental:yes
\
/pdb
:
"$(OUTDIR)/xmlwf.pdb" /debug /machine:I386 /out:"dbgbin/xmlwf.exe"
LINK32_OBJS
=
\
"$(INTDIR)\win32filemap.obj"
\
"$(INTDIR)\xmlwf.obj"
\
".\xmlparse\Debug\xmlparse.lib"
".\dbgbin\xmlwf.exe"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"gennmtab - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "gennmtab\Release"
# PROP BASE Intermediate_Dir "gennmtab\Release"
# PROP BASE Target_Dir "gennmtab"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "gennmtab\Release"
# PROP Intermediate_Dir "gennmtab\Release"
# PROP Target_Dir "gennmtab"
OUTDIR
=
.
\g
ennmtab
\R
elease
INTDIR
=
.
\g
ennmtab
\R
elease
ALL
:
"$(OUTDIR)
\g
ennmtab.exe"
CLEAN
:
-
@erase
"
$(INTDIR)
\g
ennmtab.obj"
-
@erase
"
$(OUTDIR)
\g
ennmtab.exe"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
CPP_PROJ
=
/nologo /ML /W3 /GX /O2 /D
"WIN32"
/D
"NDEBUG"
/D
"_CONSOLE"
\
/Fp
"$(INTDIR)/gennmtab.pch"
/YX
/Fo
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\g
ennmtab
\R
elease/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/gennmtab.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /subsystem
:
console /incremental:no
\
/pdb
:
"$(OUTDIR)/gennmtab.pdb" /machine:I386 /out:"$(OUTDIR)/gennmtab.exe"
LINK32_OBJS
=
\
"$(INTDIR)\gennmtab.obj"
"$(OUTDIR)\gennmtab.exe"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"gennmtab - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "gennmtab\Debug"
# PROP BASE Intermediate_Dir "gennmtab\Debug"
# PROP BASE Target_Dir "gennmtab"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "gennmtab\Debug"
# PROP Intermediate_Dir "gennmtab\Debug"
# PROP Target_Dir "gennmtab"
OUTDIR
=
.
\g
ennmtab
\D
ebug
INTDIR
=
.
\g
ennmtab
\D
ebug
ALL
:
"$(OUTDIR)
\g
ennmtab.exe"
CLEAN
:
-
@erase
"
$(INTDIR)
\g
ennmtab.obj"
-
@erase
"
$(INTDIR)
\v
c40.idb"
-
@erase
"
$(INTDIR)
\v
c40.pdb"
-
@erase
"
$(OUTDIR)
\g
ennmtab.exe"
-
@erase
"
$(OUTDIR)
\g
ennmtab.ilk"
-
@erase
"
$(OUTDIR)
\g
ennmtab.pdb"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
CPP_PROJ
=
/nologo /MLd /W3 /Gm /GX /Zi /Od /D
"WIN32"
/D
"_DEBUG"
/D
"_CONSOLE"
\
/Fp
"$(INTDIR)/gennmtab.pch"
/YX
/Fo
"$(INTDIR)/"
/Fd
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\g
ennmtab
\D
ebug/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/gennmtab.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /subsystem
:
console /incremental:yes
\
/pdb
:
"$(OUTDIR)/gennmtab.pdb" /debug /machine:I386
\
/out
:
"$(OUTDIR)/gennmtab.exe"
LINK32_OBJS
=
\
"$(INTDIR)\gennmtab.obj"
"$(OUTDIR)\gennmtab.exe"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"xmlparse - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "xmlparse\Release"
# PROP BASE Intermediate_Dir "xmlparse\Release"
# PROP BASE Target_Dir "xmlparse"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "xmlparse\Release"
# PROP Intermediate_Dir "xmlparse\Release"
# PROP Target_Dir "xmlparse"
OUTDIR
=
.
\x
mlparse
\R
elease
INTDIR
=
.
\x
mlparse
\R
elease
ALL
:
"xmltok - Win32 Release" ".
\b
in
\x
mlparse.dll"
CLEAN
:
-
@erase
"
$(INTDIR)
\h
ashtable.obj"
-
@erase
"
$(INTDIR)
\x
mlparse.obj"
-
@erase
"
$(OUTDIR)
\x
mlparse.exp"
-
@erase
"
$(OUTDIR)
\x
mlparse.lib"
-
@erase
".
\b
in
\x
mlparse.dll"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /W3 /GX /O2 /I "xmltok" /I "xmlwf" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /YX /c
CPP_PROJ
=
/nologo /ML /W3 /GX /O2 /I
"xmltok"
/I
"xmlwf"
/D
"NDEBUG"
/D
"WIN32"
\
/D
"_WINDOWS"
/D
XMLTOKAPI
=
__declspec
(
dllimport
)
/D
\
XMLPARSEAPI
=
__declspec
(
dllexport
)
/Fp
"
$(INTDIR)
/xmlparse.pch"
/YX
\
/Fo
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\x
mlparse
\R
elease/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
MTL
=
mktyplib.exe
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /win32
MTL_PROJ
=
/nologo /D
"NDEBUG"
/win32
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmlparse.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 /out:"bin/xmlparse.dll"
# SUBTRACT LINK32 /profile
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /subsystem
:
windows /dll /incremental:no
\
/pdb
:
"$(OUTDIR)/xmlparse.pdb" /machine:I386 /out:"bin/xmlparse.dll"
\
/implib
:
"$(OUTDIR)/xmlparse.lib"
LINK32_OBJS
=
\
"$(INTDIR)\hashtable.obj"
\
"$(INTDIR)\xmlparse.obj"
\
".\xmltok\Release\xmltok.lib"
".\bin\xmlparse.dll"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"xmlparse - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "xmlparse\Debug"
# PROP BASE Intermediate_Dir "xmlparse\Debug"
# PROP BASE Target_Dir "xmlparse"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "xmlparse\Debug"
# PROP Intermediate_Dir "xmlparse\Debug"
# PROP Target_Dir "xmlparse"
OUTDIR
=
.
\x
mlparse
\D
ebug
INTDIR
=
.
\x
mlparse
\D
ebug
ALL
:
"xmltok - Win32 Debug" ".
\d
bgbin
\x
mlparse.dll"
CLEAN
:
-
@erase
"
$(INTDIR)
\h
ashtable.obj"
-
@erase
"
$(INTDIR)
\v
c40.idb"
-
@erase
"
$(INTDIR)
\v
c40.pdb"
-
@erase
"
$(INTDIR)
\x
mlparse.obj"
-
@erase
"
$(OUTDIR)
\x
mlparse.exp"
-
@erase
"
$(OUTDIR)
\x
mlparse.lib"
-
@erase
"
$(OUTDIR)
\x
mlparse.pdb"
-
@erase
".
\d
bgbin
\x
mlparse.dll"
-
@erase
".
\d
bgbin
\x
mlparse.ilk"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "xmltok" /I "xmlwf" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllimport) /D XMLPARSEAPI=__declspec(dllexport) /YX /c
CPP_PROJ
=
/nologo /MDd /W3 /Gm /GX /Zi /Od /I
"xmltok"
/I
"xmlwf"
/D
"_DEBUG"
/D
\
"WIN32"
/D
"_WINDOWS"
/D
XMLTOKAPI
=
__declspec
(
dllimport
)
/D
\
XMLPARSEAPI
=
__declspec
(
dllexport
)
/Fp
"
$(INTDIR)
/xmlparse.pch"
/YX
\
/Fo
"$(INTDIR)/"
/Fd
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\x
mlparse
\D
ebug/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
MTL
=
mktyplib.exe
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /win32
MTL_PROJ
=
/nologo /D
"_DEBUG"
/win32
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmlparse.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin/xmlparse.dll"
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /subsystem
:
windows /dll /incremental:yes
\
/pdb
:
"$(OUTDIR)/xmlparse.pdb" /debug /machine:I386 /out:"dbgbin/xmlparse.dll"
\
/implib
:
"$(OUTDIR)/xmlparse.lib"
LINK32_OBJS
=
\
"$(INTDIR)\hashtable.obj"
\
"$(INTDIR)\xmlparse.obj"
\
".\xmltok\Debug\xmltok.lib"
".\dbgbin\xmlparse.dll"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"xmltok - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "xmltok\Release"
# PROP BASE Intermediate_Dir "xmltok\Release"
# PROP BASE Target_Dir "xmltok"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "xmltok\Release"
# PROP Intermediate_Dir "xmltok\Release"
# PROP Target_Dir "xmltok"
OUTDIR
=
.
\x
mltok
\R
elease
INTDIR
=
.
\x
mltok
\R
elease
ALL
:
".
\b
in
\x
mltok.dll"
CLEAN
:
-
@erase
"
$(INTDIR)
\d
llmain.obj"
-
@erase
"
$(INTDIR)
\x
mlrole.obj"
-
@erase
"
$(INTDIR)
\x
mltok.obj"
-
@erase
"
$(OUTDIR)
\x
mltok.exp"
-
@erase
"
$(OUTDIR)
\x
mltok.lib"
-
@erase
".
\b
in
\x
mltok.dll"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllexport) /YX /c
CPP_PROJ
=
/nologo /MT /W3 /GX /O2 /D
"NDEBUG"
/D
"WIN32"
/D
"_WINDOWS"
/D
\
XMLTOKAPI
=
__declspec
(
dllexport
)
/Fp
"
$(INTDIR)
/xmltok.pch"
/YX /Fo
"
$(INTDIR)
/"
\
/c
CPP_OBJS
=
.
\x
mltok
\R
elease/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
MTL
=
mktyplib.exe
# ADD BASE MTL /nologo /D "NDEBUG" /win32
# ADD MTL /nologo /D "NDEBUG" /win32
MTL_PROJ
=
/nologo /D
"NDEBUG"
/win32
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmltok.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /entry:"DllMain" /subsystem:windows /dll /machine:I386 /out:"bin/xmltok.dll"
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /entry
:
"DllMain" /subsystem:windows /dll /incremental:no
\
/pdb
:
"$(OUTDIR)/xmltok.pdb" /machine:I386 /out:"bin/xmltok.dll"
\
/implib
:
"$(OUTDIR)/xmltok.lib"
LINK32_OBJS
=
\
"$(INTDIR)\dllmain.obj"
\
"$(INTDIR)\xmlrole.obj"
\
"$(INTDIR)\xmltok.obj"
".\bin\xmltok.dll"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ELSEIF
"$(CFG)"
==
"xmltok - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "xmltok\Debug"
# PROP BASE Intermediate_Dir "xmltok\Debug"
# PROP BASE Target_Dir "xmltok"
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "xmltok\Debug"
# PROP Intermediate_Dir "xmltok\Debug"
# PROP Target_Dir "xmltok"
OUTDIR
=
.
\x
mltok
\D
ebug
INTDIR
=
.
\x
mltok
\D
ebug
ALL
:
".
\d
bgbin
\x
mltok.dll"
CLEAN
:
-
@erase
"
$(INTDIR)
\d
llmain.obj"
-
@erase
"
$(INTDIR)
\v
c40.idb"
-
@erase
"
$(INTDIR)
\v
c40.pdb"
-
@erase
"
$(INTDIR)
\x
mlrole.obj"
-
@erase
"
$(INTDIR)
\x
mltok.obj"
-
@erase
"
$(OUTDIR)
\x
mltok.exp"
-
@erase
"
$(OUTDIR)
\x
mltok.lib"
-
@erase
"
$(OUTDIR)
\x
mltok.pdb"
-
@erase
".
\d
bgbin
\x
mltok.dll"
-
@erase
".
\d
bgbin
\x
mltok.ilk"
"$(OUTDIR)"
:
if
not
exist
"$(OUTDIR)/$(NULL)"
mkdir
"$(OUTDIR)"
CPP
=
cl.exe
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D XMLTOKAPI=__declspec(dllexport) /YX /c
CPP_PROJ
=
/nologo /MTd /W3 /Gm /GX /Zi /Od /D
"_DEBUG"
/D
"WIN32"
/D
"_WINDOWS"
\
/D
XMLTOKAPI
=
__declspec
(
dllexport
)
/Fp
"
$(INTDIR)
/xmltok.pch"
/YX
\
/Fo
"$(INTDIR)/"
/Fd
"$(INTDIR)/"
/c
CPP_OBJS
=
.
\x
mltok
\D
ebug/
CPP_SBRS
=
.
\.
.c{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_OBJS)}.obj
:
$(CPP)
$(CPP_PROJ)
$<
.c{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cpp{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
.cxx{$(CPP_SBRS)}.sbr
:
$(CPP)
$(CPP_PROJ)
$<
MTL
=
mktyplib.exe
# ADD BASE MTL /nologo /D "_DEBUG" /win32
# ADD MTL /nologo /D "_DEBUG" /win32
MTL_PROJ
=
/nologo /D
"_DEBUG"
/win32
RSC
=
rc.exe
# ADD BASE RSC /l 0x809 /d "_DEBUG"
# ADD RSC /l 0x809 /d "_DEBUG"
BSC32
=
bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
BSC32_FLAGS
=
/nologo /o
"
$(OUTDIR)
/xmltok.bsc"
BSC32_SBRS
=
\
LINK32
=
link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"dbgbin/xmltok.dll"
LINK32_FLAGS
=
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
\
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib\
odbccp32.lib /nologo /subsystem
:
windows /dll /incremental:yes
\
/pdb
:
"$(OUTDIR)/xmltok.pdb" /debug /machine:I386 /out:"dbgbin/xmltok.dll"
\
/implib
:
"$(OUTDIR)/xmltok.lib"
LINK32_OBJS
=
\
"$(INTDIR)\dllmain.obj"
\
"$(INTDIR)\xmlrole.obj"
\
"$(INTDIR)\xmltok.obj"
".\dbgbin\xmltok.dll"
:
"$(OUTDIR)"
$(DEF_FILE)
$(LINK32_OBJS)
$(LINK32)
@<<
$(LINK32_FLAGS)
$(LINK32_OBJS)
<<
!ENDIF
################################################################################
# Begin Target
# Name "xmlwf - Win32 Release"
# Name "xmlwf - Win32 Debug"
!IF
"$(CFG)"
==
"xmlwf - Win32 Release"
!ELSEIF
"$(CFG)"
==
"xmlwf - Win32 Debug"
!ENDIF
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlwf
\x
mlwf.c
DEP_CPP_XMLWF
=
\
".\xmlparse\xmlparse.h"
\
".\xmlwf\filemap.h"
\
"$(INTDIR)\xmlwf.obj"
:
$(SOURCE)
$(DEP_CPP_XMLWF)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlwf
\w
in32filemap.c
DEP_CPP_WIN32
=
\
".\xmlwf\filemap.h"
\
"$(INTDIR)\win32filemap.obj"
:
$(SOURCE)
$(DEP_CPP_WIN32)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlwf
\u
nixfilemap.c
DEP_CPP_UNIXF
=
\
".\xmlwf\filemap.h"
\
{$(INCLUDE)}
"\sys\stat.h"
\
{$(INCLUDE)}
"\sys\TYPES.H"
\
# PROP Exclude_From_Build 1
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlwf
\r
eadfilemap.c
DEP_CPP_READF
=
\
{$(INCLUDE)}
"\sys\stat.h"
\
{$(INCLUDE)}
"\sys\TYPES.H"
\
# PROP Exclude_From_Build 1
# End Source File
################################################################################
# Begin Project Dependency
# Project_Dep_Name "xmlparse"
!IF
"$(CFG)"
==
"xmlwf - Win32 Release"
"xmlparse - Win32 Release"
:
$(MAKE)
/$(MAKEFLAGS)
/F
".\expat.mak"
CFG
=
"xmlparse - Win32 Release"
!ELSEIF
"$(CFG)"
==
"xmlwf - Win32 Debug"
"xmlparse - Win32 Debug"
:
$(MAKE)
/$(MAKEFLAGS)
/F
".\expat.mak"
CFG
=
"xmlparse - Win32 Debug"
!ENDIF
# End Project Dependency
# End Target
################################################################################
# Begin Target
# Name "gennmtab - Win32 Release"
# Name "gennmtab - Win32 Debug"
!IF
"$(CFG)"
==
"gennmtab - Win32 Release"
!ELSEIF
"$(CFG)"
==
"gennmtab - Win32 Debug"
!ENDIF
################################################################################
# Begin Source File
SOURCE
=
.
\g
ennmtab
\g
ennmtab.c
"$(INTDIR)\gennmtab.obj"
:
$(SOURCE)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
# End Target
################################################################################
# Begin Target
# Name "xmlparse - Win32 Release"
# Name "xmlparse - Win32 Debug"
!IF
"$(CFG)"
==
"xmlparse - Win32 Release"
!ELSEIF
"$(CFG)"
==
"xmlparse - Win32 Debug"
!ENDIF
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlparse
\x
mlparse.c
DEP_CPP_XMLPA
=
\
".\xmlparse\hashtable.h"
\
".\xmlparse\xmlparse.h"
\
".\xmltok\xmldef.h"
\
".\xmltok\xmlrole.h"
\
".\xmltok\xmltok.h"
\
NODEP_CPP_XMLPA
=
\
".\xmltok\nspr.h"
\
"$(INTDIR)\xmlparse.obj"
:
$(SOURCE)
$(DEP_CPP_XMLPA)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mlparse
\h
ashtable.c
DEP_CPP_HASHT
=
\
".\xmlparse\hashtable.h"
\
".\xmltok\xmldef.h"
\
NODEP_CPP_HASHT
=
\
".\xmltok\nspr.h"
\
"$(INTDIR)\hashtable.obj"
:
$(SOURCE)
$(DEP_CPP_HASHT)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Project Dependency
# Project_Dep_Name "xmltok"
!IF
"$(CFG)"
==
"xmlparse - Win32 Release"
"xmltok - Win32 Release"
:
$(MAKE)
/$(MAKEFLAGS)
/F
".\expat.mak"
CFG
=
"xmltok - Win32 Release"
!ELSEIF
"$(CFG)"
==
"xmlparse - Win32 Debug"
"xmltok - Win32 Debug"
:
$(MAKE)
/$(MAKEFLAGS)
/F
".\expat.mak"
CFG
=
"xmltok - Win32 Debug"
!ENDIF
# End Project Dependency
# End Target
################################################################################
# Begin Target
# Name "xmltok - Win32 Release"
# Name "xmltok - Win32 Debug"
!IF
"$(CFG)"
==
"xmltok - Win32 Release"
!ELSEIF
"$(CFG)"
==
"xmltok - Win32 Debug"
!ENDIF
################################################################################
# Begin Source File
SOURCE
=
.
\x
mltok
\x
mlrole.c
DEP_CPP_XMLRO
=
\
".\xmltok\xmldef.h"
\
".\xmltok\xmlrole.h"
\
".\xmltok\xmltok.h"
\
NODEP_CPP_XMLRO
=
\
".\xmltok\nspr.h"
\
"$(INTDIR)\xmlrole.obj"
:
$(SOURCE)
$(DEP_CPP_XMLRO)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mltok
\x
mltok.c
DEP_CPP_XMLTO
=
\
".\xmltok\asciitab.h"
\
".\xmltok\iasciitab.h"
\
".\xmltok\latin1tab.h"
\
".\xmltok\nametab.h"
\
".\xmltok\utf8tab.h"
\
".\xmltok\xmldef.h"
\
".\xmltok\xmltok.h"
\
".\xmltok\xmltok_impl.c"
\
".\xmltok\xmltok_impl.h"
\
NODEP_CPP_XMLTO
=
\
".\xmltok\nspr.h"
\
"$(INTDIR)\xmltok.obj"
:
$(SOURCE)
$(DEP_CPP_XMLTO)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
################################################################################
# Begin Source File
SOURCE
=
.
\x
mltok
\d
llmain.c
"$(INTDIR)\dllmain.obj"
:
$(SOURCE)
"$(INTDIR)"
$(CPP)
$(CPP_PROJ)
$(SOURCE)
# End Source File
# End Target
# End Project
################################################################################
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include "xmldef.h"
#include "hashtable.h"
#include <stdlib.h>
#include <string.h>
#define INIT_SIZE 64
static
unsigned
long
hash
(
const
char
*
s
)
{
unsigned
long
h
=
0
;
while
(
*
s
)
h
=
(
h
<<
5
)
+
h
+
(
unsigned
char
)
*
s
++
;
return
h
;
}
NAMED
*
lookup
(
HASH_TABLE
*
table
,
const
char
*
name
,
size_t
createSize
)
{
size_t
i
;
if
(
table
->
size
==
0
)
{
if
(
!
createSize
)
return
0
;
table
->
v
=
calloc
(
INIT_SIZE
,
sizeof
(
NAMED
*
));
if
(
!
table
->
v
)
return
0
;
table
->
size
=
INIT_SIZE
;
table
->
usedLim
=
INIT_SIZE
/
2
;
i
=
hash
(
name
)
&
(
table
->
size
-
1
);
}
else
{
unsigned
long
h
=
hash
(
name
);
for
(
i
=
h
&
(
table
->
size
-
1
);
table
->
v
[
i
];
i
==
0
?
i
=
table
->
size
-
1
:
--
i
)
{
if
(
strcmp
(
name
,
table
->
v
[
i
]
->
name
)
==
0
)
return
table
->
v
[
i
];
}
if
(
!
createSize
)
return
0
;
if
(
table
->
used
==
table
->
usedLim
)
{
/* check for overflow */
size_t
newSize
=
table
->
size
*
2
;
NAMED
**
newV
=
calloc
(
newSize
,
sizeof
(
NAMED
*
));
if
(
!
newV
)
return
0
;
for
(
i
=
0
;
i
<
table
->
size
;
i
++
)
if
(
table
->
v
[
i
])
{
size_t
j
;
for
(
j
=
hash
(
table
->
v
[
i
]
->
name
)
&
(
newSize
-
1
);
newV
[
j
];
j
==
0
?
j
=
newSize
-
1
:
--
j
)
;
newV
[
j
]
=
table
->
v
[
i
];
}
free
(
table
->
v
);
table
->
v
=
newV
;
table
->
size
=
newSize
;
table
->
usedLim
=
newSize
/
2
;
for
(
i
=
h
&
(
table
->
size
-
1
);
table
->
v
[
i
];
i
==
0
?
i
=
table
->
size
-
1
:
--
i
)
;
}
}
table
->
v
[
i
]
=
calloc
(
1
,
createSize
);
if
(
!
table
->
v
[
i
])
return
0
;
table
->
v
[
i
]
->
name
=
name
;
(
table
->
used
)
++
;
return
table
->
v
[
i
];
}
void
hashTableDestroy
(
HASH_TABLE
*
table
)
{
size_t
i
;
for
(
i
=
0
;
i
<
table
->
size
;
i
++
)
{
NAMED
*
p
=
table
->
v
[
i
];
if
(
p
)
free
(
p
);
}
free
(
table
->
v
);
}
void
hashTableInit
(
HASH_TABLE
*
p
)
{
p
->
size
=
0
;
p
->
usedLim
=
0
;
p
->
used
=
0
;
p
->
v
=
0
;
}
void
hashTableIterInit
(
HASH_TABLE_ITER
*
iter
,
const
HASH_TABLE
*
table
)
{
iter
->
p
=
table
->
v
;
iter
->
end
=
iter
->
p
+
table
->
size
;
}
NAMED
*
hashTableIterNext
(
HASH_TABLE_ITER
*
iter
)
{
while
(
iter
->
p
!=
iter
->
end
)
{
NAMED
*
tem
=
*
(
iter
->
p
)
++
;
if
(
tem
)
return
tem
;
}
return
0
;
}
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/hashtable.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include <stddef.h>
typedef
struct
{
const
char
*
name
;
}
NAMED
;
typedef
struct
{
NAMED
**
v
;
size_t
size
;
size_t
used
;
size_t
usedLim
;
}
HASH_TABLE
;
NAMED
*
lookup
(
HASH_TABLE
*
table
,
const
char
*
name
,
size_t
createSize
);
void
hashTableInit
(
HASH_TABLE
*
);
void
hashTableDestroy
(
HASH_TABLE
*
);
typedef
struct
{
NAMED
**
p
;
NAMED
**
end
;
}
HASH_TABLE_ITER
;
void
hashTableIterInit
(
HASH_TABLE_ITER
*
,
const
HASH_TABLE
*
);
NAMED
*
hashTableIterNext
(
HASH_TABLE_ITER
*
);
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include "xmldef.h"
#include "xmlparse.h"
#include "xmltok.h"
#include "xmlrole.h"
#include "hashtable.h"
#include <stdlib.h>
#include <string.h>
#define INIT_TAG_BUF_SIZE 32
#define INIT_DATA_BUF_SIZE 1024
#define INIT_ATTS_SIZE 16
#define INIT_BLOCK_SIZE 1024
#define INIT_BUFFER_SIZE 1024
typedef
struct
tag
{
struct
tag
*
parent
;
const
char
*
rawName
;
int
rawNameLength
;
const
char
*
name
;
char
*
buf
;
char
*
bufEnd
;
}
TAG
;
typedef
struct
{
const
char
*
name
;
const
char
*
textPtr
;
int
textLen
;
const
char
*
systemId
;
const
char
*
publicId
;
const
char
*
notation
;
char
open
;
char
magic
;
}
ENTITY
;
typedef
struct
block
{
struct
block
*
next
;
int
size
;
char
s
[
1
];
}
BLOCK
;
typedef
struct
{
BLOCK
*
blocks
;
BLOCK
*
freeBlocks
;
const
char
*
end
;
char
*
ptr
;
char
*
start
;
}
STRING_POOL
;
/* The byte before the name is a scratch byte used to determine whether
an attribute has been specified. */
typedef
struct
{
char
*
name
;
char
maybeTokenized
;
}
ATTRIBUTE_ID
;
typedef
struct
{
const
ATTRIBUTE_ID
*
id
;
char
isCdata
;
const
char
*
value
;
}
DEFAULT_ATTRIBUTE
;
typedef
struct
{
const
char
*
name
;
int
nDefaultAtts
;
int
allocDefaultAtts
;
DEFAULT_ATTRIBUTE
*
defaultAtts
;
}
ELEMENT_TYPE
;
typedef
struct
{
HASH_TABLE
generalEntities
;
HASH_TABLE
elementTypes
;
HASH_TABLE
attributeIds
;
STRING_POOL
pool
;
int
complete
;
int
standalone
;
}
DTD
;
typedef
enum
XML_Error
Processor
(
XML_Parser
parser
,
const
char
*
start
,
const
char
*
end
,
const
char
**
endPtr
);
static
Processor
prologProcessor
;
static
Processor
contentProcessor
;
static
Processor
epilogProcessor
;
static
Processor
errorProcessor
;
static
enum
XML_Error
doContent
(
XML_Parser
parser
,
int
startTagLevel
,
const
ENCODING
*
enc
,
const
char
*
start
,
const
char
*
end
,
const
char
**
endPtr
);
static
enum
XML_Error
storeAtts
(
XML_Parser
parser
,
const
ENCODING
*
,
const
char
*
tagName
,
const
char
*
s
);
static
int
defineAttribute
(
ELEMENT_TYPE
*
type
,
ATTRIBUTE_ID
*
,
int
isCdata
,
const
char
*
dfltValue
);
static
enum
XML_Error
storeAttributeValue
(
XML_Parser
parser
,
const
ENCODING
*
,
int
isCdata
,
const
char
*
,
const
char
*
,
STRING_POOL
*
);
static
enum
XML_Error
appendAttributeValue
(
XML_Parser
parser
,
const
ENCODING
*
,
int
isCdata
,
const
char
*
,
const
char
*
,
STRING_POOL
*
);
static
ATTRIBUTE_ID
*
getAttributeId
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
const
char
*
start
,
const
char
*
end
);
static
enum
XML_Error
storeEntityValue
(
XML_Parser
parser
,
const
char
*
start
,
const
char
*
end
);
static
int
reportProcessingInstruction
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
const
char
*
start
,
const
char
*
end
);
static
int
dtdInit
(
DTD
*
);
static
void
dtdDestroy
(
DTD
*
);
static
void
poolInit
(
STRING_POOL
*
);
static
void
poolClear
(
STRING_POOL
*
);
static
void
poolDestroy
(
STRING_POOL
*
);
static
char
*
poolAppend
(
STRING_POOL
*
pool
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
);
static
char
*
poolStoreString
(
STRING_POOL
*
pool
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
);
static
int
poolGrow
(
STRING_POOL
*
pool
);
#define poolStart(pool) ((pool)->start)
#define poolEnd(pool) ((pool)->ptr)
#define poolLength(pool) ((pool)->ptr - (pool)->start)
#define poolChop(pool) ((void)--(pool->ptr))
#define poolLastByte(pool) (((pool)->ptr)[-1])
#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
#define poolFinish(pool) ((pool)->start = (pool)->ptr)
#define poolAppendByte(pool, c) \
(((pool)->ptr == (pool)->end && !poolGrow(pool)) \
? 0 \
: ((*((pool)->ptr)++ = c), 1))
typedef
struct
{
char
*
buffer
;
/* first character to be parsed */
const
char
*
bufferPtr
;
/* past last character to be parsed */
char
*
bufferEnd
;
/* allocated end of buffer */
const
char
*
bufferLim
;
long
bufferEndByteIndex
;
char
*
dataBuf
;
char
*
dataBufEnd
;
void
*
userData
;
XML_StartElementHandler
startElementHandler
;
XML_EndElementHandler
endElementHandler
;
XML_CharacterDataHandler
characterDataHandler
;
XML_ProcessingInstructionHandler
processingInstructionHandler
;
const
ENCODING
*
encoding
;
INIT_ENCODING
initEncoding
;
PROLOG_STATE
prologState
;
Processor
*
processor
;
enum
XML_Error
errorCode
;
const
char
*
errorPtr
;
int
tagLevel
;
ENTITY
*
declEntity
;
ELEMENT_TYPE
*
declElementType
;
ATTRIBUTE_ID
*
declAttributeId
;
char
declAttributeIsCdata
;
DTD
dtd
;
TAG
*
tagStack
;
TAG
*
freeTagList
;
int
attsSize
;
ATTRIBUTE
*
atts
;
POSITION
position
;
long
errorByteIndex
;
STRING_POOL
tempPool
;
STRING_POOL
temp2Pool
;
char
*
groupConnector
;
unsigned
groupSize
;
int
hadExternalDoctype
;
}
Parser
;
#define userData (((Parser *)parser)->userData)
#define startElementHandler (((Parser *)parser)->startElementHandler)
#define endElementHandler (((Parser *)parser)->endElementHandler)
#define characterDataHandler (((Parser *)parser)->characterDataHandler)
#define processingInstructionHandler (((Parser *)parser)->processingInstructionHandler)
#define encoding (((Parser *)parser)->encoding)
#define initEncoding (((Parser *)parser)->initEncoding)
#define prologState (((Parser *)parser)->prologState)
#define processor (((Parser *)parser)->processor)
#define errorCode (((Parser *)parser)->errorCode)
#define errorPtr (((Parser *)parser)->errorPtr)
#define errorByteIndex (((Parser *)parser)->errorByteIndex)
#define position (((Parser *)parser)->position)
#define tagLevel (((Parser *)parser)->tagLevel)
#define buffer (((Parser *)parser)->buffer)
#define bufferPtr (((Parser *)parser)->bufferPtr)
#define bufferEnd (((Parser *)parser)->bufferEnd)
#define bufferEndByteIndex (((Parser *)parser)->bufferEndByteIndex)
#define bufferLim (((Parser *)parser)->bufferLim)
#define dataBuf (((Parser *)parser)->dataBuf)
#define dataBufEnd (((Parser *)parser)->dataBufEnd)
#define dtd (((Parser *)parser)->dtd)
#define declEntity (((Parser *)parser)->declEntity)
#define declElementType (((Parser *)parser)->declElementType)
#define declAttributeId (((Parser *)parser)->declAttributeId)
#define declAttributeIsCdata (((Parser *)parser)->declAttributeIsCdata)
#define freeTagList (((Parser *)parser)->freeTagList)
#define tagStack (((Parser *)parser)->tagStack)
#define atts (((Parser *)parser)->atts)
#define attsSize (((Parser *)parser)->attsSize)
#define tempPool (((Parser *)parser)->tempPool)
#define temp2Pool (((Parser *)parser)->temp2Pool)
#define groupConnector (((Parser *)parser)->groupConnector)
#define groupSize (((Parser *)parser)->groupSize)
#define hadExternalDoctype (((Parser *)parser)->hadExternalDoctype)
XML_Parser
XML_ParserCreate
(
const
char
*
encodingName
)
{
XML_Parser
parser
=
malloc
(
sizeof
(
Parser
));
if
(
!
parser
)
return
parser
;
processor
=
prologProcessor
;
XmlPrologStateInit
(
&
prologState
);
userData
=
0
;
startElementHandler
=
0
;
endElementHandler
=
0
;
characterDataHandler
=
0
;
processingInstructionHandler
=
0
;
buffer
=
0
;
bufferPtr
=
0
;
bufferEnd
=
0
;
bufferEndByteIndex
=
0
;
bufferLim
=
0
;
declElementType
=
0
;
declAttributeId
=
0
;
declEntity
=
0
;
memset
(
&
position
,
0
,
sizeof
(
POSITION
));
errorCode
=
XML_ERROR_NONE
;
errorByteIndex
=
0
;
errorPtr
=
0
;
tagLevel
=
0
;
tagStack
=
0
;
freeTagList
=
0
;
attsSize
=
INIT_ATTS_SIZE
;
atts
=
malloc
(
attsSize
*
sizeof
(
ATTRIBUTE
));
dataBuf
=
malloc
(
INIT_DATA_BUF_SIZE
);
groupSize
=
0
;
groupConnector
=
0
;
hadExternalDoctype
=
0
;
poolInit
(
&
tempPool
);
poolInit
(
&
temp2Pool
);
if
(
!
dtdInit
(
&
dtd
)
||
!
atts
||
!
dataBuf
)
{
XML_ParserFree
(
parser
);
return
0
;
}
dataBufEnd
=
dataBuf
+
INIT_DATA_BUF_SIZE
;
if
(
!
XmlInitEncoding
(
&
initEncoding
,
&
encoding
,
encodingName
))
{
errorCode
=
XML_ERROR_UNKNOWN_ENCODING
;
processor
=
errorProcessor
;
}
return
parser
;
}
void
XML_ParserFree
(
XML_Parser
parser
)
{
for
(;;)
{
TAG
*
p
;
if
(
tagStack
==
0
)
{
if
(
freeTagList
==
0
)
break
;
tagStack
=
freeTagList
;
freeTagList
=
0
;
}
p
=
tagStack
;
tagStack
=
tagStack
->
parent
;
free
(
p
->
buf
);
free
(
p
);
}
poolDestroy
(
&
tempPool
);
poolDestroy
(
&
temp2Pool
);
dtdDestroy
(
&
dtd
);
free
((
void
*
)
atts
);
free
(
groupConnector
);
free
(
buffer
);
free
(
dataBuf
);
free
(
parser
);
}
void
XML_SetUserData
(
XML_Parser
parser
,
void
*
p
)
{
userData
=
p
;
}
void
XML_SetElementHandler
(
XML_Parser
parser
,
XML_StartElementHandler
start
,
XML_EndElementHandler
end
)
{
startElementHandler
=
start
;
endElementHandler
=
end
;
}
void
XML_SetCharacterDataHandler
(
XML_Parser
parser
,
XML_CharacterDataHandler
handler
)
{
characterDataHandler
=
handler
;
}
void
XML_SetProcessingInstructionHandler
(
XML_Parser
parser
,
XML_ProcessingInstructionHandler
handler
)
{
processingInstructionHandler
=
handler
;
}
int
XML_Parse
(
XML_Parser
parser
,
const
char
*
s
,
int
len
,
int
isFinal
)
{
bufferEndByteIndex
+=
len
;
if
(
len
==
0
)
{
if
(
!
isFinal
)
return
1
;
errorCode
=
processor
(
parser
,
bufferPtr
,
bufferEnd
,
0
);
return
errorCode
==
XML_ERROR_NONE
;
}
else
if
(
bufferPtr
==
bufferEnd
)
{
const
char
*
end
;
int
nLeftOver
;
if
(
isFinal
)
{
errorCode
=
processor
(
parser
,
s
,
s
+
len
,
0
);
if
(
errorCode
==
XML_ERROR_NONE
)
return
1
;
if
(
errorPtr
)
{
errorByteIndex
=
bufferEndByteIndex
-
(
s
+
len
-
errorPtr
);
XmlUpdatePosition
(
encoding
,
s
,
errorPtr
,
&
position
);
}
return
0
;
}
errorCode
=
processor
(
parser
,
s
,
s
+
len
,
&
end
);
if
(
errorCode
!=
XML_ERROR_NONE
)
{
if
(
errorPtr
)
{
errorByteIndex
=
bufferEndByteIndex
-
(
s
+
len
-
errorPtr
);
XmlUpdatePosition
(
encoding
,
s
,
errorPtr
,
&
position
);
}
return
0
;
}
XmlUpdatePosition
(
encoding
,
s
,
end
,
&
position
);
nLeftOver
=
s
+
len
-
end
;
if
(
nLeftOver
)
{
if
(
buffer
==
0
||
nLeftOver
>
bufferLim
-
buffer
)
{
/* FIXME avoid integer overflow */
buffer
=
realloc
(
buffer
,
len
*
2
);
if
(
!
buffer
)
{
errorCode
=
XML_ERROR_NO_MEMORY
;
return
0
;
}
bufferLim
=
buffer
+
len
*
2
;
}
memcpy
(
buffer
,
end
,
nLeftOver
);
bufferPtr
=
buffer
;
bufferEnd
=
buffer
+
nLeftOver
;
}
return
1
;
}
else
{
memcpy
(
XML_GetBuffer
(
parser
,
len
),
s
,
len
);
return
XML_ParseBuffer
(
parser
,
len
,
isFinal
);
}
}
int
XML_ParseBuffer
(
XML_Parser
parser
,
int
len
,
int
isFinal
)
{
const
char
*
start
=
bufferPtr
;
bufferEnd
+=
len
;
errorCode
=
processor
(
parser
,
bufferPtr
,
bufferEnd
,
isFinal
?
(
const
char
**
)
0
:
&
bufferPtr
);
if
(
errorCode
==
XML_ERROR_NONE
)
{
if
(
!
isFinal
)
XmlUpdatePosition
(
encoding
,
start
,
bufferPtr
,
&
position
);
return
1
;
}
else
{
if
(
errorPtr
)
{
errorByteIndex
=
bufferEndByteIndex
-
(
bufferEnd
-
errorPtr
);
XmlUpdatePosition
(
encoding
,
start
,
errorPtr
,
&
position
);
}
return
0
;
}
}
void
*
XML_GetBuffer
(
XML_Parser
parser
,
int
len
)
{
if
(
len
>
bufferLim
-
bufferEnd
)
{
/* FIXME avoid integer overflow */
int
neededSize
=
len
+
(
bufferEnd
-
bufferPtr
);
if
(
neededSize
<=
bufferLim
-
buffer
)
{
memmove
(
buffer
,
bufferPtr
,
bufferEnd
-
bufferPtr
);
bufferEnd
=
buffer
+
(
bufferEnd
-
bufferPtr
);
bufferPtr
=
buffer
;
}
else
{
char
*
newBuf
;
int
bufferSize
=
bufferLim
-
bufferPtr
;
if
(
bufferSize
==
0
)
bufferSize
=
INIT_BUFFER_SIZE
;
do
{
bufferSize
*=
2
;
}
while
(
bufferSize
<
neededSize
);
newBuf
=
malloc
(
bufferSize
);
if
(
newBuf
==
0
)
{
errorCode
=
XML_ERROR_NO_MEMORY
;
return
0
;
}
bufferLim
=
newBuf
+
bufferSize
;
if
(
bufferPtr
)
{
memcpy
(
newBuf
,
bufferPtr
,
bufferEnd
-
bufferPtr
);
free
(
buffer
);
}
bufferEnd
=
newBuf
+
(
bufferEnd
-
bufferPtr
);
bufferPtr
=
buffer
=
newBuf
;
}
}
return
bufferEnd
;
}
int
XML_GetErrorCode
(
XML_Parser
parser
)
{
return
errorCode
;
}
int
XML_GetErrorLineNumber
(
XML_Parser
parser
)
{
return
position
.
lineNumber
+
1
;
}
int
XML_GetErrorColumnNumber
(
XML_Parser
parser
)
{
return
position
.
columnNumber
;
}
long
XML_GetErrorByteIndex
(
XML_Parser
parser
)
{
return
errorByteIndex
;
}
const
char
*
XML_ErrorString
(
int
code
)
{
static
const
char
*
message
[]
=
{
0
,
"out of memory"
,
"syntax error"
,
"no element found"
,
"not well-formed"
,
"unclosed token"
,
"unclosed token"
,
"mismatched tag"
,
"duplicate attribute"
,
"junk after document element"
,
"parameter entity reference not allowed within declaration in internal subset"
,
"undefined entity"
,
"recursive entity reference"
,
"asynchronous entity"
,
"reference to invalid character number"
,
"reference to binary entity"
,
"reference to external entity in attribute"
,
"xml processing instruction not at start of external entity"
,
"unknown encoding"
,
"encoding specified in XML declaration is incorrect"
};
if
(
code
>
0
&&
code
<
sizeof
(
message
)
/
sizeof
(
message
[
0
]))
return
message
[
code
];
return
0
;
}
static
enum
XML_Error
contentProcessor
(
XML_Parser
parser
,
const
char
*
start
,
const
char
*
end
,
const
char
**
endPtr
)
{
return
doContent
(
parser
,
0
,
encoding
,
start
,
end
,
endPtr
);
}
static
enum
XML_Error
doContent
(
XML_Parser
parser
,
int
startTagLevel
,
const
ENCODING
*
enc
,
const
char
*
s
,
const
char
*
end
,
const
char
**
nextPtr
)
{
const
ENCODING
*
utf8
=
XmlGetInternalEncoding
(
XML_UTF8_ENCODING
);
for
(;;)
{
const
char
*
next
;
int
tok
=
XmlContentTok
(
enc
,
s
,
end
,
&
next
);
switch
(
tok
)
{
case
XML_TOK_TRAILING_CR
:
case
XML_TOK_NONE
:
if
(
nextPtr
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
if
(
startTagLevel
>
0
)
{
if
(
tagLevel
!=
startTagLevel
)
{
errorPtr
=
s
;
return
XML_ERROR_ASYNC_ENTITY
;
}
return
XML_ERROR_NONE
;
}
errorPtr
=
s
;
return
XML_ERROR_NO_ELEMENTS
;
case
XML_TOK_INVALID
:
errorPtr
=
next
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_PARTIAL
:
if
(
nextPtr
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
errorPtr
=
s
;
return
XML_ERROR_UNCLOSED_TOKEN
;
case
XML_TOK_PARTIAL_CHAR
:
if
(
nextPtr
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
errorPtr
=
s
;
return
XML_ERROR_PARTIAL_CHAR
;
case
XML_TOK_ENTITY_REF
:
{
const
char
*
name
=
poolStoreString
(
&
dtd
.
pool
,
enc
,
s
+
enc
->
minBytesPerChar
,
next
-
enc
->
minBytesPerChar
);
ENTITY
*
entity
;
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
entity
=
(
ENTITY
*
)
lookup
(
&
dtd
.
generalEntities
,
name
,
0
);
poolDiscard
(
&
dtd
.
pool
);
if
(
!
entity
)
{
if
(
dtd
.
complete
||
dtd
.
standalone
)
{
errorPtr
=
s
;
return
XML_ERROR_UNDEFINED_ENTITY
;
}
break
;
}
if
(
entity
->
magic
)
{
if
(
characterDataHandler
)
characterDataHandler
(
userData
,
entity
->
textPtr
,
entity
->
textLen
);
break
;
}
if
(
entity
->
open
)
{
errorPtr
=
s
;
return
XML_ERROR_RECURSIVE_ENTITY_REF
;
}
if
(
entity
->
notation
)
{
errorPtr
=
s
;
return
XML_ERROR_BINARY_ENTITY_REF
;
}
if
(
entity
)
{
if
(
entity
->
textPtr
)
{
enum
XML_Error
result
;
entity
->
open
=
1
;
result
=
doContent
(
parser
,
tagLevel
,
utf8
,
entity
->
textPtr
,
entity
->
textPtr
+
entity
->
textLen
,
0
);
entity
->
open
=
0
;
if
(
result
)
{
errorPtr
=
s
;
return
result
;
}
}
}
break
;
}
case
XML_TOK_START_TAG_WITH_ATTS
:
if
(
!
startElementHandler
)
{
enum
XML_Error
result
=
storeAtts
(
parser
,
enc
,
0
,
s
);
if
(
result
)
return
result
;
}
/* fall through */
case
XML_TOK_START_TAG_NO_ATTS
:
{
TAG
*
tag
;
if
(
freeTagList
)
{
tag
=
freeTagList
;
freeTagList
=
freeTagList
->
parent
;
}
else
{
tag
=
malloc
(
sizeof
(
TAG
));
if
(
!
tag
)
return
XML_ERROR_NO_MEMORY
;
tag
->
buf
=
malloc
(
INIT_TAG_BUF_SIZE
);
if
(
!
tag
->
buf
)
return
XML_ERROR_NO_MEMORY
;
tag
->
bufEnd
=
tag
->
buf
+
INIT_TAG_BUF_SIZE
;
}
tag
->
parent
=
tagStack
;
tagStack
=
tag
;
tag
->
rawName
=
s
+
enc
->
minBytesPerChar
;
tag
->
rawNameLength
=
XmlNameLength
(
enc
,
tag
->
rawName
);
if
(
nextPtr
)
{
if
(
tag
->
rawNameLength
>
tag
->
bufEnd
-
tag
->
buf
)
{
int
bufSize
=
tag
->
rawNameLength
*
4
;
tag
->
buf
=
realloc
(
tag
->
buf
,
bufSize
);
if
(
!
tag
->
buf
)
return
XML_ERROR_NO_MEMORY
;
tag
->
bufEnd
=
tag
->
buf
+
bufSize
;
}
memcpy
(
tag
->
buf
,
tag
->
rawName
,
tag
->
rawNameLength
);
tag
->
rawName
=
tag
->
buf
;
}
++
tagLevel
;
if
(
startElementHandler
)
{
enum
XML_Error
result
;
char
*
toPtr
;
const
char
*
rawNameEnd
=
tag
->
rawName
+
tag
->
rawNameLength
;
for
(;;)
{
const
char
*
fromPtr
=
tag
->
rawName
;
int
bufSize
;
toPtr
=
tag
->
buf
;
if
(
nextPtr
)
toPtr
+=
tag
->
rawNameLength
;
tag
->
name
=
toPtr
;
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
fromPtr
,
rawNameEnd
,
&
toPtr
,
tag
->
bufEnd
-
1
);
if
(
fromPtr
==
rawNameEnd
)
break
;
bufSize
=
(
tag
->
bufEnd
-
tag
->
buf
)
<<
1
;
tag
->
buf
=
realloc
(
tag
->
buf
,
bufSize
);
if
(
!
tag
->
buf
)
return
XML_ERROR_NO_MEMORY
;
tag
->
bufEnd
=
tag
->
buf
+
bufSize
;
}
*
toPtr
=
0
;
result
=
storeAtts
(
parser
,
enc
,
tag
->
name
,
s
);
if
(
result
)
return
result
;
startElementHandler
(
userData
,
tag
->
name
,
(
const
char
**
)
atts
);
poolClear
(
&
tempPool
);
}
else
tag
->
name
=
0
;
break
;
}
case
XML_TOK_EMPTY_ELEMENT_WITH_ATTS
:
if
(
!
startElementHandler
)
{
enum
XML_Error
result
=
storeAtts
(
parser
,
enc
,
0
,
s
);
if
(
result
)
return
result
;
}
/* fall through */
case
XML_TOK_EMPTY_ELEMENT_NO_ATTS
:
if
(
startElementHandler
||
endElementHandler
)
{
const
char
*
rawName
=
s
+
enc
->
minBytesPerChar
;
const
char
*
name
=
poolStoreString
(
&
tempPool
,
enc
,
rawName
,
rawName
+
XmlNameLength
(
enc
,
rawName
));
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
poolFinish
(
&
tempPool
);
if
(
startElementHandler
)
{
enum
XML_Error
result
=
storeAtts
(
parser
,
enc
,
name
,
s
);
if
(
result
)
return
result
;
startElementHandler
(
userData
,
name
,
(
const
char
**
)
atts
);
}
if
(
endElementHandler
)
endElementHandler
(
userData
,
name
);
poolClear
(
&
tempPool
);
}
if
(
tagLevel
==
0
)
return
epilogProcessor
(
parser
,
next
,
end
,
nextPtr
);
break
;
case
XML_TOK_END_TAG
:
if
(
tagLevel
==
startTagLevel
)
{
errorPtr
=
s
;
return
XML_ERROR_ASYNC_ENTITY
;
}
else
{
int
len
;
const
char
*
rawName
;
TAG
*
tag
=
tagStack
;
tagStack
=
tag
->
parent
;
tag
->
parent
=
freeTagList
;
freeTagList
=
tag
;
rawName
=
s
+
enc
->
minBytesPerChar
*
2
;
len
=
XmlNameLength
(
enc
,
rawName
);
if
(
len
!=
tag
->
rawNameLength
||
memcmp
(
tag
->
rawName
,
rawName
,
len
)
!=
0
)
{
errorPtr
=
rawName
;
return
XML_ERROR_TAG_MISMATCH
;
}
--
tagLevel
;
if
(
endElementHandler
)
{
if
(
tag
->
name
)
endElementHandler
(
userData
,
tag
->
name
);
else
{
const
char
*
name
=
poolStoreString
(
&
tempPool
,
enc
,
rawName
,
rawName
+
len
);
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
endElementHandler
(
userData
,
name
);
poolClear
(
&
tempPool
);
}
}
if
(
tagLevel
==
0
)
return
epilogProcessor
(
parser
,
next
,
end
,
nextPtr
);
}
break
;
case
XML_TOK_CHAR_REF
:
{
int
n
=
XmlCharRefNumber
(
enc
,
s
);
if
(
n
<
0
)
{
errorPtr
=
s
;
return
XML_ERROR_BAD_CHAR_REF
;
}
if
(
characterDataHandler
)
{
char
buf
[
XML_MAX_BYTES_PER_CHAR
];
characterDataHandler
(
userData
,
buf
,
XmlEncode
(
utf8
,
n
,
buf
));
}
}
break
;
case
XML_TOK_XML_DECL
:
errorPtr
=
s
;
return
XML_ERROR_MISPLACED_XML_PI
;
case
XML_TOK_DATA_NEWLINE
:
if
(
characterDataHandler
)
{
char
c
=
'\n'
;
characterDataHandler
(
userData
,
&
c
,
1
);
}
break
;
case
XML_TOK_CDATA_SECTION
:
if
(
characterDataHandler
)
{
const
char
*
lim
=
next
-
enc
->
minBytesPerChar
*
3
;
s
+=
enc
->
minBytesPerChar
*
9
;
do
{
char
*
dataPtr
=
dataBuf
;
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
s
,
lim
,
&
dataPtr
,
dataBufEnd
);
characterDataHandler
(
userData
,
dataBuf
,
dataPtr
-
dataBuf
);
}
while
(
s
!=
lim
);
}
break
;
case
XML_TOK_DATA_CHARS
:
if
(
characterDataHandler
)
{
do
{
char
*
dataPtr
=
dataBuf
;
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
s
,
next
,
&
dataPtr
,
dataBufEnd
);
characterDataHandler
(
userData
,
dataBuf
,
dataPtr
-
dataBuf
);
}
while
(
s
!=
next
);
}
break
;
case
XML_TOK_PI
:
if
(
!
reportProcessingInstruction
(
parser
,
enc
,
s
,
next
))
return
XML_ERROR_NO_MEMORY
;
break
;
}
s
=
next
;
}
/* not reached */
}
/* If tagName is non-null, build a real list of attributes,
otherwise just check the attributes for well-formedness. */
static
enum
XML_Error
storeAtts
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
const
char
*
tagName
,
const
char
*
s
)
{
ELEMENT_TYPE
*
elementType
=
0
;
int
nDefaultAtts
=
0
;
const
char
**
appAtts
=
(
const
char
**
)
atts
;
int
i
;
int
n
;
if
(
tagName
)
{
elementType
=
(
ELEMENT_TYPE
*
)
lookup
(
&
dtd
.
elementTypes
,
tagName
,
0
);
if
(
elementType
)
nDefaultAtts
=
elementType
->
nDefaultAtts
;
}
n
=
XmlGetAttributes
(
enc
,
s
,
attsSize
,
atts
);
if
(
n
+
nDefaultAtts
>
attsSize
)
{
attsSize
=
2
*
n
;
atts
=
realloc
((
void
*
)
atts
,
attsSize
*
sizeof
(
ATTRIBUTE
));
if
(
!
atts
)
return
XML_ERROR_NO_MEMORY
;
if
(
n
>
attsSize
)
XmlGetAttributes
(
enc
,
s
,
n
,
atts
);
}
for
(
i
=
0
;
i
<
n
;
i
++
)
{
ATTRIBUTE_ID
*
attId
=
getAttributeId
(
parser
,
enc
,
atts
[
i
].
name
,
atts
[
i
].
name
+
XmlNameLength
(
enc
,
atts
[
i
].
name
));
if
(
!
attId
)
return
XML_ERROR_NO_MEMORY
;
if
((
attId
->
name
)[
-
1
])
{
errorPtr
=
atts
[
i
].
name
;
return
XML_ERROR_DUPLICATE_ATTRIBUTE
;
}
(
attId
->
name
)[
-
1
]
=
1
;
appAtts
[
i
<<
1
]
=
attId
->
name
;
if
(
!
atts
[
i
].
normalized
)
{
enum
XML_Error
result
;
int
isCdata
=
1
;
if
(
attId
->
maybeTokenized
)
{
int
j
;
for
(
j
=
0
;
j
<
nDefaultAtts
;
j
++
)
{
if
(
attId
==
elementType
->
defaultAtts
[
j
].
id
)
{
isCdata
=
elementType
->
defaultAtts
[
j
].
isCdata
;
break
;
}
}
}
result
=
storeAttributeValue
(
parser
,
enc
,
isCdata
,
atts
[
i
].
valuePtr
,
atts
[
i
].
valueEnd
,
&
tempPool
);
if
(
result
)
return
result
;
if
(
tagName
)
{
appAtts
[(
i
<<
1
)
+
1
]
=
poolStart
(
&
tempPool
);
poolFinish
(
&
tempPool
);
}
else
poolDiscard
(
&
tempPool
);
}
else
if
(
tagName
)
{
appAtts
[(
i
<<
1
)
+
1
]
=
poolStoreString
(
&
tempPool
,
enc
,
atts
[
i
].
valuePtr
,
atts
[
i
].
valueEnd
);
if
(
appAtts
[(
i
<<
1
)
+
1
]
==
0
)
return
XML_ERROR_NO_MEMORY
;
poolFinish
(
&
tempPool
);
}
}
if
(
tagName
)
{
int
j
;
for
(
j
=
0
;
j
<
nDefaultAtts
;
j
++
)
{
const
DEFAULT_ATTRIBUTE
*
da
=
elementType
->
defaultAtts
+
j
;
if
(
!
(
da
->
id
->
name
)[
-
1
]
&&
da
->
value
)
{
(
da
->
id
->
name
)[
-
1
]
=
1
;
appAtts
[
i
<<
1
]
=
da
->
id
->
name
;
appAtts
[(
i
<<
1
)
+
1
]
=
da
->
value
;
i
++
;
}
}
appAtts
[
i
<<
1
]
=
0
;
}
while
(
i
--
>
0
)
((
char
*
)
appAtts
[
i
<<
1
])[
-
1
]
=
0
;
return
XML_ERROR_NONE
;
}
static
enum
XML_Error
prologProcessor
(
XML_Parser
parser
,
const
char
*
s
,
const
char
*
end
,
const
char
**
nextPtr
)
{
for
(;;)
{
const
char
*
next
;
int
tok
=
XmlPrologTok
(
encoding
,
s
,
end
,
&
next
);
if
(
tok
<=
0
)
{
if
(
nextPtr
!=
0
&&
tok
!=
XML_TOK_INVALID
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
switch
(
tok
)
{
case
XML_TOK_INVALID
:
errorPtr
=
next
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_NONE
:
return
XML_ERROR_NO_ELEMENTS
;
case
XML_TOK_PARTIAL
:
return
XML_ERROR_UNCLOSED_TOKEN
;
case
XML_TOK_PARTIAL_CHAR
:
return
XML_ERROR_PARTIAL_CHAR
;
case
XML_TOK_TRAILING_CR
:
errorPtr
=
s
+
encoding
->
minBytesPerChar
;
return
XML_ERROR_NO_ELEMENTS
;
default:
abort
();
}
}
switch
(
XmlTokenRole
(
&
prologState
,
tok
,
s
,
next
,
encoding
))
{
case
XML_ROLE_XML_DECL
:
{
const
char
*
encodingName
=
0
;
const
ENCODING
*
newEncoding
=
0
;
const
char
*
version
;
int
standalone
=
-
1
;
if
(
!
XmlParseXmlDecl
(
0
,
encoding
,
s
,
next
,
&
errorPtr
,
&
version
,
&
encodingName
,
&
newEncoding
,
&
standalone
))
return
XML_ERROR_SYNTAX
;
if
(
newEncoding
)
{
if
(
newEncoding
->
minBytesPerChar
!=
encoding
->
minBytesPerChar
)
{
errorPtr
=
encodingName
;
return
XML_ERROR_INCORRECT_ENCODING
;
}
encoding
=
newEncoding
;
}
else
if
(
encodingName
)
{
errorPtr
=
encodingName
;
return
XML_ERROR_UNKNOWN_ENCODING
;
}
if
(
standalone
==
1
)
dtd
.
standalone
=
1
;
break
;
}
case
XML_ROLE_DOCTYPE_SYSTEM_ID
:
hadExternalDoctype
=
1
;
break
;
case
XML_ROLE_DOCTYPE_PUBLIC_ID
:
case
XML_ROLE_ENTITY_PUBLIC_ID
:
case
XML_ROLE_NOTATION_PUBLIC_ID
:
if
(
!
XmlIsPublicId
(
encoding
,
s
,
next
,
&
errorPtr
))
return
XML_ERROR_SYNTAX
;
break
;
case
XML_ROLE_INSTANCE_START
:
processor
=
contentProcessor
;
if
(
hadExternalDoctype
)
dtd
.
complete
=
0
;
return
contentProcessor
(
parser
,
s
,
end
,
nextPtr
);
case
XML_ROLE_ATTLIST_ELEMENT_NAME
:
{
const
char
*
name
=
poolStoreString
(
&
dtd
.
pool
,
encoding
,
s
,
next
);
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
declElementType
=
(
ELEMENT_TYPE
*
)
lookup
(
&
dtd
.
elementTypes
,
name
,
sizeof
(
ELEMENT_TYPE
));
if
(
!
declElementType
)
return
XML_ERROR_NO_MEMORY
;
if
(
declElementType
->
name
!=
name
)
poolDiscard
(
&
dtd
.
pool
);
else
poolFinish
(
&
dtd
.
pool
);
break
;
}
case
XML_ROLE_ATTRIBUTE_NAME
:
declAttributeId
=
getAttributeId
(
parser
,
encoding
,
s
,
next
);
if
(
!
declAttributeId
)
return
XML_ERROR_NO_MEMORY
;
declAttributeIsCdata
=
0
;
break
;
case
XML_ROLE_ATTRIBUTE_TYPE_CDATA
:
declAttributeIsCdata
=
1
;
break
;
case
XML_ROLE_IMPLIED_ATTRIBUTE_VALUE
:
case
XML_ROLE_REQUIRED_ATTRIBUTE_VALUE
:
if
(
dtd
.
complete
&&
!
defineAttribute
(
declElementType
,
declAttributeId
,
declAttributeIsCdata
,
0
))
return
XML_ERROR_NO_MEMORY
;
break
;
case
XML_ROLE_DEFAULT_ATTRIBUTE_VALUE
:
case
XML_ROLE_FIXED_ATTRIBUTE_VALUE
:
{
const
char
*
attVal
;
enum
XML_Error
result
=
storeAttributeValue
(
parser
,
encoding
,
declAttributeIsCdata
,
s
+
encoding
->
minBytesPerChar
,
next
-
encoding
->
minBytesPerChar
,
&
dtd
.
pool
);
if
(
result
)
return
result
;
attVal
=
poolStart
(
&
dtd
.
pool
);
poolFinish
(
&
dtd
.
pool
);
if
(
dtd
.
complete
&&
!
defineAttribute
(
declElementType
,
declAttributeId
,
declAttributeIsCdata
,
attVal
))
return
XML_ERROR_NO_MEMORY
;
break
;
}
case
XML_ROLE_ENTITY_VALUE
:
{
enum
XML_Error
result
=
storeEntityValue
(
parser
,
s
,
next
);
if
(
result
!=
XML_ERROR_NONE
)
return
result
;
}
break
;
case
XML_ROLE_ENTITY_SYSTEM_ID
:
if
(
declEntity
)
{
declEntity
->
systemId
=
poolStoreString
(
&
dtd
.
pool
,
encoding
,
s
+
encoding
->
minBytesPerChar
,
next
-
encoding
->
minBytesPerChar
);
if
(
!
declEntity
->
systemId
)
return
XML_ERROR_NO_MEMORY
;
poolFinish
(
&
dtd
.
pool
);
}
break
;
case
XML_ROLE_ENTITY_NOTATION_NAME
:
if
(
declEntity
)
{
declEntity
->
notation
=
poolStoreString
(
&
dtd
.
pool
,
encoding
,
s
,
next
);
if
(
!
declEntity
->
notation
)
return
XML_ERROR_NO_MEMORY
;
poolFinish
(
&
dtd
.
pool
);
}
break
;
case
XML_ROLE_GENERAL_ENTITY_NAME
:
{
const
char
*
name
=
poolStoreString
(
&
dtd
.
pool
,
encoding
,
s
,
next
);
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
if
(
dtd
.
complete
)
{
declEntity
=
(
ENTITY
*
)
lookup
(
&
dtd
.
generalEntities
,
name
,
sizeof
(
ENTITY
));
if
(
!
declEntity
)
return
XML_ERROR_NO_MEMORY
;
if
(
declEntity
->
name
!=
name
)
{
poolDiscard
(
&
dtd
.
pool
);
declEntity
=
0
;
}
else
poolFinish
(
&
dtd
.
pool
);
}
else
{
poolDiscard
(
&
dtd
.
pool
);
declEntity
=
0
;
}
}
break
;
case
XML_ROLE_PARAM_ENTITY_NAME
:
declEntity
=
0
;
break
;
case
XML_ROLE_ERROR
:
errorPtr
=
s
;
switch
(
tok
)
{
case
XML_TOK_PARAM_ENTITY_REF
:
return
XML_ERROR_PARAM_ENTITY_REF
;
case
XML_TOK_XML_DECL
:
return
XML_ERROR_MISPLACED_XML_PI
;
default:
return
XML_ERROR_SYNTAX
;
}
case
XML_ROLE_GROUP_OPEN
:
if
(
prologState
.
level
>=
groupSize
)
{
if
(
groupSize
)
groupConnector
=
realloc
(
groupConnector
,
groupSize
*=
2
);
else
groupConnector
=
malloc
(
groupSize
=
32
);
if
(
!
groupConnector
)
return
XML_ERROR_NO_MEMORY
;
}
groupConnector
[
prologState
.
level
]
=
0
;
break
;
case
XML_ROLE_GROUP_SEQUENCE
:
if
(
groupConnector
[
prologState
.
level
]
==
'|'
)
{
errorPtr
=
s
;
return
XML_ERROR_SYNTAX
;
}
groupConnector
[
prologState
.
level
]
=
','
;
break
;
case
XML_ROLE_GROUP_CHOICE
:
if
(
groupConnector
[
prologState
.
level
]
==
','
)
{
errorPtr
=
s
;
return
XML_ERROR_SYNTAX
;
}
groupConnector
[
prologState
.
level
]
=
'|'
;
break
;
case
XML_ROLE_PARAM_ENTITY_REF
:
dtd
.
complete
=
0
;
break
;
case
XML_ROLE_NONE
:
switch
(
tok
)
{
case
XML_TOK_PI
:
if
(
!
reportProcessingInstruction
(
parser
,
encoding
,
s
,
next
))
return
XML_ERROR_NO_MEMORY
;
break
;
}
break
;
}
s
=
next
;
}
/* not reached */
}
static
enum
XML_Error
epilogProcessor
(
XML_Parser
parser
,
const
char
*
s
,
const
char
*
end
,
const
char
**
nextPtr
)
{
processor
=
epilogProcessor
;
for
(;;)
{
const
char
*
next
;
int
tok
=
XmlPrologTok
(
encoding
,
s
,
end
,
&
next
);
switch
(
tok
)
{
case
XML_TOK_TRAILING_CR
:
case
XML_TOK_NONE
:
if
(
nextPtr
)
*
nextPtr
=
end
;
return
XML_ERROR_NONE
;
case
XML_TOK_PROLOG_S
:
case
XML_TOK_COMMENT
:
break
;
case
XML_TOK_PI
:
if
(
!
reportProcessingInstruction
(
parser
,
encoding
,
s
,
next
))
return
XML_ERROR_NO_MEMORY
;
break
;
case
XML_TOK_INVALID
:
errorPtr
=
next
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_PARTIAL
:
if
(
nextPtr
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
errorPtr
=
s
;
return
XML_ERROR_UNCLOSED_TOKEN
;
case
XML_TOK_PARTIAL_CHAR
:
if
(
nextPtr
)
{
*
nextPtr
=
s
;
return
XML_ERROR_NONE
;
}
errorPtr
=
s
;
return
XML_ERROR_PARTIAL_CHAR
;
default:
errorPtr
=
s
;
return
XML_ERROR_JUNK_AFTER_DOC_ELEMENT
;
}
s
=
next
;
}
}
static
enum
XML_Error
errorProcessor
(
XML_Parser
parser
,
const
char
*
s
,
const
char
*
end
,
const
char
**
nextPtr
)
{
return
errorCode
;
}
static
enum
XML_Error
storeAttributeValue
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
int
isCdata
,
const
char
*
ptr
,
const
char
*
end
,
STRING_POOL
*
pool
)
{
enum
XML_Error
result
=
appendAttributeValue
(
parser
,
enc
,
isCdata
,
ptr
,
end
,
pool
);
if
(
result
)
return
result
;
if
(
!
isCdata
&&
poolLength
(
pool
)
&&
poolLastByte
(
pool
)
==
' '
)
poolChop
(
pool
);
if
(
!
poolAppendByte
(
pool
,
0
))
return
XML_ERROR_NO_MEMORY
;
return
XML_ERROR_NONE
;
}
static
enum
XML_Error
appendAttributeValue
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
int
isCdata
,
const
char
*
ptr
,
const
char
*
end
,
STRING_POOL
*
pool
)
{
const
ENCODING
*
utf8
=
XmlGetInternalEncoding
(
XML_UTF8_ENCODING
);
for
(;;)
{
const
char
*
next
;
int
tok
=
XmlAttributeValueTok
(
enc
,
ptr
,
end
,
&
next
);
switch
(
tok
)
{
case
XML_TOK_NONE
:
return
XML_ERROR_NONE
;
case
XML_TOK_INVALID
:
errorPtr
=
next
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_PARTIAL
:
errorPtr
=
ptr
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_CHAR_REF
:
{
char
buf
[
XML_MAX_BYTES_PER_CHAR
];
int
i
;
int
n
=
XmlCharRefNumber
(
enc
,
ptr
);
if
(
n
<
0
)
{
errorPtr
=
ptr
;
return
XML_ERROR_BAD_CHAR_REF
;
}
if
(
!
isCdata
&&
n
==
' '
&&
(
poolLength
(
pool
)
==
0
||
poolLastByte
(
pool
)
==
' '
))
break
;
n
=
XmlEncode
(
utf8
,
n
,
buf
);
if
(
!
n
)
{
errorPtr
=
ptr
;
return
XML_ERROR_BAD_CHAR_REF
;
}
for
(
i
=
0
;
i
<
n
;
i
++
)
{
if
(
!
poolAppendByte
(
pool
,
buf
[
i
]))
return
XML_ERROR_NO_MEMORY
;
}
}
break
;
case
XML_TOK_DATA_CHARS
:
if
(
!
poolAppend
(
pool
,
enc
,
ptr
,
next
))
return
XML_ERROR_NO_MEMORY
;
break
;
break
;
case
XML_TOK_TRAILING_CR
:
next
=
ptr
+
enc
->
minBytesPerChar
;
/* fall through */
case
XML_TOK_ATTRIBUTE_VALUE_S
:
case
XML_TOK_DATA_NEWLINE
:
if
(
!
isCdata
&&
(
poolLength
(
pool
)
==
0
||
poolLastByte
(
pool
)
==
' '
))
break
;
if
(
!
poolAppendByte
(
pool
,
' '
))
return
XML_ERROR_NO_MEMORY
;
break
;
case
XML_TOK_ENTITY_REF
:
{
const
char
*
name
=
poolStoreString
(
&
temp2Pool
,
enc
,
ptr
+
enc
->
minBytesPerChar
,
next
-
enc
->
minBytesPerChar
);
ENTITY
*
entity
;
if
(
!
name
)
return
XML_ERROR_NO_MEMORY
;
entity
=
(
ENTITY
*
)
lookup
(
&
dtd
.
generalEntities
,
name
,
0
);
poolDiscard
(
&
temp2Pool
);
if
(
!
entity
)
{
if
(
dtd
.
complete
)
{
errorPtr
=
ptr
;
return
XML_ERROR_UNDEFINED_ENTITY
;
}
}
else
if
(
entity
->
open
)
{
errorPtr
=
ptr
;
return
XML_ERROR_RECURSIVE_ENTITY_REF
;
}
else
if
(
entity
->
notation
)
{
errorPtr
=
ptr
;
return
XML_ERROR_BINARY_ENTITY_REF
;
}
else
if
(
entity
->
magic
)
{
int
i
;
for
(
i
=
0
;
i
<
entity
->
textLen
;
i
++
)
if
(
!
poolAppendByte
(
pool
,
entity
->
textPtr
[
i
]))
return
XML_ERROR_NO_MEMORY
;
}
else
if
(
!
entity
->
textPtr
)
{
errorPtr
=
ptr
;
return
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
;
}
else
{
enum
XML_Error
result
;
const
char
*
textEnd
=
entity
->
textPtr
+
entity
->
textLen
;
entity
->
open
=
1
;
result
=
appendAttributeValue
(
parser
,
utf8
,
isCdata
,
entity
->
textPtr
,
textEnd
,
pool
);
entity
->
open
=
0
;
if
(
result
)
{
errorPtr
=
ptr
;
return
result
;
}
}
}
break
;
default:
abort
();
}
ptr
=
next
;
}
/* not reached */
}
static
enum
XML_Error
storeEntityValue
(
XML_Parser
parser
,
const
char
*
entityTextPtr
,
const
char
*
entityTextEnd
)
{
const
ENCODING
*
utf8
=
XmlGetInternalEncoding
(
XML_UTF8_ENCODING
);
STRING_POOL
*
pool
=
&
(
dtd
.
pool
);
entityTextPtr
+=
encoding
->
minBytesPerChar
;
entityTextEnd
-=
encoding
->
minBytesPerChar
;
for
(;;)
{
const
char
*
next
;
int
tok
=
XmlEntityValueTok
(
encoding
,
entityTextPtr
,
entityTextEnd
,
&
next
);
switch
(
tok
)
{
case
XML_TOK_PARAM_ENTITY_REF
:
errorPtr
=
entityTextPtr
;
return
XML_ERROR_SYNTAX
;
case
XML_TOK_NONE
:
if
(
declEntity
)
{
declEntity
->
textPtr
=
pool
->
start
;
declEntity
->
textLen
=
pool
->
ptr
-
pool
->
start
;
poolFinish
(
pool
);
}
else
poolDiscard
(
pool
);
return
XML_ERROR_NONE
;
case
XML_TOK_ENTITY_REF
:
case
XML_TOK_DATA_CHARS
:
if
(
!
poolAppend
(
pool
,
encoding
,
entityTextPtr
,
next
))
return
XML_ERROR_NO_MEMORY
;
break
;
case
XML_TOK_TRAILING_CR
:
next
=
entityTextPtr
+
encoding
->
minBytesPerChar
;
/* fall through */
case
XML_TOK_DATA_NEWLINE
:
if
(
pool
->
end
==
pool
->
ptr
&&
!
poolGrow
(
pool
))
return
XML_ERROR_NO_MEMORY
;
*
(
pool
->
ptr
)
++
=
'\n'
;
break
;
case
XML_TOK_CHAR_REF
:
{
char
buf
[
XML_MAX_BYTES_PER_CHAR
];
int
i
;
int
n
=
XmlCharRefNumber
(
encoding
,
entityTextPtr
);
if
(
n
<
0
)
{
errorPtr
=
entityTextPtr
;
return
XML_ERROR_BAD_CHAR_REF
;
}
n
=
XmlEncode
(
utf8
,
n
,
buf
);
if
(
!
n
)
{
errorPtr
=
entityTextPtr
;
return
XML_ERROR_BAD_CHAR_REF
;
}
for
(
i
=
0
;
i
<
n
;
i
++
)
{
if
(
pool
->
end
==
pool
->
ptr
&&
!
poolGrow
(
pool
))
return
XML_ERROR_NO_MEMORY
;
*
(
pool
->
ptr
)
++
=
buf
[
i
];
}
}
break
;
case
XML_TOK_PARTIAL
:
errorPtr
=
entityTextPtr
;
return
XML_ERROR_INVALID_TOKEN
;
case
XML_TOK_INVALID
:
errorPtr
=
next
;
return
XML_ERROR_INVALID_TOKEN
;
default:
abort
();
}
entityTextPtr
=
next
;
}
/* not reached */
}
static
void
normalizeLines
(
char
*
s
)
{
char
*
p
;
s
=
strchr
(
s
,
'\r'
);
if
(
!
s
)
return
;
p
=
s
;
while
(
*
s
)
{
if
(
*
s
==
'\r'
)
{
*
p
++
=
'\n'
;
if
(
*++
s
==
'\n'
)
s
++
;
}
else
*
p
++
=
*
s
++
;
}
*
p
=
'\0'
;
}
static
int
reportProcessingInstruction
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
const
char
*
start
,
const
char
*
end
)
{
const
char
*
target
;
char
*
data
;
const
char
*
tem
;
if
(
!
processingInstructionHandler
)
return
1
;
target
=
start
+
enc
->
minBytesPerChar
*
2
;
tem
=
target
+
XmlNameLength
(
enc
,
target
);
target
=
poolStoreString
(
&
tempPool
,
enc
,
target
,
tem
);
if
(
!
target
)
return
0
;
poolFinish
(
&
tempPool
);
data
=
poolStoreString
(
&
tempPool
,
enc
,
XmlSkipS
(
enc
,
tem
),
end
-
enc
->
minBytesPerChar
*
2
);
if
(
!
data
)
return
0
;
normalizeLines
(
data
);
processingInstructionHandler
(
userData
,
target
,
data
);
poolClear
(
&
tempPool
);
return
1
;
}
static
int
defineAttribute
(
ELEMENT_TYPE
*
type
,
ATTRIBUTE_ID
*
attId
,
int
isCdata
,
const
char
*
value
)
{
DEFAULT_ATTRIBUTE
*
att
;
if
(
type
->
nDefaultAtts
==
type
->
allocDefaultAtts
)
{
if
(
type
->
allocDefaultAtts
==
0
)
type
->
allocDefaultAtts
=
8
;
else
type
->
allocDefaultAtts
*=
2
;
type
->
defaultAtts
=
realloc
(
type
->
defaultAtts
,
type
->
allocDefaultAtts
*
sizeof
(
DEFAULT_ATTRIBUTE
));
if
(
!
type
->
defaultAtts
)
return
0
;
}
att
=
type
->
defaultAtts
+
type
->
nDefaultAtts
;
att
->
id
=
attId
;
att
->
value
=
value
;
att
->
isCdata
=
isCdata
;
if
(
!
isCdata
)
attId
->
maybeTokenized
=
1
;
type
->
nDefaultAtts
+=
1
;
return
1
;
}
static
ATTRIBUTE_ID
*
getAttributeId
(
XML_Parser
parser
,
const
ENCODING
*
enc
,
const
char
*
start
,
const
char
*
end
)
{
ATTRIBUTE_ID
*
id
;
const
char
*
name
;
if
(
!
poolAppendByte
(
&
dtd
.
pool
,
0
))
return
0
;
name
=
poolStoreString
(
&
dtd
.
pool
,
enc
,
start
,
end
);
if
(
!
name
)
return
0
;
++
name
;
id
=
(
ATTRIBUTE_ID
*
)
lookup
(
&
dtd
.
attributeIds
,
name
,
sizeof
(
ATTRIBUTE_ID
));
if
(
!
id
)
return
0
;
if
(
id
->
name
!=
name
)
poolDiscard
(
&
dtd
.
pool
);
else
poolFinish
(
&
dtd
.
pool
);
return
id
;
}
static
int
dtdInit
(
DTD
*
p
)
{
static
const
char
*
names
[]
=
{
"lt"
,
"amp"
,
"gt"
,
"quot"
,
"apos"
};
static
const
char
chars
[]
=
{
'<'
,
'&'
,
'>'
,
'"'
,
'\''
};
int
i
;
poolInit
(
&
(
p
->
pool
));
hashTableInit
(
&
(
p
->
generalEntities
));
for
(
i
=
0
;
i
<
5
;
i
++
)
{
ENTITY
*
entity
=
(
ENTITY
*
)
lookup
(
&
(
p
->
generalEntities
),
names
[
i
],
sizeof
(
ENTITY
));
if
(
!
entity
)
return
0
;
entity
->
textPtr
=
chars
+
i
;
entity
->
textLen
=
1
;
entity
->
magic
=
1
;
}
hashTableInit
(
&
(
p
->
elementTypes
));
hashTableInit
(
&
(
p
->
attributeIds
));
p
->
complete
=
1
;
return
1
;
}
static
void
dtdDestroy
(
DTD
*
p
)
{
HASH_TABLE_ITER
iter
;
hashTableIterInit
(
&
iter
,
&
(
p
->
elementTypes
));
for
(;;)
{
ELEMENT_TYPE
*
e
=
(
ELEMENT_TYPE
*
)
hashTableIterNext
(
&
iter
);
if
(
!
e
)
break
;
free
(
e
->
defaultAtts
);
}
hashTableDestroy
(
&
(
p
->
generalEntities
));
hashTableDestroy
(
&
(
p
->
elementTypes
));
hashTableDestroy
(
&
(
p
->
attributeIds
));
poolDestroy
(
&
(
p
->
pool
));
}
static
void
poolInit
(
STRING_POOL
*
pool
)
{
pool
->
blocks
=
0
;
pool
->
freeBlocks
=
0
;
pool
->
start
=
0
;
pool
->
ptr
=
0
;
pool
->
end
=
0
;
}
static
void
poolClear
(
STRING_POOL
*
pool
)
{
if
(
!
pool
->
freeBlocks
)
pool
->
freeBlocks
=
pool
->
blocks
;
else
{
BLOCK
*
p
=
pool
->
blocks
;
while
(
p
)
{
BLOCK
*
tem
=
p
->
next
;
p
->
next
=
pool
->
freeBlocks
;
pool
->
freeBlocks
=
p
;
p
=
tem
;
}
}
pool
->
blocks
=
0
;
pool
->
start
=
0
;
pool
->
ptr
=
0
;
pool
->
end
=
0
;
}
static
void
poolDestroy
(
STRING_POOL
*
pool
)
{
BLOCK
*
p
=
pool
->
blocks
;
while
(
p
)
{
BLOCK
*
tem
=
p
->
next
;
free
(
p
);
p
=
tem
;
}
pool
->
blocks
=
0
;
p
=
pool
->
freeBlocks
;
while
(
p
)
{
BLOCK
*
tem
=
p
->
next
;
free
(
p
);
p
=
tem
;
}
pool
->
freeBlocks
=
0
;
pool
->
ptr
=
0
;
pool
->
start
=
0
;
pool
->
end
=
0
;
}
static
char
*
poolAppend
(
STRING_POOL
*
pool
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
)
{
if
(
!
pool
->
ptr
&&
!
poolGrow
(
pool
))
return
0
;
for
(;;)
{
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
ptr
,
end
,
&
(
pool
->
ptr
),
pool
->
end
);
if
(
ptr
==
end
)
break
;
if
(
!
poolGrow
(
pool
))
return
0
;
}
return
pool
->
start
;
}
static
char
*
poolStoreString
(
STRING_POOL
*
pool
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
)
{
if
(
!
poolAppend
(
pool
,
enc
,
ptr
,
end
))
return
0
;
if
(
pool
->
ptr
==
pool
->
end
&&
!
poolGrow
(
pool
))
return
0
;
*
(
pool
->
ptr
)
++
=
0
;
return
pool
->
start
;
}
static
int
poolGrow
(
STRING_POOL
*
pool
)
{
if
(
pool
->
freeBlocks
)
{
if
(
pool
->
start
==
0
)
{
pool
->
blocks
=
pool
->
freeBlocks
;
pool
->
freeBlocks
=
pool
->
freeBlocks
->
next
;
pool
->
blocks
->
next
=
0
;
pool
->
start
=
pool
->
blocks
->
s
;
pool
->
end
=
pool
->
start
+
pool
->
blocks
->
size
;
pool
->
ptr
=
pool
->
start
;
return
1
;
}
if
(
pool
->
end
-
pool
->
start
<
pool
->
freeBlocks
->
size
)
{
BLOCK
*
tem
=
pool
->
freeBlocks
->
next
;
pool
->
freeBlocks
->
next
=
pool
->
blocks
;
pool
->
blocks
=
pool
->
freeBlocks
;
pool
->
freeBlocks
=
tem
;
memcpy
(
pool
->
blocks
->
s
,
pool
->
start
,
pool
->
end
-
pool
->
start
);
pool
->
ptr
=
pool
->
blocks
->
s
+
(
pool
->
ptr
-
pool
->
start
);
pool
->
start
=
pool
->
blocks
->
s
;
pool
->
end
=
pool
->
start
+
pool
->
blocks
->
size
;
return
1
;
}
}
if
(
pool
->
blocks
&&
pool
->
start
==
pool
->
blocks
->
s
)
{
int
blockSize
=
(
pool
->
end
-
pool
->
start
)
*
2
;
pool
->
blocks
=
realloc
(
pool
->
blocks
,
offsetof
(
BLOCK
,
s
)
+
blockSize
);
if
(
!
pool
->
blocks
)
return
0
;
pool
->
blocks
->
size
=
blockSize
;
pool
->
ptr
=
pool
->
blocks
->
s
+
(
pool
->
ptr
-
pool
->
start
);
pool
->
start
=
pool
->
blocks
->
s
;
pool
->
end
=
pool
->
start
+
blockSize
;
}
else
{
BLOCK
*
tem
;
int
blockSize
=
pool
->
end
-
pool
->
start
;
if
(
blockSize
<
INIT_BLOCK_SIZE
)
blockSize
=
INIT_BLOCK_SIZE
;
else
blockSize
*=
2
;
tem
=
malloc
(
offsetof
(
BLOCK
,
s
)
+
blockSize
);
if
(
!
tem
)
return
0
;
tem
->
size
=
blockSize
;
tem
->
next
=
pool
->
blocks
;
pool
->
blocks
=
tem
;
memcpy
(
tem
->
s
,
pool
->
start
,
pool
->
ptr
-
pool
->
start
);
pool
->
ptr
=
tem
->
s
+
(
pool
->
ptr
-
pool
->
start
);
pool
->
start
=
tem
->
s
;
pool
->
end
=
tem
->
s
+
blockSize
;
}
return
1
;
}
lib/python/Shared/DC/xml/pyexpat/expat/xmlparse/xmlparse.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#ifndef XmlParse_INCLUDED
#define XmlParse_INCLUDED 1
#ifdef __cplusplus
extern
"C"
{
#endif
#ifndef XMLPARSEAPI
#define XMLPARSEAPI
/* as nothing */
#endif
typedef
void
*
XML_Parser
;
/* Constructs a new parser; encoding should be the name of the charset from
the Content-Type header if the Content-Type is text/xml, or null otherwise. */
XML_Parser
XMLPARSEAPI
XML_ParserCreate
(
const
char
*
encoding
);
/* Information is UTF-8 encoded. */
/* atts is array of name/value pairs, terminated by NULL;
names and values are '\0' terminated. */
typedef
void
(
*
XML_StartElementHandler
)(
void
*
userData
,
const
char
*
name
,
const
char
**
atts
);
typedef
void
(
*
XML_EndElementHandler
)(
void
*
userData
,
const
char
*
name
);
typedef
void
(
*
XML_CharacterDataHandler
)(
void
*
userData
,
const
char
*
s
,
int
len
);
/* target and data are '\0' terminated */
typedef
void
(
*
XML_ProcessingInstructionHandler
)(
void
*
userData
,
const
char
*
target
,
const
char
*
data
);
void
XMLPARSEAPI
XML_SetElementHandler
(
XML_Parser
parser
,
XML_StartElementHandler
start
,
XML_EndElementHandler
end
);
void
XMLPARSEAPI
XML_SetCharacterDataHandler
(
XML_Parser
parser
,
XML_CharacterDataHandler
handler
);
void
XMLPARSEAPI
XML_SetProcessingInstructionHandler
(
XML_Parser
parser
,
XML_ProcessingInstructionHandler
handler
);
/* This value is passed as the userData argument to callbacks. */
void
XMLPARSEAPI
XML_SetUserData
(
XML_Parser
parser
,
void
*
userData
);
/* Parses some input. Returns 0 if a fatal error is detected.
The last call to XML_Parse must have isFinal true;
len may be zero for this call (or any other). */
int
XMLPARSEAPI
XML_Parse
(
XML_Parser
parser
,
const
char
*
s
,
int
len
,
int
isFinal
);
void
XMLPARSEAPI
*
XML_GetBuffer
(
XML_Parser
parser
,
int
len
);
int
XMLPARSEAPI
XML_ParseBuffer
(
XML_Parser
parser
,
int
len
,
int
isFinal
);
/* If XML_Parser or XML_ParseEnd have returned 0, then XML_GetError*
returns information about the error. */
enum
XML_Error
{
XML_ERROR_NONE
,
XML_ERROR_NO_MEMORY
,
XML_ERROR_SYNTAX
,
XML_ERROR_NO_ELEMENTS
,
XML_ERROR_INVALID_TOKEN
,
XML_ERROR_UNCLOSED_TOKEN
,
XML_ERROR_PARTIAL_CHAR
,
XML_ERROR_TAG_MISMATCH
,
XML_ERROR_DUPLICATE_ATTRIBUTE
,
XML_ERROR_JUNK_AFTER_DOC_ELEMENT
,
XML_ERROR_PARAM_ENTITY_REF
,
XML_ERROR_UNDEFINED_ENTITY
,
XML_ERROR_RECURSIVE_ENTITY_REF
,
XML_ERROR_ASYNC_ENTITY
,
XML_ERROR_BAD_CHAR_REF
,
XML_ERROR_BINARY_ENTITY_REF
,
XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF
,
XML_ERROR_MISPLACED_XML_PI
,
XML_ERROR_UNKNOWN_ENCODING
,
XML_ERROR_INCORRECT_ENCODING
};
int
XMLPARSEAPI
XML_GetErrorCode
(
XML_Parser
parser
);
int
XMLPARSEAPI
XML_GetErrorLineNumber
(
XML_Parser
parser
);
int
XMLPARSEAPI
XML_GetErrorColumnNumber
(
XML_Parser
parser
);
long
XMLPARSEAPI
XML_GetErrorByteIndex
(
XML_Parser
parser
);
void
XMLPARSEAPI
XML_ParserFree
(
XML_Parser
parser
);
const
char
XMLPARSEAPI
*
XML_ErrorString
(
int
code
);
#ifdef __cplusplus
}
#endif
#endif
/* not XmlParse_INCLUDED */
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/asciitab.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
/* 0x00 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x04 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x08 */
BT_NONXML
,
BT_S
,
BT_LF
,
BT_NONXML
,
/* 0x0C */
BT_NONXML
,
BT_CR
,
BT_NONXML
,
BT_NONXML
,
/* 0x10 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x14 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x18 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x1C */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x20 */
BT_S
,
BT_EXCL
,
BT_QUOT
,
BT_NUM
,
/* 0x24 */
BT_OTHER
,
BT_PERCNT
,
BT_AMP
,
BT_APOS
,
/* 0x28 */
BT_LPAR
,
BT_RPAR
,
BT_AST
,
BT_PLUS
,
/* 0x2C */
BT_COMMA
,
BT_MINUS
,
BT_NAME
,
BT_SOL
,
/* 0x30 */
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
/* 0x34 */
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
/* 0x38 */
BT_DIGIT
,
BT_DIGIT
,
BT_NMSTRT
,
BT_SEMI
,
/* 0x3C */
BT_LT
,
BT_EQUALS
,
BT_GT
,
BT_QUEST
,
/* 0x40 */
BT_OTHER
,
BT_HEX
,
BT_HEX
,
BT_HEX
,
/* 0x44 */
BT_HEX
,
BT_HEX
,
BT_HEX
,
BT_NMSTRT
,
/* 0x48 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x4C */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x50 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x54 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x58 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_LSQB
,
/* 0x5C */
BT_OTHER
,
BT_RSQB
,
BT_OTHER
,
BT_NMSTRT
,
/* 0x60 */
BT_OTHER
,
BT_HEX
,
BT_HEX
,
BT_HEX
,
/* 0x64 */
BT_HEX
,
BT_HEX
,
BT_HEX
,
BT_NMSTRT
,
/* 0x68 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x6C */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x70 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x74 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x78 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_OTHER
,
/* 0x7C */
BT_VERBAR
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/dllmain.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include <windows.h>
BOOL
WINAPI
DllMain
(
HANDLE
hInst
,
ULONG
ul_reason_for_call
,
LPVOID
lpReserved
)
{
return
TRUE
;
}
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/iasciitab.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
/* Like asciitab.h, except that 0xD has code BT_S rather than BT_CR */
/* 0x00 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x04 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x08 */
BT_NONXML
,
BT_S
,
BT_LF
,
BT_NONXML
,
/* 0x0C */
BT_NONXML
,
BT_S
,
BT_NONXML
,
BT_NONXML
,
/* 0x10 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x14 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x18 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x1C */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0x20 */
BT_S
,
BT_EXCL
,
BT_QUOT
,
BT_NUM
,
/* 0x24 */
BT_OTHER
,
BT_PERCNT
,
BT_AMP
,
BT_APOS
,
/* 0x28 */
BT_LPAR
,
BT_RPAR
,
BT_AST
,
BT_PLUS
,
/* 0x2C */
BT_COMMA
,
BT_MINUS
,
BT_NAME
,
BT_SOL
,
/* 0x30 */
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
/* 0x34 */
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
BT_DIGIT
,
/* 0x38 */
BT_DIGIT
,
BT_DIGIT
,
BT_NMSTRT
,
BT_SEMI
,
/* 0x3C */
BT_LT
,
BT_EQUALS
,
BT_GT
,
BT_QUEST
,
/* 0x40 */
BT_OTHER
,
BT_HEX
,
BT_HEX
,
BT_HEX
,
/* 0x44 */
BT_HEX
,
BT_HEX
,
BT_HEX
,
BT_NMSTRT
,
/* 0x48 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x4C */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x50 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x54 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x58 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_LSQB
,
/* 0x5C */
BT_OTHER
,
BT_RSQB
,
BT_OTHER
,
BT_NMSTRT
,
/* 0x60 */
BT_OTHER
,
BT_HEX
,
BT_HEX
,
BT_HEX
,
/* 0x64 */
BT_HEX
,
BT_HEX
,
BT_HEX
,
BT_NMSTRT
,
/* 0x68 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x6C */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x70 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x74 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0x78 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_OTHER
,
/* 0x7C */
BT_VERBAR
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/latin1tab.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
/* 0x80 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x84 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x88 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x8C */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x90 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x94 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x98 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0x9C */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xA0 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xA4 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xA8 */
BT_OTHER
,
BT_OTHER
,
BT_NMSTRT
,
BT_OTHER
,
/* 0xAC */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xB0 */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xB4 */
BT_OTHER
,
BT_NMSTRT
,
BT_OTHER
,
BT_NAME
,
/* 0xB8 */
BT_OTHER
,
BT_OTHER
,
BT_NMSTRT
,
BT_OTHER
,
/* 0xBC */
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
BT_OTHER
,
/* 0xC0 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xC4 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xC8 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xCC */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xD0 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xD4 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_OTHER
,
/* 0xD8 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xDC */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xE0 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xE4 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xE8 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xEC */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xF0 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xF4 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_OTHER
,
/* 0xF8 */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
/* 0xFC */
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
BT_NMSTRT
,
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/nametab.h
0 → 100644
View file @
d774be46
static
const
unsigned
namingBitmap
[]
=
{
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x00000000
,
0x04000000
,
0x87FFFFFE
,
0x07FFFFFE
,
0x00000000
,
0x00000000
,
0xFF7FFFFF
,
0xFF7FFFFF
,
0xFFFFFFFF
,
0x7FF3FFFF
,
0xFFFFFDFE
,
0x7FFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFE00F
,
0xFC31FFFF
,
0x00FFFFFF
,
0x00000000
,
0xFFFF0000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xF80001FF
,
0x00000003
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFD740
,
0xFFFFFFFB
,
0x547F7FFF
,
0x000FFFFD
,
0xFFFFDFFE
,
0xFFFFFFFF
,
0xDFFEFFFF
,
0xFFFFFFFF
,
0xFFFF0003
,
0xFFFFFFFF
,
0xFFFF199F
,
0x033FCFFF
,
0x00000000
,
0xFFFE0000
,
0x027FFFFF
,
0xFFFFFFFE
,
0x0000007F
,
0x00000000
,
0xFFFF0000
,
0x000707FF
,
0x00000000
,
0x07FFFFFE
,
0x000007FE
,
0xFFFE0000
,
0xFFFFFFFF
,
0x7CFFFFFF
,
0x002F7FFF
,
0x00000060
,
0xFFFFFFE0
,
0x23FFFFFF
,
0xFF000000
,
0x00000003
,
0xFFF99FE0
,
0x03C5FDFF
,
0xB0000000
,
0x00030003
,
0xFFF987E0
,
0x036DFDFF
,
0x5E000000
,
0x001C0000
,
0xFFFBAFE0
,
0x23EDFDFF
,
0x00000000
,
0x00000001
,
0xFFF99FE0
,
0x23CDFDFF
,
0xB0000000
,
0x00000003
,
0xD63DC7E0
,
0x03BFC718
,
0x00000000
,
0x00000000
,
0xFFFDDFE0
,
0x03EFFDFF
,
0x00000000
,
0x00000003
,
0xFFFDDFE0
,
0x03EFFDFF
,
0x40000000
,
0x00000003
,
0xFFFDDFE0
,
0x03FFFDFF
,
0x00000000
,
0x00000003
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFFFE
,
0x000D7FFF
,
0x0000003F
,
0x00000000
,
0xFEF02596
,
0x200D6CAE
,
0x0000001F
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFEFF
,
0x000003FF
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFF003F
,
0x007FFFFF
,
0x0007DAED
,
0x50000000
,
0x82315001
,
0x002C62AB
,
0x40000000
,
0xF580C900
,
0x00000007
,
0x02010800
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x0FFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x03FFFFFF
,
0x3F3FFFFF
,
0xFFFFFFFF
,
0xAAFF3F3F
,
0x3FFFFFFF
,
0xFFFFFFFF
,
0x5FDFFFFF
,
0x0FCF1FDC
,
0x1FDC1FFF
,
0x00000000
,
0x00004C40
,
0x00000000
,
0x00000000
,
0x00000007
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000080
,
0x000003FE
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0x001FFFFF
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0x07FFFFFF
,
0xFFFFFFE0
,
0x00001FFF
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x0000003F
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x0000000F
,
0x00000000
,
0x00000000
,
0x00000000
,
0x07FF6000
,
0x87FFFFFE
,
0x07FFFFFE
,
0x00000000
,
0x00800000
,
0xFF7FFFFF
,
0xFF7FFFFF
,
0x00FFFFFF
,
0x00000000
,
0xFFFF0000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xF80001FF
,
0x00030003
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x0000003F
,
0x00000003
,
0xFFFFD7C0
,
0xFFFFFFFB
,
0x547F7FFF
,
0x000FFFFD
,
0xFFFFDFFE
,
0xFFFFFFFF
,
0xDFFEFFFF
,
0xFFFFFFFF
,
0xFFFF007B
,
0xFFFFFFFF
,
0xFFFF199F
,
0x033FCFFF
,
0x00000000
,
0xFFFE0000
,
0x027FFFFF
,
0xFFFFFFFE
,
0xFFFE007F
,
0xBBFFFFFB
,
0xFFFF0016
,
0x000707FF
,
0x00000000
,
0x07FFFFFE
,
0x0007FFFF
,
0xFFFF03FF
,
0xFFFFFFFF
,
0x7CFFFFFF
,
0xFFEF7FFF
,
0x03FF3DFF
,
0xFFFFFFEE
,
0xF3FFFFFF
,
0xFF1E3FFF
,
0x0000FFCF
,
0xFFF99FEE
,
0xD3C5FDFF
,
0xB080399F
,
0x0003FFCF
,
0xFFF987E4
,
0xD36DFDFF
,
0x5E003987
,
0x001FFFC0
,
0xFFFBAFEE
,
0xF3EDFDFF
,
0x00003BBF
,
0x0000FFC1
,
0xFFF99FEE
,
0xF3CDFDFF
,
0xB0C0398F
,
0x0000FFC3
,
0xD63DC7EC
,
0xC3BFC718
,
0x00803DC7
,
0x0000FF80
,
0xFFFDDFEE
,
0xC3EFFDFF
,
0x00603DDF
,
0x0000FFC3
,
0xFFFDDFEC
,
0xC3EFFDFF
,
0x40603DDF
,
0x0000FFC3
,
0xFFFDDFEC
,
0xC3FFFDFF
,
0x00803DCF
,
0x0000FFC3
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0xFFFFFFFE
,
0x07FF7FFF
,
0x03FF7FFF
,
0x00000000
,
0xFEF02596
,
0x3BFF6CAE
,
0x03FF3F5F
,
0x00000000
,
0x03000000
,
0xC2A003FF
,
0xFFFFFEFF
,
0xFFFE03FF
,
0xFEBF0FDF
,
0x02FE3FFF
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
,
0x1FFF0000
,
0x00000002
,
0x000000A0
,
0x003EFFFE
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0x661FFFFF
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0x77FFFFFF
,
};
static
const
unsigned
char
nmstrtPages
[]
=
{
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x00
,
0x00
,
0x09
,
0x0A
,
0x0B
,
0x0C
,
0x0D
,
0x0E
,
0x0F
,
0x10
,
0x11
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x12
,
0x13
,
0x00
,
0x14
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x15
,
0x16
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x17
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x18
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
};
static
const
unsigned
char
namePages
[]
=
{
0x19
,
0x03
,
0x1A
,
0x1B
,
0x1C
,
0x1D
,
0x1E
,
0x00
,
0x00
,
0x1F
,
0x20
,
0x21
,
0x22
,
0x23
,
0x24
,
0x25
,
0x10
,
0x11
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x12
,
0x13
,
0x26
,
0x14
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x27
,
0x16
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x17
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x01
,
0x18
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
};
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/utf8tab.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
/* 0x80 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x84 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x88 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x8C */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x90 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x94 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x98 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0x9C */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xA0 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xA4 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xA8 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xAC */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xB0 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xB4 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xB8 */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xBC */
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
BT_TRAIL
,
/* 0xC0 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xC4 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xC8 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xCC */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xD0 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xD4 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xD8 */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xDC */
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
BT_LEAD2
,
/* 0xE0 */
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
/* 0xE4 */
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
/* 0xE8 */
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
/* 0xEC */
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
BT_LEAD3
,
/* 0xF0 */
BT_LEAD4
,
BT_LEAD4
,
BT_LEAD4
,
BT_LEAD4
,
/* 0xF4 */
BT_LEAD4
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0xF8 */
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
BT_NONXML
,
/* 0xFC */
BT_NONXML
,
BT_NONXML
,
BT_MALFORM
,
BT_MALFORM
,
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmldef.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
/* This file can be used for any definitions needed in
particular environments. */
#ifdef MOZILLA
#include "nspr.h"
#define malloc(x) PR_Calloc(1,(x))
#define calloc(x, y) PR_Calloc((x),(y))
#define free(x) PR_Free(x)
#define int int32
#endif
/* MOZILLA */
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include "xmldef.h"
#include "xmlrole.h"
/* Doesn't check:
that ,| are not mixed in a model group
content of literals
*/
#ifndef MIN_BYTES_PER_CHAR
#define MIN_BYTES_PER_CHAR(enc) ((enc)->minBytesPerChar)
#endif
typedef
int
PROLOG_HANDLER
(
struct
prolog_state
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
);
static
PROLOG_HANDLER
prolog0
,
prolog1
,
prolog2
,
doctype0
,
doctype1
,
doctype2
,
doctype3
,
doctype4
,
doctype5
,
internalSubset
,
entity0
,
entity1
,
entity2
,
entity3
,
entity4
,
entity5
,
entity6
,
entity7
,
entity8
,
entity9
,
notation0
,
notation1
,
notation2
,
notation3
,
notation4
,
attlist0
,
attlist1
,
attlist2
,
attlist3
,
attlist4
,
attlist5
,
attlist6
,
attlist7
,
attlist8
,
attlist9
,
element0
,
element1
,
element2
,
element3
,
element4
,
element5
,
element6
,
element7
,
declClose
,
error
;
static
int
syntaxError
(
PROLOG_STATE
*
);
static
int
prolog0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
state
->
handler
=
prolog1
;
return
XML_ROLE_NONE
;
case
XML_TOK_XML_DECL
:
state
->
handler
=
prolog1
;
return
XML_ROLE_XML_DECL
;
case
XML_TOK_PI
:
state
->
handler
=
prolog1
;
return
XML_ROLE_NONE
;
case
XML_TOK_COMMENT
:
state
->
handler
=
prolog1
;
case
XML_TOK_BOM
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_OPEN
:
if
(
!
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"DOCTYPE"
))
break
;
state
->
handler
=
doctype0
;
return
XML_ROLE_NONE
;
case
XML_TOK_INSTANCE_START
:
state
->
handler
=
error
;
return
XML_ROLE_INSTANCE_START
;
}
return
syntaxError
(
state
);
}
static
int
prolog1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_PI
:
case
XML_TOK_COMMENT
:
case
XML_TOK_BOM
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_OPEN
:
if
(
!
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"DOCTYPE"
))
break
;
state
->
handler
=
doctype0
;
return
XML_ROLE_NONE
;
case
XML_TOK_INSTANCE_START
:
state
->
handler
=
error
;
return
XML_ROLE_INSTANCE_START
;
}
return
syntaxError
(
state
);
}
static
int
prolog2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_PI
:
case
XML_TOK_COMMENT
:
return
XML_ROLE_NONE
;
case
XML_TOK_INSTANCE_START
:
state
->
handler
=
error
;
return
XML_ROLE_INSTANCE_START
;
}
return
syntaxError
(
state
);
}
static
int
doctype0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
doctype1
;
return
XML_ROLE_DOCTYPE_NAME
;
}
return
syntaxError
(
state
);
}
static
int
doctype1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_OPEN_BRACKET
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
prolog2
;
return
XML_ROLE_DOCTYPE_CLOSE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"SYSTEM"
))
{
state
->
handler
=
doctype3
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"PUBLIC"
))
{
state
->
handler
=
doctype2
;
return
XML_ROLE_NONE
;
}
break
;
}
return
syntaxError
(
state
);
}
static
int
doctype2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
doctype3
;
return
XML_ROLE_DOCTYPE_PUBLIC_ID
;
}
return
syntaxError
(
state
);
}
static
int
doctype3
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
doctype4
;
return
XML_ROLE_DOCTYPE_SYSTEM_ID
;
}
return
syntaxError
(
state
);
}
static
int
doctype4
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_OPEN_BRACKET
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
prolog2
;
return
XML_ROLE_DOCTYPE_CLOSE
;
}
return
syntaxError
(
state
);
}
static
int
doctype5
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
prolog2
;
return
XML_ROLE_DOCTYPE_CLOSE
;
}
return
syntaxError
(
state
);
}
static
int
internalSubset
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_OPEN
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"ENTITY"
))
{
state
->
handler
=
entity0
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"ATTLIST"
))
{
state
->
handler
=
attlist0
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"ELEMENT"
))
{
state
->
handler
=
element0
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
2
*
MIN_BYTES_PER_CHAR
(
enc
),
"NOTATION"
))
{
state
->
handler
=
notation0
;
return
XML_ROLE_NONE
;
}
break
;
case
XML_TOK_PI
:
case
XML_TOK_COMMENT
:
return
XML_ROLE_NONE
;
case
XML_TOK_PARAM_ENTITY_REF
:
return
XML_ROLE_PARAM_ENTITY_REF
;
case
XML_TOK_CLOSE_BRACKET
:
state
->
handler
=
doctype5
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
entity0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_PERCENT
:
state
->
handler
=
entity1
;
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
entity2
;
return
XML_ROLE_GENERAL_ENTITY_NAME
;
}
return
syntaxError
(
state
);
}
static
int
entity1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
entity7
;
return
XML_ROLE_PARAM_ENTITY_NAME
;
}
return
syntaxError
(
state
);
}
static
int
entity2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"SYSTEM"
))
{
state
->
handler
=
entity4
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"PUBLIC"
))
{
state
->
handler
=
entity3
;
return
XML_ROLE_NONE
;
}
break
;
case
XML_TOK_LITERAL
:
state
->
handler
=
declClose
;
return
XML_ROLE_ENTITY_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
entity3
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
entity4
;
return
XML_ROLE_ENTITY_PUBLIC_ID
;
}
return
syntaxError
(
state
);
}
static
int
entity4
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
entity5
;
return
XML_ROLE_ENTITY_SYSTEM_ID
;
}
return
syntaxError
(
state
);
}
static
int
entity5
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"NDATA"
))
{
state
->
handler
=
entity6
;
return
XML_ROLE_NONE
;
}
break
;
}
return
syntaxError
(
state
);
}
static
int
entity6
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
declClose
;
return
XML_ROLE_ENTITY_NOTATION_NAME
;
}
return
syntaxError
(
state
);
}
static
int
entity7
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"SYSTEM"
))
{
state
->
handler
=
entity9
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"PUBLIC"
))
{
state
->
handler
=
entity8
;
return
XML_ROLE_NONE
;
}
break
;
case
XML_TOK_LITERAL
:
state
->
handler
=
declClose
;
return
XML_ROLE_ENTITY_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
entity8
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
entity9
;
return
XML_ROLE_ENTITY_PUBLIC_ID
;
}
return
syntaxError
(
state
);
}
static
int
entity9
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
declClose
;
return
XML_ROLE_ENTITY_SYSTEM_ID
;
}
return
syntaxError
(
state
);
}
static
int
notation0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
notation1
;
return
XML_ROLE_NOTATION_NAME
;
}
return
syntaxError
(
state
);
}
static
int
notation1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"SYSTEM"
))
{
state
->
handler
=
notation3
;
return
XML_ROLE_NONE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"PUBLIC"
))
{
state
->
handler
=
notation2
;
return
XML_ROLE_NONE
;
}
break
;
}
return
syntaxError
(
state
);
}
static
int
notation2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
notation4
;
return
XML_ROLE_NOTATION_PUBLIC_ID
;
}
return
syntaxError
(
state
);
}
static
int
notation3
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
declClose
;
return
XML_ROLE_NOTATION_SYSTEM_ID
;
}
return
syntaxError
(
state
);
}
static
int
notation4
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
declClose
;
return
XML_ROLE_NOTATION_SYSTEM_ID
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
attlist0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
attlist1
;
return
XML_ROLE_ATTLIST_ELEMENT_NAME
;
}
return
syntaxError
(
state
);
}
static
int
attlist1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
attlist2
;
return
XML_ROLE_ATTRIBUTE_NAME
;
}
return
syntaxError
(
state
);
}
static
int
attlist2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
{
static
const
char
*
types
[]
=
{
"CDATA"
,
"ID"
,
"IDREF"
,
"IDREFS"
,
"ENTITY"
,
"ENTITIES"
,
"NMTOKEN"
,
"NMTOKENS"
,
};
int
i
;
for
(
i
=
0
;
i
<
(
int
)(
sizeof
(
types
)
/
sizeof
(
types
[
0
]));
i
++
)
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
types
[
i
]))
{
state
->
handler
=
attlist8
;
return
XML_ROLE_ATTRIBUTE_TYPE_CDATA
+
i
;
}
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"NOTATION"
))
{
state
->
handler
=
attlist5
;
return
XML_ROLE_NONE
;
}
break
;
case
XML_TOK_OPEN_PAREN
:
state
->
handler
=
attlist3
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
attlist3
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NMTOKEN
:
case
XML_TOK_NAME
:
state
->
handler
=
attlist4
;
return
XML_ROLE_ATTRIBUTE_ENUM_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
attlist4
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_CLOSE_PAREN
:
state
->
handler
=
attlist8
;
return
XML_ROLE_NONE
;
case
XML_TOK_OR
:
state
->
handler
=
attlist3
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
attlist5
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_OPEN_PAREN
:
state
->
handler
=
attlist6
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
attlist6
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
attlist7
;
return
XML_ROLE_ATTRIBUTE_NOTATION_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
attlist7
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_CLOSE_PAREN
:
state
->
handler
=
attlist8
;
return
XML_ROLE_NONE
;
case
XML_TOK_OR
:
state
->
handler
=
attlist6
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
/* default value */
static
int
attlist8
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_POUND_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
MIN_BYTES_PER_CHAR
(
enc
),
"IMPLIED"
))
{
state
->
handler
=
attlist1
;
return
XML_ROLE_IMPLIED_ATTRIBUTE_VALUE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
MIN_BYTES_PER_CHAR
(
enc
),
"REQUIRED"
))
{
state
->
handler
=
attlist1
;
return
XML_ROLE_REQUIRED_ATTRIBUTE_VALUE
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
MIN_BYTES_PER_CHAR
(
enc
),
"FIXED"
))
{
state
->
handler
=
attlist9
;
return
XML_ROLE_NONE
;
}
break
;
case
XML_TOK_LITERAL
:
state
->
handler
=
attlist1
;
return
XML_ROLE_DEFAULT_ATTRIBUTE_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
attlist9
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_LITERAL
:
state
->
handler
=
attlist1
;
return
XML_ROLE_FIXED_ATTRIBUTE_VALUE
;
}
return
syntaxError
(
state
);
}
static
int
element0
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
element1
;
return
XML_ROLE_ELEMENT_NAME
;
}
return
syntaxError
(
state
);
}
static
int
element1
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"EMPTY"
))
{
state
->
handler
=
declClose
;
return
XML_ROLE_CONTENT_EMPTY
;
}
if
(
XmlNameMatchesAscii
(
enc
,
ptr
,
"ANY"
))
{
state
->
handler
=
declClose
;
return
XML_ROLE_CONTENT_ANY
;
}
break
;
case
XML_TOK_OPEN_PAREN
:
state
->
handler
=
element2
;
state
->
level
=
1
;
return
XML_ROLE_GROUP_OPEN
;
}
return
syntaxError
(
state
);
}
static
int
element2
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_POUND_NAME
:
if
(
XmlNameMatchesAscii
(
enc
,
ptr
+
MIN_BYTES_PER_CHAR
(
enc
),
"PCDATA"
))
{
state
->
handler
=
element3
;
return
XML_ROLE_CONTENT_PCDATA
;
}
break
;
case
XML_TOK_OPEN_PAREN
:
state
->
level
=
2
;
state
->
handler
=
element6
;
return
XML_ROLE_GROUP_OPEN
;
case
XML_TOK_NAME
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT
;
case
XML_TOK_NAME_QUESTION
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_OPT
;
case
XML_TOK_NAME_ASTERISK
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_REP
;
case
XML_TOK_NAME_PLUS
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_PLUS
;
}
return
syntaxError
(
state
);
}
static
int
element3
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_CLOSE_PAREN
:
case
XML_TOK_CLOSE_PAREN_ASTERISK
:
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE_REP
;
case
XML_TOK_OR
:
state
->
handler
=
element4
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
element4
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_NAME
:
state
->
handler
=
element5
;
return
XML_ROLE_CONTENT_ELEMENT
;
}
return
syntaxError
(
state
);
}
static
int
element5
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_CLOSE_PAREN_ASTERISK
:
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE_REP
;
case
XML_TOK_OR
:
state
->
handler
=
element4
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
static
int
element6
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_OPEN_PAREN
:
state
->
level
+=
1
;
return
XML_ROLE_GROUP_OPEN
;
case
XML_TOK_NAME
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT
;
case
XML_TOK_NAME_QUESTION
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_OPT
;
case
XML_TOK_NAME_ASTERISK
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_REP
;
case
XML_TOK_NAME_PLUS
:
state
->
handler
=
element7
;
return
XML_ROLE_CONTENT_ELEMENT_PLUS
;
}
return
syntaxError
(
state
);
}
static
int
element7
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_CLOSE_PAREN
:
state
->
level
-=
1
;
if
(
state
->
level
==
0
)
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE
;
case
XML_TOK_CLOSE_PAREN_ASTERISK
:
state
->
level
-=
1
;
if
(
state
->
level
==
0
)
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE_REP
;
case
XML_TOK_CLOSE_PAREN_QUESTION
:
state
->
level
-=
1
;
if
(
state
->
level
==
0
)
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE_OPT
;
case
XML_TOK_CLOSE_PAREN_PLUS
:
state
->
level
-=
1
;
if
(
state
->
level
==
0
)
state
->
handler
=
declClose
;
return
XML_ROLE_GROUP_CLOSE_PLUS
;
case
XML_TOK_COMMA
:
state
->
handler
=
element6
;
return
XML_ROLE_GROUP_SEQUENCE
;
case
XML_TOK_OR
:
state
->
handler
=
element6
;
return
XML_ROLE_GROUP_CHOICE
;
}
return
syntaxError
(
state
);
}
static
int
declClose
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
switch
(
tok
)
{
case
XML_TOK_PROLOG_S
:
return
XML_ROLE_NONE
;
case
XML_TOK_DECL_CLOSE
:
state
->
handler
=
internalSubset
;
return
XML_ROLE_NONE
;
}
return
syntaxError
(
state
);
}
#if 0
static
int ignore(PROLOG_STATE *state,
int tok,
const char *ptr,
const char *end,
const ENCODING *enc)
{
switch (tok) {
case XML_TOK_DECL_CLOSE:
state->handler = internalSubset;
return 0;
default:
return XML_ROLE_NONE;
}
return syntaxError(state);
}
#endif
static
int
error
(
PROLOG_STATE
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
)
{
return
XML_ROLE_NONE
;
}
static
int
syntaxError
(
PROLOG_STATE
*
state
)
{
state
->
handler
=
error
;
return
XML_ROLE_ERROR
;
}
void
XmlPrologStateInit
(
PROLOG_STATE
*
state
)
{
state
->
handler
=
prolog0
;
}
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmlrole.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#ifndef XmlRole_INCLUDED
#define XmlRole_INCLUDED 1
#include "xmltok.h"
#ifdef __cplusplus
extern
"C"
{
#endif
enum
{
XML_ROLE_ERROR
=
-
1
,
XML_ROLE_NONE
=
0
,
XML_ROLE_XML_DECL
,
XML_ROLE_INSTANCE_START
,
XML_ROLE_DOCTYPE_NAME
,
XML_ROLE_DOCTYPE_SYSTEM_ID
,
XML_ROLE_DOCTYPE_PUBLIC_ID
,
XML_ROLE_DOCTYPE_CLOSE
,
XML_ROLE_GENERAL_ENTITY_NAME
,
XML_ROLE_PARAM_ENTITY_NAME
,
XML_ROLE_ENTITY_VALUE
,
XML_ROLE_ENTITY_SYSTEM_ID
,
XML_ROLE_ENTITY_PUBLIC_ID
,
XML_ROLE_ENTITY_NOTATION_NAME
,
XML_ROLE_NOTATION_NAME
,
XML_ROLE_NOTATION_SYSTEM_ID
,
XML_ROLE_NOTATION_PUBLIC_ID
,
XML_ROLE_ATTRIBUTE_NAME
,
XML_ROLE_ATTRIBUTE_TYPE_CDATA
,
XML_ROLE_ATTRIBUTE_TYPE_ID
,
XML_ROLE_ATTRIBUTE_TYPE_IDREF
,
XML_ROLE_ATTRIBUTE_TYPE_IDREFS
,
XML_ROLE_ATTRIBUTE_TYPE_ENTITY
,
XML_ROLE_ATTRIBUTE_TYPE_ENTITIES
,
XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN
,
XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS
,
XML_ROLE_ATTRIBUTE_ENUM_VALUE
,
XML_ROLE_ATTRIBUTE_NOTATION_VALUE
,
XML_ROLE_ATTLIST_ELEMENT_NAME
,
XML_ROLE_IMPLIED_ATTRIBUTE_VALUE
,
XML_ROLE_REQUIRED_ATTRIBUTE_VALUE
,
XML_ROLE_DEFAULT_ATTRIBUTE_VALUE
,
XML_ROLE_FIXED_ATTRIBUTE_VALUE
,
XML_ROLE_ELEMENT_NAME
,
XML_ROLE_CONTENT_ANY
,
XML_ROLE_CONTENT_EMPTY
,
XML_ROLE_CONTENT_PCDATA
,
XML_ROLE_GROUP_OPEN
,
XML_ROLE_GROUP_CLOSE
,
XML_ROLE_GROUP_CLOSE_REP
,
XML_ROLE_GROUP_CLOSE_OPT
,
XML_ROLE_GROUP_CLOSE_PLUS
,
XML_ROLE_GROUP_CHOICE
,
XML_ROLE_GROUP_SEQUENCE
,
XML_ROLE_CONTENT_ELEMENT
,
XML_ROLE_CONTENT_ELEMENT_REP
,
XML_ROLE_CONTENT_ELEMENT_OPT
,
XML_ROLE_CONTENT_ELEMENT_PLUS
,
XML_ROLE_PARAM_ENTITY_REF
};
typedef
struct
prolog_state
{
int
(
*
handler
)(
struct
prolog_state
*
state
,
int
tok
,
const
char
*
ptr
,
const
char
*
end
,
const
ENCODING
*
enc
);
unsigned
level
;
}
PROLOG_STATE
;
void
XMLTOKAPI
XmlPrologStateInit
(
PROLOG_STATE
*
);
#define XmlTokenRole(state, tok, ptr, end, enc) \
(((state)->handler)(state, tok, ptr, end, enc))
#ifdef __cplusplus
}
#endif
#endif
/* not XmlRole_INCLUDED */
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#include "xmldef.h"
#include "xmltok.h"
#include "nametab.h"
#define VTABLE1 \
{ PREFIX(prologTok), PREFIX(contentTok) }, \
{ PREFIX(attributeValueTok), PREFIX(entityValueTok) }, \
PREFIX(sameName), \
PREFIX(nameMatchesAscii), \
PREFIX(nameLength), \
PREFIX(skipS), \
PREFIX(getAtts), \
PREFIX(charRefNumber), \
PREFIX(updatePosition), \
PREFIX(isPublicId)
#define VTABLE2 \
PREFIX(encode), \
{ PREFIX(toUtf8) }
#define VTABLE VTABLE1, VTABLE2
#define UCS2_GET_NAMING(pages, hi, lo) \
(namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1 << ((lo) & 0x1F)))
/* A 2 byte UTF-8 representation splits the characters 11 bits
between the bottom 5 and 6 bits of the bytes.
We need 8 bits to index into pages, 3 bits to add to that index and
5 bits to generate the mask. */
#define UTF8_GET_NAMING2(pages, byte) \
(namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3) \
+ ((((byte)[0]) & 3) << 1) \
+ ((((byte)[1]) >> 5) & 1)] \
& (1 << (((byte)[1]) & 0x1F)))
/* A 3 byte UTF-8 representation splits the characters 16 bits
between the bottom 4, 6 and 6 bits of the bytes.
We need 8 bits to index into pages, 3 bits to add to that index and
5 bits to generate the mask. */
#define UTF8_GET_NAMING3(pages, byte) \
(namingBitmap[((pages)[((((byte)[0]) & 0xF) << 4) \
+ ((((byte)[1]) >> 2) & 0xF)] \
<< 3) \
+ ((((byte)[1]) & 3) << 1) \
+ ((((byte)[2]) >> 5) & 1)] \
& (1 << (((byte)[2]) & 0x1F)))
#define UTF8_GET_NAMING(pages, p, n) \
((n) == 2 \
? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \
: ((n) == 3 \
? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \
: 0))
#define UTF8_INVALID3(p) \
((*p) == 0xED \
? (((p)[1] & 0x20) != 0) \
: ((*p) == 0xEF \
? ((p)[1] == 0xBF && ((p)[2] == 0xBF || (p)[2] == 0xBE)) \
: 0))
#define UTF8_INVALID4(p) ((*p) == 0xF4 && ((p)[1] & 0x30) != 0)
struct
normal_encoding
{
ENCODING
enc
;
unsigned
char
type
[
256
];
};
static
int
checkCharRefNumber
(
int
);
#include "xmltok_impl.h"
/* minimum bytes per character */
#define MINBPC 1
#define BYTE_TYPE(enc, p) \
(((struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
#define BYTE_TO_ASCII(enc, p) (*p)
#define IS_NAME_CHAR(enc, p, n) UTF8_GET_NAMING(namePages, p, n)
#define IS_NMSTRT_CHAR(enc, p, n) UTF8_GET_NAMING(nmstrtPages, p, n)
#define IS_INVALID_CHAR(enc, p, n) \
((n) == 3 \
? UTF8_INVALID3((const unsigned char *)(p)) \
: ((n) == 4 ? UTF8_INVALID4((const unsigned char *)(p)) : 0))
/* c is an ASCII character */
#define CHAR_MATCHES(enc, p, c) (*(p) == c)
#define PREFIX(ident) normal_ ## ident
#include "xmltok_impl.c"
#undef MINBPC
#undef BYTE_TYPE
#undef BYTE_TO_ASCII
#undef CHAR_MATCHES
#undef IS_NAME_CHAR
#undef IS_NMSTRT_CHAR
#undef IS_INVALID_CHAR
enum
{
/* cvalN is value of masked first byte of N byte sequence */
cval1
=
0x00
,
cval2
=
0xc0
,
cval3
=
0xe0
,
cval4
=
0xf0
,
/* minN is minimum legal resulting value for N byte sequence */
min2
=
0x80
,
min3
=
0x800
,
min4
=
0x10000
};
static
int
utf8_encode
(
const
ENCODING
*
enc
,
int
c
,
char
*
buf
)
{
if
(
c
<
0
)
return
0
;
if
(
c
<
min2
)
{
buf
[
0
]
=
(
c
|
cval1
);
return
1
;
}
if
(
c
<
min3
)
{
buf
[
0
]
=
((
c
>>
6
)
|
cval2
);
buf
[
1
]
=
((
c
&
0x3f
)
|
0x80
);
return
2
;
}
if
(
c
<
min4
)
{
buf
[
0
]
=
((
c
>>
12
)
|
cval3
);
buf
[
1
]
=
(((
c
>>
6
)
&
0x3f
)
|
0x80
);
buf
[
2
]
=
((
c
&
0x3f
)
|
0x80
);
return
3
;
}
if
(
c
<
0x110000
)
{
buf
[
0
]
=
((
c
>>
18
)
|
cval4
);
buf
[
1
]
=
(((
c
>>
12
)
&
0x3f
)
|
0x80
);
buf
[
2
]
=
(((
c
>>
6
)
&
0x3f
)
|
0x80
);
buf
[
3
]
=
((
c
&
0x3f
)
|
0x80
);
return
4
;
}
return
0
;
}
static
void
utf8_toUtf8
(
const
ENCODING
*
enc
,
const
char
**
fromP
,
const
char
*
fromLim
,
char
**
toP
,
const
char
*
toLim
)
{
char
*
to
;
const
char
*
from
;
if
(
fromLim
-
*
fromP
>
toLim
-
*
toP
)
{
/* Avoid copying partial characters. */
for
(
fromLim
=
*
fromP
+
(
toLim
-
*
toP
);
fromLim
>
*
fromP
;
fromLim
--
)
if
(((
unsigned
char
)
fromLim
[
-
1
]
&
0xc0
)
!=
0x80
)
break
;
}
for
(
to
=
*
toP
,
from
=
*
fromP
;
from
!=
fromLim
;
from
++
,
to
++
)
*
to
=
*
from
;
*
fromP
=
from
;
*
toP
=
to
;
}
static
const
struct
normal_encoding
utf8_encoding
=
{
{
VTABLE1
,
utf8_encode
,
{
utf8_toUtf8
},
1
},
{
#include "asciitab.h"
#include "utf8tab.h"
}
};
static
const
struct
normal_encoding
internal_utf8_encoding
=
{
{
VTABLE1
,
utf8_encode
,
{
utf8_toUtf8
},
1
},
{
#include "iasciitab.h"
#include "utf8tab.h"
}
};
static
int
latin1_encode
(
const
ENCODING
*
enc
,
int
c
,
char
*
buf
)
{
if
(
c
<
0
)
return
0
;
if
(
c
<=
0xFF
)
{
buf
[
0
]
=
(
char
)
c
;
return
1
;
}
return
0
;
}
static
void
latin1_toUtf8
(
const
ENCODING
*
enc
,
const
char
**
fromP
,
const
char
*
fromLim
,
char
**
toP
,
const
char
*
toLim
)
{
for
(;;)
{
unsigned
char
c
;
if
(
*
fromP
==
fromLim
)
break
;
c
=
(
unsigned
char
)
**
fromP
;
if
(
c
&
0x80
)
{
if
(
toLim
-
*
toP
<
2
)
break
;
*
(
*
toP
)
++
=
((
c
>>
6
)
|
cval2
);
*
(
*
toP
)
++
=
((
c
&
0x3f
)
|
0x80
);
(
*
fromP
)
++
;
}
else
{
if
(
*
toP
==
toLim
)
break
;
*
(
*
toP
)
++
=
*
(
*
fromP
)
++
;
}
}
}
static
const
struct
normal_encoding
latin1_encoding
=
{
{
VTABLE1
,
latin1_encode
,
{
latin1_toUtf8
},
1
},
{
#include "asciitab.h"
#include "latin1tab.h"
}
};
#define latin1tab (latin1_encoding.type)
#undef PREFIX
static
int
unicode_byte_type
(
char
hi
,
char
lo
)
{
switch
((
unsigned
char
)
hi
)
{
case
0xD8
:
case
0xD9
:
case
0xDA
:
case
0xDB
:
return
BT_LEAD4
;
case
0xDC
:
case
0xDD
:
case
0xDE
:
case
0xDF
:
return
BT_TRAIL
;
case
0xFF
:
switch
((
unsigned
char
)
lo
)
{
case
0xFF
:
case
0xFE
:
return
BT_NONXML
;
}
break
;
}
return
BT_NONASCII
;
}
#define DEFINE_UTF16_ENCODE \
static \
int PREFIX(encode)(const ENCODING *enc, int charNum, char *buf) \
{ \
if (charNum < 0) \
return 0; \
if (charNum < 0x10000) { \
SET2(buf, charNum); \
return 2; \
} \
if (charNum < 0x110000) { \
charNum -= 0x10000; \
SET2(buf, (charNum >> 10) + 0xD800); \
SET2(buf + 2, (charNum & 0x3FF) + 0xDC00); \
return 4; \
} \
return 0; \
}
#define DEFINE_UTF16_TO_UTF8 \
static \
void PREFIX(toUtf8)(const ENCODING *enc, \
const char **fromP, const char *fromLim, \
char **toP, const char *toLim) \
{ \
const char *from; \
for (from = *fromP; from != fromLim; from += 2) { \
int plane; \
unsigned char lo2; \
unsigned char lo = GET_LO(from); \
unsigned char hi = GET_HI(from); \
switch (hi) { \
case 0: \
if (lo < 0x80) { \
if (*toP == toLim) { \
*fromP = from; \
return; \
} \
*(*toP)++ = lo; \
break; \
} \
/* fall through */
\
case 0x1: case 0x2: case 0x3: \
case 0x4: case 0x5: case 0x6: case 0x7: \
if (toLim - *toP < 2) { \
*fromP = from; \
return; \
} \
*(*toP)++ = ((lo >> 6) | (hi << 2) | cval2); \
*(*toP)++ = ((lo & 0x3f) | 0x80); \
break; \
default: \
if (toLim - *toP < 3) { \
*fromP = from; \
return; \
} \
/* 16 bits divided 4, 6, 6 amongst 3 bytes */
\
*(*toP)++ = ((hi >> 4) | cval3); \
*(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80); \
*(*toP)++ = ((lo & 0x3f) | 0x80); \
break; \
case 0xD8: case 0xD9: case 0xDA: case 0xDB: \
if (toLim - *toP < 4) { \
*fromP = from; \
return; \
} \
plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1; \
*(*toP)++ = ((plane >> 2) | cval4); \
*(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80); \
from += 2; \
lo2 = GET_LO(from); \
*(*toP)++ = (((lo & 0x3) << 4) \
| ((GET_HI(from) & 0x3) << 2) \
| (lo2 >> 6) \
| 0x80); \
*(*toP)++ = ((lo2 & 0x3f) | 0x80); \
break; \
} \
} \
*fromP = from; \
}
#define PREFIX(ident) little2_ ## ident
#define MINBPC 2
#define BYTE_TYPE(enc, p) \
((p)[1] == 0 ? latin1tab[(unsigned char)*(p)] : unicode_byte_type((p)[1], (p)[0]))
#define BYTE_TO_ASCII(enc, p) ((p)[1] == 0 ? (p)[0] : -1)
#define CHAR_MATCHES(enc, p, c) ((p)[1] == 0 && (p)[0] == c)
#define IS_NAME_CHAR(enc, p, n) \
UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
#define IS_NMSTRT_CHAR(enc, p, n) \
UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
#include "xmltok_impl.c"
#define SET2(ptr, ch) \
(((ptr)[0] = ((ch) & 0xff)), ((ptr)[1] = ((ch) >> 8)))
#define GET_LO(ptr) ((unsigned char)(ptr)[0])
#define GET_HI(ptr) ((unsigned char)(ptr)[1])
DEFINE_UTF16_ENCODE
DEFINE_UTF16_TO_UTF8
#undef SET2
#undef GET_LO
#undef GET_HI
#undef MINBPC
#undef BYTE_TYPE
#undef BYTE_TO_ASCII
#undef CHAR_MATCHES
#undef IS_NAME_CHAR
#undef IS_NMSTRT_CHAR
#undef IS_INVALID_CHAR
static
const
struct
encoding
little2_encoding
=
{
VTABLE
,
2
};
#undef PREFIX
#define PREFIX(ident) big2_ ## ident
#define MINBPC 2
/* CHAR_MATCHES is guaranteed to have MINBPC bytes available. */
#define BYTE_TYPE(enc, p) \
((p)[0] == 0 ? latin1tab[(unsigned char)(p)[1]] : unicode_byte_type((p)[0], (p)[1]))
#define BYTE_TO_ASCII(enc, p) ((p)[0] == 0 ? (p)[1] : -1)
#define CHAR_MATCHES(enc, p, c) ((p)[0] == 0 && (p)[1] == c)
#define IS_NAME_CHAR(enc, p, n) \
UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
#define IS_NMSTRT_CHAR(enc, p, n) \
UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])
#include "xmltok_impl.c"
#define SET2(ptr, ch) \
(((ptr)[0] = ((ch) >> 8)), ((ptr)[1] = ((ch) & 0xFF)))
#define GET_LO(ptr) ((unsigned char)(ptr)[1])
#define GET_HI(ptr) ((unsigned char)(ptr)[0])
DEFINE_UTF16_ENCODE
DEFINE_UTF16_TO_UTF8
#undef SET2
#undef GET_LO
#undef GET_HI
#undef MINBPC
#undef BYTE_TYPE
#undef BYTE_TO_ASCII
#undef CHAR_MATCHES
#undef IS_NAME_CHAR
#undef IS_NMSTRT_CHAR
#undef IS_INVALID_CHAR
static
const
struct
encoding
big2_encoding
=
{
VTABLE
,
2
};
#undef PREFIX
static
int
streqci
(
const
char
*
s1
,
const
char
*
s2
)
{
for
(;;)
{
char
c1
=
*
s1
++
;
char
c2
=
*
s2
++
;
if
(
'a'
<=
c1
&&
c1
<=
'z'
)
c1
+=
'A'
-
'a'
;
if
(
'a'
<=
c2
&&
c2
<=
'z'
)
c2
+=
'A'
-
'a'
;
if
(
c1
!=
c2
)
return
0
;
if
(
!
c1
)
break
;
}
return
1
;
}
static
int
initScan
(
const
ENCODING
*
enc
,
int
state
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
const
ENCODING
**
encPtr
;
if
(
ptr
==
end
)
return
XML_TOK_NONE
;
encPtr
=
((
const
INIT_ENCODING
*
)
enc
)
->
encPtr
;
if
(
ptr
+
1
==
end
)
{
switch
((
unsigned
char
)
*
ptr
)
{
case
0xFE
:
case
0xFF
:
case
0x00
:
case
0x3C
:
return
XML_TOK_PARTIAL
;
}
}
else
{
switch
(((
unsigned
char
)
ptr
[
0
]
<<
8
)
|
(
unsigned
char
)
ptr
[
1
])
{
case
0x003C
:
*
encPtr
=
&
big2_encoding
;
return
XmlTok
(
*
encPtr
,
state
,
ptr
,
end
,
nextTokPtr
);
case
0xFEFF
:
*
nextTokPtr
=
ptr
+
2
;
*
encPtr
=
&
big2_encoding
;
return
XML_TOK_BOM
;
case
0x3C00
:
*
encPtr
=
&
little2_encoding
;
return
XmlTok
(
*
encPtr
,
state
,
ptr
,
end
,
nextTokPtr
);
case
0xFFFE
:
*
nextTokPtr
=
ptr
+
2
;
*
encPtr
=
&
little2_encoding
;
return
XML_TOK_BOM
;
}
}
*
encPtr
=
&
utf8_encoding
.
enc
;
return
XmlTok
(
*
encPtr
,
state
,
ptr
,
end
,
nextTokPtr
);
}
static
int
initScanProlog
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
return
initScan
(
enc
,
XML_PROLOG_STATE
,
ptr
,
end
,
nextTokPtr
);
}
static
int
initScanContent
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
return
initScan
(
enc
,
XML_CONTENT_STATE
,
ptr
,
end
,
nextTokPtr
);
}
static
void
initUpdatePosition
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
POSITION
*
pos
)
{
normal_updatePosition
(
&
utf8_encoding
.
enc
,
ptr
,
end
,
pos
);
}
const
ENCODING
*
XmlGetInternalEncoding
(
int
e
)
{
switch
(
e
)
{
case
XML_UTF8_ENCODING
:
return
&
internal_utf8_encoding
.
enc
;
}
return
0
;
}
int
XmlInitEncoding
(
INIT_ENCODING
*
p
,
const
ENCODING
**
encPtr
,
const
char
*
name
)
{
if
(
name
)
{
if
(
streqci
(
name
,
"ISO-8859-1"
))
{
*
encPtr
=
&
latin1_encoding
.
enc
;
return
1
;
}
if
(
streqci
(
name
,
"UTF-8"
))
{
*
encPtr
=
&
utf8_encoding
.
enc
;
return
1
;
}
if
(
!
streqci
(
name
,
"UTF-16"
))
return
0
;
}
p
->
initEnc
.
scanners
[
XML_PROLOG_STATE
]
=
initScanProlog
;
p
->
initEnc
.
scanners
[
XML_CONTENT_STATE
]
=
initScanContent
;
p
->
initEnc
.
updatePosition
=
initUpdatePosition
;
p
->
initEnc
.
minBytesPerChar
=
1
;
p
->
encPtr
=
encPtr
;
*
encPtr
=
&
(
p
->
initEnc
);
return
1
;
}
static
int
toAscii
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
)
{
char
buf
[
1
];
char
*
p
=
buf
;
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
ptr
,
end
,
&
p
,
p
+
1
);
if
(
p
==
buf
)
return
-
1
;
else
return
buf
[
0
];
}
static
int
isSpace
(
int
c
)
{
switch
(
c
)
{
case
' '
:
case
'\r'
:
case
'\n'
:
case
'\t'
:
return
1
;
}
return
0
;
}
/* Return 1 if there's just optional white space
or there's an S followed by name=val. */
static
int
parsePseudoAttribute
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
namePtr
,
const
char
**
valPtr
,
const
char
**
nextTokPtr
)
{
int
c
;
char
open
;
if
(
ptr
==
end
)
{
*
namePtr
=
0
;
return
1
;
}
if
(
!
isSpace
(
toAscii
(
enc
,
ptr
,
end
)))
{
*
nextTokPtr
=
ptr
;
return
0
;
}
do
{
ptr
+=
enc
->
minBytesPerChar
;
}
while
(
isSpace
(
toAscii
(
enc
,
ptr
,
end
)));
if
(
ptr
==
end
)
{
*
namePtr
=
0
;
return
1
;
}
*
namePtr
=
ptr
;
for
(;;)
{
c
=
toAscii
(
enc
,
ptr
,
end
);
if
(
c
==
-
1
)
{
*
nextTokPtr
=
ptr
;
return
0
;
}
if
(
c
==
'='
)
break
;
if
(
isSpace
(
c
))
{
do
{
ptr
+=
enc
->
minBytesPerChar
;
}
while
(
isSpace
(
c
=
toAscii
(
enc
,
ptr
,
end
)));
if
(
c
!=
'='
)
{
*
nextTokPtr
=
ptr
;
return
0
;
}
break
;
}
ptr
+=
enc
->
minBytesPerChar
;
}
if
(
ptr
==
*
namePtr
)
{
*
nextTokPtr
=
ptr
;
return
0
;
}
ptr
+=
enc
->
minBytesPerChar
;
c
=
toAscii
(
enc
,
ptr
,
end
);
while
(
isSpace
(
c
))
{
ptr
+=
enc
->
minBytesPerChar
;
c
=
toAscii
(
enc
,
ptr
,
end
);
}
if
(
c
!=
'"'
&&
c
!=
'\''
)
{
*
nextTokPtr
=
ptr
;
return
0
;
}
open
=
c
;
ptr
+=
enc
->
minBytesPerChar
;
*
valPtr
=
ptr
;
for
(;;
ptr
+=
enc
->
minBytesPerChar
)
{
c
=
toAscii
(
enc
,
ptr
,
end
);
if
(
c
==
open
)
break
;
if
(
!
(
'a'
<=
c
&&
c
<=
'z'
)
&&
!
(
'A'
<=
c
&&
c
<=
'Z'
)
&&
!
(
'0'
<=
c
&&
c
<=
'9'
)
&&
c
!=
'.'
&&
c
!=
'-'
&&
c
!=
'_'
)
{
*
nextTokPtr
=
ptr
;
return
0
;
}
}
*
nextTokPtr
=
ptr
+
enc
->
minBytesPerChar
;
return
1
;
}
static
const
ENCODING
*
findEncoding
(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
)
{
#define ENCODING_MAX 128
char
buf
[
ENCODING_MAX
];
char
*
p
=
buf
;
int
i
;
XmlConvert
(
enc
,
XML_UTF8_ENCODING
,
&
ptr
,
end
,
&
p
,
p
+
ENCODING_MAX
-
1
);
if
(
ptr
!=
end
)
return
0
;
*
p
=
0
;
for
(
i
=
0
;
buf
[
i
];
i
++
)
{
if
(
'a'
<=
buf
[
i
]
&&
buf
[
i
]
<=
'z'
)
buf
[
i
]
+=
'A'
-
'a'
;
}
if
(
streqci
(
buf
,
"UTF-8"
))
return
&
utf8_encoding
.
enc
;
if
(
streqci
(
buf
,
"ISO-8859-1"
))
return
&
latin1_encoding
.
enc
;
if
(
streqci
(
buf
,
"UTF-16"
))
{
static
const
unsigned
short
n
=
1
;
if
(
enc
->
minBytesPerChar
==
2
)
return
enc
;
return
&
big2_encoding
;
}
return
0
;
}
int
XmlParseXmlDecl
(
int
isGeneralTextEntity
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
badPtr
,
const
char
**
versionPtr
,
const
char
**
encodingName
,
const
ENCODING
**
encoding
,
int
*
standalone
)
{
const
char
*
val
=
0
;
const
char
*
name
=
0
;
ptr
+=
5
*
enc
->
minBytesPerChar
;
end
-=
2
*
enc
->
minBytesPerChar
;
if
(
!
parsePseudoAttribute
(
enc
,
ptr
,
end
,
&
name
,
&
val
,
&
ptr
)
||
!
name
)
{
*
badPtr
=
ptr
;
return
0
;
}
if
(
!
XmlNameMatchesAscii
(
enc
,
name
,
"version"
))
{
if
(
!
isGeneralTextEntity
)
{
*
badPtr
=
name
;
return
0
;
}
}
else
{
if
(
versionPtr
)
*
versionPtr
=
val
;
if
(
!
parsePseudoAttribute
(
enc
,
ptr
,
end
,
&
name
,
&
val
,
&
ptr
))
{
*
badPtr
=
ptr
;
return
0
;
}
if
(
!
name
)
return
1
;
}
if
(
XmlNameMatchesAscii
(
enc
,
name
,
"encoding"
))
{
int
c
=
toAscii
(
enc
,
val
,
end
);
if
(
!
(
'a'
<=
c
&&
c
<=
'z'
)
&&
!
(
'A'
<=
c
&&
c
<=
'Z'
))
{
*
badPtr
=
val
;
return
0
;
}
if
(
encodingName
)
*
encodingName
=
val
;
if
(
encoding
)
*
encoding
=
findEncoding
(
enc
,
val
,
ptr
-
enc
->
minBytesPerChar
);
if
(
!
parsePseudoAttribute
(
enc
,
ptr
,
end
,
&
name
,
&
val
,
&
ptr
))
{
*
badPtr
=
ptr
;
return
0
;
}
if
(
!
name
)
return
1
;
}
if
(
!
XmlNameMatchesAscii
(
enc
,
name
,
"standalone"
)
||
isGeneralTextEntity
)
{
*
badPtr
=
name
;
return
0
;
}
if
(
XmlNameMatchesAscii
(
enc
,
val
,
"yes"
))
{
if
(
standalone
)
*
standalone
=
1
;
}
else
if
(
XmlNameMatchesAscii
(
enc
,
val
,
"no"
))
{
if
(
standalone
)
*
standalone
=
0
;
}
else
{
*
badPtr
=
val
;
return
0
;
}
while
(
isSpace
(
toAscii
(
enc
,
ptr
,
end
)))
ptr
+=
enc
->
minBytesPerChar
;
if
(
ptr
!=
end
)
{
*
badPtr
=
ptr
;
return
0
;
}
return
1
;
}
static
int
checkCharRefNumber
(
int
result
)
{
switch
(
result
>>
8
)
{
case
0xD8
:
case
0xD9
:
case
0xDA
:
case
0xDB
:
case
0xDC
:
case
0xDD
:
case
0xDE
:
case
0xDF
:
return
-
1
;
case
0
:
if
(
latin1_encoding
.
type
[
result
]
==
BT_NONXML
)
return
-
1
;
break
;
case
0xFF
:
if
(
result
==
0xFFFE
||
result
==
0xFFFF
)
return
-
1
;
break
;
}
return
result
;
}
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#ifndef XmlTok_INCLUDED
#define XmlTok_INCLUDED 1
#ifdef __cplusplus
extern
"C"
{
#endif
#ifndef XMLTOKAPI
#define XMLTOKAPI
/* as nothing */
#endif
/* 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_TRAILING_CR -3
/* A CR at the end of the scan;
might be part of CRLF sequence */
#define XML_TOK_PARTIAL_CHAR -2
/* only part of a multibyte sequence */
#define XML_TOK_PARTIAL -1
/* only part of a token */
#define XML_TOK_INVALID 0
/* The following tokens are returned by XmlContentTok; some are also
returned by XmlAttributeValueTok and XmlEntityTok */
#define XML_TOK_START_TAG_WITH_ATTS 1
#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_NO_ATTS 4
#define XML_TOK_END_TAG 5
#define XML_TOK_DATA_CHARS 6
#define XML_TOK_DATA_NEWLINE 7
#define XML_TOK_CDATA_SECTION 8
#define XML_TOK_ENTITY_REF 9
#define XML_TOK_CHAR_REF 10
/* numeric character reference */
/* The following tokens may be returned by both XmlPrologTok and XmlContentTok */
#define XML_TOK_PI 11
/* processing instruction */
#define XML_TOK_XML_DECL 12
/* XML decl or text decl */
#define XML_TOK_COMMENT 13
#define XML_TOK_BOM 14
/* Byte order mark */
/* The following tokens are returned only by XmlPrologTok */
#define XML_TOK_PROLOG_S 15
#define XML_TOK_DECL_OPEN 16
/* <!foo */
#define XML_TOK_DECL_CLOSE 17
/* > */
#define XML_TOK_NAME 18
#define XML_TOK_NMTOKEN 19
#define XML_TOK_POUND_NAME 20
/* #name */
#define XML_TOK_OR 21
/* | */
#define XML_TOK_PERCENT 22
#define XML_TOK_OPEN_PAREN 23
#define XML_TOK_CLOSE_PAREN 24
#define XML_TOK_OPEN_BRACKET 25
#define XML_TOK_CLOSE_BRACKET 26
#define XML_TOK_LITERAL 27
#define XML_TOK_PARAM_ENTITY_REF 28
#define XML_TOK_INSTANCE_START 29
/* The following occur only in element type declarations */
#define XML_TOK_NAME_QUESTION 30
/* name? */
#define XML_TOK_NAME_ASTERISK 31
/* name* */
#define XML_TOK_NAME_PLUS 32
/* name+ */
#define XML_TOK_COND_SECT_OPEN 33
/* <![ */
#define XML_TOK_COND_SECT_CLOSE 34
/* ]]> */
#define XML_TOK_CLOSE_PAREN_QUESTION 35
/* )? */
#define XML_TOK_CLOSE_PAREN_ASTERISK 36
/* )* */
#define XML_TOK_CLOSE_PAREN_PLUS 37
/* )+ */
#define XML_TOK_COMMA 38
/* The following tokens is returned only by XmlAttributeValueTok */
#define XML_TOK_ATTRIBUTE_VALUE_S 39
#define XML_N_STATES 2
#define XML_PROLOG_STATE 0
#define XML_CONTENT_STATE 1
#define XML_N_LITERAL_TYPES 2
#define XML_ATTRIBUTE_VALUE_LITERAL 0
#define XML_ENTITY_VALUE_LITERAL 1
#define XML_N_INTERNAL_ENCODINGS 1
#define XML_UTF8_ENCODING 0
#if 0
#define XML_UTF16_ENCODING 1
#define XML_UCS4_ENCODING 2
#endif
#define XML_MAX_BYTES_PER_CHAR 4
typedef
struct
position
{
/* first line and first column are 0 not 1 */
unsigned
long
lineNumber
;
unsigned
long
columnNumber
;
}
POSITION
;
typedef
struct
{
const
char
*
name
;
const
char
*
valuePtr
;
const
char
*
valueEnd
;
char
normalized
;
}
ATTRIBUTE
;
struct
encoding
;
typedef
struct
encoding
ENCODING
;
struct
encoding
{
int
(
*
scanners
[
XML_N_STATES
])(
const
ENCODING
*
,
const
char
*
,
const
char
*
,
const
char
**
);
int
(
*
literalScanners
[
XML_N_LITERAL_TYPES
])(
const
ENCODING
*
,
const
char
*
,
const
char
*
,
const
char
**
);
int
(
*
sameName
)(
const
ENCODING
*
,
const
char
*
,
const
char
*
);
int
(
*
nameMatchesAscii
)(
const
ENCODING
*
,
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
);
void
(
*
updatePosition
)(
const
ENCODING
*
,
const
char
*
ptr
,
const
char
*
end
,
POSITION
*
);
int
(
*
isPublicId
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
badPtr
);
int
(
*
encode
)(
const
ENCODING
*
enc
,
int
charNum
,
char
*
buf
);
void
(
*
convert
[
XML_N_INTERNAL_ENCODINGS
])(
const
ENCODING
*
enc
,
const
char
**
fromP
,
const
char
*
fromLim
,
char
**
toP
,
const
char
*
toLim
);
int
minBytesPerChar
;
};
/*
Scan the string starting at ptr until the end of the next complete token,
but do not scan past eptr. Return an integer giving the type of token.
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;
nextTokPtr will not be set.
Return XML_TOK_INVALID when the string does not start a valid 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
to the character following the end of that token.
Each data character counts as a single token, but adjacent data characters
may be returned together. Similarly for characters in the prolog outside
literals, comments and processing instructions.
*/
#define XmlTok(enc, state, ptr, end, nextTokPtr) \
(((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
#define XmlPrologTok(enc, ptr, end, nextTokPtr) \
XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
#define XmlContentTok(enc, ptr, end, nextTokPtr) \
XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
/* This is used for performing a 2nd-level tokenization on
the content of a literal that has already been returned by XmlTok. */
#define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
(((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
#define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \
XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
#define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
#define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
#define XmlNameMatchesAscii(enc, ptr1, ptr2) \
(((enc)->nameMatchesAscii)(enc, ptr1, ptr2))
#define XmlNameLength(enc, ptr) \
(((enc)->nameLength)(enc, ptr))
#define XmlSkipS(enc, ptr) \
(((enc)->skipS)(enc, ptr))
#define XmlGetAttributes(enc, ptr, attsMax, atts) \
(((enc)->getAtts)(enc, ptr, attsMax, atts))
#define XmlCharRefNumber(enc, ptr) \
(((enc)->charRefNumber)(enc, ptr))
#define XmlUpdatePosition(enc, ptr, end, pos) \
(((enc)->updatePosition)(enc, ptr, end, pos))
#define XmlIsPublicId(enc, ptr, end, badPtr) \
(((enc)->isPublicId)(enc, ptr, end, badPtr))
#define XmlEncode(enc, ch, buf) \
(((enc)->encode)(enc, ch, buf))
#define XmlConvert(enc, targetEnc, fromP, fromLim, toP, toLim) \
(((enc)->convert[targetEnc])(enc, fromP, fromLim, toP, toLim))
typedef
struct
{
ENCODING
initEnc
;
const
ENCODING
**
encPtr
;
}
INIT_ENCODING
;
int
XMLTOKAPI
XmlParseXmlDecl
(
int
isGeneralTextEntity
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
badPtr
,
const
char
**
versionPtr
,
const
char
**
encodingNamePtr
,
const
ENCODING
**
namedEncodingPtr
,
int
*
standalonePtr
);
int
XMLTOKAPI
XmlInitEncoding
(
INIT_ENCODING
*
,
const
ENCODING
**
,
const
char
*
name
);
const
ENCODING
XMLTOKAPI
*
XmlGetInternalEncoding
(
int
);
#ifdef __cplusplus
}
#endif
#endif
/* not XmlTok_INCLUDED */
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.c
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
#ifndef IS_INVALID_CHAR
#define IS_INVALID_CHAR(enc, ptr, n) (0)
#endif
#define INVALID_LEAD_CASE(n, ptr, nextTokPtr) \
case BT_LEAD ## n: \
if (end - ptr < n) \
return XML_TOK_PARTIAL_CHAR; \
if (IS_INVALID_CHAR(enc, ptr, n)) { \
*(nextTokPtr) = (ptr); \
return XML_TOK_INVALID; \
} \
ptr += n; \
break;
#define INVALID_CASES(ptr, nextTokPtr) \
INVALID_LEAD_CASE(2, ptr, nextTokPtr) \
INVALID_LEAD_CASE(3, ptr, nextTokPtr) \
INVALID_LEAD_CASE(4, ptr, nextTokPtr) \
case BT_NONXML: \
case BT_MALFORM: \
case BT_TRAIL: \
*(nextTokPtr) = (ptr); \
return XML_TOK_INVALID;
#define CHECK_NAME_CASE(n, enc, ptr, end, nextTokPtr) \
case BT_LEAD ## n: \
if (end - ptr < n) \
return XML_TOK_PARTIAL_CHAR; \
if (!IS_NAME_CHAR(enc, ptr, n)) { \
*nextTokPtr = ptr; \
return XML_TOK_INVALID; \
} \
ptr += n; \
break;
#define CHECK_NAME_CASES(enc, ptr, end, nextTokPtr) \
case BT_NONASCII: \
if (!IS_NAME_CHAR(enc, ptr, MINBPC)) { \
*nextTokPtr = ptr; \
return XML_TOK_INVALID; \
} \
case BT_NMSTRT: \
case BT_HEX: \
case BT_DIGIT: \
case BT_NAME: \
case BT_MINUS: \
ptr += MINBPC; \
break; \
CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr) \
CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr) \
CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
#define CHECK_NMSTRT_CASE(n, enc, ptr, end, nextTokPtr) \
case BT_LEAD ## n: \
if (end - ptr < n) \
return XML_TOK_PARTIAL_CHAR; \
if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \
*nextTokPtr = ptr; \
return XML_TOK_INVALID; \
} \
ptr += n; \
break;
#define CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr) \
case BT_NONASCII: \
if (!IS_NMSTRT_CHAR(enc, ptr, MINBPC)) { \
*nextTokPtr = ptr; \
return XML_TOK_INVALID; \
} \
case BT_NMSTRT: \
case BT_HEX: \
ptr += MINBPC; \
break; \
CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr) \
CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr) \
CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
#ifndef PREFIX
#define PREFIX(ident) ident
#endif
/* ptr points to character following "<!-" */
static
int
PREFIX
(
scanComment
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
!=
end
)
{
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
'-'
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
ptr
+=
MINBPC
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
INVALID_CASES
(
ptr
,
nextTokPtr
)
case
BT_MINUS
:
if
((
ptr
+=
MINBPC
)
==
end
)
return
XML_TOK_PARTIAL
;
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'-'
))
{
if
((
ptr
+=
MINBPC
)
==
end
)
return
XML_TOK_PARTIAL
;
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_COMMENT
;
}
/* fall through */
default:
ptr
+=
MINBPC
;
break
;
}
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "<!" */
static
int
PREFIX
(
scanDecl
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_MINUS
:
return
PREFIX
(
scanComment
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_LSQB
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_COND_SECT_OPEN
;
case
BT_NMSTRT
:
case
BT_HEX
:
ptr
+=
MINBPC
;
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_PERCNT
:
if
(
ptr
+
MINBPC
==
end
)
return
XML_TOK_PARTIAL
;
/* don't allow <!ENTITY% foo "whatever"> */
switch
(
BYTE_TYPE
(
enc
,
ptr
+
MINBPC
))
{
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
case
BT_PERCNT
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
/* fall through */
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_DECL_OPEN
;
case
BT_NMSTRT
:
case
BT_HEX
:
ptr
+=
MINBPC
;
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
checkPiTarget
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
int
*
tokPtr
)
{
int
upper
=
0
;
*
tokPtr
=
XML_TOK_PI
;
if
(
end
-
ptr
!=
MINBPC
*
3
)
return
1
;
switch
(
BYTE_TO_ASCII
(
enc
,
ptr
))
{
case
'x'
:
break
;
case
'X'
:
upper
=
1
;
break
;
default:
return
1
;
}
ptr
+=
MINBPC
;
switch
(
BYTE_TO_ASCII
(
enc
,
ptr
))
{
case
'm'
:
break
;
case
'M'
:
upper
=
1
;
break
;
default:
return
1
;
}
ptr
+=
MINBPC
;
switch
(
BYTE_TO_ASCII
(
enc
,
ptr
))
{
case
'l'
:
break
;
case
'L'
:
upper
=
1
;
break
;
default:
return
1
;
}
if
(
upper
)
return
0
;
*
tokPtr
=
XML_TOK_XML_DECL
;
return
1
;
}
/* ptr points to character following "<?" */
static
int
PREFIX
(
scanPi
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
int
tok
;
const
char
*
target
=
ptr
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
if
(
!
PREFIX
(
checkPiTarget
)(
enc
,
target
,
ptr
,
&
tok
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
ptr
+=
MINBPC
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
INVALID_CASES
(
ptr
,
nextTokPtr
)
case
BT_QUEST
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
*
nextTokPtr
=
ptr
+
MINBPC
;
return
tok
;
}
break
;
default:
ptr
+=
MINBPC
;
break
;
}
}
return
XML_TOK_PARTIAL
;
case
BT_QUEST
:
if
(
!
PREFIX
(
checkPiTarget
)(
enc
,
target
,
ptr
,
&
tok
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
*
nextTokPtr
=
ptr
+
MINBPC
;
return
tok
;
}
/* fall through */
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "<![" */
static
int
PREFIX
(
scanCdataSection
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
int
i
;
/* CDATA[]]> */
if
(
end
-
ptr
<
9
*
MINBPC
)
return
XML_TOK_PARTIAL
;
for
(
i
=
0
;
i
<
6
;
i
++
,
ptr
+=
MINBPC
)
{
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
"CDATA["
[
i
]))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
end
-=
2
*
MINBPC
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
INVALID_CASES
(
ptr
,
nextTokPtr
)
case
BT_RSQB
:
if
(
CHAR_MATCHES
(
enc
,
ptr
+
MINBPC
,
']'
)
&&
CHAR_MATCHES
(
enc
,
ptr
+
2
*
MINBPC
,
'>'
))
{
*
nextTokPtr
=
ptr
+
3
*
MINBPC
;
return
XML_TOK_CDATA_SECTION
;
}
/* fall through */
default:
ptr
+=
MINBPC
;
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "</" */
static
int
PREFIX
(
scanEndTag
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
for
(
ptr
+=
MINBPC
;
ptr
!=
end
;
ptr
+=
MINBPC
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
break
;
case
BT_GT
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_END_TAG
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
case
BT_GT
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_END_TAG
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "&#X" */
static
int
PREFIX
(
scanHexCharRef
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_DIGIT
:
case
BT_HEX
:
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
for
(
ptr
+=
MINBPC
;
ptr
!=
end
;
ptr
+=
MINBPC
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_DIGIT
:
case
BT_HEX
:
break
;
case
BT_SEMI
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_CHAR_REF
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "&#" */
static
int
PREFIX
(
scanCharRef
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
!=
end
)
{
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'x'
))
return
PREFIX
(
scanHexCharRef
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_DIGIT
:
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
for
(
ptr
+=
MINBPC
;
ptr
!=
end
;
ptr
+=
MINBPC
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_DIGIT
:
break
;
case
BT_SEMI
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_CHAR_REF
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "&" */
static
int
PREFIX
(
scanRef
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
end
,
ptr
,
end
,
nextTokPtr
)
case
BT_NUM
:
return
PREFIX
(
scanCharRef
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_SEMI
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_ENTITY_REF
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following first character of attribute name */
static
int
PREFIX
(
scanAtts
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
for
(;;)
{
int
t
;
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
t
=
BYTE_TYPE
(
enc
,
ptr
);
if
(
t
==
BT_EQUALS
)
break
;
switch
(
t
)
{
case
BT_S
:
case
BT_LF
:
case
BT_CR
:
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
/* fall through */
case
BT_EQUALS
:
{
int
open
;
for
(;;)
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
open
=
BYTE_TYPE
(
enc
,
ptr
);
if
(
open
==
BT_QUOT
||
open
==
BT_APOS
)
break
;
switch
(
open
)
{
case
BT_S
:
case
BT_LF
:
case
BT_CR
:
break
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
ptr
+=
MINBPC
;
/* in attribute value */
for
(;;)
{
int
t
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
t
=
BYTE_TYPE
(
enc
,
ptr
);
if
(
t
==
open
)
break
;
switch
(
t
)
{
INVALID_CASES
(
ptr
,
nextTokPtr
)
case
BT_AMP
:
{
int
tok
=
PREFIX
(
scanRef
)(
enc
,
ptr
+
MINBPC
,
end
,
&
ptr
);
if
(
tok
<=
0
)
{
if
(
tok
==
XML_TOK_INVALID
)
*
nextTokPtr
=
ptr
;
return
tok
;
}
break
;
}
case
BT_LT
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
default:
ptr
+=
MINBPC
;
break
;
}
}
/* ptr points to closing quote */
for
(;;)
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
continue
;
case
BT_GT
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_START_TAG_WITH_ATTS
;
case
BT_SOL
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_EMPTY_ELEMENT_WITH_ATTS
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
break
;
}
break
;
}
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
/* ptr points to character following "<" */
static
int
PREFIX
(
scanLt
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_EXCL
:
if
((
ptr
+=
MINBPC
)
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_MINUS
:
return
PREFIX
(
scanComment
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_LSQB
:
return
PREFIX
(
scanCdataSection
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
case
BT_QUEST
:
return
PREFIX
(
scanPi
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_SOL
:
return
PREFIX
(
scanEndTag
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
/* we have a start-tag */
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
{
ptr
+=
MINBPC
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_GT
:
goto
gt
;
case
BT_SOL
:
goto
sol
;
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
ptr
+=
MINBPC
;
continue
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
return
PREFIX
(
scanAtts
)(
enc
,
ptr
,
end
,
nextTokPtr
);
}
return
XML_TOK_PARTIAL
;
}
case
BT_GT
:
gt:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_START_TAG_NO_ATTS
;
case
BT_SOL
:
sol:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_EMPTY_ELEMENT_NO_ATTS
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
contentTok
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_NONE
;
#if MINBPC > 1
{
size_t
n
=
end
-
ptr
;
if
(
n
&
(
MINBPC
-
1
))
{
n
&=
~
(
MINBPC
-
1
);
if
(
n
==
0
)
return
XML_TOK_PARTIAL
;
end
=
ptr
+
n
;
}
}
#endif
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_LT
:
return
PREFIX
(
scanLt
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_AMP
:
return
PREFIX
(
scanRef
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_CR
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_TRAILING_CR
;
if
(
BYTE_TYPE
(
enc
,
ptr
)
==
BT_LF
)
ptr
+=
MINBPC
;
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_NEWLINE
;
case
BT_LF
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_DATA_NEWLINE
;
case
BT_RSQB
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
']'
))
break
;
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
!
CHAR_MATCHES
(
enc
,
ptr
,
'>'
))
{
ptr
-=
MINBPC
;
break
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
INVALID_CASES
(
ptr
,
nextTokPtr
)
default:
ptr
+=
MINBPC
;
break
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) { \
*nextTokPtr = ptr; \
return XML_TOK_DATA_CHARS; \
} \
ptr += n; \
break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_RSQB
:
if
(
ptr
+
MINBPC
!=
end
)
{
if
(
!
CHAR_MATCHES
(
enc
,
ptr
+
MINBPC
,
']'
))
{
ptr
+=
MINBPC
;
break
;
}
if
(
ptr
+
2
*
MINBPC
!=
end
)
{
if
(
!
CHAR_MATCHES
(
enc
,
ptr
+
2
*
MINBPC
,
'>'
))
{
ptr
+=
MINBPC
;
break
;
}
*
nextTokPtr
=
ptr
+
2
*
MINBPC
;
return
XML_TOK_INVALID
;
}
}
/* fall through */
case
BT_AMP
:
case
BT_LT
:
case
BT_NONXML
:
case
BT_MALFORM
:
case
BT_TRAIL
:
case
BT_CR
:
case
BT_LF
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
default:
ptr
+=
MINBPC
;
break
;
}
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
}
/* ptr points to character following "%" */
static
int
PREFIX
(
scanPercent
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
end
,
ptr
,
end
,
nextTokPtr
)
case
BT_S
:
case
BT_LF
:
case
BT_CR
:
case
BT_PERCNT
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_PERCENT
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_SEMI
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_PARAM_ENTITY_REF
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
scanPoundName
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NMSTRT_CASES
(
end
,
ptr
,
end
,
nextTokPtr
)
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_CR
:
case
BT_LF
:
case
BT_S
:
case
BT_RPAR
:
case
BT_GT
:
case
BT_PERCNT
:
case
BT_VERBAR
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_POUND_NAME
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
scanLit
)(
int
open
,
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
while
(
ptr
!=
end
)
{
int
t
=
BYTE_TYPE
(
enc
,
ptr
);
switch
(
t
)
{
INVALID_CASES
(
ptr
,
nextTokPtr
)
case
BT_QUOT
:
case
BT_APOS
:
ptr
+=
MINBPC
;
if
(
t
!=
open
)
break
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
*
nextTokPtr
=
ptr
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
case
BT_GT
:
case
BT_PERCNT
:
case
BT_LSQB
:
return
XML_TOK_LITERAL
;
default:
return
XML_TOK_INVALID
;
}
default:
ptr
+=
MINBPC
;
break
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
prologTok
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
int
tok
;
if
(
ptr
==
end
)
return
XML_TOK_NONE
;
#if MINBPC > 1
{
size_t
n
=
end
-
ptr
;
if
(
n
&
(
MINBPC
-
1
))
{
n
&=
~
(
MINBPC
-
1
);
if
(
n
==
0
)
return
XML_TOK_PARTIAL
;
end
=
ptr
+
n
;
}
}
#endif
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_QUOT
:
return
PREFIX
(
scanLit
)(
BT_QUOT
,
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_APOS
:
return
PREFIX
(
scanLit
)(
BT_APOS
,
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_LT
:
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_EXCL
:
return
PREFIX
(
scanDecl
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_QUEST
:
return
PREFIX
(
scanPi
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_NMSTRT
:
case
BT_HEX
:
case
BT_NONASCII
:
case
BT_LEAD2
:
case
BT_LEAD3
:
case
BT_LEAD4
:
*
nextTokPtr
=
ptr
-
MINBPC
;
return
XML_TOK_INSTANCE_START
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
case
BT_CR
:
if
(
ptr
+
MINBPC
==
end
)
return
XML_TOK_TRAILING_CR
;
/* fall through */
case
BT_S
:
case
BT_LF
:
for
(;;)
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
break
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_S
:
case
BT_LF
:
break
;
case
BT_CR
:
/* don't split CR/LF pair */
if
(
ptr
+
MINBPC
!=
end
)
break
;
/* fall through */
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_PROLOG_S
;
}
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_PROLOG_S
;
case
BT_PERCNT
:
return
PREFIX
(
scanPercent
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
case
BT_COMMA
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_COMMA
;
case
BT_LSQB
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_OPEN_BRACKET
;
case
BT_RSQB
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_PARTIAL
;
if
(
CHAR_MATCHES
(
enc
,
ptr
,
']'
))
{
if
(
ptr
+
MINBPC
==
end
)
return
XML_TOK_PARTIAL
;
if
(
CHAR_MATCHES
(
enc
,
ptr
+
MINBPC
,
'>'
))
{
*
nextTokPtr
=
ptr
+
2
*
MINBPC
;
return
XML_TOK_COND_SECT_CLOSE
;
}
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_CLOSE_BRACKET
;
case
BT_LPAR
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_OPEN_PAREN
;
case
BT_RPAR
:
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_INVALID
;
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_AST
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_CLOSE_PAREN_ASTERISK
;
case
BT_QUEST
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_CLOSE_PAREN_QUESTION
;
case
BT_PLUS
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_CLOSE_PAREN_PLUS
;
case
BT_CR
:
case
BT_LF
:
case
BT_S
:
case
BT_GT
:
case
BT_COMMA
:
case
BT_VERBAR
:
case
BT_RPAR
:
*
nextTokPtr
=
ptr
;
return
XML_TOK_CLOSE_PAREN
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
case
BT_VERBAR
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_OR
;
case
BT_GT
:
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_DECL_CLOSE
;
case
BT_NUM
:
return
PREFIX
(
scanPoundName
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
if (end - ptr < n) \
return XML_TOK_PARTIAL_CHAR; \
if (IS_NMSTRT_CHAR(enc, ptr, n)) { \
ptr += n; \
tok = XML_TOK_NAME; \
break; \
} \
if (IS_NAME_CHAR(enc, ptr, n)) { \
ptr += n; \
tok = XML_TOK_NMTOKEN; \
break; \
} \
*nextTokPtr = ptr; \
return XML_TOK_INVALID;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_NMSTRT
:
case
BT_HEX
:
tok
=
XML_TOK_NAME
;
ptr
+=
MINBPC
;
break
;
case
BT_DIGIT
:
case
BT_NAME
:
case
BT_MINUS
:
tok
=
XML_TOK_NMTOKEN
;
ptr
+=
MINBPC
;
break
;
case
BT_NONASCII
:
if
(
IS_NMSTRT_CHAR
(
enc
,
ptr
,
MINBPC
))
{
ptr
+=
MINBPC
;
tok
=
XML_TOK_NAME
;
break
;
}
if
(
IS_NAME_CHAR
(
enc
,
ptr
,
MINBPC
))
{
ptr
+=
MINBPC
;
tok
=
XML_TOK_NMTOKEN
;
break
;
}
/* fall through */
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
CHECK_NAME_CASES
(
enc
,
ptr
,
end
,
nextTokPtr
)
case
BT_GT
:
case
BT_RPAR
:
case
BT_COMMA
:
case
BT_VERBAR
:
case
BT_LSQB
:
case
BT_PERCNT
:
case
BT_S
:
case
BT_CR
:
case
BT_LF
:
*
nextTokPtr
=
ptr
;
return
tok
;
case
BT_PLUS
:
if
(
tok
!=
XML_TOK_NAME
)
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_NAME_PLUS
;
case
BT_AST
:
if
(
tok
!=
XML_TOK_NAME
)
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_NAME_ASTERISK
;
case
BT_QUEST
:
if
(
tok
!=
XML_TOK_NAME
)
{
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_NAME_QUESTION
;
default:
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
}
}
return
XML_TOK_PARTIAL
;
}
static
int
PREFIX
(
attributeValueTok
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
const
char
*
start
;
if
(
ptr
==
end
)
return
XML_TOK_NONE
;
start
=
ptr
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: ptr += n; break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_AMP
:
if
(
ptr
==
start
)
return
PREFIX
(
scanRef
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_LT
:
/* this is for inside entity references */
*
nextTokPtr
=
ptr
;
return
XML_TOK_INVALID
;
case
BT_LF
:
if
(
ptr
==
start
)
{
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_DATA_NEWLINE
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_CR
:
if
(
ptr
==
start
)
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_TRAILING_CR
;
if
(
BYTE_TYPE
(
enc
,
ptr
)
==
BT_LF
)
ptr
+=
MINBPC
;
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_NEWLINE
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_S
:
if
(
ptr
==
start
)
{
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_ATTRIBUTE_VALUE_S
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
default:
ptr
+=
MINBPC
;
break
;
}
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
}
static
int
PREFIX
(
entityValueTok
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
nextTokPtr
)
{
const
char
*
start
;
if
(
ptr
==
end
)
return
XML_TOK_NONE
;
start
=
ptr
;
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: ptr += n; break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_AMP
:
if
(
ptr
==
start
)
return
PREFIX
(
scanRef
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_PERCNT
:
if
(
ptr
==
start
)
return
PREFIX
(
scanPercent
)(
enc
,
ptr
+
MINBPC
,
end
,
nextTokPtr
);
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_LF
:
if
(
ptr
==
start
)
{
*
nextTokPtr
=
ptr
+
MINBPC
;
return
XML_TOK_DATA_NEWLINE
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
case
BT_CR
:
if
(
ptr
==
start
)
{
ptr
+=
MINBPC
;
if
(
ptr
==
end
)
return
XML_TOK_TRAILING_CR
;
if
(
BYTE_TYPE
(
enc
,
ptr
)
==
BT_LF
)
ptr
+=
MINBPC
;
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_NEWLINE
;
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
default:
ptr
+=
MINBPC
;
break
;
}
}
*
nextTokPtr
=
ptr
;
return
XML_TOK_DATA_CHARS
;
}
static
int
PREFIX
(
isPublicId
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
const
char
**
badPtr
)
{
ptr
+=
MINBPC
;
end
-=
MINBPC
;
for
(;
ptr
!=
end
;
ptr
+=
MINBPC
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_DIGIT
:
case
BT_HEX
:
case
BT_MINUS
:
case
BT_APOS
:
case
BT_LPAR
:
case
BT_RPAR
:
case
BT_PLUS
:
case
BT_COMMA
:
case
BT_SOL
:
case
BT_EQUALS
:
case
BT_QUEST
:
case
BT_CR
:
case
BT_LF
:
case
BT_SEMI
:
case
BT_EXCL
:
case
BT_AST
:
case
BT_PERCNT
:
case
BT_NUM
:
break
;
case
BT_S
:
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'\t'
))
{
*
badPtr
=
ptr
;
return
0
;
}
break
;
case
BT_NAME
:
case
BT_NMSTRT
:
if
(
!
(
BYTE_TO_ASCII
(
enc
,
ptr
)
&
~
0x7f
))
break
;
default:
switch
(
BYTE_TO_ASCII
(
enc
,
ptr
))
{
case
0x24
:
/* $ */
case
0x40
:
/* @ */
break
;
default:
*
badPtr
=
ptr
;
return
0
;
}
break
;
}
}
return
1
;
}
/* This must only be called for a well-formed start-tag or empty element tag.
Returns the number of attributes. Pointers to the first attsMax attributes
are stored in atts. */
static
int
PREFIX
(
getAtts
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
int
attsMax
,
ATTRIBUTE
*
atts
)
{
enum
{
other
,
inName
,
inValue
}
state
=
inName
;
int
nAtts
=
0
;
int
open
;
for
(
ptr
+=
MINBPC
;;
ptr
+=
MINBPC
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define START_NAME \
if (state == other) { \
if (nAtts < attsMax) { \
atts[nAtts].name = ptr; \
atts[nAtts].normalized = 1; \
} \
state = inName; \
}
#define LEAD_CASE(n) \
case BT_LEAD ## n: START_NAME ptr += (n - MINBPC); break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_NONASCII
:
case
BT_NMSTRT
:
case
BT_HEX
:
START_NAME
break
;
#undef START_NAME
case
BT_QUOT
:
if
(
state
!=
inValue
)
{
atts
[
nAtts
].
valuePtr
=
ptr
+
MINBPC
;
state
=
inValue
;
open
=
BT_QUOT
;
}
else
if
(
open
==
BT_QUOT
)
{
state
=
other
;
atts
[
nAtts
++
].
valueEnd
=
ptr
;
}
break
;
case
BT_APOS
:
if
(
state
!=
inValue
)
{
atts
[
nAtts
].
valuePtr
=
ptr
+
MINBPC
;
state
=
inValue
;
open
=
BT_APOS
;
}
else
if
(
open
==
BT_APOS
)
{
state
=
other
;
atts
[
nAtts
++
].
valueEnd
=
ptr
;
}
break
;
case
BT_AMP
:
atts
[
nAtts
].
normalized
=
0
;
break
;
case
BT_S
:
if
(
state
==
inName
)
state
=
other
;
else
if
(
state
==
inValue
&&
atts
[
nAtts
].
normalized
&&
(
ptr
==
atts
[
nAtts
].
valuePtr
||
BYTE_TO_ASCII
(
enc
,
ptr
)
!=
' '
||
BYTE_TO_ASCII
(
enc
,
ptr
+
MINBPC
)
==
' '
||
BYTE_TYPE
(
enc
,
ptr
+
MINBPC
)
==
open
))
atts
[
nAtts
].
normalized
=
0
;
break
;
case
BT_CR
:
case
BT_LF
:
/* This case ensures that the first attribute name is counted
Apart from that we could just change state on the quote. */
if
(
state
==
inName
)
state
=
other
;
else
if
(
state
==
inValue
)
atts
[
nAtts
].
normalized
=
0
;
break
;
case
BT_GT
:
case
BT_SOL
:
if
(
state
!=
inValue
)
return
nAtts
;
break
;
default:
break
;
}
}
/* not reached */
}
static
int
PREFIX
(
charRefNumber
)(
const
ENCODING
*
enc
,
const
char
*
ptr
)
{
int
result
=
0
;
/* skip &# */
ptr
+=
2
*
MINBPC
;
if
(
CHAR_MATCHES
(
enc
,
ptr
,
'x'
))
{
for
(
ptr
+=
MINBPC
;
!
CHAR_MATCHES
(
enc
,
ptr
,
';'
);
ptr
+=
MINBPC
)
{
int
c
=
BYTE_TO_ASCII
(
enc
,
ptr
);
switch
(
c
)
{
case
'0'
:
case
'1'
:
case
'2'
:
case
'3'
:
case
'4'
:
case
'5'
:
case
'6'
:
case
'7'
:
case
'8'
:
case
'9'
:
result
<<=
4
;
result
|=
(
c
-
'0'
);
break
;
case
'A'
:
case
'B'
:
case
'C'
:
case
'D'
:
case
'E'
:
case
'F'
:
result
<<=
4
;
result
+=
10
+
(
c
-
'A'
);
break
;
case
'a'
:
case
'b'
:
case
'c'
:
case
'd'
:
case
'e'
:
case
'f'
:
result
<<=
4
;
result
+=
10
+
(
c
-
'a'
);
break
;
}
if
(
result
>=
0x110000
)
return
-
1
;
}
}
else
{
for
(;
!
CHAR_MATCHES
(
enc
,
ptr
,
';'
);
ptr
+=
MINBPC
)
{
int
c
=
BYTE_TO_ASCII
(
enc
,
ptr
);
result
*=
10
;
result
+=
(
c
-
'0'
);
if
(
result
>=
0x110000
)
return
-
1
;
}
}
return
checkCharRefNumber
(
result
);
}
static
int
PREFIX
(
sameName
)(
const
ENCODING
*
enc
,
const
char
*
ptr1
,
const
char
*
ptr2
)
{
for
(;;)
{
switch
(
BYTE_TYPE
(
enc
,
ptr1
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
if (*ptr1++ != *ptr2++) \
return 0;
LEAD_CASE
(
4
)
LEAD_CASE
(
3
)
LEAD_CASE
(
2
)
#undef LEAD_CASE
/* fall through */
if
(
*
ptr1
++
!=
*
ptr2
++
)
return
0
;
break
;
case
BT_NONASCII
:
case
BT_NMSTRT
:
case
BT_HEX
:
case
BT_DIGIT
:
case
BT_NAME
:
case
BT_MINUS
:
if
(
*
ptr2
++
!=
*
ptr1
++
)
return
0
;
#if MINBPC > 1
if
(
*
ptr2
++
!=
*
ptr1
++
)
return
0
;
#if MINBPC > 2
if
(
*
ptr2
++
!=
*
ptr1
++
)
return
0
;
#if MINBPC > 3
if
(
*
ptr2
++
!=
*
ptr1
++
)
return
0
;
#endif
#endif
#endif
break
;
default:
#if MINBPC == 1
if
(
*
ptr1
==
*
ptr2
)
return
1
;
#endif
switch
(
BYTE_TYPE
(
enc
,
ptr2
))
{
case
BT_LEAD2
:
case
BT_LEAD3
:
case
BT_LEAD4
:
case
BT_NONASCII
:
case
BT_NMSTRT
:
case
BT_HEX
:
case
BT_DIGIT
:
case
BT_NAME
:
case
BT_MINUS
:
return
0
;
default:
return
1
;
}
}
}
/* not reached */
}
static
int
PREFIX
(
nameMatchesAscii
)(
const
ENCODING
*
enc
,
const
char
*
ptr1
,
const
char
*
ptr2
)
{
for
(;
*
ptr2
;
ptr1
+=
MINBPC
,
ptr2
++
)
{
if
(
!
CHAR_MATCHES
(
end
,
ptr1
,
*
ptr2
))
return
0
;
}
switch
(
BYTE_TYPE
(
enc
,
ptr1
))
{
case
BT_LEAD2
:
case
BT_LEAD3
:
case
BT_LEAD4
:
case
BT_NONASCII
:
case
BT_NMSTRT
:
case
BT_HEX
:
case
BT_DIGIT
:
case
BT_NAME
:
case
BT_MINUS
:
return
0
;
default:
return
1
;
}
}
static
int
PREFIX
(
nameLength
)(
const
ENCODING
*
enc
,
const
char
*
ptr
)
{
const
char
*
start
=
ptr
;
for
(;;)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: ptr += n; break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_NONASCII
:
case
BT_NMSTRT
:
case
BT_HEX
:
case
BT_DIGIT
:
case
BT_NAME
:
case
BT_MINUS
:
ptr
+=
MINBPC
;
break
;
default:
return
ptr
-
start
;
}
}
}
static
const
char
*
PREFIX
(
skipS
)(
const
ENCODING
*
enc
,
const
char
*
ptr
)
{
for
(;;)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
case
BT_LF
:
case
BT_CR
:
case
BT_S
:
ptr
+=
MINBPC
;
break
;
default:
return
ptr
;
}
}
}
static
void
PREFIX
(
updatePosition
)(
const
ENCODING
*
enc
,
const
char
*
ptr
,
const
char
*
end
,
POSITION
*
pos
)
{
while
(
ptr
!=
end
)
{
switch
(
BYTE_TYPE
(
enc
,
ptr
))
{
#define LEAD_CASE(n) \
case BT_LEAD ## n: \
ptr += n; \
break;
LEAD_CASE
(
2
)
LEAD_CASE
(
3
)
LEAD_CASE
(
4
)
#undef LEAD_CASE
case
BT_LF
:
pos
->
columnNumber
=
(
unsigned
)
-
1
;
pos
->
lineNumber
++
;
ptr
+=
MINBPC
;
break
;
case
BT_CR
:
pos
->
lineNumber
++
;
ptr
+=
MINBPC
;
if
(
ptr
!=
end
&&
BYTE_TYPE
(
enc
,
ptr
)
==
BT_LF
)
ptr
+=
MINBPC
;
pos
->
columnNumber
=
(
unsigned
)
-
1
;
break
;
default:
ptr
+=
MINBPC
;
break
;
}
pos
->
columnNumber
++
;
}
}
#undef DO_LEAD_CASE
#undef MULTIBYTE_CASES
#undef INVALID_CASES
#undef CHECK_NAME_CASE
#undef CHECK_NAME_CASES
#undef CHECK_NMSTRT_CASE
#undef CHECK_NMSTRT_CASES
lib/python/Shared/DC/xml/pyexpat/expat/xmltok/xmltok_impl.h
0 → 100644
View file @
d774be46
/*
The contents of this file are subject to the Mozilla Public License
Version 1.0 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is expat.
The Initial Developer of the Original Code is James Clark.
Portions created by James Clark are Copyright (C) 1998
James Clark. All Rights Reserved.
Contributor(s):
*/
enum
{
BT_NONXML
,
BT_MALFORM
,
BT_LT
,
BT_AMP
,
BT_RSQB
,
BT_LEAD2
,
BT_LEAD3
,
BT_LEAD4
,
BT_TRAIL
,
BT_CR
,
BT_LF
,
BT_GT
,
BT_QUOT
,
BT_APOS
,
BT_EQUALS
,
BT_QUEST
,
BT_EXCL
,
BT_SOL
,
BT_SEMI
,
BT_NUM
,
BT_LSQB
,
BT_S
,
BT_NMSTRT
,
BT_HEX
,
BT_DIGIT
,
BT_NAME
,
BT_MINUS
,
BT_OTHER
,
/* known not to be a name or name start character */
BT_NONASCII
,
/* might be a name or name start character */
BT_PERCNT
,
BT_LPAR
,
BT_RPAR
,
BT_AST
,
BT_PLUS
,
BT_COMMA
,
BT_VERBAR
};
#include <stddef.h>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment