Thread: [Faxpp-devel] SF.net SVN: faxpp: [2] trunk/faxpp
Status: Beta
Brought to you by:
jpcs
|
From: <jp...@us...> - 2007-07-25 16:39:22
|
Revision: 2
http://faxpp.svn.sourceforge.net/faxpp/?rev=2&view=rev
Author: jpcs
Date: 2007-07-25 09:39:25 -0700 (Wed, 25 Jul 2007)
Log Message:
-----------
Initial import of the faxpp project, ready for working towards the
version 0.1 release.
Added Paths:
-----------
trunk/faxpp/LICENSE
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/aclocal.m4
trunk/faxpp/autotools/
trunk/faxpp/autotools/config.guess
trunk/faxpp/autotools/config.sub
trunk/faxpp/autotools/depcomp
trunk/faxpp/autotools/install-sh
trunk/faxpp/autotools/ltmain.sh
trunk/faxpp/autotools/missing
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/include/
trunk/faxpp/include/Makefile.am
trunk/faxpp/include/Makefile.in
trunk/faxpp/include/faxpp/
trunk/faxpp/include/faxpp/buffer.h
trunk/faxpp/include/faxpp/char_classes.h
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/event.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/include/faxpp/transcode.h
trunk/faxpp/include/faxpp/xml_parser.h
trunk/faxpp/include/faxpp/xml_tokenizer.h
trunk/faxpp/src/
trunk/faxpp/src/attr_states.h
trunk/faxpp/src/buffer.c
trunk/faxpp/src/cdata.c
trunk/faxpp/src/char_classes.c
trunk/faxpp/src/comment.c
trunk/faxpp/src/config.h.in
trunk/faxpp/src/element.c
trunk/faxpp/src/element_states.h
trunk/faxpp/src/error.c
trunk/faxpp/src/event.c
trunk/faxpp/src/pi.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/test.c
trunk/faxpp/src/test2.c
trunk/faxpp/src/test3.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/transcode.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xmldecl.c
Added: trunk/faxpp/LICENSE
===================================================================
--- trunk/faxpp/LICENSE (rev 0)
+++ trunk/faxpp/LICENSE 2007-07-25 16:39:25 UTC (rev 2)
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
Added: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am (rev 0)
+++ trunk/faxpp/Makefile.am 2007-07-25 16:39:25 UTC (rev 2)
@@ -0,0 +1,41 @@
+AUTOMAKE_OPTIONS = foreign dist-zip
+SUBDIRS = include
+EXTRA_DIST =
+
+INCLUDES = -I$(top_srcdir)/include/
+
+bin_PROGRAMS = test test2 test3
+lib_LTLIBRARIES = libfaxpp.la
+
+# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
+libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
+
+libfaxpp_la_SOURCES = \
+src/xml_parser.c \
+src/xml_tokenizer.c \
+src/token.c \
+src/transcode.c \
+src/error.c \
+src/char_classes.c \
+src/tokenizer_states.h \
+src/tokenizer_states.c \
+src/cdata.c \
+src/comment.c \
+src/element.c \
+src/pi.c \
+src/reference.c \
+src/xmldecl.c \
+src/event.c \
+src/buffer.c \
+src/attr_states.h \
+src/element_states.h
+
+test_SOURCES = src/test.c
+test_LDADD = libfaxpp.la
+
+test2_SOURCES = src/test2.c
+test2_LDADD = libfaxpp.la
+
+test3_SOURCES = src/test3.c
+test3_LDADD = libfaxpp.la
+
Added: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in (rev 0)
+++ trunk/faxpp/Makefile.in 2007-07-25 16:39:25 UTC (rev 2)
@@ -0,0 +1,963 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = test$(EXEEXT) test2$(EXEEXT) test3$(EXEEXT)
+DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(top_srcdir)/configure \
+ $(top_srcdir)/src/config.h.in autotools/config.guess \
+ autotools/config.sub autotools/depcomp autotools/install-sh \
+ autotools/ltmain.sh autotools/missing
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"
+libLTLIBRARIES_INSTALL = $(INSTALL)
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libfaxpp_la_LIBADD =
+am_libfaxpp_la_OBJECTS = xml_parser.lo xml_tokenizer.lo token.lo \
+ transcode.lo error.lo char_classes.lo tokenizer_states.lo \
+ cdata.lo comment.lo element.lo pi.lo reference.lo xmldecl.lo \
+ event.lo buffer.lo
+libfaxpp_la_OBJECTS = $(am_libfaxpp_la_OBJECTS)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_test_OBJECTS = test.$(OBJEXT)
+test_OBJECTS = $(am_test_OBJECTS)
+test_DEPENDENCIES = libfaxpp.la
+am_test2_OBJECTS = test2.$(OBJEXT)
+test2_OBJECTS = $(am_test2_OBJECTS)
+test2_DEPENDENCIES = libfaxpp.la
+am_test3_OBJECTS = test3.$(OBJEXT)
+test3_OBJECTS = $(am_test3_OBJECTS)
+test3_DEPENDENCIES = libfaxpp.la
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libfaxpp_la_SOURCES) $(test_SOURCES) $(test2_SOURCES) \
+ $(test3_SOURCES)
+DIST_SOURCES = $(libfaxpp_la_SOURCES) $(test_SOURCES) $(test2_SOURCES) \
+ $(test3_SOURCES)
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+ html-recursive info-recursive install-data-recursive \
+ install-exec-recursive install-info-recursive \
+ install-recursive installcheck-recursive installdirs-recursive \
+ pdf-recursive ps-recursive uninstall-info-recursive \
+ uninstall-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).zip
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FFLAGS = @FFLAGS@
+GREP = @GREP@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_F77 = @ac_ct_F77@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign dist-zip
+SUBDIRS = include
+EXTRA_DIST =
+INCLUDES = -I$(top_srcdir)/include/
+lib_LTLIBRARIES = libfaxpp.la
+
+# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
+libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
+libfaxpp_la_SOURCES = \
+src/xml_parser.c \
+src/xml_tokenizer.c \
+src/token.c \
+src/transcode.c \
+src/error.c \
+src/char_classes.c \
+src/tokenizer_states.h \
+src/tokenizer_states.c \
+src/cdata.c \
+src/comment.c \
+src/element.c \
+src/pi.c \
+src/reference.c \
+src/xmldecl.c \
+src/event.c \
+src/buffer.c \
+src/attr_states.h \
+src/element_states.h
+
+test_SOURCES = src/test.c
+test_LDADD = libfaxpp.la
+test2_SOURCES = src/test2.c
+test2_LDADD = libfaxpp.la
+test3_SOURCES = src/test3.c
+test3_LDADD = libfaxpp.la
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
+ cd $(srcdir) && $(AUTOMAKE) --foreign \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+src/config.h: src/stamp-h1
+ @if test ! -f $@; then \
+ rm -f src/stamp-h1; \
+ $(MAKE) src/stamp-h1; \
+ else :; fi
+
+src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
+ @rm -f src/stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status src/config.h
+$(top_srcdir)/src/config.h.in: $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f src/stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f src/config.h src/stamp-h1
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ p=$(am__strip_dir) \
+ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ done
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+ test "$$dir" != "$$p" || dir=.; \
+ echo "rm -f \"$${dir}/so_locations\""; \
+ rm -f "$${dir}/so_locations"; \
+ done
+libfaxpp.la: $(libfaxpp_la_OBJECTS) $(libfaxpp_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libfaxpp_la_LDFLAGS) $(libfaxpp_la_OBJECTS) $(libfaxpp_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ || test -f $$p1 \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f $$p $$f"; \
+ rm -f $$p $$f ; \
+ done
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES)
+ @rm -f test$(EXEEXT)
+ $(LINK) $(test_LDFLAGS) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+test2$(EXEEXT): $(test2_OBJECTS) $(test2_DEPENDENCIES)
+ @rm -f test2$(EXEEXT)
+ $(LINK) $(test2_LDFLAGS) $(test2_OBJECTS) $(test2_LDADD) $(LIBS)
+test3$(EXEEXT): $(test3_OBJECTS) $(test3_DEPENDENCIES)
+ @rm -f test3$(EXEEXT)
+ $(LINK) $(test3_LDFLAGS) $(test3_OBJECTS) $(test3_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdata.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/char_classes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comment.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reference.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/token.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenizer_states.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transcode.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_parser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_tokenizer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldecl.Plo@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
+
+xml_parser.lo: src/xml_parser.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_parser.lo -MD -MP -MF "$(DEPDIR)/xml_parser.Tpo" -c -o xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parse...
[truncated message content] |
|
From: <jp...@us...> - 2007-07-26 00:57:08
|
Revision: 3
http://faxpp.svn.sourceforge.net/faxpp/?rev=3&view=rev
Author: jpcs
Date: 2007-07-25 17:57:01 -0700 (Wed, 25 Jul 2007)
Log Message:
-----------
Rewrote the public API, hiding the actual structures for the tokenizer
and parser.
Moved the test files to the examples directory, renamed them and rewrote
them to use the new public API.
Added a doxygen configuration file and added rules to the Makefiles for
generating documentation.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/include/Makefile.am
trunk/faxpp/include/Makefile.in
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/event.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/include/faxpp/transcode.h
trunk/faxpp/src/attr_states.h
trunk/faxpp/src/buffer.c
trunk/faxpp/src/cdata.c
trunk/faxpp/src/char_classes.c
trunk/faxpp/src/comment.c
trunk/faxpp/src/element.c
trunk/faxpp/src/element_states.h
trunk/faxpp/src/error.c
trunk/faxpp/src/event.c
trunk/faxpp/src/pi.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/transcode.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xmldecl.c
Added Paths:
-----------
trunk/faxpp/docs/
trunk/faxpp/docs/Doxyfile.api
trunk/faxpp/examples/
trunk/faxpp/examples/parser_example.c
trunk/faxpp/examples/tokenizer_example.c
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/text.h
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/buffer.h
trunk/faxpp/src/char_classes.h
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.h
Removed Paths:
-------------
trunk/faxpp/include/faxpp/buffer.h
trunk/faxpp/include/faxpp/char_classes.h
trunk/faxpp/include/faxpp/xml_parser.h
trunk/faxpp/include/faxpp/xml_tokenizer.h
trunk/faxpp/src/test.c
trunk/faxpp/src/test2.c
trunk/faxpp/src/test3.c
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-07-25 16:39:25 UTC (rev 2)
+++ trunk/faxpp/Makefile.am 2007-07-26 00:57:01 UTC (rev 3)
@@ -1,41 +1,52 @@
AUTOMAKE_OPTIONS = foreign dist-zip
SUBDIRS = include
-EXTRA_DIST =
INCLUDES = -I$(top_srcdir)/include/
-bin_PROGRAMS = test test2 test3
+noinst_PROGRAMS = tokenizer_example parser_example
lib_LTLIBRARIES = libfaxpp.la
# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
libfaxpp_la_SOURCES = \
-src/xml_parser.c \
-src/xml_tokenizer.c \
-src/token.c \
-src/transcode.c \
-src/error.c \
+src/attr_states.h \
+src/buffer.c \
+src/buffer.h \
+src/cdata.c \
src/char_classes.c \
-src/tokenizer_states.h \
-src/tokenizer_states.c \
-src/cdata.c \
+src/char_classes.h \
src/comment.c \
src/element.c \
+src/element_states.h \
+src/error.c \
+src/event.c \
src/pi.c \
src/reference.c \
+src/token.c \
+src/tokenizer_states.c \
+src/tokenizer_states.h \
+src/transcode.c \
src/xmldecl.c \
-src/event.c \
-src/buffer.c \
-src/attr_states.h \
-src/element_states.h
+src/xml_parser.c \
+src/xml_parser.h \
+src/xml_tokenizer.c \
+src/xml_tokenizer.h
-test_SOURCES = src/test.c
-test_LDADD = libfaxpp.la
+tokenizer_example_SOURCES = examples/tokenizer_example.c
+tokenizer_example_LDADD = libfaxpp.la
-test2_SOURCES = src/test2.c
-test2_LDADD = libfaxpp.la
+parser_example_SOURCES = examples/parser_example.c
+parser_example_LDADD = libfaxpp.la
-test3_SOURCES = src/test3.c
-test3_LDADD = libfaxpp.la
+EXTRA_DIST = \
+docs/Doxyfile.api \
+docs/api \
+LICENSE
+.PHONY: docs
+
+docs:
+ $(MAKE) -C include docs
+
+$(top_srcdir)/docs/api: docs
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-07-25 16:39:25 UTC (rev 2)
+++ trunk/faxpp/Makefile.in 2007-07-26 00:57:01 UTC (rev 3)
@@ -37,7 +37,7 @@
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-bin_PROGRAMS = test$(EXEEXT) test2$(EXEEXT) test3$(EXEEXT)
+noinst_PROGRAMS = tokenizer_example$(EXEEXT) parser_example$(EXEEXT)
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/configure \
$(top_srcdir)/src/config.h.in autotools/config.guess \
@@ -59,26 +59,22 @@
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(libdir)"
libLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(lib_LTLIBRARIES)
libfaxpp_la_LIBADD =
-am_libfaxpp_la_OBJECTS = xml_parser.lo xml_tokenizer.lo token.lo \
- transcode.lo error.lo char_classes.lo tokenizer_states.lo \
- cdata.lo comment.lo element.lo pi.lo reference.lo xmldecl.lo \
- event.lo buffer.lo
+am_libfaxpp_la_OBJECTS = buffer.lo cdata.lo char_classes.lo comment.lo \
+ element.lo error.lo event.lo pi.lo reference.lo token.lo \
+ tokenizer_states.lo transcode.lo xmldecl.lo xml_parser.lo \
+ xml_tokenizer.lo
libfaxpp_la_OBJECTS = $(am_libfaxpp_la_OBJECTS)
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS)
-am_test_OBJECTS = test.$(OBJEXT)
-test_OBJECTS = $(am_test_OBJECTS)
-test_DEPENDENCIES = libfaxpp.la
-am_test2_OBJECTS = test2.$(OBJEXT)
-test2_OBJECTS = $(am_test2_OBJECTS)
-test2_DEPENDENCIES = libfaxpp.la
-am_test3_OBJECTS = test3.$(OBJEXT)
-test3_OBJECTS = $(am_test3_OBJECTS)
-test3_DEPENDENCIES = libfaxpp.la
+PROGRAMS = $(noinst_PROGRAMS)
+am_parser_example_OBJECTS = parser_example.$(OBJEXT)
+parser_example_OBJECTS = $(am_parser_example_OBJECTS)
+parser_example_DEPENDENCIES = libfaxpp.la
+am_tokenizer_example_OBJECTS = tokenizer_example.$(OBJEXT)
+tokenizer_example_OBJECTS = $(am_tokenizer_example_OBJECTS)
+tokenizer_example_DEPENDENCIES = libfaxpp.la
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
am__depfiles_maybe = depfiles
@@ -90,10 +86,10 @@
CCLD = $(CC)
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libfaxpp_la_SOURCES) $(test_SOURCES) $(test2_SOURCES) \
- $(test3_SOURCES)
-DIST_SOURCES = $(libfaxpp_la_SOURCES) $(test_SOURCES) $(test2_SOURCES) \
- $(test3_SOURCES)
+SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
+ $(tokenizer_example_SOURCES)
+DIST_SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
+ $(tokenizer_example_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
@@ -217,38 +213,44 @@
target_alias = @target_alias@
AUTOMAKE_OPTIONS = foreign dist-zip
SUBDIRS = include
-EXTRA_DIST =
INCLUDES = -I$(top_srcdir)/include/
lib_LTLIBRARIES = libfaxpp.la
# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
libfaxpp_la_SOURCES = \
-src/xml_parser.c \
-src/xml_tokenizer.c \
-src/token.c \
-src/transcode.c \
-src/error.c \
-src/char_classes.c \
-src/tokenizer_states.h \
-src/tokenizer_states.c \
+src/attr_states.h \
+src/buffer.c \
+src/buffer.h \
src/cdata.c \
+src/char_classes.c \
+src/char_classes.h \
src/comment.c \
src/element.c \
+src/element_states.h \
+src/error.c \
+src/event.c \
src/pi.c \
src/reference.c \
+src/token.c \
+src/tokenizer_states.c \
+src/tokenizer_states.h \
+src/transcode.c \
src/xmldecl.c \
-src/event.c \
-src/buffer.c \
-src/attr_states.h \
-src/element_states.h
+src/xml_parser.c \
+src/xml_parser.h \
+src/xml_tokenizer.c \
+src/xml_tokenizer.h
-test_SOURCES = src/test.c
-test_LDADD = libfaxpp.la
-test2_SOURCES = src/test2.c
-test2_LDADD = libfaxpp.la
-test3_SOURCES = src/test3.c
-test3_LDADD = libfaxpp.la
+tokenizer_example_SOURCES = examples/tokenizer_example.c
+tokenizer_example_LDADD = libfaxpp.la
+parser_example_SOURCES = examples/parser_example.c
+parser_example_LDADD = libfaxpp.la
+EXTRA_DIST = \
+docs/Doxyfile.api \
+docs/api \
+LICENSE
+
all: all-recursive
.SUFFIXES:
@@ -332,43 +334,19 @@
done
libfaxpp.la: $(libfaxpp_la_OBJECTS) $(libfaxpp_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libfaxpp_la_LDFLAGS) $(libfaxpp_la_OBJECTS) $(libfaxpp_la_LIBADD) $(LIBS)
-install-binPROGRAMS: $(bin_PROGRAMS)
- @$(NORMAL_INSTALL)
- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
- if test -f $$p \
- || test -f $$p1 \
- ; then \
- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
- $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
- else :; fi; \
- done
-uninstall-binPROGRAMS:
- @$(NORMAL_UNINSTALL)
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
- rm -f "$(DESTDIR)$(bindir)/$$f"; \
- done
-
-clean-binPROGRAMS:
- @list='$(bin_PROGRAMS)'; for p in $$list; do \
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
-test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES)
- @rm -f test$(EXEEXT)
- $(LINK) $(test_LDFLAGS) $(test_OBJECTS) $(test_LDADD) $(LIBS)
-test2$(EXEEXT): $(test2_OBJECTS) $(test2_DEPENDENCIES)
- @rm -f test2$(EXEEXT)
- $(LINK) $(test2_LDFLAGS) $(test2_OBJECTS) $(test2_LDADD) $(LIBS)
-test3$(EXEEXT): $(test3_OBJECTS) $(test3_DEPENDENCIES)
- @rm -f test3$(EXEEXT)
- $(LINK) $(test3_LDFLAGS) $(test3_OBJECTS) $(test3_LDADD) $(LIBS)
+parser_example$(EXEEXT): $(parser_example_OBJECTS) $(parser_example_DEPENDENCIES)
+ @rm -f parser_example$(EXEEXT)
+ $(LINK) $(parser_example_LDFLAGS) $(parser_example_OBJECTS) $(parser_example_LDADD) $(LIBS)
+tokenizer_example$(EXEEXT): $(tokenizer_example_OBJECTS) $(tokenizer_example_DEPENDENCIES)
+ @rm -f tokenizer_example$(EXEEXT)
+ $(LINK) $(tokenizer_example_LDFLAGS) $(tokenizer_example_OBJECTS) $(tokenizer_example_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -383,12 +361,11 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reference.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test3.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/token.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenizer_example.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenizer_states.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transcode.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_parser.Plo@am__quote@
@@ -416,41 +393,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
-xml_parser.lo: src/xml_parser.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_parser.lo -MD -MP -MF "$(DEPDIR)/xml_parser.Tpo" -c -o xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xml_parser.Tpo" "$(DEPDIR)/xml_parser.Plo"; else rm -f "$(DEPDIR)/xml_parser.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xml_parser.c' object='xml_parser.lo' libtool=yes @AMDEPBACKSLASH@
+buffer.lo: src/buffer.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.lo -MD -MP -MF "$(DEPDIR)/buffer.Tpo" -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/buffer.Tpo" "$(DEPDIR)/buffer.Plo"; else rm -f "$(DEPDIR)/buffer.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/buffer.c' object='buffer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c
-xml_tokenizer.lo: src/xml_tokenizer.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_tokenizer.lo -MD -MP -MF "$(DEPDIR)/xml_tokenizer.Tpo" -c -o xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xml_tokenizer.Tpo" "$(DEPDIR)/xml_tokenizer.Plo"; else rm -f "$(DEPDIR)/xml_tokenizer.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xml_tokenizer.c' object='xml_tokenizer.lo' libtool=yes @AMDEPBACKSLASH@
+cdata.lo: src/cdata.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdata.lo -MD -MP -MF "$(DEPDIR)/cdata.Tpo" -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cdata.Tpo" "$(DEPDIR)/cdata.Plo"; else rm -f "$(DEPDIR)/cdata.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/cdata.c' object='cdata.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c
-token.lo: src/token.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.lo -MD -MP -MF "$(DEPDIR)/token.Tpo" -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/token.Tpo" "$(DEPDIR)/token.Plo"; else rm -f "$(DEPDIR)/token.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/token.c' object='token.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c
-
-transcode.lo: src/transcode.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transcode.lo -MD -MP -MF "$(DEPDIR)/transcode.Tpo" -c -o transcode.lo `test -f 'src/transcode.c' || echo '$(srcdir)/'`src/transcode.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transcode.Tpo" "$(DEPDIR)/transcode.Plo"; else rm -f "$(DEPDIR)/transcode.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/transcode.c' object='transcode.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transcode.lo `test -f 'src/transcode.c' || echo '$(srcdir)/'`src/transcode.c
-
-error.lo: src/error.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.lo -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Plo"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/error.c' object='error.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c
-
char_classes.lo: src/char_classes.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT char_classes.lo -MD -MP -MF "$(DEPDIR)/char_classes.Tpo" -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/char_classes.Tpo" "$(DEPDIR)/char_classes.Plo"; else rm -f "$(DEPDIR)/char_classes.Tpo"; exit 1; fi
@@ -458,20 +414,6 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c
-tokenizer_states.lo: src/tokenizer_states.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_states.lo -MD -MP -MF "$(DEPDIR)/tokenizer_states.Tpo" -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_states.Tpo" "$(DEPDIR)/tokenizer_states.Plo"; else rm -f "$(DEPDIR)/tokenizer_states.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/tokenizer_states.c' object='tokenizer_states.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c
-
-cdata.lo: src/cdata.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdata.lo -MD -MP -MF "$(DEPDIR)/cdata.Tpo" -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cdata.Tpo" "$(DEPDIR)/cdata.Plo"; else rm -f "$(DEPDIR)/cdata.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/cdata.c' object='cdata.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c
-
comment.lo: src/comment.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT comment.lo -MD -MP -MF "$(DEPDIR)/comment.Tpo" -c -o comment.lo `test -f 'src/comment.c' || echo '$(srcdir)/'`src/comment.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/comment.Tpo" "$(DEPDIR)/comment.Plo"; else rm -f "$(DEPDIR)/comment.Tpo"; exit 1; fi
@@ -486,6 +428,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o element.lo `test -f 'src/element.c' || echo '$(srcdir)/'`src/element.c
+error.lo: src/error.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.lo -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Plo"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/error.c' object='error.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c
+
+event.lo: src/event.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF "$(DEPDIR)/event.Tpo" -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/event.Tpo" "$(DEPDIR)/event.Plo"; else rm -f "$(DEPDIR)/event.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/event.c' object='event.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c
+
pi.lo: src/pi.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pi.lo -MD -MP -MF "$(DEPDIR)/pi.Tpo" -c -o pi.lo `test -f 'src/pi.c' || echo '$(srcdir)/'`src/pi.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pi.Tpo" "$(DEPDIR)/pi.Plo"; else rm -f "$(DEPDIR)/pi.Tpo"; exit 1; fi
@@ -500,6 +456,27 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reference.lo `test -f 'src/reference.c' || echo '$(srcdir)/'`src/reference.c
+token.lo: src/token.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.lo -MD -MP -MF "$(DEPDIR)/token.Tpo" -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/token.Tpo" "$(DEPDIR)/token.Plo"; else rm -f "$(DEPDIR)/token.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/token.c' object='token.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c
+
+tokenizer_states.lo: src/tokenizer_states.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_states.lo -MD -MP -MF "$(DEPDIR)/tokenizer_states.Tpo" -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_states.Tpo" "$(DEPDIR)/tokenizer_states.Plo"; else rm -f "$(DEPDIR)/tokenizer_states.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/tokenizer_states.c' object='tokenizer_states.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c
+
+transcode.lo: src/transcode.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transcode.lo -MD -MP -MF "$(DEPDIR)/transcode.Tpo" -c -o transcode.lo `test -f 'src/transcode.c' || echo '$(srcdir)/'`src/transcode.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transcode.Tpo" "$(DEPDIR)/transcode.Plo"; else rm -f "$(DEPDIR)/transcode.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/transcode.c' object='transcode.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o transcode.lo `test -f 'src/transcode.c' || echo '$(srcdir)/'`src/transcode.c
+
xmldecl.lo: src/xmldecl.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xmldecl.lo -MD -MP -MF "$(DEPDIR)/xmldecl.Tpo" -c -o xmldecl.lo `test -f 'src/xmldecl.c' || echo '$(srcdir)/'`src/xmldecl.c; \
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xmldecl.Tpo" "$(DEPDIR)/xmldecl.Plo"; else rm -f "$(DEPDIR)/xmldecl.Tpo"; exit 1; fi
@@ -507,62 +484,48 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xmldecl.lo `test -f 'src/xmldecl.c' || echo '$(srcdir)/'`src/xmldecl.c
-event.lo: src/event.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF "$(DEPDIR)/event.Tpo" -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/event.Tpo" "$(DEPDIR)/event.Plo"; else rm -f "$(DEPDIR)/event.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/event.c' object='event.lo' libtool=yes @AMDEPBACKSLASH@
+xml_parser.lo: src/xml_parser.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_parser.lo -MD -MP -MF "$(DEPDIR)/xml_parser.Tpo" -c -o xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xml_parser.Tpo" "$(DEPDIR)/xml_parser.Plo"; else rm -f "$(DEPDIR)/xml_parser.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xml_parser.c' object='xml_parser.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.c
-buffer.lo: src/buffer.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.lo -MD -MP -MF "$(DEPDIR)/buffer.Tpo" -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/buffer.Tpo" "$(DEPDIR)/buffer.Plo"; else rm -f "$(DEPDIR)/buffer.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/buffer.c' object='buffer.lo' libtool=yes @AMDEPBACKSLASH@
+xml_tokenizer.lo: src/xml_tokenizer.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xml_tokenizer.lo -MD -MP -MF "$(DEPDIR)/xml_tokenizer.Tpo" -c -o xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xml_tokenizer.Tpo" "$(DEPDIR)/xml_tokenizer.Plo"; else rm -f "$(DEPDIR)/xml_tokenizer.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xml_tokenizer.c' object='xml_tokenizer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-09 10:29:57
|
Revision: 11
http://faxpp.svn.sourceforge.net/faxpp/?rev=11&view=rev
Author: jpcs
Date: 2007-08-09 03:29:57 -0700 (Thu, 09 Aug 2007)
Log Message:
-----------
Bumped the version number.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/docs/Doxyfile.api
trunk/faxpp/docs/header.html
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/Makefile.am 2007-08-09 10:29:57 UTC (rev 11)
@@ -7,7 +7,7 @@
lib_LTLIBRARIES = libfaxpp.la
# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
-libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
+libfaxpp_la_LDFLAGS = -version-info 1:0:0 -no-undefined
libfaxpp_la_SOURCES = \
src/attr_states.h \
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/Makefile.in 2007-08-09 10:29:57 UTC (rev 11)
@@ -221,7 +221,7 @@
lib_LTLIBRARIES = libfaxpp.la
# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
-libfaxpp_la_LDFLAGS = -version-info 0:0:0 -no-undefined
+libfaxpp_la_LDFLAGS = -version-info 1:0:0 -no-undefined
libfaxpp_la_SOURCES = \
src/attr_states.h \
src/buffer.c \
Modified: trunk/faxpp/configure
===================================================================
--- trunk/faxpp/configure 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/configure 2007-08-09 10:29:57 UTC (rev 11)
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for faxpp 0.1.
+# Generated by GNU Autoconf 2.61 for faxpp 0.2.
#
# Report bugs to <jo...@sn...>.
#
@@ -728,8 +728,8 @@
# Identity of this package.
PACKAGE_NAME='faxpp'
PACKAGE_TARNAME='faxpp'
-PACKAGE_VERSION='0.1'
-PACKAGE_STRING='faxpp 0.1'
+PACKAGE_VERSION='0.2'
+PACKAGE_STRING='faxpp 0.2'
PACKAGE_BUGREPORT='jo...@sn...'
ac_unique_file="include/faxpp/parser.h"
@@ -1389,7 +1389,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures faxpp 0.1 to adapt to many kinds of systems.
+\`configure' configures faxpp 0.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1459,7 +1459,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of faxpp 0.1:";;
+ short | recursive ) echo "Configuration of faxpp 0.2:";;
esac
cat <<\_ACEOF
@@ -1563,7 +1563,7 @@
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-faxpp configure 0.1
+faxpp configure 0.2
generated by GNU Autoconf 2.61
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1577,7 +1577,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by faxpp $as_me 0.1, which was
+It was created by faxpp $as_me 0.2, which was
generated by GNU Autoconf 2.61. Invocation command line was
$ $0 $@
@@ -2247,7 +2247,7 @@
# Define the identity of the package.
PACKAGE=faxpp
- VERSION=0.1
+ VERSION=0.2
# Some tools Automake needs.
@@ -21336,7 +21336,7 @@
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by faxpp $as_me 0.1, which was
+This file was extended by faxpp $as_me 0.2, which was
generated by GNU Autoconf 2.61. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -21389,7 +21389,7 @@
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-faxpp config.status 0.1
+faxpp config.status 0.2
configured by $0, generated by GNU Autoconf 2.61,
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
Modified: trunk/faxpp/configure.in
===================================================================
--- trunk/faxpp/configure.in 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/configure.in 2007-08-09 10:29:57 UTC (rev 11)
@@ -2,9 +2,9 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT(faxpp, 0.1, jo...@sn...)
+AC_INIT(faxpp, 0.2, jo...@sn...)
AC_CONFIG_AUX_DIR(autotools)
-AM_INIT_AUTOMAKE(faxpp, 0.1, jo...@sn...)
+AM_INIT_AUTOMAKE(faxpp, 0.2, jo...@sn...)
AC_CONFIG_SRCDIR([include/faxpp/parser.h])
AM_CONFIG_HEADER([src/config.h])
Modified: trunk/faxpp/docs/Doxyfile.api
===================================================================
--- trunk/faxpp/docs/Doxyfile.api 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/docs/Doxyfile.api 2007-08-09 10:29:57 UTC (rev 11)
@@ -23,7 +23,7 @@
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 0.1
+PROJECT_NUMBER = 0.2
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
Modified: trunk/faxpp/docs/header.html
===================================================================
--- trunk/faxpp/docs/header.html 2007-08-08 14:02:32 UTC (rev 10)
+++ trunk/faxpp/docs/header.html 2007-08-09 10:29:57 UTC (rev 11)
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Faxpp Documentation</title>
+<title>Faxpp 0.2 Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-08-13 23:38:53
|
Revision: 16
http://faxpp.svn.sourceforge.net/faxpp/?rev=16&view=rev
Author: jpcs
Date: 2007-08-13 16:38:46 -0700 (Mon, 13 Aug 2007)
Log Message:
-----------
Removed the buffering of tokens in the parser, which simplifies it and
fixes a bug in the encoding changing routines.
Modified Paths:
--------------
trunk/faxpp/Makefile.in
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/pi.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xmldecl.c
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/Makefile.in 2007-08-13 23:38:46 UTC (rev 16)
@@ -41,7 +41,7 @@
xmlconf_runner$(EXEEXT)
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/configure \
- $(top_srcdir)/src/config.h.in autotools/config.guess \
+ $(top_srcdir)/src/config.h.in TODO autotools/config.guess \
autotools/config.sub autotools/depcomp autotools/install-sh \
autotools/ltmain.sh autotools/missing
subdir = .
@@ -256,7 +256,8 @@
docs/Doxyfile.api \
docs/header.html \
docs/api \
-LICENSE
+LICENSE \
+TODO
all: all-recursive
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/include/faxpp/token.h 2007-08-13 23:38:46 UTC (rev 16)
@@ -26,6 +26,7 @@
XML_DECL_VERSION_TOKEN,
XML_DECL_ENCODING_TOKEN,
XML_DECL_STANDALONE_TOKEN,
+ XML_DECL_END_TOKEN,
START_ELEMENT_PREFIX_TOKEN,
START_ELEMENT_NAME_TOKEN,
Modified: trunk/faxpp/src/pi.c
===================================================================
--- trunk/faxpp/src/pi.c 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/pi.c 2007-08-13 23:38:46 UTC (rev 16)
@@ -181,7 +181,7 @@
base_state(env);
env->token_buffer.cursor = 0;
env->token.value.len = env->token_position1 - env->token.value.ptr;
- report_token(PI_VALUE_TOKEN, env);
+ report_token_maybe_empty(PI_VALUE_TOKEN, env);
next_char(env);
token_start_position(env);
break;
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/token.c 2007-08-13 23:38:46 UTC (rev 16)
@@ -64,6 +64,8 @@
return "XML_DECL_ENCODING_TOKEN";
case XML_DECL_STANDALONE_TOKEN:
return "XML_DECL_STANDALONE_TOKEN";
+ case XML_DECL_END_TOKEN:
+ return "XML_DECL_END_TOKEN";
case XMLNS_PREFIX_TOKEN:
return "XMLNS_PREFIX_TOKEN";
case XMLNS_NAME_TOKEN:
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-13 23:38:46 UTC (rev 16)
@@ -335,6 +335,15 @@
} \
}
+#define report_token_maybe_empty(token_int, env) \
+{ \
+ if((env)->token.value.len == 0) (env)->token.value.ptr = 0; \
+ memcpy(&(env)->result_token, &(env)->token, sizeof(FAXPP_Token)); \
+ (env)->result_token.type = (token_int); \
+ (env)->token.value.ptr = 0; \
+ (env)->token.value.len = 0; \
+}
+
#define report_empty_token(token_int, env) \
{ \
(env)->result_token.type = (token_int); \
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/xml_parser.c 2007-08-13 23:38:46 UTC (rev 16)
@@ -35,9 +35,7 @@
FAXPP_Error init_tokenizer_internal(FAXPP_TokenizerEnv *env);
void free_tokenizer_internal(FAXPP_TokenizerEnv *env);
-static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env);
-static FAXPP_Error nc_pi_content_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error nc_unsupported_encoding_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error wf_next_event(FAXPP_ParserEnv *env);
@@ -58,7 +56,7 @@
break;
}
- env->next_event = nc_start_document_next_event;
+ env->next_event = env->main_next_event;
env->max_attr_count = INITIAL_ATTRS_SIZE;
env->attrs = (FAXPP_Attribute*)malloc(sizeof(FAXPP_Attribute) * INITIAL_ATTRS_SIZE);
@@ -161,15 +159,13 @@
// Reset the stack buffer cursor
FAXPP_reset_buffer(&env->stack_buffer);
- env->buffered_token = 0;
-
if(allocate_buffer && !env->read_buffer) {
env->read_buffer = malloc(READ_BUFFER_SIZE);
if(!env->read_buffer) return OUT_OF_MEMORY;
env->read_buffer_length = READ_BUFFER_SIZE;
}
- env->next_event = nc_start_document_next_event;
+ env->next_event = env->main_next_event;
return NO_ERROR;
}
@@ -424,16 +420,11 @@
#define p_next_token(err, env) \
{ \
- if((env)->buffered_token) { \
- (env)->buffered_token = 0; \
- } else { \
- (env)->tenv.result_token.type = NO_TOKEN; \
- while((env)->tenv.result_token.type == NO_TOKEN) { \
- (err) = (env)->tenv.state(&(env)->tenv); \
- p_check_err((err), (env)); \
- } \
+ (env)->tenv.result_token.type = NO_TOKEN; \
+ while((env)->tenv.result_token.type == NO_TOKEN) { \
+ (err) = (env)->tenv.state(&(env)->tenv); \
+ p_check_err((err), (env)); \
} \
-\
/* p_print_token(env); */ \
}
@@ -673,8 +664,13 @@
return text_ptr == text_end;
}
-static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env)
+static FAXPP_Error nc_unsupported_encoding_next_event(FAXPP_ParserEnv *env)
{
+ return UNSUPPORTED_ENCODING;
+}
+
+static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env)
+{
FAXPP_Error err = 0;
p_reset_event(env);
@@ -693,8 +689,7 @@
case XML_DECL_STANDALONE_TOKEN:
p_copy_text_from_token(&env->event.standalone, env, /*useTokenBuffer*/0);
break;
- default:
- env->buffered_token = 1;
+ case XML_DECL_END_TOKEN:
env->next_event = nc_unsupported_encoding_next_event;
env->event.type = START_DOCUMENT_EVENT;
@@ -744,48 +739,6 @@
}
return NO_ERROR;
- }
- }
-
- // Never happens
- return NO_ERROR;
-}
-
-static FAXPP_Error nc_pi_content_next_event(FAXPP_ParserEnv *env)
-{
- FAXPP_Error err = 0;
-
- p_next_token(err, env);
-
- switch(env->tenv.result_token.type) {
- case PI_VALUE_TOKEN:
- p_copy_text_from_token(&env->event.value, env, /*useTokenBuffer*/0);
- break;
- default:
- env->buffered_token = 1;
- break;
- }
-
- env->next_event = env->main_next_event;
- env->event.type = PI_EVENT;
- return NO_ERROR;
-}
-
-static FAXPP_Error nc_unsupported_encoding_next_event(FAXPP_ParserEnv *env)
-{
- return UNSUPPORTED_ENCODING;
-}
-
-static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env)
-{
- FAXPP_Error err = 0;
-
- p_reset_event(env);
-
- while(1) {
- p_next_token(err, env);
-
- switch(env->tenv.result_token.type) {
case START_ELEMENT_PREFIX_TOKEN:
p_copy_text_from_token(&env->event.prefix, env, /*useTokenBuffer*/0);
p_set_location_from_token(env);
@@ -895,9 +848,11 @@
case PI_NAME_TOKEN:
p_copy_text_from_token(&env->event.name, env, /*useTokenBuffer*/0);
p_set_location_from_token(env);
-
- env->next_event = nc_pi_content_next_event;
- return nc_pi_content_next_event(env);
+ break;
+ case PI_VALUE_TOKEN:
+ p_copy_text_from_token(&env->event.value, env, /*useTokenBuffer*/0);
+ env->event.type = PI_EVENT;
+ return NO_ERROR;
case AMP_ENTITY_REFERENCE_TOKEN:
if(env->current_attr) {
err = p_set_attr_value_name(env->current_attr, env, ENTITY_REFERENCE_EVENT, '&');
@@ -1021,10 +976,6 @@
env->event.type = END_DOCUMENT_EVENT;
return NO_ERROR;
case NO_TOKEN:
- case XML_DECL_VERSION_TOKEN:
- case XML_DECL_ENCODING_TOKEN:
- case XML_DECL_STANDALONE_TOKEN:
- case PI_VALUE_TOKEN:
break;
}
}
@@ -1201,10 +1152,8 @@
switch(env->event.type) {
case START_DOCUMENT_EVENT:
- // Handled in nc_start_document_next_event
break;
case PI_EVENT:
- // Handled in nc_pi_content_next_event
break;
case END_DOCUMENT_EVENT:
break;
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/xml_parser.h 2007-08-13 23:38:46 UTC (rev 16)
@@ -64,7 +64,6 @@
unsigned int read_buffer_length;
FAXPP_TokenizerEnv tenv;
- unsigned int buffered_token:1;
unsigned int null_terminate:1;
unsigned int err_line;
Modified: trunk/faxpp/src/xmldecl.c
===================================================================
--- trunk/faxpp/src/xmldecl.c 2007-08-13 11:00:27 UTC (rev 15)
+++ trunk/faxpp/src/xmldecl.c 2007-08-13 23:38:46 UTC (rev 16)
@@ -673,6 +673,7 @@
switch(env->current_char) {
case '>':
env->state = initial_misc_state;
+ report_empty_token(XML_DECL_END_TOKEN, env);
next_char(env);
token_start_position(env);
break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2008-01-10 12:26:24
|
Revision: 35
http://faxpp.svn.sourceforge.net/faxpp/?rev=35&view=rev
Author: jpcs
Date: 2008-01-10 04:26:27 -0800 (Thu, 10 Jan 2008)
Log Message:
-----------
Added line and column numbers to attribute values.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/event.h
trunk/faxpp/src/xml_parser.c
Modified: trunk/faxpp/include/faxpp/event.h
===================================================================
--- trunk/faxpp/include/faxpp/event.h 2007-10-03 09:39:11 UTC (rev 34)
+++ trunk/faxpp/include/faxpp/event.h 2008-01-10 12:26:27 UTC (rev 35)
@@ -44,6 +44,9 @@
FAXPP_Text name;
FAXPP_Text value; ///< The value of the item in the attribute's value. \details Present for all possible event types
+ unsigned int line; ///< The line the attribute value started on
+ unsigned int column; ///< The column the attribute value started on
+
struct FAXPP_AttrValue_s *next; ///< The next item in the attribute's value, or 0
/// Private - \b Do \b not \b use
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-10-03 09:39:11 UTC (rev 34)
+++ trunk/faxpp/src/xml_parser.c 2008-01-10 12:26:27 UTC (rev 35)
@@ -584,6 +584,8 @@
p_copy_text_from_token(&newatval->value, env, /*useTokenBuffer*/0);
newatval->type = type;
+ newatval->line = env->tenv.result_token.line;
+ newatval->column = env->tenv.result_token.column;
return NO_ERROR;
}
@@ -617,6 +619,8 @@
p_copy_text_from_token(&newatval->name, env, /*useTokenBuffer*/0);
newatval->type = type;
+ newatval->line = env->tenv.result_token.line;
+ newatval->column = env->tenv.result_token.column;
if(ch != 0) {
p_set_text_to_char(&newatval->value, env, ch);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2008-03-14 15:24:58
|
Revision: 43
http://faxpp.svn.sourceforge.net/faxpp/?rev=43&view=rev
Author: jpcs
Date: 2008-03-14 08:24:54 -0700 (Fri, 14 Mar 2008)
Log Message:
-----------
Added the ability to parse conditional sections in external DTDs.
Added tokens for attlist declarations.
Fixed a few memory bugs shown by valgrind.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/attlistdecl.c
trunk/faxpp/src/doctype.c
trunk/faxpp/src/elementdecl.c
trunk/faxpp/src/error.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
trunk/faxpp/tests/xmlconf_runner.c
Added Paths:
-----------
trunk/faxpp/src/conditional.c
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/Makefile.am 2008-03-14 15:24:54 UTC (rev 43)
@@ -36,7 +36,8 @@
src/elementdecl.c \
src/attlistdecl.c \
src/notationdecl.c \
-src/entitydecl.c
+src/entitydecl.c \
+src/conditional.c
tokenizer_example_LDADD = libfaxpp.la
tokenizer_example_SOURCES = examples/tokenizer_example.c
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/Makefile.in 2008-03-14 15:24:54 UTC (rev 43)
@@ -64,7 +64,7 @@
element.lo error.lo event.lo pi.lo reference.lo token.lo \
tokenizer_states.lo transcode.lo xmldecl.lo xml_parser.lo \
xml_tokenizer.lo doctype.lo elementdecl.lo attlistdecl.lo \
- notationdecl.lo entitydecl.lo
+ notationdecl.lo entitydecl.lo conditional.lo
libfaxpp_la_OBJECTS = $(am_libfaxpp_la_OBJECTS)
libfaxpp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -259,7 +259,8 @@
src/elementdecl.c \
src/attlistdecl.c \
src/notationdecl.c \
-src/entitydecl.c
+src/entitydecl.c \
+src/conditional.c
tokenizer_example_LDADD = libfaxpp.la
tokenizer_example_SOURCES = examples/tokenizer_example.c
@@ -394,6 +395,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdata.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/char_classes.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comment.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conditional.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doctype.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elementdecl.Plo@am__quote@
@@ -576,6 +578,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o entitydecl.lo `test -f 'src/entitydecl.c' || echo '$(srcdir)/'`src/entitydecl.c
+conditional.lo: src/conditional.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT conditional.lo -MD -MP -MF $(DEPDIR)/conditional.Tpo -c -o conditional.lo `test -f 'src/conditional.c' || echo '$(srcdir)/'`src/conditional.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/conditional.Tpo $(DEPDIR)/conditional.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/conditional.c' object='conditional.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o conditional.lo `test -f 'src/conditional.c' || echo '$(srcdir)/'`src/conditional.c
+
parser_example.o: examples/parser_example.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser_example.o -MD -MP -MF $(DEPDIR)/parser_example.Tpo -c -o parser_example.o `test -f 'examples/parser_example.c' || echo '$(srcdir)/'`examples/parser_example.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/parser_example.Tpo $(DEPDIR)/parser_example.Po
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/include/faxpp/error.h 2008-03-14 15:24:54 UTC (rev 43)
@@ -68,6 +68,7 @@
INVALID_ATTRIBUTE_TYPE,
INVALID_DEFAULTDECL,
INVALID_ELEMENTDECL_CONTENT,
+ INVALID_CONDITIONAL_SECTION,
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/include/faxpp/token.h 2008-03-14 15:24:54 UTC (rev 43)
@@ -91,8 +91,19 @@
ATTLISTDECL_NAME_TOKEN,
ATTLISTDECL_ATTDEF_PREFIX_TOKEN,
ATTLISTDECL_ATTDEF_NAME_TOKEN,
+ ATTLISTDECL_ATTTYPE_ENTITY_TOKEN,
+ ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN,
+ ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN,
+ ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN,
+ ATTLISTDECL_ATTTYPE_ID_TOKEN,
+ ATTLISTDECL_ATTTYPE_IDREF_TOKEN,
+ ATTLISTDECL_ATTTYPE_IDREFS_TOKEN,
+ ATTLISTDECL_ATTTYPE_CDATA_TOKEN,
ATTLISTDECL_NOTATION_NAME_TOKEN,
ATTLISTDECL_ENUMERATION_NAME_TOKEN,
+ ATTLISTDECL_DEFAULT_IMPLIED_TOKEN,
+ ATTLISTDECL_DEFAULT_REQUIRED_TOKEN,
+ ATTLISTDECL_DEFAULT_FIXED_TOKEN,
ATTLISTDECL_END_TOKEN,
NOTATIONDECL_NAME_TOKEN,
Modified: trunk/faxpp/src/attlistdecl.c
===================================================================
--- trunk/faxpp/src/attlistdecl.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/attlistdecl.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -17,7 +17,7 @@
#include "tokenizer_states.h"
#include "char_classes.h"
-#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) \
+#define SINGLE_CHAR_STATE_RETURN(name, ch, next_stored_state, next_state, error, return_token) \
FAXPP_Error \
name(FAXPP_TokenizerEnv *env) \
{ \
@@ -27,6 +27,7 @@
case (ch): \
if((next_stored_state) != 0) env->stored_state = (next_stored_state); \
env->state = (next_state); \
+ if((return_token) != NO_TOKEN) { report_empty_token((return_token), env); } \
next_char(env); \
break; \
LINE_ENDINGS \
@@ -37,6 +38,8 @@
return NO_ERROR; \
}
+#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) SINGLE_CHAR_STATE_RETURN(name, ch, next_stored_state, next_state, error, NO_TOKEN)
+
SINGLE_CHAR_STATE(attlistdecl_initial_state1, 'T', 0, attlistdecl_initial_state2, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(attlistdecl_initial_state2, 'T', 0, attlistdecl_initial_state3, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(attlistdecl_initial_state3, 'L', 0, attlistdecl_initial_state4, INVALID_DTD_DECL)
@@ -316,9 +319,9 @@
switch(env->current_char) {
case 'Y':
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_ENTITY_TOKEN, env);
break;
case 'I':
env->state = attlistdecl_atttype_entities_state1;
@@ -333,10 +336,8 @@
return NO_ERROR;
}
-// TBD Tokens for these - jpcs
-
SINGLE_CHAR_STATE(attlistdecl_atttype_entities_state1, 'E', 0, attlistdecl_atttype_entities_state2, INVALID_ATTRIBUTE_TYPE)
-SINGLE_CHAR_STATE(attlistdecl_atttype_entities_state2, 'S', attlistdecl_default_state1, ws_plus_state, INVALID_ATTRIBUTE_TYPE)
+SINGLE_CHAR_STATE_RETURN(attlistdecl_atttype_entities_state2, 'S', attlistdecl_default_state1, ws_plus_state, INVALID_ATTRIBUTE_TYPE, ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN)
FAXPP_Error
attlistdecl_atttype_nmtoken_state1(FAXPP_TokenizerEnv *env)
@@ -373,14 +374,14 @@
switch(env->current_char) {
WHITESPACE:
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN, env);
break;
case 'S':
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_plus_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN, env);
break;
default:
next_char(env);
@@ -391,8 +392,6 @@
return NO_ERROR;
}
-// TBD Tokens for these - jpcs
-
SINGLE_CHAR_STATE(attlistdecl_atttype_notation_state1, 'T', 0, attlistdecl_atttype_notation_state2, INVALID_ATTRIBUTE_TYPE)
SINGLE_CHAR_STATE(attlistdecl_atttype_notation_state2, 'A', 0, attlistdecl_atttype_notation_state3, INVALID_ATTRIBUTE_TYPE)
SINGLE_CHAR_STATE(attlistdecl_atttype_notation_state3, 'T', 0, attlistdecl_atttype_notation_state4, INVALID_ATTRIBUTE_TYPE)
@@ -504,9 +503,9 @@
switch(env->current_char) {
WHITESPACE:
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_ID_TOKEN, env);
break;
case 'R':
env->state = attlistdecl_atttype_idref_state1;
@@ -530,14 +529,14 @@
switch(env->current_char) {
WHITESPACE:
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_IDREF_TOKEN, env);
break;
case 'S':
- // TBD Tokens for these - jpcs
env->stored_state = attlistdecl_default_state1;
env->state = ws_plus_state;
+ report_empty_token(ATTLISTDECL_ATTTYPE_IDREFS_TOKEN, env);
break;
default:
next_char(env);
@@ -548,12 +547,10 @@
return NO_ERROR;
}
-// TBD Tokens for these - jpcs
-
SINGLE_CHAR_STATE(attlistdecl_atttype_cdata_state1, 'D', 0, attlistdecl_atttype_cdata_state2, INVALID_ATTRIBUTE_TYPE)
SINGLE_CHAR_STATE(attlistdecl_atttype_cdata_state2, 'A', 0, attlistdecl_atttype_cdata_state3, INVALID_ATTRIBUTE_TYPE)
SINGLE_CHAR_STATE(attlistdecl_atttype_cdata_state3, 'T', 0, attlistdecl_atttype_cdata_state4, INVALID_ATTRIBUTE_TYPE)
-SINGLE_CHAR_STATE(attlistdecl_atttype_cdata_state4, 'A', attlistdecl_default_state1, ws_plus_state, INVALID_ATTRIBUTE_TYPE)
+SINGLE_CHAR_STATE_RETURN(attlistdecl_atttype_cdata_state4, 'A', attlistdecl_default_state1, ws_plus_state, INVALID_ATTRIBUTE_TYPE, ATTLISTDECL_ATTTYPE_CDATA_TOKEN)
FAXPP_Error
attlistdecl_atttype_enumeration_name_state1(FAXPP_TokenizerEnv *env)
@@ -688,14 +685,12 @@
return NO_ERROR;
}
-// TBD Tokens for these - jpcs
-
SINGLE_CHAR_STATE(attlistdecl_default_implied_state1, 'M', 0, attlistdecl_default_implied_state2, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_implied_state2, 'P', 0, attlistdecl_default_implied_state3, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_implied_state3, 'L', 0, attlistdecl_default_implied_state4, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_implied_state4, 'I', 0, attlistdecl_default_implied_state5, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_implied_state5, 'E', 0, attlistdecl_default_implied_state6, INVALID_DEFAULTDECL)
-SINGLE_CHAR_STATE(attlistdecl_default_implied_state6, 'D', 0, attlistdecl_attdef_name_state1, INVALID_DEFAULTDECL)
+SINGLE_CHAR_STATE_RETURN(attlistdecl_default_implied_state6, 'D', 0, attlistdecl_attdef_name_state1, INVALID_DEFAULTDECL, ATTLISTDECL_DEFAULT_IMPLIED_TOKEN)
SINGLE_CHAR_STATE(attlistdecl_default_required_state1, 'E', 0, attlistdecl_default_required_state2, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_required_state2, 'Q', 0, attlistdecl_default_required_state3, INVALID_DEFAULTDECL)
@@ -703,12 +698,12 @@
SINGLE_CHAR_STATE(attlistdecl_default_required_state4, 'I', 0, attlistdecl_default_required_state5, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_required_state5, 'R', 0, attlistdecl_default_required_state6, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_required_state6, 'E', 0, attlistdecl_default_required_state7, INVALID_DEFAULTDECL)
-SINGLE_CHAR_STATE(attlistdecl_default_required_state7, 'D', 0, attlistdecl_attdef_name_state1, INVALID_DEFAULTDECL)
+SINGLE_CHAR_STATE_RETURN(attlistdecl_default_required_state7, 'D', 0, attlistdecl_attdef_name_state1, INVALID_DEFAULTDECL, ATTLISTDECL_DEFAULT_REQUIRED_TOKEN)
SINGLE_CHAR_STATE(attlistdecl_default_fixed_state1, 'I', 0, attlistdecl_default_fixed_state2, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_fixed_state2, 'X', 0, attlistdecl_default_fixed_state3, INVALID_DEFAULTDECL)
SINGLE_CHAR_STATE(attlistdecl_default_fixed_state3, 'E', 0, attlistdecl_default_fixed_state4, INVALID_DEFAULTDECL)
-SINGLE_CHAR_STATE(attlistdecl_default_fixed_state4, 'D', attlistdecl_attvalue_start_state, ws_plus_state, INVALID_DEFAULTDECL)
+SINGLE_CHAR_STATE_RETURN(attlistdecl_default_fixed_state4, 'D', attlistdecl_attvalue_start_state, ws_plus_state, INVALID_DEFAULTDECL, ATTLISTDECL_DEFAULT_FIXED_TOKEN)
FAXPP_Error
attlistdecl_attvalue_start_state(FAXPP_TokenizerEnv *env)
Added: trunk/faxpp/src/conditional.c
===================================================================
--- trunk/faxpp/src/conditional.c (rev 0)
+++ trunk/faxpp/src/conditional.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2007 Doxological Ltd.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tokenizer_states.h"
+#include "char_classes.h"
+
+#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) \
+FAXPP_Error \
+name(FAXPP_TokenizerEnv *env) \
+{ \
+ read_char(env); \
+\
+ switch(env->current_char) { \
+ case (ch): \
+ if((next_stored_state) != 0) env->stored_state = (next_stored_state); \
+ env->state = (next_state); \
+ next_char(env); \
+ break; \
+ LINE_ENDINGS \
+ default: \
+ next_char(env); \
+ return (error); \
+ } \
+ return NO_ERROR; \
+}
+
+SINGLE_CHAR_STATE(conditional_state1, 'I', 0, conditional_state2, INVALID_CONDITIONAL_SECTION)
+
+FAXPP_Error
+conditional_state2(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case 'N':
+ env->state = include_state1;
+ env->nesting_level += 1;
+ break;
+ case 'G':
+ env->state = ignore_state1;
+ env->nesting_level += 1;
+ break;
+ LINE_ENDINGS
+ default:
+ next_char(env);
+ return INVALID_CONDITIONAL_SECTION;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+SINGLE_CHAR_STATE(ignore_state1, 'N', 0, ignore_state2, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(ignore_state2, 'O', 0, ignore_state3, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(ignore_state3, 'R', 0, ignore_state4, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(ignore_state4, 'E', ignore_state5, ws_state, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(ignore_state5, '[', 0, ignore_content_state, INVALID_CONDITIONAL_SECTION)
+
+FAXPP_Error
+ignore_content_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '<':
+ env->state = ignore_content_seen_lt_state;
+ break;
+ case ']':
+ env->state = ignore_content_seen_rsquare_state1;
+ break;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+ignore_content_seen_lt_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '!':
+ env->state = ignore_content_seen_bang_state;
+ break;
+ LINE_ENDINGS
+ default:
+ env->state = ignore_content_state;
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+ignore_content_seen_bang_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ env->state = ignore_content_state;
+
+ switch(env->current_char) {
+ case '[':
+ env->nesting_level += 1;
+ break;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+ignore_content_seen_rsquare_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ env->state = ignore_content_seen_rsquare_state2;
+ break;
+ LINE_ENDINGS
+ default:
+ env->state = ignore_content_state;
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+ignore_content_seen_rsquare_state2(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ break;
+ case '>':
+ env->nesting_level -= 1;
+ if(env->nesting_level == 0) {
+ base_state(env);
+ }
+ else {
+ env->state = ignore_content_state;
+ }
+ break;
+ LINE_ENDINGS
+ default:
+ env->state = ignore_content_state;
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+SINGLE_CHAR_STATE(include_state1, 'C', 0, include_state2, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(include_state2, 'L', 0, include_state3, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(include_state3, 'U', 0, include_state4, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(include_state4, 'D', 0, include_state5, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(include_state5, 'E', include_state6, ws_state, INVALID_CONDITIONAL_SECTION)
+SINGLE_CHAR_STATE(include_state6, '[', 0, external_subset_state, INVALID_CONDITIONAL_SECTION)
Modified: trunk/faxpp/src/doctype.c
===================================================================
--- trunk/faxpp/src/doctype.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/doctype.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -557,7 +557,7 @@
break;
default:
next_char(env);
- return INVALID_DOCTYPE_DECL;
+ return INVALID_DTD_DECL;
}
next_char(env);
@@ -583,7 +583,7 @@
break;
default:
next_char(env);
- return INVALID_DOCTYPE_DECL;
+ return INVALID_DTD_DECL;
}
next_char(env);
@@ -681,9 +681,16 @@
case '<':
env->state = external_subset_markup_state;
break;
+ case ']':
+ // Check if we're in an include section
+ if(env->nesting_level != 0) {
+ env->state = external_subset_seen_rsquare_state1;
+ break;
+ }
+ // Fall through
default:
next_char(env);
- return INVALID_DOCTYPE_DECL;
+ return INVALID_DTD_DECL;
}
next_char(env);
@@ -691,6 +698,48 @@
}
FAXPP_Error
+external_subset_seen_rsquare_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ env->state = external_subset_seen_rsquare_state2;
+ break;
+ default:
+ base_state(env);
+ // No next_char
+ return INVALID_DTD_DECL;
+ }
+
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+external_subset_seen_rsquare_state2(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ next_char(env);
+ return INVALID_DTD_DECL;
+ case '>':
+ env->nesting_level -= 1;
+ base_state(env);
+ break;
+ default:
+ base_state(env);
+ // No next_char
+ return INVALID_DTD_DECL;
+ }
+
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
external_subset_markup_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
@@ -722,9 +771,10 @@
case '-':
env->state = comment_start_state2;
break;
-/* // TBD conditional sections - jpcs */
-/* case '[': */
-/* break; */
+ case '[':
+ env->stored_state = conditional_state1;
+ env->state = ws_state;
+ break;
case 'E':
env->state = elementdecl_or_entitydecl_state;
break;
Modified: trunk/faxpp/src/elementdecl.c
===================================================================
--- trunk/faxpp/src/elementdecl.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/elementdecl.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -178,7 +178,7 @@
env->state = elementdecl_any_state1;
break;
case '(':
- env->nesting_level += 1;
+ env->elemdecl_content_level += 1;
env->stored_state = elementdecl_mixed_or_children_state;
env->state = ws_state;
report_empty_token(ELEMENTDECL_LPAR_TOKEN, env);
@@ -226,7 +226,7 @@
switch(env->current_char) {
case '(':
- env->nesting_level += 1;
+ env->elemdecl_content_level += 1;
env->stored_state = elementdecl_cp_name_state1;
env->state = ws_state;
report_empty_token(ELEMENTDECL_LPAR_TOKEN, env);
@@ -359,7 +359,7 @@
{
read_char(env);
- if(env->nesting_level == 0)
+ if(env->elemdecl_content_level == 0)
env->stored_state = elementdecl_end_state;
else
env->stored_state = elementdecl_cp_separator_or_end_state;
@@ -401,7 +401,7 @@
report_empty_token(ELEMENTDECL_COMMA_TOKEN, env);
break;
case ')':
- env->nesting_level -= 1;
+ env->elemdecl_content_level -= 1;
env->state = elementdecl_cp_cardinality_state;
report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
break;
@@ -428,7 +428,7 @@
switch(env->current_char) {
case ')':
- env->nesting_level -= 1;
+ env->elemdecl_content_level -= 1;
env->state = elementdecl_pcdata_optional_star_state;
report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
break;
@@ -471,7 +471,7 @@
switch(env->current_char) {
case ')':
- env->nesting_level -= 1;
+ env->elemdecl_content_level -= 1;
env->state = elementdecl_pcdata_star_state;
report_empty_token(ELEMENTDECL_RPAR_TOKEN, env);
break;
Modified: trunk/faxpp/src/error.c
===================================================================
--- trunk/faxpp/src/error.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/error.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -131,6 +131,8 @@
return "INVALID_DEFAULTDECL";
case INVALID_ELEMENTDECL_CONTENT:
return "INVALID_ELEMENTDECL_CONTENT";
+ case INVALID_CONDITIONAL_SECTION:
+ return "INVALID_CONDITIONAL_SECTION";
case NO_ERROR:
break;
}
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/token.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -134,10 +134,32 @@
return "ATTLISTDECL_ATTDEF_PREFIX_TOKEN";
case ATTLISTDECL_ATTDEF_NAME_TOKEN:
return "ATTLISTDECL_ATTDEF_NAME_TOKEN";
+ case ATTLISTDECL_ATTTYPE_ENTITY_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_ENTITY_TOKEN";
+ case ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN";
+ case ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN";
+ case ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN";
+ case ATTLISTDECL_ATTTYPE_ID_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_ID_TOKEN";
+ case ATTLISTDECL_ATTTYPE_IDREF_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_IDREF_TOKEN";
+ case ATTLISTDECL_ATTTYPE_IDREFS_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_IDREFS_TOKEN";
+ case ATTLISTDECL_ATTTYPE_CDATA_TOKEN:
+ return "ATTLISTDECL_ATTTYPE_CDATA_TOKEN";
case ATTLISTDECL_NOTATION_NAME_TOKEN:
return "ATTLISTDECL_NOTATION_NAME_TOKEN";
case ATTLISTDECL_ENUMERATION_NAME_TOKEN:
return "ATTLISTDECL_ENUMERATION_NAME_TOKEN";
+ case ATTLISTDECL_DEFAULT_IMPLIED_TOKEN:
+ return "ATTLISTDECL_DEFAULT_IMPLIED_TOKEN";
+ case ATTLISTDECL_DEFAULT_REQUIRED_TOKEN:
+ return "ATTLISTDECL_DEFAULT_REQUIRED_TOKEN";
+ case ATTLISTDECL_DEFAULT_FIXED_TOKEN:
+ return "ATTLISTDECL_DEFAULT_FIXED_TOKEN";
case ATTLISTDECL_END_TOKEN:
return "ATTLISTDECL_END_TOKEN";
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/tokenizer_states.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -435,6 +435,10 @@
else if(state == external_subset_state)
return "external_subset_state";
+ else if(state == external_subset_seen_rsquare_state1)
+ return "external_subset_seen_rsquare_state1";
+ else if(state == external_subset_seen_rsquare_state2)
+ return "external_subset_seen_rsquare_state2";
else if(state == external_subset_markup_state)
return "external_subset_markup_state";
else if(state == external_subset_decl_state)
@@ -789,6 +793,43 @@
else if(state == paramentitydecl_end_state)
return "paramentitydecl_end_state";
+ else if(state == conditional_state1)
+ return "conditional_state1";
+ else if(state == conditional_state2)
+ return "conditional_state2";
+ else if(state == ignore_state1)
+ return "ignore_state1";
+ else if(state == ignore_state2)
+ return "ignore_state2";
+ else if(state == ignore_state3)
+ return "ignore_state3";
+ else if(state == ignore_state4)
+ return "ignore_state4";
+ else if(state == ignore_state5)
+ return "ignore_state5";
+ else if(state == ignore_content_state)
+ return "ignore_content_state";
+ else if(state == ignore_content_seen_lt_state)
+ return "ignore_content_seen_lt_state";
+ else if(state == ignore_content_seen_bang_state)
+ return "ignore_content_seen_bang_state";
+ else if(state == ignore_content_seen_rsquare_state1)
+ return "ignore_content_seen_rsquare_state1";
+ else if(state == ignore_content_seen_rsquare_state2)
+ return "ignore_content_seen_rsquare_state2";
+ else if(state == include_state1)
+ return "include_state1";
+ else if(state == include_state2)
+ return "include_state2";
+ else if(state == include_state3)
+ return "include_state3";
+ else if(state == include_state4)
+ return "include_state4";
+ else if(state == include_state5)
+ return "include_state5";
+ else if(state == include_state6)
+ return "include_state6";
+
return "unknown";
}
#endif
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/tokenizer_states.h 2008-03-14 15:24:54 UTC (rev 43)
@@ -266,6 +266,8 @@
FAXPP_Error internal_subset_decl_state(FAXPP_TokenizerEnv *env);
FAXPP_Error external_subset_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error external_subset_seen_rsquare_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error external_subset_seen_rsquare_state2(FAXPP_TokenizerEnv *env);
FAXPP_Error external_subset_markup_state(FAXPP_TokenizerEnv *env);
FAXPP_Error external_subset_decl_state(FAXPP_TokenizerEnv *env);
@@ -446,7 +448,26 @@
FAXPP_Error paramentitydecl_value_quot_state(FAXPP_TokenizerEnv *env);
FAXPP_Error paramentitydecl_end_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error conditional_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error conditional_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_content_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_content_seen_lt_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_content_seen_bang_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_content_seen_rsquare_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error ignore_content_seen_rsquare_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error include_state6(FAXPP_TokenizerEnv *env);
+
/*********************
*
* Tokenizer Helper Functions
@@ -527,20 +548,18 @@
#define base_state(env) \
{ \
- if((env)->nesting_level != 0) \
+ if((env)->external_subset || (env)->external_dtd_entity) \
+ (env)->state = external_subset_state; \
+ else if((env)->nesting_level != 0) \
(env)->state = (env)->element_content_state; \
- else if((env)->element_entity) \
- (env)->state = parsed_entity_state; \
else if((env)->internal_dtd_entity) \
(env)->state = internal_subset_state_en; \
- else if((env)->external_parsed_entity) \
+ else if((env)->element_entity || (env)->external_parsed_entity) \
(env)->state = parsed_entity_state; \
else if((env)->seen_doc_element) \
(env)->state = final_state; \
else if((env)->internal_subset) \
(env)->state = internal_subset_state; \
- else if((env)->external_subset) \
- (env)->state = external_subset_state; \
else (env)->state = initial_misc_state; \
}
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2008-03-13 21:56:47 UTC (rev 42)
+++ trunk/faxpp/src/xml_parser.c 2008-03-14 15:24:54 UTC (rev 43)
@@ -111,9 +111,16 @@
FAXPP_AttrValue *at;
FAXPP_ElementInfo *el;
FAXPP_NamespaceInfo *ns;
+ F...
[truncated message content] |
|
From: <jp...@us...> - 2008-03-15 10:59:43
|
Revision: 44
http://faxpp.svn.sourceforge.net/faxpp/?rev=44&view=rev
Author: jpcs
Date: 2008-03-15 03:59:42 -0700 (Sat, 15 Mar 2008)
Log Message:
-----------
Started work on parsing and expanding parameter entity references in
DTD markup.
Modified Paths:
--------------
trunk/faxpp/examples/parser_example.c
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/conditional.c
trunk/faxpp/src/doctype.c
trunk/faxpp/src/elementdecl.c
trunk/faxpp/src/error.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
trunk/faxpp/src/xmldecl.c
Modified: trunk/faxpp/examples/parser_example.c
===================================================================
--- trunk/faxpp/examples/parser_example.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/examples/parser_example.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -76,7 +76,7 @@
}
while((err = FAXPP_next_event(parser)) == 0) {
-/* output_event(FAXPP_get_current_event(parser), stdout); */
+ output_event(FAXPP_get_current_event(parser), stdout);
if(FAXPP_get_current_event(parser)->type == END_DOCUMENT_EVENT)
break;
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/include/faxpp/error.h 2008-03-15 10:59:42 UTC (rev 44)
@@ -69,6 +69,7 @@
INVALID_DEFAULTDECL,
INVALID_ELEMENTDECL_CONTENT,
INVALID_CONDITIONAL_SECTION,
+ IMPROPER_NESTING_OF_ENTITY,
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/include/faxpp/parser.h 2008-03-15 10:59:42 UTC (rev 44)
@@ -92,8 +92,9 @@
/// The type of external entity to parse
typedef enum {
- EXTERNAL_PARSED_ENTITY = 0, ///< An external parsed entity
- EXTERNAL_SUBSET_ENTITY = 1 ///< An external subset (DTD)
+ EXTERNAL_PARSED_ENTITY = 0, ///< An external parsed entity
+ EXTERNAL_SUBSET_ENTITY = 1, ///< An external subset (DTD)
+ EXTERNAL_IN_MARKUP_ENTITY = 2 ///< An external entity inside DTD markup
} FAXPP_EntityType;
/**
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/include/faxpp/token.h 2008-03-15 10:59:42 UTC (rev 44)
@@ -64,6 +64,7 @@
DEC_CHAR_REFERENCE_TOKEN,
HEX_CHAR_REFERENCE_TOKEN,
PE_REFERENCE_TOKEN,
+ PE_REFERENCE_IN_MARKUP_TOKEN,
DOCTYPE_PREFIX_TOKEN,
DOCTYPE_NAME_TOKEN,
Modified: trunk/faxpp/src/conditional.c
===================================================================
--- trunk/faxpp/src/conditional.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/conditional.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -37,6 +37,29 @@
return NO_ERROR; \
}
+FAXPP_Error
+conditional_ws_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ break;
+ case '%':
+ store_state(env);
+ env->state = parameter_entity_reference_in_markup_state;
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ env->state = conditional_state1;
+ // No next_char
+ break;
+ }
+ return NO_ERROR;
+}
+
SINGLE_CHAR_STATE(conditional_state1, 'I', 0, conditional_state2, INVALID_CONDITIONAL_SECTION)
FAXPP_Error
@@ -47,11 +70,9 @@
switch(env->current_char) {
case 'N':
env->state = include_state1;
- env->nesting_level += 1;
break;
case 'G':
env->state = ignore_state1;
- env->nesting_level += 1;
break;
LINE_ENDINGS
default:
@@ -66,9 +87,28 @@
SINGLE_CHAR_STATE(ignore_state2, 'O', 0, ignore_state3, INVALID_CONDITIONAL_SECTION)
SINGLE_CHAR_STATE(ignore_state3, 'R', 0, ignore_state4, INVALID_CONDITIONAL_SECTION)
SINGLE_CHAR_STATE(ignore_state4, 'E', ignore_state5, ws_state, INVALID_CONDITIONAL_SECTION)
-SINGLE_CHAR_STATE(ignore_state5, '[', 0, ignore_content_state, INVALID_CONDITIONAL_SECTION)
FAXPP_Error
+ignore_state5(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '[':
+ env->ignore_start_level = env->nesting_level;
+ env->nesting_level += 1;
+ env->state = ignore_content_state;
+ next_char(env);
+ break;
+ LINE_ENDINGS
+ default:
+ next_char(env);
+ return INVALID_CONDITIONAL_SECTION;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
ignore_content_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
@@ -169,7 +209,8 @@
break;
case '>':
env->nesting_level -= 1;
- if(env->nesting_level == 0) {
+ if(env->nesting_level == env->ignore_start_level) {
+ env->nesting_level -= 1;
base_state(env);
}
else {
@@ -194,4 +235,23 @@
SINGLE_CHAR_STATE(include_state3, 'U', 0, include_state4, INVALID_CONDITIONAL_SECTION)
SINGLE_CHAR_STATE(include_state4, 'D', 0, include_state5, INVALID_CONDITIONAL_SECTION)
SINGLE_CHAR_STATE(include_state5, 'E', include_state6, ws_state, INVALID_CONDITIONAL_SECTION)
-SINGLE_CHAR_STATE(include_state6, '[', 0, external_subset_state, INVALID_CONDITIONAL_SECTION)
+
+FAXPP_Error
+include_state6(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '[':
+ env->nesting_level += 1;
+ env->state = external_subset_state;
+ next_char(env);
+ break;
+ LINE_ENDINGS
+ default:
+ next_char(env);
+ return INVALID_CONDITIONAL_SECTION;
+ }
+ return NO_ERROR;
+}
+
Modified: trunk/faxpp/src/doctype.c
===================================================================
--- trunk/faxpp/src/doctype.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/doctype.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -726,7 +726,7 @@
next_char(env);
return INVALID_DTD_DECL;
case '>':
- env->nesting_level -= 1;
+ env->nesting_level -= 2;
base_state(env);
break;
default:
@@ -772,8 +772,8 @@
env->state = comment_start_state2;
break;
case '[':
- env->stored_state = conditional_state1;
- env->state = ws_state;
+ env->nesting_level += 1;
+ env->state = conditional_ws_state;
break;
case 'E':
env->state = elementdecl_or_entitydecl_state;
Modified: trunk/faxpp/src/elementdecl.c
===================================================================
--- trunk/faxpp/src/elementdecl.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/elementdecl.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -24,6 +24,7 @@
switch(env->current_char) {
case 'L':
+ env->nesting_level += 1;
env->state = elementdecl_initial_state1;
next_char(env);
break;
@@ -66,9 +67,34 @@
SINGLE_CHAR_STATE(elementdecl_initial_state2, 'M', 0, elementdecl_initial_state3, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(elementdecl_initial_state3, 'E', 0, elementdecl_initial_state4, INVALID_DTD_DECL)
SINGLE_CHAR_STATE(elementdecl_initial_state4, 'N', 0, elementdecl_initial_state5, INVALID_DTD_DECL)
-SINGLE_CHAR_STATE(elementdecl_initial_state5, 'T', elementdecl_name_state1, ws_plus_state, INVALID_DTD_DECL)
+SINGLE_CHAR_STATE(elementdecl_initial_state5, 'T', 0, elementdecl_name_ws_state, INVALID_DTD_DECL)
FAXPP_Error
+elementdecl_name_ws_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ break;
+ case '%':
+ // TBD only for external subset - jpcs
+ store_state(env);
+ env->state = parameter_entity_reference_in_markup_state;
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ env->state = elementdecl_name_state1;
+ token_start_position(env);
+ // No next_char
+ break;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
elementdecl_name_state1(FAXPP_TokenizerEnv *env)
{
read_char(env);
@@ -624,6 +650,7 @@
switch(env->current_char) {
case '>':
+ env->nesting_level -= 1;
base_state(env);
report_empty_token(ELEMENTDECL_END_TOKEN, env);
break;
Modified: trunk/faxpp/src/error.c
===================================================================
--- trunk/faxpp/src/error.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/error.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -133,6 +133,8 @@
return "INVALID_ELEMENTDECL_CONTENT";
case INVALID_CONDITIONAL_SECTION:
return "INVALID_CONDITIONAL_SECTION";
+ case IMPROPER_NESTING_OF_ENTITY:
+ return "IMPROPER_NESTING_OF_ENTITY";
case NO_ERROR:
break;
}
Modified: trunk/faxpp/src/reference.c
===================================================================
--- trunk/faxpp/src/reference.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/reference.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -359,6 +359,33 @@
}
FAXPP_Error
+parameter_entity_reference_in_markup_state(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ break;
+ case ';':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(PE_REFERENCE_IN_MARKUP_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ENTITY_REFERENCE;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
char_reference_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/token.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -54,6 +54,8 @@
return "ENTITY_REFERENCE_TOKEN";
case PE_REFERENCE_TOKEN:
return "PE_REFERENCE_TOKEN";
+ case PE_REFERENCE_IN_MARKUP_TOKEN:
+ return "PE_REFERENCE_IN_MARKUP_TOKEN";
case DEC_CHAR_REFERENCE_TOKEN:
return "DEC_CHAR_REFERENCE_TOKEN";
case HEX_CHAR_REFERENCE_TOKEN:
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/tokenizer_states.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -256,6 +256,8 @@
return "entity_reference_state";
else if(state == parameter_entity_reference_state)
return "parameter_entity_reference_state";
+ else if(state == parameter_entity_reference_in_markup_state)
+ return "parameter_entity_reference_in_markup_state";
else if(state == char_reference_state)
return "char_reference_state";
else if(state == dec_char_reference_state)
@@ -498,6 +500,8 @@
return "elementdecl_initial_state4";
else if(state == elementdecl_initial_state5)
return "elementdecl_initial_state5";
+ else if(state == elementdecl_name_ws_state)
+ return "elementdecl_name_ws_state";
else if(state == elementdecl_name_state1)
return "elementdecl_name_state1";
else if(state == elementdecl_name_state2)
@@ -793,6 +797,8 @@
else if(state == paramentitydecl_end_state)
return "paramentitydecl_end_state";
+ else if(state == conditional_ws_state)
+ return "conditional_ws_state";
else if(state == conditional_state1)
return "conditional_state1";
else if(state == conditional_state2)
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/tokenizer_states.h 2008-03-15 10:59:42 UTC (rev 44)
@@ -172,6 +172,7 @@
FAXPP_Error quot_entity_reference_state4(FAXPP_TokenizerEnv *env);
FAXPP_Error entity_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error parameter_entity_reference_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error parameter_entity_reference_in_markup_state(FAXPP_TokenizerEnv *env);
FAXPP_Error char_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error dec_char_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error hex_char_reference_state1(FAXPP_TokenizerEnv *env);
@@ -299,6 +300,7 @@
FAXPP_Error elementdecl_initial_state3(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_initial_state4(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_initial_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error elementdecl_name_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_name_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_name_state2(FAXPP_TokenizerEnv *env);
FAXPP_Error elementdecl_name_seen_colon_state1(FAXPP_TokenizerEnv *env);
@@ -448,6 +450,7 @@
FAXPP_Error paramentitydecl_value_quot_state(FAXPP_TokenizerEnv *env);
FAXPP_Error paramentitydecl_end_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error conditional_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error conditional_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error conditional_state2(FAXPP_TokenizerEnv *env);
FAXPP_Error ignore_state1(FAXPP_TokenizerEnv *env);
@@ -489,8 +492,8 @@
return BAD_ENCODING; \
} \
\
-/* printf("%03d:%03d State: %s, Byte: %c, Char: %08X\n", (env)->line, (env)->column, */ \
-/* FAXPP_state_to_string((env)->state), *(unsigned char*)(env)->position, */ \
+/* printf("%03d:%03d Tok:%p L:%03d State: %s, Byte: %c, Char: %08X\n", (env)->line, (env)->column, */ \
+/* (env), (env)->nesting_level, FAXPP_state_to_string((env)->state), *(unsigned char*)(env)->position, */ \
/* (env)->current_char); */ \
}
@@ -560,6 +563,8 @@
(env)->state = final_state; \
else if((env)->internal_subset) \
(env)->state = internal_subset_state; \
+ else if((env)->in_markup_entity) \
+ (env)->state = (env)->prev->state; \
else (env)->state = initial_misc_state; \
}
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/xml_parser.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -1069,7 +1069,7 @@
case XML_DECL_END_TOKEN:
env->next_event = nc_unsupported_encoding_next_event;
- if(env->tenv->external_subset) {
+ if(env->tenv->external_subset || env->tenv->in_markup_entity) {
// TBD event for start of external subset - jpcs
next = nc_dtd_next_event;
}
@@ -1131,7 +1131,7 @@
default:
env->tenv->buffered_token = 1;
p_reset_event(env);
- if(env->tenv->external_subset) {
+ if(env->tenv->external_subset || env->tenv->in_markup_entity) {
// TBD event for start of external subset - jpcs
env->next_event = nc_dtd_next_event;
}
@@ -1201,14 +1201,6 @@
#define p_compare_text(a, b) (((a)->len == (b)->len) ? memcmp((a)->ptr, (b)->ptr, (a)->len) : ((a)->len - (b)->len))
-/* static int p_compare_text(const FAXPP_Text *a, const FAXPP_Text *b) */
-/* { */
-/* int cmp = a->len - b->len; */
-/* if(cmp != 0) return cmp; */
-
-/* return memcmp(a->ptr, b->ptr, a->len); */
-/* } */
-
static FAXPP_EntityInfo *p_find_entity_info(const FAXPP_Text *name, FAXPP_EntityInfo *list)
{
while(list) {
@@ -1238,9 +1230,6 @@
env->tenv->line = entv->line;
env->tenv->column = entv->column;
- if(state == EXTERNAL_PARSED_ENTITY)
- env->next_event = nc_start_document_next_event;
-
// Set the entity on the first new tokenizer
if(*initial_entity) {
env->tenv->start_of_entity = 1;
@@ -1282,8 +1271,13 @@
return err;
}
+static const char single_space[] = {' '};
+
static FAXPP_Error p_parse_entity(FAXPP_ParserEnv *env, FAXPP_EntityInfo *ent, FAXPP_EntityParseState state)
{
+ FAXPP_Error err;
+ FAXPP_EntityInfo *tmp;
+
// Check for a recursive entity
FAXPP_TokenizerEnv *tokenizer = env->tenv;
while(tokenizer) {
@@ -1293,18 +1287,47 @@
tokenizer = tokenizer->prev;
}
+ if(state == IN_MARKUP_ENTITY || state == EXTERNAL_IN_MARKUP_ENTITY) {
+ // Add a space after the entity inside DTD markup
+ err = FAXPP_push_entity_tokenizer(&env->tenv, IN_MARKUP_ENTITY, (void*)single_space, 1, /*done*/1);
+ if(err) return err;
+
+ env->tenv->line = ent->line;
+ env->tenv->column = ent->column;
+
+ FAXPP_set_tokenizer_decode(env->tenv, FAXPP_utf8_decode);
+ }
+
if(ent->external) {
switch(state) {
case ELEMENT_CONTENT_ENTITY: state = EXTERNAL_PARSED_ENTITY; break;
case INTERNAL_DTD_ENTITY: state = EXTERNAL_SUBSET_ENTITY; break;
case EXTERNAL_DTD_ENTITY: state = EXTERNAL_SUBSET_ENTITY; break;
+ case IN_MARKUP_ENTITY: state = EXTERNAL_IN_MARKUP_ENTITY; break;
default: break;
}
- return p_parse_external_entity(env, ent, state);
+ err = p_parse_external_entity(env, ent, state);
+ if(err) return err;
}
+ else {
+ tmp = ent;
+ err = p_parse_internal_entity(env, ent, state, &tmp);
+ if(err) return err;
- return p_parse_internal_entity(env, ent, state, &ent);
+ if(state == IN_MARKUP_ENTITY || state == EXTERNAL_IN_MARKUP_ENTITY) {
+ // Add a space before the entity inside DTD markup
+ err = FAXPP_push_entity_tokenizer(&env->tenv, IN_MARKUP_ENTITY, (void*)single_space, 1, /*done*/1);
+ if(err) return err;
+
+ env->tenv->line = ent->line;
+ env->tenv->column = ent->column;
+
+ FAXPP_set_tokenizer_decode(env->tenv, FAXPP_utf8_decode);
+ }
+ }
+
+ return NO_ERROR;
}
static Char32 p_dec_char_ref_value(const FAXPP_Text *text, FAXPP_ParserEnv *env)
@@ -1563,7 +1586,27 @@
if(err) goto error;
}
break;
+ case PE_REFERENCE_IN_MARKUP_TOKEN:
+ // Parameter entity references cannot be forward references -
+ // so we go ahead and look them up straight away
+ ent = p_find_entity_info(&env->tenv->result_token.value, env->parameter_entities);
+ // [VC: Entity Declared]
+ if(ent == 0) {
+ err = UNDEFINED_ENTITY;
+ goto error;
+ }
+ p_set_text_from_text(&bkup_system, &env->event.system_id);
+ p_set_text_from_text(&bkup_public, &env->event.public_id);
+
+ err = p_parse_entity(env, ent, IN_MARKUP_ENTITY);
+
+ p_set_text_from_text(&env->event.system_id, &bkup_system);
+ p_set_text_from_text(&env->event.public_id, &bkup_public);
+
+ if(err) goto error;
+ break;
+
case ELEMENTDECL_LPAR_TOKEN:
cs = (FAXPP_ContentSpec*)malloc(sizeof(FAXPP_ContentSpec));
memset(cs, 0, sizeof(FAXPP_ContentSpec));
@@ -1699,6 +1742,7 @@
case PUBID_LITERAL_TOKEN:
case NDATA_NAME_TOKEN:
case PE_REFERENCE_TOKEN:
+ case PE_REFERENCE_IN_MARKUP_TOKEN:
case ELEMENTDECL_PREFIX_TOKEN:
case ELEMENTDECL_NAME_TOKEN:
case ELEMENTDECL_EMPTY_TOKEN:
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/xml_tokenizer.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -392,6 +392,7 @@
env->nesting_level = 0;
env->elemdecl_content_level = 0;
+ env->ignore_start_level = 0;
env->do_encode = 1;
env->seen_doctype = 0;
@@ -403,6 +404,7 @@
env->internal_dtd_entity = 0;
env->external_dtd_entity = 0;
env->external_parsed_entity = 0;
+ env->in_markup_entity = 0;
env->start_of_entity = 0;
env->start_of_file = 0;
@@ -470,6 +472,7 @@
env->external_dtd_entity = state == EXTERNAL_DTD_ENTITY;
env->external_parsed_entity = state == EXTERNAL_PARSED_ENTITY;
env->external_subset = state == EXTERNAL_SUBSET_ENTITY;
+ env->in_markup_entity = state == IN_MARKUP_ENTITY || state == EXTERNAL_IN_MARKUP_ENTITY;
FAXPP_set_tokenizer_decode(env, env->prev->transcoder.decode);
@@ -491,8 +494,12 @@
case EXTERNAL_DTD_ENTITY:
env->state = external_subset_state;
break;
+ case IN_MARKUP_ENTITY:
+ env->state = env->prev->state;
+ break;
case EXTERNAL_PARSED_ENTITY:
case EXTERNAL_SUBSET_ENTITY:
+ case EXTERNAL_IN_MARKUP_ENTITY:
env->state = initial_state;
break;
}
@@ -515,7 +522,11 @@
*list = env->prev;
if(env->start_of_entity) {
- if(env->stored_state != 0 || env->nesting_level != 0 || env->elemdecl_content_level != 0 ||
+ if(env->in_markup_entity) {
+ if(env->nesting_level != 0 || env->elemdecl_content_level != 0)
+ err = IMPROPER_NESTING_OF_ENTITY;
+ }
+ else if(env->stored_state != 0 || env->nesting_level != 0 || env->elemdecl_content_level != 0 ||
(env->element_entity && env->state != parsed_entity_state &&
env->state != default_element_content_rsquare_state1 &&
env->state != default_element_content_rsquare_state2) ||
@@ -527,7 +538,8 @@
err = INCOMPLETE_MARKUP_IN_ENTITY_VALUE;
}
}
- else {
+
+ if(env->in_markup_entity || !env->start_of_entity) {
// Force the old tokenizer token to point into the token buffer
FAXPP_tokenizer_release_buffer(env, 0);
Modified: trunk/faxpp/src/xml_tokenizer.h
===================================================================
--- trunk/faxpp/src/xml_tokenizer.h 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/xml_tokenizer.h 2008-03-15 10:59:42 UTC (rev 44)
@@ -52,6 +52,7 @@
unsigned int nesting_level;
unsigned int elemdecl_content_level;
+ unsigned int ignore_start_level;
unsigned int do_encode:1;
unsigned int buffer_done:1;
@@ -64,6 +65,7 @@
unsigned int internal_dtd_entity:1;
unsigned int external_dtd_entity:1;
unsigned int external_parsed_entity:1;
+ unsigned int in_markup_entity:1;
unsigned int normalize_attrs:1;
unsigned int user_provided_decode:1;
@@ -99,14 +101,16 @@
struct FAXPP_TokenizerEnv_s *prev;
};
-// The first two values are the same as the values in FAXPP_EntityType
+// The first three values are the same as the values in FAXPP_EntityType
typedef enum {
EXTERNAL_PARSED_ENTITY2 = EXTERNAL_PARSED_ENTITY,
EXTERNAL_SUBSET_ENTITY2 = EXTERNAL_SUBSET_ENTITY,
+ EXTERNAL_IN_MARKUP_ENTITY2 = EXTERNAL_IN_MARKUP_ENTITY,
ELEMENT_CONTENT_ENTITY,
INTERNAL_DTD_ENTITY,
EXTERNAL_DTD_ENTITY,
+ IN_MARKUP_ENTITY,
ATTRIBUTE_VALUE_ENTITY
} FAXPP_EntityParseState;
Modified: trunk/faxpp/src/xmldecl.c
===================================================================
--- trunk/faxpp/src/xmldecl.c 2008-03-14 15:24:54 UTC (rev 43)
+++ trunk/faxpp/src/xmldecl.c 2008-03-15 10:59:42 UTC (rev 44)
@@ -16,6 +16,7 @@
#include "tokenizer_states.h"
#include "char_classes.h"
+#include "xml_parser.h"
FAXPP_Error
xml_decl_or_markup_state(FAXPP_TokenizerEnv *env)
@@ -29,7 +30,10 @@
token_start_position(env);
break;
case '!':
- if(env->external_subset)
+ // TBD Do this in all other places where it's not an XMLDecl - jpcs
+ if(env->in_markup_entity)
+ return INVALID_DTD_DECL; // TBD is this right? - jpcs
+ else if(env->external_subset)
env->state = external_subset_markup_state;
else
env->state = initial_markup_state;
@@ -164,7 +168,7 @@
env->state = xml_decl_version_state2;
break;
case 'e':
- if(env->external_parsed_entity || env->external_subset) {
+ if(env->external_parsed_entity || env->external_subset || env->in_markup_entity) {
env->state = xml_decl_encoding_state2;
break;
}
@@ -330,13 +334,13 @@
WHITESPACE:
break;
case '?':
- if(env->external_parsed_entity || env->external_subset) goto invalid_char;
+ if(env->external_parsed_entity || env->external_subset || env->in_markup_entity) goto invalid_char;
env->state = xml_decl_seen_question_state;
token_start_position(env);
break;
case 's':
- if(env->external_parsed_entity || env->external_subset) goto invalid_char;
+ if(env->external_parsed_entity || env->external_subset || env->in_markup_entity) goto invalid_char;
env->state = xml_decl_standalone_state2;
break;
@@ -524,7 +528,7 @@
next_char(env);
break;
case 's':
- if(!env->external_parsed_entity && !env->external_subset) {
+ if(!env->external_parsed_entity && !env->external_subset && !env->in_markup_entity) {
env->state = xml_decl_standalone_state2;
next_char(env);
break;
@@ -698,17 +702,42 @@
return NO_ERROR;
}
+static const char single_space[] = {' '};
+
FAXPP_Error
xml_decl_seen_question_state(FAXPP_TokenizerEnv *env)
{
+ FAXPP_Error err;
+ FAXPP_TokenizerEnv *tok;
+
read_char(env);
switch(env->current_char) {
case '>':
base_state(env);
+
report_empty_token(XML_DECL_END_TOKEN, env);
next_char(env);
token_start_position(env);
+
+ if(env->in_markup_entity) {
+ // Add a space before the entity inside DTD markup
+ err = FAXPP_push_entity_tokenizer(&env, IN_MARKUP_ENTITY, (void*)single_space, 1, /*done*/1);
+ if(err) return err;
+
+ tok = env;
+ while(tok && tok->entity == 0) {
+ tok = tok->prev;
+ }
+
+ if(tok) {
+ env->line = tok->entity->line;
+ env->column = tok->entity->column;
+ }
+
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
+ }
+
break;
LINE_ENDINGS
default:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2008-03-20 02:33:21
|
Revision: 48
http://faxpp.svn.sourceforge.net/faxpp/?rev=48&view=rev
Author: jpcs
Date: 2008-03-19 19:33:24 -0700 (Wed, 19 Mar 2008)
Log Message:
-----------
Updated the documentation and change log.
Modified Paths:
--------------
trunk/faxpp/ChangeLog
trunk/faxpp/docs/header.html
trunk/faxpp/include/faxpp/parser.h
Modified: trunk/faxpp/ChangeLog
===================================================================
--- trunk/faxpp/ChangeLog 2008-03-20 01:56:21 UTC (rev 47)
+++ trunk/faxpp/ChangeLog 2008-03-20 02:33:24 UTC (rev 48)
@@ -1,6 +1,27 @@
Faxpp: A small, fast XML pull parser written in C with an API that can
return UTF-8 or UTF-16 strings.
+version 0.3 (2008.03.20):
+ * Implemented the parsing of doctype declarations and internal
+ subsets.
+ * Implemented the parsing of external subsets (DTDs) and
+ external parsed entities, and a mechanism for resolving them.
+ * Implemented entity resolution and replacement.
+ * Implemented a base URI for the parser, which is used to
+ resolve external entities.
+ * Changed FAXPP_set_decode() so that if the user sets a decode
+ function, all other indications of encoding are ignored.
+ * Added methods to return a decode or encode function, given a
+ string defining the encoding.
+ * Added line and column numbers to attribute values.
+ * Fixed a bug that was causing all strings to be copied.
+ * Fixed column counting, and line counting for "\r\n" at a
+ buffer boundary.
+ * Fixed the handling of namespace URIs for "xml" and "xmlns",
+ added raised the correct errors for redefining them.
+ * Fixed the parser to always return a START_DOCUMENT_EVENT.
+ * Fixed various conformance and memory related bugs.
+
version 0.2 (2007.08.20):
* Implemented a test harness for the XML Conformance Test Suite
* Added support for streaming input to the tokenizer and parser,
Modified: trunk/faxpp/docs/header.html
===================================================================
--- trunk/faxpp/docs/header.html 2008-03-20 01:56:21 UTC (rev 47)
+++ trunk/faxpp/docs/header.html 2008-03-20 02:33:24 UTC (rev 48)
@@ -1,6 +1,6 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
-<title>Faxpp 0.2 Documentation</title>
+<title>Faxpp 0.3 Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2008-03-20 01:56:21 UTC (rev 47)
+++ trunk/faxpp/include/faxpp/parser.h 2008-03-20 02:33:24 UTC (rev 48)
@@ -26,7 +26,7 @@
/**
* \mainpage
*
- * Faxpp is a small, fast and conformant XML pull parser written in C with an API that can return UTF-8 or UTF-16 strings.
+ * Faxpp is a small, fast and conformant XML pull parser written in C with an API that can return strings in any encoding including UTF-8 and UTF-16.
*
* Faxpp is written by John Snelson, and is released under the terms of the Apache Licence v2.
*
@@ -39,7 +39,7 @@
*
* \section Performance
*
- * Faxpp's main performance benefit comes from it's ability to not copy strings - instead
+ * Faxpp's main performance benefit comes from it's ability to reduce and eliminate string copies - instead,
* the FAXPP_Text structure will point directly to the tokenizer's buffer when possible.
* This is possible when:
*
@@ -57,16 +57,17 @@
*
* \section Downloads
*
- * \li Faxpp can be downloaded from here: http://sourceforge.net/project/showfiles.php?group_id=201903
- * \li Anonymous access to the subversion repository is also available. Instructions can be found here: http://sourceforge.net/svn/?group_id=201903
- * \li You can browse the subversion repository here: http://faxpp.svn.sourceforge.net/viewvc/faxpp/
+ * \li Faxpp can be <a href="http://sourceforge.net/project/showfiles.php?group_id=201903">downloaded</a> from Sourceforge.
+ * \li <a href="http://sourceforge.net/svn/?group_id=201903">Anonymous access</a> to the
+ * <a href="http://faxpp.svn.sourceforge.net/viewvc/faxpp/">subversion repository</a> is also available.
*
* \section Support
*
- * \li There is a user mailing list, faxpp-user, which is the appropriate place to direct any questions or problems. You can join the mailing list here:
- * https://lists.sourceforge.net/lists/listinfo/faxpp-user
- * \li Archives for the mailing list are available here: http://sourceforge.net/mailarchive/forum.php?forum_name=faxpp-user
- * \li If you have a bug to report, you may wish to enter it into our bug database, here: http://sourceforge.net/tracker/?atid=979420&group_id=201903
+ * \li There is a <a href="http://sourceforge.net/mailarchive/forum.php?forum_name=faxpp-user">user mailing list</a>,
+ * <a href="https://lists.sourceforge.net/lists/listinfo/faxpp-user">faxpp-user</a>, which is the appropriate place to
+ * direct any questions or problems.
+ * \li If you have a bug to report, you may wish to enter it into our
+ * <a href="http://sourceforge.net/tracker/?atid=979420&group_id=201903">bug database</a>.
*
*/
@@ -463,33 +464,7 @@
*
* \param parser
*
- * \retval ELEMENT_NAME_MISMATCH
- * \retval NO_URI_FOR_PREFIX
- * \retval DUPLICATE_ATTRIBUTES
- * \retval DOUBLE_DASH_IN_COMMENT
- * \retval PREMATURE_END_OF_BUFFER
- * \retval INVALID_START_OF_COMMENT
- * \retval INVALID_CHAR_IN_START_ELEMENT
- * \retval INVALID_CHAR_IN_ATTRIBUTE
- * \retval INVALID_CHAR_IN_END_ELEMENT
- * \retval NON_WHITESPACE_OUTSIDE_DOC_ELEMENT
- * \retval BAD_ENCODING
- * \retval UNSUPPORTED_ENCODING
- * \retval ADDITIONAL_DOCUMENT_ELEMENT
- * \retval INVALID_CHAR_IN_PI_NAME
- * \retval INVALID_PI_NAME_OF_XML
- * \retval INVALID_CHAR_IN_ELEMENT_NAME
- * \retval INVALID_CHAR_IN_ATTRIBUTE_NAME
- * \retval RESTRICTED_CHAR
- * \retval INVALID_CHAR_IN_ENTITY_REFERENCE
- * \retval INVALID_CHAR_IN_CHAR_REFERENCE
- * \retval INVALID_CHAR_IN_XML_DECL
- * \retval EXPECTING_EQUALS
- * \retval EXPECTING_WHITESPACE
- * \retval UNKNOWN_XML_VERSION
- * \retval INVALID_ENCODING_VALUE
- * \retval OUT_OF_MEMORY
- * \retval NO_ERROR
+ * \return Any error that occurs
*
* \relatesalso FAXPP_Parser
*/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2008-05-22 16:39:05
|
Revision: 52
http://faxpp.svn.sourceforge.net/faxpp/?rev=52&view=rev
Author: jpcs
Date: 2008-05-22 09:39:07 -0700 (Thu, 22 May 2008)
Log Message:
-----------
Fixed a bug in entity replacement when the output encoding is not UTF-8.
Added the examples to the documentation.
Modified Paths:
--------------
trunk/faxpp/Makefile.in
trunk/faxpp/aclocal.m4
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/docs/Doxyfile.api
trunk/faxpp/include/Makefile.in
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
trunk/faxpp/src/xmldecl.c
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2008-03-27 15:18:13 UTC (rev 51)
+++ trunk/faxpp/Makefile.in 2008-05-22 16:39:07 UTC (rev 52)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.10 from Makefile.am.
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -81,7 +81,7 @@
entity_resolver.$(OBJEXT) output_event.$(OBJEXT)
xmlconf_runner_OBJECTS = $(am_xmlconf_runner_OBJECTS)
xmlconf_runner_DEPENDENCIES = libfaxpp.la
-DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -139,6 +139,7 @@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DSYMUTIL = @DSYMUTIL@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
@@ -161,6 +162,7 @@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
+NMEDIT = @NMEDIT@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -170,6 +172,7 @@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@
+SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
@@ -349,8 +352,8 @@
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
- $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
else :; fi; \
done
@@ -358,8 +361,8 @@
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
- echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
- $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
+ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
+ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
done
clean-libLTLIBRARIES:
@@ -744,8 +747,8 @@
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
+ $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
@@ -770,8 +773,8 @@
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
@@ -781,13 +784,12 @@
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
- here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
- $(AWK) ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
@@ -858,6 +860,10 @@
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
+dist-lzma: distdir
+ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+ $(am__remove_distdir)
+
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
@@ -885,6 +891,8 @@
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lzma*) \
+ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
@@ -1043,17 +1051,17 @@
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am am--refresh check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \
- ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
- dist-tarZ dist-zip distcheck distclean distclean-compile \
- distclean-generic distclean-hdr distclean-libtool \
- distclean-tags distcleancheck distdir distuninstallcheck dvi \
- dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-dvi install-dvi-am \
- install-exec install-exec-am install-html install-html-am \
- install-info install-info-am install-libLTLIBRARIES \
- install-man install-pdf install-pdf-am install-ps \
- install-ps-am install-strip installcheck installcheck-am \
- installdirs installdirs-am maintainer-clean \
+ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-lzma \
+ dist-shar dist-tarZ dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
+ distclean-libtool distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am \
+ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-recursive uninstall uninstall-am \
Modified: trunk/faxpp/aclocal.m4
===================================================================
--- trunk/faxpp/aclocal.m4 2008-03-27 15:18:13 UTC (rev 51)
+++ trunk/faxpp/aclocal.m4 2008-05-22 16:39:07 UTC (rev 52)
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.10 -*- Autoconf -*-
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006 Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -11,14 +11,17 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-m4_if(m4_PACKAGE_VERSION, [2.61],,
-[m4_fatal([this file was generated for autoconf 2.61.
-You have another version of autoconf. If you want to use that,
-you should regenerate the build system entirely.], [63])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(AC_AUTOCONF_VERSION, [2.61],,
+[m4_warning([this file was generated for autoconf 2.61.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-# serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL
+# serial 52 Debian 1.5.26-1ubuntu1 AC_PROG_LIBTOOL
# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
@@ -106,7 +109,6 @@
AC_REQUIRE([AC_OBJEXT])dnl
AC_REQUIRE([AC_EXEEXT])dnl
dnl
-
AC_LIBTOOL_SYS_MAX_CMD_LEN
AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
AC_LIBTOOL_OBJDIR
@@ -181,7 +183,7 @@
test -z "$ac_objext" && ac_objext=o
# Determine commands to create old-style static archives.
-old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
old_postinstall_cmds='chmod 644 $oldlib'
old_postuninstall_cmds=
@@ -208,6 +210,8 @@
;;
esac
+_LT_REQUIRED_DARWIN_CHECKS
+
AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
enable_win32_dll=yes, enable_win32_dll=no)
@@ -268,8 +272,9 @@
# Check for compiler boilerplate output or warnings with
# the simple compiler test code.
AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_compile_test_code" >conftest.$ac_ext
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_compiler_boilerplate=`cat conftest.err`
$rm conftest*
@@ -281,14 +286,86 @@
# Check for linker boilerplate output or warnings with
# the simple link test code.
AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[ac_outfile=conftest.$ac_objext
-printf "$lt_simple_link_test_code" >conftest.$ac_ext
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
_lt_linker_boilerplate=`cat conftest.err`
-$rm conftest*
+$rm -r conftest*
])# _LT_LINKER_BOILERPLATE
+# _LT_REQUIRED_DARWIN_CHECKS
+# --------------------------
+# Check for some things on darwin
+AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
+ case $host_os in
+ rhapsody* | darwin*)
+ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+ [lt_cv_apple_cc_single_mod=no
+ if test -z "${LT_MULTI_MODULE}"; then
+ # By default we will add the -single_module flag. You can override
+ # by either setting the environment variable LT_MULTI_MODULE
+ # non-empty at configure time, or by adding -multi_module to the
+ # link flags.
+ echo "int foo(void){return 1;}" > conftest.c
+ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+ -dynamiclib ${wl}-single_module conftest.c
+ if test -f libconftest.dylib; then
+ lt_cv_apple_cc_single_mod=yes
+ rm -rf libconftest.dylib*
+ fi
+ rm conftest.c
+ fi])
+ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+ [lt_cv_ld_exported_symbols_list],
+ [lt_cv_ld_exported_symbols_list=no
+ save_LDFLAGS=$LDFLAGS
+ echo "_main" > conftest.sym
+ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+ [lt_cv_ld_exported_symbols_list=yes],
+ [lt_cv_ld_exported_symbols_list=no])
+ LDFLAGS="$save_LDFLAGS"
+ ])
+ case $host_os in
+ rhapsody* | darwin1.[[0123]])
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+ darwin1.*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ darwin*)
+ # if running on 10.5 or later, the deployment target defaults
+ # to the OS version, if on x86, and 10.4, the deployment
+ # target defaults to 10.4. Don't you love it?
+ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ 10.[[012]]*)
+ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+ 10.*)
+ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
+ esac
+ ;;
+ esac
+ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+ _lt_dar_single_mod='$single_module'
+ fi
+ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
+ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
+ else
+ _lt_dar_export_syms="~$NMEDIT -s \$output_objdir/\${libname}-symbols.expsym \${lib}"
+ fi
+ if test "$DSYMUTIL" != ":"; then
+ _lt_dsymutil="~$DSYMUTIL \$lib || :"
+ else
+ _lt_dsymutil=
+ fi
+ ;;
+ esac
+])
+
# _LT_AC_SYS_LIBPATH_AIX
# ----------------------
# Links a minimal program and checks the executable
@@ -298,12 +375,20 @@
# If we don't find anything, use the default library path according
# to the aix ld manual.
AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_LINK_IFELSE(AC_LANG_PROGRAM,[
+lt_aix_libpath_sed='
+ /Import File Strings/,/^$/ {
+ /^0/ {
+ s/^0 *\(.*\)$/\1/
+ p
+ }
+ }'
+aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
# Check for a 64-bit object if we didn't find anything.
-if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
-}'`; fi],[])
+if test -z "$aix_libpath"; then
+ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+fi],[])
if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
])# _LT_AC_SYS_LIBPATH_AIX
@@ -534,13 +619,17 @@
rm -rf conftest*
;;
-x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
+s390*-*linux*|sparc*-*linux*)
# Find out which ABI we are using.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
case `/usr/bin/file conftest.o` in
*32-bit*)
case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
x86_64-*linux*)
LD="${LD-ld} -m elf_i386"
;;
@@ -557,6 +646,9 @@
;;
*64-bit*)
case $host in
+ x86_64-*kfreebsd*-gnu)
+ LD="${LD-ld} -m elf_x86_64_fbsd"
+ ;;
x86_64-*linux*)
LD="${LD-ld} -m elf_x86_64"
;;
@@ -597,7 +689,11 @@
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*) LD="${LD-ld} -m elf64_sparc" ;;
- *) LD="${LD-ld} -64" ;;
+ *)
+ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+ LD="${LD-ld} -64"
+ fi
+ ;;
esac
;;
esac
@@ -628,7 +724,7 @@
AC_CACHE_CHECK([$1], [$2],
[$2=no
ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="$3"
# Insert the option either (1) after the last *FLAGS variable, or
# (2) before a word containing "conftest.", or (3) at the end.
@@ -669,11 +765,12 @@
# ------------------------------------------------------------
# Check whether the given compiler option works
AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_CACHE_CHECK([$1], [$2],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
[$2=no
save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $3"
- printf "$lt_simple_link_test_code" > conftest.$ac_ext
+ echo "$lt_simple_link_test_code" > conftest.$ac_ext
if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
# The linker can only warn and ignore the option if not recognized
# So say no if there are warnings
@@ -689,7 +786,7 @@
$2=yes
fi
fi
- $rm conftest*
+ $rm -r conftest*
LDFLAGS="$save_LDFLAGS"
])
@@ -787,24 +884,27 @@
fi
;;
*)
- # If test is not a shell built-in, we'll probably end up computing a
- # maximum length that is only half of the actual maximum length, but
- # we can't tell.
- SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
- while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
+ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+ if test -n "$lt_cv_sys_max_cmd_len"; then
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+ else
+ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+ while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
= "XX$teststring") >/dev/null 2>&1 &&
- new_result=`expr "X$teststring" : ".*" 2>&1` &&
- lt_cv_sys_max_cmd_len=$new_result &&
- test $i != 17 # 1/2 MB should be enough
- do
- i=`expr $i + 1`
- teststring=$teststring$teststring
- done
- teststring=
- # Add a significant safety factor because C++ compilers can tack on massive
- # amounts of additional arguments before passing them to the linker.
- # It appears as though 1/2 is a usable value.
- lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ new_result=`expr "X$teststring" : ".*" 2>&1` &&
+ lt_cv_sys_max_cmd_len=$new_result &&
+ test $i != 17 # 1/2 MB should be enough
+ do
+ i=`expr $i + 1`
+ teststring=$teststring$teststring
+ done
+ teststring=
+ # Add a significant safety factor because C++ compilers can tack on massive
+ # amounts of additional arguments before passing them to the linker.
+ # It appears as though 1/2 is a usable value.
+ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+ fi
;;
esac
])
@@ -957,7 +1057,7 @@
AC_CHECK_FUNC([shl_load],
[lt_cv_dlopen="shl_load"],
[AC_CHECK_LIB([dld], [shl_load],
- [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
[AC_CHECK_FUNC([dlopen],
[lt_cv_dlopen="dlopen"],
[AC_CHECK_LIB([dl], [dlopen],
@@ -965,7 +1065,7 @@
[AC_CHECK_LIB([svld], [dlopen],
[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
[AC_CHECK_LIB([dld], [dld_link],
- [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
])
])
])
@@ -1031,7 +1131,8 @@
# ---------------------------------
# Check to see if options -c and -o are simultaneously supported by compiler
AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
[_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
[_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
@@ -1039,7 +1140,7 @@
mkdir conftest
cd conftest
mkdir out
- printf "$lt_simple_compile_test_code" > conftest.$ac_ext
+ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
lt_compiler_flag="-o out/conftest2.$ac_objext"
# Insert the option either (1) after the last *FLAGS variable, or
@@ -1179,6 +1280,7 @@
darwin*)
if test -n "$STRIP" ; then
striplib="$STRIP -x"
+ old_striplib="$STRIP -S"
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
@@ -1196,7 +1298,8 @@
# -----------------------------
# PORTME Fill in your ld.so characteristics
AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_MSG_CHECKING([dynamic linker characteristics])
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
library_names_spec=
libname_spec='lib$name'
soname_spec=
@@ -1210,20 +1313,58 @@
version_type=none
dynamic_linker="$host_os ld.so"
sys_lib_dlsearch_path_spec="/lib /usr/lib"
+m4_if($1,[],[
if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
- if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
+ case $host_os in
+ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
+ *) lt_awk_arg="/^libraries:/" ;;
+ esac
+ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
+ if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
# if the path contains ";" then we assume it to be the separator
# otherwise default to the standard path separator (i.e. ":") - it is
# assumed that no part of a normal pathname contains ";" but that should
# okay in the real world where ";" in dirpaths is itself problematic.
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+ lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e 's/;/ /g'`
else
- sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+ lt_search_path_spec=`echo "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
fi
+ # Ok, now we have the path, separated by spaces, we can step through it
+ # and add multilib dir if necessary.
+ lt_tmp_lt_search_path_spec=
+ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+ for lt_sys_path in $lt_search_path_spec; do
+ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
+ else
+ test -d "$lt_sys_path" && \
+ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+ fi
+ done
+ lt_search_path_spec=`echo $lt_tmp_lt_search_path_spec | awk '
+BEGIN {RS=" "; FS="/|\n";} {
+ lt_foo="";
+ lt_count=0;
+ for (lt_i = NF; lt_i > 0; lt_i--) {
+ if ($lt_i != "" && $lt_i != ".") {
+ if ($lt_i == "..") {
+ lt_count++;
+ } else {
+ if (lt_count == 0) {
+ lt_foo="/" $lt_i lt_foo;
+ } else {
+ lt_count--;
+ }
+ }
+ }
+ }
+ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+ sys_lib_search_path_spec=`echo $lt_search_path_spec`
else
sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
+fi])
need_lib_prefix=unknown
hardcode_into_libs=no
@@ -1241,7 +1382,7 @@
soname_spec='${libname}${release}${shared_ext}$major'
;;
-aix4* | aix5*)
+aix[[4-9]]*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -1380,12 +1521,8 @@
shlibpath_overrides_runpath=yes
shlibpath_var=DYLD_LIBRARY_PATH
shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
- # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
- if test "$GCC" = yes; then
- sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"`
- else
- sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
- fi
+ m4_if([$1], [],[
+ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
;;
@@ -1439,7 +1576,7 @@
shlibpath_overrides_runpath=no
hardcode_into_libs=yes
;;
- freebsd*) # from 4.6 on
+ *) # from 4.6 on, and DragonFly
shlibpath_overrides_runpath=yes
hardcode_into_libs=yes
;;
@@ -1502,7 +1639,7 @@
postinstall_cmds='chmod 555 $lib'
;;
-interix3*)
+interix[[3-9]]*)
version_type=linux
need_lib_prefix=no
need_version=no
@@ -1573,7 +1710,7 @@
# Append ld.so.conf contents to the search path
if test -f /etc/ld.so.conf; then
- lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
+ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
fi
@@ -1679,6 +1816,10 @@
sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
;;
+rdos*)
+ dynamic_linker=no
+ ;;
+
solaris*)
version_type=linux
need_lib_prefix=no
@@ -1774,6 +1915,13 @@
AC_MSG_RESULT([$dynamic_linker])
test "$dynamic_linker" = no && can_build_shared=no
+AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
+[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
+sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
+AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
+[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
+sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
+
variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
if test "$GCC" = yes; then
variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
@@ -1784,7 +1932,8 @@
# _LT_AC_TAGCONFIG
# ----------------
AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_ARG_WITH([tags],
+[AC_REQUIRE([LT_AC_PROG_SED])dnl
+AC_ARG_WITH([tags],
[AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
[include additional configurations @<:@automatic@:>@])],
[tagnames="$withval"])
@@ -2045,7 +2194,7 @@
# AC_PATH_TOOL_PREFIX
# -------------------
-# find a file program which can recognise shared library
+# find a file program which can recognize shared library
AC_DEFUN([AC_PATH_TOOL_PREFIX],
[AC_REQUIRE([AC_PROG_EGREP])dnl
AC_MSG_CHECKING([for $1])
@@ -2108,7 +2257,7 @@
# AC_PATH_MAGIC
# -------------
-# find a file program which can recognise a shared library
+# find a file program which can recognize a shared library
AC_DEFUN([AC_PATH_MAGIC],
[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
if test -z "$lt_cv_path_MAGIC_CMD"; then
@@ -2255,7 +2404,7 @@
# how to check for library dependencies
# -- PORTME fill in with the dynamic library characteristics
AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[AC_CACHE_CHECK([how to recognise dependent libraries],
+[AC_CACHE_CHECK([how to recognize dependent libraries],
lt_cv_deplibs_check_method,
[lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
@@ -2272,7 +2421,7 @@
# whether `pass_all' will *always* work, you probably want this one.
case $host_os in
-aix4* | aix5*)
+aix[[4-9]]*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -2294,9 +2443,15 @@
mingw* | pw32*)
# Base MSYS/MinGW do not provide the 'file' command needed by
- # func_win32_libid shell function, so use a weaker test based on 'objdump'.
- lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
- lt_cv_file_magic_cmd='$OBJDUMP -f'
+ # func_win32_libid shell function, so use a weaker test based on 'objdump',
+ # unless we find 'file', for example because we are cross-compiling.
+ if ( file / ) >/dev/null 2>&1; then
+ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+ lt_cv_file_magic_cmd='func_win32_libid'
+ else
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ fi
;;
darwin* | rhapsody*)
@@ -2341,7 +2496,7 @@
esac
;;
-interix3*)
+interix[[3-9]]*)
# PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
;;
@@ -2391,6 +2546,10 @@
lt_cv_deplibs_check_method=pass_all
;;
+rdos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
solaris*)
lt_cv_deplibs_check_method=pass_all
;;
@@ -2443,7 +2602,7 @@
lt_cv_path_NM="$NM"
else
lt_nm_to_check="${ac_tool_prefix}nm"
- if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
lt_nm_to_check="$lt_nm_to_check nm"
fi
for lt_tmp_nm in $lt_nm_to_check; do
@@ -2659,10 +2818,10 @@
_LT_AC_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
+lt_simple_compile_test_code="int some_variable = 0;"
# Code to be used in simple link tests
-lt_simple_link_test_code='int main(){return(0);}\n'
+lt_simple_link_test_code='int main(){return(0);}'
_LT_AC_SYS_COMPILER
@@ -2698,7 +2857,7 @@
fi
;;
-aix4* | aix5*)
+aix[[4-9]]*)
if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
test "$enable_shared" = yes && enable_static=no
fi
@@ -2755,6 +2914,7 @@
_LT_AC_TAGVAR(predeps, $1)=
_LT_AC_TAGVAR(postdeps, $1)=
_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
+_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
# Source file extension for C++ test sources.
ac_ext=cpp
@@ -2764,10 +2924,10 @@
_LT_AC_TAGVAR(objext, $1)=$objext
# Code to be used in simple compile tests
-lt_simple_compile_test_code="int some_variable = 0;\n"
+lt_simple_compile_test_code="int some_variable = 0;"
# Code to be used in simple link tests
-lt_simple_link_test_code='int m...
[truncated message content] |
|
From: <jp...@us...> - 2007-07-26 15:21:31
|
Revision: 4
http://faxpp.svn.sourceforge.net/faxpp/?rev=4&view=rev
Author: jpcs
Date: 2007-07-26 08:21:24 -0700 (Thu, 26 Jul 2007)
Log Message:
-----------
Finished the API documentation.
Implemented FAXPP_tokenizer_release_buffer() which allows a user to
stream input to the tokenizer in the same way the the parser does.
Used the tokenizer streaming API in the tokenizer_example instead of
using mmap.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/docs/Doxyfile.api
trunk/faxpp/examples/tokenizer_example.c
trunk/faxpp/include/Makefile.am
trunk/faxpp/include/Makefile.in
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/event.h
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/text.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/include/faxpp/transcode.h
trunk/faxpp/src/config.h.in
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/transcode.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
Added Paths:
-----------
trunk/faxpp/docs/header.html
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-07-26 00:57:01 UTC (rev 3)
+++ trunk/faxpp/Makefile.am 2007-07-26 15:21:24 UTC (rev 4)
@@ -41,6 +41,7 @@
EXTRA_DIST = \
docs/Doxyfile.api \
+docs/header.html \
docs/api \
LICENSE
@@ -48,5 +49,3 @@
docs:
$(MAKE) -C include docs
-
-$(top_srcdir)/docs/api: docs
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-07-26 00:57:01 UTC (rev 3)
+++ trunk/faxpp/Makefile.in 2007-07-26 15:21:24 UTC (rev 4)
@@ -248,6 +248,7 @@
parser_example_LDADD = libfaxpp.la
EXTRA_DIST = \
docs/Doxyfile.api \
+docs/header.html \
docs/api \
LICENSE
@@ -922,8 +923,6 @@
docs:
$(MAKE) -C include docs
-
-$(top_srcdir)/docs/api: docs
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
Modified: trunk/faxpp/docs/Doxyfile.api
===================================================================
--- trunk/faxpp/docs/Doxyfile.api 2007-07-26 00:57:01 UTC (rev 3)
+++ trunk/faxpp/docs/Doxyfile.api 2007-07-26 15:21:24 UTC (rev 4)
@@ -1,4 +1,4 @@
-# Doxyfile 1.2.18
+# Doxyfile 1.5.1
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
@@ -11,13 +11,13 @@
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
-# General configuration options
+# Project related configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
-PROJECT_NAME = "faxpp"
+PROJECT_NAME = Faxpp
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
@@ -32,17 +32,197 @@
OUTPUT_DIRECTORY = .
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
-# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
-# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
-# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese,
-# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
+# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
+# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
+# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
OUTPUT_LANGUAGE = English
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
@@ -66,6 +246,13 @@
EXTRACT_LOCAL_CLASSES = YES
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
@@ -76,7 +263,7 @@
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these class will be included in the various
+# If set to NO (the default) these classes will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO
@@ -88,46 +275,13 @@
HIDE_FRIEND_COMPOUNDS = YES
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
-BRIEF_MEMBER_DESC = YES
+HIDE_IN_BODY_DOCS = NO
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF = YES
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
-# members of a class in the documentation of that class as if those members were
-# ordinary class members. Constructors, destructors and assignment operators of
-# the base classes will not be shown.
-
-INLINE_INHERITED_MEMB = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. It is allowed to use relative paths in the argument list.
-
-STRIP_FROM_PATH =
-
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
@@ -135,73 +289,26 @@
INTERNAL_DOCS = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS = YES
-
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower case letters. If set to YES upper case letters are also
+# file names in lower-case letters. If set to YES upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
-# users are adviced to set this option to NO.
+# and Mac users are advised to set this option to NO.
CASE_SENSE_NAMES = YES
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES = NO
-
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS = YES
-
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put list of the files that are included by a file in the documentation
+# will put a list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explict @brief command for a brief description.
-
-JAVADOC_AUTOBRIEF = YES
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# reimplements.
-
-INHERIT_DOCS = YES
-
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
@@ -214,17 +321,22 @@
SORT_MEMBER_DOCS = YES
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
-DISTRIBUTE_GROUP_DOC = NO
+SORT_BRIEF_DOCS = NO
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
-TAB_SIZE = 8
+SORT_BY_SCOPE_NAME = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
@@ -245,26 +357,18 @@
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting \deprecated commands in the documentation.
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
GENERATE_DEPRECATEDLIST= YES
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES =
-
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consist of for it to appear in
+# the initial value of a variable or define consists of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
@@ -273,26 +377,28 @@
MAX_INITIALIZER_LINES = 30
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C.
-# For instance some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
-# only. Doxygen will then generate output that is more tailored for Java.
-# For instance namespaces will be presented as packages, qualified scopes
-# will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA = NO
-
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
SHOW_USED_FILES = YES
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
@@ -314,10 +420,27 @@
WARN_IF_UNDOCUMENTED = YES
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = YES
+
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text.
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
WARN_FORMAT = "$file:$line: $text"
@@ -342,8 +465,8 @@
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
-# *.h++ *.idl *.odl
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
FILE_PATTERNS =
@@ -357,16 +480,19 @@
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
-EXCLUDE =
+EXCLUDE =
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
-# that are symbolic links (a Unix filesystem feature) are excluded from the input.
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
EXCLUDE_PATTERNS =
@@ -401,10 +527,20 @@
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
-# to standard output.
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
INPUT_FILTER =
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse (i.e. when SOURCE_BROWSER is set to YES).
@@ -416,7 +552,9 @@
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
SOURCE_BROWSER = YES
@@ -425,6 +563,12 @@
INLINE_SOURCES = NO
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented
# functions referencing it will be listed.
@@ -437,6 +581,27 @@
REFERENCES_RELATION = YES
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code. Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
@@ -485,18 +650,20 @@
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
-HTML_HEADER =
+HTML_HEADER = header.html
# The HTML_FOOTER tag can ...
[truncated message content] |
|
From: <jp...@us...> - 2007-07-26 15:41:32
|
Revision: 5
http://faxpp.svn.sourceforge.net/faxpp/?rev=5&view=rev
Author: jpcs
Date: 2007-07-26 08:41:25 -0700 (Thu, 26 Jul 2007)
Log Message:
-----------
Added a "done" parameter to the tokenizer's buffer methods, so that it
can tell when the end of the input has been reached.
Modified Paths:
--------------
trunk/faxpp/examples/tokenizer_example.c
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
Modified: trunk/faxpp/examples/tokenizer_example.c
===================================================================
--- trunk/faxpp/examples/tokenizer_example.c 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/examples/tokenizer_example.c 2007-07-26 15:41:25 UTC (rev 5)
@@ -70,7 +70,7 @@
length = fread(xml, 1, sizeof(xml), file);
- err = FAXPP_init_tokenize(tokenizer, xml, length, FAXPP_utf8_encode);
+ err = FAXPP_init_tokenize(tokenizer, xml, length, length != sizeof(xml), FAXPP_utf8_encode);
if(err != NO_ERROR) {
printf("ERROR: %s\n", FAXPP_err_to_string(err));
exit(1);
@@ -92,7 +92,7 @@
length += fread(xml, 1, sizeof(xml) - length, file);
- FAXPP_continue_tokenize(tokenizer, xml, length);
+ FAXPP_continue_tokenize(tokenizer, xml, length, length != sizeof(xml));
}
else if(err != NO_ERROR) {
printf("%03d:%03d ERROR: %s\n", FAXPP_get_tokenizer_error_line(tokenizer),
Modified: trunk/faxpp/include/faxpp/tokenizer.h
===================================================================
--- trunk/faxpp/include/faxpp/tokenizer.h 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/include/faxpp/tokenizer.h 2007-07-26 15:41:25 UTC (rev 5)
@@ -55,6 +55,7 @@
* \param tokenizer The tokenizer to initialize
* \param buffer A pointer to the start of the buffer to tokenize
* \param length The length of the given buffer
+ * \param done Set to non-zero if this is the last buffer from the input
* \param encode The encoding function to use when encoding token values
*
* \retval UNSUPPORTED_ENCODING If the encoding sniffing algorithm cannot recognize
@@ -64,7 +65,8 @@
* \relatesalso FAXPP_Tokenizer
*/
FAXPP_Error FAXPP_init_tokenize(FAXPP_Tokenizer *tokenizer, void *buffer,
- unsigned int length, FAXPP_EncodeFunction encode);
+ unsigned int length, unsigned int done,
+ FAXPP_EncodeFunction encode);
/**
* Instructs the tokenizer to release any dependencies it has on it's current buffer.
@@ -94,13 +96,14 @@
* \param tokenizer The tokenizer to initialize
* \param buffer A pointer to the start of the buffer to tokenize
* \param length The length of the given buffer
+ * \param done Set to non-zero if this is the last buffer from the input
*
* \retval NO_ERROR
*
* \relatesalso FAXPP_Tokenizer
*/
FAXPP_Error FAXPP_continue_tokenize(FAXPP_Tokenizer *tokenizer, void *buffer,
- unsigned int length);
+ unsigned int length, unsigned int done);
/**
* Reads the next token from the buffer, placing the information for it
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/src/tokenizer_states.c 2007-07-26 15:41:25 UTC (rev 5)
@@ -466,10 +466,21 @@
final_state(FAXPP_TokenizerEnv *env)
{
if(env->position >= env->buffer_end) {
- env->state = end_of_buffer_state;
- token_end_position(env);
- report_token(IGNORABLE_WHITESPACE_TOKEN, env);
- return NO_ERROR;
+ if(env->token.value.ptr) {
+ token_end_position(env);
+ if(env->token.value.len != 0) {
+ report_token(IGNORABLE_WHITESPACE_TOKEN, env);
+ if(env->buffer_done)
+ env->state = end_of_buffer_state;
+ return NO_ERROR;
+ }
+ }
+ if(env->buffer_done) {
+ report_empty_token(END_OF_BUFFER_TOKEN, env);
+ return NO_ERROR;
+ }
+ token_start_position(env);
+ return PREMATURE_END_OF_BUFFER;
}
read_char_no_check(env);
@@ -521,7 +532,7 @@
end_of_buffer_state(FAXPP_TokenizerEnv *env)
{
report_empty_token(END_OF_BUFFER_TOKEN, env);
- return 0;
+ return NO_ERROR;
}
// Include the default states
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/src/xml_parser.c 2007-07-26 15:41:25 UTC (rev 5)
@@ -155,7 +155,7 @@
env->read = 0;
env->read_user_data = 0;
- return FAXPP_init_tokenize(&env->tenv, buffer, length, env->encode);
+ return FAXPP_init_tokenize(&env->tenv, buffer, length, /*done*/1, env->encode);
}
static unsigned int p_file_read_callback(void *userData, void *buffer, unsigned int length)
@@ -179,7 +179,7 @@
unsigned int len = env->read(env->read_user_data, env->read_buffer, env->read_buffer_length);
// TBD boolean for indicating this is the last buffer - jpcs
- return FAXPP_init_tokenize(&env->tenv, env->read_buffer, len, env->encode);
+ return FAXPP_init_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length, env->encode);
}
FAXPP_Error FAXPP_next_event(FAXPP_Parser *env)
@@ -331,7 +331,7 @@
len += env->read(env->read_user_data, env->read_buffer, env->read_buffer_length - len);
- return FAXPP_continue_tokenize(&env->tenv, env->read_buffer, len);
+ return FAXPP_continue_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length);
}
#define p_check_err(err, env) \
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-07-26 15:41:25 UTC (rev 5)
@@ -324,7 +324,7 @@
}
FAXPP_Error
-FAXPP_init_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length, FAXPP_EncodeFunction encode)
+FAXPP_init_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length, unsigned int done, FAXPP_EncodeFunction encode)
{
env->buffer = buffer;
env->buffer_end = buffer + length;
@@ -338,6 +338,7 @@
env->nesting_level = 0;
env->seen_doc_element = 0;
+ env->buffer_done = done;
env->encode = encode;
@@ -390,13 +391,14 @@
}
FAXPP_Error
-FAXPP_continue_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length)
+FAXPP_continue_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length, unsigned int done)
{
if(env->token.value.ptr == env->buffer_end)
env->token.value.ptr = buffer;
env->buffer = buffer;
env->buffer_end = buffer + length;
+ env->buffer_done = done;
env->position = buffer;
Modified: trunk/faxpp/src/xml_tokenizer.h
===================================================================
--- trunk/faxpp/src/xml_tokenizer.h 2007-07-26 15:21:24 UTC (rev 4)
+++ trunk/faxpp/src/xml_tokenizer.h 2007-07-26 15:41:25 UTC (rev 5)
@@ -43,6 +43,7 @@
unsigned int nesting_level;
unsigned int seen_doc_element:1;
+ unsigned int buffer_done:1;
FAXPP_DecodeFunction decode;
FAXPP_EncodeFunction encode;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-07-28 01:49:21
|
Revision: 8
http://faxpp.svn.sourceforge.net/faxpp/?rev=8&view=rev
Author: jpcs
Date: 2007-07-27 18:49:22 -0700 (Fri, 27 Jul 2007)
Log Message:
-----------
Partially implemented a test harness for the XML Conformance Test Suite.
Fixed a number of bugs found due to running the suite:
Check for restricted characters anywhere in the document.
Check for illegal "]]>" in element content.
Check for illegal encoding in the XML declaration.
Recognize built in entity references in the tokenizer - raise an error
for any unknown entity (which is all other entities, until we have DTD
support).
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/event.h
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/attr_states.h
trunk/faxpp/src/cdata.c
trunk/faxpp/src/char_classes.h
trunk/faxpp/src/comment.c
trunk/faxpp/src/element.c
trunk/faxpp/src/element_states.h
trunk/faxpp/src/error.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xmldecl.c
Added Paths:
-----------
trunk/faxpp/tests/
trunk/faxpp/tests/xmlconf_runner.c
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/Makefile.am 2007-07-28 01:49:22 UTC (rev 8)
@@ -3,7 +3,7 @@
INCLUDES = -I$(top_srcdir)/include/
-noinst_PROGRAMS = tokenizer_example parser_example
+noinst_PROGRAMS = tokenizer_example parser_example xmlconf_runner
lib_LTLIBRARIES = libfaxpp.la
# Library version, see http://sourceware.org/autobook/autobook/autobook_91.html
@@ -39,6 +39,9 @@
parser_example_SOURCES = examples/parser_example.c
parser_example_LDADD = libfaxpp.la
+xmlconf_runner_SOURCES = tests/xmlconf_runner.c
+xmlconf_runner_LDADD = libfaxpp.la
+
EXTRA_DIST = \
docs/Doxyfile.api \
docs/header.html \
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/Makefile.in 2007-07-28 01:49:22 UTC (rev 8)
@@ -37,7 +37,8 @@
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-noinst_PROGRAMS = tokenizer_example$(EXEEXT) parser_example$(EXEEXT)
+noinst_PROGRAMS = tokenizer_example$(EXEEXT) parser_example$(EXEEXT) \
+ xmlconf_runner$(EXEEXT)
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/configure \
$(top_srcdir)/src/config.h.in autotools/config.guess \
@@ -75,6 +76,9 @@
am_tokenizer_example_OBJECTS = tokenizer_example.$(OBJEXT)
tokenizer_example_OBJECTS = $(am_tokenizer_example_OBJECTS)
tokenizer_example_DEPENDENCIES = libfaxpp.la
+am_xmlconf_runner_OBJECTS = xmlconf_runner.$(OBJEXT)
+xmlconf_runner_OBJECTS = $(am_xmlconf_runner_OBJECTS)
+xmlconf_runner_DEPENDENCIES = libfaxpp.la
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
am__depfiles_maybe = depfiles
@@ -87,9 +91,9 @@
LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
- $(tokenizer_example_SOURCES)
+ $(tokenizer_example_SOURCES) $(xmlconf_runner_SOURCES)
DIST_SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
- $(tokenizer_example_SOURCES)
+ $(tokenizer_example_SOURCES) $(xmlconf_runner_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-exec-recursive install-info-recursive \
@@ -246,6 +250,8 @@
tokenizer_example_LDADD = libfaxpp.la
parser_example_SOURCES = examples/parser_example.c
parser_example_LDADD = libfaxpp.la
+xmlconf_runner_SOURCES = tests/xmlconf_runner.c
+xmlconf_runner_LDADD = libfaxpp.la
EXTRA_DIST = \
docs/Doxyfile.api \
docs/header.html \
@@ -348,6 +354,9 @@
tokenizer_example$(EXEEXT): $(tokenizer_example_OBJECTS) $(tokenizer_example_DEPENDENCIES)
@rm -f tokenizer_example$(EXEEXT)
$(LINK) $(tokenizer_example_LDFLAGS) $(tokenizer_example_OBJECTS) $(tokenizer_example_LDADD) $(LIBS)
+xmlconf_runner$(EXEEXT): $(xmlconf_runner_OBJECTS) $(xmlconf_runner_DEPENDENCIES)
+ @rm -f xmlconf_runner$(EXEEXT)
+ $(LINK) $(xmlconf_runner_LDFLAGS) $(xmlconf_runner_OBJECTS) $(xmlconf_runner_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -371,6 +380,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/transcode.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_parser.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml_tokenizer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlconf_runner.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldecl.Plo@am__quote@
.c.o:
@@ -527,6 +537,20 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_example.obj `if test -f 'examples/tokenizer_example.c'; then $(CYGPATH_W) 'examples/tokenizer_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/tokenizer_example.c'; fi`
+xmlconf_runner.o: tests/xmlconf_runner.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xmlconf_runner.o -MD -MP -MF "$(DEPDIR)/xmlconf_runner.Tpo" -c -o xmlconf_runner.o `test -f 'tests/xmlconf_runner.c' || echo '$(srcdir)/'`tests/xmlconf_runner.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xmlconf_runner.Tpo" "$(DEPDIR)/xmlconf_runner.Po"; else rm -f "$(DEPDIR)/xmlconf_runner.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tests/xmlconf_runner.c' object='xmlconf_runner.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xmlconf_runner.o `test -f 'tests/xmlconf_runner.c' || echo '$(srcdir)/'`tests/xmlconf_runner.c
+
+xmlconf_runner.obj: tests/xmlconf_runner.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xmlconf_runner.obj -MD -MP -MF "$(DEPDIR)/xmlconf_runner.Tpo" -c -o xmlconf_runner.obj `if test -f 'tests/xmlconf_runner.c'; then $(CYGPATH_W) 'tests/xmlconf_runner.c'; else $(CYGPATH_W) '$(srcdir)/tests/xmlconf_runner.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xmlconf_runner.Tpo" "$(DEPDIR)/xmlconf_runner.Po"; else rm -f "$(DEPDIR)/xmlconf_runner.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tests/xmlconf_runner.c' object='xmlconf_runner.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xmlconf_runner.obj `if test -f 'tests/xmlconf_runner.c'; then $(CYGPATH_W) 'tests/xmlconf_runner.c'; else $(CYGPATH_W) '$(srcdir)/tests/xmlconf_runner.c'; fi`
+
mostlyclean-libtool:
-rm -f *.lo
Modified: trunk/faxpp/configure
===================================================================
--- trunk/faxpp/configure 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/configure 2007-07-28 01:49:22 UTC (rev 8)
@@ -19574,9 +19574,7 @@
-
-
-for ac_header in fcntl.h stdint.h stdlib.h string.h sys/time.h unistd.h
+for ac_header in stdint.h stdlib.h string.h sys/time.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -20351,432 +20349,6 @@
-
-for ac_header in stdlib.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
- ( cat <<\_ASBOX
-## ---------------------------------- ##
-## Report this to jo...@sn... ##
-## ---------------------------------- ##
-_ASBOX
- ) | sed "s/^/$as_me: WARNING: /" >&2
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-for ac_func in getpagesize
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-{ echo "$as_me:$LINENO: checking for working mmap" >&5
-echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_func_mmap_fixed_mapped=no
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
- Here is a matrix of mmap possibilities:
- mmap private not fixed
- mmap private fixed at somewhere currently unmapped
- mmap private fixed at somewhere already mapped
- mmap shared not fixed
- mmap shared fixed at somewhere currently unmapped
- mmap shared fixed at somewhere already mapped
- For private mappings, we should verify that changes cannot be read()
- back from the file, nor mmap's back from the file at a different
- address. (There have been systems where private was not correctly
- implemented like the infamous i386 svr4.0, and systems where the
- VM page cache was not coherent with the file system buffer cache
- like early versions of FreeBSD and possibly contemporary NetBSD.)
- For shared mappings, we should conversely verify that changes get
- propagated back to all the places they're supposed to be.
-
- Grep wants private fixed already mapped.
- The main things grep needs to know about mmap are:
- * does it exist and is it safe to write into the mmap'd area
- * how to use it (BSD variants) */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h. */
-#ifndef HAVE_GETPAGESIZE
-/* Assume that all systems that can run configure have sys/param.h. */
-# ifndef HAVE_SYS_PARAM_H
-# define HAVE_SYS_PARAM_H 1
-# endif
-
-# ifdef _SC_PAGESIZE
-# define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-# ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-# ifdef EXEC_PAGESIZE
-# define getpagesize() EXEC_PAGESIZE
-# else /* no EXEC_PAGESIZE */
-# ifdef NBPG
-# define getpagesize() NBPG * CLSIZE
-# ifndef CLSIZE
-# define CLSIZE 1
-# endif /* no CLSIZE */
-# else /* no NBPG */
-# ifdef NBPC
-# define getpagesize() NBPC
-# else /* no NBPC */
-# ifdef PAGESIZE
-# define getpagesize() PAGESIZE
-# endif /* PAGESIZE */
-# endif /* no NBPC */
-# endif /* no NBPG */
-# endif /* no EXEC_PAGESIZE */
-# else /* no HAVE_SYS_PARAM_H */
-# define getpagesize() 8192 /* punt totally */
-# endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = getpagesize ();
-
- /* First, make a file with some known garbage in it. */
- data = (char *) malloc (pagesize);
- if (!data)
- return 1;
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand ();
- umask (0);
- fd = creat ("conftest.mmap", 0600);
- if (fd < 0)
- return 1;
- if (write (fd, data, pagesize) != pagesize)
- return 1;
- close (fd);
-
- /* Next, try to mmap the file at a fixed address which already has
- something else allocated at it. If we can, also make sure that
- we see the same garbage. */
- fd = open ("conftest.mmap", O_RDWR);
- if (fd < 0)
- return 1;
- data2 = (char *) malloc (2 * pagesize);
- if (!data2)
- return 1;
- data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_FIXED, fd, 0L))
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- return 1;
-
- /* Finally, make sure that changes to the mapped area do not
- percolate back to the file as seen by read(). (This is a bug on
- some variants of i386 svr4.0.) */
- for (i = 0; i < pagesize; ++i)
- *(data2 + i) = *(data2 + i) + 1;
- data3 = (char *) malloc (pagesize);
- if (!data3)
- return 1;
- if (read (fd, data3, pagesize) != pagesize)
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- return 1;
- close (fd);
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_func_mmap_fixed_mapped=yes
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
-echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_MMAP 1
-_ACEOF
-
-fi
-rm -f conftest.mmap
-
-
for ac_header in stdlib.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
Modified: trunk/faxpp/configure.in
===================================================================
--- trunk/faxpp/configure.in 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/configure.in 2007-07-28 01:49:22 UTC (rev 8)
@@ -50,7 +50,7 @@
# Checks for header files.
AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h stdint.h stdlib.h string.h sys/time.h unistd.h])
+AC_CHECK_HEADERS([stdint.h stdlib.h string.h sys/time.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
@@ -61,7 +61,6 @@
# Checks for library functions.
AC_FUNC_MALLOC
-AC_FUNC_MMAP
AC_FUNC_REALLOC
AC_CHECK_FUNCS([gettimeofday memmove memset strerror])
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/include/faxpp/error.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -41,6 +41,10 @@
EXPECTING_EQUALS,
EXPECTING_WHITESPACE,
UNKNOWN_XML_VERSION,
+ INVALID_ENCODING_VALUE,
+ CDATA_END_IN_ELEMENT_CONTENT,
+ UNDEFINED_ENTITY,
+ DOCTYPE_NOT_IMPLEMENTED, ///< TBD Remove this error - jpcs
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/event.h
===================================================================
--- trunk/faxpp/include/faxpp/event.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/include/faxpp/event.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -59,6 +59,7 @@
FAXPP_AttrValue value; ///< A linked list of the attribute value
unsigned int xmlns_attr:1; ///< Set to 1 if the attribute is a namespace declaration
+ unsigned int xml_attr:1; ///< Set to 1 if the attribute has a prefix of "xml"
unsigned int line; ///< The line the attribute started on
unsigned int column; ///< The column the attribute started on
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/include/faxpp/parser.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -240,6 +240,7 @@
* \retval EXPECTING_EQUALS
* \retval EXPECTING_WHITESPACE
* \retval UNKNOWN_XML_VERSION
+ * \retval INVALID_ENCODING_VALUE
* \retval OUT_OF_MEMORY
* \retval NO_ERROR
*
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/include/faxpp/token.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -35,6 +35,8 @@
XMLNS_PREFIX_TOKEN,
XMLNS_NAME_TOKEN,
+ XML_PREFIX_TOKEN,
+
ATTRIBUTE_PREFIX_TOKEN,
ATTRIBUTE_NAME_TOKEN,
ATTRIBUTE_VALUE_TOKEN,
@@ -51,6 +53,12 @@
PI_NAME_TOKEN,
PI_VALUE_TOKEN,
+ AMP_ENTITY_REFERENCE_TOKEN,
+ APOS_ENTITY_REFERENCE_TOKEN,
+ GT_ENTITY_REFERENCE_TOKEN,
+ LT_ENTITY_REFERENCE_TOKEN,
+ QUOT_ENTITY_REFERENCE_TOKEN,
+
ENTITY_REFERENCE_TOKEN,
DEC_CHAR_REFERENCE_TOKEN,
HEX_CHAR_REFERENCE_TOKEN,
Modified: trunk/faxpp/include/faxpp/tokenizer.h
===================================================================
--- trunk/faxpp/include/faxpp/tokenizer.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/include/faxpp/tokenizer.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -132,6 +132,7 @@
* \retval EXPECTING_EQUALS
* \retval EXPECTING_WHITESPACE
* \retval UNKNOWN_XML_VERSION
+ * \retval INVALID_ENCODING_VALUE
* \retval OUT_OF_MEMORY
* \retval NO_ERROR
*
Modified: trunk/faxpp/src/attr_states.h
===================================================================
--- trunk/faxpp/src/attr_states.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/src/attr_states.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -36,12 +36,36 @@
NS_CHAR_STATE(PREFIX(ns_name_state1), 'm', PREFIX(ns_name_state2), PREFIX(attr_name_state))
NS_CHAR_STATE(PREFIX(ns_name_state2), 'l', PREFIX(ns_name_state3), PREFIX(attr_name_state))
-NS_CHAR_STATE(PREFIX(ns_name_state3), 'n', PREFIX(ns_name_state4), PREFIX(attr_name_state))
+
NS_CHAR_STATE(PREFIX(ns_name_state4), 's', PREFIX(ns_name_state5), PREFIX(attr_name_state))
#undef NS_CHAR_STATE
FAXPP_Error
+PREFIX(ns_name_state3)(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case 'n':
+ env->state = PREFIX(ns_name_state4);
+ next_char(env);
+ break;
+ case ':':
+ env->state = PREFIX(attr_name_seen_colon_state);
+ token_end_position(env);
+ report_token(XML_PREFIX_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ break;
+ default:
+ env->state = PREFIX(attr_name_state);
+ break;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
PREFIX(ns_name_state5)(FAXPP_TokenizerEnv *env)
{
read_char(env);
@@ -261,6 +285,11 @@
break;
default:
DEFAULT_CASE;
+
+ if((FAXPP_char_flags(env->current_char) & NON_RESTRICTED_CHAR) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
break;
}
next_char(env);
@@ -311,6 +340,11 @@
break;
default:
DEFAULT_CASE;
+
+ if((FAXPP_char_flags(env->current_char) & NON_RESTRICTED_CHAR) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
break;
}
next_char(env);
Modified: trunk/faxpp/src/cdata.c
===================================================================
--- trunk/faxpp/src/cdata.c 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/src/cdata.c 2007-07-28 01:49:22 UTC (rev 8)
@@ -15,6 +15,7 @@
*/
#include "tokenizer_states.h"
+#include "char_classes.h"
FAXPP_Error
cdata_or_comment_state(FAXPP_TokenizerEnv *env)
@@ -170,6 +171,12 @@
return NO_ERROR;
LINE_ENDINGS
break;
+ default:
+ if((FAXPP_char_flags(env->current_char) & NON_RESTRICTED_CHAR) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
}
next_char(env);
@@ -189,14 +196,15 @@
env->state = cdata_end_state2;
env->token_position2 = env->token_position1;
env->token_position1 = env->token_buffer.cursor ? env->token_buffer.cursor : env->position;
- next_char(env);
break;
LINE_ENDINGS
+ env->state = cdata_content_state;
+ break;
default:
env->state = cdata_content_state;
- next_char(env);
- break;
+ return NO_ERROR;
}
+ next_char(env);
return NO_ERROR;
}
@@ -220,10 +228,12 @@
next_char(env);
break;
LINE_ENDINGS
- default:
env->state = cdata_content_state;
next_char(env);
break;
+ default:
+ env->state = cdata_content_state;
+ break;
}
return NO_ERROR;
}
Modified: trunk/faxpp/src/char_classes.h
===================================================================
--- trunk/faxpp/src/char_classes.h 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/src/char_classes.h 2007-07-28 01:49:22 UTC (rev 8)
@@ -28,7 +28,7 @@
const char *FAXPP_char_flags_to_string(unsigned int flags);
-#define FAXPP_char_flags(ch) ((ch) < 256) ? FAXPP_char_flags_256[(ch)] : FAXPP_char_flags_impl((ch))
+#define FAXPP_char_flags(ch) (((ch) < 256) ? FAXPP_char_flags_256[(ch)] : FAXPP_char_flags_impl((ch)))
unsigned int FAXPP_char_flags_impl(Char32 c);
const uint8_t FAXPP_char_flags_256[256];
Modified: trunk/faxpp/src/comment.c
===================================================================
--- trunk/faxpp/src/comment.c 2007-07-26 22:58:43 UTC (rev 7)
+++ trunk/faxpp/src/comment.c 2007-07-28 01:49:22 UTC (rev 8)
@@ -1,4 +1,21 @@
+/*
+ * Copyright 2007 Doxological Ltd.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#include "tokenizer_states.h"
+#include "char_classes.h"
FAXPP_Error
comment_start_state1(FAXPP_TokenizerEnv *env)
@@ -10,6 +27,11 @@
env->state = comment_start_state2;
next_char(env);
break;
+ case 'D':
+ env->state = comment_content_state;
+ token_start_position(env);
+ next_char(env)...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-08 14:02:48
|
Revision: 10
http://faxpp.svn.sourceforge.net/faxpp/?rev=10&view=rev
Author: jpcs
Date: 2007-08-08 07:02:32 -0700 (Wed, 08 Aug 2007)
Log Message:
-----------
Started work on the encoding selection framework.
Moved the endianness check to be performed by the configure script.
Modified Paths:
--------------
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/examples/tokenizer_example.c
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/config.h.in
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
Modified: trunk/faxpp/configure
===================================================================
--- trunk/faxpp/configure 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/configure 2007-08-08 14:02:32 UTC (rev 10)
@@ -19826,6 +19826,242 @@
fi
+{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \
+ && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN)
+ bogus endian macros
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_cv_c_bigendian=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_c_bigendian=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+ # try to guess the endianness by grepping values into an object file
+ ac_cv_c_bigendian=unknown
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+ ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+fi
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_bigendian=no
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6; }
+case $ac_cv_c_bigendian in
+ yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+ no)
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+ { (exit 1); exit 1; }; } ;;
+esac
+
{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
if test "${ac_cv_header_time+set}" = set; then
Modified: trunk/faxpp/configure.in
===================================================================
--- trunk/faxpp/configure.in 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/configure.in 2007-08-08 14:02:32 UTC (rev 10)
@@ -54,6 +54,7 @@
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
+AC_C_BIGENDIAN
AC_HEADER_TIME
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
Modified: trunk/faxpp/examples/tokenizer_example.c
===================================================================
--- trunk/faxpp/examples/tokenizer_example.c 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/examples/tokenizer_example.c 2007-08-08 14:02:32 UTC (rev 10)
@@ -82,7 +82,11 @@
if(err == PREMATURE_END_OF_BUFFER && length == sizeof(xml)) {
// Repopulate the buffer
void *buffer_position;
- FAXPP_tokenizer_release_buffer(tokenizer, &buffer_position);
+ err = FAXPP_tokenizer_release_buffer(tokenizer, &buffer_position);
+ if(err != NO_ERROR) {
+ printf("ERROR: %s\n", FAXPP_err_to_string(err));
+ exit(1);
+ }
if(buffer_position < (void*)xml + sizeof(xml)) {
length = (void*)(xml + sizeof(xml)) - buffer_position;
@@ -92,7 +96,11 @@
length += fread(xml, 1, sizeof(xml) - length, file);
- FAXPP_continue_tokenize(tokenizer, xml, length, length != sizeof(xml));
+ err = FAXPP_continue_tokenize(tokenizer, xml, length, length != sizeof(xml));
+ if(err != NO_ERROR) {
+ printf("ERROR: %s\n", FAXPP_err_to_string(err));
+ exit(1);
+ }
}
else if(err != NO_ERROR) {
printf("%03d:%03d ERROR: %s\n", FAXPP_get_tokenizer_error_line(tokenizer),
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/include/faxpp/parser.h 2007-08-08 14:02:32 UTC (rev 10)
@@ -103,6 +103,22 @@
typedef unsigned int (*FAXPP_ReadCallback)(void *userData, void *buffer, unsigned int length);
/**
+ * The function called when faxpp reads an encoding declaration in the XML document, or determines
+ * that the document does not contain an encoding declaration. The function should return a
+ * FAXPP_DecodeFunction for the encoding, or null if the encoding is not supported.
+ *
+ * \param userData The user data supplied to the FAXPP_set_encoding_callback() method
+ * \param encoding The encoding string found, or null if the document does not contain an encoding
+ * declaration.
+ * \param sniffedEncoding The encoding function already in use by the tokenizer, that was determined
+ * using auto-detection when document parsing began.
+ *
+ * \return The FAXPP_DecodeFunction to use to decode the document, or null if the encoding is not supported
+ */
+typedef FAXPP_DecodeFunction (*FAXPP_EncodingCallback)(void *userData, const FAXPP_Text *encoding,
+ FAXPP_DecodeFunction sniffedEncoding);
+
+/**
* Creates a parser object
*
* \param mode The type of checks the parser should perform
@@ -154,6 +170,19 @@
void FAXPP_set_encode(FAXPP_Parser *parser, FAXPP_EncodeFunction encode);
/**
+ * Sets the encoding callback function that the parser will call when it reads an
+ * encoding declaration in the XML document, or determines that the document does
+ * not contain an encoding declaration.
+ *
+ * \param parser
+ * \param callback The encoding callback function to use, or null to use the default encoding callback
+ * \param userData The user data to be passed to the callback function when it is called
+ *
+ * \relatesalso FAXPP_Parser
+ */
+void FAXPP_set_encoding_callback(FAXPP_Parser *parser, FAXPP_EncodingCallback callback, void *userData);
+
+/**
* Initialize the parser to parse the given buffer. This will halt any
* parse that was already in progress.
*
@@ -164,6 +193,7 @@
* \param parser The parser to initialize
* \param buffer A pointer to the start of the buffer to parse
* \param length The length of the given buffer
+ * \param done Set to non-zero if this is the last buffer from the input
*
* \retval UNSUPPORTED_ENCODING If the encoding sniffing algorithm cannot recognize
* the encoding of the buffer
@@ -172,7 +202,7 @@
*
* \relatesalso FAXPP_Parser
*/
-FAXPP_Error FAXPP_init_parse(FAXPP_Parser *parser, void *buffer, unsigned int length);
+FAXPP_Error FAXPP_init_parse(FAXPP_Parser *parser, void *buffer, unsigned int length, unsigned int done);
/**
* Initialize the parser to parse the given file. This will halt any
@@ -211,6 +241,43 @@
FAXPP_Error FAXPP_init_parse_callback(FAXPP_Parser *parser, FAXPP_ReadCallback callback, void *userData);
/**
+ * Instructs the parser to release any dependencies it has on it's current buffer.
+ *
+ * This is typically called on recieving a PREMATURE_END_OF_BUFFER error, before
+ * using FAXPP_continue_parse() to provide a new buffer. In this case, the buffer data
+ * between *buffer_position and the end of the buffer need to be copied into the start of
+ * the new buffer.
+ *
+ * \param parser
+ * \param[out] buffer_position Set to a pointer in the current buffer that the tokenizer
+ * has tokenized up to
+ *
+ * \retval OUT_OF_MEMORY
+ * \retval NO_ERROR
+ *
+ * \relatesalso FAXPP_Parser
+ */
+FAXPP_Error FAXPP_release_buffer(FAXPP_Parser *parser, void **buffer_position);
+
+/**
+ * Provides a new buffer for the parser to continue parsing.
+ *
+ * FAXPP_release_buffer() should have been called before this,
+ * and the remaining data in the old buffer transferred to the new one.
+ *
+ * \param parser
+ * \param buffer A pointer to the start of the buffer to parse
+ * \param length The length of the given buffer
+ * \param done Set to non-zero if this is the last buffer from the input
+ *
+ * \retval NO_ERROR
+ *
+ * \relatesalso FAXPP_Parser
+ */
+FAXPP_Error FAXPP_continue_parse(FAXPP_Parser *parser, void *buffer,
+ unsigned int length, unsigned int done);
+
+/**
* Parses the next event, placing the information for it
* into the current event.
*
Modified: trunk/faxpp/include/faxpp/tokenizer.h
===================================================================
--- trunk/faxpp/include/faxpp/tokenizer.h 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/include/faxpp/tokenizer.h 2007-08-08 14:02:32 UTC (rev 10)
@@ -39,6 +39,7 @@
* \relatesalso FAXPP_Tokenizer
*/
FAXPP_Tokenizer *FAXPP_create_tokenizer();
+
/**
* Frees a tokenizer object
*
@@ -49,6 +50,28 @@
void FAXPP_free_tokenizer(FAXPP_Tokenizer *tokenizer);
/**
+ * Returns the current FAXPP_DecodeFunction that the tokenizer is using.
+ *
+ * \param tokenizer
+ * \return The decode function
+ *
+ * \relatesalso FAXPP_Tokenizer
+ */
+FAXPP_DecodeFunction FAXPP_get_tokenizer_decode(const FAXPP_Tokenizer *tokenizer);
+
+/**
+ * Sets the FAXPP_DecodeFunction that the tokenizer uses to decode the XML document.
+ * This will typically be called when an encoding declaration is read, to switch to
+ * the correct decode function.
+ *
+ * \param tokenizer
+ * \param decode The decode function
+ *
+ * \relatesalso FAXPP_Tokenizer
+ */
+void FAXPP_set_tokenizer_decode(FAXPP_Tokenizer *tokenizer, FAXPP_DecodeFunction decode);
+
+/**
* Initialize the tokenizer to tokenize the given buffer, returning strings
* encoded using the given encoding function.
*
@@ -93,7 +116,7 @@
* FAXPP_tokenizer_release_buffer() should have been called before this,
* and the remaining data in the old buffer transferred to the new one.
*
- * \param tokenizer The tokenizer to initialize
+ * \param tokenizer
* \param buffer A pointer to the start of the buffer to tokenize
* \param length The length of the given buffer
* \param done Set to non-zero if this is the last buffer from the input
Modified: trunk/faxpp/src/config.h.in
===================================================================
--- trunk/faxpp/src/config.h.in 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/src/config.h.in 2007-08-08 14:02:32 UTC (rev 10)
@@ -3,12 +3,6 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
@@ -28,9 +22,6 @@
/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
-/* Define to 1 if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
/* Define to 1 if your system has a GNU libc compatible `realloc' function,
and to 0 otherwise. */
#undef HAVE_REALLOC
@@ -83,6 +74,10 @@
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME
+/* Define to 1 if your processor stores words with the most significant byte
+ first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
<pthread.h>, or <semaphore.h> is not used. If the typedef was allowed, the
#define below would cause a syntax error. */
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/src/xml_parser.c 2007-08-08 14:02:32 UTC (rev 10)
@@ -40,6 +40,14 @@
static FAXPP_Error wf_start_document_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error wf_next_event(FAXPP_ParserEnv *env);
+static FAXPP_DecodeFunction p_default_encoding_callback(void *userData, const FAXPP_Text *encoding,
+ FAXPP_DecodeFunction sniffedEncoding)
+{
+ // TBD implement this - jpcs
+ // TBD eliminate the callback functions entirely - jpcs
+ return sniffedEncoding;
+}
+
FAXPP_Parser *FAXPP_create_parser(FAXPP_ParseMode mode, FAXPP_EncodeFunction encode)
{
FAXPP_ParserEnv *env = malloc(sizeof(FAXPP_ParserEnv));
@@ -48,6 +56,8 @@
env->mode = mode;
env->encode = encode;
+ env->encoding = p_default_encoding_callback;
+
/* The next_event field is set in p_reset_parser() */
env->max_attr_count = INITIAL_ATTRS_SIZE;
@@ -122,6 +132,29 @@
free(env);
}
+void FAXPP_set_null_terminate(FAXPP_Parser *parser, unsigned int boolean)
+{
+ parser->null_terminate = boolean != 0;
+}
+
+void FAXPP_set_encode(FAXPP_Parser *parser, FAXPP_EncodeFunction encode)
+{
+ parser->encode = encode;
+}
+
+
+void FAXPP_set_encoding_callback(FAXPP_Parser *parser, FAXPP_EncodingCallback callback, void *userData)
+{
+ if(callback == 0) {
+ parser->encoding = p_default_encoding_callback;
+ parser->encoding_user_data = 0;
+ }
+ else {
+ parser->encoding = callback;
+ parser->encoding_user_data = userData;
+ }
+}
+
static FAXPP_Error p_reset_parser(FAXPP_ParserEnv *env, int allocate_buffer)
{
// Reset the stack buffer cursor
@@ -147,7 +180,7 @@
return NO_ERROR;
}
-FAXPP_Error FAXPP_init_parse(FAXPP_Parser *env, void *buffer, unsigned int length)
+FAXPP_Error FAXPP_init_parse(FAXPP_Parser *env, void *buffer, unsigned int length, unsigned int done)
{
FAXPP_Error err = p_reset_parser(env, /*allocate_buffer*/0);
if(err != 0) return err;
@@ -155,7 +188,7 @@
env->read = 0;
env->read_user_data = 0;
- return FAXPP_init_tokenize(&env->tenv, buffer, length, /*done*/1, env->encode);
+ return FAXPP_init_tokenize(&env->tenv, buffer, length, done, env->encode);
}
static unsigned int p_file_read_callback(void *userData, void *buffer, unsigned int length)
@@ -178,7 +211,6 @@
unsigned int len = env->read(env->read_user_data, env->read_buffer, env->read_buffer_length);
- // TBD boolean for indicating this is the last buffer - jpcs
return FAXPP_init_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length, env->encode);
}
@@ -291,14 +323,14 @@
} \
}
-static FAXPP_Error p_read_more(FAXPP_ParserEnv *env)
+FAXPP_Error FAXPP_release_buffer(FAXPP_Parser *env, void **buffer_position)
{
- unsigned int len = 0;
- unsigned int readlen;
unsigned int i;
FAXPP_AttrValue *atval;
+ FAXPP_Error err;
- FAXPP_tokenizer_release_buffer(&env->tenv, 0);
+ err = FAXPP_tokenizer_release_buffer(&env->tenv, buffer_position);
+ if(err != 0) return err;
// Copy any strings in the event which point to the old buffer
// into the event_buffer
@@ -322,6 +354,24 @@
}
}
+ return NO_ERROR;
+}
+
+FAXPP_Error FAXPP_continue_parse(FAXPP_Parser *env, void *buffer,
+ unsigned int length, unsigned int done)
+{
+ return FAXPP_continue_tokenize(&env->tenv, buffer, length, done);
+}
+
+static FAXPP_Error p_read_more(FAXPP_ParserEnv *env)
+{
+ unsigned int len = 0;
+ unsigned int readlen;
+ FAXPP_Error err;
+
+ err = FAXPP_release_buffer(env, 0);
+ if(err != 0) return err;
+
if(env->tenv.position < env->tenv.buffer_end) {
// We're half way through a charcter, so we need to copy
// the partial char to the begining of the buffer to keep
@@ -335,7 +385,7 @@
return PREMATURE_END_OF_BUFFER;
len += readlen;
- return FAXPP_continue_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length);
+ return FAXPP_continue_parse(env, env->read_buffer, len, /*done*/len != env->read_buffer_length);
}
#define p_check_err(err, env) \
@@ -601,6 +651,7 @@
static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env)
{
FAXPP_Error err = 0;
+ FAXPP_DecodeFunction decode;
p_reset_event(env);
@@ -613,15 +664,20 @@
p_set_location_from_token(env);
break;
case XML_DECL_ENCODING_TOKEN:
- // TBD invoke a callback function to change the transcoder
p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
break;
case XML_DECL_STANDALONE_TOKEN:
p_copy_text_from_token(&env->event.standalone, env, /*useTokenBuffer*/0);
break;
default:
+ env->buffered_token = 1;
+
+ // Invoke the callback function to change the decoder
+ decode = env->encoding(env->encoding_user_data, &env->event.encoding, env->tenv.decode);
+ if(decode == 0) return UNSUPPORTED_ENCODING;
+ FAXPP_set_tokenizer_decode(&env->tenv, decode);
+
env->next_event = nc_next_event;
- env->buffered_token = 1;
env->event.type = START_DOCUMENT_EVENT;
return NO_ERROR;
}
@@ -633,6 +689,8 @@
static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env)
{
+ // TBD keep all state in the FAXPP_ParserEnv to allow progressive parse to work correctly - jpcs
+
FAXPP_Error err = 0;
p_reset_event(env);
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/src/xml_parser.h 2007-08-08 14:02:32 UTC (rev 10)
@@ -55,6 +55,9 @@
FAXPP_ParseMode mode;
FAXPP_EncodeFunction encode;
+ FAXPP_EncodingCallback encoding;
+ void *encoding_user_data;
+
FAXPP_ReadCallback read;
void *read_user_data;
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-08-07 12:16:40 UTC (rev 9)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-08-08 14:02:32 UTC (rev 10)
@@ -19,6 +19,7 @@
#include "xml_tokenizer.h"
#include "tokenizer_states.h"
+#include "config.h"
#include <faxpp/token.h>
/*********************
@@ -29,20 +30,11 @@
#define INITIAL_TOKEN_BUFFER_SIZE 64
-static unsigned int native_little_endian()
-{
- // A test to see if the machine is natively little endian
- // TBD Use configure to figure this out? - jpcs
- uint32_t num = 0x00000001;
- uint8_t *ptr = (uint8_t*)#
- return (unsigned int)*ptr;
-}
-
FAXPP_Error
sniff_encoding(FAXPP_TokenizerEnv *env)
{
// Default encoding is UTF-8
- env->decode = FAXPP_utf8_decode;
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
// Make initial judgement on the encoding
unsigned char *buf = (unsigned char*)env->position;
@@ -59,8 +51,11 @@
switch(*buf) {
case 0x3C:
/* 00 00 00 3C UCS-4, big-endian machine (1234 order) */
- if(native_little_endian()) env->decode = FAXPP_ucs4_be_decode;
- else env->decode = FAXPP_ucs4_native_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_native_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_be_decode);
+#endif
break;
}
break;
@@ -75,8 +70,11 @@
switch(*buf) {
case 0xFF:
/* 00 00 FE FF UCS-4, big-endian machine (1234 order) */
- if(native_little_endian()) env->decode = FAXPP_ucs4_be_decode;
- else env->decode = FAXPP_ucs4_native_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_native_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_be_decode);
+#endif
// Skip BOM
env->position += 4;
break;
@@ -100,14 +98,11 @@
return UNSUPPORTED_ENCODING;
case 0x3F:
/* 00 3C 00 3F UTF-16, big-endian */
- if(native_little_endian()) env->decode = FAXPP_utf16_be_decode;
- else {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_element_name_state;
- env->element_content_state = utf16_element_content_state;
- if(env->encode == FAXPP_utf16_native_encode)
- env->encode = 0;
- }
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_native_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_be_decode);
+#endif
break;
}
break;
@@ -123,8 +118,11 @@
switch(*buf) {
case 0x00:
/* 3C 00 00 00 UCS-4, little-endian machine (4321 order) */
- if(native_little_endian()) env->decode = FAXPP_ucs4_native_decode;
- else env->decode = FAXPP_ucs4_le_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_le_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_native_decode);
+#endif
break;
}
break;
@@ -132,14 +130,11 @@
switch(*buf) {
case 0x00:
/* 3C 00 3F 00 UTF-16, little-endian */
- if(native_little_endian()) {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_element_name_state;
- env->element_content_state = utf16_element_content_state;
- if(env->encode == FAXPP_utf16_native_encode)
- env->encode = 0;
- }
- else env->decode = FAXPP_utf16_le_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_le_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_native_decode);
+#endif
break;
}
break;
@@ -151,9 +146,7 @@
switch(*buf) {
case 0x6D:
/* 3C 3F 78 6D UTF-8, ISO 646, ASCII, some part of ISO 8859, Shift-JIS, EUC, etc. */
- env->decode = FAXPP_utf8_decode;
- if(env->encode == FAXPP_utf8_encode)
- env->encode = 0;
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
break;
}
break;
@@ -182,9 +175,7 @@
switch(*buf++) {
case 0xBF:
/* EF BB BF UTF-8 with byte order mark */
- env->decode = FAXPP_utf8_decode;
- if(env->encode == FAXPP_utf8_encode)
- env->encode = 0;
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
// Skip BOM
env->position += 3;
}
@@ -202,14 +193,11 @@
return UNSUPPORTED_ENCODING;
default:
/* FE FF ## ## UTF-16, big-endian */
- if(native_little_endian()) env->decode = FAXPP_utf16_be_decode;
- else {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_element_name_state;
- env->element_content_state = utf16_element_content_state;
- if(env->encode == FAXPP_utf16_native_encode)
- env->encode = 0;
- }
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_native_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_be_decode);
+#endif
// Skip BOM
env->position += 2;
break;
@@ -217,14 +205,11 @@
break;
default:
/* FE FF ## ## UTF-16, big-endian */
- if(native_little_endian()) env->decode = FAXPP_utf16_be_decode;
- else {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_element_name_state;
- env->element_content_state = utf16_element_content_state;
- if(env->encode == FAXPP_utf16_native_encode)
- env->encode = 0;
- }
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_native_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_be_decode);
+#endif
// Skip BOM
env->position += 2;
break;
@@ -240,21 +225,21 @@
switch(*buf) {
case 0x00:
/* FF FE 00 00 UCS-4, little-endian machine (4321 order) */
- if(native_little_endian()) env->decode = FAXPP_ucs4_native_decode;
- else env->decode = FAXPP_ucs4_le_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_le_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_ucs4_native_decode);
+#endif
// Skip BOM
env->position += 4;
break;
default:
/* FF FE ## ## UTF-16, little-endian */
- if(native_little_endian()) {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_element_name_state;
- env->element_content_state = utf16_element_content_state;
- if(env->encode == FAXPP_utf16_native_encode)
- env->encode = 0;
- }
- else env->decode = FAXPP_utf16_le_decode;
+#ifdef WORDS_BIGENDIAN
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_le_decode);
+#else
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf16_native_decode);
+#endif
// Skip BOM
env->position += 2;
break;
@@ -262,14 +247,11 @@
break;
default:
/* FF FE ## ## UTF-16, little-endian */
- if(native_little_endian()) {
- env->decode = FAXPP_utf16_native_decode;
- env->start_element_name_state = utf16_start_elem...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-11 00:29:44
|
Revision: 12
http://faxpp.svn.sourceforge.net/faxpp/?rev=12&view=rev
Author: jpcs
Date: 2007-08-10 17:29:45 -0700 (Fri, 10 Aug 2007)
Log Message:
-----------
Remove FAXPP_EncodingCallback, and rewrite parser states to allow
setting of parser FAXPP_DecodeFunction after the START_DOCUMENT_EVENT.
Added decoding for ISO-8859-1 (Latin1).
Recognize the strings for the built in encodings in the tokenizer, and
select the correct encoding.
Don't accept colons in PI or entity names since the namespaces spec
forbids that.
Require whitespace between attributes.
Fix handling of namespace 1.1 prefix undefines.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/include/faxpp/transcode.h
trunk/faxpp/src/attr_states.h
trunk/faxpp/src/element_states.h
trunk/faxpp/src/pi.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/transcode.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xmldecl.c
trunk/faxpp/tests/xmlconf_runner.c
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/include/faxpp/parser.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -103,22 +103,6 @@
typedef unsigned int (*FAXPP_ReadCallback)(void *userData, void *buffer, unsigned int length);
/**
- * The function called when faxpp reads an encoding declaration in the XML document, or determines
- * that the document does not contain an encoding declaration. The function should return a
- * FAXPP_DecodeFunction for the encoding, or null if the encoding is not supported.
- *
- * \param userData The user data supplied to the FAXPP_set_encoding_callback() method
- * \param encoding The encoding string found, or null if the document does not contain an encoding
- * declaration.
- * \param sniffedEncoding The encoding function already in use by the tokenizer, that was determined
- * using auto-detection when document parsing began.
- *
- * \return The FAXPP_DecodeFunction to use to decode the document, or null if the encoding is not supported
- */
-typedef FAXPP_DecodeFunction (*FAXPP_EncodingCallback)(void *userData, const FAXPP_Text *encoding,
- FAXPP_DecodeFunction sniffedEncoding);
-
-/**
* Creates a parser object
*
* \param mode The type of checks the parser should perform
@@ -170,17 +154,26 @@
void FAXPP_set_encode(FAXPP_Parser *parser, FAXPP_EncodeFunction encode);
/**
- * Sets the encoding callback function that the parser will call when it reads an
- * encoding declaration in the XML document, or determines that the document does
- * not contain an encoding declaration.
+ * Returns the current FAXPP_DecodeFunction that the parser is using.
+ *
+ * \param parser
+ * \return The decode function
*
+ * \relatesalso FAXPP_Parser
+ */
+FAXPP_DecodeFunction FAXPP_get_decode(const FAXPP_Parser *parser);
+
+/**
+ * Sets the FAXPP_DecodeFunction that the parser uses to decode the XML document.
+ * This will typically be called when an encoding declaration is read, to switch to
+ * the correct decode function.
+ *
* \param parser
- * \param callback The encoding callback function to use, or null to use the default encoding callback
- * \param userData The user data to be passed to the callback function when it is called
+ * \param decode The decode function
*
* \relatesalso FAXPP_Parser
*/
-void FAXPP_set_encoding_callback(FAXPP_Parser *parser, FAXPP_EncodingCallback callback, void *userData);
+void FAXPP_set_decode(FAXPP_Parser *parser, FAXPP_DecodeFunction decode);
/**
* Initialize the parser to parse the given buffer. This will halt any
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/include/faxpp/token.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -25,6 +25,12 @@
XML_DECL_VERSION_TOKEN,
XML_DECL_ENCODING_TOKEN,
+ XML_DECL_ENCODING_UTF8_TOKEN,
+ XML_DECL_ENCODING_UTF16_TOKEN,
+ XML_DECL_ENCODING_UTF16LE_TOKEN,
+ XML_DECL_ENCODING_UTF16BE_TOKEN,
+ XML_DECL_ENCODING_UCS4_TOKEN,
+ XML_DECL_ENCODING_ISO_8859_1_TOKEN,
XML_DECL_STANDALONE_TOKEN,
START_ELEMENT_PREFIX_TOKEN,
Modified: trunk/faxpp/include/faxpp/transcode.h
===================================================================
--- trunk/faxpp/include/faxpp/transcode.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/include/faxpp/transcode.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -97,6 +97,24 @@
unsigned int FAXPP_utf8_decode(const void *buffer, const void *buffer_end, Char32 *ch);
/**
+ * Decodes a single ISO-8859-1 (Latin1) character from the buffer into it's unicode codepoint.
+ *
+ * \param buffer The buffer to decode from
+ * \param buffer_end A pointer to the end of the buffer
+ * \param[out] ch The decoded unicode codepoint
+ *
+ * \return The length of the char, unless it is bigger than TRANSCODE_ERROR,
+ * in which case it is an error code.
+ *
+ * \retval TRANSCODE_PREMATURE_END_OF_BUFFER If there is not enough buffer left to
+ * decode another character
+ * \retval TRANSCODE_BAD_ENCODING If the the encoding is invalid
+ *
+ * \see FAXPP_DecodeFunction
+ */
+unsigned int FAXPP_iso_8859_1_decode(const void *buffer, const void *buffer_end, Char32 *ch);
+
+/**
* Decodes a single UTF-16 little endian character from the buffer into it's unicode codepoint.
*
* \param buffer The buffer to decode from
Modified: trunk/faxpp/src/attr_states.h
===================================================================
--- trunk/faxpp/src/attr_states.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/attr_states.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -264,7 +264,7 @@
switch(env->current_char) {
case '\'':
- env->state = PREFIX(start_element_ws_state);
+ env->state = PREFIX(start_element_mandatory_ws_state);
token_end_position(env);
report_token(ATTRIBUTE_VALUE_TOKEN, env);
next_char(env);
@@ -319,7 +319,7 @@
switch(env->current_char) {
case '"':
- env->state = PREFIX(start_element_ws_state);
+ env->state = PREFIX(start_element_mandatory_ws_state);
token_end_position(env);
report_token(ATTRIBUTE_VALUE_TOKEN, env);
next_char(env);
Modified: trunk/faxpp/src/element_states.h
===================================================================
--- trunk/faxpp/src/element_states.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/element_states.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -127,6 +127,28 @@
}
FAXPP_Error
+PREFIX(start_element_mandatory_ws_state)(FAXPP_TokenizerEnv *env)
+{
+ END_CHECK;
+
+ READ_CHAR;
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ // Fall through
+ case '/':
+ case '>':
+ env->state = PREFIX(start_element_ws_state);
+ break;
+ default:
+ env->state = PREFIX(start_element_ws_state);
+ return EXPECTING_WHITESPACE;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
PREFIX(start_element_ws_state)(FAXPP_TokenizerEnv *env)
{
END_CHECK;
Modified: trunk/faxpp/src/pi.c
===================================================================
--- trunk/faxpp/src/pi.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/pi.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -32,7 +32,7 @@
default:
env->state = pi_name_state;
next_char(env);
- if((FAXPP_char_flags(env->current_char) & NAME_START_CHAR) == 0) {
+ if((FAXPP_char_flags(env->current_char) & NCNAME_START_CHAR) == 0) {
return INVALID_CHAR_IN_PI_NAME;
}
break;
@@ -113,7 +113,7 @@
token_start_position(env);
return NO_ERROR;
default:
- if((FAXPP_char_flags(env->current_char) & NAME_CHAR) == 0) {
+ if((FAXPP_char_flags(env->current_char) & NCNAME_CHAR) == 0) {
next_char(env);
return INVALID_CHAR_IN_PI_NAME;
}
Modified: trunk/faxpp/src/reference.c
===================================================================
--- trunk/faxpp/src/reference.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/reference.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -53,7 +53,7 @@
env->state = entity_reference_state;
token_start_position(env);
next_char(env);
- if((FAXPP_char_flags(env->current_char) & NAME_START_CHAR) == 0)
+ if((FAXPP_char_flags(env->current_char) & NCNAME_START_CHAR) == 0)
return INVALID_CHAR_IN_ENTITY_REFERENCE;
break;
}
@@ -323,7 +323,7 @@
}
next_char(env);
- if((FAXPP_char_flags(env->current_char) & NAME_CHAR) == 0)
+ if((FAXPP_char_flags(env->current_char) & NCNAME_CHAR) == 0)
return INVALID_CHAR_IN_ENTITY_REFERENCE;
}
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/token.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -62,6 +62,18 @@
return "XML_DECL_VERSION_TOKEN";
case XML_DECL_ENCODING_TOKEN:
return "XML_DECL_ENCODING_TOKEN";
+ case XML_DECL_ENCODING_UTF8_TOKEN:
+ return "XML_DECL_ENCODING_UTF8_TOKEN";
+ case XML_DECL_ENCODING_UTF16_TOKEN:
+ return "XML_DECL_ENCODING_UTF16_TOKEN";
+ case XML_DECL_ENCODING_UTF16LE_TOKEN:
+ return "XML_DECL_ENCODING_UTF16LE_TOKEN";
+ case XML_DECL_ENCODING_UTF16BE_TOKEN:
+ return "XML_DECL_ENCODING_UTF16BE_TOKEN";
+ case XML_DECL_ENCODING_UCS4_TOKEN:
+ return "XML_DECL_ENCODING_UCS4_TOKEN";
+ case XML_DECL_ENCODING_ISO_8859_1_TOKEN:
+ return "XML_DECL_ENCODING_ISO_8859_1_TOKEN";
case XML_DECL_STANDALONE_TOKEN:
return "XML_DECL_STANDALONE_TOKEN";
case XMLNS_PREFIX_TOKEN:
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/tokenizer_states.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -61,6 +61,8 @@
return "default_start_element_name_seen_colon_state";
else if(state == default_start_element_name_seen_colon_state2)
return "default_start_element_name_seen_colon_state2";
+ else if(state == default_start_element_mandatory_ws_state)
+ return "default_start_element_mandatory_ws_state";
else if(state == default_start_element_ws_state)
return "default_start_element_ws_state";
else if(state == default_element_content_markup_state)
@@ -110,6 +112,8 @@
return "utf8_start_element_name_seen_colon_state";
else if(state == utf8_start_element_name_seen_colon_state2)
return "utf8_start_element_name_seen_colon_state2";
+ else if(state == utf8_start_element_mandatory_ws_state)
+ return "utf8_start_element_mandatory_ws_state";
else if(state == utf8_start_element_ws_state)
return "utf8_start_element_ws_state";
else if(state == utf8_attr_name_state)
@@ -159,6 +163,8 @@
return "utf16_start_element_name_seen_colon_state";
else if(state == utf16_start_element_name_seen_colon_state2)
return "utf16_start_element_name_seen_colon_state2";
+ else if(state == utf16_start_element_mandatory_ws_state)
+ return "utf16_start_element_mandatory_ws_state";
else if(state == utf16_start_element_ws_state)
return "utf16_start_element_ws_state";
else if(state == utf16_attr_name_state)
@@ -328,16 +334,82 @@
return "xml_decl_encoding_state7";
else if(state == xml_decl_encoding_state8)
return "xml_decl_encoding_state8";
- else if(state == xml_decl_encoding_value_state)
- return "xml_decl_encoding_value_state";
- else if(state == xml_decl_encoding_value_quot_state1)
- return "xml_decl_encoding_value_quot_state1";
- else if(state == xml_decl_encoding_value_quot_state2)
- return "xml_decl_encoding_value_quot_state2";
- else if(state == xml_decl_encoding_value_apos_state1)
- return "xml_decl_encoding_value_apos_state1";
- else if(state == xml_decl_encoding_value_apos_state2)
- return "xml_decl_encoding_value_apos_state2";
+
+ else if(state == xml_decl_encoding_value_state1)
+ return "xml_decl_encoding_value_state1";
+ else if(state == xml_decl_encoding_value_state2)
+ return "xml_decl_encoding_value_state2";
+ else if(state == xml_decl_encoding_value_utf_state1)
+ return "xml_decl_encoding_value_utf_state1";
+ else if(state == xml_decl_encoding_value_utf_state2)
+ return "xml_decl_encoding_value_utf_state2";
+ else if(state == xml_decl_encoding_value_utf_state3)
+ return "xml_decl_encoding_value_utf_state3";
+ else if(state == xml_decl_encoding_value_utf_state4)
+ return "xml_decl_encoding_value_utf_state4";
+ else if(state == xml_decl_encoding_value_utf8_state)
+ return "xml_decl_encoding_value_utf8_state";
+ else if(state == xml_decl_encoding_value_utf16_state1)
+ return "xml_decl_encoding_value_utf16_state1";
+ else if(state == xml_decl_encoding_value_utf16_state2)
+ return "xml_decl_encoding_value_utf16_state2";
+ else if(state == xml_decl_encoding_value_utf16be_state1)
+ return "xml_decl_encoding_value_utf16be_state1";
+ else if(state == xml_decl_encoding_value_utf16be_state2)
+ return "xml_decl_encoding_value_utf16be_state2";
+ else if(state == xml_decl_encoding_value_utf16le_state1)
+ return "xml_decl_encoding_value_utf16le_state1";
+ else if(state == xml_decl_encoding_value_utf16le_state2)
+ return "xml_decl_encoding_value_utf16le_state2";
+ else if(state == xml_decl_encoding_value_iso_state1)
+ return "xml_decl_encoding_value_iso_state1";
+ else if(state == xml_decl_encoding_value_iso_state2)
+ return "xml_decl_encoding_value_iso_state2";
+ else if(state == xml_decl_encoding_value_iso_state3)
+ return "xml_decl_encoding_value_iso_state3";
+ else if(state == xml_decl_encoding_value_iso_state4)
+ return "xml_decl_encoding_value_iso_state4";
+ else if(state == xml_decl_encoding_value_ucs4_state1)
+ return "xml_decl_encoding_value_ucs4_state1";
+ else if(state == xml_decl_encoding_value_ucs4_state2)
+ return "xml_decl_encoding_value_ucs4_state2";
+ else if(state == xml_decl_encoding_value_ucs4_state3)
+ return "xml_decl_encoding_value_ucs4_state3";
+ else if(state == xml_decl_encoding_value_ucs4_state4)
+ return "xml_decl_encoding_value_ucs4_state4";
+ else if(state == xml_decl_encoding_value_ucs4_state5)
+ return "xml_decl_encoding_value_ucs4_state5";
+ else if(state == xml_decl_encoding_value_ucs4_state6)
+ return "xml_decl_encoding_value_ucs4_state6";
+ else if(state == xml_decl_encoding_value_ucs4_state7)
+ return "xml_decl_encoding_value_ucs4_state7";
+ else if(state == xml_decl_encoding_value_ucs4_state8)
+ return "xml_decl_encoding_value_ucs4_state8";
+ else if(state == xml_decl_encoding_value_ucs4_state9)
+ return "xml_decl_encoding_value_ucs4_state9";
+ else if(state == xml_decl_encoding_value_ucs4_state10)
+ return "xml_decl_encoding_value_ucs4_state10";
+ else if(state == xml_decl_encoding_value_ucs4_state11)
+ return "xml_decl_encoding_value_ucs4_state11";
+ else if(state == xml_decl_encoding_value_ucs4_state12)
+ return "xml_decl_encoding_value_ucs4_state12";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state1)
+ return "xml_decl_encoding_value_iso_8859_1_state1";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state2)
+ return "xml_decl_encoding_value_iso_8859_1_state2";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state3)
+ return "xml_decl_encoding_value_iso_8859_1_state3";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state4)
+ return "xml_decl_encoding_value_iso_8859_1_state4";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state5)
+ return "xml_decl_encoding_value_iso_8859_1_state5";
+ else if(state == xml_decl_encoding_value_iso_8859_1_state6)
+ return "xml_decl_encoding_value_iso_8859_1_state6";
+ else if(state == xml_decl_encoding_value_quot_state)
+ return "xml_decl_encoding_value_quot_state";
+ else if(state == xml_decl_encoding_value_apos_state)
+ return "xml_decl_encoding_value_apos_state";
+
else if(state == xml_decl_standalone_ws_state)
return "xml_decl_standalone_ws_state";
else if(state == xml_decl_seen_question_state)
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-11 00:29:45 UTC (rev 12)
@@ -32,6 +32,7 @@
FAXPP_Error default_start_element_name_state(FAXPP_TokenizerEnv *env);
FAXPP_Error default_start_element_name_seen_colon_state(FAXPP_TokenizerEnv *env);
FAXPP_Error default_start_element_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error default_start_element_mandatory_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error default_start_element_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error default_ns_name_state1(FAXPP_TokenizerEnv *env);
@@ -61,6 +62,7 @@
FAXPP_Error utf8_start_element_name_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf8_start_element_name_seen_colon_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf8_start_element_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error utf8_start_element_mandatory_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf8_start_element_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf8_ns_name_state1(FAXPP_TokenizerEnv *env);
@@ -90,6 +92,7 @@
FAXPP_Error utf16_start_element_name_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf16_start_element_name_seen_colon_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf16_start_element_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error utf16_start_element_mandatory_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf16_start_element_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error utf16_ns_name_state1(FAXPP_TokenizerEnv *env);
@@ -209,12 +212,45 @@
FAXPP_Error xml_decl_encoding_state6(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_encoding_state7(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_encoding_state8(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_state(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_quot_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_quot_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_apos_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_apos_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf8_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16be_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16be_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16le_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_utf16le_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state6(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state7(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state8(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state9(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state10(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state11(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_ucs4_state12(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_iso_8859_1_state6(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_quot_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_apos_state(FAXPP_TokenizerEnv *env);
+
FAXPP_Error xml_decl_standalone_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_standalone_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_standalone_state2(FAXPP_TokenizerEnv *env);
Modified: trunk/faxpp/src/transcode.c
===================================================================
--- trunk/faxpp/src/transcode.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/transcode.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -20,6 +20,8 @@
{
if(t == FAXPP_utf8_decode)
return "UTF-8";
+ else if(t == FAXPP_iso_8859_1_decode)
+ return "ISO-8859-1";
else if (t == FAXPP_utf16_le_decode)
return "UTF-16LE";
else if (t == FAXPP_utf16_be_decode)
@@ -149,6 +151,15 @@
return len;
}
+// ISO-8859-1 is the first 256 codepoints from Unicode
+unsigned int
+FAXPP_iso_8859_1_decode(const void *buffer, const void *buffer_end,
+ Char32 *ch)
+{
+ *ch = *(uint8_t*)buffer;
+ return 1;
+}
+
/*
* Code range | UTF-16
* --------------+-------------------------------------
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-09 10:29:57 UTC (rev 11)
+++ trunk/faxpp/src/xml_parser.c 2007-08-11 00:29:45 UTC (rev 12)
@@ -20,6 +20,7 @@
#include "xml_parser.h"
#include "char_classes.h"
#include "tokenizer_states.h"
+#include "config.h"
#define INITIAL_ATTRS_SIZE 4
#define INITIAL_NS_SIZE 6
@@ -36,29 +37,28 @@
static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env);
+static FAXPP_Error nc_pi_content_next_event(FAXPP_ParserEnv *env);
+static FAXPP_Error nc_unsupported_encoding_next_event(FAXPP_ParserEnv *env);
-static FAXPP_Error wf_start_document_next_event(FAXPP_ParserEnv *env);
static FAXPP_Error wf_next_event(FAXPP_ParserEnv *env);
-static FAXPP_DecodeFunction p_default_encoding_callback(void *userData, const FAXPP_Text *encoding,
- FAXPP_DecodeFunction sniffedEncoding)
-{
- // TBD implement this - jpcs
- // TBD eliminate the callback functions entirely - jpcs
- return sniffedEncoding;
-}
-
FAXPP_Parser *FAXPP_create_parser(FAXPP_ParseMode mode, FAXPP_EncodeFunction encode)
{
FAXPP_ParserEnv *env = malloc(sizeof(FAXPP_ParserEnv));
memset(env, 0, sizeof(FAXPP_ParserEnv));
- env->mode = mode;
env->encode = encode;
- env->encoding = p_default_encoding_callback;
+ switch(mode) {
+ case NO_CHECKS_PARSE_MODE:
+ env->main_next_event = nc_next_event;
+ break;
+ case WELL_FORMED_PARSE_MODE:
+ env->main_next_event = wf_next_event;
+ break;
+ }
- /* The next_event field is set in p_reset_parser() */
+ env->next_event = nc_start_document_next_event;
env->max_attr_count = INITIAL_ATTRS_SIZE;
env->attrs = (FAXPP_Attribute*)malloc(sizeof(FAXPP_Attribute) * INITIAL_ATTRS_SIZE);
@@ -143,16 +143,18 @@
}
-void FAXPP_set_encoding_callback(FAXPP_Parser *parser, FAXPP_EncodingCallback callback, void *userData)
+FAXPP_DecodeFunction FAXPP_get_decode(const FAXPP_Parser *parser)
{
- if(callback == 0) {
- parser->encoding = p_default_encoding_callback;
- parser->encoding_user_data = 0;
+ return parser->tenv.decode;
+}
+
+void FAXPP_set_decode(FAXPP_Parser *parser, FAXPP_DecodeFunction decode)
+{
+ FAXPP_set_tokenizer_decode(&parser->tenv, decode);
+ parser->decode_needs_setting = 0;
+ if(parser->next_event == nc_unsupported_encoding_next_event) {
+ parser->next_event = parser->main_next_event;
}
- else {
- parser->encoding = callback;
- parser->encoding_user_data = userData;
- }
}
static FAXPP_Error p_reset_parser(FAXPP_ParserEnv *env, int allocate_buffer)
@@ -161,6 +163,7 @@
FAXPP_reset_buffer(&env->stack_buffer);
env->buffered_token = 0;
+ env->decode_needs_setting = 0;
if(allocate_buffer && !env->read_buffer) {
env->read_buffer = malloc(READ_BUFFER_SIZE);
@@ -168,14 +171,7 @@
env->read_buffer_length = READ_BUFFER_SIZE;
}
- switch(env->mode) {
- case NO_CHECKS_PARSE_MODE:
- env->next_event = nc_start_document_next_event;
- break;
- case WELL_FORMED_PARSE_MODE:
- env->next_event = wf_start_document_next_event;
- break;
- }
+ env->next_event = nc_start_document_next_event;
return NO_ERROR;
}
@@ -651,7 +647,6 @@
static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env)
{
FAXPP_Error err = 0;
- FAXPP_DecodeFunction decode;
p_reset_event(env);
@@ -665,20 +660,61 @@
break;
case XML_DECL_ENCODING_TOKEN:
p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ env->decode_needs_setting = 1;
break;
+ case XML_DECL_ENCODING_UTF8_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ if(env->tenv.decode != FAXPP_utf8_decode)
+ return BAD_ENCODING;
+ break;
+ case XML_DECL_ENCODING_UTF16_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ if(env->tenv.decode != FAXPP_utf16_le_decode &&
+ env->tenv.decode != FAXPP_utf16_be_decode &&
+ env->tenv.decode != FAXPP_utf16_native_decode)
+ return BAD_ENCODING;
+ break;
+ case XML_DECL_ENCODING_UTF16LE_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ if(env->tenv.decode != FAXPP_utf16_le_decode
+#ifndef WORDS_BIGENDIAN
+ && env->tenv.decode != FAXPP_utf16_native_decode
+#endif
+ )
+ return BAD_ENCODING;
+ break;
+ case XML_DECL_ENCODING_UTF16BE_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ if(env->tenv.decode != FAXPP_utf16_be_decode
+#ifdef WORDS_BIGENDIAN
+ && env->tenv.decode != FAXPP_utf16_native_decode
+#endif
+ )
+ return BAD_ENCODING;
+ break;
+ case XML_DECL_ENCODING_UCS4_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ if(env->tenv.decode != FAXPP_ucs4_le_decode &&
+ env->tenv.decode != FAXPP_ucs4_be_decode &&
+ env->tenv.decode != FAXPP_ucs4_native_decode)
+ return BAD_ENCODING;
+ break;
+ case XML_DECL_ENCODING_ISO_8859_1_TOKEN:
+ p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
+ FAXPP_set_decode(env, FAXPP_iso_8859_1_decode);
+ break;
case XML_DECL_STANDALONE_TOKEN:
p_copy_text_from_token(&env->event.standalone, env, /*useTokenBuffer*/0);
break;
default:
env->buffered_token = 1;
+ env->next_event = env->main_next_event;
+ env->event.type = START_DOCUMENT_EVENT;
- // Invoke the callback function to change the decoder
- decode = env->encoding(env->encoding_user_data, &env->event.encoding, env->tenv.decode);
- if(decode == 0) return UNSUPPORTED_ENCODING;
- FAXPP_set_tokenizer_decode(&env->tenv, decode);
+ if(env->decode_needs_setting) {
+ env->next_event = nc_unsupported_encoding_next_event;
+ }
- env->next_event = nc_next_event;
- env->event.type = START_DOCUMENT_EVENT;
return NO_ERROR;
}
}
@@ -687,10 +723,33 @@
return NO_ERROR;
}
+static FAXPP_Error nc_pi_content_next_event(FAXPP_ParserEnv *env)
+{
+ FAXPP_Error err = 0;
+
+ p_next_token(err, env);
+
+ switch(env->tenv.result_token.type) {
+ case PI_VALUE_TOKEN:
+ p_copy_text_from_token(&env->event.value, env, /*useTokenBuffer*/0);
+ break;
+ default:
+ env->buffered_token = 1;
+ break;
+ }
+
+ env->next_event = env->main_next_event;
+ env->event.type = PI_EVENT;
+ return NO_ERROR;
+}
+
+static FAXPP_Error nc_unsupported_encoding_next_event(FAXPP_ParserEnv *env)
+{
+ return UNSUPPORTED_ENCODING;
+}
+
static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env)
{
- // TBD keep all state in the FAXPP_ParserEnv to allow progressive parse to work correctly - jpcs
-
FAXPP_Error err = 0;
p_reset_event(env);
@@ -809,17 +868,8 @@
p_copy_text_from_token(&env->event.name, env, /*useTokenBuffer*/0);
p_set_location_from_token(env);
- p_next_token(err, env);
-
- if(env->tenv.result_token.type == PI_VALUE_TOKEN) {
- p_copy_text_from_token(&env->event.value, env, /*useTokenBuffer*/0);
- } else {
- env->buffered_token = 1;
- }
-
- env->event.type = PI_EVENT;
- return NO_ERROR;
-
+ env->next_event = nc_pi_content_next_event;
+ return nc_pi_content_next_event(env);
case AMP_ENTITY_REFERENCE_TOKEN:
if(env->current_attr) {
err = p_set_attr_value_name(env->current_attr, env, ENTITY_REFERENCE_EVENT, '&');
@@ -945,6 +995,12 @@
case NO_TOKEN:
case XML_DECL_VERSION_TOKEN:
case XML_DECL_ENCODING_TOKEN:
+ case XML_DECL_ENCODING_UT...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-12 17:27:30
|
Revision: 14
http://faxpp.svn.sourceforge.net/faxpp/?rev=14&view=rev
Author: jpcs
Date: 2007-08-12 10:27:32 -0700 (Sun, 12 Aug 2007)
Log Message:
-----------
Removed the tokens for specific encodings in the XML declaration,
replacing them with case insensitive string comparisons to decide which
FAXPP_DecodeFunction to use.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xmldecl.c
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/include/faxpp/token.h 2007-08-12 17:27:32 UTC (rev 14)
@@ -25,12 +25,6 @@
XML_DECL_VERSION_TOKEN,
XML_DECL_ENCODING_TOKEN,
- XML_DECL_ENCODING_UTF8_TOKEN,
- XML_DECL_ENCODING_UTF16_TOKEN,
- XML_DECL_ENCODING_UTF16LE_TOKEN,
- XML_DECL_ENCODING_UTF16BE_TOKEN,
- XML_DECL_ENCODING_UCS4_TOKEN,
- XML_DECL_ENCODING_ISO_8859_1_TOKEN,
XML_DECL_STANDALONE_TOKEN,
START_ELEMENT_PREFIX_TOKEN,
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/token.c 2007-08-12 17:27:32 UTC (rev 14)
@@ -62,18 +62,6 @@
return "XML_DECL_VERSION_TOKEN";
case XML_DECL_ENCODING_TOKEN:
return "XML_DECL_ENCODING_TOKEN";
- case XML_DECL_ENCODING_UTF8_TOKEN:
- return "XML_DECL_ENCODING_UTF8_TOKEN";
- case XML_DECL_ENCODING_UTF16_TOKEN:
- return "XML_DECL_ENCODING_UTF16_TOKEN";
- case XML_DECL_ENCODING_UTF16LE_TOKEN:
- return "XML_DECL_ENCODING_UTF16LE_TOKEN";
- case XML_DECL_ENCODING_UTF16BE_TOKEN:
- return "XML_DECL_ENCODING_UTF16BE_TOKEN";
- case XML_DECL_ENCODING_UCS4_TOKEN:
- return "XML_DECL_ENCODING_UCS4_TOKEN";
- case XML_DECL_ENCODING_ISO_8859_1_TOKEN:
- return "XML_DECL_ENCODING_ISO_8859_1_TOKEN";
case XML_DECL_STANDALONE_TOKEN:
return "XML_DECL_STANDALONE_TOKEN";
case XMLNS_PREFIX_TOKEN:
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/tokenizer_states.c 2007-08-12 17:27:32 UTC (rev 14)
@@ -334,82 +334,16 @@
return "xml_decl_encoding_state7";
else if(state == xml_decl_encoding_state8)
return "xml_decl_encoding_state8";
-
- else if(state == xml_decl_encoding_value_state1)
- return "xml_decl_encoding_value_state1";
- else if(state == xml_decl_encoding_value_state2)
- return "xml_decl_encoding_value_state2";
- else if(state == xml_decl_encoding_value_utf_state1)
- return "xml_decl_encoding_value_utf_state1";
- else if(state == xml_decl_encoding_value_utf_state2)
- return "xml_decl_encoding_value_utf_state2";
- else if(state == xml_decl_encoding_value_utf_state3)
- return "xml_decl_encoding_value_utf_state3";
- else if(state == xml_decl_encoding_value_utf_state4)
- return "xml_decl_encoding_value_utf_state4";
- else if(state == xml_decl_encoding_value_utf8_state)
- return "xml_decl_encoding_value_utf8_state";
- else if(state == xml_decl_encoding_value_utf16_state1)
- return "xml_decl_encoding_value_utf16_state1";
- else if(state == xml_decl_encoding_value_utf16_state2)
- return "xml_decl_encoding_value_utf16_state2";
- else if(state == xml_decl_encoding_value_utf16be_state1)
- return "xml_decl_encoding_value_utf16be_state1";
- else if(state == xml_decl_encoding_value_utf16be_state2)
- return "xml_decl_encoding_value_utf16be_state2";
- else if(state == xml_decl_encoding_value_utf16le_state1)
- return "xml_decl_encoding_value_utf16le_state1";
- else if(state == xml_decl_encoding_value_utf16le_state2)
- return "xml_decl_encoding_value_utf16le_state2";
- else if(state == xml_decl_encoding_value_iso_state1)
- return "xml_decl_encoding_value_iso_state1";
- else if(state == xml_decl_encoding_value_iso_state2)
- return "xml_decl_encoding_value_iso_state2";
- else if(state == xml_decl_encoding_value_iso_state3)
- return "xml_decl_encoding_value_iso_state3";
- else if(state == xml_decl_encoding_value_iso_state4)
- return "xml_decl_encoding_value_iso_state4";
- else if(state == xml_decl_encoding_value_ucs4_state1)
- return "xml_decl_encoding_value_ucs4_state1";
- else if(state == xml_decl_encoding_value_ucs4_state2)
- return "xml_decl_encoding_value_ucs4_state2";
- else if(state == xml_decl_encoding_value_ucs4_state3)
- return "xml_decl_encoding_value_ucs4_state3";
- else if(state == xml_decl_encoding_value_ucs4_state4)
- return "xml_decl_encoding_value_ucs4_state4";
- else if(state == xml_decl_encoding_value_ucs4_state5)
- return "xml_decl_encoding_value_ucs4_state5";
- else if(state == xml_decl_encoding_value_ucs4_state6)
- return "xml_decl_encoding_value_ucs4_state6";
- else if(state == xml_decl_encoding_value_ucs4_state7)
- return "xml_decl_encoding_value_ucs4_state7";
- else if(state == xml_decl_encoding_value_ucs4_state8)
- return "xml_decl_encoding_value_ucs4_state8";
- else if(state == xml_decl_encoding_value_ucs4_state9)
- return "xml_decl_encoding_value_ucs4_state9";
- else if(state == xml_decl_encoding_value_ucs4_state10)
- return "xml_decl_encoding_value_ucs4_state10";
- else if(state == xml_decl_encoding_value_ucs4_state11)
- return "xml_decl_encoding_value_ucs4_state11";
- else if(state == xml_decl_encoding_value_ucs4_state12)
- return "xml_decl_encoding_value_ucs4_state12";
- else if(state == xml_decl_encoding_value_iso_8859_1_state1)
- return "xml_decl_encoding_value_iso_8859_1_state1";
- else if(state == xml_decl_encoding_value_iso_8859_1_state2)
- return "xml_decl_encoding_value_iso_8859_1_state2";
- else if(state == xml_decl_encoding_value_iso_8859_1_state3)
- return "xml_decl_encoding_value_iso_8859_1_state3";
- else if(state == xml_decl_encoding_value_iso_8859_1_state4)
- return "xml_decl_encoding_value_iso_8859_1_state4";
- else if(state == xml_decl_encoding_value_iso_8859_1_state5)
- return "xml_decl_encoding_value_iso_8859_1_state5";
- else if(state == xml_decl_encoding_value_iso_8859_1_state6)
- return "xml_decl_encoding_value_iso_8859_1_state6";
- else if(state == xml_decl_encoding_value_quot_state)
- return "xml_decl_encoding_value_quot_state";
- else if(state == xml_decl_encoding_value_apos_state)
- return "xml_decl_encoding_value_apos_state";
-
+ else if(state == xml_decl_encoding_value_state)
+ return "xml_decl_encoding_value_state";
+ else if(state == xml_decl_encoding_value_quot_state1)
+ return "xml_decl_encoding_value_quot_state1";
+ else if(state == xml_decl_encoding_value_quot_state2)
+ return "xml_decl_encoding_value_quot_state2";
+ else if(state == xml_decl_encoding_value_apos_state1)
+ return "xml_decl_encoding_value_apos_state1";
+ else if(state == xml_decl_encoding_value_apos_state2)
+ return "xml_decl_encoding_value_apos_state2";
else if(state == xml_decl_standalone_ws_state)
return "xml_decl_standalone_ws_state";
else if(state == xml_decl_seen_question_state)
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-12 17:27:32 UTC (rev 14)
@@ -212,45 +212,12 @@
FAXPP_Error xml_decl_encoding_state6(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_encoding_state7(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_encoding_state8(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_quot_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_quot_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_apos_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error xml_decl_encoding_value_apos_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf_state3(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf_state4(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf8_state(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16be_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16be_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16le_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_utf16le_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_state3(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_state4(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state3(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state4(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state5(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state6(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state7(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state8(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state9(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state10(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state11(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_ucs4_state12(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state1(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state2(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state3(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state4(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state5(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_iso_8859_1_state6(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_quot_state(FAXPP_TokenizerEnv *env);
-FAXPP_Error xml_decl_encoding_value_apos_state(FAXPP_TokenizerEnv *env);
-
FAXPP_Error xml_decl_standalone_ws_state(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_standalone_state1(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_standalone_state2(FAXPP_TokenizerEnv *env);
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/xml_parser.c 2007-08-12 17:27:32 UTC (rev 14)
@@ -151,7 +151,6 @@
void FAXPP_set_decode(FAXPP_Parser *parser, FAXPP_DecodeFunction decode)
{
FAXPP_set_tokenizer_decode(&parser->tenv, decode);
- parser->decode_needs_setting = 0;
if(parser->next_event == nc_unsupported_encoding_next_event) {
parser->next_event = parser->main_next_event;
}
@@ -163,7 +162,6 @@
FAXPP_reset_buffer(&env->stack_buffer);
env->buffered_token = 0;
- env->decode_needs_setting = 0;
if(allocate_buffer && !env->read_buffer) {
env->read_buffer = malloc(READ_BUFFER_SIZE);
@@ -644,6 +642,37 @@
env->err_column = attr->column;
}
+// Needs upper case strings passed to it
+static int p_case_insensitive_equals(const char *str, FAXPP_EncodeFunction encode, const FAXPP_Text *text)
+{
+ // No encoding represents a character with as many as 10 bytes
+ uint8_t encode_buffer[10];
+ unsigned int encode_len;
+
+ void *text_ptr = text->ptr;
+ void *text_end = text_ptr + text->len;
+
+ while(*str != 0) {
+ if(text_ptr >= text_end) return 0;
+
+ encode_len = encode(encode_buffer, encode_buffer + sizeof(encode_buffer), *str);
+ if((text_end - text_ptr) < encode_len || memcmp(encode_buffer, text_ptr, encode_len) != 0) {
+ if(*str >= 'A' && *str <= 'Z') {
+ // Try the lower case letter as well
+ encode_len = encode(encode_buffer, encode_buffer + sizeof(encode_buffer), (*str) - 'A' + 'a');
+ if((text_end - text_ptr) < encode_len || memcmp(encode_buffer, text_ptr, encode_len) != 0)
+ return 0;
+ }
+ else return 0;
+ }
+
+ text_ptr += encode_len;
+ ++str;
+ }
+
+ return text_ptr == text_end;
+}
+
static FAXPP_Error nc_start_document_next_event(FAXPP_ParserEnv *env)
{
FAXPP_Error err = 0;
@@ -660,61 +689,60 @@
break;
case XML_DECL_ENCODING_TOKEN:
p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- env->decode_needs_setting = 1;
break;
- case XML_DECL_ENCODING_UTF8_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- if(env->tenv.decode != FAXPP_utf8_decode)
- return BAD_ENCODING;
- break;
- case XML_DECL_ENCODING_UTF16_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- if(env->tenv.decode != FAXPP_utf16_le_decode &&
- env->tenv.decode != FAXPP_utf16_be_decode &&
- env->tenv.decode != FAXPP_utf16_native_decode)
- return BAD_ENCODING;
- break;
- case XML_DECL_ENCODING_UTF16LE_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- if(env->tenv.decode != FAXPP_utf16_le_decode
-#ifndef WORDS_BIGENDIAN
- && env->tenv.decode != FAXPP_utf16_native_decode
-#endif
- )
- return BAD_ENCODING;
- break;
- case XML_DECL_ENCODING_UTF16BE_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- if(env->tenv.decode != FAXPP_utf16_be_decode
-#ifdef WORDS_BIGENDIAN
- && env->tenv.decode != FAXPP_utf16_native_decode
-#endif
- )
- return BAD_ENCODING;
- break;
- case XML_DECL_ENCODING_UCS4_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- if(env->tenv.decode != FAXPP_ucs4_le_decode &&
- env->tenv.decode != FAXPP_ucs4_be_decode &&
- env->tenv.decode != FAXPP_ucs4_native_decode)
- return BAD_ENCODING;
- break;
- case XML_DECL_ENCODING_ISO_8859_1_TOKEN:
- p_copy_text_from_token(&env->event.encoding, env, /*useTokenBuffer*/0);
- FAXPP_set_decode(env, FAXPP_iso_8859_1_decode);
- break;
case XML_DECL_STANDALONE_TOKEN:
p_copy_text_from_token(&env->event.standalone, env, /*useTokenBuffer*/0);
break;
default:
env->buffered_token = 1;
- env->next_event = env->main_next_event;
+ env->next_event = nc_unsupported_encoding_next_event;
env->event.type = START_DOCUMENT_EVENT;
- if(env->decode_needs_setting) {
- env->next_event = nc_unsupported_encoding_next_event;
+ // Check the encoding string against our internally supported encodings
+ if(env->event.encoding.ptr == 0) {
+ env->next_event = env->main_next_event;
}
-
+ else if(p_case_insensitive_equals("UTF-8", env->encode, &env->event.encoding)) {
+ env->next_event = env->main_next_event;
+ if(env->tenv.decode != FAXPP_utf8_decode)
+ return BAD_ENCODING;
+ }
+ else if(p_case_insensitive_equals("UTF-16", env->encode, &env->event.encoding)) {
+ env->next_event = env->main_next_event;
+ if(env->tenv.decode != FAXPP_utf16_le_decode &&
+ env->tenv.decode != FAXPP_utf16_be_decode &&
+ env->tenv.decode != FAXPP_utf16_native_decode)
+ return BAD_ENCODING;
+ }
+ else if(p_case_insensitive_equals("UTF-16LE", env->encode, &env->event.encoding)) {
+ env->next_event = env->main_next_event;
+ if(env->tenv.decode != FAXPP_utf16_le_decode
+#ifndef WORDS_BIGENDIAN
+ && env->tenv.decode != FAXPP_utf16_native_decode
+#endif
+ )
+ return BAD_ENCODING;
+ }
+ else if(p_case_insensitive_equals("UTF-16BE", env->encode, &env->event.encoding)) {
+ env->next_event = env->main_next_event;
+ if(env->tenv.decode != FAXPP_utf16_be_decode
+#ifdef WORDS_BIGENDIAN
+ && env->tenv.decode != FAXPP_utf16_native_decode
+#endif
+ )
+ return BAD_ENCODING;
+ }
+ else if(p_case_insensitive_equals("ISO-10646-UCS-4", env->encode, &env->event.encoding)) {
+ env->next_event = env->main_next_event;
+ if(env->tenv.decode != FAXPP_ucs4_le_decode &&
+ env->tenv.decode != FAXPP_ucs4_be_decode &&
+ env->tenv.decode != FAXPP_ucs4_native_decode)
+ return BAD_ENCODING;
+ }
+ else if(p_case_insensitive_equals("ISO-8859-1", env->encode, &env->event.encoding)) {
+ FAXPP_set_decode(env, FAXPP_iso_8859_1_decode);
+ }
+
return NO_ERROR;
}
}
@@ -995,12 +1023,6 @@
case NO_TOKEN:
case XML_DECL_VERSION_TOKEN:
case XML_DECL_ENCODING_TOKEN:
- case XML_DECL_ENCODING_UTF8_TOKEN:
- case XML_DECL_ENCODING_UTF16_TOKEN:
- case XML_DECL_ENCODING_UTF16LE_TOKEN:
- case XML_DECL_ENCODING_UTF16BE_TOKEN:
- case XML_DECL_ENCODING_UCS4_TOKEN:
- case XML_DECL_ENCODING_ISO_8859_1_TOKEN:
case XML_DECL_STANDALONE_TOKEN:
case PI_VALUE_TOKEN:
break;
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/xml_parser.h 2007-08-12 17:27:32 UTC (rev 14)
@@ -65,7 +65,6 @@
FAXPP_TokenizerEnv tenv;
unsigned int buffered_token:1;
- unsigned int decode_needs_setting:1;
unsigned int null_terminate:1;
unsigned int err_line;
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-08-12 17:27:32 UTC (rev 14)
@@ -34,9 +34,6 @@
FAXPP_Error
sniff_encoding(FAXPP_TokenizerEnv *env)
{
- // Default encoding is UTF-8
- FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
-
// Make initial judgement on the encoding
unsigned char *buf = (unsigned char*)env->position;
@@ -262,6 +259,10 @@
break;
}
+ if(env->decode == 0) {
+ // Default encoding is UTF-8
+ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode);
+ }
return NO_ERROR;
}
@@ -369,6 +370,7 @@
env->seen_doc_element = 0;
env->buffer_done = done;
+ env->decode = 0;
env->encode = encode;
env->token_buffer.cursor = 0;
Modified: trunk/faxpp/src/xmldecl.c
===================================================================
--- trunk/faxpp/src/xmldecl.c 2007-08-11 23:52:41 UTC (rev 13)
+++ trunk/faxpp/src/xmldecl.c 2007-08-12 17:27:32 UTC (rev 14)
@@ -329,23 +329,21 @@
SINGLE_CHAR_STATE(xml_decl_encoding_state5, 'd', 0, xml_decl_encoding_state6, INVALID_CHAR_IN_XML_DECL)
SINGLE_CHAR_STATE(xml_decl_encoding_state6, 'i', 0, xml_decl_encoding_state7, INVALID_CHAR_IN_XML_DECL)
SINGLE_CHAR_STATE(xml_decl_encoding_state7, 'n', 0, xml_decl_encoding_state8, INVALID_CHAR_IN_XML_DECL)
-SINGLE_CHAR_STATE(xml_decl_encoding_state8, 'g', xml_decl_encoding_value_state1, equals_state, INVALID_CHAR_IN_XML_DECL)
+SINGLE_CHAR_STATE(xml_decl_encoding_state8, 'g', xml_decl_encoding_value_state, equals_state, INVALID_CHAR_IN_XML_DECL)
FAXPP_Error
-xml_decl_encoding_value_state1(FAXPP_TokenizerEnv *env)
+xml_decl_encoding_value_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
case '"':
- env->stored_state = xml_decl_encoding_value_quot_state;
- env->state = xml_decl_encoding_value_state2;
+ env->state = xml_decl_encoding_value_quot_state1;
next_char(env);
token_start_position(env);
break;
case '\'':
- env->stored_state = xml_decl_encoding_value_apos_state;
- env->state = xml_decl_encoding_value_state2;
+ env->state = xml_decl_encoding_value_apos_state1;
next_char(env);
token_start_position(env);
break;
@@ -357,35 +355,24 @@
return NO_ERROR;
}
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
FAXPP_Error
-xml_decl_encoding_value_state2(FAXPP_TokenizerEnv *env)
+xml_decl_encoding_value_quot_state1(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'J': case 'K': case 'L': case 'M':
- case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'j': case 'k': case 'l': case 'm':
- case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'v': case 'w': case 'x': case 'y': case 'z':
- retrieve_state(env);
- break;
- case 'U':
- case 'u':
- env->state = xml_decl_encoding_value_utf_state1;
- break;
- case 'I':
- case 'i':
- env->state = xml_decl_encoding_value_iso_state1;
- break;
case '"':
- case '\'':
- retrieve_state(env);
+ env->state = xml_decl_standalone_ws_state;
+ next_char(env);
return INVALID_ENCODING_VALUE;
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M':
+ case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm':
+ case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+ env->state = xml_decl_encoding_value_quot_state2;
+ break;
LINE_ENDINGS
default:
- retrieve_state(env);
next_char(env);
return INVALID_ENCODING_VALUE;
}
@@ -393,356 +380,47 @@
return NO_ERROR;
}
-#define ENCODING_VALUE_STATE1(name, char1, next_state) \
-FAXPP_Error \
-name(FAXPP_TokenizerEnv *env) \
-{ \
- read_char(env); \
-\
- switch(env->current_char) { \
- case (char1): \
- env->state = (next_state); \
- next_char(env); \
- break; \
- default: \
- retrieve_state(env); \
- break; \
- } \
- return NO_ERROR; \
-}
-
-#define ENCODING_VALUE_STATE2(name, char1, char2, next_state) \
-FAXPP_Error \
-name(FAXPP_TokenizerEnv *env) \
-{ \
- read_char(env); \
-\
- switch(env->current_char) { \
- case (char1): \
- case (char2): \
- env->state = (next_state); \
- next_char(env); \
- break; \
- default: \
- retrieve_state(env); \
- break; \
- } \
- return NO_ERROR; \
-}
-
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_utf_state1, 'T', 't', xml_decl_encoding_value_utf_state2)
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_utf_state2, 'F', 'f', xml_decl_encoding_value_utf_state3)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_utf_state3, '-', xml_decl_encoding_value_utf_state4)
-
FAXPP_Error
-xml_decl_encoding_value_utf_state4(FAXPP_TokenizerEnv *env)
+xml_decl_encoding_value_quot_state2(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
- case '1':
- env->state = xml_decl_encoding_value_utf16_state1;
- next_char(env);
- break;
- case '8':
- env->state = xml_decl_encoding_value_utf8_state;
- next_char(env);
- break;
- default:
- retrieve_state(env);
- break;
- }
- return NO_ERROR;
-}
-
-FAXPP_Error
-xml_decl_encoding_value_utf8_state(FAXPP_TokenizerEnv *env)
-{
- read_char(env);
-
- switch(env->current_char) {
- case '\'':
- if(env->stored_state == xml_decl_encoding_value_apos_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF8_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
case '"':
- if(env->stored_state == xml_decl_encoding_value_quot_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF8_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
+ env->state = xml_decl_standalone_ws_state;
+ token_end_position(env);
+ report_token(XML_DECL_ENCODING_TOKEN, env);
break;
- default:
- retrieve_state(env);
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M':
+ case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm':
+ case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
+ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': case '_': case '-':
break;
- }
- return NO_ERROR;
-}
-
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_utf16_state1, '6', xml_decl_encoding_value_utf16_state2)
-
-FAXPP_Error
-xml_decl_encoding_value_utf16_state2(FAXPP_TokenizerEnv *env)
-{
- read_char(env);
-
- switch(env->current_char) {
- case '\'':
- if(env->stored_state == xml_decl_encoding_value_apos_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- case '"':
- if(env->stored_state == xml_decl_encoding_value_quot_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- case 'B':
- case 'b':
- env->state = xml_decl_encoding_value_utf16be_state1;
- next_char(env);
- break;
- case 'L':
- case 'l':
- env->state = xml_decl_encoding_value_utf16le_state1;
- next_char(env);
- break;
+ LINE_ENDINGS
default:
- retrieve_state(env);
- break;
- }
- return NO_ERROR;
-}
-
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_utf16be_state1, 'E', 'e', xml_decl_encoding_value_utf16be_state2)
-
-FAXPP_Error
-xml_decl_encoding_value_utf16be_state2(FAXPP_TokenizerEnv *env)
-{
- read_char(env);
-
- switch(env->current_char) {
- case '\'':
- if(env->stored_state == xml_decl_encoding_value_apos_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16BE_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- case '"':
- if(env->stored_state == xml_decl_encoding_value_quot_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16BE_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- default:
- retrieve_state(env);
- break;
- }
- return NO_ERROR;
-}
-
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_utf16le_state1, 'E', 'e', xml_decl_encoding_value_utf16le_state2)
-
-FAXPP_Error
-xml_decl_encoding_value_utf16le_state2(FAXPP_TokenizerEnv *env)
-{
- read_char(env);
-
- switch(env->current_char) {
- case '\'':
- if(env->stored_state == xml_decl_encoding_value_apos_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16LE_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- case '"':
- if(env->stored_state == xml_decl_encoding_value_quot_state) {
- env->state = xml_decl_standalone_ws_state;
- token_end_position(env);
- report_token(XML_DECL_ENCODING_UTF16LE_TOKEN, env);
- next_char(env);
- }
- else {
- retrieve_state(env);
- }
- break;
- default:
- retrieve_state(env);
- break;
- }
- return NO_ERROR;
-}
-
-// ISO-10646-UCS-4
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_iso_state1, 'S', 's', xml_decl_encoding_value_iso_state2)
-ENCODING_VALUE_STATE2(xml_decl_encoding_value_iso_state2, 'O', 'o', xml_decl_encoding_value_iso_state3)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_state3, '-', xml_decl_encoding_value_iso_state4)
-
-FAXPP_Error
-xml_decl_encoding_value_iso_state4(FAXPP_TokenizerEnv *env)
-{
- read_char(env);
-
- switch(env->current_char) {
- case '1':
- env->state = xml_decl_encoding_value_ucs4_state1;
next_char(env);
- break;
- case '8':
- env->state = xml_decl_encoding_value_iso_8859_1_state1;
- next_char(env);
- break;
- default:
- retrieve_state(env);
- break;
+ return INVALID_ENCODING_VALUE;
}
+ next_char(env);
return NO_ERROR;
}
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state1, '1', xml_decl_encoding_value_ucs4_state2)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state2, '0', xml_decl_encoding_value_ucs4_state3)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state3, '6', xml_decl_encoding_value_ucs4_state4)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state4, '4', xml_decl_encoding_value_ucs4_state5)
-ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state5, '6', xml_decl_encoding_value_ucs4_state6)
-ENCODING_VALUE_STATE1...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-13 11:00:51
|
Revision: 15
http://faxpp.svn.sourceforge.net/faxpp/?rev=15&view=rev
Author: jpcs
Date: 2007-08-13 04:00:27 -0700 (Mon, 13 Aug 2007)
Log Message:
-----------
Added a todo list.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
Added Paths:
-----------
trunk/faxpp/TODO
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-08-12 17:27:32 UTC (rev 14)
+++ trunk/faxpp/Makefile.am 2007-08-13 11:00:27 UTC (rev 15)
@@ -46,7 +46,8 @@
docs/Doxyfile.api \
docs/header.html \
docs/api \
-LICENSE
+LICENSE \
+TODO
.PHONY: docs
Added: trunk/faxpp/TODO
===================================================================
--- trunk/faxpp/TODO (rev 0)
+++ trunk/faxpp/TODO 2007-08-13 11:00:27 UTC (rev 15)
@@ -0,0 +1,5 @@
+Attribute value normalization (especially needed for namespace resolution)
+Entity expansion framework
+DTD internal subset parsing
+DTD external subset parsing
+DTD validation
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-08-15 00:33:20
|
Revision: 18
http://faxpp.svn.sourceforge.net/faxpp/?rev=18&view=rev
Author: jpcs
Date: 2007-08-14 17:33:19 -0700 (Tue, 14 Aug 2007)
Log Message:
-----------
Implemented attribute value normalization, and added a parser option to
enable/disable it. Namespace URIs are now always normalized.
Refactored the FAXPP_Buffer object so that it now contains it's own
FAXPP_BufferResizeCallback and user data, instead of needing them as
parameters.
Fixed a bug in entity output in the examples.
Modified Paths:
--------------
trunk/faxpp/TODO
trunk/faxpp/examples/parser_example.c
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/src/buffer.c
trunk/faxpp/src/buffer.h
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/tests/xmlconf_runner.c
Modified: trunk/faxpp/TODO
===================================================================
--- trunk/faxpp/TODO 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/TODO 2007-08-15 00:33:19 UTC (rev 18)
@@ -1,8 +1,17 @@
-Attribute value normalization (especially needed for namespace resolution)
+Small tasks
+-----------
+
+Normalize whitespace in attribute values
+Normalize line endings in element character content / PI values / comment values
+Accept XML 1.1 line endings as whitespace
Handle "xml" namespace properly
xml:space value checking
Error for redefining "xml" namespace
Error for defining "xmlns" namespace
+
+Large tasks
+-----------
+
Entity expansion framework
DTD internal subset parsing
DTD external subset parsing
Modified: trunk/faxpp/examples/parser_example.c
===================================================================
--- trunk/faxpp/examples/parser_example.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/examples/parser_example.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -110,17 +110,17 @@
break;
case ENTITY_REFERENCE_EVENT:
fprintf(stream, "&");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
case DEC_CHAR_REFERENCE_EVENT:
fprintf(stream, "&#");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
case HEX_CHAR_REFERENCE_EVENT:
fprintf(stream, "&#x");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
default:
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/include/faxpp/parser.h 2007-08-15 00:33:19 UTC (rev 18)
@@ -142,6 +142,28 @@
void FAXPP_set_null_terminate(FAXPP_Parser *parser, unsigned int boolean);
/**
+ * Sets whether the parser will normalize attributes values into a single string.
+ * This option is off by default for NO_CHECKS_PARSE_MODE, and on for other parser
+ * modes.
+ *
+ * The XML specification requires conformant parsers to normalize attribute values
+ * by expanding entity references and turning all whitespace to &#x20; characters.
+ * This option will have no effect on a parser in NO_CHECKS_PARSE_MODE, since this
+ * mode will never normalize attribute values.
+ *
+ * Setting this parameter whilst a parse is in progress has undefined results.
+ *
+ * Normalizing attribute values will involve copying the strings, and so
+ * will be slower where copying strings was not otherwise necessary.
+ *
+ * \param parser
+ * \param boolean Whether to normalize attribute values
+ *
+ * \relatesalso FAXPP_Parser
+ */
+void FAXPP_set_normalize_attrs(FAXPP_Parser *parser, unsigned int boolean);
+
+/**
* Sets the encoding that the parser will use when encoding event values.
*
* Setting this parameter whilst a parse is in progress has undefined results.
Modified: trunk/faxpp/src/buffer.c
===================================================================
--- trunk/faxpp/src/buffer.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/buffer.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -19,12 +19,15 @@
#include "buffer.h"
-FAXPP_Error FAXPP_init_buffer(FAXPP_Buffer *buffer, unsigned int initialSize)
+FAXPP_Error FAXPP_init_buffer(FAXPP_Buffer *buffer, unsigned int initialSize,
+ FAXPP_BufferResizeCallback callback, void *userData)
{
buffer->buffer = malloc(initialSize);
if(!buffer->buffer) return OUT_OF_MEMORY;
buffer->length = initialSize;
buffer->cursor = buffer->buffer;
+ buffer->callback = callback;
+ buffer->userData = userData;
return NO_ERROR;
}
@@ -33,7 +36,7 @@
if(buffer->buffer) free(buffer->buffer);
}
-FAXPP_Error FAXPP_resize_buffer(FAXPP_Buffer *buffer, unsigned int minSize, FAXPP_BufferResizeCallback callback, void *userData)
+FAXPP_Error FAXPP_resize_buffer(FAXPP_Buffer *buffer, unsigned int minSize)
{
unsigned int newLength = buffer->length << 1;
while(newLength < minSize) {
@@ -44,7 +47,7 @@
if(!newFAXPP_Buffer) return OUT_OF_MEMORY;
if(newFAXPP_Buffer != buffer->buffer) {
- if(callback) callback(userData, buffer, newFAXPP_Buffer);
+ if(buffer->callback) buffer->callback(buffer->userData, buffer, newFAXPP_Buffer);
buffer->cursor += newFAXPP_Buffer - buffer->buffer;
buffer->buffer = newFAXPP_Buffer;
}
@@ -54,12 +57,11 @@
return NO_ERROR;
}
-FAXPP_Error FAXPP_buffer_append(FAXPP_Buffer *buffer, void *ptr, unsigned int len,
- FAXPP_BufferResizeCallback callback, void *userData)
+FAXPP_Error FAXPP_buffer_append(FAXPP_Buffer *buffer, void *ptr, unsigned int len)
{
FAXPP_Error err;
if(buffer->cursor + len > buffer->buffer + buffer->length) {
- err = FAXPP_resize_buffer(buffer, (buffer->cursor + len) - buffer->buffer, callback, userData);
+ err = FAXPP_resize_buffer(buffer, (buffer->cursor + len) - buffer->buffer);
if(err != 0) return err;
}
@@ -69,14 +71,13 @@
return NO_ERROR;
}
-FAXPP_Error FAXPP_buffer_append_ch(FAXPP_Buffer *buffer, FAXPP_EncodeFunction encode, Char32 ch,
- FAXPP_BufferResizeCallback callback, void *userData)
+FAXPP_Error FAXPP_buffer_append_ch(FAXPP_Buffer *buffer, FAXPP_EncodeFunction encode, Char32 ch)
{
FAXPP_Error err;
unsigned int len;
while((len = encode(buffer->cursor, buffer->buffer + buffer->length, ch))
== TRANSCODE_PREMATURE_END_OF_BUFFER) {
- err = FAXPP_resize_buffer(buffer, 0, callback, userData);
+ err = FAXPP_resize_buffer(buffer, 0);
if(err != 0) return err;
}
Modified: trunk/faxpp/src/buffer.h
===================================================================
--- trunk/faxpp/src/buffer.h 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/buffer.h 2007-08-15 00:33:19 UTC (rev 18)
@@ -20,25 +20,27 @@
#include <faxpp/error.h>
#include <faxpp/transcode.h>
+typedef struct FAXPP_Buffer_s FAXPP_Buffer;
+typedef void (*FAXPP_BufferResizeCallback)(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer);
+
/// Implementation of a resizing buffer
-typedef struct FAXPP_Buffer_s {
+struct FAXPP_Buffer_s {
void *buffer;
unsigned int length;
void *cursor;
-} FAXPP_Buffer;
-typedef void (*FAXPP_BufferResizeCallback)(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer);
+ FAXPP_BufferResizeCallback callback;
+ void *userData;
+};
-FAXPP_Error FAXPP_init_buffer(FAXPP_Buffer *buffer, unsigned int initialSize);
+FAXPP_Error FAXPP_init_buffer(FAXPP_Buffer *buffer, unsigned int initialSize,
+ FAXPP_BufferResizeCallback callback, void *userData);
void FAXPP_free_buffer(FAXPP_Buffer *buffer);
#define FAXPP_reset_buffer(buf) (buf)->cursor = (buf)->buffer
-FAXPP_Error FAXPP_resize_buffer(FAXPP_Buffer *buffer, unsigned int minSize,
- FAXPP_BufferResizeCallback callback, void *userData);
-FAXPP_Error FAXPP_buffer_append(FAXPP_Buffer *buffer, void *ptr, unsigned int len,
- FAXPP_BufferResizeCallback callback, void *userData);
-FAXPP_Error FAXPP_buffer_append_ch(FAXPP_Buffer *buffer, FAXPP_EncodeFunction encode, Char32 ch,
- FAXPP_BufferResizeCallback callback, void *userData);
+FAXPP_Error FAXPP_resize_buffer(FAXPP_Buffer *buffer, unsigned int minSize);
+FAXPP_Error FAXPP_buffer_append(FAXPP_Buffer *buffer, void *ptr, unsigned int len);
+FAXPP_Error FAXPP_buffer_append_ch(FAXPP_Buffer *buffer, FAXPP_EncodeFunction encode, Char32 ch);
#endif
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/tokenizer_states.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -389,16 +389,6 @@
}
#endif
-void change_token_buffer(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer)
-{
- FAXPP_TokenizerEnv *env = (FAXPP_TokenizerEnv*)userData;
-
- env->token_position1 += newFAXPP_Buffer - buffer->buffer;
- env->token_position2 += newFAXPP_Buffer - buffer->buffer;
-
- env->token.value.ptr = newFAXPP_Buffer;
-}
-
/*********************
*
* Tokenizer State Functions
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-15 00:33:19 UTC (rev 18)
@@ -250,8 +250,6 @@
const char *state_to_string(FAXPP_StateFunction state);
#endif
-void change_token_buffer(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer);
-
#define read_char_no_check(env) \
{ \
(env)->char_len = \
@@ -280,11 +278,9 @@
if((env)->token_buffer.cursor) { \
FAXPP_Error err; \
if((env)->encode) { \
- err = FAXPP_buffer_append_ch(&(env)->token_buffer, (env)->encode, (env)->current_char, \
- change_token_buffer, (env)); \
+ err = FAXPP_buffer_append_ch(&(env)->token_buffer, (env)->encode, (env)->current_char); \
} else { \
- err = FAXPP_buffer_append(&(env)->token_buffer, (env)->position, (env)->char_len, \
- change_token_buffer, (env)); \
+ err = FAXPP_buffer_append(&(env)->token_buffer, (env)->position, (env)->char_len); \
} \
if(err != 0) return err; \
} \
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/xml_parser.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -40,6 +40,9 @@
static FAXPP_Error wf_next_event(FAXPP_ParserEnv *env);
+static void p_change_event_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer);
+static void p_change_stack_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer);
+
FAXPP_Parser *FAXPP_create_parser(FAXPP_ParseMode mode, FAXPP_EncodeFunction encode)
{
FAXPP_ParserEnv *env = malloc(sizeof(FAXPP_ParserEnv));
@@ -50,9 +53,11 @@
switch(mode) {
case NO_CHECKS_PARSE_MODE:
env->main_next_event = nc_next_event;
+ env->normalize_attrs = 0;
break;
case WELL_FORMED_PARSE_MODE:
env->main_next_event = wf_next_event;
+ env->normalize_attrs = 1;
break;
}
@@ -65,12 +70,12 @@
return 0;
}
- if(FAXPP_init_buffer(&env->event_buffer, INITIAL_EVENT_BUFFER_SIZE) == OUT_OF_MEMORY) {
+ if(FAXPP_init_buffer(&env->event_buffer, INITIAL_EVENT_BUFFER_SIZE, p_change_event_buffer, env) == OUT_OF_MEMORY) {
FAXPP_free_parser(env);
return 0;
}
- if(FAXPP_init_buffer(&env->stack_buffer, INITIAL_STACK_BUFFER_SIZE) == OUT_OF_MEMORY) {
+ if(FAXPP_init_buffer(&env->stack_buffer, INITIAL_STACK_BUFFER_SIZE, p_change_stack_buffer, env) == OUT_OF_MEMORY) {
FAXPP_free_parser(env);
return 0;
}
@@ -135,6 +140,11 @@
parser->null_terminate = boolean != 0;
}
+void FAXPP_set_normalize_attrs(FAXPP_Parser *parser, unsigned int boolean)
+{
+ parser->normalize_attrs = boolean != 0;
+}
+
void FAXPP_set_encode(FAXPP_Parser *parser, FAXPP_EncodeFunction encode)
{
parser->encode = encode;
@@ -242,60 +252,60 @@
////////////////////////////////////////////////////////////////////////////////////////////////////
-static void p_text_change_buffer(FAXPP_Buffer *buffer, void *newFAXPP_Buffer, FAXPP_Text *text)
+static void p_text_change_buffer(FAXPP_Buffer *buffer, void *newBuffer, FAXPP_Text *text)
{
if(text->ptr >= buffer->buffer && text->ptr < (buffer->buffer + buffer->length)) {
- text->ptr += newFAXPP_Buffer - buffer->buffer;
+ text->ptr += newBuffer - buffer->buffer;
}
}
-static void p_change_event_buffer(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer)
+static void p_change_event_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer)
{
unsigned int i;
FAXPP_AttrValue *atval;
FAXPP_ParserEnv *env = (FAXPP_ParserEnv*)userData;
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.prefix);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.uri);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.name);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.value);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.version);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.encoding);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.standalone);
+ p_text_change_buffer(buffer, newBuffer, &env->event.prefix);
+ p_text_change_buffer(buffer, newBuffer, &env->event.uri);
+ p_text_change_buffer(buffer, newBuffer, &env->event.name);
+ p_text_change_buffer(buffer, newBuffer, &env->event.value);
+ p_text_change_buffer(buffer, newBuffer, &env->event.version);
+ p_text_change_buffer(buffer, newBuffer, &env->event.encoding);
+ p_text_change_buffer(buffer, newBuffer, &env->event.standalone);
for(i = 0; i < env->event.attr_count; ++i) {
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.attrs[i].prefix);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.attrs[i].uri);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &env->event.attrs[i].name);
+ p_text_change_buffer(buffer, newBuffer, &env->event.attrs[i].prefix);
+ p_text_change_buffer(buffer, newBuffer, &env->event.attrs[i].uri);
+ p_text_change_buffer(buffer, newBuffer, &env->event.attrs[i].name);
atval = &env->event.attrs[i].value;
while(atval) {
- p_text_change_buffer(buffer, newFAXPP_Buffer, &atval->value);
+ p_text_change_buffer(buffer, newBuffer, &atval->value);
atval = atval->next;
}
}
}
-static void p_change_stack_buffer(void *userData, FAXPP_Buffer *buffer, void *newFAXPP_Buffer)
+static void p_change_stack_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer)
{
FAXPP_ParserEnv *env = (FAXPP_ParserEnv*)userData;
FAXPP_ElementInfo *el = env->element_info_stack;
while(el) {
- p_text_change_buffer(buffer, newFAXPP_Buffer, &el->prefix);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &el->uri);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &el->name);
+ p_text_change_buffer(buffer, newBuffer, &el->prefix);
+ p_text_change_buffer(buffer, newBuffer, &el->uri);
+ p_text_change_buffer(buffer, newBuffer, &el->name);
- el->prev_stack_cursor += newFAXPP_Buffer - buffer->buffer;
+ el->prev_stack_cursor += newBuffer - buffer->buffer;
el = el->prev;
}
FAXPP_NamespaceInfo *ns = env->namespace_stack;
while(ns) {
- p_text_change_buffer(buffer, newFAXPP_Buffer, &ns->prefix);
- p_text_change_buffer(buffer, newFAXPP_Buffer, &ns->uri);
+ p_text_change_buffer(buffer, newBuffer, &ns->prefix);
+ p_text_change_buffer(buffer, newBuffer, &ns->uri);
ns = ns->prev;
}
@@ -305,9 +315,9 @@
{ \
if((text)->ptr >= (env)->tenv.buffer && (text)->ptr < (env)->tenv.buffer_end) { \
void *newPtr = (env)->event_buffer.cursor; \
- FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (text)->ptr, (text)->len, p_change_event_buffer, (env)); \
+ FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (text)->ptr, (text)->len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0, p_change_event_buffer, (env)); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
if(err != 0) return err; \
(text)->ptr = newPtr; \
} \
@@ -443,16 +453,46 @@
/* (env)->null_terminate) { */ \
(text)->ptr = (env)->stack_buffer.cursor; \
(text)->len = (o)->len; \
- FAXPP_Error err = FAXPP_buffer_append(&(env)->stack_buffer, (o)->ptr, (o)->len, \
- p_change_stack_buffer, (env)); \
+ FAXPP_Error err = FAXPP_buffer_append(&(env)->stack_buffer, (o)->ptr, (o)->len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->stack_buffer, (env)->encode, 0, p_change_stack_buffer, (env)); \
+ err = FAXPP_buffer_append_ch(&(env)->stack_buffer, (env)->encode, 0); \
if(err != 0) return err; \
/* } else { */ \
/* p_set_text_from_text((text), (o)); */ \
/* } */ \
}
+#define p_copy_text_from_attr_value(text, attrval, env) \
+{ \
+ if((attrval)->next == 0) { \
+ p_copy_text_from_event((text), &(attrval)->value, (env)); \
+ } \
+ else { \
+ FAXPP_Error err = p_normalize_attr_value((text), &(env)->stack_buffer, (attrval), (env)); \
+ if(err != NO_ERROR) return err; \
+ } \
+}
+
+FAXPP_Error p_normalize_attr_value(FAXPP_Text *text, FAXPP_Buffer *buffer, const FAXPP_AttrValue *value, const FAXPP_ParserEnv *env)
+{
+ FAXPP_Error err;
+
+ text->ptr = buffer->cursor;
+
+ while(value) {
+ err = FAXPP_buffer_append(buffer, value->value.ptr, value->value.len);
+ if(err != NO_ERROR) return err;
+ value = value->next;
+ }
+
+ text->len = buffer->cursor - text->ptr;
+
+ if(env->null_terminate)
+ return FAXPP_buffer_append_ch(buffer, env->encode, 0);
+
+ return NO_ERROR;
+}
+
#define p_copy_text_from_token(text, env, useTokenBuffer) \
{ \
/* TBD null terminate in tokenizer - jpcs */ \
@@ -461,10 +501,9 @@
(text)->ptr = (env)->tenv.result_token.value.ptr; \
} else { \
(text)->ptr = (env)->event_buffer.cursor; \
- FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (env)->tenv.result_token.value.ptr, (env)->tenv.result_token.value.len, \
- p_change_event_buffer, (env)); \
+ FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (env)->tenv.result_token.value.ptr, (env)->tenv.result_token.value.len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0, p_change_event_buffer, (env)); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
if(err != 0) return err; \
} \
}
@@ -549,10 +588,10 @@
#define p_set_text_to_char(text, env, ch) \
{ \
(text)->ptr = (env)->event_buffer.cursor; \
- FAXPP_Error err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, (ch), p_change_event_buffer, (env)); \
+ FAXPP_Error err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, (ch)); \
(text)->len = (env)->event_buffer.cursor - (text)->ptr; \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0, p_change_event_buffer, (env)); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
if(err != 0) return err; \
}
@@ -1010,8 +1049,7 @@
nsinfo->prev = env->namespace_stack;
env->namespace_stack = nsinfo;
- // TBD deal with entities in attribute values - jpcs
- p_copy_text_from_event(&nsinfo->uri, &(attr->value.value), env);
+ p_copy_text_from_attr_value(&nsinfo->uri, &attr->value, env);
if(attr->prefix.len != 0) {
p_copy_text_from_event(&nsinfo->prefix, &attr->name, env);
@@ -1145,6 +1183,7 @@
int i, j;
FAXPP_Attribute *attr, *attr2;
FAXPP_AttrValue *attrVal;
+ FAXPP_Text tmpText;
Char32 ch;
FAXPP_Error err = nc_next_event(env);
@@ -1169,8 +1208,6 @@
for(i = 0; i < env->event.attr_count; ++i) {
attr = &env->event.attrs[i];
- // TBD Normalize the attribute values - jpcs
-
/* Check that the character references are valid */
for(attrVal = &attr->value; attrVal != 0; attrVal = attrVal->next) {
switch(attrVal->type) {
@@ -1194,11 +1231,11 @@
}
attrVal->value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch, p_change_event_buffer, env);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
attrVal->value.len = env->event_buffer.cursor - attrVal->value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0, p_change_event_buffer, env);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
if(err != 0) return err;
break;
case HEX_CHAR_REFERENCE_EVENT:
@@ -1210,17 +1247,30 @@
}
attrVal->value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch, p_change_event_buffer, env);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
attrVal->value.len = env->event_buffer.cursor - attrVal->value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0, p_change_event_buffer, env);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
if(err != 0) return err;
break;
default: break;
}
}
+ /* Normalize the attribute values if required */
+ if(env->normalize_attrs && attr->value.next != 0) {
+ err = p_normalize_attr_value(&tmpText, &env->event_buffer, &attr->value, env);
+ if(err != 0) return err;
+
+ attr->value.type = CHARACTERS_EVENT;
+ attr->value.name.ptr = 0;
+ attr->value.name.len = 0;
+ attr->value.value.ptr = tmpText.ptr;
+ attr->value.value.len = tmpText.len;
+ attr->value.next = 0;
+ }
+
/* Check for namespace attributes */
if(attr->xmlns_attr) {
err = p_add_ns_info(env, attr);
@@ -1317,11 +1367,11 @@
}
env->event.value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch, p_change_event_buffer, (env));
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
env->event.value.len = env->event_buffer.cursor - env->event.value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0, p_change_event_buffer, (env));
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
if(err != 0) return err;
break;
@@ -1334,11 +1384,11 @@
}
env->event.value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch, p_change_event_buffer, (env));
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
env->event.value.len = env->event_buffer.cursor - env->event.value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0, p_change_event_buffer, (env));
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
if(err != 0) return err;
break;
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/xml_parser.h 2007-08-15 00:33:19 UTC (rev 18)
@@ -65,6 +65,7 @@
FAXPP_TokenizerEnv tenv;
unsigned int null_terminate:1;
+ unsigned int normalize_attrs:1;
unsigned int err_line;
unsigned int err_column;
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -319,11 +319,21 @@
}
}
+void change_token_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer)
+{
+ FAXPP_TokenizerEnv *env = (FAXPP_TokenizerEnv*)userData;
+
+ env->token_position1 += newBuffer - buffer->buffer;
+ env->token_position2 += newBuffer - buffer->buffer;
+
+ env->token.value.ptr = newBuffer;
+}
+
FAXPP_Error
init_tokenizer_internal(FAXPP_TokenizerEnv *env)
{
memset(env, 0, sizeof(FAXPP_TokenizerEnv));
- return FAXPP_init_buffer(&env->token_buffer, INITIAL_TOKEN_BUFFER_SIZE);
+ return FAXPP_init_buffer(&env->token_buffer, INITIAL_TOKEN_BUFFER_SIZE, change_token_buffer, env);
}
void
@@ -418,8 +428,7 @@
tokenizer->token.value.ptr = tokenizer->token_buffer.cursor;
tokenizer->token.value.len = token_length;
- return FAXPP_buffer_append(&tokenizer->token_buffer, token_start, token_length,
- change_token_buffer, tokenizer);
+ return FAXPP_buffer_append(&tokenizer->token_buffer, token_start, token_length);
}
return NO_ERROR;
Modified: trunk/faxpp/tests/xmlconf_runner.c
===================================================================
--- trunk/faxpp/tests/xmlconf_runner.c 2007-08-14 09:49:37 UTC (rev 17)
+++ trunk/faxpp/tests/xmlconf_runner.c 2007-08-15 00:33:19 UTC (rev 18)
@@ -41,17 +41,17 @@
break;
case ENTITY_REFERENCE_EVENT:
fprintf(stream, "&");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
case DEC_CHAR_REFERENCE_EVENT:
fprintf(stream, "&#");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
case HEX_CHAR_REFERENCE_EVENT:
fprintf(stream, "&#x");
- output_text(&atval->value, stream);
+ output_text(&atval->name, stream);
fprintf(stream, ";");
break;
default:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-08-19 22:55:50
|
Revision: 19
http://faxpp.svn.sourceforge.net/faxpp/?rev=19&view=rev
Author: jpcs
Date: 2007-08-19 15:55:48 -0700 (Sun, 19 Aug 2007)
Log Message:
-----------
Implemented attribute value whitespace normalization. This happens in
the tokenizer, which will copy an attribute value to it's buffer if it
finds a whitespace character that needs normalizing.
Moved the parser encoding and attribute value normalization state to
the tokenizer, so it isn't repeated.
Modified Paths:
--------------
trunk/faxpp/TODO
trunk/faxpp/examples/tokenizer_example.c
trunk/faxpp/include/faxpp/tokenizer.h
trunk/faxpp/src/attr_states.h
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
Modified: trunk/faxpp/TODO
===================================================================
--- trunk/faxpp/TODO 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/TODO 2007-08-19 22:55:48 UTC (rev 19)
@@ -1,7 +1,6 @@
Small tasks
-----------
-Normalize whitespace in attribute values
Normalize line endings in element character content / PI values / comment values
Accept XML 1.1 line endings as whitespace
Handle "xml" namespace properly
Modified: trunk/faxpp/examples/tokenizer_example.c
===================================================================
--- trunk/faxpp/examples/tokenizer_example.c 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/examples/tokenizer_example.c 2007-08-19 22:55:48 UTC (rev 19)
@@ -52,7 +52,7 @@
exit(-1);
}
- FAXPP_Tokenizer *tokenizer = FAXPP_create_tokenizer();
+ FAXPP_Tokenizer *tokenizer = FAXPP_create_tokenizer(FAXPP_utf8_encode);
if(tokenizer == 0) {
printf("ERROR: out of memory\n");
exit(1);
@@ -70,7 +70,7 @@
length = fread(xml, 1, sizeof(xml), file);
- err = FAXPP_init_tokenize(tokenizer, xml, length, length != sizeof(xml), FAXPP_utf8_encode);
+ err = FAXPP_init_tokenize(tokenizer, xml, length, length != sizeof(xml));
if(err != NO_ERROR) {
printf("ERROR: %s\n", FAXPP_err_to_string(err));
exit(1);
Modified: trunk/faxpp/include/faxpp/tokenizer.h
===================================================================
--- trunk/faxpp/include/faxpp/tokenizer.h 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/include/faxpp/tokenizer.h 2007-08-19 22:55:48 UTC (rev 19)
@@ -34,11 +34,12 @@
/**
* Creates a tokenizer object
*
+ * \param encode The encoding function to use when encoding token values
* \return A pointer to the tokenizer object, or 0 if out of memory.
*
* \relatesalso FAXPP_Tokenizer
*/
-FAXPP_Tokenizer *FAXPP_create_tokenizer();
+FAXPP_Tokenizer *FAXPP_create_tokenizer(FAXPP_EncodeFunction encode);
/**
* Frees a tokenizer object
@@ -79,7 +80,6 @@
* \param buffer A pointer to the start of the buffer to tokenize
* \param length The length of the given buffer
* \param done Set to non-zero if this is the last buffer from the input
- * \param encode The encoding function to use when encoding token values
*
* \retval UNSUPPORTED_ENCODING If the encoding sniffing algorithm cannot recognize
* the encoding of the buffer
@@ -88,8 +88,7 @@
* \relatesalso FAXPP_Tokenizer
*/
FAXPP_Error FAXPP_init_tokenize(FAXPP_Tokenizer *tokenizer, void *buffer,
- unsigned int length, unsigned int done,
- FAXPP_EncodeFunction encode);
+ unsigned int length, unsigned int done);
/**
* Instructs the tokenizer to release any dependencies it has on it's current buffer.
Modified: trunk/faxpp/src/attr_states.h
===================================================================
--- trunk/faxpp/src/attr_states.h 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/attr_states.h 2007-08-19 22:55:48 UTC (rev 19)
@@ -280,8 +280,14 @@
case '<':
next_char(env);
return INVALID_CHAR_IN_ATTRIBUTE;
- WHITESPACE:
- env->current_char = ' ';
+ LINE_ENDINGS
+ case '\t':
+ if(env->normalize_attrs) {
+ // Move the token to the buffer, to normalize it
+ FAXPP_Error err = FAXPP_tokenizer_release_buffer(env, 0);
+ if(err != NO_ERROR) return err;
+ env->current_char = ' ';
+ }
break;
default:
DEFAULT_CASE;
@@ -335,9 +341,16 @@
case '<':
next_char(env);
return INVALID_CHAR_IN_ATTRIBUTE;
- WHITESPACE:
- env->current_char = ' ';
+ LINE_ENDINGS
+ case '\t': {
+ if(env->normalize_attrs) {
+ // Move the token to the buffer, to normalize it
+ FAXPP_Error err = FAXPP_tokenizer_release_buffer(env, 0);
+ if(err != NO_ERROR) return err;
+ env->current_char = ' ';
+ }
break;
+ }
default:
DEFAULT_CASE;
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-19 22:55:48 UTC (rev 19)
@@ -276,12 +276,7 @@
#define next_char(env) \
{ \
if((env)->token_buffer.cursor) { \
- FAXPP_Error err; \
- if((env)->encode) { \
- err = FAXPP_buffer_append_ch(&(env)->token_buffer, (env)->encode, (env)->current_char); \
- } else { \
- err = FAXPP_buffer_append(&(env)->token_buffer, (env)->position, (env)->char_len); \
- } \
+ FAXPP_Error err = FAXPP_buffer_append_ch(&(env)->token_buffer, (env)->encode, (env)->current_char); \
if(err != 0) return err; \
} \
\
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/xml_parser.c 2007-08-19 22:55:48 UTC (rev 19)
@@ -32,7 +32,7 @@
#define INITIAL_EVENT_BUFFER_SIZE 256
#define INITIAL_STACK_BUFFER_SIZE 1024
-FAXPP_Error init_tokenizer_internal(FAXPP_TokenizerEnv *env);
+FAXPP_Error init_tokenizer_internal(FAXPP_TokenizerEnv *env, FAXPP_EncodeFunction encode);
void free_tokenizer_internal(FAXPP_TokenizerEnv *env);
static FAXPP_Error nc_next_event(FAXPP_ParserEnv *env);
@@ -48,21 +48,6 @@
FAXPP_ParserEnv *env = malloc(sizeof(FAXPP_ParserEnv));
memset(env, 0, sizeof(FAXPP_ParserEnv));
- env->encode = encode;
-
- switch(mode) {
- case NO_CHECKS_PARSE_MODE:
- env->main_next_event = nc_next_event;
- env->normalize_attrs = 0;
- break;
- case WELL_FORMED_PARSE_MODE:
- env->main_next_event = wf_next_event;
- env->normalize_attrs = 1;
- break;
- }
-
- env->next_event = env->main_next_event;
-
env->max_attr_count = INITIAL_ATTRS_SIZE;
env->attrs = (FAXPP_Attribute*)malloc(sizeof(FAXPP_Attribute) * INITIAL_ATTRS_SIZE);
if(!env->attrs) {
@@ -80,11 +65,24 @@
return 0;
}
- if(init_tokenizer_internal(&env->tenv) == OUT_OF_MEMORY) {
+ if(init_tokenizer_internal(&env->tenv, encode) == OUT_OF_MEMORY) {
FAXPP_free_parser(env);
return 0;
}
+ switch(mode) {
+ case NO_CHECKS_PARSE_MODE:
+ env->main_next_event = nc_next_event;
+ FAXPP_set_normalize_attrs(env, 0);
+ break;
+ case WELL_FORMED_PARSE_MODE:
+ env->main_next_event = wf_next_event;
+ FAXPP_set_normalize_attrs(env, 1);
+ break;
+ }
+
+ env->next_event = env->main_next_event;
+
return env;
}
@@ -142,12 +140,12 @@
void FAXPP_set_normalize_attrs(FAXPP_Parser *parser, unsigned int boolean)
{
- parser->normalize_attrs = boolean != 0;
+ parser->tenv.normalize_attrs = boolean != 0;
}
void FAXPP_set_encode(FAXPP_Parser *parser, FAXPP_EncodeFunction encode)
{
- parser->encode = encode;
+ parser->tenv.encode = encode;
}
@@ -188,7 +186,7 @@
env->read = 0;
env->read_user_data = 0;
- return FAXPP_init_tokenize(&env->tenv, buffer, length, done, env->encode);
+ return FAXPP_init_tokenize(&env->tenv, buffer, length, done);
}
static unsigned int p_file_read_callback(void *userData, void *buffer, unsigned int length)
@@ -211,7 +209,7 @@
unsigned int len = env->read(env->read_user_data, env->read_buffer, env->read_buffer_length);
- return FAXPP_init_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length, env->encode);
+ return FAXPP_init_tokenize(&env->tenv, env->read_buffer, len, /*done*/len != env->read_buffer_length);
}
FAXPP_Error FAXPP_next_event(FAXPP_Parser *env)
@@ -317,7 +315,7 @@
void *newPtr = (env)->event_buffer.cursor; \
FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (text)->ptr, (text)->len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->tenv.encode, 0); \
if(err != 0) return err; \
(text)->ptr = newPtr; \
} \
@@ -455,7 +453,7 @@
(text)->len = (o)->len; \
FAXPP_Error err = FAXPP_buffer_append(&(env)->stack_buffer, (o)->ptr, (o)->len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->stack_buffer, (env)->encode, 0); \
+ err = FAXPP_buffer_append_ch(&(env)->stack_buffer, (env)->tenv.encode, 0); \
if(err != 0) return err; \
/* } else { */ \
/* p_set_text_from_text((text), (o)); */ \
@@ -488,7 +486,7 @@
text->len = buffer->cursor - text->ptr;
if(env->null_terminate)
- return FAXPP_buffer_append_ch(buffer, env->encode, 0);
+ return FAXPP_buffer_append_ch(buffer, env->tenv.encode, 0);
return NO_ERROR;
}
@@ -503,7 +501,7 @@
(text)->ptr = (env)->event_buffer.cursor; \
FAXPP_Error err = FAXPP_buffer_append(&(env)->event_buffer, (env)->tenv.result_token.value.ptr, (env)->tenv.result_token.value.len); \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->tenv.encode, 0); \
if(err != 0) return err; \
} \
}
@@ -588,10 +586,10 @@
#define p_set_text_to_char(text, env, ch) \
{ \
(text)->ptr = (env)->event_buffer.cursor; \
- FAXPP_Error err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, (ch)); \
+ FAXPP_Error err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->tenv.encode, (ch)); \
(text)->len = (env)->event_buffer.cursor - (text)->ptr; \
if((env)->null_terminate && err == 0) \
- err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->encode, 0); \
+ err = FAXPP_buffer_append_ch(&(env)->event_buffer, (env)->tenv.encode, 0); \
if(err != 0) return err; \
}
@@ -736,19 +734,19 @@
if(env->event.encoding.ptr == 0) {
env->next_event = env->main_next_event;
}
- else if(p_case_insensitive_equals("UTF-8", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("UTF-8", env->tenv.encode, &env->event.encoding)) {
env->next_event = env->main_next_event;
if(env->tenv.decode != FAXPP_utf8_decode)
return BAD_ENCODING;
}
- else if(p_case_insensitive_equals("UTF-16", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("UTF-16", env->tenv.encode, &env->event.encoding)) {
env->next_event = env->main_next_event;
if(env->tenv.decode != FAXPP_utf16_le_decode &&
env->tenv.decode != FAXPP_utf16_be_decode &&
env->tenv.decode != FAXPP_utf16_native_decode)
return BAD_ENCODING;
}
- else if(p_case_insensitive_equals("UTF-16LE", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("UTF-16LE", env->tenv.encode, &env->event.encoding)) {
env->next_event = env->main_next_event;
if(env->tenv.decode != FAXPP_utf16_le_decode
#ifndef WORDS_BIGENDIAN
@@ -757,7 +755,7 @@
)
return BAD_ENCODING;
}
- else if(p_case_insensitive_equals("UTF-16BE", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("UTF-16BE", env->tenv.encode, &env->event.encoding)) {
env->next_event = env->main_next_event;
if(env->tenv.decode != FAXPP_utf16_be_decode
#ifdef WORDS_BIGENDIAN
@@ -766,14 +764,14 @@
)
return BAD_ENCODING;
}
- else if(p_case_insensitive_equals("ISO-10646-UCS-4", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("ISO-10646-UCS-4", env->tenv.encode, &env->event.encoding)) {
env->next_event = env->main_next_event;
if(env->tenv.decode != FAXPP_ucs4_le_decode &&
env->tenv.decode != FAXPP_ucs4_be_decode &&
env->tenv.decode != FAXPP_ucs4_native_decode)
return BAD_ENCODING;
}
- else if(p_case_insensitive_equals("ISO-8859-1", env->encode, &env->event.encoding)) {
+ else if(p_case_insensitive_equals("ISO-8859-1", env->tenv.encode, &env->event.encoding)) {
FAXPP_set_decode(env, FAXPP_iso_8859_1_decode);
}
@@ -1231,11 +1229,11 @@
}
attrVal->value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, ch);
attrVal->value.len = env->event_buffer.cursor - attrVal->value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, 0);
if(err != 0) return err;
break;
case HEX_CHAR_REFERENCE_EVENT:
@@ -1247,11 +1245,11 @@
}
attrVal->value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, ch);
attrVal->value.len = env->event_buffer.cursor - attrVal->value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, 0);
if(err != 0) return err;
break;
default: break;
@@ -1259,7 +1257,7 @@
}
/* Normalize the attribute values if required */
- if(env->normalize_attrs && attr->value.next != 0) {
+ if(env->tenv.normalize_attrs && attr->value.next != 0) {
err = p_normalize_attr_value(&tmpText, &env->event_buffer, &attr->value, env);
if(err != 0) return err;
@@ -1367,11 +1365,11 @@
}
env->event.value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, ch);
env->event.value.len = env->event_buffer.cursor - env->event.value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, 0);
if(err != 0) return err;
break;
@@ -1384,11 +1382,11 @@
}
env->event.value.ptr = env->event_buffer.cursor;
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, ch);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, ch);
env->event.value.len = env->event_buffer.cursor - env->event.value.ptr;
if(env->null_terminate && err == 0)
- err = FAXPP_buffer_append_ch(&env->event_buffer, env->encode, 0);
+ err = FAXPP_buffer_append_ch(&env->event_buffer, env->tenv.encode, 0);
if(err != 0) return err;
break;
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/xml_parser.h 2007-08-19 22:55:48 UTC (rev 19)
@@ -55,8 +55,6 @@
FAXPP_NextEvent next_event;
FAXPP_NextEvent main_next_event;
- FAXPP_EncodeFunction encode;
-
FAXPP_ReadCallback read;
void *read_user_data;
@@ -65,7 +63,6 @@
FAXPP_TokenizerEnv tenv;
unsigned int null_terminate:1;
- unsigned int normalize_attrs:1;
unsigned int err_line;
unsigned int err_column;
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-08-19 22:55:48 UTC (rev 19)
@@ -285,7 +285,7 @@
tokenizer->decode = FAXPP_utf16_native_decode;
if(tokenizer->encode == FAXPP_utf16_native_encode)
- tokenizer->encode = 0;
+ tokenizer->do_encode = 0;
tokenizer->start_element_name_state = utf16_start_element_name_state;
tokenizer->element_content_state = utf16_element_content_state;
@@ -294,7 +294,7 @@
tokenizer->decode = FAXPP_utf8_decode;
if(tokenizer->encode == FAXPP_utf8_encode)
- tokenizer->encode = 0;
+ tokenizer->do_encode = 0;
tokenizer->start_element_name_state = utf8_start_element_name_state;
tokenizer->element_content_state = utf8_element_content_state;
@@ -330,9 +330,10 @@
}
FAXPP_Error
-init_tokenizer_internal(FAXPP_TokenizerEnv *env)
+init_tokenizer_internal(FAXPP_TokenizerEnv *env, FAXPP_EncodeFunction encode)
{
memset(env, 0, sizeof(FAXPP_TokenizerEnv));
+ env->encode = encode;
return FAXPP_init_buffer(&env->token_buffer, INITIAL_TOKEN_BUFFER_SIZE, change_token_buffer, env);
}
@@ -343,12 +344,12 @@
}
FAXPP_Tokenizer *
-FAXPP_create_tokenizer()
+FAXPP_create_tokenizer(FAXPP_EncodeFunction encode)
{
FAXPP_TokenizerEnv *result = malloc(sizeof(FAXPP_TokenizerEnv));
if(result == 0) return 0;
- if(init_tokenizer_internal(result) == OUT_OF_MEMORY) {
+ if(init_tokenizer_internal(result, encode) == OUT_OF_MEMORY) {
free(result);
return 0;
}
@@ -364,7 +365,7 @@
}
FAXPP_Error
-FAXPP_init_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length, unsigned int done, FAXPP_EncodeFunction encode)
+FAXPP_init_tokenize(FAXPP_Tokenizer *env, void *buffer, unsigned int length, unsigned int done)
{
env->buffer = buffer;
env->buffer_end = buffer + length;
@@ -377,11 +378,11 @@
env->column = 0;
env->nesting_level = 0;
+ env->do_encode = 1;
env->seen_doc_element = 0;
env->buffer_done = done;
env->decode = 0;
- env->encode = encode;
env->token_buffer.cursor = 0;
Modified: trunk/faxpp/src/xml_tokenizer.h
===================================================================
--- trunk/faxpp/src/xml_tokenizer.h 2007-08-15 00:33:19 UTC (rev 18)
+++ trunk/faxpp/src/xml_tokenizer.h 2007-08-19 22:55:48 UTC (rev 19)
@@ -42,8 +42,10 @@
unsigned int column;
unsigned int nesting_level;
+ unsigned int do_encode:1;
unsigned int seen_doc_element:1;
unsigned int buffer_done:1;
+ unsigned int normalize_attrs:1;
FAXPP_DecodeFunction decode;
FAXPP_EncodeFunction encode;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-08-19 23:51:39
|
Revision: 21
http://faxpp.svn.sourceforge.net/faxpp/?rev=21&view=rev
Author: jpcs
Date: 2007-08-19 16:51:41 -0700 (Sun, 19 Aug 2007)
Log Message:
-----------
Added a change log.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/aclocal.m4
trunk/faxpp/configure
trunk/faxpp/include/Makefile.in
Added Paths:
-----------
trunk/faxpp/ChangeLog
Added: trunk/faxpp/ChangeLog
===================================================================
--- trunk/faxpp/ChangeLog (rev 0)
+++ trunk/faxpp/ChangeLog 2007-08-19 23:51:41 UTC (rev 21)
@@ -0,0 +1,26 @@
+Faxpp: A small, fast XML pull parser written in C with an API that can
+return UTF-8 or UTF-16 strings.
+
+version 0.2 (2007.08.20):
+ * Implemented a test harness for the XML Conformance Test Suite
+ * Added support for streaming input to the tokenizer and parser,
+ without the need for a callback function.
+ * Implemented an encoding framework to allow the user to specify
+ implementation defined encodings based on a document's
+ declared encoding.
+ * Added built-in decoding support for ISO-8859-1 (Latin1).
+ * Implemented attribute value normalization, adding a parser
+ option to enable/disable it.
+ * Recognize built in entity references - raise an error
+ for any unknown entity.
+ * Implemented the XML 1.0 char classes as well as the XML 1.1
+ ones, and switched between them depending on the XML version
+ declaration.
+ * Added tokens for the end of the XML declaration, and the built
+ in entity references.
+ * Check for restricted characters anywhere in the document.
+ * Check for illegal "]]>" in element content.
+ * Require whitespace between attributes.
+ * Fix handling of namespace 1.1 prefix undefines.
+ * Fixed a bug in entity output in the examples.
+ * Added a todo list.
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-08-19 23:48:57 UTC (rev 20)
+++ trunk/faxpp/Makefile.am 2007-08-19 23:51:41 UTC (rev 21)
@@ -47,7 +47,8 @@
docs/header.html \
docs/api \
LICENSE \
-TODO
+TODO \
+ChangeLog
.PHONY: docs
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-08-19 23:48:57 UTC (rev 20)
+++ trunk/faxpp/Makefile.in 2007-08-19 23:51:41 UTC (rev 21)
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# Makefile.in generated by automake 1.10 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005 Free Software Foundation, Inc.
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -15,15 +15,11 @@
@SET_MAKE@
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
@@ -39,18 +35,18 @@
host_triplet = @host@
noinst_PROGRAMS = tokenizer_example$(EXEEXT) parser_example$(EXEEXT) \
xmlconf_runner$(EXEEXT)
+subdir = .
DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \
$(srcdir)/Makefile.in $(top_srcdir)/configure \
- $(top_srcdir)/src/config.h.in TODO autotools/config.guess \
- autotools/config.sub autotools/depcomp autotools/install-sh \
- autotools/ltmain.sh autotools/missing
-subdir = .
+ $(top_srcdir)/src/config.h.in ChangeLog TODO \
+ autotools/config.guess autotools/config.sub autotools/depcomp \
+ autotools/install-sh autotools/ltmain.sh autotools/missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.in
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
+ configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/src/config.h
CONFIG_CLEAN_FILES =
@@ -69,6 +65,9 @@
tokenizer_states.lo transcode.lo xmldecl.lo xml_parser.lo \
xml_tokenizer.lo
libfaxpp_la_OBJECTS = $(am_libfaxpp_la_OBJECTS)
+libfaxpp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(libfaxpp_la_LDFLAGS) $(LDFLAGS) -o $@
PROGRAMS = $(noinst_PROGRAMS)
am_parser_example_OBJECTS = parser_example.$(OBJEXT)
parser_example_OBJECTS = $(am_parser_example_OBJECTS)
@@ -79,27 +78,31 @@
am_xmlconf_runner_OBJECTS = xmlconf_runner.$(OBJEXT)
xmlconf_runner_OBJECTS = $(am_xmlconf_runner_OBJECTS)
xmlconf_runner_DEPENDENCIES = libfaxpp.la
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/src
+DEFAULT_INCLUDES = -I. -I$(top_builddir)/src@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/autotools/depcomp
am__depfiles_maybe = depfiles
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+ $(LDFLAGS) -o $@
SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
$(tokenizer_example_SOURCES) $(xmlconf_runner_SOURCES)
DIST_SOURCES = $(libfaxpp_la_SOURCES) $(parser_example_SOURCES) \
$(tokenizer_example_SOURCES) $(xmlconf_runner_SOURCES)
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
- install-exec-recursive install-info-recursive \
- install-recursive installcheck-recursive installdirs-recursive \
- pdf-recursive ps-recursive uninstall-info-recursive \
- uninstall-recursive
+ install-dvi-recursive install-exec-recursive \
+ install-html-recursive install-info-recursive \
+ install-pdf-recursive install-ps-recursive install-recursive \
+ installcheck-recursive installdirs-recursive pdf-recursive \
+ ps-recursive uninstall-recursive
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
@@ -115,8 +118,6 @@
distuninstallcheck_listfiles = find . -type f -print
distcleancheck_listfiles = find . -type f -print
ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
@@ -144,6 +145,7 @@
F77 = @F77@
FFLAGS = @FFLAGS@
GREP = @GREP@
+INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
@@ -155,6 +157,7 @@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
@@ -168,13 +171,13 @@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
@@ -186,6 +189,7 @@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
+builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
@@ -213,8 +217,11 @@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign dist-zip
SUBDIRS = include
INCLUDES = -I$(top_srcdir)/include/
@@ -257,7 +264,8 @@
docs/header.html \
docs/api \
LICENSE \
-TODO
+TODO \
+ChangeLog
all: all-recursive
@@ -300,7 +308,7 @@
src/config.h: src/stamp-h1
@if test ! -f $@; then \
rm -f src/stamp-h1; \
- $(MAKE) src/stamp-h1; \
+ $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; \
else :; fi
src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status
@@ -315,7 +323,7 @@
-rm -f src/config.h src/stamp-h1
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
- test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
f=$(am__strip_dir) \
@@ -326,7 +334,7 @@
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
- @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
p=$(am__strip_dir) \
echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
$(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
@@ -341,7 +349,7 @@
rm -f "$${dir}/so_locations"; \
done
libfaxpp.la: $(libfaxpp_la_OBJECTS) $(libfaxpp_la_DEPENDENCIES)
- $(LINK) -rpath $(libdir) $(libfaxpp_la_LDFLAGS) $(libfaxpp_la_OBJECTS) $(libfaxpp_la_LIBADD) $(LIBS)
+ $(libfaxpp_la_LINK) -rpath $(libdir) $(libfaxpp_la_OBJECTS) $(libfaxpp_la_LIBADD) $(LIBS)
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
@@ -351,13 +359,13 @@
done
parser_example$(EXEEXT): $(parser_example_OBJECTS) $(parser_example_DEPENDENCIES)
@rm -f parser_example$(EXEEXT)
- $(LINK) $(parser_example_LDFLAGS) $(parser_example_OBJECTS) $(parser_example_LDADD) $(LIBS)
+ $(LINK) $(parser_example_OBJECTS) $(parser_example_LDADD) $(LIBS)
tokenizer_example$(EXEEXT): $(tokenizer_example_OBJECTS) $(tokenizer_example_DEPENDENCIES)
@rm -f tokenizer_example$(EXEEXT)
- $(LINK) $(tokenizer_example_LDFLAGS) $(tokenizer_example_OBJECTS) $(tokenizer_example_LDADD) $(LIBS)
+ $(LINK) $(tokenizer_example_OBJECTS) $(tokenizer_example_LDADD) $(LIBS)
xmlconf_runner$(EXEEXT): $(xmlconf_runner_OBJECTS) $(xmlconf_runner_DEPENDENCIES)
@rm -f xmlconf_runner$(EXEEXT)
- $(LINK) $(xmlconf_runner_LDFLAGS) $(xmlconf_runner_OBJECTS) $(xmlconf_runner_LDADD) $(LIBS)
+ $(LINK) $(xmlconf_runner_OBJECTS) $(xmlconf_runner_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -385,169 +393,169 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldecl.Plo@am__quote@
.c.o:
-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
-@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
-@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
buffer.lo: src/buffer.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.lo -MD -MP -MF "$(DEPDIR)/buffer.Tpo" -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/buffer.Tpo" "$(DEPDIR)/buffer.Plo"; else rm -f "$(DEPDIR)/buffer.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT buffer.lo -MD -MP -MF $(DEPDIR)/buffer.Tpo -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/buffer.Tpo $(DEPDIR)/buffer.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/buffer.c' object='buffer.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c
cdata.lo: src/cdata.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdata.lo -MD -MP -MF "$(DEPDIR)/cdata.Tpo" -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/cdata.Tpo" "$(DEPDIR)/cdata.Plo"; else rm -f "$(DEPDIR)/cdata.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cdata.lo -MD -MP -MF $(DEPDIR)/cdata.Tpo -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/cdata.Tpo $(DEPDIR)/cdata.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/cdata.c' object='cdata.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cdata.lo `test -f 'src/cdata.c' || echo '$(srcdir)/'`src/cdata.c
char_classes.lo: src/char_classes.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT char_classes.lo -MD -MP -MF "$(DEPDIR)/char_classes.Tpo" -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/char_classes.Tpo" "$(DEPDIR)/char_classes.Plo"; else rm -f "$(DEPDIR)/char_classes.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT char_classes.lo -MD -MP -MF $(DEPDIR)/char_classes.Tpo -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/char_classes.Tpo $(DEPDIR)/char_classes.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/char_classes.c' object='char_classes.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o char_classes.lo `test -f 'src/char_classes.c' || echo '$(srcdir)/'`src/char_classes.c
comment.lo: src/comment.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT comment.lo -MD -MP -MF "$(DEPDIR)/comment.Tpo" -c -o comment.lo `test -f 'src/comment.c' || echo '$(srcdir)/'`src/comment.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/comment.Tpo" "$(DEPDIR)/comment.Plo"; else rm -f "$(DEPDIR)/comment.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT comment.lo -MD -MP -MF $(DEPDIR)/comment.Tpo -c -o comment.lo `test -f 'src/comment.c' || echo '$(srcdir)/'`src/comment.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/comment.Tpo $(DEPDIR)/comment.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/comment.c' object='comment.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o comment.lo `test -f 'src/comment.c' || echo '$(srcdir)/'`src/comment.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o comment.lo `test -f 'src/comment.c' || echo '$(srcdir)/'`src/comment.c
element.lo: src/element.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT element.lo -MD -MP -MF "$(DEPDIR)/element.Tpo" -c -o element.lo `test -f 'src/element.c' || echo '$(srcdir)/'`src/element.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/element.Tpo" "$(DEPDIR)/element.Plo"; else rm -f "$(DEPDIR)/element.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT element.lo -MD -MP -MF $(DEPDIR)/element.Tpo -c -o element.lo `test -f 'src/element.c' || echo '$(srcdir)/'`src/element.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/element.Tpo $(DEPDIR)/element.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/element.c' object='element.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o element.lo `test -f 'src/element.c' || echo '$(srcdir)/'`src/element.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o element.lo `test -f 'src/element.c' || echo '$(srcdir)/'`src/element.c
error.lo: src/error.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.lo -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Plo"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.lo -MD -MP -MF $(DEPDIR)/error.Tpo -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/error.Tpo $(DEPDIR)/error.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/error.c' object='error.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.lo `test -f 'src/error.c' || echo '$(srcdir)/'`src/error.c
event.lo: src/event.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF "$(DEPDIR)/event.Tpo" -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/event.Tpo" "$(DEPDIR)/event.Plo"; else rm -f "$(DEPDIR)/event.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT event.lo -MD -MP -MF $(DEPDIR)/event.Tpo -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/event.Tpo $(DEPDIR)/event.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/event.c' object='event.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o event.lo `test -f 'src/event.c' || echo '$(srcdir)/'`src/event.c
pi.lo: src/pi.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pi.lo -MD -MP -MF "$(DEPDIR)/pi.Tpo" -c -o pi.lo `test -f 'src/pi.c' || echo '$(srcdir)/'`src/pi.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pi.Tpo" "$(DEPDIR)/pi.Plo"; else rm -f "$(DEPDIR)/pi.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT pi.lo -MD -MP -MF $(DEPDIR)/pi.Tpo -c -o pi.lo `test -f 'src/pi.c' || echo '$(srcdir)/'`src/pi.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/pi.Tpo $(DEPDIR)/pi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/pi.c' object='pi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pi.lo `test -f 'src/pi.c' || echo '$(srcdir)/'`src/pi.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o pi.lo `test -f 'src/pi.c' || echo '$(srcdir)/'`src/pi.c
reference.lo: src/reference.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reference.lo -MD -MP -MF "$(DEPDIR)/reference.Tpo" -c -o reference.lo `test -f 'src/reference.c' || echo '$(srcdir)/'`src/reference.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reference.Tpo" "$(DEPDIR)/reference.Plo"; else rm -f "$(DEPDIR)/reference.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT reference.lo -MD -MP -MF $(DEPDIR)/reference.Tpo -c -o reference.lo `test -f 'src/reference.c' || echo '$(srcdir)/'`src/reference.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/reference.Tpo $(DEPDIR)/reference.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/reference.c' object='reference.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reference.lo `test -f 'src/reference.c' || echo '$(srcdir)/'`src/reference.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o reference.lo `test -f 'src/reference.c' || echo '$(srcdir)/'`src/reference.c
token.lo: src/token.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.lo -MD -MP -MF "$(DEPDIR)/token.Tpo" -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/token.Tpo" "$(DEPDIR)/token.Plo"; else rm -f "$(DEPDIR)/token.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT token.lo -MD -MP -MF $(DEPDIR)/token.Tpo -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/token.Tpo $(DEPDIR)/token.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/token.c' object='token.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o token.lo `test -f 'src/token.c' || echo '$(srcdir)/'`src/token.c
tokenizer_states.lo: src/tokenizer_states.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_states.lo -MD -MP -MF "$(DEPDIR)/tokenizer_states.Tpo" -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_states.Tpo" "$(DEPDIR)/tokenizer_states.Plo"; else rm -f "$(DEPDIR)/tokenizer_states.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_states.lo -MD -MP -MF $(DEPDIR)/tokenizer_states.Tpo -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/tokenizer_states.Tpo $(DEPDIR)/tokenizer_states.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/tokenizer_states.c' object='tokenizer_states.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_states.lo `test -f 'src/tokenizer_states.c' || echo '$(srcdir)/'`src/tokenizer_states.c
transcode.lo: src/transcode.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT transcode.lo -MD -MP -MF "$(DEPDIR)/transcode.Tpo" -c -o transcode.lo `test -f 'src/transcode.c' || echo '$(srcdir)/'`src/transcode.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/transcode.Tpo" "$(DEPDIR)/transcode.Plo"; else rm -f "$(DEPDIR)/transcode.Tpo"; exit 1; fi
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(L...
[truncated message content] |
|
From: <jp...@us...> - 2007-08-20 22:46:45
|
Revision: 23
http://faxpp.svn.sourceforge.net/faxpp/?rev=23&view=rev
Author: jpcs
Date: 2007-08-20 15:46:46 -0700 (Mon, 20 Aug 2007)
Log Message:
-----------
Fixed a bug that was causing all strings to be copied.
Tweaked the UTF-8 tokenizer states so that Latin1 could also use them.
Fixed column counting, and line counting for "\r\n" at a buffer
boundary.
Modified Paths:
--------------
trunk/faxpp/configure
trunk/faxpp/configure.in
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_tokenizer.c
Modified: trunk/faxpp/configure
===================================================================
--- trunk/faxpp/configure 2007-08-20 00:17:50 UTC (rev 22)
+++ trunk/faxpp/configure 2007-08-20 22:46:46 UTC (rev 23)
@@ -20600,7 +20600,97 @@
+{ echo "$as_me:$LINENO: checking for working memcmp" >&5
+echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6; }
+if test "${ac_cv_func_memcmp_working+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_func_memcmp_working=no
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+ /* Some versions of memcmp are not 8-bit clean. */
+ char c0 = '\100', c1 = '\200', c2 = '\201';
+ if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0)
+ return 1;
+
+ /* The Next x86 OpenStep bug shows up only when comparing 16 bytes
+ or more and with at least one buffer not starting on a 4-byte boundary.
+ William Lewis provided this test program. */
+ {
+ char foo[21];
+ char bar[21];
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ char *a = foo + i;
+ char *b = bar + i;
+ strcpy (a, "--------01111111");
+ strcpy (b, "--------10000000");
+ if (memcmp (a, b, 16) >= 0)
+ return 1;
+ }
+ return 0;
+ }
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_func_memcmp_working=yes
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_memcmp_working=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5
+echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6; }
+test $ac_cv_func_memcmp_working = no && case " $LIBOBJS " in
+ *" memcmp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS memcmp.$ac_objext"
+ ;;
+esac
+
+
+
for ac_header in stdlib.h
do
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
Modified: trunk/faxpp/configure.in
===================================================================
--- trunk/faxpp/configure.in 2007-08-20 00:17:50 UTC (rev 22)
+++ trunk/faxpp/configure.in 2007-08-20 22:46:46 UTC (rev 23)
@@ -62,6 +62,7 @@
# Checks for library functions.
AC_FUNC_MALLOC
+AC_FUNC_MEMCMP
AC_FUNC_REALLOC
AC_CHECK_FUNCS([gettimeofday memmove memset strerror])
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-08-20 00:17:50 UTC (rev 22)
+++ trunk/faxpp/src/tokenizer_states.c 2007-08-20 22:46:46 UTC (rev 23)
@@ -655,7 +655,7 @@
/* Check if it really was a one byte char */ \
if(env->current_char >= 0x80) { \
/* Decode properly */ \
- env->char_len = FAXPP_utf8_decode(env->position, env->buffer_end, &env->current_char); \
+ env->char_len = (env)->decode(env->position, env->buffer_end, &env->current_char); \
switch((env)->char_len) { \
case TRANSCODE_PREMATURE_END_OF_BUFFER: \
return PREMATURE_END_OF_BUFFER; \
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-08-20 00:17:50 UTC (rev 22)
+++ trunk/faxpp/src/tokenizer_states.h 2007-08-20 22:46:46 UTC (rev 23)
@@ -280,12 +280,13 @@
if(err != 0) return err; \
} \
\
+ (env)->column += 1; \
(env)->position += (env)->char_len; \
}
#define token_start_position(env) \
{ \
- if((env)->encode) { \
+ if((env)->do_encode) { \
FAXPP_reset_buffer(&(env)->token_buffer); \
(env)->token.value.ptr = (env)->token_buffer.cursor; \
} else { \
@@ -353,25 +354,28 @@
}
#define LINE_ENDINGS \
- case '\n': \
case '\r': { \
Char32 next_char; \
- if((env)->current_char == '\r' && \
- (env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \
- != TRANSCODE_PREMATURE_END_OF_BUFFER && next_char == '\n') { \
- (env)->column += 1; \
- } else { \
- (env)->line += 1; \
- (env)->column = 0; \
+ if((env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \
+ == TRANSCODE_PREMATURE_END_OF_BUFFER) { \
+ if(!(env)->buffer_done) return PREMATURE_END_OF_BUFFER; \
+ goto LINE_ENDINGS_INC; \
} \
- }
+ else if(next_char != '\n') goto LINE_ENDINGS_INC; \
+ goto LINE_ENDINGS_END; \
+ } \
+ case '\n': \
+LINE_ENDINGS_INC: \
+ (env)->line += 1; \
+ (env)->column = (unsigned int)-1; \
+LINE_ENDINGS_END:
/*
* [3] S ::= (#x20 | #x9 | #xD | #xA)+
*/
#define WHITESPACE \
LINE_ENDINGS \
- case '\t':\
+ case '\t': \
case ' '
#endif
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-08-20 00:17:50 UTC (rev 22)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-08-20 22:46:46 UTC (rev 23)
@@ -275,6 +275,8 @@
void
FAXPP_set_tokenizer_decode(FAXPP_Tokenizer *tokenizer, FAXPP_DecodeFunction decode)
{
+ tokenizer->do_encode = 1;
+
if(decode == FAXPP_utf16_native_decode ||
#ifdef WORDS_BIGENDIAN
decode == FAXPP_utf16_be_decode
@@ -299,6 +301,13 @@
tokenizer->start_element_name_state = utf8_start_element_name_state;
tokenizer->element_content_state = utf8_element_content_state;
}
+ else if(decode == FAXPP_iso_8859_1_decode) {
+ tokenizer->decode = FAXPP_iso_8859_1_decode;
+
+ // Latin1 can use the UTF-8 states, since the first 128 values are the same as UTF-8
+ tokenizer->start_element_name_state = utf8_start_element_name_state;
+ tokenizer->element_content_state = utf8_element_content_state;
+ }
else if(decode == FAXPP_ucs4_native_decode ||
#ifdef WORDS_BIGENDIAN
decode == FAXPP_ucs4_be_decode
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-08-31 00:29:19
|
Revision: 29
http://faxpp.svn.sourceforge.net/faxpp/?rev=29&view=rev
Author: jpcs
Date: 2007-08-30 17:29:09 -0700 (Thu, 30 Aug 2007)
Log Message:
-----------
Moved the element_content_states to be generated by macro substitution,
rather than special casing them.
Some minor optimisations to other high-use states.
Modified Paths:
--------------
trunk/faxpp/include/Makefile.in
trunk/faxpp/src/element.c
trunk/faxpp/src/element_states.h
Modified: trunk/faxpp/include/Makefile.in
===================================================================
--- trunk/faxpp/include/Makefile.in 2007-08-23 00:43:47 UTC (rev 28)
+++ trunk/faxpp/include/Makefile.in 2007-08-31 00:29:09 UTC (rev 29)
@@ -182,9 +182,9 @@
exit 1;; \
esac; \
done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
cd $(top_srcdir) && \
- $(AUTOMAKE) --gnu include/Makefile
+ $(AUTOMAKE) --foreign include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
Modified: trunk/faxpp/src/element.c
===================================================================
--- trunk/faxpp/src/element.c 2007-08-23 00:43:47 UTC (rev 28)
+++ trunk/faxpp/src/element.c 2007-08-31 00:29:09 UTC (rev 29)
@@ -17,8 +17,6 @@
#include "tokenizer_states.h"
#include "char_classes.h"
-extern uint8_t FAXPP_utf_8_bytes[256];
-
FAXPP_Error
start_element_end_state(FAXPP_TokenizerEnv *env)
{
@@ -51,218 +49,6 @@
}
FAXPP_Error
-default_element_content_state(FAXPP_TokenizerEnv *env)
-{
- while(1) {
- if(env->position >= env->buffer_end) {
- if(env->token.value.ptr) {
- token_end_position(env);
- if(env->token.value.len != 0) {
- report_token(CHARACTERS_TOKEN, env);
- return NO_ERROR;
- }
- }
- token_start_position(env);
- return PREMATURE_END_OF_BUFFER;
- }
-
- read_char_no_check(env);
-
- switch(env->current_char) {
- case '<':
- env->state = default_element_content_markup_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- return NO_ERROR;
- case '&':
- store_state(env);
- env->state = reference_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
- case ']':
- env->state = default_element_content_rsquare_state1;
- next_char(env);
- return NO_ERROR;
- LINE_ENDINGS
- break;
- default:
- if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
- next_char(env);
- return RESTRICTED_CHAR;
- }
- break;
- }
-
- next_char(env);
- }
-
- // Never happens
- return NO_ERROR;
-}
-
-FAXPP_Error
-utf8_element_content_state(FAXPP_TokenizerEnv *env)
-{
- while(1) {
- if(env->position >= env->buffer_end) {
- if(env->token.value.ptr) {
- token_end_position(env);
- if(env->token.value.len != 0) {
- report_token(CHARACTERS_TOKEN, env);
- return NO_ERROR;
- }
- }
- token_start_position(env);
- return PREMATURE_END_OF_BUFFER;
- }
-
- // Assume it's a one byte character for now
- env->current_char = *(uint8_t*)env->position;
- env->char_len = 1;
-
- switch(env->current_char) {
- case '<':
- env->state = utf8_element_content_markup_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- return NO_ERROR;
- case '&':
- store_state(env);
- env->state = reference_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
- case ']':
- env->state = utf8_element_content_rsquare_state1;
- next_char(env);
- return NO_ERROR;
- LINE_ENDINGS
- break;
-
- // 0x0A, 0x0D, 0x26, 0x3C, 0x5D - Done above
-
- case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
- case 0x08: case 0x0B: case 0x0C: case 0x0E: case 0x0F:
- case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
- case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x1F:
- case 0x7F:
- next_char(env);
- return RESTRICTED_CHAR;
- case 0x09:
- case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x27:
- case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F:
- case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:
- case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3D: case 0x3E: case 0x3F:
- case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
- case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F:
- case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
- case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5C: case 0x5E: case 0x5F:
- case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67:
- case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F:
- case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
- case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E:
- // The char is a valid one byte char
- break;
-
- default:
- // Decode properly
- env->char_len = env->decode(env->position, env->buffer_end, &env->current_char);
- switch((env)->char_len) {
- case TRANSCODE_PREMATURE_END_OF_BUFFER:
- return PREMATURE_END_OF_BUFFER;
- case TRANSCODE_BAD_ENCODING:
- return BAD_ENCODING;
- }
-
- if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
- next_char(env);
- return RESTRICTED_CHAR;
- }
- break;
- }
-
- next_char(env);
- }
-
- return NO_ERROR;
-}
-
-FAXPP_Error
-utf16_element_content_state(FAXPP_TokenizerEnv *env)
-{
- while(1) {
- if(env->position + 1 >= env->buffer_end) {
- if(env->token.value.ptr) {
- token_end_position(env);
- if(env->token.value.len != 0) {
- report_token(CHARACTERS_TOKEN, env);
- return NO_ERROR;
- }
- }
- token_start_position(env);
- return PREMATURE_END_OF_BUFFER;
- }
-
- // Assume it's not a surrogate pair for now
- env->current_char = *(uint16_t*)env->position;
- env->char_len = 1 * sizeof(uint16_t);
-
- switch(env->current_char) {
- case '<':
- env->state = utf16_element_content_markup_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- return NO_ERROR;
- case '&':
- store_state(env);
- env->state = reference_state;
- token_end_position(env);
- report_token(CHARACTERS_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
- case ']':
- env->state = utf16_element_content_rsquare_state1;
- next_char(env);
- return NO_ERROR;
- LINE_ENDINGS
- break;
- default:
- // Check if it was actually a surrogate pair
- if(env->current_char >= 0xD800 && env->current_char <= 0xDF00) {
- // Decode properly
- env->char_len = FAXPP_utf16_native_decode(env->position, env->buffer_end, &env->current_char);
- switch((env)->char_len) {
- case TRANSCODE_PREMATURE_END_OF_BUFFER:
- return PREMATURE_END_OF_BUFFER;
- case TRANSCODE_BAD_ENCODING:
- return BAD_ENCODING;
- }
- }
-
- if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
- next_char(env);
- return RESTRICTED_CHAR;
- }
- break;
- }
-
- next_char(env);
- }
-
- // Never happens
- return NO_ERROR;
-}
-
-FAXPP_Error
end_element_ws_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
Modified: trunk/faxpp/src/element_states.h
===================================================================
--- trunk/faxpp/src/element_states.h 2007-08-23 00:43:47 UTC (rev 28)
+++ trunk/faxpp/src/element_states.h 2007-08-31 00:29:09 UTC (rev 29)
@@ -29,18 +29,19 @@
env->state = PREFIX(start_element_ws_state);
token_end_position(env);
report_token(START_ELEMENT_NAME_TOKEN, env);
+ next_char_no_error:
next_char(env);
return NO_ERROR;
case '/':
env->state = self_closing_element_state;
token_end_position(env);
report_token(START_ELEMENT_NAME_TOKEN, env);
- next_char(env);
- return NO_ERROR;
+ goto next_char_no_error;
case '>':
env->state = start_element_end_state;
token_end_position(env);
report_token(START_ELEMENT_NAME_TOKEN, env);
+ next_char_tok_start_no_error:
next_char(env);
token_start_position(env);
return NO_ERROR;
@@ -48,9 +49,7 @@
env->state = PREFIX(start_element_name_seen_colon_state);
token_end_position(env);
report_token(START_ELEMENT_PREFIX_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
+ goto next_char_tok_start_no_error;
default:
DEFAULT_CASE;
break;
@@ -97,14 +96,14 @@
env->state = PREFIX(start_element_ws_state);
token_end_position(env);
report_token(START_ELEMENT_NAME_TOKEN, env);
+ next_char_no_error:
next_char(env);
return NO_ERROR;
case '/':
env->state = self_closing_element_state;
token_end_position(env);
report_token(START_ELEMENT_NAME_TOKEN, env);
- next_char(env);
- return NO_ERROR;
+ goto next_char_no_error;
case '>':
env->state = start_element_end_state;
token_end_position(env);
@@ -164,7 +163,7 @@
next_char(env);
break;
case '>':
- env->state = env->element_content_state;
+ env->state = PREFIX(element_content_state);
env->nesting_level += 1;
report_empty_token(START_ELEMENT_END_TOKEN, env);
next_char(env);
@@ -189,6 +188,90 @@
}
FAXPP_Error
+PREFIX(element_content_state)(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ if(env->position >= env->buffer_end) {
+ if(env->token.value.ptr) {
+ token_end_position(env);
+ if(env->token.value.len != 0) {
+ report_token(CHARACTERS_TOKEN, env);
+ return NO_ERROR;
+ }
+ }
+ token_start_position(env);
+ return PREMATURE_END_OF_BUFFER;
+ }
+
+ READ_CHAR;
+
+ switch(env->current_char) {
+ case '<':
+ env->state = PREFIX(element_content_markup_state);
+ token_end_position(env);
+ report_token(CHARACTERS_TOKEN, env);
+ next_char_no_error:
+ next_char(env);
+ return NO_ERROR;
+ case '&':
+ store_state(env);
+ env->state = reference_state;
+ token_end_position(env);
+ report_token(CHARACTERS_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ case ']':
+ env->state = PREFIX(element_content_rsquare_state1);
+ goto next_char_no_error;
+ LINE_ENDINGS
+ break;
+
+ // 0x0A, 0x0D, 0x26, 0x3C, 0x5D - Done above
+
+ case 0x7F:
+ if(env->non_restricted_char == NON_RESTRICTED_CHAR11) {
+ case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07:
+ case 0x08: case 0x0B: case 0x0C: case 0x0E: case 0x0F:
+ case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
+ case 0x18: case 0x19: case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: case 0x1F:
+ restricted_char_error:
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ case 0x09:
+ case 0x20: case 0x21: case 0x22: case 0x23: case 0x24: case 0x25: case 0x27:
+ case 0x28: case 0x29: case 0x2A: case 0x2B: case 0x2C: case 0x2D: case 0x2E: case 0x2F:
+ case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37:
+ case 0x38: case 0x39: case 0x3A: case 0x3B: case 0x3D: case 0x3E: case 0x3F:
+ case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F:
+ case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5A: case 0x5B: case 0x5C: case 0x5E: case 0x5F:
+ case 0x60: case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F:
+ case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E:
+ // The char is a valid one byte char
+ break;
+
+ default:
+ DEFAULT_CASE;
+
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0)
+ goto restricted_char_error;
+ break;
+ }
+
+ next_char(env);
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
PREFIX(element_content_markup_state)(FAXPP_TokenizerEnv *env)
{
END_CHECK;
@@ -215,7 +298,7 @@
default:
DEFAULT_CASE;
- env->state = (env)->start_element_name_state;
+ env->state = PREFIX(start_element_name_state);
token_start_position(env);
next_char(env);
if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
@@ -324,6 +407,7 @@
base_state(env);
token_end_position(env);
report_token(END_ELEMENT_NAME_TOKEN, env);
+ next_char_tok_start_no_error:
next_char(env);
token_start_position(env);
return NO_ERROR;
@@ -331,20 +415,16 @@
env->state = PREFIX(end_element_name_seen_colon_state);
token_end_position(env);
report_token(END_ELEMENT_PREFIX_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
+ goto next_char_tok_start_no_error;
default:
DEFAULT_CASE;
break;
}
+ next_char(env);
if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0) {
- next_char(env);
return INVALID_CHAR_IN_ELEMENT_NAME;
}
-
- next_char(env);
}
// Never happens
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-09-21 11:43:50
|
Revision: 31
http://faxpp.svn.sourceforge.net/faxpp/?rev=31&view=rev
Author: jpcs
Date: 2007-09-21 04:42:51 -0700 (Fri, 21 Sep 2007)
Log Message:
-----------
Changed FAXPP_set_decode() so that if the user sets a decode function,
all other indications of encoding are ignored.
Added methods to return a decode or encode function, given a string
defining the encoding.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/parser.h
trunk/faxpp/include/faxpp/transcode.h
trunk/faxpp/src/transcode.c
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_parser.h
Modified: trunk/faxpp/include/faxpp/parser.h
===================================================================
--- trunk/faxpp/include/faxpp/parser.h 2007-09-06 00:58:58 UTC (rev 30)
+++ trunk/faxpp/include/faxpp/parser.h 2007-09-21 11:42:51 UTC (rev 31)
@@ -189,6 +189,11 @@
* Sets the FAXPP_DecodeFunction that the parser uses to decode the XML document.
* This will typically be called when an encoding declaration is read, to switch to
* the correct decode function.
+ *
+ * This method can also be called after initialising the parser, to specify that
+ * the encoding for the document is known, and all other encoding hints should be
+ * ignored. Note that it is valid to call this method and proceed with a document
+ * parse when parser initialisation fails with the UNSUPPORTED_ENCODING error.
*
* \param parser
* \param decode The decode function
Modified: trunk/faxpp/include/faxpp/transcode.h
===================================================================
--- trunk/faxpp/include/faxpp/transcode.h 2007-09-06 00:58:58 UTC (rev 30)
+++ trunk/faxpp/include/faxpp/transcode.h 2007-09-21 11:42:51 UTC (rev 31)
@@ -79,6 +79,22 @@
const char *FAXPP_encode_to_string(FAXPP_EncodeFunction t);
/**
+ * Returns a FAXPP_DecodeFunction for the given encoding string, or 0
+ * if one is not supported internally.
+ * \param encodingName The encoding to look up
+ * \return a FAXPP_DecodeFunction
+ */
+FAXPP_DecodeFunction FAXPP_string_to_decode(const char *encodingName);
+
+/**
+ * Returns a FAXPP_EncodeFunction for the given encoding string, or 0
+ * if one is not supported internally.
+ * \param encodingName The encoding to look up
+ * \return a FAXPP_EncodeFunction
+ */
+FAXPP_EncodeFunction FAXPP_string_to_encode(const char *encodingName);
+
+/**
* Decodes a single UTF-8 character from the buffer into it's unicode codepoint.
*
* \param buffer The buffer to decode from
Modified: trunk/faxpp/src/transcode.c
===================================================================
--- trunk/faxpp/src/transcode.c 2007-09-06 00:58:58 UTC (rev 30)
+++ trunk/faxpp/src/transcode.c 2007-09-21 11:42:51 UTC (rev 31)
@@ -16,7 +16,7 @@
#include <faxpp/transcode.h>
-const char *decode_to_string(FAXPP_DecodeFunction t)
+const char *FAXPP_decode_to_string(FAXPP_DecodeFunction t)
{
if(t == FAXPP_utf8_decode)
return "UTF-8";
@@ -37,7 +37,7 @@
return "Unknown";
}
-const char *encode_to_string(FAXPP_EncodeFunction t)
+const char *FAXPP_encode_to_string(FAXPP_EncodeFunction t)
{
if(t == FAXPP_utf8_encode)
return "UTF-8";
@@ -46,6 +46,74 @@
return "Unknown";
}
+// "str" should be upper case
+static int t_case_insensitive_equals(const char *str, const char *text)
+{
+ while(*str) {
+ if(*str != *text) {
+ // Try the lower case letter as well
+ return *str >= 'A' && *str <= 'Z' && ((*str) - 'A' + 'a') == *text;
+ }
+ ++str;
+ ++text;
+ }
+
+ return *text == 0;
+}
+
+FAXPP_DecodeFunction FAXPP_string_to_decode(const char *encodingName)
+{
+ if(t_case_insensitive_equals("UTF-8", encodingName)) {
+ return FAXPP_utf8_decode;
+ }
+ else if(t_case_insensitive_equals("UTF-16", encodingName)) {
+ return FAXPP_utf16_native_decode;
+ }
+ else if(t_case_insensitive_equals("UTF-16LE", encodingName)) {
+#ifdef WORDS_BIGENDIAN
+ return FAXPP_utf16_le_decode;
+#else
+ return FAXPP_utf16_native_decode;
+#endif
+ }
+ else if(t_case_insensitive_equals("UTF-16BE", encodingName)) {
+#ifdef WORDS_BIGENDIAN
+ return FAXPP_utf16_native_decode;
+#else
+ return FAXPP_utf16_be_decode;
+#endif
+ }
+ else if(t_case_insensitive_equals("ISO-10646-UCS-4", encodingName)) {
+ return FAXPP_ucs4_native_decode;
+ }
+ else if(t_case_insensitive_equals("ISO-8859-1", encodingName)) {
+ return FAXPP_iso_8859_1_decode;
+ }
+
+ return 0;
+}
+
+FAXPP_EncodeFunction FAXPP_string_to_encode(const char *encodingName)
+{
+ if(t_case_insensitive_equals("UTF-8", encodingName)) {
+ return FAXPP_utf8_encode;
+ }
+ else if(t_case_insensitive_equals("UTF-16", encodingName)) {
+ return FAXPP_utf16_native_encode;
+ }
+#ifdef WORDS_BIGENDIAN
+ else if(t_case_insensitive_equals("UTF-16BE", encodingName)) {
+ return FAXPP_utf16_native_encode;
+ }
+#else
+ else if(t_case_insensitive_equals("UTF-16LE", encodingName)) {
+ return FAXPP_utf16_native_encode;
+ }
+#endif
+
+ return 0;
+}
+
// 9 is the code for an illegal first byte
uint8_t FAXPP_utf_8_bytes[256] =
{
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-09-06 00:58:58 UTC (rev 30)
+++ trunk/faxpp/src/xml_parser.c 2007-09-21 11:42:51 UTC (rev 31)
@@ -153,6 +153,7 @@
void FAXPP_set_decode(FAXPP_Parser *parser, FAXPP_DecodeFunction decode)
{
FAXPP_set_tokenizer_decode(&parser->tenv, decode);
+ parser->user_provided_decode = 1;
if(parser->next_event == nc_unsupported_encoding_next_event) {
parser->next_event = parser->main_next_event;
}
@@ -167,6 +168,7 @@
}
env->buffered_token = 0;
+ env->user_provided_decode = 0;
env->next_event = nc_start_document_next_event;
@@ -673,7 +675,7 @@
env->err_column = attr->column;
}
-// Needs upper case strings passed to it
+// "str" should be upper case
static int p_case_insensitive_equals(const char *str, FAXPP_EncodeFunction encode, const FAXPP_Text *text)
{
// No encoding represents a character with as many as 10 bytes
@@ -730,7 +732,7 @@
env->event.type = START_DOCUMENT_EVENT;
// Check the encoding string against our internally supported encodings
- if(env->event.encoding.ptr == 0) {
+ if(env->user_provided_decode || env->event.encoding.ptr == 0) {
env->next_event = env->main_next_event;
}
else if(p_case_insensitive_equals("UTF-8", env->tenv.encode, &env->event.encoding)) {
Modified: trunk/faxpp/src/xml_parser.h
===================================================================
--- trunk/faxpp/src/xml_parser.h 2007-09-06 00:58:58 UTC (rev 30)
+++ trunk/faxpp/src/xml_parser.h 2007-09-21 11:42:51 UTC (rev 31)
@@ -66,6 +66,7 @@
FAXPP_TokenizerEnv tenv;
unsigned int buffered_token:1;
unsigned int null_terminate:1;
+ unsigned int user_provided_decode:1;
unsigned int err_line;
unsigned int err_column;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-09-25 11:50:52
|
Revision: 32
http://faxpp.svn.sourceforge.net/faxpp/?rev=32&view=rev
Author: jpcs
Date: 2007-09-25 04:50:47 -0700 (Tue, 25 Sep 2007)
Log Message:
-----------
Started to implement tokenizing of doctype declarations.
Modified Paths:
--------------
trunk/faxpp/Makefile.am
trunk/faxpp/Makefile.in
trunk/faxpp/TODO
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/comment.c
trunk/faxpp/src/error.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
trunk/faxpp/src/xmldecl.c
trunk/faxpp/tests/xmlconf_runner.c
Added Paths:
-----------
trunk/faxpp/src/doctype.c
Modified: trunk/faxpp/Makefile.am
===================================================================
--- trunk/faxpp/Makefile.am 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/Makefile.am 2007-09-25 11:50:47 UTC (rev 32)
@@ -31,7 +31,8 @@
src/xml_parser.c \
src/xml_parser.h \
src/xml_tokenizer.c \
-src/xml_tokenizer.h
+src/xml_tokenizer.h \
+src/doctype.c
tokenizer_example_SOURCES = examples/tokenizer_example.c
tokenizer_example_LDADD = libfaxpp.la
Modified: trunk/faxpp/Makefile.in
===================================================================
--- trunk/faxpp/Makefile.in 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/Makefile.in 2007-09-25 11:50:47 UTC (rev 32)
@@ -63,7 +63,7 @@
am_libfaxpp_la_OBJECTS = buffer.lo cdata.lo char_classes.lo comment.lo \
element.lo error.lo event.lo pi.lo reference.lo token.lo \
tokenizer_states.lo transcode.lo xmldecl.lo xml_parser.lo \
- xml_tokenizer.lo
+ xml_tokenizer.lo doctype.lo
libfaxpp_la_OBJECTS = $(am_libfaxpp_la_OBJECTS)
libfaxpp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -251,7 +251,8 @@
src/xml_parser.c \
src/xml_parser.h \
src/xml_tokenizer.c \
-src/xml_tokenizer.h
+src/xml_tokenizer.h \
+src/doctype.c
tokenizer_example_SOURCES = examples/tokenizer_example.c
tokenizer_example_LDADD = libfaxpp.la
@@ -377,6 +378,7 @@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdata.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/char_classes.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comment.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/doctype.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/event.Plo@am__quote@
@@ -518,6 +520,13 @@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.c
+doctype.lo: src/doctype.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT doctype.lo -MD -MP -MF $(DEPDIR)/doctype.Tpo -c -o doctype.lo `test -f 'src/doctype.c' || echo '$(srcdir)/'`src/doctype.c
+@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/doctype.Tpo $(DEPDIR)/doctype.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/doctype.c' object='doctype.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o doctype.lo `test -f 'src/doctype.c' || echo '$(srcdir)/'`src/doctype.c
+
parser_example.o: examples/parser_example.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser_example.o -MD -MP -MF $(DEPDIR)/parser_example.Tpo -c -o parser_example.o `test -f 'examples/parser_example.c' || echo '$(srcdir)/'`examples/parser_example.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/parser_example.Tpo $(DEPDIR)/parser_example.Po
Modified: trunk/faxpp/TODO
===================================================================
--- trunk/faxpp/TODO 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/TODO 2007-09-25 11:50:47 UTC (rev 32)
@@ -1,6 +1,7 @@
Small tasks
-----------
+Don't accept Namespace 1.1 undefines in XML 1.0 mode
Normalize line endings in element character content / PI values / comment values
Accept XML 1.1 line endings as whitespace
Handle "xml" namespace properly
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/include/faxpp/error.h 2007-09-25 11:50:47 UTC (rev 32)
@@ -44,7 +44,10 @@
INVALID_ENCODING_VALUE,
CDATA_END_IN_ELEMENT_CONTENT,
UNDEFINED_ENTITY,
- DOCTYPE_NOT_IMPLEMENTED, ///< TBD Remove this error - jpcs
+ INVALID_DOCTYPE_DECL,
+ INVALID_CHAR_IN_DOCTYPE_NAME,
+ INVALID_SYSTEM_ID,
+ EXPECTING_SYSTEM_LITERAL,
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/include/faxpp/token.h 2007-09-25 11:50:47 UTC (rev 32)
@@ -64,6 +64,12 @@
DEC_CHAR_REFERENCE_TOKEN,
HEX_CHAR_REFERENCE_TOKEN,
+ DOCTYPE_PREFIX_TOKEN,
+ DOCTYPE_NAME_TOKEN,
+ DOCTYPE_END_TOKEN,
+
+ SYSTEM_LITERAL_TOKEN,
+
END_OF_BUFFER_TOKEN = 99
} FAXPP_TokenType;
Modified: trunk/faxpp/src/comment.c
===================================================================
--- trunk/faxpp/src/comment.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/comment.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -27,11 +27,6 @@
env->state = comment_start_state2;
next_char(env);
break;
- case 'D':
- env->state = comment_content_state;
- token_start_position(env);
- next_char(env);
- return DOCTYPE_NOT_IMPLEMENTED;
LINE_ENDINGS
default:
env->state = comment_content_state;
Added: trunk/faxpp/src/doctype.c
===================================================================
--- trunk/faxpp/src/doctype.c (rev 0)
+++ trunk/faxpp/src/doctype.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -0,0 +1,390 @@
+/*
+ * Copyright 2007 Doxological Ltd.
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tokenizer_states.h"
+#include "char_classes.h"
+
+FAXPP_Error
+doctype_or_comment_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '-':
+ env->state = comment_start_state2;
+ break;
+ case 'D':
+ env->state = doctype_initial_state1;
+ env->seen_doctype = 1;
+ break;
+ LINE_ENDINGS
+ default:
+ env->state = comment_content_state;
+ token_start_position(env);
+ next_char(env);
+ return INVALID_START_OF_COMMENT;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+#define SINGLE_CHAR_STATE(name, ch, next_stored_state, next_state, error) \
+FAXPP_Error \
+name(FAXPP_TokenizerEnv *env) \
+{ \
+ read_char(env); \
+\
+ switch(env->current_char) { \
+ case (ch): \
+ if((next_stored_state) != 0) env->stored_state = (next_stored_state); \
+ env->state = (next_state); \
+ next_char(env); \
+ break; \
+ LINE_ENDINGS \
+ default: \
+ next_char(env); \
+ return (error); \
+ } \
+ return NO_ERROR; \
+}
+
+SINGLE_CHAR_STATE(doctype_initial_state1, 'O', 0, doctype_initial_state2, INVALID_DOCTYPE_DECL)
+SINGLE_CHAR_STATE(doctype_initial_state2, 'C', 0, doctype_initial_state3, INVALID_DOCTYPE_DECL)
+SINGLE_CHAR_STATE(doctype_initial_state3, 'T', 0, doctype_initial_state4, INVALID_DOCTYPE_DECL)
+SINGLE_CHAR_STATE(doctype_initial_state4, 'Y', 0, doctype_initial_state5, INVALID_DOCTYPE_DECL)
+SINGLE_CHAR_STATE(doctype_initial_state5, 'P', 0, doctype_initial_state6, INVALID_DOCTYPE_DECL)
+SINGLE_CHAR_STATE(doctype_initial_state6, 'E', doctype_name_state1, ws_plus_state, INVALID_DOCTYPE_DECL)
+
+FAXPP_Error
+doctype_name_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ default:
+ env->state = doctype_name_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_DOCTYPE_NAME;
+ break;
+ }
+
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_name_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->state = doctype_after_name_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '[':
+ env->state = doctype_internal_subset_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '>':
+ env->state = doctype_end_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ // no next char
+ return NO_ERROR;
+ case ':':
+ env->state = doctype_name_seen_colon_state1;
+ token_end_position(env);
+ report_token(DOCTYPE_PREFIX_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_DOCTYPE_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_name_seen_colon_state1(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ default:
+ env->state = doctype_name_seen_colon_state2;
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_start_char) == 0)
+ return INVALID_CHAR_IN_DOCTYPE_NAME;
+ break;
+ }
+
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_name_seen_colon_state2(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->state = doctype_after_name_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '[':
+ env->state = doctype_internal_subset_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ case '>':
+ env->state = doctype_end_state;
+ token_end_position(env);
+ report_token(DOCTYPE_NAME_TOKEN, env);
+ // no next char
+ return NO_ERROR;
+ default:
+ break;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_DOCTYPE_NAME;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_after_name_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ break;
+ case 'S':
+ env->stored_state = doctype_internal_subset_start_state;
+ env->state = system_id_initial_state1;
+ break;
+/* case 'P': */
+/* env->stored_state = doctype_internal_subset_start_state; */
+/* env->state = public_id_initial_state1; */
+/* break; */
+ case '[':
+ env->state = doctype_internal_subset_state;
+ break;
+ case '>':
+ base_state(env);
+ report_empty_token(DOCTYPE_END_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_internal_subset_start_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ break;
+ case '[':
+ env->state = doctype_internal_subset_state;
+ break;
+ case '>':
+ base_state(env);
+ report_empty_token(DOCTYPE_END_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_internal_subset_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ env->state = doctype_end_state;
+ next_char(env);
+ return NO_ERROR;
+ LINE_ENDINGS
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_end_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ break;
+ case '>':
+ base_state(env);
+ report_empty_token(DOCTYPE_END_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ return NO_ERROR;
+}
+
+SINGLE_CHAR_STATE(system_id_initial_state1, 'Y', 0, system_id_initial_state2, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state2, 'S', 0, system_id_initial_state3, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state3, 'T', 0, system_id_initial_state4, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state4, 'E', 0, system_id_initial_state5, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state5, 'M', 0, system_id_ws_state, INVALID_SYSTEM_ID)
+
+FAXPP_Error
+system_id_ws_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ env->state = system_literal_start_state;
+ next_char(env);
+ break;
+ default:
+ next_char(env);
+ return EXPECTING_WHITESPACE;
+ }
+ return NO_ERROR;
+}
+
+FAXPP_Error
+system_literal_start_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ return NO_ERROR;
+ case '"':
+ env->state = system_literal_quot_state;
+ break;
+ case '\'':
+ env->state = system_literal_apos_state;
+ break;
+ default:
+ next_char(env);
+ return EXPECTING_SYSTEM_LITERAL;
+ }
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+system_literal_apos_state(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ case '\'':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(SYSTEM_LITERAL_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+system_literal_quot_state(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ case '"':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(SYSTEM_LITERAL_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
+ next_char(env);
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
Modified: trunk/faxpp/src/error.c
===================================================================
--- trunk/faxpp/src/error.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/error.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -83,8 +83,14 @@
return "CDATA_END_IN_ELEMENT_CONTENT";
case UNDEFINED_ENTITY:
return "UNDEFINED_ENTITY";
- case DOCTYPE_NOT_IMPLEMENTED:
- return "DOCTYPE_NOT_IMPLEMENTED";
+ case INVALID_DOCTYPE_DECL:
+ return "INVALID_DOCTYPE_DECL";
+ case INVALID_CHAR_IN_DOCTYPE_NAME:
+ return "INVALID_CHAR_IN_DOCTYPE_NAME";
+ case INVALID_SYSTEM_ID:
+ return "INVALID_SYSTEM_ID";
+ case EXPECTING_SYSTEM_LITERAL:
+ return "EXPECTING_SYSTEM_LITERAL";
case NO_ERROR:
break;
}
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/token.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -82,6 +82,17 @@
return "LT_ENTITY_REFERENCE_TOKEN";
case QUOT_ENTITY_REFERENCE_TOKEN:
return "QUOT_ENTITY_REFERENCE_TOKEN";
+
+ case DOCTYPE_PREFIX_TOKEN:
+ return "DOCTYPE_PREFIX_TOKEN";
+ case DOCTYPE_NAME_TOKEN:
+ return "DOCTYPE_NAME_TOKEN";
+ case DOCTYPE_END_TOKEN:
+ return "DOCTYPE_END_TOKEN";
+
+ case SYSTEM_LITERAL_TOKEN:
+ return "SYSTEM_LITERAL_TOKEN";
+
case NO_TOKEN:
break;
}
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/tokenizer_states.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -385,6 +385,56 @@
else if(state == xml_decl_question_state)
return "xml_decl_question_state";
+ else if(state == doctype_or_comment_state)
+ return "doctype_or_comment_state";
+ else if(state == doctype_initial_state1)
+ return "doctype_initial_state1";
+ else if(state == doctype_initial_state2)
+ return "doctype_initial_state2";
+ else if(state == doctype_initial_state3)
+ return "doctype_initial_state3";
+ else if(state == doctype_initial_state4)
+ return "doctype_initial_state4";
+ else if(state == doctype_initial_state5)
+ return "doctype_initial_state5";
+ else if(state == doctype_initial_state6)
+ return "doctype_initial_state6";
+ else if(state == doctype_name_state1)
+ return "doctype_name_state1";
+ else if(state == doctype_name_state2)
+ return "doctype_name_state2";
+ else if(state == doctype_name_seen_colon_state1)
+ return "doctype_name_seen_colon_state1";
+ else if(state == doctype_name_seen_colon_state2)
+ return "doctype_name_seen_colon_state2";
+ else if(state == doctype_after_name_state)
+ return "doctype_after_name_state";
+ else if(state == doctype_internal_subset_start_state)
+ return "doctype_internal_subset_start_state";
+ else if(state == doctype_internal_subset_state)
+ return "doctype_internal_subset_state";
+ else if(state == doctype_end_state)
+ return "doctype_end_state";
+
+ else if(state == system_id_initial_state1)
+ return "system_id_initial_state1";
+ else if(state == system_id_initial_state2)
+ return "system_id_initial_state2";
+ else if(state == system_id_initial_state3)
+ return "system_id_initial_state3";
+ else if(state == system_id_initial_state4)
+ return "system_id_initial_state4";
+ else if(state == system_id_initial_state5)
+ return "system_id_initial_state5";
+ else if(state == system_id_ws_state)
+ return "system_id_ws_state";
+ else if(state == system_literal_start_state)
+ return "system_literal_start_state";
+ else if(state == system_literal_apos_state)
+ return "system_literal_apos_state";
+ else if(state == system_literal_quot_state)
+ return "system_literal_quot_state";
+
return "unknown";
}
#endif
@@ -533,7 +583,9 @@
token_start_position(env);
break;
case '!':
- env->state = comment_start_state1;
+ if(env->seen_doctype)
+ env->state = comment_start_state1;
+ else env->state = doctype_or_comment_state;
next_char(env);
token_start_position(env);
break;
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/tokenizer_states.h 2007-09-25 11:50:47 UTC (rev 32)
@@ -240,6 +240,33 @@
FAXPP_Error xml_decl_question_state(FAXPP_TokenizerEnv *env);
FAXPP_Error xml_decl_seen_question_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_or_comment_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_initial_state6(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_name_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_name_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_name_seen_colon_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_after_name_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_internal_subset_start_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_internal_subset_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error doctype_end_state(FAXPP_TokenizerEnv *env);
+
+FAXPP_Error system_id_initial_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_id_initial_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_id_initial_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_id_initial_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_id_initial_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_id_ws_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_literal_start_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_literal_apos_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error system_literal_quot_state(FAXPP_TokenizerEnv *env);
+
+
/*********************
*
* Tokenizer Helper Functions
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/xml_parser.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -810,6 +810,13 @@
p_next_token(err, env);
switch(env->tenv.result_token.type) {
+ case DOCTYPE_PREFIX_TOKEN:
+ case DOCTYPE_NAME_TOKEN:
+ case DOCTYPE_END_TOKEN:
+ case SYSTEM_LITERAL_TOKEN:
+ // TBD - jpcs
+ break;
+
case XML_DECL_VERSION_TOKEN:
case XML_DECL_ENCODING_TOKEN:
case XML_DECL_STANDALONE_TOKEN:
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -388,6 +388,7 @@
env->nesting_level = 0;
env->do_encode = 1;
+ env->seen_doctype = 0;
env->seen_doc_element = 0;
env->buffer_done = done;
Modified: trunk/faxpp/src/xml_tokenizer.h
===================================================================
--- trunk/faxpp/src/xml_tokenizer.h 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/xml_tokenizer.h 2007-09-25 11:50:47 UTC (rev 32)
@@ -43,6 +43,7 @@
unsigned int nesting_level;
unsigned int do_encode:1;
+ unsigned int seen_doctype:1;
unsigned int seen_doc_element:1;
unsigned int buffer_done:1;
unsigned int normalize_attrs:1;
Modified: trunk/faxpp/src/xmldecl.c
===================================================================
--- trunk/faxpp/src/xmldecl.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/src/xmldecl.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -29,7 +29,7 @@
token_start_position(env);
break;
case '!':
- env->state = comment_start_state1;
+ env->state = doctype_or_comment_state;
next_char(env);
token_start_position(env);
break;
Modified: trunk/faxpp/tests/xmlconf_runner.c
===================================================================
--- trunk/faxpp/tests/xmlconf_runner.c 2007-09-21 11:42:51 UTC (rev 31)
+++ trunk/faxpp/tests/xmlconf_runner.c 2007-09-25 11:50:47 UTC (rev 32)
@@ -319,12 +319,12 @@
calculateBase(base_buffer, &attr->value, file_buffer);
result = run_test_case(file_buffer, &errLine);
- if(result == DOCTYPE_NOT_IMPLEMENTED) {
- printf("^");
- fflush(stdout);
- ++test_skips;
- break;
- }
+/* if(result == DOCTYPE_NOT_IMPLEMENTED) { */
+/* printf("^"); */
+/* fflush(stdout); */
+/* ++test_skips; */
+/* break; */
+/* } */
// @TYPE is not-wf, error, invalid, or valid
attr = find_attribute(event, "TYPE");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-09-28 00:30:06
|
Revision: 33
http://faxpp.svn.sourceforge.net/faxpp/?rev=33&view=rev
Author: jpcs
Date: 2007-09-27 17:29:16 -0700 (Thu, 27 Sep 2007)
Log Message:
-----------
Wrote tokenizer states to parse a "PUBLIC" external ID, and to allow
comments and PIs in the internal subset.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/error.h
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/doctype.c
trunk/faxpp/src/error.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
trunk/faxpp/src/xml_tokenizer.c
trunk/faxpp/src/xml_tokenizer.h
Modified: trunk/faxpp/include/faxpp/error.h
===================================================================
--- trunk/faxpp/include/faxpp/error.h 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/include/faxpp/error.h 2007-09-28 00:29:16 UTC (rev 33)
@@ -48,6 +48,10 @@
INVALID_CHAR_IN_DOCTYPE_NAME,
INVALID_SYSTEM_ID,
EXPECTING_SYSTEM_LITERAL,
+ INVALID_PUBLIC_ID,
+ INVALID_CHAR_IN_PUBID_LITERAL,
+ EXPECTING_PUBID_LITERAL,
+ INVALID_DTD_DECL,
OUT_OF_MEMORY,
ELEMENT_NAME_MISMATCH,
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/include/faxpp/token.h 2007-09-28 00:29:16 UTC (rev 33)
@@ -69,6 +69,7 @@
DOCTYPE_END_TOKEN,
SYSTEM_LITERAL_TOKEN,
+ PUBID_LITERAL_TOKEN,
END_OF_BUFFER_TOKEN = 99
} FAXPP_TokenType;
Modified: trunk/faxpp/src/doctype.c
===================================================================
--- trunk/faxpp/src/doctype.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/doctype.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -100,7 +100,8 @@
next_char(env);
return NO_ERROR;
case '[':
- env->state = doctype_internal_subset_state;
+ env->state = internal_subset_state;
+ env->in_internal_subset = 1;
token_end_position(env);
report_token(DOCTYPE_NAME_TOKEN, env);
next_char(env);
@@ -163,7 +164,8 @@
next_char(env);
return NO_ERROR;
case '[':
- env->state = doctype_internal_subset_state;
+ env->state = internal_subset_state;
+ env->in_internal_subset = 1;
token_end_position(env);
report_token(DOCTYPE_NAME_TOKEN, env);
next_char(env);
@@ -199,12 +201,13 @@
env->stored_state = doctype_internal_subset_start_state;
env->state = system_id_initial_state1;
break;
-/* case 'P': */
-/* env->stored_state = doctype_internal_subset_start_state; */
-/* env->state = public_id_initial_state1; */
-/* break; */
+ case 'P':
+ env->stored_state = doctype_internal_subset_start_state;
+ env->state = public_id_initial_state1;
+ break;
case '[':
- env->state = doctype_internal_subset_state;
+ env->state = internal_subset_state;
+ env->in_internal_subset = 1;
break;
case '>':
base_state(env);
@@ -220,85 +223,123 @@
return NO_ERROR;
}
+SINGLE_CHAR_STATE(system_id_initial_state1, 'Y', 0, system_id_initial_state2, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state2, 'S', 0, system_id_initial_state3, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state3, 'T', 0, system_id_initial_state4, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state4, 'E', 0, system_id_initial_state5, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(system_id_initial_state5, 'M', 0, system_id_ws_state, INVALID_SYSTEM_ID)
+
FAXPP_Error
-doctype_internal_subset_start_state(FAXPP_TokenizerEnv *env)
+system_id_ws_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
WHITESPACE:
+ env->state = system_literal_start_state;
+ next_char(env);
break;
- case '[':
- env->state = doctype_internal_subset_state;
- break;
- case '>':
- base_state(env);
- report_empty_token(DOCTYPE_END_TOKEN, env);
- next_char(env);
- token_start_position(env);
- return NO_ERROR;
default:
next_char(env);
- return INVALID_DOCTYPE_DECL;
+ return EXPECTING_WHITESPACE;
}
- next_char(env);
return NO_ERROR;
}
FAXPP_Error
-doctype_internal_subset_state(FAXPP_TokenizerEnv *env)
+system_literal_start_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
- case ']':
- env->state = doctype_end_state;
+ WHITESPACE:
next_char(env);
return NO_ERROR;
- LINE_ENDINGS
+ case '"':
+ env->state = system_literal_quot_state;
+ break;
+ case '\'':
+ env->state = system_literal_apos_state;
+ break;
default:
next_char(env);
- return INVALID_DOCTYPE_DECL;
+ return EXPECTING_SYSTEM_LITERAL;
}
+ next_char(env);
+ token_start_position(env);
return NO_ERROR;
}
FAXPP_Error
-doctype_end_state(FAXPP_TokenizerEnv *env)
+system_literal_apos_state(FAXPP_TokenizerEnv *env)
{
- read_char(env);
+ while(1) {
+ read_char(env);
- switch(env->current_char) {
- WHITESPACE:
+ switch(env->current_char) {
+ case '\'':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(SYSTEM_LITERAL_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
next_char(env);
- break;
- case '>':
- base_state(env);
- report_empty_token(DOCTYPE_END_TOKEN, env);
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
+system_literal_quot_state(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ case '"':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(SYSTEM_LITERAL_TOKEN, env);
+ next_char(env);
+ return NO_ERROR;
+ LINE_ENDINGS
+ default:
+ if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
+ next_char(env);
+ return RESTRICTED_CHAR;
+ }
+ break;
+ }
next_char(env);
- token_start_position(env);
- break;
- default:
- next_char(env);
- return INVALID_DOCTYPE_DECL;
}
+
+ // Never happens
return NO_ERROR;
}
-SINGLE_CHAR_STATE(system_id_initial_state1, 'Y', 0, system_id_initial_state2, INVALID_SYSTEM_ID)
-SINGLE_CHAR_STATE(system_id_initial_state2, 'S', 0, system_id_initial_state3, INVALID_SYSTEM_ID)
-SINGLE_CHAR_STATE(system_id_initial_state3, 'T', 0, system_id_initial_state4, INVALID_SYSTEM_ID)
-SINGLE_CHAR_STATE(system_id_initial_state4, 'E', 0, system_id_initial_state5, INVALID_SYSTEM_ID)
-SINGLE_CHAR_STATE(system_id_initial_state5, 'M', 0, system_id_ws_state, INVALID_SYSTEM_ID)
+SINGLE_CHAR_STATE(public_id_initial_state1, 'U', 0, public_id_initial_state2, INVALID_PUBLIC_ID)
+SINGLE_CHAR_STATE(public_id_initial_state2, 'B', 0, public_id_initial_state3, INVALID_PUBLIC_ID)
+SINGLE_CHAR_STATE(public_id_initial_state3, 'L', 0, public_id_initial_state4, INVALID_PUBLIC_ID)
+SINGLE_CHAR_STATE(public_id_initial_state4, 'I', 0, public_id_initial_state5, INVALID_PUBLIC_ID)
+SINGLE_CHAR_STATE(public_id_initial_state5, 'C', 0, public_id_ws_state, INVALID_PUBLIC_ID)
FAXPP_Error
-system_id_ws_state(FAXPP_TokenizerEnv *env)
+public_id_ws_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
switch(env->current_char) {
WHITESPACE:
- env->state = system_literal_start_state;
+ env->state = pubid_literal_start_state;
next_char(env);
break;
default:
@@ -309,7 +350,7 @@
}
FAXPP_Error
-system_literal_start_state(FAXPP_TokenizerEnv *env)
+pubid_literal_start_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
@@ -318,14 +359,14 @@
next_char(env);
return NO_ERROR;
case '"':
- env->state = system_literal_quot_state;
+ env->state = pubid_literal_quot_state;
break;
case '\'':
- env->state = system_literal_apos_state;
+ env->state = pubid_literal_apos_state;
break;
default:
next_char(env);
- return EXPECTING_SYSTEM_LITERAL;
+ return EXPECTING_PUBID_LITERAL;
}
next_char(env);
token_start_position(env);
@@ -333,25 +374,38 @@
}
FAXPP_Error
-system_literal_apos_state(FAXPP_TokenizerEnv *env)
+pubid_literal_apos_state(FAXPP_TokenizerEnv *env)
{
while(1) {
read_char(env);
switch(env->current_char) {
case '\'':
- retrieve_state(env);
+ env->state = system_id_ws_state;
token_end_position(env);
- report_token(SYSTEM_LITERAL_TOKEN, env);
+ report_token(PUBID_LITERAL_TOKEN, env);
next_char(env);
return NO_ERROR;
+ // [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
LINE_ENDINGS
+ // A-Z
+ case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F:
+ case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5A:
+ // a-z
+ case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F:
+ case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7A:
+ case ' ': case '-': case '(': case ')': case '+': case ',': case '.': case '/': case ':':
+ case '=': case '?': case ';': case '!': case '*': case '#': case '@': case '$': case '_':
+ case '%':
+ // Valid PubidChar
+ break;
default:
- if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
- next_char(env);
- return RESTRICTED_CHAR;
- }
- break;
+ next_char(env);
+ return INVALID_CHAR_IN_PUBID_LITERAL;
}
next_char(env);
}
@@ -361,25 +415,38 @@
}
FAXPP_Error
-system_literal_quot_state(FAXPP_TokenizerEnv *env)
+pubid_literal_quot_state(FAXPP_TokenizerEnv *env)
{
while(1) {
read_char(env);
switch(env->current_char) {
case '"':
- retrieve_state(env);
+ env->state = system_id_ws_state;
token_end_position(env);
- report_token(SYSTEM_LITERAL_TOKEN, env);
+ report_token(PUBID_LITERAL_TOKEN, env);
next_char(env);
return NO_ERROR;
+ // [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
LINE_ENDINGS
+ // A-Z
+ case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4A: case 0x4B: case 0x4C: case 0x4D: case 0x4E: case 0x4F:
+ case 0x50: case 0x51: case 0x52: case 0x53: case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5A:
+ // a-z
+ case 0x61: case 0x62: case 0x63: case 0x64: case 0x65: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6A: case 0x6B: case 0x6C: case 0x6D: case 0x6E: case 0x6F:
+ case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7A:
+ case ' ': case '-': case '(': case ')': case '+': case ',': case '.': case '/': case ':':
+ case '=': case '?': case ';': case '!': case '*': case '#': case '@': case '$': case '_':
+ case '%': case '\'':
+ // Valid PubidChar
+ break;
default:
- if((FAXPP_char_flags(env->current_char) & env->non_restricted_char) == 0) {
- next_char(env);
- return RESTRICTED_CHAR;
- }
- break;
+ next_char(env);
+ return INVALID_CHAR_IN_PUBID_LITERAL;
}
next_char(env);
}
@@ -388,3 +455,99 @@
return NO_ERROR;
}
+FAXPP_Error
+doctype_internal_subset_start_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ break;
+ case '[':
+ env->state = internal_subset_state;
+ env->in_internal_subset = 1;
+ break;
+ case '>':
+ base_state(env);
+ report_empty_token(DOCTYPE_END_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+internal_subset_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case ']':
+ env->state = doctype_end_state;
+ env->in_internal_subset = 0;
+ break;
+ WHITESPACE:
+ break;
+ case '<':
+ env->state = internal_subset_markup_state;
+ break;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+
+ next_char(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+internal_subset_markup_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ case '?':
+ env->state = pi_name_start_state;
+ break;
+ case '!':
+ env->state = comment_start_state1;
+ break;
+ LINE_ENDINGS
+ default:
+/* env->state = internal_subset_decl_state; */
+ next_char(env);
+ return INVALID_DTD_DECL;
+ }
+
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+}
+
+FAXPP_Error
+doctype_end_state(FAXPP_TokenizerEnv *env)
+{
+ read_char(env);
+
+ switch(env->current_char) {
+ WHITESPACE:
+ next_char(env);
+ break;
+ case '>':
+ base_state(env);
+ report_empty_token(DOCTYPE_END_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ break;
+ default:
+ next_char(env);
+ return INVALID_DOCTYPE_DECL;
+ }
+ return NO_ERROR;
+}
+
Modified: trunk/faxpp/src/error.c
===================================================================
--- trunk/faxpp/src/error.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/error.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -91,6 +91,14 @@
return "INVALID_SYSTEM_ID";
case EXPECTING_SYSTEM_LITERAL:
return "EXPECTING_SYSTEM_LITERAL";
+ case INVALID_PUBLIC_ID:
+ return "INVALID_PUBLIC_ID";
+ case INVALID_CHAR_IN_PUBID_LITERAL:
+ return "INVALID_CHAR_IN_PUBID_LITERAL";
+ case EXPECTING_PUBID_LITERAL:
+ return "EXPECTING_PUBID_LITERAL";
+ case INVALID_DTD_DECL:
+ return "INVALID_DTD_DECL";
case NO_ERROR:
break;
}
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/token.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -92,6 +92,8 @@
case SYSTEM_LITERAL_TOKEN:
return "SYSTEM_LITERAL_TOKEN";
+ case PUBID_LITERAL_TOKEN:
+ return "PUBID_LITERAL_TOKEN";
case NO_TOKEN:
break;
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/tokenizer_states.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -411,8 +411,10 @@
return "doctype_after_name_state";
else if(state == doctype_internal_subset_start_state)
return "doctype_internal_subset_start_state";
- else if(state == doctype_internal_subset_state)
- return "doctype_internal_subset_state";
+ else if(state == internal_subset_state)
+ return "internal_subset_state";
+ else if(state == internal_subset_markup_state)
+ return "internal_subset_markup_state";
else if(state == doctype_end_state)
return "doctype_end_state";
@@ -435,6 +437,25 @@
else if(state == system_literal_quot_state)
return "system_literal_quot_state";
+ else if(state == public_id_initial_state1)
+ return "public_id_initial_state1";
+ else if(state == public_id_initial_state2)
+ return "public_id_initial_state2";
+ else if(state == public_id_initial_state3)
+ return "public_id_initial_state3";
+ else if(state == public_id_initial_state4)
+ return "public_id_initial_state4";
+ else if(state == public_id_initial_state5)
+ return "public_id_initial_state5";
+ else if(state == public_id_ws_state)
+ return "public_id_ws_state";
+ else if(state == pubid_literal_start_state)
+ return "pubid_literal_start_state";
+ else if(state == pubid_literal_apos_state)
+ return "pubid_literal_apos_state";
+ else if(state == pubid_literal_quot_state)
+ return "pubid_literal_quot_state";
+
return "unknown";
}
#endif
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/tokenizer_states.h 2007-09-28 00:29:16 UTC (rev 33)
@@ -253,7 +253,8 @@
FAXPP_Error doctype_name_seen_colon_state2(FAXPP_TokenizerEnv *env);
FAXPP_Error doctype_after_name_state(FAXPP_TokenizerEnv *env);
FAXPP_Error doctype_internal_subset_start_state(FAXPP_TokenizerEnv *env);
-FAXPP_Error doctype_internal_subset_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error internal_subset_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error internal_subset_markup_state(FAXPP_TokenizerEnv *env);
FAXPP_Error doctype_end_state(FAXPP_TokenizerEnv *env);
FAXPP_Error system_id_initial_state1(FAXPP_TokenizerEnv *env);
@@ -266,7 +267,17 @@
FAXPP_Error system_literal_apos_state(FAXPP_TokenizerEnv *env);
FAXPP_Error system_literal_quot_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_initial_state1(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_initial_state2(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_initial_state3(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_initial_state4(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_initial_state5(FAXPP_TokenizerEnv *env);
+FAXPP_Error public_id_ws_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error pubid_literal_start_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error pubid_literal_apos_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error pubid_literal_quot_state(FAXPP_TokenizerEnv *env);
+
/*********************
*
* Tokenizer Helper Functions
@@ -340,6 +351,8 @@
if((env)->nesting_level == 0) \
if((env)->seen_doc_element) \
(env)->state = final_state; \
+ else if((env)->in_internal_subset) \
+ (env)->state = internal_subset_state; \
else (env)->state = initial_misc_state; \
else (env)->state = (env)->element_content_state; \
}
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/xml_parser.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -814,6 +814,7 @@
case DOCTYPE_NAME_TOKEN:
case DOCTYPE_END_TOKEN:
case SYSTEM_LITERAL_TOKEN:
+ case PUBID_LITERAL_TOKEN:
// TBD - jpcs
break;
Modified: trunk/faxpp/src/xml_tokenizer.c
===================================================================
--- trunk/faxpp/src/xml_tokenizer.c 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/xml_tokenizer.c 2007-09-28 00:29:16 UTC (rev 33)
@@ -389,6 +389,7 @@
env->nesting_level = 0;
env->do_encode = 1;
env->seen_doctype = 0;
+ env->in_internal_subset = 0;
env->seen_doc_element = 0;
env->buffer_done = done;
Modified: trunk/faxpp/src/xml_tokenizer.h
===================================================================
--- trunk/faxpp/src/xml_tokenizer.h 2007-09-25 11:50:47 UTC (rev 32)
+++ trunk/faxpp/src/xml_tokenizer.h 2007-09-28 00:29:16 UTC (rev 33)
@@ -44,6 +44,7 @@
unsigned int nesting_level;
unsigned int do_encode:1;
unsigned int seen_doctype:1;
+ unsigned int in_internal_subset:1;
unsigned int seen_doc_element:1;
unsigned int buffer_done:1;
unsigned int normalize_attrs:1;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <jp...@us...> - 2007-10-03 10:49:25
|
Revision: 34
http://faxpp.svn.sourceforge.net/faxpp/?rev=34&view=rev
Author: jpcs
Date: 2007-10-03 02:39:11 -0700 (Wed, 03 Oct 2007)
Log Message:
-----------
Implemented tokenizing of parameter entity references.
Modified Paths:
--------------
trunk/faxpp/include/faxpp/token.h
trunk/faxpp/src/doctype.c
trunk/faxpp/src/reference.c
trunk/faxpp/src/token.c
trunk/faxpp/src/tokenizer_states.c
trunk/faxpp/src/tokenizer_states.h
trunk/faxpp/src/xml_parser.c
Modified: trunk/faxpp/include/faxpp/token.h
===================================================================
--- trunk/faxpp/include/faxpp/token.h 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/include/faxpp/token.h 2007-10-03 09:39:11 UTC (rev 34)
@@ -63,6 +63,7 @@
ENTITY_REFERENCE_TOKEN,
DEC_CHAR_REFERENCE_TOKEN,
HEX_CHAR_REFERENCE_TOKEN,
+ PE_REFERENCE_TOKEN,
DOCTYPE_PREFIX_TOKEN,
DOCTYPE_NAME_TOKEN,
Modified: trunk/faxpp/src/doctype.c
===================================================================
--- trunk/faxpp/src/doctype.c 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/doctype.c 2007-10-03 09:39:11 UTC (rev 34)
@@ -240,7 +240,7 @@
next_char(env);
break;
default:
- next_char(env);
+ env->state = system_literal_start_state;
return EXPECTING_WHITESPACE;
}
return NO_ERROR;
@@ -343,7 +343,7 @@
next_char(env);
break;
default:
- next_char(env);
+ env->state = pubid_literal_start_state;
return EXPECTING_WHITESPACE;
}
return NO_ERROR;
@@ -493,6 +493,12 @@
break;
WHITESPACE:
break;
+ case '%':
+ store_state(env);
+ env->state = parameter_entity_reference_state;
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
case '<':
env->state = internal_subset_markup_state;
break;
Modified: trunk/faxpp/src/reference.c
===================================================================
--- trunk/faxpp/src/reference.c 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/reference.c 2007-10-03 09:39:11 UTC (rev 34)
@@ -332,6 +332,33 @@
}
FAXPP_Error
+parameter_entity_reference_state(FAXPP_TokenizerEnv *env)
+{
+ while(1) {
+ read_char(env);
+
+ switch(env->current_char) {
+ LINE_ENDINGS
+ break;
+ case ';':
+ retrieve_state(env);
+ token_end_position(env);
+ report_token(PE_REFERENCE_TOKEN, env);
+ next_char(env);
+ token_start_position(env);
+ return NO_ERROR;
+ }
+
+ next_char(env);
+ if((FAXPP_char_flags(env->current_char) & env->ncname_char) == 0)
+ return INVALID_CHAR_IN_ENTITY_REFERENCE;
+ }
+
+ // Never happens
+ return NO_ERROR;
+}
+
+FAXPP_Error
char_reference_state(FAXPP_TokenizerEnv *env)
{
read_char(env);
Modified: trunk/faxpp/src/token.c
===================================================================
--- trunk/faxpp/src/token.c 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/token.c 2007-10-03 09:39:11 UTC (rev 34)
@@ -52,6 +52,8 @@
return "ATTRIBUTE_PREFIX_TOKEN";
case ENTITY_REFERENCE_TOKEN:
return "ENTITY_REFERENCE_TOKEN";
+ case PE_REFERENCE_TOKEN:
+ return "PE_REFERENCE_TOKEN";
case DEC_CHAR_REFERENCE_TOKEN:
return "DEC_CHAR_REFERENCE_TOKEN";
case HEX_CHAR_REFERENCE_TOKEN:
Modified: trunk/faxpp/src/tokenizer_states.c
===================================================================
--- trunk/faxpp/src/tokenizer_states.c 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/tokenizer_states.c 2007-10-03 09:39:11 UTC (rev 34)
@@ -246,6 +246,8 @@
return "quot_entity_reference_state4";
else if(state == entity_reference_state)
return "entity_reference_state";
+ else if(state == parameter_entity_reference_state)
+ return "parameter_entity_reference_state";
else if(state == char_reference_state)
return "char_reference_state";
else if(state == dec_char_reference_state)
Modified: trunk/faxpp/src/tokenizer_states.h
===================================================================
--- trunk/faxpp/src/tokenizer_states.h 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/tokenizer_states.h 2007-10-03 09:39:11 UTC (rev 34)
@@ -167,6 +167,7 @@
FAXPP_Error quot_entity_reference_state3(FAXPP_TokenizerEnv *env);
FAXPP_Error quot_entity_reference_state4(FAXPP_TokenizerEnv *env);
FAXPP_Error entity_reference_state(FAXPP_TokenizerEnv *env);
+FAXPP_Error parameter_entity_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error char_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error dec_char_reference_state(FAXPP_TokenizerEnv *env);
FAXPP_Error hex_char_reference_state1(FAXPP_TokenizerEnv *env);
@@ -396,7 +397,8 @@
#define LINE_ENDINGS \
case '\r': { \
Char32 next_char; \
- if((env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \
+ if((env)->position + (env)->char_len >= (env)->buffer_end || \
+ (env)->decode((env)->position + (env)->char_len, (env)->buffer_end, &next_char) \
== TRANSCODE_PREMATURE_END_OF_BUFFER) { \
if(!(env)->buffer_done) return PREMATURE_END_OF_BUFFER; \
goto LINE_ENDINGS_INC; \
Modified: trunk/faxpp/src/xml_parser.c
===================================================================
--- trunk/faxpp/src/xml_parser.c 2007-09-28 00:29:16 UTC (rev 33)
+++ trunk/faxpp/src/xml_parser.c 2007-10-03 09:39:11 UTC (rev 34)
@@ -815,6 +815,7 @@
case DOCTYPE_END_TOKEN:
case SYSTEM_LITERAL_TOKEN:
case PUBID_LITERAL_TOKEN:
+ case PE_REFERENCE_TOKEN:
// TBD - jpcs
break;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|