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_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 xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.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@ +@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 + +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 +@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 + +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 +@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 + +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 +@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 + +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 +@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 + +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 +@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 + +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 +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xmldecl.c' object='xmldecl.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 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@ +@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 + +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 buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c + +test.o: src/test.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test.o -MD -MP -MF "$(DEPDIR)/test.Tpo" -c -o test.o `test -f 'src/test.c' || echo '$(srcdir)/'`src/test.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test.Tpo" "$(DEPDIR)/test.Po"; else rm -f "$(DEPDIR)/test.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test.c' object='test.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 test.o `test -f 'src/test.c' || echo '$(srcdir)/'`src/test.c + +test.obj: src/test.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test.obj -MD -MP -MF "$(DEPDIR)/test.Tpo" -c -o test.obj `if test -f 'src/test.c'; then $(CYGPATH_W) 'src/test.c'; else $(CYGPATH_W) '$(srcdir)/src/test.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test.Tpo" "$(DEPDIR)/test.Po"; else rm -f "$(DEPDIR)/test.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test.c' object='test.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 test.obj `if test -f 'src/test.c'; then $(CYGPATH_W) 'src/test.c'; else $(CYGPATH_W) '$(srcdir)/src/test.c'; fi` + +test2.o: src/test2.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test2.o -MD -MP -MF "$(DEPDIR)/test2.Tpo" -c -o test2.o `test -f 'src/test2.c' || echo '$(srcdir)/'`src/test2.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test2.Tpo" "$(DEPDIR)/test2.Po"; else rm -f "$(DEPDIR)/test2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test2.c' object='test2.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 test2.o `test -f 'src/test2.c' || echo '$(srcdir)/'`src/test2.c + +test2.obj: src/test2.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test2.obj -MD -MP -MF "$(DEPDIR)/test2.Tpo" -c -o test2.obj `if test -f 'src/test2.c'; then $(CYGPATH_W) 'src/test2.c'; else $(CYGPATH_W) '$(srcdir)/src/test2.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test2.Tpo" "$(DEPDIR)/test2.Po"; else rm -f "$(DEPDIR)/test2.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test2.c' object='test2.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 test2.obj `if test -f 'src/test2.c'; then $(CYGPATH_W) 'src/test2.c'; else $(CYGPATH_W) '$(srcdir)/src/test2.c'; fi` + +test3.o: src/test3.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test3.o -MD -MP -MF "$(DEPDIR)/test3.Tpo" -c -o test3.o `test -f 'src/test3.c' || echo '$(srcdir)/'`src/test3.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test3.Tpo" "$(DEPDIR)/test3.Po"; else rm -f "$(DEPDIR)/test3.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test3.c' object='test3.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 test3.o `test -f 'src/test3.c' || echo '$(srcdir)/'`src/test3.c + +test3.obj: src/test3.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test3.obj -MD -MP -MF "$(DEPDIR)/test3.Tpo" -c -o test3.obj `if test -f 'src/test3.c'; then $(CYGPATH_W) 'src/test3.c'; else $(CYGPATH_W) '$(srcdir)/src/test3.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test3.Tpo" "$(DEPDIR)/test3.Po"; else rm -f "$(DEPDIR)/test3.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test3.c' object='test3.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 test3.obj `if test -f 'src/test3.c'; then $(CYGPATH_W) 'src/test3.c'; else $(CYGPATH_W) '$(srcdir)/src/test3.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + 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; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + 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; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +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; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkdir_p) $(distdir)/autotools $(distdir)/src + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ + uninstall-libLTLIBRARIES + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ + check-am clean clean-binPROGRAMS clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-recursive ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ + dist-tarZ dist-zip distcheck distclean distclean-... [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) $(CFLAGS) -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c +@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 -test.o: src/test.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test.o -MD -MP -MF "$(DEPDIR)/test.Tpo" -c -o test.o `test -f 'src/test.c' || echo '$(srcdir)/'`src/test.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test.Tpo" "$(DEPDIR)/test.Po"; else rm -f "$(DEPDIR)/test.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test.c' object='test.o' libtool=no @AMDEPBACKSLASH@ +parser_example.o: examples/parser_example.c +@am__fastdepCC_TRUE@ if $(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@ then mv -f "$(DEPDIR)/parser_example.Tpo" "$(DEPDIR)/parser_example.Po"; else rm -f "$(DEPDIR)/parser_example.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/parser_example.c' object='parser_example.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 test.o `test -f 'src/test.c' || echo '$(srcdir)/'`src/test.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parser_example.o `test -f 'examples/parser_example.c' || echo '$(srcdir)/'`examples/parser_example.c -test.obj: src/test.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test.obj -MD -MP -MF "$(DEPDIR)/test.Tpo" -c -o test.obj `if test -f 'src/test.c'; then $(CYGPATH_W) 'src/test.c'; else $(CYGPATH_W) '$(srcdir)/src/test.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test.Tpo" "$(DEPDIR)/test.Po"; else rm -f "$(DEPDIR)/test.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test.c' object='test.obj' libtool=no @AMDEPBACKSLASH@ +parser_example.obj: examples/parser_example.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser_example.obj -MD -MP -MF "$(DEPDIR)/parser_example.Tpo" -c -o parser_example.obj `if test -f 'examples/parser_example.c'; then $(CYGPATH_W) 'examples/parser_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/parser_example.c'; fi`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/parser_example.Tpo" "$(DEPDIR)/parser_example.Po"; else rm -f "$(DEPDIR)/parser_example.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/parser_example.c' object='parser_example.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 test.obj `if test -f 'src/test.c'; then $(CYGPATH_W) 'src/test.c'; else $(CYGPATH_W) '$(srcdir)/src/test.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o parser_example.obj `if test -f 'examples/parser_example.c'; then $(CYGPATH_W) 'examples/parser_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/parser_example.c'; fi` -test2.o: src/test2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test2.o -MD -MP -MF "$(DEPDIR)/test2.Tpo" -c -o test2.o `test -f 'src/test2.c' || echo '$(srcdir)/'`src/test2.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test2.Tpo" "$(DEPDIR)/test2.Po"; else rm -f "$(DEPDIR)/test2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test2.c' object='test2.o' libtool=no @AMDEPBACKSLASH@ +tokenizer_example.o: examples/tokenizer_example.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.o -MD -MP -MF "$(DEPDIR)/tokenizer_example.Tpo" -c -o tokenizer_example.o `test -f 'examples/tokenizer_example.c' || echo '$(srcdir)/'`examples/tokenizer_example.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_example.Tpo" "$(DEPDIR)/tokenizer_example.Po"; else rm -f "$(DEPDIR)/tokenizer_example.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/tokenizer_example.c' object='tokenizer_example.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 test2.o `test -f 'src/test2.c' || echo '$(srcdir)/'`src/test2.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tokenizer_example.o `test -f 'examples/tokenizer_example.c' || echo '$(srcdir)/'`examples/tokenizer_example.c -test2.obj: src/test2.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test2.obj -MD -MP -MF "$(DEPDIR)/test2.Tpo" -c -o test2.obj `if test -f 'src/test2.c'; then $(CYGPATH_W) 'src/test2.c'; else $(CYGPATH_W) '$(srcdir)/src/test2.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test2.Tpo" "$(DEPDIR)/test2.Po"; else rm -f "$(DEPDIR)/test2.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test2.c' object='test2.obj' libtool=no @AMDEPBACKSLASH@ +tokenizer_example.obj: examples/tokenizer_example.c +@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.obj -MD -MP -MF "$(DEPDIR)/tokenizer_example.Tpo" -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`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_example.Tpo" "$(DEPDIR)/tokenizer_example.Po"; else rm -f "$(DEPDIR)/tokenizer_example.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/tokenizer_example.c' object='tokenizer_example.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 test2.obj `if test -f 'src/test2.c'; then $(CYGPATH_W) 'src/test2.c'; else $(CYGPATH_W) '$(srcdir)/src/test2.c'; fi` +@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` -test3.o: src/test3.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test3.o -MD -MP -MF "$(DEPDIR)/test3.Tpo" -c -o test3.o `test -f 'src/test3.c' || echo '$(srcdir)/'`src/test3.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test3.Tpo" "$(DEPDIR)/test3.Po"; else rm -f "$(DEPDIR)/test3.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test3.c' object='test3.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 test3.o `test -f 'src/test3.c' || echo '$(srcdir)/'`src/test3.c - -test3.obj: src/test3.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test3.obj -MD -MP -MF "$(DEPDIR)/test3.Tpo" -c -o test3.obj `if test -f 'src/test3.c'; then $(CYGPATH_W) 'src/test3.c'; else $(CYGPATH_W) '$(srcdir)/src/test3.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/test3.Tpo" "$(DEPDIR)/test3.Po"; else rm -f "$(DEPDIR)/test3.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/test3.c' object='test3.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 test3.obj `if test -f 'src/test3.c'; then $(CYGPATH_W) 'src/test3.c'; else $(CYGPATH_W) '$(srcdir)/src/test3.c'; fi` - mostlyclean-libtool: -rm -f *.lo @@ -708,7 +671,7 @@ distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) - $(mkdir_p) $(distdir)/autotools $(distdir)/src + $(mkdir_p) $(distdir)/autotools $(distdir)/docs $(distdir)/src @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ @@ -851,11 +814,9 @@ check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) -install-binPROGRAMS: install-libLTLIBRARIES - installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)"; do \ + for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-recursive @@ -884,8 +845,8 @@ @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive -clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ - clean-libtool mostlyclean-am +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) @@ -906,7 +867,7 @@ install-data-am: -install-exec-am: install-binPROGRAMS install-libLTLIBRARIES +install-exec-am: install-libLTLIBRARIES install-info: install-info-recursive @@ -934,30 +895,35 @@ ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ - uninstall-libLTLIBRARIES +uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-binPROGRAMS clean-generic \ - clean-libLTLIBRARIES clean-libtool clean-recursive ctags \ + check-am clean clean-generic clean-libLTLIBRARIES \ + clean-libtool clean-noinstPROGRAMS clean-recursive 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-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-binPROGRAMS install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am \ + install-libLTLIBRARIES install-man install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-info-am \ uninstall-libLTLIBRARIES + +.PHONY: docs + +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/configure =================================================================== --- trunk/faxpp/configure 2007-07-25 16:39:25 UTC (rev 2) +++ trunk/faxpp/configure 2007-07-26 00:57:01 UTC (rev 3) @@ -732,7 +732,7 @@ PACKAGE_STRING='faxpp 0.1' PACKAGE_BUGREPORT='jo...@sn...' -ac_unique_file="include/faxpp/xml_parser.h" +ac_unique_file="include/faxpp/parser.h" # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> @@ -2415,15 +2415,15 @@ echo "${ECHO_T}$sp_profile" >&6; } if test "$sp_profile" = "yes"; then - CFLAGS="$CFLAGS -g -pg -DDEBUG" - CXXFLAGS="$CXXFLAGS -g -pg -DDEBUG" + CFLAGS="$CFLAGS -g -pg -DDEBUG -Wall -Werror" + CXXFLAGS="$CXXFLAGS -g -pg -DDEBUG -Wall -Werror" else if test "$sp_debug" = "yes"; then - CFLAGS="$CFLAGS -g -DDEBUG" - CXXFLAGS="$CXXFLAGS -g -DDEBUG" + CFLAGS="$CFLAGS -g -DDEBUG -Wall -Werror" + CXXFLAGS="$CXXFLAGS -g -DDEBUG -Wall -Werror" else - CFLAGS="$CFLAGS -O2" - CXXFLAGS="$CXXFLAGS -O2" + CFLAGS="$CFLAGS -O2 -Wall" + CXXFLAGS="$CXXFLAGS -O2 -Wall" fi fi @@ -19572,7 +19572,11 @@ -for ac_header in stdint.h stdlib.h + + + + +for ac_header in fcntl.h stdint.h stdlib.h string.h sys/time.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 @@ -19824,7 +19828,68 @@ fi +{ 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 + 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. */ +#include <sys/types.h> +#include <sys/time.h> +#include <time.h> +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + 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_header_time=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_time=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\_ACEOF +#define TIME_WITH_SYS_TIME 1 +_ACEOF + +fi + + { echo "$as_me:$LINENO: checking for uint16_t" >&5 echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6; } if test "${ac_cv_c_uint16_t+set}" = set; then @@ -20286,6 +20351,432 @@ + +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` @@ -20521,7 +21012,10 @@ -for ac_func in memset + + + +for ac_func in gettimeofday memmove memset strerror do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 Modified: trunk/faxpp/configure.in =================================================================== --- trunk/faxpp/configure.in 2007-07-25 16:39:25 UTC (rev 2) +++ trunk/faxpp/configure.in 2007-07-26 00:57:01 UTC (rev 3) @@ -5,7 +5,7 @@ AC_INIT(faxpp, 0.1, jo...@sn...) AC_CONFIG_AUX_DIR(autotools) AM_INIT_AUTOMAKE(faxpp, 0.1, jo...@sn...) -AC_CONFIG_SRCDIR([include/faxpp/xml_parser.h]) +AC_CONFIG_SRCDIR([include/faxpp/parser.h]) AM_CONFIG_HEADER([src/config.h]) # Check debug option @@ -23,15 +23,15 @@ AC_MSG_RESULT($sp_profile) if test "$sp_profile" = "yes"; then - CFLAGS="$CFLAGS -g -pg -DDEBUG" - CXXFLAGS... [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; + FAXPP_ContentSpec *cs; if(env->attrs) free(env->attrs); + while(env->current_elementdecl) { + cs = env->current_elementdecl; + env->current_elementdecl = cs->parent; + free(cs); + } + while(env->av_dealloc) { at = env->av_dealloc; env->av_dealloc = at->dealloc_next; @@ -248,10 +255,23 @@ { FAXPP_ElementInfo *el; FAXPP_NamespaceInfo *ns; + FAXPP_ContentSpec *cs; env->tenv->buffered_token = 0; env->tenv->user_provided_decode = 0; + // Free the elementdecl stack + while(env->current_elementdecl) { + cs = env->current_elementdecl; + env->current_elementdecl = cs->parent; + free(cs); + } + + env->current_attr = 0; + env->current_entity = 0; + env->current_attlist = 0; + env->current_notation = 0; + // Put the element info objects back in the pool while(env->element_info_stack) { el = env->element_info_stack; @@ -408,13 +428,15 @@ //////////////////////////////////////////////////////////////////////////////////////////////////// -static void p_text_change_buffer(FAXPP_Buffer *buffer, void *newBuffer, FAXPP_Text *text) +static void p_change_buffer(FAXPP_Buffer *buffer, void *newBuffer, void **text) { - if(text->ptr >= buffer->buffer && text->ptr < (buffer->buffer + buffer->length)) { - text->ptr += newBuffer - buffer->buffer; + if(*text >= buffer->buffer && *text < (buffer->buffer + buffer->length)) { + *text += newBuffer - buffer->buffer; } } +#define p_text_change_buffer(buffer, newBuffer, text) p_change_buffer((buffer), (newBuffer), &(text)->ptr) + static void p_change_event_buffer(void *userData, FAXPP_Buffer *buffer, void *newBuffer) { unsigned int i; @@ -487,13 +509,19 @@ while(tokenizer) { p_text_change_buffer(buffer, newBuffer, &tokenizer->base_uri); + // The tokenizer buffer can also point into the entity_buffer, so change that too + p_change_buffer(buffer, newBuffer, &tokenizer->buffer); + p_change_buffer(buffer, newBuffer, &tokenizer->buffer_end); + p_change_buffer(buffer, newBuffer, &tokenizer->position); + tokenizer = tokenizer->prev; } } #define p_move_text_to_buffer(env, text, buf) \ { \ - if((text)->ptr >= (env)->tenv->buffer && (text)->ptr < (env)->tenv->buffer_end) { \ + if((text)->ptr >= (env)->tenv->buffer && (text)->ptr < (env)->tenv->buffer_end && \ + ((text)->ptr < (buf)->buffer || (text)->ptr >= ((buf)->buffer + (buf)->length))) { \ void *newPtr = (buf)->cursor; \ FAXPP_Error err = FAXPP_buffer_append((buf), (text)->ptr, (text)->len); \ if((env)->tenv->null_terminate && err == 0) \ @@ -915,10 +943,10 @@ unsigned int readlen; FAXPP_Error err; + err = FAXPP_release_buffer(env, 0); + if(err != 0) return err; + if(env->tenv->read && !env->tenv->buffer_done) { - 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 @@ -942,7 +970,7 @@ if(env->tenv->attr_entity) { // TBD default attr values - jpcs if(!env->tenv->prev->internal_subset && !env->tenv->prev->external_subset && - !env->tenv->prev->internal_dtd_entity) { + !env->tenv->prev->internal_dtd_entity && !env->tenv->prev->external_dtd_entity) { err = p_set_attr_value_name_from_entity(env->current_attr, env, ENTITY_REFERENCE_END_EVENT, env->tenv->entity); if(err) return err; } @@ -1266,7 +1294,14 @@ } if(ent->external) { - return p_parse_external_entity(env, ent, state - INTERNAL_DIFF); + 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; + default: break; + } + + return p_parse_external_entity(env, ent, state); } return p_parse_internal_entity(env, ent, state, &ent); @@ -1314,6 +1349,7 @@ { FAXPP_EntityInfo *ent; FAXPP_EntityValue *entv; + FAXPP_ContentSpec *cs; FAXPP_Text bkup_system, bkup_public; Char32 ch; FAXPP_Error err = 0; @@ -1467,6 +1503,7 @@ entv->value.len = env->entity_buffer.cursor - entv->value.ptr; } else if(env->current_attlist) { + // General entities in ATTLIST values should be looked up straight away ent = p_find_entity_info(&env->tenv->result_token.value, env->general_entities); if(ent == 0) { err = UNDEFINED_ENTITY; @@ -1518,7 +1555,7 @@ 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, INTERNAL_DTD_ENTITY); + err = p_parse_entity(env, ent, env->tenv->internal_subset ? INTERNAL_DTD_ENTITY : EXTERNAL_DTD_ENTITY); p_set_text_from_text(&env->event.system_id, &bkup_system); p_set_text_from_text(&env->event.public_id, &bkup_public); @@ -1527,6 +1564,36 @@ } break; + case ELEMENTDECL_LPAR_TOKEN: + cs = (FAXPP_ContentSpec*)malloc(sizeof(FAXPP_ContentSpec)); + memset(cs, 0, sizeof(FAXPP_ContentSpec)); + cs->parent = env->current_elementdecl; + env->current_elementdecl = cs; + break; + case ELEMENTDECL_RPAR_TOKEN: + cs = env->current_elementdecl; + env->current_elementdecl = cs->parent; + free(cs); + break; + case ELEMENTDECL_BAR_TOKEN: + if(env->current_elementdecl->type == CONTENTSPEC_NONE) { + env->current_elementdecl->type = CONTENTSPEC_CHOICE; + } + else if(env->current_elementdecl->type != CONTENTSPEC_CHOICE) { + err = INVALID_ELEMENTDECL_CONTENT; + goto error; + } + break; + case ELEMENTDECL_COMMA_TOKEN: + if(env->current_elementdecl->type == CONTENTSPEC_NONE) { + env->current_elementdecl->type = CONTENTSPEC_SEQUENCE; + } + else if(env->current_elementdecl->type != CONTENTSPEC_SEQUENCE) { + err = INVALID_ELEMENTDECL_CONTENT; + goto error; + } + break; + case ATTLISTDECL_PREFIX_TOKEN: case ATTLISTDECL_NAME_TOKEN: env->current_attlist = 1; @@ -1560,24 +1627,32 @@ case DOCTYPE_NAME_TOKEN: p_copy_text_from_token(&env->event.name, env, /*useTokenBuffer*/0); break; + case ELEMENTDECL_PREFIX_TOKEN: case ELEMENTDECL_NAME_TOKEN: case ELEMENTDECL_EMPTY_TOKEN: case ELEMENTDECL_ANY_TOKEN: case ELEMENTDECL_PCDATA_TOKEN: - case ELEMENTDECL_LPAR_TOKEN: - case ELEMENTDECL_RPAR_TOKEN: case ELEMENTDECL_QUESTION_TOKEN: case ELEMENTDECL_STAR_TOKEN: case ELEMENTDECL_PLUS_TOKEN: - case ELEMENTDECL_BAR_TOKEN: - case ELEMENTDECL_COMMA_TOKEN: case ELEMENTDECL_END_TOKEN: case ATTLISTDECL_ATTDEF_PREFIX_TOKEN: case ATTLISTDECL_ATTDEF_NAME_TOKEN: + case ATTLISTDECL_ATTTYPE_ENTITY_TOKEN: + case ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN: + case ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN: + case ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN: + case ATTLISTDECL_ATTTYPE_ID_TOKEN: + case ATTLISTDECL_ATTTYPE_IDREF_TOKEN: + case ATTLISTDECL_ATTTYPE_IDREFS_TOKEN: + case ATTLISTDECL_ATTTYPE_CDATA_TOKEN: case ATTLISTDECL_NOTATION_NAME_TOKEN: case ATTLISTDECL_ENUMERATION_NAME_TOKEN: + case ATTLISTDECL_DEFAULT_IMPLIED_TOKEN: + case ATTLISTDECL_DEFAULT_REQUIRED_TOKEN: + case ATTLISTDECL_DEFAULT_FIXED_TOKEN: // Ignore for now break; case COMMENT_TOKEN: @@ -1641,8 +1716,19 @@ case ATTLISTDECL_NAME_TOKEN: case ATTLISTDECL_ATTDEF_PREFIX_TOKEN: case ATTLISTDECL_ATTDEF_NAME_TOKEN: + case ATTLISTDECL_ATTTYPE_ENTITY_TOKEN: + case ATTLISTDECL_ATTTYPE_ENTITIES_TOKEN: + case ATTLISTDECL_ATTTYPE_NMTOKEN_TOKEN: + case ATTLISTDECL_ATTTYPE_NMTOKENS_TOKEN: + case ATTLISTDECL_ATTTYPE_ID_TOKEN: + case ATTLISTDECL_ATTTYPE_IDREF_TOKEN: + case ATTLISTDECL_ATTTYPE_IDREFS_TOKEN: + case ATTLISTDECL_ATTTYPE_CDATA_TOKEN: case ATTLISTDECL_NOTATION_NAME_TOKEN: case ATTLISTDECL_ENUMERATION_NAME_TOKEN: + case ATTLISTDECL_DEFAULT_IMPLIED_TOKEN: + case ATTLISTDECL_DEFAULT_REQUIRED_TOKEN: + case ATTLISTDECL_DEFAULT_FIXED_TOKEN: case ATTLISTDECL_END_TOKEN: case NOTATIONDECL_NAME_TOKEN: case NOTATIONDECL_END_TOKEN: Modified: trunk/faxpp/src/xml_parser.h =================================================================== --- trunk/faxpp/src/xml_parser.h 2008-03-13 21:56:47 UTC (rev 42) +++ trunk/faxpp/src/xml_parser.h 2008-03-14 15:24:54 UTC (rev 43) @@ -75,6 +75,19 @@ FAXPP_EntityInfo *next; }; +typedef enum { + CONTENTSPEC_NONE = 0, + CONTENTSPEC_SEQUENCE, + CONTENTSPEC_CHOICE +} FAXPP_ContentSpecType; + +typedef struct FAXPP_ContentSpec_s FAXPP_ContentSpec; + +struct FAXPP_ContentSpec_s { + FAXPP_ContentSpecType type; + FAXPP_ContentSpec *parent; +}; + typedef struct FAXPP_ParserEnv_s FAXPP_ParserEnv; typedef FAXPP_Error (*FAXPP_NextEvent)(FAXPP_ParserEnv *env); @@ -96,8 +109,10 @@ unsigned int max_attr_count; FAXPP_Attribute *attrs; + FAXPP_Attribute *current_attr; FAXPP_EntityInfo *current_entity; + FAXPP_ContentSpec *current_elementdecl; unsigned int current_attlist:1; unsigned int current_notation:1; Modified: trunk/faxpp/src/xml_tokenizer.c =================================================================== --- trunk/faxpp/src/xml_tokenizer.c 2008-03-13 21:56:47 UTC (rev 42) +++ trunk/faxpp/src/xml_tokenizer.c 2008-03-14 15:24:54 UTC (rev 43) @@ -32,6 +32,8 @@ #define INITIAL_TOKEN_BUFFER_SIZE 64 +#define SNIFF_NEXT_CHAR(buf) (((buf) < (unsigned char*)env->buffer_end) ? *(buf)++ : 0x100) + FAXPP_Error FAXPP_sniff_encoding(FAXPP_Tokenizer *env) { @@ -41,13 +43,13 @@ /* printf("First bytes: %02X %02X %02X %02X\n", *buf, *(buf + 1), */ /* *(buf + 2), *(buf + 3)); */ - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x3C: /* 00 00 00 3C UCS-4, big-endian machine (1234 order) */ #ifdef WORDS_BIGENDIAN @@ -59,14 +61,14 @@ } break; case 0x3C: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* 00 00 3C 00 UCS-4, unusual octet order (2143) */ return UNSUPPORTED_ENCODING; } break; case 0xFE: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xFF: /* 00 00 FE FF UCS-4, big-endian machine (1234 order) */ #ifdef WORDS_BIGENDIAN @@ -80,7 +82,7 @@ } break; case 0xFF: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xFE: /* 00 00 FF FE UCS-4, unusual octet order (2143) */ return UNSUPPORTED_ENCODING; @@ -89,9 +91,9 @@ } break; case 0x3C: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* 00 3C 00 00 UCS-4, unusual octet order (3412) */ return UNSUPPORTED_ENCODING; @@ -110,11 +112,11 @@ } break; case 0x3C: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* 3C 00 00 00 UCS-4, little-endian machine (4321 order) */ #ifdef WORDS_BIGENDIAN @@ -126,7 +128,7 @@ } break; case 0x3F: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* 3C 00 3F 00 UTF-16, little-endian */ #ifdef WORDS_BIGENDIAN @@ -140,9 +142,9 @@ } break; case 0x3F: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x78: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x6D: /* 3C 3F 78 6D UTF-8, ISO 646, ASCII, some part of ISO 8859, Shift-JIS, EUC, etc. */ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode); @@ -154,11 +156,11 @@ } break; case 0x4C: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x6F: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xA7: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x94: /* 4C 6F A7 94 EBCDIC */ return UNSUPPORTED_ENCODING; @@ -169,9 +171,9 @@ } break; case 0xEF: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xBB: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xBF: /* EF BB BF UTF-8 with byte order mark */ FAXPP_set_tokenizer_decode(env, FAXPP_utf8_decode); @@ -182,11 +184,11 @@ } break; case 0xFE: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xFF: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* FE FF 00 00 UCS-4, unusual octet order (3412) */ return UNSUPPORTED_ENCODING; @@ -217,11 +219,11 @@ } break; case 0xFF: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0xFE: - switch(*buf++) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: - switch(*buf) { + switch(SNIFF_NEXT_CHAR(buf)) { case 0x00: /* FF FE 00 00 UCS-4, little-endian machine (4321 order) */ #ifdef WORDS_BIGENDIAN @@ -389,6 +391,7 @@ env->column = 0; env->nesting_level = 0; + env->elemdecl_content_level = 0; env->do_encode = 1; env->seen_doctype = 0; @@ -398,6 +401,7 @@ env->element_entity = 0; env->attr_entity = 0; env->internal_dtd_entity = 0; + env->external_dtd_entity = 0; env->external_parsed_entity = 0; env->start_of_entity = 0; @@ -463,6 +467,7 @@ env->element_entity = state == ELEMENT_CONTENT_ENTITY; env->attr_entity = state == ATTRIBUTE_VALUE_ENTITY; env->internal_dtd_entity = state == INTERNAL_DTD_ENTITY; + env->external_dtd_entity = state == EXTERNAL_DTD_ENTITY; env->external_parsed_entity = state == EXTERNAL_PARSED_ENTITY; env->external_subset = state == EXTERNAL_SUBSET_ENTITY; @@ -483,6 +488,9 @@ case INTERNAL_DTD_ENTITY: env->state = internal_subset_state_en; break; + case EXTERNAL_DTD_ENTITY: + env->state = external_subset_state; + break; case EXTERNAL_PARSED_ENTITY: case EXTERNAL_SUBSET_ENTITY: env->state = initial_state; @@ -502,17 +510,21 @@ FAXPP_Error FAXPP_pop_tokenizer(FAXPP_Tokenizer **list) { + FAXPP_Error err = NO_ERROR; FAXPP_TokenizerEnv *env = *list; *list = env->prev; if(env->start_of_entity) { - if(env->stored_state != 0 || env->nesting_level != 0 || + 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) || - (env->internal_dtd_entity && env->state != internal_subset_state_en) + (env->internal_dtd_entity && env->state != internal_subset_state_en) || + (env->external_dtd_entity && env->state != external_subset_state && + env->state != external_subset_seen_rsquare_state1 && + env->state != external_subset_seen_rsquare_state2) ) { - return INCOMPLETE_MARKUP_IN_ENTITY_VALUE; + err = INCOMPLETE_MARKUP_IN_ENTITY_VALUE; } } else { @@ -532,6 +544,7 @@ } (*list)->nesting_level += env->nesting_level; + (*list)->elemdecl_content_level += env->elemdecl_content_level; (*list)->state = env->state; (*list)->stored_state = env->stored_state; @@ -541,7 +554,7 @@ free_tokenizer_internal(env); - return NO_ERROR; + return err; } FAXPP_Error Modified: trunk/faxpp/src/xml_tokenizer.h =================================================================== --- trunk/faxpp/src/xml_tokenizer.h 2008-03-13 21:56:47 UTC (rev 42) +++ trunk/faxpp/src/xml_tokenizer.h 2008-03-14 15:24:54 UTC (rev 43) @@ -51,6 +51,7 @@ unsigned int column; unsigned int nesting_level; + unsigned int elemdecl_content_level; unsigned int do_encode:1; unsigned int buffer_done:1; @@ -61,6 +62,7 @@ unsigned int element_entity:1; unsigned int attr_entity:1; unsigned int internal_dtd_entity:1; + unsigned int external_dtd_entity:1; unsigned int external_parsed_entity:1; unsigned int normalize_attrs:1; @@ -97,15 +99,14 @@ struct FAXPP_TokenizerEnv_s *prev; }; -#define INTERNAL_DIFF 5 - // The first two values are the same as the values in FAXPP_EntityType typedef enum { EXTERNAL_PARSED_ENTITY2 = EXTERNAL_PARSED_ENTITY, EXTERNAL_SUBSET_ENTITY2 = EXTERNAL_SUBSET_ENTITY, - ELEMENT_CONTENT_ENTITY = EXTERNAL_PARSED_ENTITY + INTERNAL_DIFF, - INTERNAL_DTD_ENTITY = EXTERNAL_SUBSET_ENTITY + INTERNAL_DIFF, + ELEMENT_CONTENT_ENTITY, + INTERNAL_DTD_ENTITY, + EXTERNAL_DTD_ENTITY, ATTRIBUTE_VALUE_ENTITY } FAXPP_EntityParseState; Modified: trunk/faxpp/tests/xmlconf_runner.c =================================================================== --- trunk/faxpp/tests/xmlconf_runner.c 2008-03-13 21:56:47 UTC (rev 42) +++ trunk/faxpp/tests/xmlconf_runner.c 2008-03-14 15:24:54 UTC (rev 43) @@ -29,7 +29,7 @@ if(line != 0) { output_text(FAXPP_get_base_uri(parser), stderr); - fprintf(stderr, ":%03d:%03d FAXPP_Error: %s\n", line, FAXPP_get_error_column(parser), FAXPP_err_to_string(err)); + fprintf(stderr, ":%d:%d FAXPP_Error: %s\n", line, FAXPP_get_error_column(parser), FAXPP_err_to_string(err)); } else { fprintf(stderr, "FAXPP_Error: %s\n", FAXPP_err_to_string(err)); } @@ -76,8 +76,11 @@ *ptr = 0; } -FAXPP_Error run_test_case(const char *filename, unsigned int *errLine) +FAXPP_Error run_test_case(const char *filename, char *errFileBuffer, unsigned int bufLen, unsigned int *errLine, unsigned int *errColumn) { + const FAXPP_Text *text; + unsigned int len; + FAXPP_Parser *testparser = FAXPP_create_parser(WELL_FORMED_PARSE_MODE, FAXPP_utf8_transcoder); FILE *file = fopen(filename, "r"); @@ -100,7 +103,13 @@ } if(err != NO_ERROR) { + text = FAXPP_get_base_uri(testparser); + len = text->len < bufLen - 1 ? text->len : bufLen - 1; + memcpy(errFileBuffer, text->ptr, len); + errFileBuffer[len] = 0; + *errLine = FAXPP_get_error_line(testparser); + *errColumn = FAXPP_get_error_column(testparser); } fclose(file); @@ -118,7 +127,9 @@ char base_buffer[1024]; char file_buffer[1024]; FAXPP_Error result; + char errFileBuffer[1024]; unsigned int errLine; + unsigned int errColumn; int output_events = 0; int test_failures = 0; @@ -191,7 +202,7 @@ attr = find_attribute(event, "URI"); calculateBase(base_buffer, &attr->value, file_buffer); - result = run_test_case(file_buffer, &errLine); + result = run_test_case(file_buffer, errFileBuffer, sizeof(errFileBuffer), &errLine, &errColumn); // Skip tests that require no namespaces attr = find_attribute(event, "NAMESPACE"); @@ -251,7 +262,7 @@ } if(result != NO_ERROR) { - fprintf(stderr, "\nError: %s:%i", FAXPP_err_to_string(result), errLine); + fprintf(stderr, "\nError: %s:%d:%d %s\n", errFileBuffer, errLine, errColumn, FAXPP_err_to_string(result)); } fprintf(stderr, "\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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 main(int, char *[[]]) { return(0); }\n' +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -2864,7 +3024,7 @@ # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; - aix4* | aix5*) + aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. @@ -2877,7 +3037,7 @@ # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) @@ -2913,7 +3073,7 @@ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 - _LT_AC_TAGVAR(hardcode_direct, $1)=yes + : else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported @@ -3023,59 +3183,31 @@ fi ;; darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[[012]]) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no + _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + if test "$GXX" = yes ; then output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes + _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_AC_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_AC_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else case $cc_basename in xlc*) output_verbose_link_cmd='echo' - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' ;; *) @@ -3158,9 +3290,7 @@ _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in - hppa*64*|ia64*) - _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' - ;; + hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; @@ -3228,7 +3358,7 @@ ;; esac ;; - interix3*) + interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' @@ -3320,7 +3450,7 @@ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; - pgCC*) + pgCC* | pgcpp*) # Portland Group C++ compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' @@ -3348,6 +3478,29 @@ # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; esac ;; lynxos*) @@ -3386,16 +3539,20 @@ _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) - _LT_AC_TAGVAR(hardcode_direct, $1)=yes - _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + if test -f /usr/libexec/ld.so; then + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd='echo' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no fi - output_verbose_link_cmd='echo' ;; osf3*) case $cc_basename in @@ -3557,15 +3714,10 @@ case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes @@ -3612,6 +3764,12 @@ fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac fi ;; esac @@ -3727,7 +3885,8 @@ # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. -AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP], +[AC_REQUIRE([LT_AC_PROG_SED])dnl dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each @@ -3852,10 +4011,15 @@ $rm -f confest.$objext +_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + # PORTME: override above test on systems where it is broken ifelse([$1],[CXX], [case $host_os in -interix3*) +interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_AC_TAGVAR(predep_objects,$1)= @@ -3863,19 +4027,51 @@ _LT_AC_TAGVAR(postdeps,$1)= ;; +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + # + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + if test "$solaris_use_stlport4" != yes; then + _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + solaris*) case $cc_basename in CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. - _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun' + if test "$solaris_use_stlport4" != yes; then + _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi ;; esac ;; esac ]) - case " $_LT_AC_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac @@ -3918,10 +4114,17 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" +lt_simple_compile_test_code="\ + subroutine t + return + end +" # Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" +lt_simple_link_test_code="\ + program t + end +" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -3953,7 +4156,7 @@ postinstall_cmds='$RANLIB $lib' 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 @@ -4000,10 +4203,10 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}\n" +lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n' +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER @@ -4056,7 +4259,7 @@ _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" @@ -4130,6 +4333,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) \ _LT_AC_TAGVAR(archive_cmds, $1) \ _LT_AC_TAGVAR(archive_expsym_cmds, $1) \ _LT_AC_TAGVAR(postinstall_cmds, $1) \ @@ -4145,6 +4349,7 @@ _LT_AC_TAGVAR(module_cmds, $1) \ _LT_AC_TAGVAR(module_expsym_cmds, $1) \ _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \ + _LT_AC_TAGVAR(fix_srcfile_path, $1) \ _LT_AC_TAGVAR(exclude_expsyms, $1) \ _LT_AC_TAGVAR(include_expsyms, $1); do @@ -4191,7 +4396,7 @@ # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: @@ -4428,6 +4633,10 @@ # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) +# The directories searched by this compiler when creating a shared +# library +compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1) + # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) @@ -4516,7 +4725,7 @@ sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" +fix_srcfile_path=$lt_fix_srcfile_path # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) @@ -4599,6 +4808,7 @@ # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([LT_AC_PROG_SED]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. @@ -4776,7 +4986,7 @@ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi - rm -f conftest* conftst* + rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then @@ -4825,13 +5035,16 @@ # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | os2* | pw32*) + mingw* | cygwin* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform @@ -4842,7 +5055,7 @@ # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; - interix3*) + interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -4868,7 +5081,7 @@ esac else case $host_os in - aix4* | aix5*) + aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor @@ -4964,7 +5177,7 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; - pgCC*) + pgCC* | pgcpp*) # Portland Group C++ compiler. _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' @@ -4978,6 +5191,14 @@ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac ;; esac ;; @@ -5098,14 +5319,17 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) @@ -5114,7 +5338,7 @@ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; - interix3*) + interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; @@ -5172,10 +5396,11 @@ esac ;; - mingw* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + m4_if([$1], [GCJ], [], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) @@ -5224,6 +5449,22 @@ # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; esac ;; @@ -5233,6 +5474,10 @@ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; + rdos*) + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + solaris*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' @@ -5292,7 +5537,7 @@ # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], - _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; @@ -5316,7 +5561,7 @@ # wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\" AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) @@ -5327,11 +5572,12 @@ # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], -[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +[AC_REQUIRE([LT_AC_PROG_SED])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in - aix4* | aix5*) + aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then @@ -5344,7 +5590,7 @@ _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_AC_TAGVAR(link_all_deplibs, $1)=no @@ -5353,6 +5599,7 @@ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac + _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= @@ -5383,12 +5630,14 @@ # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. - _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= # Just being paranoid about ensuring that cc_basename is set. _LT_CC_BASENAME([$compiler]) @@ -5438,7 +5687,7 @@ # See if GNU ld supports shared libraries. case $host_os in - aix3* | aix4* | aix5*) + aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no @@ -5486,7 +5735,7 @@ _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -5504,7 +5753,7 @@ fi ;; - interix3*) + interix[[3-9]]*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' @@ -5519,7 +5768,7 @@ _LT... [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 be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. -HTML_FOOTER = +HTML_FOOTER = -# The HTML_STYLESHEET tag can be used to specify a user defined cascading +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = @@ -516,14 +683,14 @@ # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be -# written to the html output dir. +# written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non empty doxygen will try to run -# the html help compiler on the generated index.hhp. +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. HHC_LOCATION = @@ -540,7 +707,7 @@ BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the Html help documentation and to the tree view. +# to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO @@ -558,10 +725,9 @@ # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports -# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+, -# or Internet explorer 4.0+). Note that for large projects the tree generation -# can take a very long time. In such cases it is better to disable this feature. -# Windows users are probably better off using the HTML help feature. +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. GENERATE_TREEVIEW = NO @@ -586,7 +752,8 @@ LATEX_OUTPUT = latex -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name. +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex @@ -640,12 +807,18 @@ LATEX_BATCHMODE = NO +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimised for Word 97 and may not look very pretty with +# The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO @@ -672,7 +845,7 @@ RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assigments. You only have to provide +# config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = @@ -716,12 +889,16 @@ # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. +# the code including all documentation. GENERATE_XML = NO +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. @@ -734,6 +911,13 @@ XML_DTD = +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -747,6 +931,39 @@ GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- @@ -765,7 +982,7 @@ # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. +# PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO @@ -791,11 +1008,13 @@ # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. -PREDEFINED = +PREDEFINED = -# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. @@ -805,16 +1024,29 @@ # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse the -# parser if not removed. +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- -# Configuration::addtions related to external references +# Configuration::additions related to external references #--------------------------------------------------------------------------- -# The TAGFILES tag can be used to specify one or more tagfiles. +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. TAGFILES = @@ -845,10 +1077,11 @@ #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is -# recommended to install and use dot, since it yield more powerful graphs. +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. CLASS_DIAGRAMS = YES @@ -879,6 +1112,17 @@ COLLABORATION_GRAPH = NO +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. @@ -898,11 +1142,34 @@ INCLUDED_BY_GRAPH = YES +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a caller dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. + +CALLER_GRAPH = NO + # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. @@ -910,7 +1177,7 @@ DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. +# found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = @@ -936,6 +1203,33 @@ MAX_DOT_GRAPH_HEIGHT = 1024 +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. @@ -943,51 +1237,16 @@ GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermedate dot files that are used to generate +# remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- -# Configuration::addtions related to the search engine +# Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO - -# The CGI_NAME tag should be the name of the CGI script that -# starts the search engine (doxysearch) with the correct parameters. -# A script with this name will be generated by doxygen. - -CGI_NAME = search.cgi - -# The CGI_URL tag should be the absolute URL to the directory where the -# cgi binaries are located. See the documentation of your http daemon for -# details. - -CGI_URL = - -# The DOC_URL tag should be the absolute URL to the directory where the -# documentation is located. If left blank the absolute path to the -# documentation, with file:// prepended to it, will be used. - -DOC_URL = - -# The DOC_ABSPATH tag should be the absolute path to the directory where the -# documentation is located. If left blank the directory on the local machine -# will be used. - -DOC_ABSPATH = - -# The BIN_ABSPATH tag must point to the directory where the doxysearch binary -# is installed. - -BIN_ABSPATH = /usr/local/bin/ - -# The EXT_DOC_PATHS tag can be used to specify one or more paths to -# documentation generated for other projects. This allows doxysearch to search -# the documentation for these projects as well. - -EXT_DOC_PATHS = Added: trunk/faxpp/docs/header.html =================================================================== --- trunk/faxpp/docs/header.html (rev 0) +++ trunk/faxpp/docs/header.html 2007-07-26 15:21:24 UTC (rev 4) @@ -0,0 +1,7 @@ +<!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: FAXPP_Parser Struct Reference</title> +<link href="doxygen.css" rel="stylesheet" type="text/css"> +<link href="tabs.css" rel="stylesheet" type="text/css"> +</head><body> +<a style="float:right;" href="http://sourceforge.net/projects/faxpp"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=201903&type=2" border="0" alt="SourceForge.net Logo" /></a> Modified: trunk/faxpp/examples/tokenizer_example.c =================================================================== --- trunk/faxpp/examples/tokenizer_example.c 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/examples/tokenizer_example.c 2007-07-26 15:21:24 UTC (rev 4) @@ -16,11 +16,8 @@ #include <stdio.h> #include <stdlib.h> -#include <fcntl.h> #include <errno.h> #include <string.h> -#include <unistd.h> -#include <sys/mman.h> #include <sys/time.h> #include <faxpp/tokenizer.h> @@ -35,26 +32,26 @@ return (timev.tv_sec * MSECS_IN_SECS) + timev.tv_usec; } -#define BUF_SIZE 50 +#define OUTPUT_BUFFER_SIZE 50 +#define INPUT_BUFFER_SIZE 4 * 1024 int main(int argc, char **argv) { FAXPP_Error err; - int fd; - long length; - void *xml; + const FAXPP_Token *token; int i; - char buf[BUF_SIZE + 1]; + char buf[OUTPUT_BUFFER_SIZE + 1]; unsigned long startTime; + FILE *file; + char xml[INPUT_BUFFER_SIZE]; + long length; if(argc < 2) { printf("Too few arguments\n"); exit(-1); } - FAXPP_Token token; - FAXPP_Tokenizer *tokenizer = FAXPP_create_tokenizer(); if(tokenizer == 0) { printf("ERROR: out of memory\n"); @@ -65,53 +62,63 @@ startTime = getTime(); - fd = open(argv[i], O_RDONLY); - if(fd == -1) { + file = fopen(argv[i], "r"); + if(file == 0) { printf("Open failed: %s\n", strerror(errno)); exit(1); } - length = lseek(fd, 0, SEEK_END); + length = fread(xml, 1, sizeof(xml), file); - xml = mmap(0, length, PROT_READ, MAP_SHARED, fd, 0); - if(xml == MAP_FAILED) { - printf("Mmap failed: %s\n", strerror(errno)); - exit(1); - } - err = FAXPP_init_tokenize(tokenizer, xml, length, FAXPP_utf8_encode); if(err != NO_ERROR) { printf("ERROR: %s\n", FAXPP_err_to_string(err)); exit(1); } - err = FAXPP_next_token(tokenizer, &token); - while(token.token != END_OF_BUFFER_TOKEN) { - if(err != NO_ERROR) { + err = FAXPP_next_token(tokenizer); + token = FAXPP_get_current_token(tokenizer); + while(token->type != END_OF_BUFFER_TOKEN) { + if(err == PREMATURE_END_OF_BUFFER && length == sizeof(xml)) { + // Repopulate the buffer + void *buffer_position; + FAXPP_tokenizer_release_buffer(tokenizer, &buffer_position); + + if(buffer_position < (void*)xml + sizeof(xml)) { + length = (void*)(xml + sizeof(xml)) - buffer_position; + memmove(xml, buffer_position, length); + } + else length = 0; + + length += fread(xml, 1, sizeof(xml) - length, file); + + FAXPP_continue_tokenize(tokenizer, xml, length); + } + else if(err != NO_ERROR) { printf("%03d:%03d ERROR: %s\n", FAXPP_get_tokenizer_error_line(tokenizer), FAXPP_get_tokenizer_error_column(tokenizer), FAXPP_err_to_string(err)); if(err == PREMATURE_END_OF_BUFFER || err == BAD_ENCODING || err == OUT_OF_MEMORY) break; } - else if(token.value.len != 0) { - if(token.value.len > BUF_SIZE) { - strncpy(buf, token.value.ptr, BUF_SIZE - 3); - buf[BUF_SIZE - 3] = '.'; - buf[BUF_SIZE - 2] = '.'; - buf[BUF_SIZE - 1] = '.'; - buf[BUF_SIZE] = 0; + else if(token->value.len != 0) { + if(token->value.len > OUTPUT_BUFFER_SIZE) { + strncpy(buf, token->value.ptr, OUTPUT_BUFFER_SIZE - 3); + buf[OUTPUT_BUFFER_SIZE - 3] = '.'; + buf[OUTPUT_BUFFER_SIZE - 2] = '.'; + buf[OUTPUT_BUFFER_SIZE - 1] = '.'; + buf[OUTPUT_BUFFER_SIZE] = 0; } else { - strncpy(buf, token.value.ptr, token.value.len); - buf[token.value.len] = 0; + strncpy(buf, token->value.ptr, token->value.len); + buf[token->value.len] = 0; } - printf("%03d:%03d Token ID: %s, Token: \"%s\"\n", token.line, token.column, FAXPP_token_to_string(&token), buf); + printf("%03d:%03d Token ID: %s, Token: \"%s\"\n", token->line, token->column, FAXPP_token_to_string(token->type), buf); } else - printf("%03d:%03d Token ID: %s\n", token.line, token.column, FAXPP_token_to_string(&token)); + printf("%03d:%03d Token ID: %s\n", token->line, token->column, FAXPP_token_to_string(token->type)); - err = FAXPP_next_token(tokenizer, &token); + err = FAXPP_next_token(tokenizer); } printf("Time taken: %gms\n", ((double)(getTime() - startTime) / MSECS_IN_SECS * 1000)); Modified: trunk/faxpp/include/Makefile.am =================================================================== --- trunk/faxpp/include/Makefile.am 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/include/Makefile.am 2007-07-26 15:21:24 UTC (rev 4) @@ -9,7 +9,7 @@ docs: $(top_srcdir)/docs/.api-timestamp -$(top_srcdir)/docs/.api-timestamp: $(nobase_include_HEADERS) $(top_srcdir)/docs/Doxyfile.api +$(top_srcdir)/docs/.api-timestamp: $(nobase_include_HEADERS) $(top_srcdir)/docs/Doxyfile.api $(top_srcdir)/docs/header.html cd $(top_srcdir)/docs && \ doxygen Doxyfile.api && \ touch .api-timestamp Modified: trunk/faxpp/include/Makefile.in =================================================================== --- trunk/faxpp/include/Makefile.in 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/include/Makefile.in 2007-07-26 15:21:24 UTC (rev 4) @@ -401,7 +401,7 @@ docs: $(top_srcdir)/docs/.api-timestamp -$(top_srcdir)/docs/.api-timestamp: $(nobase_include_HEADERS) $(top_srcdir)/docs/Doxyfile.api +$(top_srcdir)/docs/.api-timestamp: $(nobase_include_HEADERS) $(top_srcdir)/docs/Doxyfile.api $(top_srcdir)/docs/header.html cd $(top_srcdir)/docs && \ doxygen Doxyfile.api && \ touch .api-timestamp Modified: trunk/faxpp/include/faxpp/error.h =================================================================== --- trunk/faxpp/include/faxpp/error.h 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/include/faxpp/error.h 2007-07-26 15:21:24 UTC (rev 4) @@ -17,12 +17,7 @@ #ifndef __FAXPP__ERROR_H #define __FAXPP__ERROR_H -/********************* - * - * Errors - * - *********************/ - +/// An enumeration of the error conditions returned by faxpp typedef enum { NO_ERROR = 0, DOUBLE_DASH_IN_COMMENT, @@ -47,11 +42,17 @@ EXPECTING_WHITESPACE, UNKNOWN_XML_VERSION, OUT_OF_MEMORY, + ELEMENT_NAME_MISMATCH, NO_URI_FOR_PREFIX, DUPLICATE_ATTRIBUTES } FAXPP_Error; +/** + * Returns a string describing the given error code + * \param err The error code + * \return a string + */ const char *FAXPP_err_to_string(FAXPP_Error err); #endif Modified: trunk/faxpp/include/faxpp/event.h =================================================================== --- trunk/faxpp/include/faxpp/event.h 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/include/faxpp/event.h 2007-07-26 15:21:24 UTC (rev 4) @@ -19,66 +19,83 @@ #include "text.h" +/// An enumeration of the event types returned by the parser typedef enum { NO_EVENT, - START_DOCUMENT_EVENT, ///< version?, encoding?, standalone? - END_DOCUMENT_EVENT, ///< - START_ELEMENT_EVENT, ///< prefix?, uri?, name, attrs? - SELF_CLOSING_ELEMENT_EVENT,///< prefix?, uri?, name, attrs? - END_ELEMENT_EVENT, ///< prefix?, uri?, name - CHARACTERS_EVENT, ///< value - CDATA_EVENT, ///< value - IGNORABLE_WHITESPACE_EVENT,///< value - COMMENT_EVENT, ///< value - PI_EVENT, ///< name, value? - ENTITY_REFERENCE_EVENT, ///< name - DEC_CHAR_REFERENCE_EVENT, ///< name - HEX_CHAR_REFERENCE_EVENT ///< name + START_DOCUMENT_EVENT, + END_DOCUMENT_EVENT, + START_ELEMENT_EVENT, + SELF_CLOSING_ELEMENT_EVENT, + END_ELEMENT_EVENT, + CHARACTERS_EVENT, + CDATA_EVENT, + IGNORABLE_WHITESPACE_EVENT, + COMMENT_EVENT, + PI_EVENT, + ENTITY_REFERENCE_EVENT, + DEC_CHAR_REFERENCE_EVENT, + HEX_CHAR_REFERENCE_EVENT } FAXPP_EventType; +/// An item in a linked list of a FAXPP_Attribute object's value typedef struct FAXPP_AttrValue_s { - FAXPP_EventType type; - FAXPP_Text value; + FAXPP_EventType type; ///< The type of the attribute value. Can be CHARACTERS_EVENT, ENTITY_REFERENCE_EVENT, DEC_CHAR_REFERENCE_EVENT, and HEX_CHAR_REFERENCE_EVENT + /// The name of the item in the attribute's value. \details Present for event types ENTITY_REFERENCE_EVENT, DEC_CHAR_REFERENCE_EVENT, and HEX_CHAR_REFERENCE_EVENT + FAXPP_Text name; + FAXPP_Text value; ///< The value of the item in the attribute's value. \details Present for all possible event types - struct FAXPP_AttrValue_s *next; + struct FAXPP_AttrValue_s *next; ///< The next item in the attribute's value, or 0 - /// private + /// Private - \b Do \b not \b use struct FAXPP_AttrValue_s *dealloc_next; } FAXPP_AttrValue; -typedef struct FAXPP_Attribute_s { - FAXPP_Text prefix; - FAXPP_Text uri; - FAXPP_Text name; +/// An attribute, part of the FAXPP_Event object +typedef struct { + FAXPP_Text prefix; ///< The prefix of the attribute + FAXPP_Text uri; ///< The URI of the attribute + FAXPP_Text name; ///< The name of the attribute - FAXPP_AttrValue value; + FAXPP_AttrValue value; ///< A linked list of the attribute value - unsigned int xmlns_attr:1; + unsigned int xmlns_attr:1; ///< Set to 1 if the attribute is a namespace declaration - unsigned int line; - unsigned int column; + unsigned int line; ///< The line the attribute started on + unsigned int column; ///< The column the attribute started on } FAXPP_Attribute; -typedef struct FAXPP_Event_s { - FAXPP_EventType type; +/// A structure containing event information, returned by the parser +typedef struct { + FAXPP_EventType type; ///< The type of the event - FAXPP_Text prefix; - FAXPP_Text uri; + FAXPP_Text prefix; ///< The prefix of the event. \details Present for event types START_ELEMENT_EVENT, SELF_CLOSING_ELEMENT_EVENT, and END_ELEMENT_EVENT + FAXPP_Text uri; ///< The URI of the event. \details Present for event types START_ELEMENT_EVENT, SELF_CLOSING_ELEMENT_EVENT, and END_ELEMENT_EVENT + /// The name of the event. \details Present for event types START_ELEMENT_EVENT, SELF_CLOSING_ELEMENT_EVENT, END_ELEMENT_EVENT, PI_EVENT, ENTITY_REFERENCE_EVENT, + /// DEC_CHAR_REFERENCE_EVENT, and HEX_CHAR_REFERENCE_EVENT FAXPP_Text name; + /// The value of the event. \details Present for event types CHARACTERS_EVENT, CDATA_EVENT, IGNORABLE_WHITESPACE_EVENT, COMMENT_EVENT, PI_EVENT, + /// ENTITY_REFERENCE_EVENT, DEC_CHAR_REFERENCE_EVENT, and HEX_CHAR_REFERENCE_EVENT FAXPP_Text value; - unsigned int attr_count; - FAXPP_Attribute *attrs; ///< Array of attributes + unsigned int attr_count; ///< The number of attributes in the event. \details Present for event types START_ELEMENT_EVENT, and SELF_CLOSING_ELEMENT_EVENT + FAXPP_Attribute *attrs; ///< Array of attributes. \details Present for event types START_ELEMENT_EVENT, and SELF_CLOSING_ELEMENT_EVENT - FAXPP_Text version; - FAXPP_Text encoding; - FAXPP_Text standalone; + FAXPP_Text version; ///< The version of the event. \details Present only for the START_DOCUMENT_EVENT event type + FAXPP_Text encoding; ///< The version of the event. \details Present only for the START_DOCUMENT_EVENT event type + FAXPP_Text standalone; ///< The version of the event. \details Present only for the START_DOCUMENT_EVENT event type - unsigned int line; - unsigned int column; + unsigned int line; ///< The line number of the start of the event + unsigned int column; ///< The column number of the start of the event } FAXPP_Event; +/** + * Returns a string describing the given event type + * \param type The event type + * \return a string + * + * \relatesalso FAXPP_Event + */ const char *FAXPP_event_to_string(FAXPP_EventType type); #endif Modified: trunk/faxpp/include/faxpp/parser.h =================================================================== --- trunk/faxpp/include/faxpp/parser.h 2007-07-26 00:57:01 UTC (rev 3) +++ trunk/faxpp/include/faxpp/parser.h 2007-07-26 15:21:24 UTC (rev 4) @@ -23,33 +23,286 @@ #include "transcode.h" #include "event.h" +/** + * \mainpage + * + * Faxpp is a small, fast XML pull parser written in C with an API that can return UTF-8 or UTF-16 strings. It currently has no DTD support, although it is planned. + * + * Faxpp is written by John Snelson, and is released under the terms of the Apache Licence v2. + * + * Faxpp provides two different APIs: + * + * \li The FAXPP_Parser API would normally suit the needs of most users. + * It provides an event based pull API for parsing XML documents. + * \li T... [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); + return DOCTYPE_NOT_IMPLEMENTED; LINE_ENDINGS default: env->state = comment_content_state; @@ -55,6 +77,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); @@ -76,9 +104,11 @@ env->token_position1 = env->token_buffer.cursor ? env->token_buffer.cursor : env->position; break; LINE_ENDINGS + env->state = comment_content_state; + break; default: env->state = comment_content_state; - break; + return NO_ERROR; } next_char(env); @@ -107,7 +137,6 @@ LINE_ENDINGS default: env->state = comment_content_state; - next_char(env); return DOUBLE_DASH_IN_COMMENT; } return NO_ERROR; Modified: trunk/faxpp/src/element.c =================================================================== --- trunk/faxpp/src/element.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/element.c 2007-07-28 01:49:22 UTC (rev 8) @@ -15,6 +15,7 @@ */ #include "tokenizer_states.h" +#include "char_classes.h" extern uint8_t FAXPP_utf_8_bytes[256]; @@ -82,8 +83,18 @@ 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) & NON_RESTRICTED_CHAR) == 0) { + next_char(env); + return RESTRICTED_CHAR; + } + break; } next_char(env); @@ -128,14 +139,23 @@ 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 + // 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 0x09: case 0x0B: case 0x0C: case 0x0E: case 0x0F: + 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: @@ -143,32 +163,27 @@ 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 0x5D: case 0x5E: case 0x5F: + 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: case 0x7F: - // The char really was a one byte char + case 0x78: case 0x79: case 0x7A: case 0x7B: case 0x7C: case 0x7D: case 0x7E: + // The char is a valid one byte char break; default: - // Check if we are encoding in another char-set - if((env)->encode) { - // Decode properly - env->char_len = FAXPP_utf8_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; - } + // Decode properly + env->char_len = FAXPP_utf8_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; } - else { - // We just need to calculate the real char length - env->char_len = FAXPP_utf_8_bytes[env->current_char]; - if(env->char_len == 9) return BAD_ENCODING; - if(env->position + env->char_len > env->buffer_end) - return PREMATURE_END_OF_BUFFER; + + if((FAXPP_char_flags(env->current_char) & NON_RESTRICTED_CHAR) == 0) { + next_char(env); + return RESTRICTED_CHAR; } break; } @@ -215,6 +230,10 @@ 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: @@ -229,6 +248,11 @@ return BAD_ENCODING; } } + + if((FAXPP_char_flags(env->current_char) & NON_RESTRICTED_CHAR) == 0) { + next_char(env); + return RESTRICTED_CHAR; + } break; } Modified: trunk/faxpp/src/element_states.h =================================================================== --- trunk/faxpp/src/element_states.h 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/element_states.h 2007-07-28 01:49:22 UTC (rev 8) @@ -204,6 +204,69 @@ } FAXPP_Error +PREFIX(element_content_rsquare_state1)(FAXPP_TokenizerEnv *env) +{ + 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_rsquare_state2); + next_char(env); + break; + default: + env->state = PREFIX(element_content_state); + break; + } + + return NO_ERROR; +} + +FAXPP_Error +PREFIX(element_content_rsquare_state2)(FAXPP_TokenizerEnv *env) +{ + 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_state); + next_char(env); + return CDATA_END_IN_ELEMENT_CONTENT;; + case ']': + next_char(env); + break; + default: + env->state = PREFIX(element_content_state); + break;; + } + + return NO_ERROR; +} + +FAXPP_Error PREFIX(end_element_name_state)(FAXPP_TokenizerEnv *env) { read_char(env); Modified: trunk/faxpp/src/error.c =================================================================== --- trunk/faxpp/src/error.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/error.c 2007-07-28 01:49:22 UTC (rev 8) @@ -77,6 +77,14 @@ return "NO_URI_FOR_PREFIX"; case DUPLICATE_ATTRIBUTES: return "DUPLICATE_ATTRIBUTES"; + case INVALID_ENCODING_VALUE: + return "INVALID_ENCODING_VALUE"; + case CDATA_END_IN_ELEMENT_CONTENT: + return "CDATA_END_IN_ELEMENT_CONTENT"; + case UNDEFINED_ENTITY: + return "UNDEFINED_ENTITY"; + case DOCTYPE_NOT_IMPLEMENTED: + return "DOCTYPE_NOT_IMPLEMENTED"; case NO_ERROR: break; } Modified: trunk/faxpp/src/reference.c =================================================================== --- trunk/faxpp/src/reference.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/reference.c 2007-07-28 01:49:22 UTC (rev 8) @@ -28,6 +28,26 @@ next_char(env); token_start_position(env); break; + case 'a': + env->state = a_entity_reference_state; + token_start_position(env); + next_char(env); + break; + case 'g': + env->state = gt_entity_reference_state1; + token_start_position(env); + next_char(env); + break; + case 'l': + env->state = lt_entity_reference_state1; + token_start_position(env); + next_char(env); + break; + case 'q': + env->state = quot_entity_reference_state1; + token_start_position(env); + next_char(env); + break; LINE_ENDINGS default: env->state = entity_reference_state; @@ -41,6 +61,250 @@ } FAXPP_Error +a_entity_reference_state(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 'm': + env->state = amp_entity_reference_state1; + break; + case 'p': + env->state = apos_entity_reference_state1; + break; + default: + env->state = entity_reference_state; + return NO_ERROR; + } + + next_char(env); + return NO_ERROR; +} + +FAXPP_Error +amp_entity_reference_state1(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 'p': + env->state = amp_entity_reference_state2; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +amp_entity_reference_state2(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case ';': + retrieve_state(env); + token_end_position(env); + report_token(AMP_ENTITY_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +apos_entity_reference_state1(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 'o': + env->state = apos_entity_reference_state2; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +apos_entity_reference_state2(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 's': + env->state = apos_entity_reference_state3; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +apos_entity_reference_state3(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case ';': + retrieve_state(env); + token_end_position(env); + report_token(APOS_ENTITY_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +gt_entity_reference_state1(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 't': + env->state = gt_entity_reference_state2; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +gt_entity_reference_state2(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case ';': + retrieve_state(env); + token_end_position(env); + report_token(GT_ENTITY_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +lt_entity_reference_state1(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 't': + env->state = lt_entity_reference_state2; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +lt_entity_reference_state2(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case ';': + retrieve_state(env); + token_end_position(env); + report_token(LT_ENTITY_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +quot_entity_reference_state1(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 'u': + env->state = quot_entity_reference_state2; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +quot_entity_reference_state2(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 'o': + env->state = quot_entity_reference_state3; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +quot_entity_reference_state3(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case 't': + env->state = quot_entity_reference_state4; + next_char(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error +quot_entity_reference_state4(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case ';': + retrieve_state(env); + token_end_position(env); + report_token(QUOT_ENTITY_REFERENCE_TOKEN, env); + next_char(env); + token_start_position(env); + return NO_ERROR; + } + + env->state = entity_reference_state; + return NO_ERROR; +} + +FAXPP_Error entity_reference_state(FAXPP_TokenizerEnv *env) { while(1) { Modified: trunk/faxpp/src/token.c =================================================================== --- trunk/faxpp/src/token.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/token.c 2007-07-28 01:49:22 UTC (rev 8) @@ -68,6 +68,18 @@ return "XMLNS_PREFIX_TOKEN"; case XMLNS_NAME_TOKEN: return "XMLNS_NAME_TOKEN"; + case XML_PREFIX_TOKEN: + return "XML_PREFIX_TOKEN"; + case AMP_ENTITY_REFERENCE_TOKEN: + return "AMP_ENTITY_REFERENCE_TOKEN"; + case APOS_ENTITY_REFERENCE_TOKEN: + return "APOS_ENTITY_REFERENCE_TOKEN"; + case GT_ENTITY_REFERENCE_TOKEN: + return "GT_ENTITY_REFERENCE_TOKEN"; + case LT_ENTITY_REFERENCE_TOKEN: + return "LT_ENTITY_REFERENCE_TOKEN"; + case QUOT_ENTITY_REFERENCE_TOKEN: + return "QUOT_ENTITY_REFERENCE_TOKEN"; case NO_TOKEN: break; } Modified: trunk/faxpp/src/tokenizer_states.c =================================================================== --- trunk/faxpp/src/tokenizer_states.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/tokenizer_states.c 2007-07-28 01:49:22 UTC (rev 8) @@ -54,26 +54,17 @@ return "pi_content_state"; else if(state == pi_content_seen_question_state) return "pi_content_seen_question_state"; + else if(state == default_start_element_name_state) return "default_start_element_name_state"; else if(state == default_start_element_name_seen_colon_state) 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 == utf8_start_element_name_state) - return "utf8_start_element_name_state"; - else if(state == utf8_start_element_name_seen_colon_state) - 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 == default_start_element_ws_state) return "default_start_element_ws_state"; - else if(state == utf8_start_element_ws_state) - return "utf8_start_element_ws_state"; - else if(state == start_element_end_state) - return "start_element_end_state"; - else if(state == self_closing_element_state) - return "self_closing_element_state"; + else if(state == default_element_content_markup_state) + return "default_element_content_markup_state"; else if(state == default_attr_name_state) return "default_attr_name_state"; else if(state == default_attr_name_seen_colon_state) @@ -88,6 +79,39 @@ return "default_attr_value_apos_state"; else if(state == default_attr_value_quot_state) return "default_attr_value_quot_state"; + else if(state == default_element_content_state) + return "default_element_content_state"; + else if(state == default_element_content_rsquare_state1) + return "default_element_content_rsquare_state1"; + else if(state == default_element_content_rsquare_state2) + return "default_element_content_rsquare_state2"; + else if(state == default_end_element_name_state) + return "default_end_element_name_state"; + else if(state == default_end_element_name_state2) + return "default_end_element_name_state2"; + else if(state == default_end_element_name_seen_colon_state) + return "default_end_element_name_seen_colon_state"; + else if(state == default_end_element_name_seen_colon_state2) + return "default_end_element_name_seen_colon_state2"; + else if(state == default_ns_name_state1) + return "default_ns_name_state1"; + else if(state == default_ns_name_state2) + return "default_ns_name_state2"; + else if(state == default_ns_name_state3) + return "default_ns_name_state3"; + else if(state == default_ns_name_state4) + return "default_ns_name_state4"; + else if(state == default_ns_name_state5) + return "default_ns_name_state5"; + + else if(state == utf8_start_element_name_state) + return "utf8_start_element_name_state"; + else if(state == utf8_start_element_name_seen_colon_state) + 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_ws_state) + return "utf8_start_element_ws_state"; else if(state == utf8_attr_name_state) return "utf8_attr_name_state"; else if(state == utf8_attr_name_seen_colon_state) @@ -102,22 +126,14 @@ return "utf8_attr_value_apos_state"; else if(state == utf8_attr_value_quot_state) return "utf8_attr_value_quot_state"; - else if(state == default_element_content_state) - return "default_element_content_state"; else if(state == utf8_element_content_state) return "utf8_element_content_state"; - else if(state == default_element_content_markup_state) - return "default_element_content_markup_state"; + else if(state == utf8_element_content_rsquare_state1) + return "utf8_element_content_rsquare_state1"; + else if(state == utf8_element_content_rsquare_state2) + return "utf8_element_content_rsquare_state2"; else if(state == utf8_element_content_markup_state) return "utf8_element_content_markup_state"; - else if(state == default_end_element_name_state) - return "default_end_element_name_state"; - else if(state == default_end_element_name_state2) - return "default_end_element_name_state2"; - else if(state == default_end_element_name_seen_colon_state) - return "default_end_element_name_seen_colon_state"; - else if(state == default_end_element_name_seen_colon_state2) - return "default_end_element_name_seen_colon_state2"; else if(state == utf8_end_element_name_state) return "utf8_end_element_name_state"; else if(state == utf8_end_element_name_state2) @@ -126,10 +142,102 @@ return "utf8_end_element_name_seen_colon_state"; else if(state == utf8_end_element_name_seen_colon_state2) return "utf8_end_element_name_seen_colon_state2"; + else if(state == utf8_ns_name_state1) + return "utf8_ns_name_state1"; + else if(state == utf8_ns_name_state2) + return "utf8_ns_name_state2"; + else if(state == utf8_ns_name_state3) + return "utf8_ns_name_state3"; + else if(state == utf8_ns_name_state4) + return "utf8_ns_name_state4"; + else if(state == utf8_ns_name_state5) + return "utf8_ns_name_state5"; + + else if(state == utf16_start_element_name_state) + return "utf16_start_element_name_state"; + else if(state == utf16_start_element_name_seen_colon_state) + 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_ws_state) + return "utf16_start_element_ws_state"; + else if(state == utf16_attr_name_state) + return "utf16_attr_name_state"; + else if(state == utf16_attr_name_seen_colon_state) + return "utf16_attr_name_seen_colon_state"; + else if(state == utf16_attr_name_seen_colon_state2) + return "utf16_attr_name_seen_colon_state2"; + else if(state == utf16_attr_equals_state) + return "utf16_attr_equals_state"; + else if(state == utf16_attr_value_start_state) + return "utf16_attr_value_start_state"; + else if(state == utf16_attr_value_apos_state) + return "utf16_attr_value_apos_state"; + else if(state == utf16_attr_value_quot_state) + return "utf16_attr_value_quot_state"; + else if(state == utf16_element_content_state) + return "utf16_element_content_state"; + else if(state == utf16_element_content_rsquare_state1) + return "utf16_element_content_rsquare_state1"; + else if(state == utf16_element_content_rsquare_state2) + return "utf16_element_content_rsquare_state2"; + else if(state == utf16_element_content_markup_state) + return "utf16_element_content_markup_state"; + else if(state == utf16_end_element_name_state) + return "utf16_end_element_name_state"; + else if(state == utf16_end_element_name_state2) + return "utf16_end_element_name_state2"; + else if(state == utf16_end_element_name_seen_colon_state) + return "utf16_end_element_name_seen_colon_state"; + else if(state == utf16_end_element_name_seen_colon_state2) + return "utf16_end_element_name_seen_colon_state2"; + else if(state == utf16_ns_name_state1) + return "utf16_ns_name_state1"; + else if(state == utf16_ns_name_state2) + return "utf16_ns_name_state2"; + else if(state == utf16_ns_name_state3) + return "utf16_ns_name_state3"; + else if(state == utf16_ns_name_state4) + return "utf16_ns_name_state4"; + else if(state == utf16_ns_name_state5) + return "utf16_ns_name_state5"; + + else if(state == start_element_end_state) + return "start_element_end_state"; + else if(state == self_closing_element_state) + return "self_closing_element_state"; else if(state == end_element_ws_state) return "end_element_ws_state"; else if(state == reference_state) return "reference_state"; + else if(state == a_entity_reference_state) + return "a_entity_reference_state"; + else if(state == amp_entity_reference_state1) + return "amp_entity_reference_state1"; + else if(state == amp_entity_reference_state2) + return "amp_entity_reference_state2"; + else if(state == apos_entity_reference_state1) + return "apos_entity_reference_state1"; + else if(state == apos_entity_reference_state2) + return "apos_entity_reference_state2"; + else if(state == apos_entity_reference_state3) + return "apos_entity_reference_state3"; + else if(state == gt_entity_reference_state1) + return "gt_entity_reference_state1"; + else if(state == gt_entity_reference_state2) + return "gt_entity_reference_state2"; + else if(state == lt_entity_reference_state1) + return "lt_entity_reference_state1"; + else if(state == lt_entity_reference_state2) + return "lt_entity_reference_state2"; + else if(state == quot_entity_reference_state1) + return "quot_entity_reference_state1"; + else if(state == quot_entity_reference_state2) + return "quot_entity_reference_state2"; + else if(state == quot_entity_reference_state3) + return "quot_entity_reference_state3"; + else if(state == quot_entity_reference_state4) + return "quot_entity_reference_state4"; else if(state == entity_reference_state) return "entity_reference_state"; else if(state == char_reference_state) @@ -222,10 +330,14 @@ 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_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_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) @@ -266,26 +378,6 @@ return "xml_decl_standalone_value_apos_state"; else if(state == xml_decl_question_state) return "xml_decl_question_state"; - else if(state == default_ns_name_state1) - return "default_ns_name_state1"; - else if(state == default_ns_name_state2) - return "default_ns_name_state2"; - else if(state == default_ns_name_state3) - return "default_ns_name_state3"; - else if(state == default_ns_name_state4) - return "default_ns_name_state4"; - else if(state == default_ns_name_state5) - return "default_ns_name_state5"; - else if(state == utf8_ns_name_state1) - return "utf8_ns_name_state1"; - else if(state == utf8_ns_name_state2) - return "utf8_ns_name_state2"; - else if(state == utf8_ns_name_state3) - return "utf8_ns_name_state3"; - else if(state == utf8_ns_name_state4) - return "utf8_ns_name_state4"; - else if(state == utf8_ns_name_state5) - return "utf8_ns_name_state5"; return "unknown"; } Modified: trunk/faxpp/src/tokenizer_states.h =================================================================== --- trunk/faxpp/src/tokenizer_states.h 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/tokenizer_states.h 2007-07-28 01:49:22 UTC (rev 8) @@ -49,6 +49,8 @@ FAXPP_Error default_attr_value_quot_state(FAXPP_TokenizerEnv *env); FAXPP_Error default_element_content_state(FAXPP_TokenizerEnv *env); +FAXPP_Error default_element_content_rsquare_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error default_element_content_rsquare_state2(FAXPP_TokenizerEnv *env); FAXPP_Error default_element_content_markup_state(FAXPP_TokenizerEnv *env); FAXPP_Error default_end_element_name_state(FAXPP_TokenizerEnv *env); @@ -76,6 +78,8 @@ FAXPP_Error utf8_attr_value_quot_state(FAXPP_TokenizerEnv *env); FAXPP_Error utf8_element_content_state(FAXPP_TokenizerEnv *env); +FAXPP_Error utf8_element_content_rsquare_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error utf8_element_content_rsquare_state2(FAXPP_TokenizerEnv *env); FAXPP_Error utf8_element_content_markup_state(FAXPP_TokenizerEnv *env); FAXPP_Error utf8_end_element_name_state(FAXPP_TokenizerEnv *env); @@ -103,6 +107,8 @@ FAXPP_Error utf16_attr_value_quot_state(FAXPP_TokenizerEnv *env); FAXPP_Error utf16_element_content_state(FAXPP_TokenizerEnv *env); +FAXPP_Error utf16_element_content_rsquare_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error utf16_element_content_rsquare_state2(FAXPP_TokenizerEnv *env); FAXPP_Error utf16_element_content_markup_state(FAXPP_TokenizerEnv *env); FAXPP_Error utf16_end_element_name_state(FAXPP_TokenizerEnv *env); @@ -143,6 +149,20 @@ FAXPP_Error end_element_ws_state(FAXPP_TokenizerEnv *env); FAXPP_Error reference_state(FAXPP_TokenizerEnv *env); +FAXPP_Error a_entity_reference_state(FAXPP_TokenizerEnv *env); +FAXPP_Error amp_entity_reference_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error amp_entity_reference_state2(FAXPP_TokenizerEnv *env); +FAXPP_Error apos_entity_reference_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error apos_entity_reference_state2(FAXPP_TokenizerEnv *env); +FAXPP_Error apos_entity_reference_state3(FAXPP_TokenizerEnv *env); +FAXPP_Error gt_entity_reference_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error gt_entity_reference_state2(FAXPP_TokenizerEnv *env); +FAXPP_Error lt_entity_reference_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error lt_entity_reference_state2(FAXPP_TokenizerEnv *env); +FAXPP_Error quot_entity_reference_state1(FAXPP_TokenizerEnv *env); +FAXPP_Error quot_entity_reference_state2(FAXPP_TokenizerEnv *env); +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 char_reference_state(FAXPP_TokenizerEnv *env); FAXPP_Error dec_char_reference_state(FAXPP_TokenizerEnv *env); @@ -190,8 +210,10 @@ 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_state(FAXPP_TokenizerEnv *env); -FAXPP_Error xml_decl_encoding_value_apos_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_standalone_ws_state(FAXPP_TokenizerEnv *env); FAXPP_Error xml_decl_standalone_state1(FAXPP_TokenizerEnv *env); Modified: trunk/faxpp/src/xml_parser.c =================================================================== --- trunk/faxpp/src/xml_parser.c 2007-07-26 22:58:43 UTC (rev 7) +++ trunk/faxpp/src/xml_parser.c 2007-07-28 01:49:22 UTC (rev 8) @@ -294,6 +294,7 @@ static FAXPP_Error p_read_more(FAXPP_ParserEnv *env) { unsigned int len = 0; + unsigned int readlen; unsigned int i; FAXPP_AttrValue *atval; @@ -329,8 +330,11 @@ memmove(env->read_buffer, env->tenv.position, len); } - len += env->read(env->read_user_data, env->read_buffer, env->read_buffer_length - len); + readlen = env->read(env->read_user_data, env->read_buffer, env->re... [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_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; @@ -279,14 +261,48 @@ break; } - if(env->decode == FAXPP_utf8_decode) { - if(env->encode == FAXPP_utf8_encode) - env->encode = 0; - env->start_element_name_state = utf8_start_element_name_state; - env->element_content_state = utf8_element_content_state; + return NO_ERROR; +} + +FAXPP_DecodeFunction +FAXPP_get_tokenizer_decode(const FAXPP_Tokenizer *tokenizer) +{ + return tokenizer->decode; +} + +void +FAXPP_set_tokenizer_decode(FAXPP_Tokenizer *tokenizer, FAXPP_DecodeFunction decode) +{ + if(decode == FAXPP_utf16_native_decode || +#ifdef WORDS_BIGENDIAN + decode == FAXPP_utf16_be_decode +#else + decode == FAXPP_utf16_le_decode +#endif + ) { + tokenizer->decode = FAXPP_utf16_native_decode; + + if(tokenizer->encode == FAXPP_utf16_native_encode) + tokenizer->encode = 0; + + tokenizer->start_element_name_state = utf16_start_element_name_state; + tokenizer->element_content_state = utf16_element_content_state; } + else if(decode == FAXPP_utf8_decode) { + tokenizer->decode = FAXPP_utf8_decode; - return NO_ERROR; + if(tokenizer->encode == FAXPP_utf8_encode) + tokenizer->encode = 0; + + tokenizer->start_element_name_state = utf8_start_element_name_state; + tokenizer->element_content_state = utf8_element_content_state; + } + else { + tokenizer->decode = decode; + + tokenizer->start_element_name_state = default_start_element_name_state; + tokenizer->element_content_state = default_element_content_state; + } } FAXPP_Error This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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_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; @@ -998,6 +1054,8 @@ nsinfo = env->namespace_stack; while(nsinfo != 0) { if(p_compare_text(prefix, &nsinfo->prefix) == 0) { + if(nsinfo->prefix.len != 0 && nsinfo->uri.len == 0) + return NO_URI_FOR_PREFIX; p_set_text_from_text(uri, &nsinfo->uri); return NO_ERROR; } @@ -1109,21 +1167,6 @@ return result; } -static FAXPP_Error wf_start_document_next_event(FAXPP_ParserEnv *env) -{ - FAXPP_Error err = nc_start_document_next_event(env); - if(err != 0) return err; - - switch(env->event.type) { - case START_DOCUMENT_EVENT: - env->next_event = wf_next_event; - break; - default: break; - } - - return err; -} - static FAXPP_Error wf_next_event(FAXPP_ParserEnv *env) { int i, j; @@ -1136,7 +1179,11 @@ 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; case START_ELEMENT_EVENT: @@ -1279,8 +1326,6 @@ break; case COMMENT_EVENT: break; - case PI_EVENT: - break; case ENTITY_REFERENCE_EVENT: /* [WFC: Entity Declared] */ /* [WFC: Parsed Entity] */ Modified: trunk/faxpp/src/xml_parser.h =================================================================== --- trunk/faxpp/src/xml_parser.h 2007-08-09 10:29:57 UTC (rev 11) +++ trunk/faxpp/src/xml_parser.h 2007-08-11 00:29:45 UTC (rev 12) @@ -49,15 +49,14 @@ typedef struct FAXPP_ParserEnv_s FAXPP_ParserEnv; +typedef FAXPP_Error (*FAXPP_NextEvent)(FAXPP_ParserEnv *env); + struct FAXPP_ParserEnv_s { - FAXPP_Error (*next_event)(FAXPP_ParserEnv *env); + FAXPP_NextEvent next_event; + FAXPP_NextEvent main_next_event; - FAXPP_ParseMode mode; FAXPP_EncodeFunction encode; - FAXPP_EncodingCallback encoding; - void *encoding_user_data; - FAXPP_ReadCallback read; void *read_user_data; @@ -66,6 +65,7 @@ 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-09 10:29:57 UTC (rev 11) +++ trunk/faxpp/src/xml_tokenizer.c 2007-08-11 00:29:45 UTC (rev 12) @@ -297,6 +297,18 @@ 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 +#else + decode == FAXPP_ucs4_le_decode +#endif + ) { + tokenizer->decode = FAXPP_ucs4_native_decode; + + tokenizer->start_element_name_state = default_start_element_name_state; + tokenizer->element_content_state = default_element_content_state; + } else { tokenizer->decode = decode; Modified: trunk/faxpp/src/xmldecl.c =================================================================== --- trunk/faxpp/src/xmldecl.c 2007-08-09 10:29:57 UTC (rev 11) +++ trunk/faxpp/src/xmldecl.c 2007-08-11 00:29:45 UTC (rev 12) @@ -144,7 +144,7 @@ default: env->state = pi_name_state; 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_PI_NAME; break; } @@ -324,21 +324,23 @@ 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_state, equals_state, 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) FAXPP_Error -xml_decl_encoding_value_state(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_state1(FAXPP_TokenizerEnv *env) { read_char(env); switch(env->current_char) { case '"': - env->state = xml_decl_encoding_value_quot_state1; + env->stored_state = xml_decl_encoding_value_quot_state; + env->state = xml_decl_encoding_value_state2; next_char(env); token_start_position(env); break; case '\'': - env->state = xml_decl_encoding_value_apos_state1; + env->stored_state = xml_decl_encoding_value_apos_state; + env->state = xml_decl_encoding_value_state2; next_char(env); token_start_position(env); break; @@ -350,24 +352,35 @@ return NO_ERROR; } +//////////////////////////////////////////////////////////////////////////////////////////////////// + FAXPP_Error -xml_decl_encoding_value_quot_state1(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_state2(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 '"': - env->state = xml_decl_standalone_ws_state; - next_char(env); + case '\'': + retrieve_state(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; } @@ -375,47 +388,356 @@ 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_quot_state2(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_utf_state4(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 '"': - env->state = xml_decl_standalone_ws_state; - token_end_position(env); - report_token(XML_DECL_ENCODING_TOKEN, env); + 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); + } break; - 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 '-': + default: + retrieve_state(env); break; - LINE_ENDINGS + } + 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; 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); - return INVALID_ENCODING_VALUE; + break; + case '8': + env->state = xml_decl_encoding_value_iso_8859_1_state1; + next_char(env); + break; + default: + retrieve_state(env); + break; } - 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(xml_decl_encoding_value_ucs4_state6, '-', xml_decl_encoding_value_ucs4_state7) +ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state7, 'U', 'u', xml_decl_encoding_value_ucs4_state8) +ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state8, 'C', 'c', xml_decl_encoding_value_ucs4_state9) +ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state9, 'S', 's', xml_decl_encoding_value_ucs4_state10) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state10, '-', xml_decl_encoding_value_ucs4_state11) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state11, '4', xml_decl_encoding_value_ucs4_state12) + FAXPP_Error -xml_decl_encoding_value_apos_state1(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_ucs4_state12(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_UCS4_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_UCS4_TOKEN, env); + next_char(env); + } + else { + retrieve_state(env); + } + break; + default: + retrieve_state(env); + break; + } + return NO_ERROR; +} + +ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state1, '8', xml_decl_encoding_value_iso_8859_1_state2) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state2, '5', xml_decl_encoding_value_iso_8859_1_state3) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state3, '9', xml_decl_encoding_value_iso_8859_1_state4) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state4, '-', xml_decl_encoding_value_iso_8859_1_state5) +ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state5, '1', xml_decl_encoding_value_iso_8859_1_state6) + +FAXPP_Error +xml_decl_encoding_value_iso_8859_1_state6(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_ISO_8859_1_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_ISO_8859_1_TOKEN, env); + next_char(env); + } + else { + retrieve_state(env); + } + break; + default: + retrieve_state(env); + break; + } + return NO_ERROR; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +FAXPP_Error +xml_decl_encoding_value_quot_state(FAXPP_TokenizerEnv *env) +{ + read_char(env); + + switch(env->current_char) { + case '"': env->state = xml_decl_standalone_ws_state; - next_char(env); - return INVALID_ENCODING_VALUE; + token_end_position(env); + report_token(XML_DECL_ENCODING_TOKEN, env); + break; 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_apos_state2; + case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': case '_': case '-': break; LINE_ENDINGS default: @@ -427,7 +749,7 @@ } FAXPP_Error -xml_decl_encoding_value_apos_state2(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_apos_state(FAXPP_TokenizerEnv *env) { read_char(env); Modified: trunk/faxpp/tests/xmlconf_runner.c =================================================================== --- trunk/faxpp/tests/xmlconf_runner.c 2007-08-09 10:29:57 UTC (rev 11) +++ trunk/faxpp/tests/xmlconf_runner.c 2007-08-11 00:29:45 UTC (rev 12) @@ -214,7 +214,7 @@ *ptr = 0; } -FAXPP_Error run_test_case(const char *filename) +FAXPP_Error run_test_case(const char *filename, unsigned int *errLine) { FAXPP_Parser *testparser = FAXPP_create_parser(WELL_FORMED_PARSE_MODE, FAXPP_utf8_encode); @@ -225,11 +225,15 @@ } FAXPP_Error err = FAXPP_init_parse_file(testparser, file); - if(err != NO_ERROR) error(err, 0, 0); + if(err == NO_ERROR) { + while((err = FAXPP_next_event(testparser)) == 0) { + if(FAXPP_get_current_event(testparser)->type == END_DOCUMENT_EVENT) + break; + } + } - while((err = FAXPP_next_event(testparser)) == 0) { - if(FAXPP_get_current_event(testparser)->type == END_DOCUMENT_EVENT) - break; + if(err != 0) { + *errLine = FAXPP_get_error_line(testparser); } fclose(file); @@ -247,6 +251,7 @@ char base_buffer[1024]; char file_buffer[1024]; FAXPP_Error result; + unsigned int errLine; int output_events = 0; int test_failures = 0; @@ -313,7 +318,7 @@ attr = find_attribute(event, "URI"); calculateBase(base_buffer, &attr->value, file_buffer); - result = run_test_case(file_buffer); + result = run_test_case(file_buffer, &errLine); if(result == DOCTYPE_NOT_IMPLEMENTED) { printf("^"); fflush(stdout); @@ -358,6 +363,10 @@ output_attr_value(&attr->value, stderr); } + if(result != NO_ERROR) { + fprintf(stderr, "\nError: %s:%i", FAXPP_err_to_string(result), errLine); + } + fprintf(stderr, "\n"); if(event->type == SELF_CLOSING_ELEMENT_EVENT) { fprintf(stderr, "\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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(xml_decl_encoding_value_ucs4_state6, '-', xml_decl_encoding_value_ucs4_state7) -ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state7, 'U', 'u', xml_decl_encoding_value_ucs4_state8) -ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state8, 'C', 'c', xml_decl_encoding_value_ucs4_state9) -ENCODING_VALUE_STATE2(xml_decl_encoding_value_ucs4_state9, 'S', 's', xml_decl_encoding_value_ucs4_state10) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state10, '-', xml_decl_encoding_value_ucs4_state11) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_ucs4_state11, '4', xml_decl_encoding_value_ucs4_state12) - FAXPP_Error -xml_decl_encoding_value_ucs4_state12(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_apos_state1(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_UCS4_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_UCS4_TOKEN, env); - next_char(env); - } - else { - retrieve_state(env); - } - break; - default: - retrieve_state(env); - break; - } - return NO_ERROR; -} - -ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state1, '8', xml_decl_encoding_value_iso_8859_1_state2) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state2, '5', xml_decl_encoding_value_iso_8859_1_state3) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state3, '9', xml_decl_encoding_value_iso_8859_1_state4) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state4, '-', xml_decl_encoding_value_iso_8859_1_state5) -ENCODING_VALUE_STATE1(xml_decl_encoding_value_iso_8859_1_state5, '1', xml_decl_encoding_value_iso_8859_1_state6) - -FAXPP_Error -xml_decl_encoding_value_iso_8859_1_state6(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_ISO_8859_1_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_ISO_8859_1_TOKEN, env); - next_char(env); - } - else { - retrieve_state(env); - } - break; - default: - retrieve_state(env); - break; - } - return NO_ERROR; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -FAXPP_Error -xml_decl_encoding_value_quot_state(FAXPP_TokenizerEnv *env) -{ - read_char(env); - - switch(env->current_char) { - case '"': env->state = xml_decl_standalone_ws_state; - token_end_position(env); - report_token(XML_DECL_ENCODING_TOKEN, env); - break; + 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': - case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '.': case '_': case '-': + env->state = xml_decl_encoding_value_apos_state2; break; LINE_ENDINGS default: @@ -754,7 +432,7 @@ } FAXPP_Error -xml_decl_encoding_value_apos_state(FAXPP_TokenizerEnv *env) +xml_decl_encoding_value_apos_state2(FAXPP_TokenizerEnv *env) { read_char(env); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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) $(LIBTOOLFLAGS) --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@ mv -f $(DEPDIR)/transcode.Tpo $(DEPDIR)/transcode.Plo @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 +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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 +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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@ mv -f $(DEPDIR)/xmldecl.Tpo $(DEPDIR)/xmldecl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/xmldecl.c' object='xmldecl.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 xmldecl.lo `test -f 'src/xmldecl.c' || echo '$(srcdir)/'`src/xmldecl.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 xmldecl.lo `test -f 'src/xmldecl.c' || echo '$(srcdir)/'`src/xmldecl.c 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 +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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@ mv -f $(DEPDIR)/xml_parser.Tpo $(DEPDIR)/xml_parser.Plo @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 xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.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 xml_parser.lo `test -f 'src/xml_parser.c' || echo '$(srcdir)/'`src/xml_parser.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 +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --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@ mv -f $(DEPDIR)/xml_tokenizer.Tpo $(DEPDIR)/xml_tokenizer.Plo @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) $(CFLAGS) -c -o xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.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 xml_tokenizer.lo `test -f 'src/xml_tokenizer.c' || echo '$(srcdir)/'`src/xml_tokenizer.c parser_example.o: examples/parser_example.c -@am__fastdepCC_TRUE@ if $(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@ then mv -f "$(DEPDIR)/parser_example.Tpo" "$(DEPDIR)/parser_example.Po"; else rm -f "$(DEPDIR)/parser_example.Tpo"; exit 1; fi +@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 @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/parser_example.c' object='parser_example.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 parser_example.o `test -f 'examples/parser_example.c' || echo '$(srcdir)/'`examples/parser_example.c parser_example.obj: examples/parser_example.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser_example.obj -MD -MP -MF "$(DEPDIR)/parser_example.Tpo" -c -o parser_example.obj `if test -f 'examples/parser_example.c'; then $(CYGPATH_W) 'examples/parser_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/parser_example.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/parser_example.Tpo" "$(DEPDIR)/parser_example.Po"; else rm -f "$(DEPDIR)/parser_example.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT parser_example.obj -MD -MP -MF $(DEPDIR)/parser_example.Tpo -c -o parser_example.obj `if test -f 'examples/parser_example.c'; then $(CYGPATH_W) 'examples/parser_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/parser_example.c'; fi` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/parser_example.Tpo $(DEPDIR)/parser_example.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/parser_example.c' object='parser_example.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 parser_example.obj `if test -f 'examples/parser_example.c'; then $(CYGPATH_W) 'examples/parser_example.c'; else $(CYGPATH_W) '$(srcdir)/examples/parser_example.c'; fi` tokenizer_example.o: examples/tokenizer_example.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.o -MD -MP -MF "$(DEPDIR)/tokenizer_example.Tpo" -c -o tokenizer_example.o `test -f 'examples/tokenizer_example.c' || echo '$(srcdir)/'`examples/tokenizer_example.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_example.Tpo" "$(DEPDIR)/tokenizer_example.Po"; else rm -f "$(DEPDIR)/tokenizer_example.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.o -MD -MP -MF $(DEPDIR)/tokenizer_example.Tpo -c -o tokenizer_example.o `test -f 'examples/tokenizer_example.c' || echo '$(srcdir)/'`examples/tokenizer_example.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/tokenizer_example.Tpo $(DEPDIR)/tokenizer_example.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/tokenizer_example.c' object='tokenizer_example.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 tokenizer_example.o `test -f 'examples/tokenizer_example.c' || echo '$(srcdir)/'`examples/tokenizer_example.c tokenizer_example.obj: examples/tokenizer_example.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.obj -MD -MP -MF "$(DEPDIR)/tokenizer_example.Tpo" -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`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/tokenizer_example.Tpo" "$(DEPDIR)/tokenizer_example.Po"; else rm -f "$(DEPDIR)/tokenizer_example.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tokenizer_example.obj -MD -MP -MF $(DEPDIR)/tokenizer_example.Tpo -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` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/tokenizer_example.Tpo $(DEPDIR)/tokenizer_example.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='examples/tokenizer_example.c' object='tokenizer_example.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 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 +@am__fastdepCC_TRUE@ $(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@ mv -f $(DEPDIR)/xmlconf_runner.Tpo $(DEPDIR)/xmlconf_runner.Po @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 +@am__fastdepCC_TRUE@ $(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@ mv -f $(DEPDIR)/xmlconf_runner.Tpo $(DEPDIR)/xmlconf_runner.Po @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` @@ -560,7 +568,6 @@ distclean-libtool: -rm -f libtool -uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -593,8 +600,7 @@ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -696,24 +702,22 @@ distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/autotools $(distdir)/docs $(distdir)/src - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d $(distdir) || mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ @@ -727,7 +731,7 @@ list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ @@ -735,6 +739,8 @@ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ distdir) \ || exit 1; \ fi; \ @@ -742,7 +748,7 @@ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz @@ -818,7 +824,7 @@ $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ @@ -843,7 +849,7 @@ installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive @@ -893,12 +899,20 @@ install-data-am: +install-dvi: install-dvi-recursive + install-exec-am: install-libLTLIBRARIES +install-html: install-html-recursive + install-info: install-info-recursive install-man: +install-pdf: install-pdf-recursive + +install-ps: install-ps-recursive + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -921,26 +935,28 @@ ps-am: -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES +uninstall-am: uninstall-libLTLIBRARIES -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ + install-strip -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-generic clean-libLTLIBRARIES \ - clean-libtool clean-noinstPROGRAMS clean-recursive ctags \ +.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-recursive distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-strip installcheck \ - installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am \ + 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 \ uninstall-libLTLIBRARIES Modified: trunk/faxpp/aclocal.m4 =================================================================== --- trunk/faxpp/aclocal.m4 2007-08-19 23:48:57 UTC (rev 20) +++ trunk/faxpp/aclocal.m4 2007-08-19 23:51:41 UTC (rev 21) @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.10 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006 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,6 +11,11 @@ # 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])]) + # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 48 Debian 1.5.22-4 AC_PROG_LIBTOOL @@ -6380,7 +6385,7 @@ AC_MSG_RESULT([$SED]) ]) -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6390,14 +6395,29 @@ # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.10])dnl +_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -6454,14 +6474,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 # 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. -# serial 7 +# serial 8 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6470,8 +6490,10 @@ [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6485,15 +6507,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 # 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. -# serial 8 +# serial 9 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6521,6 +6542,7 @@ ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -6586,6 +6608,7 @@ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then @@ -6638,7 +6661,8 @@ AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- @@ -6663,8 +6687,9 @@ # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed 10q "$mf" | grep '^#.*generated by automake' > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue @@ -6723,8 +6748,8 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6747,16 +6772,20 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl +[AC_PREREQ([2.60])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -6776,6 +6805,9 @@ AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -6811,6 +6843,10 @@ [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) ]) @@ -6846,7 +6882,7 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} +install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -6924,14 +6960,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 # 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. -# serial 4 +# serial 5 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -6947,6 +6983,7 @@ # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL ... [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. |